diff --git a/.hgtags b/.hgtags index 1bd0c05f284..15669b3da62 100644 --- a/.hgtags +++ b/.hgtags @@ -244,3 +244,4 @@ f5b521ade7a35cea18df78ee86322207729f5611 jdk8-b118 a1ee9743f4ee165eae59389a020f2552f895dac8 jdk8-b120 13b877757b0b1c0d5813298df85364f41d7ba6fe jdk9-b00 f130ca87de6637acae7d99fcd7a8573eea1cbaed jdk9-b01 +b32e2219736e42baaf45daf0ad67ed34f6033799 jdk9-b02 diff --git a/.hgtags-top-repo b/.hgtags-top-repo index 6a7cb46c540..fe1310f80db 100644 --- a/.hgtags-top-repo +++ b/.hgtags-top-repo @@ -244,3 +244,4 @@ a4afb0a8d55ef75aef5b0d77b434070468fb89f8 jdk8-b117 cd3825b2983045784d6fc6d1729c799b08215752 jdk8-b120 1e1f86d5d4e22c15a9bf9f1581acddb8c59abae2 jdk9-b00 50669e45cec4491de0d921d3118a3fe2e767020a jdk9-b01 +135f0c7af57ebace31383d8877f47e32172759ff jdk9-b02 diff --git a/common/autoconf/basics.m4 b/common/autoconf/basics.m4 index 9ef7b0400da..d34615d5a2a 100644 --- a/common/autoconf/basics.m4 +++ b/common/autoconf/basics.m4 @@ -236,35 +236,119 @@ AC_DEFUN_ONCE([BASIC_INIT], # Test that variable $1 denoting a program is not empty. If empty, exit with an error. # $1: variable to check -# $2: executable name to print in warning (optional) AC_DEFUN([BASIC_CHECK_NONEMPTY], [ if test "x[$]$1" = x; then - if test "x$2" = x; then - PROG_NAME=translit($1,A-Z,a-z) - else - PROG_NAME=$2 - fi - AC_MSG_NOTICE([Could not find $PROG_NAME!]) - AC_MSG_ERROR([Cannot continue]) + AC_MSG_ERROR([Could not find required tool for $1]) fi ]) -# Does AC_PATH_PROG followed by BASIC_CHECK_NONEMPTY. -# Arguments as AC_PATH_PROG: -# $1: variable to set -# $2: executable name to look for -AC_DEFUN([BASIC_REQUIRE_PROG], +# Check that there are no unprocessed overridden variables left. +# If so, they are an incorrect argument and we will exit with an error. +AC_DEFUN([BASIC_CHECK_LEFTOVER_OVERRIDDEN], [ - AC_PATH_PROGS($1, $2) - BASIC_CHECK_NONEMPTY($1, $2) + if test "x$CONFIGURE_OVERRIDDEN_VARIABLES" != x; then + # Replace the separating ! with spaces before presenting for end user. + unknown_variables=${CONFIGURE_OVERRIDDEN_VARIABLES//!/ } + AC_MSG_WARN([The following variables might be unknown to configure: $unknown_variables]) + fi +]) + +# Setup a tool for the given variable. If correctly specified by the user, +# use that value, otherwise search for the tool using the supplied code snippet. +# $1: variable to set +# $2: code snippet to call to look for the tool +AC_DEFUN([BASIC_SETUP_TOOL], +[ + # Publish this variable in the help. + AC_ARG_VAR($1, [Override default value for $1]) + + if test "x[$]$1" = x; then + # The variable is not set by user, try to locate tool using the code snippet + $2 + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !$1! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!$1!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "x$1" != xBASH; then + AC_MSG_WARN([Ignoring value of $1 from the environment. Use command line variables instead.]) + fi + # Try to locate tool using the code snippet + $2 + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="[$]$1" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + AC_MSG_NOTICE([Will search for user supplied tool $1=$tool_basename]) + AC_PATH_PROG($1, $tool_basename) + if test "x[$]$1" = x; then + AC_MSG_ERROR([User supplied tool $tool_basename could not be found]) + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + AC_MSG_NOTICE([Will use user supplied tool $1=$tool_specified]) + AC_MSG_CHECKING([for $1]) + if test ! -x "$tool_specified"; then + AC_MSG_RESULT([not found]) + AC_MSG_ERROR([User supplied tool $1=$tool_specified does not exist or is not executable]) + fi + AC_MSG_RESULT([$tool_specified]) + fi + fi + fi +]) + +# Call BASIC_SETUP_TOOL with AC_PATH_PROGS to locate the tool +# $1: variable to set +# $2: executable name (or list of names) to look for +AC_DEFUN([BASIC_PATH_PROGS], +[ + BASIC_SETUP_TOOL($1, [AC_PATH_PROGS($1, $2)]) +]) + +# Call BASIC_SETUP_TOOL with AC_CHECK_TOOLS to locate the tool +# $1: variable to set +# $2: executable name (or list of names) to look for +AC_DEFUN([BASIC_CHECK_TOOLS], +[ + BASIC_SETUP_TOOL($1, [AC_CHECK_TOOLS($1, $2)]) +]) + +# Like BASIC_PATH_PROGS but fails if no tool was found. +# $1: variable to set +# $2: executable name (or list of names) to look for +AC_DEFUN([BASIC_REQUIRE_PROGS], +[ + BASIC_PATH_PROGS($1, $2) + BASIC_CHECK_NONEMPTY($1) +]) + +# Like BASIC_SETUP_TOOL but fails if no tool was found. +# $1: variable to set +# $2: autoconf macro to call to look for the special tool +AC_DEFUN([BASIC_REQUIRE_SPECIAL], +[ + BASIC_SETUP_TOOL($1, [$2]) + BASIC_CHECK_NONEMPTY($1) ]) # Setup the most fundamental tools that relies on not much else to set up, # but is used by much of the early bootstrap code. AC_DEFUN_ONCE([BASIC_SETUP_FUNDAMENTAL_TOOLS], [ - # Start with tools that do not need have cross compilation support # and can be expected to be found in the default PATH. These tools are # used by configure. Nor are these tools expected to be found in the @@ -272,57 +356,50 @@ AC_DEFUN_ONCE([BASIC_SETUP_FUNDAMENTAL_TOOLS], # needed to download the devkit. # First are all the simple required tools. - BASIC_REQUIRE_PROG(BASENAME, basename) - BASIC_REQUIRE_PROG(BASH, bash) - BASIC_REQUIRE_PROG(CAT, cat) - BASIC_REQUIRE_PROG(CHMOD, chmod) - BASIC_REQUIRE_PROG(CMP, cmp) - BASIC_REQUIRE_PROG(COMM, comm) - BASIC_REQUIRE_PROG(CP, cp) - BASIC_REQUIRE_PROG(CPIO, cpio) - BASIC_REQUIRE_PROG(CUT, cut) - BASIC_REQUIRE_PROG(DATE, date) - BASIC_REQUIRE_PROG(DIFF, [gdiff diff]) - BASIC_REQUIRE_PROG(DIRNAME, dirname) - BASIC_REQUIRE_PROG(ECHO, echo) - BASIC_REQUIRE_PROG(EXPR, expr) - BASIC_REQUIRE_PROG(FILE, file) - BASIC_REQUIRE_PROG(FIND, find) - BASIC_REQUIRE_PROG(HEAD, head) - BASIC_REQUIRE_PROG(LN, ln) - BASIC_REQUIRE_PROG(LS, ls) - BASIC_REQUIRE_PROG(MKDIR, mkdir) - BASIC_REQUIRE_PROG(MKTEMP, mktemp) - BASIC_REQUIRE_PROG(MV, mv) - BASIC_REQUIRE_PROG(PRINTF, printf) - BASIC_REQUIRE_PROG(RM, rm) - BASIC_REQUIRE_PROG(SH, sh) - BASIC_REQUIRE_PROG(SORT, sort) - BASIC_REQUIRE_PROG(TAIL, tail) - BASIC_REQUIRE_PROG(TAR, tar) - BASIC_REQUIRE_PROG(TEE, tee) - BASIC_REQUIRE_PROG(TOUCH, touch) - BASIC_REQUIRE_PROG(TR, tr) - BASIC_REQUIRE_PROG(UNAME, uname) - BASIC_REQUIRE_PROG(UNIQ, uniq) - BASIC_REQUIRE_PROG(WC, wc) - BASIC_REQUIRE_PROG(WHICH, which) - BASIC_REQUIRE_PROG(XARGS, xargs) + BASIC_REQUIRE_PROGS(BASENAME, basename) + BASIC_REQUIRE_PROGS(BASH, bash) + BASIC_REQUIRE_PROGS(CAT, cat) + BASIC_REQUIRE_PROGS(CHMOD, chmod) + BASIC_REQUIRE_PROGS(CMP, cmp) + BASIC_REQUIRE_PROGS(COMM, comm) + BASIC_REQUIRE_PROGS(CP, cp) + BASIC_REQUIRE_PROGS(CPIO, cpio) + BASIC_REQUIRE_PROGS(CUT, cut) + BASIC_REQUIRE_PROGS(DATE, date) + BASIC_REQUIRE_PROGS(DIFF, [gdiff diff]) + BASIC_REQUIRE_PROGS(DIRNAME, dirname) + BASIC_REQUIRE_PROGS(ECHO, echo) + BASIC_REQUIRE_PROGS(EXPR, expr) + BASIC_REQUIRE_PROGS(FILE, file) + BASIC_REQUIRE_PROGS(FIND, find) + BASIC_REQUIRE_PROGS(HEAD, head) + BASIC_REQUIRE_PROGS(LN, ln) + BASIC_REQUIRE_PROGS(LS, ls) + BASIC_REQUIRE_PROGS(MKDIR, mkdir) + BASIC_REQUIRE_PROGS(MKTEMP, mktemp) + BASIC_REQUIRE_PROGS(MV, mv) + BASIC_REQUIRE_PROGS(NAWK, [nawk gawk awk]) + BASIC_REQUIRE_PROGS(PRINTF, printf) + BASIC_REQUIRE_PROGS(RM, rm) + BASIC_REQUIRE_PROGS(SH, sh) + BASIC_REQUIRE_PROGS(SORT, sort) + BASIC_REQUIRE_PROGS(TAIL, tail) + BASIC_REQUIRE_PROGS(TAR, tar) + BASIC_REQUIRE_PROGS(TEE, tee) + BASIC_REQUIRE_PROGS(TOUCH, touch) + BASIC_REQUIRE_PROGS(TR, tr) + BASIC_REQUIRE_PROGS(UNAME, uname) + BASIC_REQUIRE_PROGS(UNIQ, uniq) + BASIC_REQUIRE_PROGS(WC, wc) + BASIC_REQUIRE_PROGS(WHICH, which) + BASIC_REQUIRE_PROGS(XARGS, xargs) # Then required tools that require some special treatment. - AC_PROG_AWK - BASIC_CHECK_NONEMPTY(AWK) - AC_PROG_GREP - BASIC_CHECK_NONEMPTY(GREP) - AC_PROG_EGREP - BASIC_CHECK_NONEMPTY(EGREP) - AC_PROG_FGREP - BASIC_CHECK_NONEMPTY(FGREP) - AC_PROG_SED - BASIC_CHECK_NONEMPTY(SED) - - AC_PATH_PROGS(NAWK, [nawk gawk awk]) - BASIC_CHECK_NONEMPTY(NAWK) + BASIC_REQUIRE_SPECIAL(AWK, [AC_PROG_AWK]) + BASIC_REQUIRE_SPECIAL(GREP, [AC_PROG_GREP]) + BASIC_REQUIRE_SPECIAL(EGREP, [AC_PROG_EGREP]) + BASIC_REQUIRE_SPECIAL(FGREP, [AC_PROG_FGREP]) + BASIC_REQUIRE_SPECIAL(SED, [AC_PROG_SED]) # Always force rm. RM="$RM -f" @@ -332,10 +409,10 @@ AC_DEFUN_ONCE([BASIC_SETUP_FUNDAMENTAL_TOOLS], THEPWDCMD=pwd # These are not required on all platforms - AC_PATH_PROG(CYGPATH, cygpath) - AC_PATH_PROG(READLINK, readlink) - AC_PATH_PROG(DF, df) - AC_PATH_PROG(SETFILE, SetFile) + BASIC_PATH_PROGS(CYGPATH, cygpath) + BASIC_PATH_PROGS(READLINK, [greadlink readlink]) + BASIC_PATH_PROGS(DF, df) + BASIC_PATH_PROGS(SETFILE, SetFile) ]) # Setup basic configuration paths, and platform-specific stuff related to PATHs. @@ -622,26 +699,26 @@ AC_DEFUN_ONCE([BASIC_SETUP_COMPLEX_TOOLS], # These tools might not be installed by default, # need hint on how to install them. - BASIC_REQUIRE_PROG(UNZIP, unzip) - BASIC_REQUIRE_PROG(ZIP, zip) + BASIC_REQUIRE_PROGS(UNZIP, unzip) + BASIC_REQUIRE_PROGS(ZIP, zip) # Non-required basic tools - AC_PATH_PROG(LDD, ldd) + BASIC_PATH_PROGS(LDD, ldd) if test "x$LDD" = "x"; then # List shared lib dependencies is used for # debug output and checking for forbidden dependencies. # We can build without it. LDD="true" fi - AC_PATH_PROG(OTOOL, otool) + BASIC_PATH_PROGS(OTOOL, otool) if test "x$OTOOL" = "x"; then OTOOL="true" fi - AC_PATH_PROGS(READELF, [readelf greadelf]) - AC_PATH_PROG(HG, hg) - AC_PATH_PROG(STAT, stat) - AC_PATH_PROG(TIME, time) + BASIC_PATH_PROGS(READELF, [greadelf readelf]) + BASIC_PATH_PROGS(HG, hg) + BASIC_PATH_PROGS(STAT, stat) + BASIC_PATH_PROGS(TIME, time) # Check if it's GNU time IS_GNU_TIME=`$TIME --version 2>&1 | $GREP 'GNU time'` if test "x$IS_GNU_TIME" != x; then @@ -652,13 +729,13 @@ AC_DEFUN_ONCE([BASIC_SETUP_COMPLEX_TOOLS], AC_SUBST(IS_GNU_TIME) if test "x$OPENJDK_TARGET_OS" = "xwindows"; then - BASIC_REQUIRE_PROG(COMM, comm) + BASIC_REQUIRE_PROGS(COMM, comm) fi if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then - BASIC_REQUIRE_PROG(DSYMUTIL, dsymutil) - BASIC_REQUIRE_PROG(XATTR, xattr) - AC_PATH_PROG(CODESIGN, codesign) + BASIC_REQUIRE_PROGS(DSYMUTIL, dsymutil) + BASIC_REQUIRE_PROGS(XATTR, xattr) + BASIC_PATH_PROGS(CODESIGN, codesign) if test "x$CODESIGN" != "x"; then # Verify that the openjdk_codesign certificate is present AC_MSG_CHECKING([if openjdk_codesign certificate is present]) @@ -720,6 +797,9 @@ AC_DEFUN_ONCE([BASIC_CHECK_SRC_PERMS], AC_DEFUN_ONCE([BASIC_TEST_USABILITY_ISSUES], [ + # Did user specify any unknown variables? + BASIC_CHECK_LEFTOVER_OVERRIDDEN + AC_MSG_CHECKING([if build directory is on local disk]) BASIC_CHECK_DIR_ON_LOCAL_DISK($OUTPUT_ROOT, [OUTPUT_DIR_IS_LOCAL="yes"], @@ -738,12 +818,4 @@ AC_DEFUN_ONCE([BASIC_TEST_USABILITY_ISSUES], else IS_RECONFIGURE=no fi - - if test -e $SRC_ROOT/build/.hide-configure-performance-hints; then - HIDE_PERFORMANCE_HINTS=yes - else - HIDE_PERFORMANCE_HINTS=no - # Hide it the next time around... - $TOUCH $SRC_ROOT/build/.hide-configure-performance-hints > /dev/null 2>&1 - fi ]) diff --git a/common/autoconf/boot-jdk.m4 b/common/autoconf/boot-jdk.m4 index a4805a92c03..dde3c926c2f 100644 --- a/common/autoconf/boot-jdk.m4 +++ b/common/autoconf/boot-jdk.m4 @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2014, 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 @@ -23,6 +23,34 @@ # questions. # +######################################################################## +# This file handles detection of the Boot JDK. The Boot JDK detection +# process has been developed as a response to solve a complex real-world +# problem. Initially, it was simple, but it has grown as platform after +# platform, idiosyncracy after idiosyncracy has been supported. +# +# The basic idea is this: +# 1) You need an acceptable *) JDK to use as a Boot JDK +# 2) There are several ways to locate a JDK, that are mostly platform +# dependent **) +# 3) You can have multiple JDKs installed +# 4) If possible, configure should try to dig out an acceptable JDK +# automatically, without having to resort to command-line options +# +# *) acceptable means e.g. JDK7 for building JDK8, a complete JDK (with +# javac) and not a JRE, etc. +# +# **) On Windows we typically use a well-known path. +# On MacOSX we typically use the tool java_home. +# On Linux we typically find javac in the $PATH, and then follow a +# chain of symlinks that often ends up in a real JDK. +# +# This leads to the code where we check in different ways to locate a +# JDK, and if one is found, check if it is acceptable. If not, we print +# our reasons for rejecting it (useful when debugging non-working +# configure situations) and continue checking the next one. +######################################################################## + # Execute the check given as argument, and verify the result # If the Boot JDK was previously found, do nothing # $1 A command line (typically autoconf macro) to execute @@ -54,10 +82,10 @@ AC_DEFUN([BOOTJDK_DO_CHECK], BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - [FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'`] - if test "x$FOUND_VERSION_78" = x; then + [FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'`] + if test "x$FOUND_CORRECT_VERSION" = x; then AC_MSG_NOTICE([Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring]) - AC_MSG_NOTICE([(Your Boot JDK must be version 7 or 8)]) + AC_MSG_NOTICE([(Your Boot JDK must be version 7, 8 or 9)]) BOOT_JDK_FOUND=no else # We're done! :-) @@ -136,12 +164,26 @@ AC_DEFUN([BOOTJDK_CHECK_JAVA_IN_PATH_IS_SYMLINK], ]) # Test: Is there a /usr/libexec/java_home? (Typically on MacOSX) +# $1: Argument to the java_home binary (optional) AC_DEFUN([BOOTJDK_CHECK_LIBEXEC_JAVA_HOME], [ if test -x /usr/libexec/java_home; then - BOOT_JDK=`/usr/libexec/java_home` + BOOT_JDK=`/usr/libexec/java_home $1` BOOT_JDK_FOUND=maybe - AC_MSG_NOTICE([Found potential Boot JDK using /usr/libexec/java_home]) + AC_MSG_NOTICE([Found potential Boot JDK using /usr/libexec/java_home $1]) + fi +]) + +# Test: On MacOS X, can we find a boot jdk using /usr/libexec/java_home? +AC_DEFUN([BOOTJDK_CHECK_MACOSX_JAVA_LOCATOR], +[ + if test "x$OPENJDK_TARGET_OS" = xmacosx; then + # First check at user selected default + BOOTJDK_DO_CHECK([BOOTJDK_CHECK_LIBEXEC_JAVA_HOME()]) + # If that did not work out (e.g. too old), try explicit versions instead + BOOTJDK_DO_CHECK([BOOTJDK_CHECK_LIBEXEC_JAVA_HOME([-v 1.9])]) + BOOTJDK_DO_CHECK([BOOTJDK_CHECK_LIBEXEC_JAVA_HOME([-v 1.8])]) + BOOTJDK_DO_CHECK([BOOTJDK_CHECK_LIBEXEC_JAVA_HOME([-v 1.7])]) fi ]) @@ -201,14 +243,19 @@ AC_DEFUN([BOOTJDK_CHECK_WELL_KNOWN_LOCATIONS], # $2 = name of binary AC_DEFUN([BOOTJDK_CHECK_TOOL_IN_BOOTJDK], [ - AC_MSG_CHECKING([for $2 in Boot JDK]) - $1=$BOOT_JDK/bin/$2 - if test ! -x [$]$1; then - AC_MSG_RESULT(not found) - AC_MSG_NOTICE([Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk]) - AC_MSG_ERROR([Could not find $2 in the Boot JDK]) - fi - AC_MSG_RESULT(ok) + # Use user overridden value if available, otherwise locate tool in the Boot JDK. + BASIC_SETUP_TOOL($1, + [ + AC_MSG_CHECKING([for $2 in Boot JDK]) + $1=$BOOT_JDK/bin/$2 + if test ! -x [$]$1; then + AC_MSG_RESULT(not found) + AC_MSG_NOTICE([Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk]) + AC_MSG_ERROR([Could not find $2 in the Boot JDK]) + fi + AC_MSG_RESULT(ok) + AC_SUBST($1) + ]) ]) ############################################################################### @@ -238,12 +285,12 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK], # Test: Is bootjdk available from builddeps? BOOTJDK_DO_CHECK([BOOTJDK_CHECK_BUILDDEPS]) + # Test: On MacOS X, can we find a boot jdk using /usr/libexec/java_home? + BOOTJDK_DO_CHECK([BOOTJDK_CHECK_MACOSX_JAVA_LOCATOR]) + # Test: Is $JAVA_HOME set? BOOTJDK_DO_CHECK([BOOTJDK_CHECK_JAVA_HOME]) - # Test: Is there a /usr/libexec/java_home? (Typically on MacOSX) - BOOTJDK_DO_CHECK([BOOTJDK_CHECK_LIBEXEC_JAVA_HOME]) - # Test: Is there a java or javac in the PATH, which is a symlink to the JDK? BOOTJDK_DO_CHECK([BOOTJDK_CHECK_JAVA_IN_PATH_IS_SYMLINK]) @@ -275,13 +322,12 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK], AC_SUBST(BOOT_JDK) # Setup tools from the Boot JDK. - BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAVA,java) - BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAVAC,javac) - BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAVAH,javah) - BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAVAP,javap) - BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAR,jar) - BOOTJDK_CHECK_TOOL_IN_BOOTJDK(RMIC,rmic) - BOOTJDK_CHECK_TOOL_IN_BOOTJDK(NATIVE2ASCII,native2ascii) + BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAVA, java) + BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAVAC, javac) + BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAVAH, javah) + BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAR, jar) + BOOTJDK_CHECK_TOOL_IN_BOOTJDK(NATIVE2ASCII, native2ascii) + BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JARSIGNER, jarsigner) # Finally, set some other options... @@ -316,7 +362,7 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK_ARGUMENTS], # Minimum amount of heap memory. ADD_JVM_ARG_IF_OK([-Xms64M],boot_jdk_jvmargs,[$JAVA]) - if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then + if test "x$OPENJDK_TARGET_OS" = "xmacosx" || test "x$OPENJDK_TARGET_CPU" = "xppc64" ; then # Why does macosx need more heap? Its the huge JDK batch. ADD_JVM_ARG_IF_OK([-Xmx1600M],boot_jdk_jvmargs,[$JAVA]) else diff --git a/common/autoconf/build-aux/config.guess b/common/autoconf/build-aux/config.guess index bd41aec580d..b0c03a79629 100644 --- a/common/autoconf/build-aux/config.guess +++ b/common/autoconf/build-aux/config.guess @@ -60,4 +60,20 @@ if test $? = 0; then esac fi +# Test and fix architecture string on AIX +# On AIX 'config.guess' returns 'powerpc' as architecture but 'powerpc' is +# implicitely handled as 32-bit architecture in 'platform.m4' so we check +# for the kernel mode rewrite it to 'powerpc64' if we'Re running in 64-bit mode. +# The check could also be done with `/usr/sbin/prtconf | grep "Kernel Type" | grep "64-bit"` +echo $OUT | grep powerpc-ibm-aix > /dev/null 2> /dev/null +if test $? = 0; then + if [ -x /bin/getconf ] ; then + KERNEL_BITMODE=`getconf KERNEL_BITMODE` + if [ "$KERNEL_BITMODE" = "32" ]; then + KERNEL_BITMODE="" + fi + fi + OUT=powerpc$KERNEL_BITMODE`echo $OUT | sed -e 's/[^-]*//'` +fi + echo $OUT diff --git a/common/autoconf/build-performance.m4 b/common/autoconf/build-performance.m4 index ff7b250508f..1bf5628485c 100644 --- a/common/autoconf/build-performance.m4 +++ b/common/autoconf/build-performance.m4 @@ -41,6 +41,9 @@ AC_DEFUN([BPERF_CHECK_CORES], # Looks like a MacOSX system NUM_CORES=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Cores' | awk '{print [$]5}'` FOUND_CORES=yes + elif test "x$OPENJDK_BUILD_OS" = xaix ; then + NUM_CORES=`/usr/sbin/prtconf | grep "^Number Of Processors" | awk '{ print [$]4 }'` + FOUND_CORES=yes elif test -n "$NUMBER_OF_PROCESSORS"; then # On windows, look in the env NUM_CORES=$NUMBER_OF_PROCESSORS @@ -68,8 +71,8 @@ AC_DEFUN([BPERF_CHECK_MEMORY_SIZE], MEMORY_SIZE=`expr $MEMORY_SIZE / 1024` FOUND_MEM=yes elif test -x /usr/sbin/prtconf; then - # Looks like a Solaris system - MEMORY_SIZE=`/usr/sbin/prtconf | grep "Memory size" | awk '{ print [$]3 }'` + # Looks like a Solaris or AIX system + MEMORY_SIZE=`/usr/sbin/prtconf | grep "^Memory [[Ss]]ize" | awk '{ print [$]3 }'` FOUND_MEM=yes elif test -x /usr/sbin/system_profiler; then # Looks like a MacOSX system @@ -157,20 +160,28 @@ AC_DEFUN_ONCE([BPERF_SETUP_BUILD_JOBS], AC_DEFUN([BPERF_SETUP_CCACHE], [ AC_ARG_ENABLE([ccache], - [AS_HELP_STRING([--disable-ccache], - [disable using ccache to speed up recompilations @<:@enabled@:>@])], - [ENABLE_CCACHE=${enable_ccache}], [ENABLE_CCACHE=yes]) - if test "x$ENABLE_CCACHE" = xyes; then + [AS_HELP_STRING([--enable-ccache], + [enable using ccache to speed up recompilations @<:@disabled@:>@])]) + + CCACHE= + AC_MSG_CHECKING([is ccache enabled]) + ENABLE_CCACHE=$enable_ccache + if test "x$enable_ccache" = xyes; then + AC_MSG_RESULT([yes]) OLD_PATH="$PATH" if test "x$TOOLS_DIR" != x; then PATH=$TOOLS_DIR:$PATH fi - AC_PATH_PROG(CCACHE, ccache) + BASIC_REQUIRE_PROGS(CCACHE, ccache) + CCACHE_STATUS="enabled" PATH="$OLD_PATH" + elif test "x$enable_ccache" = xno; then + AC_MSG_RESULT([no, explicitly disabled]) + elif test "x$enable_ccache" = x; then + AC_MSG_RESULT([no]) else - AC_MSG_CHECKING([for ccache]) - AC_MSG_RESULT([explicitly disabled]) - CCACHE= + AC_MSG_RESULT([unknown]) + AC_MSG_ERROR([--enable-ccache does not accept any parameters]) fi AC_SUBST(CCACHE) @@ -182,8 +193,11 @@ AC_DEFUN([BPERF_SETUP_CCACHE], # When using a non home ccache directory, assume the use is to share ccache files # with other users. Thus change the umask. SET_CCACHE_DIR="CCACHE_DIR=$with_ccache_dir CCACHE_UMASK=002" + if test "x$CCACHE" = x; then + AC_MSG_WARN([--with-ccache-dir has no meaning when ccache is not enabled]) + fi fi - CCACHE_FOUND="" + if test "x$CCACHE" != x; then BPERF_SETUP_CCACHE_USAGE fi @@ -192,7 +206,6 @@ AC_DEFUN([BPERF_SETUP_CCACHE], AC_DEFUN([BPERF_SETUP_CCACHE_USAGE], [ if test "x$CCACHE" != x; then - CCACHE_FOUND="true" # Only use ccache if it is 3.1.4 or later, which supports # precompiled headers. AC_MSG_CHECKING([if ccache supports precompiled headers]) @@ -200,6 +213,7 @@ AC_DEFUN([BPERF_SETUP_CCACHE_USAGE], if test "x$HAS_GOOD_CCACHE" = x; then AC_MSG_RESULT([no, disabling ccache]) CCACHE= + CCACHE_STATUS="disabled" else AC_MSG_RESULT([yes]) AC_MSG_CHECKING([if C-compiler supports ccache precompiled headers]) @@ -212,6 +226,7 @@ AC_DEFUN([BPERF_SETUP_CCACHE_USAGE], else AC_MSG_RESULT([no, disabling ccaching of precompiled headers]) CCACHE= + CCACHE_STATUS="disabled" fi fi fi diff --git a/common/autoconf/configure b/common/autoconf/configure index 00a07fccae1..b73609a1de2 100644 --- a/common/autoconf/configure +++ b/common/autoconf/configure @@ -121,15 +121,23 @@ do case $conf_option in --openjdk-target=*) conf_openjdk_target=`expr "X$conf_option" : '[^=]*=\(.*\)'` - continue ;; + ;; --debug-configure) if test "x$conf_debug_configure" != xrecursive; then conf_debug_configure=true export conf_debug_configure fi - continue ;; + ;; + [^-]*=*) + # Add name of variable to CONFIGURE_OVERRIDDEN_VARIABLES list inside !...!. + conf_env_var=`expr "x$conf_option" : 'x\([^=]*\)='` + CONFIGURE_OVERRIDDEN_VARIABLES="$CONFIGURE_OVERRIDDEN_VARIABLES!$conf_env_var!" + # ... and then process argument as usual + conf_processed_arguments=("${conf_processed_arguments[@]}" "$conf_option") + ;; *) - conf_processed_arguments=("${conf_processed_arguments[@]}" "$conf_option") ;; + conf_processed_arguments=("${conf_processed_arguments[@]}" "$conf_option") + ;; esac case $conf_option in @@ -212,6 +220,9 @@ Additional (non-autoconf) OpenJDK Options: Please be aware that, when cross-compiling, the OpenJDK configure script will generally use 'target' where autoconf traditionally uses 'host'. + +Also note that variables must be passed on the command line. Variables in the +environment will generally be ignored, unlike traditional autoconf scripts. EOT fi else diff --git a/common/autoconf/configure.ac b/common/autoconf/configure.ac index 238e4a44274..7e02b636b40 100644 --- a/common/autoconf/configure.ac +++ b/common/autoconf/configure.ac @@ -88,6 +88,7 @@ JDKOPT_SETUP_OPEN_OR_CUSTOM # These are needed to be able to create a configuration name (and thus the output directory) JDKOPT_SETUP_JDK_VARIANT +JDKOPT_SETUP_JVM_INTERPRETER JDKOPT_SETUP_JVM_VARIANTS JDKOPT_SETUP_DEBUG_LEVEL diff --git a/common/autoconf/generated-configure.sh b/common/autoconf/generated-configure.sh index 43e26631193..a03ee5cdb85 100644 --- a/common/autoconf/generated-configure.sh +++ b/common/autoconf/generated-configure.sh @@ -665,6 +665,7 @@ CXXFLAGS_DEBUG_SYMBOLS CFLAGS_DEBUG_SYMBOLS ZIP_DEBUGINFO_FILES ENABLE_DEBUG_SYMBOLS +USING_BROKEN_SUSE_LD COMPILER_SUPPORTS_TARGET_BITS_FLAG ZERO_ARCHFLAG LDFLAGS_CXX_JDK @@ -715,6 +716,8 @@ ac_ct_OBJDUMP OBJDUMP ac_ct_OBJCOPY OBJCOPY +ac_ct_STRIP +ac_ct_NM MCS STRIP GNM @@ -734,6 +737,7 @@ WINLD HOTSPOT_LD HOTSPOT_CXX ARFLAGS +ac_ct_AR AR LDEXECXX LDCXX @@ -747,8 +751,9 @@ CXXFLAGS CXX ac_ct_PROPER_COMPILER_CXX PROPER_COMPILER_CXX -POTENTIAL_CXX TOOLS_DIR_CXX +POTENTIAL_CXX +COMPILER_TARGET_BITS_FLAG OBJEXT EXEEXT ac_ct_CC @@ -758,8 +763,8 @@ CFLAGS CC ac_ct_PROPER_COMPILER_CC PROPER_COMPILER_CC -POTENTIAL_CC TOOLS_DIR_CC +POTENTIAL_CC BUILD_LD BUILD_CXX BUILD_CC @@ -787,6 +792,12 @@ LANGTOOLS_TOPDIR BOOT_JDK_JVMARGS JAVAC_FLAGS BOOT_JDK_SOURCETARGET +JARSIGNER +NATIVE2ASCII +JAR +JAVAH +JAVAC +JAVA BOOT_JDK BOOT_TOOLSJAR BOOT_RTJAR @@ -851,6 +862,7 @@ VARIANT DEBUG_LEVEL MACOSX_UNIVERSAL INCLUDE_SA +JVM_VARIANT_CORE JVM_VARIANT_ZEROSHARK JVM_VARIANT_ZERO JVM_VARIANT_KERNEL @@ -858,6 +870,7 @@ JVM_VARIANT_MINIMAL1 JVM_VARIANT_CLIENT JVM_VARIANT_SERVER JVM_VARIANTS +JVM_INTERPRETER JDK_VARIANT SET_OPENJDK BUILD_LOG_WRAPPER @@ -910,7 +923,6 @@ SETFILE DF READLINK CYGPATH -NAWK SED FGREP EGREP @@ -930,6 +942,7 @@ SORT SH RM PRINTF +NAWK MV MKTEMP MKDIR @@ -1003,6 +1016,7 @@ with_tools_dir with_devkit enable_openjdk_only with_jdk_variant +with_jvm_interpreter with_jvm_variants enable_debug with_debug_level @@ -1068,7 +1082,73 @@ with_ccache_dir ac_precious_vars='build_alias host_alias target_alias +BASENAME +BASH +CAT +CHMOD +CMP +COMM +CP +CPIO +CUT +DATE +DIFF +DIRNAME +ECHO +EXPR +FILE +FIND +HEAD +LN +LS +MKDIR +MKTEMP +MV +NAWK +PRINTF +RM +SH +SORT +TAIL +TAR +TEE +TOUCH +TR +UNAME +UNIQ +WC +WHICH +XARGS +AWK +GREP +EGREP +FGREP +SED +CYGPATH +READLINK +DF +SETFILE +UNZIP +ZIP +LDD +OTOOL +READELF +HG +STAT +TIME +DSYMUTIL +XATTR +CODESIGN PKG_CONFIG +JAVA +JAVAC +JAVAH +JAR +NATIVE2ASCII +JARSIGNER +BUILD_CC +BUILD_CXX +BUILD_LD CC CFLAGS LDFLAGS @@ -1079,15 +1159,26 @@ CXXFLAGS CCC OBJC OBJCFLAGS +AR CPP CXXCPP +AS +NM +GNM +STRIP +MCS +OBJCOPY +OBJDUMP +LIPO +JTREGEXE XMKMF FREETYPE_CFLAGS FREETYPE_LIBS ALSA_CFLAGS ALSA_LIBS LIBFFI_CFLAGS -LIBFFI_LIBS' +LIBFFI_LIBS +CCACHE' # Initialize some variables set by options. @@ -1731,8 +1822,8 @@ Optional Features: --disable-precompiled-headers disable using precompiled headers when compiling C++ [enabled] - --disable-ccache disable using ccache to speed up recompilations - [enabled] + --enable-ccache enable using ccache to speed up recompilations + [disabled] Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -1747,8 +1838,10 @@ Optional Packages: --with-devkit use this directory as base for tools-dir and sys-root (for cross-compiling) --with-jdk-variant JDK variant to build (normal) [normal] + --with-jvm-interpreter JVM interpreter to build (template, cpp) [template] --with-jvm-variants JVM variants (separated by commas) to build (server, - client, minimal1, kernel, zero, zeroshark) [server] + client, minimal1, kernel, zero, zeroshark, core) + [server] --with-debug-level set the debug level (release, fastdebug, slowdebug) [release] --with-conf-name use this as the name of the configuration [generated @@ -1841,7 +1934,74 @@ Optional Packages: --with-ccache-dir where to store ccache files [~/.ccache] Some influential environment variables: + BASENAME Override default value for BASENAME + BASH Override default value for BASH + CAT Override default value for CAT + CHMOD Override default value for CHMOD + CMP Override default value for CMP + COMM Override default value for COMM + CP Override default value for CP + CPIO Override default value for CPIO + CUT Override default value for CUT + DATE Override default value for DATE + DIFF Override default value for DIFF + DIRNAME Override default value for DIRNAME + ECHO Override default value for ECHO + EXPR Override default value for EXPR + FILE Override default value for FILE + FIND Override default value for FIND + HEAD Override default value for HEAD + LN Override default value for LN + LS Override default value for LS + MKDIR Override default value for MKDIR + MKTEMP Override default value for MKTEMP + MV Override default value for MV + NAWK Override default value for NAWK + PRINTF Override default value for PRINTF + RM Override default value for RM + SH Override default value for SH + SORT Override default value for SORT + TAIL Override default value for TAIL + TAR Override default value for TAR + TEE Override default value for TEE + TOUCH Override default value for TOUCH + TR Override default value for TR + UNAME Override default value for UNAME + UNIQ Override default value for UNIQ + WC Override default value for WC + WHICH Override default value for WHICH + XARGS Override default value for XARGS + AWK Override default value for AWK + GREP Override default value for GREP + EGREP Override default value for EGREP + FGREP Override default value for FGREP + SED Override default value for SED + CYGPATH Override default value for CYGPATH + READLINK Override default value for READLINK + DF Override default value for DF + SETFILE Override default value for SETFILE + UNZIP Override default value for UNZIP + ZIP Override default value for ZIP + LDD Override default value for LDD + OTOOL Override default value for OTOOL + READELF Override default value for READELF + HG Override default value for HG + STAT Override default value for STAT + TIME Override default value for TIME + DSYMUTIL Override default value for DSYMUTIL + XATTR Override default value for XATTR + CODESIGN Override default value for CODESIGN PKG_CONFIG path to pkg-config utility + JAVA Override default value for JAVA + JAVAC Override default value for JAVAC + JAVAH Override default value for JAVAH + JAR Override default value for JAR + NATIVE2ASCII + Override default value for NATIVE2ASCII + JARSIGNER Override default value for JARSIGNER + BUILD_CC Override default value for BUILD_CC + BUILD_CXX Override default value for BUILD_CXX + BUILD_LD Override default value for BUILD_LD CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a @@ -1853,8 +2013,18 @@ Some influential environment variables: CXXFLAGS C++ compiler flags OBJC Objective C compiler command OBJCFLAGS Objective C compiler flags + AR Override default value for AR CPP C preprocessor CXXCPP C++ preprocessor + AS Override default value for AS + NM Override default value for NM + GNM Override default value for GNM + STRIP Override default value for STRIP + MCS Override default value for MCS + OBJCOPY Override default value for OBJCOPY + OBJDUMP Override default value for OBJDUMP + LIPO Override default value for LIPO + JTREGEXE Override default value for JTREGEXE XMKMF Path to xmkmf, Makefile generator for X Window System FREETYPE_CFLAGS C compiler flags for FREETYPE, overriding pkg-config @@ -1865,6 +2035,7 @@ Some influential environment variables: LIBFFI_CFLAGS C compiler flags for LIBFFI, overriding pkg-config LIBFFI_LIBS linker flags for LIBFFI, overriding pkg-config + CCACHE Override default value for CCACHE Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. @@ -3167,13 +3338,36 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Test that variable $1 denoting a program is not empty. If empty, exit with an error. # $1: variable to check -# $2: executable name to print in warning (optional) -# Does AC_PATH_PROG followed by BASIC_CHECK_NONEMPTY. -# Arguments as AC_PATH_PROG: +# Check that there are no unprocessed overridden variables left. +# If so, they are an incorrect argument and we will exit with an error. + + +# Setup a tool for the given variable. If correctly specified by the user, +# use that value, otherwise search for the tool using the supplied code snippet. # $1: variable to set -# $2: executable name to look for +# $2: code snippet to call to look for the tool + + +# Call BASIC_SETUP_TOOL with AC_PATH_PROGS to locate the tool +# $1: variable to set +# $2: executable name (or list of names) to look for + + +# Call BASIC_SETUP_TOOL with AC_CHECK_TOOLS to locate the tool +# $1: variable to set +# $2: executable name (or list of names) to look for + + +# Like BASIC_PATH_PROGS but fails if no tool was found. +# $1: variable to set +# $2: executable name (or list of names) to look for + + +# Like BASIC_SETUP_TOOL but fails if no tool was found. +# $1: variable to set +# $2: autoconf macro to call to look for the special tool # Setup the most fundamental tools that relies on not much else to set up, @@ -3310,7 +3504,7 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # ... then the rest # -# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2014, 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 @@ -3334,6 +3528,34 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # questions. # +######################################################################## +# This file handles detection of the Boot JDK. The Boot JDK detection +# process has been developed as a response to solve a complex real-world +# problem. Initially, it was simple, but it has grown as platform after +# platform, idiosyncracy after idiosyncracy has been supported. +# +# The basic idea is this: +# 1) You need an acceptable *) JDK to use as a Boot JDK +# 2) There are several ways to locate a JDK, that are mostly platform +# dependent **) +# 3) You can have multiple JDKs installed +# 4) If possible, configure should try to dig out an acceptable JDK +# automatically, without having to resort to command-line options +# +# *) acceptable means e.g. JDK7 for building JDK8, a complete JDK (with +# javac) and not a JRE, etc. +# +# **) On Windows we typically use a well-known path. +# On MacOSX we typically use the tool java_home. +# On Linux we typically find javac in the $PATH, and then follow a +# chain of symlinks that often ends up in a real JDK. +# +# This leads to the code where we check in different ways to locate a +# JDK, and if one is found, check if it is acceptable. If not, we print +# our reasons for rejecting it (useful when debugging non-working +# configure situations) and continue checking the next one. +######################################################################## + # Execute the check given as argument, and verify the result # If the Boot JDK was previously found, do nothing # $1 A command line (typically autoconf macro) to execute @@ -3352,6 +3574,10 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Test: Is there a /usr/libexec/java_home? (Typically on MacOSX) +# $1: Argument to the java_home binary (optional) + + +# Test: On MacOS X, can we find a boot jdk using /usr/libexec/java_home? # Look for a jdk in the given path. If there are multiple, try to select the newest. @@ -3485,8 +3711,6 @@ http://www.freetype.org/ If you put the resulting build in \"C:\Program Files\GnuWin32\", it will be found automatically." fi ;; - * ) - break ;; esac } @@ -3512,8 +3736,6 @@ apt_help() { PKGHANDLER_COMMAND="sudo apt-get install libX11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev" ;; ccache) PKGHANDLER_COMMAND="sudo apt-get install ccache" ;; - * ) - break ;; esac } @@ -3535,8 +3757,6 @@ yum_help() { PKGHANDLER_COMMAND="sudo yum install libXtst-devel libXt-devel libXrender-devel" ;; ccache) PKGHANDLER_COMMAND="sudo yum install ccache" ;; - * ) - break ;; esac } @@ -3586,6 +3806,8 @@ pkgadd_help() { + + ############################################################################### # # Should we build only OpenJDK even if closed sources are present? @@ -3865,7 +4087,7 @@ fi #CUSTOM_AUTOCONF_INCLUDE # Do not change or remove the following line, it is needed for consistency checks: -DATE_WHEN_GENERATED=1389815815 +DATE_WHEN_GENERATED=1391160222 ############################################################################### # @@ -3888,7 +4110,6 @@ $as_echo "$as_me: Configuration created at $DATE_WHEN_CONFIGURED." >&6;} $as_echo "$as_me: configure script generated at timestamp $DATE_WHEN_GENERATED." >&6;} - # Start with tools that do not need have cross compilation support # and can be expected to be found in the default PATH. These tools are # used by configure. Nor are these tools expected to be found in the @@ -3897,7 +4118,14 @@ $as_echo "$as_me: configure script generated at timestamp $DATE_WHEN_GENERATED." # First are all the simple required tools. - for ac_prog in basename + + + # Publish this variable in the help. + + + if test "x$BASENAME" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in basename do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -3942,21 +4170,155 @@ fi test -n "$BASENAME" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !BASENAME! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!BASENAME!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xBASENAME" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of BASENAME from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of BASENAME from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in basename +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_BASENAME+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $BASENAME in + [\\/]* | ?:[\\/]*) + ac_cv_path_BASENAME="$BASENAME" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_BASENAME="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +BASENAME=$ac_cv_path_BASENAME +if test -n "$BASENAME"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BASENAME" >&5 +$as_echo "$BASENAME" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$BASENAME" && break +done - if test "x$BASENAME" = x; then - if test "xbasename" = x; then - PROG_NAME=basename else - PROG_NAME=basename + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$BASENAME" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool BASENAME=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool BASENAME=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_BASENAME+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $BASENAME in + [\\/]* | ?:[\\/]*) + ac_cv_path_BASENAME="$BASENAME" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_BASENAME="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +BASENAME=$ac_cv_path_BASENAME +if test -n "$BASENAME"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BASENAME" >&5 +$as_echo "$BASENAME" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$BASENAME" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool BASENAME=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool BASENAME=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BASENAME" >&5 +$as_echo_n "checking for BASENAME... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool BASENAME=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in bash + if test "x$BASENAME" = x; then + as_fn_error $? "Could not find required tool for BASENAME" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$BASH" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in bash do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4001,21 +4363,155 @@ fi test -n "$BASH" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !BASH! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!BASH!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xBASH" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of BASH from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of BASH from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in bash +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_BASH+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $BASH in + [\\/]* | ?:[\\/]*) + ac_cv_path_BASH="$BASH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_BASH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +BASH=$ac_cv_path_BASH +if test -n "$BASH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BASH" >&5 +$as_echo "$BASH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$BASH" && break +done - if test "x$BASH" = x; then - if test "xbash" = x; then - PROG_NAME=bash else - PROG_NAME=bash + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$BASH" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool BASH=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool BASH=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_BASH+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $BASH in + [\\/]* | ?:[\\/]*) + ac_cv_path_BASH="$BASH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_BASH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +BASH=$ac_cv_path_BASH +if test -n "$BASH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BASH" >&5 +$as_echo "$BASH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$BASH" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool BASH=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool BASH=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BASH" >&5 +$as_echo_n "checking for BASH... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool BASH=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in cat + if test "x$BASH" = x; then + as_fn_error $? "Could not find required tool for BASH" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$CAT" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in cat do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4060,21 +4556,155 @@ fi test -n "$CAT" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !CAT! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!CAT!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xCAT" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of CAT from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of CAT from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in cat +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CAT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CAT in + [\\/]* | ?:[\\/]*) + ac_cv_path_CAT="$CAT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CAT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CAT=$ac_cv_path_CAT +if test -n "$CAT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CAT" >&5 +$as_echo "$CAT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CAT" && break +done - if test "x$CAT" = x; then - if test "xcat" = x; then - PROG_NAME=cat else - PROG_NAME=cat + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$CAT" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool CAT=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool CAT=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CAT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CAT in + [\\/]* | ?:[\\/]*) + ac_cv_path_CAT="$CAT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CAT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CAT=$ac_cv_path_CAT +if test -n "$CAT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CAT" >&5 +$as_echo "$CAT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$CAT" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool CAT=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool CAT=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CAT" >&5 +$as_echo_n "checking for CAT... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool CAT=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in chmod + if test "x$CAT" = x; then + as_fn_error $? "Could not find required tool for CAT" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$CHMOD" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in chmod do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4119,21 +4749,155 @@ fi test -n "$CHMOD" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !CHMOD! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!CHMOD!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xCHMOD" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of CHMOD from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of CHMOD from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in chmod +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CHMOD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CHMOD in + [\\/]* | ?:[\\/]*) + ac_cv_path_CHMOD="$CHMOD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CHMOD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CHMOD=$ac_cv_path_CHMOD +if test -n "$CHMOD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHMOD" >&5 +$as_echo "$CHMOD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CHMOD" && break +done - if test "x$CHMOD" = x; then - if test "xchmod" = x; then - PROG_NAME=chmod else - PROG_NAME=chmod + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$CHMOD" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool CHMOD=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool CHMOD=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CHMOD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CHMOD in + [\\/]* | ?:[\\/]*) + ac_cv_path_CHMOD="$CHMOD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CHMOD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CHMOD=$ac_cv_path_CHMOD +if test -n "$CHMOD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHMOD" >&5 +$as_echo "$CHMOD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$CHMOD" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool CHMOD=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool CHMOD=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CHMOD" >&5 +$as_echo_n "checking for CHMOD... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool CHMOD=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in cmp + if test "x$CHMOD" = x; then + as_fn_error $? "Could not find required tool for CHMOD" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$CMP" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in cmp do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4178,21 +4942,155 @@ fi test -n "$CMP" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !CMP! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!CMP!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xCMP" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of CMP from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of CMP from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in cmp +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CMP in + [\\/]* | ?:[\\/]*) + ac_cv_path_CMP="$CMP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CMP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CMP=$ac_cv_path_CMP +if test -n "$CMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CMP" >&5 +$as_echo "$CMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CMP" && break +done - if test "x$CMP" = x; then - if test "xcmp" = x; then - PROG_NAME=cmp else - PROG_NAME=cmp + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$CMP" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool CMP=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool CMP=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CMP in + [\\/]* | ?:[\\/]*) + ac_cv_path_CMP="$CMP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CMP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CMP=$ac_cv_path_CMP +if test -n "$CMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CMP" >&5 +$as_echo "$CMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$CMP" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool CMP=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool CMP=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CMP" >&5 +$as_echo_n "checking for CMP... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool CMP=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in comm + if test "x$CMP" = x; then + as_fn_error $? "Could not find required tool for CMP" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$COMM" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in comm do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4237,21 +5135,155 @@ fi test -n "$COMM" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !COMM! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!COMM!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xCOMM" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of COMM from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of COMM from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in comm +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_COMM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $COMM in + [\\/]* | ?:[\\/]*) + ac_cv_path_COMM="$COMM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_COMM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +COMM=$ac_cv_path_COMM +if test -n "$COMM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $COMM" >&5 +$as_echo "$COMM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$COMM" && break +done - if test "x$COMM" = x; then - if test "xcomm" = x; then - PROG_NAME=comm else - PROG_NAME=comm + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$COMM" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool COMM=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool COMM=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_COMM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $COMM in + [\\/]* | ?:[\\/]*) + ac_cv_path_COMM="$COMM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_COMM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +COMM=$ac_cv_path_COMM +if test -n "$COMM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $COMM" >&5 +$as_echo "$COMM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$COMM" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool COMM=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool COMM=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for COMM" >&5 +$as_echo_n "checking for COMM... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool COMM=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in cp + if test "x$COMM" = x; then + as_fn_error $? "Could not find required tool for COMM" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$CP" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in cp do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4296,21 +5328,155 @@ fi test -n "$CP" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !CP! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!CP!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xCP" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of CP from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of CP from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in cp +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CP in + [\\/]* | ?:[\\/]*) + ac_cv_path_CP="$CP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CP=$ac_cv_path_CP +if test -n "$CP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CP" >&5 +$as_echo "$CP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CP" && break +done - if test "x$CP" = x; then - if test "xcp" = x; then - PROG_NAME=cp else - PROG_NAME=cp + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$CP" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool CP=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool CP=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CP in + [\\/]* | ?:[\\/]*) + ac_cv_path_CP="$CP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CP=$ac_cv_path_CP +if test -n "$CP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CP" >&5 +$as_echo "$CP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$CP" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool CP=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool CP=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CP" >&5 +$as_echo_n "checking for CP... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool CP=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in cpio + if test "x$CP" = x; then + as_fn_error $? "Could not find required tool for CP" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$CPIO" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in cpio do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4355,21 +5521,155 @@ fi test -n "$CPIO" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !CPIO! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!CPIO!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xCPIO" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of CPIO from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of CPIO from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in cpio +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CPIO+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CPIO in + [\\/]* | ?:[\\/]*) + ac_cv_path_CPIO="$CPIO" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CPIO="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CPIO=$ac_cv_path_CPIO +if test -n "$CPIO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPIO" >&5 +$as_echo "$CPIO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CPIO" && break +done - if test "x$CPIO" = x; then - if test "xcpio" = x; then - PROG_NAME=cpio else - PROG_NAME=cpio + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$CPIO" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool CPIO=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool CPIO=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CPIO+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CPIO in + [\\/]* | ?:[\\/]*) + ac_cv_path_CPIO="$CPIO" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CPIO="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CPIO=$ac_cv_path_CPIO +if test -n "$CPIO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPIO" >&5 +$as_echo "$CPIO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$CPIO" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool CPIO=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool CPIO=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CPIO" >&5 +$as_echo_n "checking for CPIO... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool CPIO=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in cut + if test "x$CPIO" = x; then + as_fn_error $? "Could not find required tool for CPIO" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$CUT" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in cut do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4414,21 +5714,155 @@ fi test -n "$CUT" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !CUT! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!CUT!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xCUT" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of CUT from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of CUT from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in cut +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CUT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CUT in + [\\/]* | ?:[\\/]*) + ac_cv_path_CUT="$CUT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CUT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CUT=$ac_cv_path_CUT +if test -n "$CUT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUT" >&5 +$as_echo "$CUT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CUT" && break +done - if test "x$CUT" = x; then - if test "xcut" = x; then - PROG_NAME=cut else - PROG_NAME=cut + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$CUT" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool CUT=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool CUT=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CUT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CUT in + [\\/]* | ?:[\\/]*) + ac_cv_path_CUT="$CUT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CUT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CUT=$ac_cv_path_CUT +if test -n "$CUT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUT" >&5 +$as_echo "$CUT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$CUT" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool CUT=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool CUT=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CUT" >&5 +$as_echo_n "checking for CUT... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool CUT=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in date + if test "x$CUT" = x; then + as_fn_error $? "Could not find required tool for CUT" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$DATE" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in date do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4473,21 +5907,155 @@ fi test -n "$DATE" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !DATE! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!DATE!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xDATE" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of DATE from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of DATE from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in date +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DATE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DATE in + [\\/]* | ?:[\\/]*) + ac_cv_path_DATE="$DATE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DATE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DATE=$ac_cv_path_DATE +if test -n "$DATE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DATE" >&5 +$as_echo "$DATE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DATE" && break +done - if test "x$DATE" = x; then - if test "xdate" = x; then - PROG_NAME=date else - PROG_NAME=date + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$DATE" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool DATE=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool DATE=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DATE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DATE in + [\\/]* | ?:[\\/]*) + ac_cv_path_DATE="$DATE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DATE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DATE=$ac_cv_path_DATE +if test -n "$DATE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DATE" >&5 +$as_echo "$DATE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$DATE" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool DATE=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool DATE=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DATE" >&5 +$as_echo_n "checking for DATE... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool DATE=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in gdiff diff + if test "x$DATE" = x; then + as_fn_error $? "Could not find required tool for DATE" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$DIFF" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in gdiff diff do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4532,21 +6100,155 @@ fi test -n "$DIFF" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !DIFF! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!DIFF!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xDIFF" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of DIFF from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of DIFF from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in gdiff diff +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DIFF+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DIFF in + [\\/]* | ?:[\\/]*) + ac_cv_path_DIFF="$DIFF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DIFF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DIFF=$ac_cv_path_DIFF +if test -n "$DIFF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DIFF" >&5 +$as_echo "$DIFF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DIFF" && break +done - if test "x$DIFF" = x; then - if test "xgdiff diff" = x; then - PROG_NAME=diff else - PROG_NAME=gdiff diff + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$DIFF" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool DIFF=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool DIFF=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DIFF+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DIFF in + [\\/]* | ?:[\\/]*) + ac_cv_path_DIFF="$DIFF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DIFF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DIFF=$ac_cv_path_DIFF +if test -n "$DIFF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DIFF" >&5 +$as_echo "$DIFF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$DIFF" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool DIFF=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool DIFF=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DIFF" >&5 +$as_echo_n "checking for DIFF... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool DIFF=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in dirname + if test "x$DIFF" = x; then + as_fn_error $? "Could not find required tool for DIFF" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$DIRNAME" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in dirname do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4591,21 +6293,155 @@ fi test -n "$DIRNAME" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !DIRNAME! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!DIRNAME!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xDIRNAME" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of DIRNAME from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of DIRNAME from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in dirname +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DIRNAME+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DIRNAME in + [\\/]* | ?:[\\/]*) + ac_cv_path_DIRNAME="$DIRNAME" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DIRNAME="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DIRNAME=$ac_cv_path_DIRNAME +if test -n "$DIRNAME"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DIRNAME" >&5 +$as_echo "$DIRNAME" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DIRNAME" && break +done - if test "x$DIRNAME" = x; then - if test "xdirname" = x; then - PROG_NAME=dirname else - PROG_NAME=dirname + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$DIRNAME" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool DIRNAME=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool DIRNAME=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DIRNAME+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DIRNAME in + [\\/]* | ?:[\\/]*) + ac_cv_path_DIRNAME="$DIRNAME" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DIRNAME="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DIRNAME=$ac_cv_path_DIRNAME +if test -n "$DIRNAME"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DIRNAME" >&5 +$as_echo "$DIRNAME" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$DIRNAME" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool DIRNAME=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool DIRNAME=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DIRNAME" >&5 +$as_echo_n "checking for DIRNAME... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool DIRNAME=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in echo + if test "x$DIRNAME" = x; then + as_fn_error $? "Could not find required tool for DIRNAME" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$ECHO" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in echo do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4650,21 +6486,155 @@ fi test -n "$ECHO" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !ECHO! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!ECHO!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xECHO" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of ECHO from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of ECHO from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in echo +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ECHO+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ECHO in + [\\/]* | ?:[\\/]*) + ac_cv_path_ECHO="$ECHO" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ECHO="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ECHO=$ac_cv_path_ECHO +if test -n "$ECHO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ECHO" >&5 +$as_echo "$ECHO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ECHO" && break +done - if test "x$ECHO" = x; then - if test "xecho" = x; then - PROG_NAME=echo else - PROG_NAME=echo + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$ECHO" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool ECHO=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool ECHO=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ECHO+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ECHO in + [\\/]* | ?:[\\/]*) + ac_cv_path_ECHO="$ECHO" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ECHO="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ECHO=$ac_cv_path_ECHO +if test -n "$ECHO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ECHO" >&5 +$as_echo "$ECHO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$ECHO" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool ECHO=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool ECHO=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ECHO" >&5 +$as_echo_n "checking for ECHO... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool ECHO=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in expr + if test "x$ECHO" = x; then + as_fn_error $? "Could not find required tool for ECHO" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$EXPR" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in expr do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4709,21 +6679,155 @@ fi test -n "$EXPR" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !EXPR! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!EXPR!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xEXPR" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of EXPR from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of EXPR from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in expr +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_EXPR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $EXPR in + [\\/]* | ?:[\\/]*) + ac_cv_path_EXPR="$EXPR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_EXPR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +EXPR=$ac_cv_path_EXPR +if test -n "$EXPR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $EXPR" >&5 +$as_echo "$EXPR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$EXPR" && break +done - if test "x$EXPR" = x; then - if test "xexpr" = x; then - PROG_NAME=expr else - PROG_NAME=expr + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$EXPR" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool EXPR=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool EXPR=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_EXPR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $EXPR in + [\\/]* | ?:[\\/]*) + ac_cv_path_EXPR="$EXPR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_EXPR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +EXPR=$ac_cv_path_EXPR +if test -n "$EXPR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $EXPR" >&5 +$as_echo "$EXPR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$EXPR" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool EXPR=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool EXPR=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EXPR" >&5 +$as_echo_n "checking for EXPR... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool EXPR=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in file + if test "x$EXPR" = x; then + as_fn_error $? "Could not find required tool for EXPR" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$FILE" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in file do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4768,21 +6872,155 @@ fi test -n "$FILE" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !FILE! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!FILE!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xFILE" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of FILE from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of FILE from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in file +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_FILE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $FILE in + [\\/]* | ?:[\\/]*) + ac_cv_path_FILE="$FILE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_FILE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +FILE=$ac_cv_path_FILE +if test -n "$FILE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FILE" >&5 +$as_echo "$FILE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$FILE" && break +done - if test "x$FILE" = x; then - if test "xfile" = x; then - PROG_NAME=file else - PROG_NAME=file + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$FILE" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool FILE=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool FILE=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_FILE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $FILE in + [\\/]* | ?:[\\/]*) + ac_cv_path_FILE="$FILE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_FILE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +FILE=$ac_cv_path_FILE +if test -n "$FILE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FILE" >&5 +$as_echo "$FILE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$FILE" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool FILE=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool FILE=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FILE" >&5 +$as_echo_n "checking for FILE... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool FILE=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in find + if test "x$FILE" = x; then + as_fn_error $? "Could not find required tool for FILE" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$FIND" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in find do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4827,21 +7065,155 @@ fi test -n "$FIND" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !FIND! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!FIND!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xFIND" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of FIND from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of FIND from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in find +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_FIND+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $FIND in + [\\/]* | ?:[\\/]*) + ac_cv_path_FIND="$FIND" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_FIND="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +FIND=$ac_cv_path_FIND +if test -n "$FIND"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FIND" >&5 +$as_echo "$FIND" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$FIND" && break +done - if test "x$FIND" = x; then - if test "xfind" = x; then - PROG_NAME=find else - PROG_NAME=find + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$FIND" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool FIND=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool FIND=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_FIND+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $FIND in + [\\/]* | ?:[\\/]*) + ac_cv_path_FIND="$FIND" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_FIND="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +FIND=$ac_cv_path_FIND +if test -n "$FIND"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FIND" >&5 +$as_echo "$FIND" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$FIND" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool FIND=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool FIND=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FIND" >&5 +$as_echo_n "checking for FIND... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool FIND=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in head + if test "x$FIND" = x; then + as_fn_error $? "Could not find required tool for FIND" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$HEAD" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in head do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4886,21 +7258,155 @@ fi test -n "$HEAD" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !HEAD! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!HEAD!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xHEAD" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of HEAD from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of HEAD from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in head +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_HEAD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $HEAD in + [\\/]* | ?:[\\/]*) + ac_cv_path_HEAD="$HEAD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_HEAD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +HEAD=$ac_cv_path_HEAD +if test -n "$HEAD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HEAD" >&5 +$as_echo "$HEAD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$HEAD" && break +done - if test "x$HEAD" = x; then - if test "xhead" = x; then - PROG_NAME=head else - PROG_NAME=head + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$HEAD" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool HEAD=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool HEAD=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_HEAD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $HEAD in + [\\/]* | ?:[\\/]*) + ac_cv_path_HEAD="$HEAD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_HEAD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +HEAD=$ac_cv_path_HEAD +if test -n "$HEAD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HEAD" >&5 +$as_echo "$HEAD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$HEAD" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool HEAD=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool HEAD=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for HEAD" >&5 +$as_echo_n "checking for HEAD... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool HEAD=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in ln + if test "x$HEAD" = x; then + as_fn_error $? "Could not find required tool for HEAD" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$LN" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in ln do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -4945,21 +7451,155 @@ fi test -n "$LN" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !LN! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!LN!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xLN" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of LN from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of LN from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in ln +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_LN+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $LN in + [\\/]* | ?:[\\/]*) + ac_cv_path_LN="$LN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_LN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +LN=$ac_cv_path_LN +if test -n "$LN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LN" >&5 +$as_echo "$LN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$LN" && break +done - if test "x$LN" = x; then - if test "xln" = x; then - PROG_NAME=ln else - PROG_NAME=ln + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$LN" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool LN=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool LN=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_LN+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $LN in + [\\/]* | ?:[\\/]*) + ac_cv_path_LN="$LN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_LN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +LN=$ac_cv_path_LN +if test -n "$LN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LN" >&5 +$as_echo "$LN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$LN" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool LN=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool LN=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LN" >&5 +$as_echo_n "checking for LN... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool LN=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in ls + if test "x$LN" = x; then + as_fn_error $? "Could not find required tool for LN" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$LS" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in ls do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5004,21 +7644,155 @@ fi test -n "$LS" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !LS! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!LS!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xLS" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of LS from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of LS from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in ls +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_LS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $LS in + [\\/]* | ?:[\\/]*) + ac_cv_path_LS="$LS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_LS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +LS=$ac_cv_path_LS +if test -n "$LS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LS" >&5 +$as_echo "$LS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$LS" && break +done - if test "x$LS" = x; then - if test "xls" = x; then - PROG_NAME=ls else - PROG_NAME=ls + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$LS" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool LS=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool LS=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_LS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $LS in + [\\/]* | ?:[\\/]*) + ac_cv_path_LS="$LS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_LS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +LS=$ac_cv_path_LS +if test -n "$LS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LS" >&5 +$as_echo "$LS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$LS" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool LS=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool LS=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LS" >&5 +$as_echo_n "checking for LS... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool LS=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in mkdir + if test "x$LS" = x; then + as_fn_error $? "Could not find required tool for LS" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$MKDIR" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in mkdir do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5063,21 +7837,155 @@ fi test -n "$MKDIR" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !MKDIR! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!MKDIR!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xMKDIR" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of MKDIR from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of MKDIR from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in mkdir +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MKDIR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MKDIR in + [\\/]* | ?:[\\/]*) + ac_cv_path_MKDIR="$MKDIR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_MKDIR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MKDIR=$ac_cv_path_MKDIR +if test -n "$MKDIR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR" >&5 +$as_echo "$MKDIR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$MKDIR" && break +done - if test "x$MKDIR" = x; then - if test "xmkdir" = x; then - PROG_NAME=mkdir else - PROG_NAME=mkdir + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$MKDIR" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool MKDIR=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool MKDIR=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MKDIR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MKDIR in + [\\/]* | ?:[\\/]*) + ac_cv_path_MKDIR="$MKDIR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_MKDIR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MKDIR=$ac_cv_path_MKDIR +if test -n "$MKDIR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR" >&5 +$as_echo "$MKDIR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$MKDIR" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool MKDIR=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool MKDIR=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MKDIR" >&5 +$as_echo_n "checking for MKDIR... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool MKDIR=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in mktemp + if test "x$MKDIR" = x; then + as_fn_error $? "Could not find required tool for MKDIR" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$MKTEMP" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in mktemp do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5122,21 +8030,155 @@ fi test -n "$MKTEMP" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !MKTEMP! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!MKTEMP!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xMKTEMP" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of MKTEMP from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of MKTEMP from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in mktemp +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MKTEMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MKTEMP in + [\\/]* | ?:[\\/]*) + ac_cv_path_MKTEMP="$MKTEMP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_MKTEMP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MKTEMP=$ac_cv_path_MKTEMP +if test -n "$MKTEMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKTEMP" >&5 +$as_echo "$MKTEMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$MKTEMP" && break +done - if test "x$MKTEMP" = x; then - if test "xmktemp" = x; then - PROG_NAME=mktemp else - PROG_NAME=mktemp + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$MKTEMP" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool MKTEMP=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool MKTEMP=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MKTEMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MKTEMP in + [\\/]* | ?:[\\/]*) + ac_cv_path_MKTEMP="$MKTEMP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_MKTEMP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MKTEMP=$ac_cv_path_MKTEMP +if test -n "$MKTEMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKTEMP" >&5 +$as_echo "$MKTEMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$MKTEMP" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool MKTEMP=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool MKTEMP=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MKTEMP" >&5 +$as_echo_n "checking for MKTEMP... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool MKTEMP=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in mv + if test "x$MKTEMP" = x; then + as_fn_error $? "Could not find required tool for MKTEMP" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$MV" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in mv do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5181,21 +8223,348 @@ fi test -n "$MV" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !MV! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!MV!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xMV" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of MV from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of MV from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in mv +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MV+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MV in + [\\/]* | ?:[\\/]*) + ac_cv_path_MV="$MV" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_MV="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MV=$ac_cv_path_MV +if test -n "$MV"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MV" >&5 +$as_echo "$MV" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$MV" && break +done - if test "x$MV" = x; then - if test "xmv" = x; then - PROG_NAME=mv else - PROG_NAME=mv + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$MV" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool MV=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool MV=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MV+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MV in + [\\/]* | ?:[\\/]*) + ac_cv_path_MV="$MV" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_MV="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MV=$ac_cv_path_MV +if test -n "$MV"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MV" >&5 +$as_echo "$MV" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$MV" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool MV=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool MV=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MV" >&5 +$as_echo_n "checking for MV... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool MV=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in printf + if test "x$MV" = x; then + as_fn_error $? "Could not find required tool for MV" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$NAWK" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in nawk gawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_NAWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $NAWK in + [\\/]* | ?:[\\/]*) + ac_cv_path_NAWK="$NAWK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_NAWK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +NAWK=$ac_cv_path_NAWK +if test -n "$NAWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NAWK" >&5 +$as_echo "$NAWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$NAWK" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !NAWK! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!NAWK!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xNAWK" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of NAWK from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of NAWK from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in nawk gawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_NAWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $NAWK in + [\\/]* | ?:[\\/]*) + ac_cv_path_NAWK="$NAWK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_NAWK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +NAWK=$ac_cv_path_NAWK +if test -n "$NAWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NAWK" >&5 +$as_echo "$NAWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$NAWK" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$NAWK" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool NAWK=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool NAWK=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_NAWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $NAWK in + [\\/]* | ?:[\\/]*) + ac_cv_path_NAWK="$NAWK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_NAWK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +NAWK=$ac_cv_path_NAWK +if test -n "$NAWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NAWK" >&5 +$as_echo "$NAWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$NAWK" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool NAWK=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool NAWK=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for NAWK" >&5 +$as_echo_n "checking for NAWK... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool NAWK=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + + + if test "x$NAWK" = x; then + as_fn_error $? "Could not find required tool for NAWK" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$PRINTF" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in printf do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5240,21 +8609,155 @@ fi test -n "$PRINTF" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !PRINTF! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!PRINTF!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xPRINTF" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of PRINTF from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of PRINTF from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in printf +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PRINTF+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PRINTF in + [\\/]* | ?:[\\/]*) + ac_cv_path_PRINTF="$PRINTF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PRINTF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PRINTF=$ac_cv_path_PRINTF +if test -n "$PRINTF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PRINTF" >&5 +$as_echo "$PRINTF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PRINTF" && break +done - if test "x$PRINTF" = x; then - if test "xprintf" = x; then - PROG_NAME=printf else - PROG_NAME=printf + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$PRINTF" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool PRINTF=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool PRINTF=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PRINTF+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PRINTF in + [\\/]* | ?:[\\/]*) + ac_cv_path_PRINTF="$PRINTF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PRINTF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PRINTF=$ac_cv_path_PRINTF +if test -n "$PRINTF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PRINTF" >&5 +$as_echo "$PRINTF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$PRINTF" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool PRINTF=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool PRINTF=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PRINTF" >&5 +$as_echo_n "checking for PRINTF... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool PRINTF=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in rm + if test "x$PRINTF" = x; then + as_fn_error $? "Could not find required tool for PRINTF" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$RM" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in rm do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5299,21 +8802,155 @@ fi test -n "$RM" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !RM! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!RM!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xRM" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of RM from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of RM from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in rm +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_RM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $RM in + [\\/]* | ?:[\\/]*) + ac_cv_path_RM="$RM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +RM=$ac_cv_path_RM +if test -n "$RM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RM" >&5 +$as_echo "$RM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$RM" && break +done - if test "x$RM" = x; then - if test "xrm" = x; then - PROG_NAME=rm else - PROG_NAME=rm + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$RM" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool RM=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool RM=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_RM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $RM in + [\\/]* | ?:[\\/]*) + ac_cv_path_RM="$RM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +RM=$ac_cv_path_RM +if test -n "$RM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RM" >&5 +$as_echo "$RM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$RM" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool RM=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool RM=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for RM" >&5 +$as_echo_n "checking for RM... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool RM=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in sh + if test "x$RM" = x; then + as_fn_error $? "Could not find required tool for RM" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$SH" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in sh do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5358,21 +8995,155 @@ fi test -n "$SH" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !SH! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!SH!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xSH" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of SH from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of SH from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in sh +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_SH+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $SH in + [\\/]* | ?:[\\/]*) + ac_cv_path_SH="$SH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_SH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +SH=$ac_cv_path_SH +if test -n "$SH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SH" >&5 +$as_echo "$SH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$SH" && break +done - if test "x$SH" = x; then - if test "xsh" = x; then - PROG_NAME=sh else - PROG_NAME=sh + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$SH" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool SH=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool SH=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_SH+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $SH in + [\\/]* | ?:[\\/]*) + ac_cv_path_SH="$SH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_SH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +SH=$ac_cv_path_SH +if test -n "$SH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SH" >&5 +$as_echo "$SH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$SH" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool SH=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool SH=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SH" >&5 +$as_echo_n "checking for SH... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool SH=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in sort + if test "x$SH" = x; then + as_fn_error $? "Could not find required tool for SH" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$SORT" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in sort do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5417,21 +9188,155 @@ fi test -n "$SORT" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !SORT! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!SORT!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xSORT" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of SORT from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of SORT from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in sort +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_SORT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $SORT in + [\\/]* | ?:[\\/]*) + ac_cv_path_SORT="$SORT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_SORT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +SORT=$ac_cv_path_SORT +if test -n "$SORT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SORT" >&5 +$as_echo "$SORT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$SORT" && break +done - if test "x$SORT" = x; then - if test "xsort" = x; then - PROG_NAME=sort else - PROG_NAME=sort + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$SORT" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool SORT=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool SORT=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_SORT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $SORT in + [\\/]* | ?:[\\/]*) + ac_cv_path_SORT="$SORT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_SORT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +SORT=$ac_cv_path_SORT +if test -n "$SORT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SORT" >&5 +$as_echo "$SORT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$SORT" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool SORT=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool SORT=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SORT" >&5 +$as_echo_n "checking for SORT... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool SORT=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in tail + if test "x$SORT" = x; then + as_fn_error $? "Could not find required tool for SORT" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$TAIL" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in tail do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5476,21 +9381,155 @@ fi test -n "$TAIL" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !TAIL! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!TAIL!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xTAIL" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of TAIL from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of TAIL from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in tail +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_TAIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $TAIL in + [\\/]* | ?:[\\/]*) + ac_cv_path_TAIL="$TAIL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_TAIL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TAIL=$ac_cv_path_TAIL +if test -n "$TAIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TAIL" >&5 +$as_echo "$TAIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$TAIL" && break +done - if test "x$TAIL" = x; then - if test "xtail" = x; then - PROG_NAME=tail else - PROG_NAME=tail + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$TAIL" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool TAIL=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool TAIL=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_TAIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $TAIL in + [\\/]* | ?:[\\/]*) + ac_cv_path_TAIL="$TAIL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_TAIL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TAIL=$ac_cv_path_TAIL +if test -n "$TAIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TAIL" >&5 +$as_echo "$TAIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$TAIL" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool TAIL=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool TAIL=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TAIL" >&5 +$as_echo_n "checking for TAIL... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool TAIL=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in tar + if test "x$TAIL" = x; then + as_fn_error $? "Could not find required tool for TAIL" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$TAR" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in tar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5535,21 +9574,155 @@ fi test -n "$TAR" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !TAR! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!TAR!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xTAR" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of TAR from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of TAR from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in tar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_TAR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $TAR in + [\\/]* | ?:[\\/]*) + ac_cv_path_TAR="$TAR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_TAR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TAR=$ac_cv_path_TAR +if test -n "$TAR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TAR" >&5 +$as_echo "$TAR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$TAR" && break +done - if test "x$TAR" = x; then - if test "xtar" = x; then - PROG_NAME=tar else - PROG_NAME=tar + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$TAR" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool TAR=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool TAR=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_TAR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $TAR in + [\\/]* | ?:[\\/]*) + ac_cv_path_TAR="$TAR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_TAR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TAR=$ac_cv_path_TAR +if test -n "$TAR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TAR" >&5 +$as_echo "$TAR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$TAR" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool TAR=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool TAR=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TAR" >&5 +$as_echo_n "checking for TAR... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool TAR=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in tee + if test "x$TAR" = x; then + as_fn_error $? "Could not find required tool for TAR" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$TEE" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in tee do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5594,21 +9767,155 @@ fi test -n "$TEE" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !TEE! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!TEE!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xTEE" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of TEE from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of TEE from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in tee +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_TEE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $TEE in + [\\/]* | ?:[\\/]*) + ac_cv_path_TEE="$TEE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_TEE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TEE=$ac_cv_path_TEE +if test -n "$TEE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEE" >&5 +$as_echo "$TEE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$TEE" && break +done - if test "x$TEE" = x; then - if test "xtee" = x; then - PROG_NAME=tee else - PROG_NAME=tee + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$TEE" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool TEE=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool TEE=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_TEE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $TEE in + [\\/]* | ?:[\\/]*) + ac_cv_path_TEE="$TEE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_TEE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TEE=$ac_cv_path_TEE +if test -n "$TEE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEE" >&5 +$as_echo "$TEE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$TEE" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool TEE=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool TEE=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TEE" >&5 +$as_echo_n "checking for TEE... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool TEE=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in touch + if test "x$TEE" = x; then + as_fn_error $? "Could not find required tool for TEE" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$TOUCH" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in touch do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5653,21 +9960,155 @@ fi test -n "$TOUCH" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !TOUCH! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!TOUCH!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xTOUCH" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of TOUCH from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of TOUCH from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in touch +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_TOUCH+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $TOUCH in + [\\/]* | ?:[\\/]*) + ac_cv_path_TOUCH="$TOUCH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_TOUCH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TOUCH=$ac_cv_path_TOUCH +if test -n "$TOUCH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TOUCH" >&5 +$as_echo "$TOUCH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$TOUCH" && break +done - if test "x$TOUCH" = x; then - if test "xtouch" = x; then - PROG_NAME=touch else - PROG_NAME=touch + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$TOUCH" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool TOUCH=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool TOUCH=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_TOUCH+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $TOUCH in + [\\/]* | ?:[\\/]*) + ac_cv_path_TOUCH="$TOUCH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_TOUCH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TOUCH=$ac_cv_path_TOUCH +if test -n "$TOUCH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TOUCH" >&5 +$as_echo "$TOUCH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$TOUCH" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool TOUCH=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool TOUCH=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TOUCH" >&5 +$as_echo_n "checking for TOUCH... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool TOUCH=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in tr + if test "x$TOUCH" = x; then + as_fn_error $? "Could not find required tool for TOUCH" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$TR" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in tr do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5712,21 +10153,155 @@ fi test -n "$TR" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !TR! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!TR!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xTR" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of TR from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of TR from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in tr +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_TR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $TR in + [\\/]* | ?:[\\/]*) + ac_cv_path_TR="$TR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_TR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TR=$ac_cv_path_TR +if test -n "$TR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TR" >&5 +$as_echo "$TR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$TR" && break +done - if test "x$TR" = x; then - if test "xtr" = x; then - PROG_NAME=tr else - PROG_NAME=tr + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$TR" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool TR=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool TR=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_TR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $TR in + [\\/]* | ?:[\\/]*) + ac_cv_path_TR="$TR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_TR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TR=$ac_cv_path_TR +if test -n "$TR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TR" >&5 +$as_echo "$TR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$TR" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool TR=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool TR=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TR" >&5 +$as_echo_n "checking for TR... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool TR=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in uname + if test "x$TR" = x; then + as_fn_error $? "Could not find required tool for TR" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$UNAME" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in uname do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5771,21 +10346,155 @@ fi test -n "$UNAME" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !UNAME! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!UNAME!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xUNAME" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of UNAME from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of UNAME from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in uname +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_UNAME+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $UNAME in + [\\/]* | ?:[\\/]*) + ac_cv_path_UNAME="$UNAME" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_UNAME="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +UNAME=$ac_cv_path_UNAME +if test -n "$UNAME"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNAME" >&5 +$as_echo "$UNAME" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$UNAME" && break +done - if test "x$UNAME" = x; then - if test "xuname" = x; then - PROG_NAME=uname else - PROG_NAME=uname + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$UNAME" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool UNAME=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool UNAME=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_UNAME+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $UNAME in + [\\/]* | ?:[\\/]*) + ac_cv_path_UNAME="$UNAME" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_UNAME="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +UNAME=$ac_cv_path_UNAME +if test -n "$UNAME"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNAME" >&5 +$as_echo "$UNAME" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$UNAME" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool UNAME=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool UNAME=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for UNAME" >&5 +$as_echo_n "checking for UNAME... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool UNAME=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in uniq + if test "x$UNAME" = x; then + as_fn_error $? "Could not find required tool for UNAME" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$UNIQ" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in uniq do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5830,21 +10539,155 @@ fi test -n "$UNIQ" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !UNIQ! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!UNIQ!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xUNIQ" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of UNIQ from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of UNIQ from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in uniq +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_UNIQ+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $UNIQ in + [\\/]* | ?:[\\/]*) + ac_cv_path_UNIQ="$UNIQ" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_UNIQ="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +UNIQ=$ac_cv_path_UNIQ +if test -n "$UNIQ"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNIQ" >&5 +$as_echo "$UNIQ" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$UNIQ" && break +done - if test "x$UNIQ" = x; then - if test "xuniq" = x; then - PROG_NAME=uniq else - PROG_NAME=uniq + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$UNIQ" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool UNIQ=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool UNIQ=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_UNIQ+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $UNIQ in + [\\/]* | ?:[\\/]*) + ac_cv_path_UNIQ="$UNIQ" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_UNIQ="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +UNIQ=$ac_cv_path_UNIQ +if test -n "$UNIQ"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNIQ" >&5 +$as_echo "$UNIQ" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$UNIQ" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool UNIQ=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool UNIQ=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for UNIQ" >&5 +$as_echo_n "checking for UNIQ... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool UNIQ=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in wc + if test "x$UNIQ" = x; then + as_fn_error $? "Could not find required tool for UNIQ" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$WC" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in wc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5889,21 +10732,155 @@ fi test -n "$WC" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !WC! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!WC!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xWC" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of WC from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of WC from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in wc +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_WC+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $WC in + [\\/]* | ?:[\\/]*) + ac_cv_path_WC="$WC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_WC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +WC=$ac_cv_path_WC +if test -n "$WC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WC" >&5 +$as_echo "$WC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$WC" && break +done - if test "x$WC" = x; then - if test "xwc" = x; then - PROG_NAME=wc else - PROG_NAME=wc + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$WC" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool WC=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool WC=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_WC+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $WC in + [\\/]* | ?:[\\/]*) + ac_cv_path_WC="$WC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_WC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +WC=$ac_cv_path_WC +if test -n "$WC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WC" >&5 +$as_echo "$WC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$WC" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool WC=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool WC=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for WC" >&5 +$as_echo_n "checking for WC... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool WC=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in which + if test "x$WC" = x; then + as_fn_error $? "Could not find required tool for WC" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$WHICH" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in which do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -5948,21 +10925,155 @@ fi test -n "$WHICH" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !WHICH! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!WHICH!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xWHICH" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of WHICH from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of WHICH from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in which +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_WHICH+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $WHICH in + [\\/]* | ?:[\\/]*) + ac_cv_path_WHICH="$WHICH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_WHICH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +WHICH=$ac_cv_path_WHICH +if test -n "$WHICH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WHICH" >&5 +$as_echo "$WHICH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$WHICH" && break +done - if test "x$WHICH" = x; then - if test "xwhich" = x; then - PROG_NAME=which else - PROG_NAME=which + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$WHICH" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool WHICH=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool WHICH=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_WHICH+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $WHICH in + [\\/]* | ?:[\\/]*) + ac_cv_path_WHICH="$WHICH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_WHICH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +WHICH=$ac_cv_path_WHICH +if test -n "$WHICH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WHICH" >&5 +$as_echo "$WHICH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$WHICH" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool WHICH=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool WHICH=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for WHICH" >&5 +$as_echo_n "checking for WHICH... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool WHICH=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in xargs + if test "x$WHICH" = x; then + as_fn_error $? "Could not find required tool for WHICH" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$XARGS" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in xargs do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -6007,22 +11118,156 @@ fi test -n "$XARGS" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !XARGS! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!XARGS!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xXARGS" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of XARGS from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of XARGS from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in xargs +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_XARGS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $XARGS in + [\\/]* | ?:[\\/]*) + ac_cv_path_XARGS="$XARGS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_XARGS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +XARGS=$ac_cv_path_XARGS +if test -n "$XARGS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XARGS" >&5 +$as_echo "$XARGS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$XARGS" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$XARGS" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool XARGS=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool XARGS=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_XARGS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $XARGS in + [\\/]* | ?:[\\/]*) + ac_cv_path_XARGS="$XARGS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_XARGS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +XARGS=$ac_cv_path_XARGS +if test -n "$XARGS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XARGS" >&5 +$as_echo "$XARGS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$XARGS" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool XARGS=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool XARGS=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XARGS" >&5 +$as_echo_n "checking for XARGS... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool XARGS=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$XARGS" = x; then - if test "xxargs" = x; then - PROG_NAME=xargs - else - PROG_NAME=xargs - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 + as_fn_error $? "Could not find required tool for XARGS" "$LINENO" 5 fi # Then required tools that require some special treatment. - for ac_prog in gawk mawk nawk awk + + + # Publish this variable in the help. + + + if test "x$AWK" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -6064,19 +11309,150 @@ fi test -n "$AWK" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !AWK! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!AWK!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xAWK" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of AWK from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of AWK from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done - if test "x$AWK" = x; then - if test "x" = x; then - PROG_NAME=awk else - PROG_NAME= + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$AWK" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool AWK=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool AWK=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $AWK in + [\\/]* | ?:[\\/]*) + ac_cv_path_AWK="$AWK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_AWK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +AWK=$ac_cv_path_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$AWK" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool AWK=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool AWK=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for AWK" >&5 +$as_echo_n "checking for AWK... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool AWK=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 + + if test "x$AWK" = x; then + as_fn_error $? "Could not find required tool for AWK" "$LINENO" 5 + fi + + + + + # Publish this variable in the help. + + + if test "x$GREP" = x; then + # The variable is not set by user, try to locate tool using the code snippet + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 @@ -6139,19 +11515,171 @@ $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" + else + # The variable is set, but is it from the command line or the environment? - if test "x$GREP" = x; then - if test "x" = x; then - PROG_NAME=grep - else - PROG_NAME= + # Try to remove the string !GREP! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!GREP!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xGREP" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of GREP from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of GREP from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$GREP" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool GREP=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool GREP=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $GREP in + [\\/]* | ?:[\\/]*) + ac_cv_path_GREP="$GREP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_GREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +GREP=$ac_cv_path_GREP +if test -n "$GREP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GREP" >&5 +$as_echo "$GREP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$GREP" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool GREP=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool GREP=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GREP" >&5 +$as_echo_n "checking for GREP... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool GREP=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 + + if test "x$GREP" = x; then + as_fn_error $? "Could not find required tool for GREP" "$LINENO" 5 + fi + + + + + # Publish this variable in the help. + + + if test "x$EGREP" = x; then + # The variable is not set by user, try to locate tool using the code snippet + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 @@ -6218,19 +11746,175 @@ $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" + else + # The variable is set, but is it from the command line or the environment? - if test "x$EGREP" = x; then - if test "x" = x; then - PROG_NAME=egrep - else - PROG_NAME= + # Try to remove the string !EGREP! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!EGREP!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xEGREP" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of EGREP from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of EGREP from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$EGREP" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool EGREP=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool EGREP=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $EGREP in + [\\/]* | ?:[\\/]*) + ac_cv_path_EGREP="$EGREP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_EGREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +EGREP=$ac_cv_path_EGREP +if test -n "$EGREP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $EGREP" >&5 +$as_echo "$EGREP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$EGREP" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool EGREP=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool EGREP=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EGREP" >&5 +$as_echo_n "checking for EGREP... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool EGREP=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 + + if test "x$EGREP" = x; then + as_fn_error $? "Could not find required tool for EGREP" "$LINENO" 5 + fi + + + + + # Publish this variable in the help. + + + if test "x$FGREP" = x; then + # The variable is not set by user, try to locate tool using the code snippet + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 @@ -6297,19 +11981,175 @@ $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" + else + # The variable is set, but is it from the command line or the environment? - if test "x$FGREP" = x; then - if test "x" = x; then - PROG_NAME=fgrep - else - PROG_NAME= + # Try to remove the string !FGREP! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!FGREP!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xFGREP" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of FGREP from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of FGREP from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_FGREP" || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$FGREP" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool FGREP=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool FGREP=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $FGREP in + [\\/]* | ?:[\\/]*) + ac_cv_path_FGREP="$FGREP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_FGREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +FGREP=$ac_cv_path_FGREP +if test -n "$FGREP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FGREP" >&5 +$as_echo "$FGREP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$FGREP" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool FGREP=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool FGREP=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FGREP" >&5 +$as_echo_n "checking for FGREP... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool FGREP=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 + + if test "x$FGREP" = x; then + as_fn_error $? "Could not find required tool for FGREP" "$LINENO" 5 + fi + + + + + # Publish this variable in the help. + + + if test "x$SED" = x; then + # The variable is not set by user, try to locate tool using the code snippet + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 @@ -6378,31 +12218,113 @@ $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed + else + # The variable is set, but is it from the command line or the environment? - if test "x$SED" = x; then - if test "x" = x; then - PROG_NAME=sed - else - PROG_NAME= - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 - fi - - - for ac_prog in nawk gawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_NAWK+:} false; then : + # Try to remove the string !SED! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!SED!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xSED" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of SED from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of SED from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else - case $NAWK in + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$SED" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool SED=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool SED=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $SED in [\\/]* | ?:[\\/]*) - ac_cv_path_NAWK="$NAWK" # Let the user override the test with a path. + ac_cv_path_SED="$SED" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -6412,7 +12334,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_NAWK="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_SED="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -6423,32 +12345,43 @@ IFS=$as_save_IFS ;; esac fi -NAWK=$ac_cv_path_NAWK -if test -n "$NAWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NAWK" >&5 -$as_echo "$NAWK" >&6; } +SED=$ac_cv_path_SED +if test -n "$SED"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SED" >&5 +$as_echo "$SED" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi - test -n "$NAWK" && break -done - - - if test "x$NAWK" = x; then - if test "x" = x; then - PROG_NAME=nawk - else - PROG_NAME= + if test "x$SED" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool SED=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool SED=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SED" >&5 +$as_echo_n "checking for SED... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool SED=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi + if test "x$SED" = x; then + as_fn_error $? "Could not find required tool for SED" "$LINENO" 5 + fi + + + # Always force rm. RM="$RM -f" @@ -6457,8 +12390,17 @@ $as_echo "$as_me: Could not find $PROG_NAME!" >&6;} THEPWDCMD=pwd # These are not required on all platforms - # Extract the first word of "cygpath", so it can be a program name with args. -set dummy cygpath; ac_word=$2 + + + # Publish this variable in the help. + + + if test "x$CYGPATH" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in cygpath +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_CYGPATH+:} false; then : @@ -6497,8 +12439,154 @@ $as_echo "no" >&6; } fi - # Extract the first word of "readlink", so it can be a program name with args. -set dummy readlink; ac_word=$2 + test -n "$CYGPATH" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !CYGPATH! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!CYGPATH!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xCYGPATH" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of CYGPATH from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of CYGPATH from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in cygpath +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CYGPATH+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CYGPATH in + [\\/]* | ?:[\\/]*) + ac_cv_path_CYGPATH="$CYGPATH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CYGPATH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CYGPATH=$ac_cv_path_CYGPATH +if test -n "$CYGPATH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5 +$as_echo "$CYGPATH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CYGPATH" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$CYGPATH" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool CYGPATH=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool CYGPATH=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CYGPATH+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CYGPATH in + [\\/]* | ?:[\\/]*) + ac_cv_path_CYGPATH="$CYGPATH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CYGPATH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CYGPATH=$ac_cv_path_CYGPATH +if test -n "$CYGPATH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5 +$as_echo "$CYGPATH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$CYGPATH" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool CYGPATH=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool CYGPATH=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CYGPATH" >&5 +$as_echo_n "checking for CYGPATH... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool CYGPATH=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + + + + # Publish this variable in the help. + + + if test "x$READLINK" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in greadlink readlink +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_READLINK+:} false; then : @@ -6537,8 +12625,154 @@ $as_echo "no" >&6; } fi - # Extract the first word of "df", so it can be a program name with args. -set dummy df; ac_word=$2 + test -n "$READLINK" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !READLINK! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!READLINK!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xREADLINK" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of READLINK from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of READLINK from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in greadlink readlink +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_READLINK+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $READLINK in + [\\/]* | ?:[\\/]*) + ac_cv_path_READLINK="$READLINK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_READLINK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +READLINK=$ac_cv_path_READLINK +if test -n "$READLINK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READLINK" >&5 +$as_echo "$READLINK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$READLINK" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$READLINK" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool READLINK=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool READLINK=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_READLINK+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $READLINK in + [\\/]* | ?:[\\/]*) + ac_cv_path_READLINK="$READLINK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_READLINK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +READLINK=$ac_cv_path_READLINK +if test -n "$READLINK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READLINK" >&5 +$as_echo "$READLINK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$READLINK" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool READLINK=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool READLINK=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for READLINK" >&5 +$as_echo_n "checking for READLINK... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool READLINK=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + + + + # Publish this variable in the help. + + + if test "x$DF" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in df +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_DF+:} false; then : @@ -6577,8 +12811,154 @@ $as_echo "no" >&6; } fi - # Extract the first word of "SetFile", so it can be a program name with args. -set dummy SetFile; ac_word=$2 + test -n "$DF" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !DF! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!DF!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xDF" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of DF from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of DF from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in df +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DF+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DF in + [\\/]* | ?:[\\/]*) + ac_cv_path_DF="$DF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DF=$ac_cv_path_DF +if test -n "$DF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DF" >&5 +$as_echo "$DF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DF" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$DF" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool DF=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool DF=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DF+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DF in + [\\/]* | ?:[\\/]*) + ac_cv_path_DF="$DF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DF=$ac_cv_path_DF +if test -n "$DF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DF" >&5 +$as_echo "$DF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$DF" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool DF=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool DF=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DF" >&5 +$as_echo_n "checking for DF... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool DF=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + + + + # Publish this variable in the help. + + + if test "x$SETFILE" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in SetFile +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_SETFILE+:} false; then : @@ -6617,6 +12997,143 @@ $as_echo "no" >&6; } fi + test -n "$SETFILE" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !SETFILE! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!SETFILE!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xSETFILE" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of SETFILE from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of SETFILE from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in SetFile +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_SETFILE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $SETFILE in + [\\/]* | ?:[\\/]*) + ac_cv_path_SETFILE="$SETFILE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_SETFILE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +SETFILE=$ac_cv_path_SETFILE +if test -n "$SETFILE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SETFILE" >&5 +$as_echo "$SETFILE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$SETFILE" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$SETFILE" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool SETFILE=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool SETFILE=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_SETFILE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $SETFILE in + [\\/]* | ?:[\\/]*) + ac_cv_path_SETFILE="$SETFILE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_SETFILE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +SETFILE=$ac_cv_path_SETFILE +if test -n "$SETFILE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SETFILE" >&5 +$as_echo "$SETFILE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$SETFILE" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool SETFILE=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool SETFILE=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SETFILE" >&5 +$as_echo_n "checking for SETFILE... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool SETFILE=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + # Now we can determine OpenJDK build and target platforms. This is required to @@ -6784,6 +13301,11 @@ test -n "$target_alias" && VAR_OS_API=winapi VAR_OS_ENV=windows.msys ;; + *aix*) + VAR_OS=aix + VAR_OS_API=posix + VAR_OS_ENV=aix + ;; *) as_fn_error $? "unsupported operating system $build_os" "$LINENO" 5 ;; @@ -6904,6 +13426,11 @@ $as_echo "$OPENJDK_BUILD_OS-$OPENJDK_BUILD_CPU" >&6; } VAR_OS_API=winapi VAR_OS_ENV=windows.msys ;; + *aix*) + VAR_OS=aix + VAR_OS_API=posix + VAR_OS_ENV=aix + ;; *) as_fn_error $? "unsupported operating system $host_os" "$LINENO" 5 ;; @@ -7810,6 +14337,37 @@ fi $as_echo "$JDK_VARIANT" >&6; } +############################################################################### +# +# Check which interpreter of the JVM we want to build. +# Currently we have: +# template: Template interpreter (the default) +# cpp : C++ interpreter +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which interpreter of the JVM to build" >&5 +$as_echo_n "checking which interpreter of the JVM to build... " >&6; } + +# Check whether --with-jvm-interpreter was given. +if test "${with_jvm_interpreter+set}" = set; then : + withval=$with_jvm_interpreter; +fi + + +if test "x$with_jvm_interpreter" = x; then + with_jvm_interpreter="template" +fi + +JVM_INTERPRETER="$with_jvm_interpreter" + +if test "x$JVM_INTERPRETER" != xtemplate && test "x$JVM_INTERPRETER" != xcpp; then + as_fn_error $? "The available JVM interpreters are: template, cpp" "$LINENO" 5 +fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_jvm_interpreter" >&5 +$as_echo "$with_jvm_interpreter" >&6; } + + ############################################################################### # @@ -7822,6 +14380,7 @@ $as_echo "$JDK_VARIANT" >&6; } # ie normal interpreter and C1, only the serial GC, kernel jvmti etc # zero: no machine code interpreter, no compiler # zeroshark: zero interpreter and shark/llvm compiler backend +# core: interpreter only, no compiler (only works on some platforms) { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variants of the JVM to build" >&5 $as_echo_n "checking which variants of the JVM to build... " >&6; } @@ -7836,10 +14395,10 @@ fi fi JVM_VARIANTS=",$with_jvm_variants," - TEST_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,//' -e 's/client,//' -e 's/minimal1,//' -e 's/kernel,//' -e 's/zero,//' -e 's/zeroshark,//'` + TEST_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,//' -e 's/client,//' -e 's/minimal1,//' -e 's/kernel,//' -e 's/zero,//' -e 's/zeroshark,//' -e 's/core,//'` if test "x$TEST_VARIANTS" != "x,"; then - as_fn_error $? "The available JVM variants are: server, client, minimal1, kernel, zero, zeroshark" "$LINENO" 5 + as_fn_error $? "The available JVM variants are: server, client, minimal1, kernel, zero, zeroshark, core" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_jvm_variants" >&5 $as_echo "$with_jvm_variants" >&6; } @@ -7850,6 +14409,7 @@ $as_echo "$with_jvm_variants" >&6; } JVM_VARIANT_KERNEL=`$ECHO "$JVM_VARIANTS" | $SED -e '/,kernel,/!s/.*/false/g' -e '/,kernel,/s/.*/true/g'` JVM_VARIANT_ZERO=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zero,/!s/.*/false/g' -e '/,zero,/s/.*/true/g'` JVM_VARIANT_ZEROSHARK=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zeroshark,/!s/.*/false/g' -e '/,zeroshark,/s/.*/true/g'` + JVM_VARIANT_CORE=`$ECHO "$JVM_VARIANTS" | $SED -e '/,core,/!s/.*/false/g' -e '/,core,/s/.*/true/g'` if test "x$JVM_VARIANT_CLIENT" = xtrue; then if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then @@ -7868,8 +14428,8 @@ $as_echo "$with_jvm_variants" >&6; } fi # Replace the commas with AND for use in the build directory name. - ANDED_JVM_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/^,//' -e 's/,$//' -e 's/,/AND/'` - COUNT_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,/1/' -e 's/client,/1/' -e 's/minimal1,/1/' -e 's/kernel,/1/' -e 's/zero,/1/' -e 's/zeroshark,/1/'` + ANDED_JVM_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/^,//' -e 's/,$//' -e 's/,/AND/g'` + COUNT_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,/1/' -e 's/client,/1/' -e 's/minimal1,/1/' -e 's/kernel,/1/' -e 's/zero,/1/' -e 's/zeroshark,/1/' -e 's/core,/1/'` if test "x$COUNT_VARIANTS" != "x,1"; then BUILDING_MULTIPLE_JVM_VARIANTS=yes else @@ -7884,6 +14444,7 @@ $as_echo "$with_jvm_variants" >&6; } + INCLUDE_SA=true if test "x$JVM_VARIANT_ZERO" = xtrue ; then INCLUDE_SA=false @@ -7891,6 +14452,9 @@ $as_echo "$with_jvm_variants" >&6; } if test "x$JVM_VARIANT_ZEROSHARK" = xtrue ; then INCLUDE_SA=false fi + if test "x$VAR_CPU" = xppc64 ; then + INCLUDE_SA=false + fi if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then @@ -8006,6 +14570,10 @@ $as_echo "$DEBUG_LEVEL" >&6; } HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}shark " fi + if test "x$JVM_VARIANT_CORE" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}core " + fi + HOTSPOT_TARGET="$HOTSPOT_TARGET docs export_$HOTSPOT_EXPORT" # On Macosx universal binaries are produced, but they only contain @@ -10085,7 +16653,14 @@ $as_echo "yes" >&6; } # These tools might not be installed by default, # need hint on how to install them. - for ac_prog in unzip + + + # Publish this variable in the help. + + + if test "x$UNZIP" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in unzip do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -10130,21 +16705,155 @@ fi test -n "$UNZIP" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !UNZIP! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!UNZIP!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xUNZIP" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of UNZIP from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of UNZIP from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in unzip +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_UNZIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $UNZIP in + [\\/]* | ?:[\\/]*) + ac_cv_path_UNZIP="$UNZIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_UNZIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +UNZIP=$ac_cv_path_UNZIP +if test -n "$UNZIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNZIP" >&5 +$as_echo "$UNZIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$UNZIP" && break +done - if test "x$UNZIP" = x; then - if test "xunzip" = x; then - PROG_NAME=unzip else - PROG_NAME=unzip + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$UNZIP" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool UNZIP=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool UNZIP=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_UNZIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $UNZIP in + [\\/]* | ?:[\\/]*) + ac_cv_path_UNZIP="$UNZIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_UNZIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +UNZIP=$ac_cv_path_UNZIP +if test -n "$UNZIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNZIP" >&5 +$as_echo "$UNZIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$UNZIP" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool UNZIP=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool UNZIP=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for UNZIP" >&5 +$as_echo_n "checking for UNZIP... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool UNZIP=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in zip + if test "x$UNZIP" = x; then + as_fn_error $? "Could not find required tool for UNZIP" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$ZIP" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in zip do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -10189,24 +16898,160 @@ fi test -n "$ZIP" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !ZIP! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!ZIP!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xZIP" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of ZIP from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of ZIP from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in zip +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ZIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ZIP in + [\\/]* | ?:[\\/]*) + ac_cv_path_ZIP="$ZIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ZIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ZIP=$ac_cv_path_ZIP +if test -n "$ZIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ZIP" >&5 +$as_echo "$ZIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ZIP" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$ZIP" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool ZIP=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool ZIP=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ZIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ZIP in + [\\/]* | ?:[\\/]*) + ac_cv_path_ZIP="$ZIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ZIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ZIP=$ac_cv_path_ZIP +if test -n "$ZIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ZIP" >&5 +$as_echo "$ZIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$ZIP" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool ZIP=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool ZIP=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ZIP" >&5 +$as_echo_n "checking for ZIP... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool ZIP=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$ZIP" = x; then - if test "xzip" = x; then - PROG_NAME=zip - else - PROG_NAME=zip - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 + as_fn_error $? "Could not find required tool for ZIP" "$LINENO" 5 fi # Non-required basic tools - # Extract the first word of "ldd", so it can be a program name with args. -set dummy ldd; ac_word=$2 + + + # Publish this variable in the help. + + + if test "x$LDD" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in ldd +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_LDD+:} false; then : @@ -10245,14 +17090,160 @@ $as_echo "no" >&6; } fi + test -n "$LDD" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !LDD! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!LDD!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xLDD" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of LDD from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of LDD from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in ldd +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_LDD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $LDD in + [\\/]* | ?:[\\/]*) + ac_cv_path_LDD="$LDD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_LDD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +LDD=$ac_cv_path_LDD +if test -n "$LDD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LDD" >&5 +$as_echo "$LDD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$LDD" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$LDD" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool LDD=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool LDD=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_LDD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $LDD in + [\\/]* | ?:[\\/]*) + ac_cv_path_LDD="$LDD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_LDD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +LDD=$ac_cv_path_LDD +if test -n "$LDD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LDD" >&5 +$as_echo "$LDD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$LDD" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool LDD=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool LDD=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LDD" >&5 +$as_echo_n "checking for LDD... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool LDD=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$LDD" = "x"; then # List shared lib dependencies is used for # debug output and checking for forbidden dependencies. # We can build without it. LDD="true" fi - # Extract the first word of "otool", so it can be a program name with args. -set dummy otool; ac_word=$2 + + + # Publish this variable in the help. + + + if test "x$OTOOL" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in otool +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_OTOOL+:} false; then : @@ -10291,10 +17282,154 @@ $as_echo "no" >&6; } fi + test -n "$OTOOL" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !OTOOL! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!OTOOL!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xOTOOL" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of OTOOL from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of OTOOL from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in otool +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $OTOOL in + [\\/]* | ?:[\\/]*) + ac_cv_path_OTOOL="$OTOOL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_OTOOL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +OTOOL=$ac_cv_path_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$OTOOL" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$OTOOL" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool OTOOL=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool OTOOL=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $OTOOL in + [\\/]* | ?:[\\/]*) + ac_cv_path_OTOOL="$OTOOL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_OTOOL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +OTOOL=$ac_cv_path_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$OTOOL" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool OTOOL=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool OTOOL=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OTOOL" >&5 +$as_echo_n "checking for OTOOL... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool OTOOL=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$OTOOL" = "x"; then OTOOL="true" fi - for ac_prog in readelf greadelf + + + # Publish this variable in the help. + + + if test "x$READELF" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in greadelf readelf do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -10339,8 +17474,151 @@ fi test -n "$READELF" && break done - # Extract the first word of "hg", so it can be a program name with args. -set dummy hg; ac_word=$2 + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !READELF! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!READELF!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xREADELF" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of READELF from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of READELF from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in greadelf readelf +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_READELF+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $READELF in + [\\/]* | ?:[\\/]*) + ac_cv_path_READELF="$READELF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_READELF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +READELF=$ac_cv_path_READELF +if test -n "$READELF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READELF" >&5 +$as_echo "$READELF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$READELF" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$READELF" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool READELF=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool READELF=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_READELF+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $READELF in + [\\/]* | ?:[\\/]*) + ac_cv_path_READELF="$READELF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_READELF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +READELF=$ac_cv_path_READELF +if test -n "$READELF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READELF" >&5 +$as_echo "$READELF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$READELF" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool READELF=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool READELF=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for READELF" >&5 +$as_echo_n "checking for READELF... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool READELF=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + + + + # Publish this variable in the help. + + + if test "x$HG" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in hg +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_HG+:} false; then : @@ -10379,8 +17657,154 @@ $as_echo "no" >&6; } fi - # Extract the first word of "stat", so it can be a program name with args. -set dummy stat; ac_word=$2 + test -n "$HG" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !HG! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!HG!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xHG" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of HG from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of HG from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in hg +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_HG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $HG in + [\\/]* | ?:[\\/]*) + ac_cv_path_HG="$HG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_HG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +HG=$ac_cv_path_HG +if test -n "$HG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HG" >&5 +$as_echo "$HG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$HG" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$HG" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool HG=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool HG=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_HG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $HG in + [\\/]* | ?:[\\/]*) + ac_cv_path_HG="$HG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_HG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +HG=$ac_cv_path_HG +if test -n "$HG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HG" >&5 +$as_echo "$HG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$HG" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool HG=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool HG=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for HG" >&5 +$as_echo_n "checking for HG... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool HG=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + + + + # Publish this variable in the help. + + + if test "x$STAT" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in stat +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_STAT+:} false; then : @@ -10419,8 +17843,154 @@ $as_echo "no" >&6; } fi - # Extract the first word of "time", so it can be a program name with args. -set dummy time; ac_word=$2 + test -n "$STAT" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !STAT! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!STAT!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xSTAT" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of STAT from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of STAT from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in stat +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_STAT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $STAT in + [\\/]* | ?:[\\/]*) + ac_cv_path_STAT="$STAT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_STAT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +STAT=$ac_cv_path_STAT +if test -n "$STAT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STAT" >&5 +$as_echo "$STAT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$STAT" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$STAT" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool STAT=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool STAT=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_STAT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $STAT in + [\\/]* | ?:[\\/]*) + ac_cv_path_STAT="$STAT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_STAT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +STAT=$ac_cv_path_STAT +if test -n "$STAT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STAT" >&5 +$as_echo "$STAT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$STAT" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool STAT=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool STAT=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for STAT" >&5 +$as_echo_n "checking for STAT... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool STAT=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + + + + # Publish this variable in the help. + + + if test "x$TIME" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in time +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_TIME+:} false; then : @@ -10459,6 +18029,143 @@ $as_echo "no" >&6; } fi + test -n "$TIME" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !TIME! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!TIME!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xTIME" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of TIME from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of TIME from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in time +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_TIME+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $TIME in + [\\/]* | ?:[\\/]*) + ac_cv_path_TIME="$TIME" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_TIME="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TIME=$ac_cv_path_TIME +if test -n "$TIME"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TIME" >&5 +$as_echo "$TIME" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$TIME" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$TIME" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool TIME=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool TIME=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_TIME+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $TIME in + [\\/]* | ?:[\\/]*) + ac_cv_path_TIME="$TIME" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_TIME="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TIME=$ac_cv_path_TIME +if test -n "$TIME"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TIME" >&5 +$as_echo "$TIME" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$TIME" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool TIME=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool TIME=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TIME" >&5 +$as_echo_n "checking for TIME... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool TIME=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + # Check if it's GNU time IS_GNU_TIME=`$TIME --version 2>&1 | $GREP 'GNU time'` if test "x$IS_GNU_TIME" != x; then @@ -10470,7 +18177,14 @@ fi if test "x$OPENJDK_TARGET_OS" = "xwindows"; then - for ac_prog in comm + + + # Publish this variable in the help. + + + if test "x$COMM" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in comm do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -10515,16 +18229,143 @@ fi test -n "$COMM" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !COMM! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!COMM!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xCOMM" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of COMM from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of COMM from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in comm +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_COMM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $COMM in + [\\/]* | ?:[\\/]*) + ac_cv_path_COMM="$COMM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_COMM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +COMM=$ac_cv_path_COMM +if test -n "$COMM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $COMM" >&5 +$as_echo "$COMM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$COMM" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$COMM" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool COMM=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool COMM=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_COMM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $COMM in + [\\/]* | ?:[\\/]*) + ac_cv_path_COMM="$COMM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_COMM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +COMM=$ac_cv_path_COMM +if test -n "$COMM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $COMM" >&5 +$as_echo "$COMM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$COMM" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool COMM=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool COMM=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for COMM" >&5 +$as_echo_n "checking for COMM... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool COMM=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$COMM" = x; then - if test "xcomm" = x; then - PROG_NAME=comm - else - PROG_NAME=comm - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 + as_fn_error $? "Could not find required tool for COMM" "$LINENO" 5 fi @@ -10532,7 +18373,14 @@ $as_echo "$as_me: Could not find $PROG_NAME!" >&6;} if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then - for ac_prog in dsymutil + + + # Publish this variable in the help. + + + if test "x$DSYMUTIL" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in dsymutil do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -10577,21 +18425,155 @@ fi test -n "$DSYMUTIL" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !DSYMUTIL! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!DSYMUTIL!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xDSYMUTIL" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of DSYMUTIL from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of DSYMUTIL from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in dsymutil +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DSYMUTIL in + [\\/]* | ?:[\\/]*) + ac_cv_path_DSYMUTIL="$DSYMUTIL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DSYMUTIL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DSYMUTIL=$ac_cv_path_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DSYMUTIL" && break +done - if test "x$DSYMUTIL" = x; then - if test "xdsymutil" = x; then - PROG_NAME=dsymutil else - PROG_NAME=dsymutil + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$DSYMUTIL" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool DSYMUTIL=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool DSYMUTIL=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DSYMUTIL in + [\\/]* | ?:[\\/]*) + ac_cv_path_DSYMUTIL="$DSYMUTIL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DSYMUTIL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DSYMUTIL=$ac_cv_path_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$DSYMUTIL" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool DSYMUTIL=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool DSYMUTIL=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DSYMUTIL" >&5 +$as_echo_n "checking for DSYMUTIL... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool DSYMUTIL=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - for ac_prog in xattr + if test "x$DSYMUTIL" = x; then + as_fn_error $? "Could not find required tool for DSYMUTIL" "$LINENO" 5 + fi + + + + + + # Publish this variable in the help. + + + if test "x$XATTR" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in xattr do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -10636,21 +18618,157 @@ fi test -n "$XATTR" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !XATTR! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!XATTR!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xXATTR" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of XATTR from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of XATTR from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in xattr +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_XATTR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $XATTR in + [\\/]* | ?:[\\/]*) + ac_cv_path_XATTR="$XATTR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_XATTR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +XATTR=$ac_cv_path_XATTR +if test -n "$XATTR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XATTR" >&5 +$as_echo "$XATTR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$XATTR" && break +done - if test "x$XATTR" = x; then - if test "xxattr" = x; then - PROG_NAME=xattr else - PROG_NAME=xattr + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$XATTR" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool XATTR=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool XATTR=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_XATTR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $XATTR in + [\\/]* | ?:[\\/]*) + ac_cv_path_XATTR="$XATTR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_XATTR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +XATTR=$ac_cv_path_XATTR +if test -n "$XATTR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XATTR" >&5 +$as_echo "$XATTR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$XATTR" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool XATTR=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool XATTR=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XATTR" >&5 +$as_echo_n "checking for XATTR... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool XATTR=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 fi - # Extract the first word of "codesign", so it can be a program name with args. -set dummy codesign; ac_word=$2 + + if test "x$XATTR" = x; then + as_fn_error $? "Could not find required tool for XATTR" "$LINENO" 5 + fi + + + + + # Publish this variable in the help. + + + if test "x$CODESIGN" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in codesign +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_CODESIGN+:} false; then : @@ -10689,6 +18807,143 @@ $as_echo "no" >&6; } fi + test -n "$CODESIGN" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !CODESIGN! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!CODESIGN!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xCODESIGN" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of CODESIGN from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of CODESIGN from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in codesign +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CODESIGN+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CODESIGN in + [\\/]* | ?:[\\/]*) + ac_cv_path_CODESIGN="$CODESIGN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CODESIGN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CODESIGN=$ac_cv_path_CODESIGN +if test -n "$CODESIGN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CODESIGN" >&5 +$as_echo "$CODESIGN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CODESIGN" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$CODESIGN" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool CODESIGN=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool CODESIGN=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CODESIGN+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CODESIGN in + [\\/]* | ?:[\\/]*) + ac_cv_path_CODESIGN="$CODESIGN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CODESIGN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CODESIGN=$ac_cv_path_CODESIGN +if test -n "$CODESIGN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CODESIGN" >&5 +$as_echo "$CODESIGN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$CODESIGN" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool CODESIGN=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool CODESIGN=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CODESIGN" >&5 +$as_echo_n "checking for CODESIGN... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool CODESIGN=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$CODESIGN" != "x"; then # Verify that the openjdk_codesign certificate is present { $as_echo "$as_me:${as_lineno-$LINENO}: checking if openjdk_codesign certificate is present" >&5 @@ -11287,12 +19542,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -11619,12 +19874,942 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} + BOOT_JDK_FOUND=no + else + # We're done! :-) + BOOT_JDK_FOUND=yes + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + + # Use eval to expand a potential ~ + eval path="$path" + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + BOOT_JDK="`cd "$path"; $THEPWDCMD -L`" + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } + fi # end check jdk version + fi # end check rt.jar + fi # end check javac + fi # end check java + fi # end check boot jdk found + fi + + + # Test: On MacOS X, can we find a boot jdk using /usr/libexec/java_home? + + if test "x$BOOT_JDK_FOUND" = xno; then + # Now execute the test + + if test "x$OPENJDK_TARGET_OS" = xmacosx; then + # First check at user selected default + + if test "x$BOOT_JDK_FOUND" = xno; then + # Now execute the test + + if test -x /usr/libexec/java_home; then + BOOT_JDK=`/usr/libexec/java_home ` + BOOT_JDK_FOUND=maybe + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using /usr/libexec/java_home " >&5 +$as_echo "$as_me: Found potential Boot JDK using /usr/libexec/java_home " >&6;} + fi + + + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. + if test "x$BOOT_JDK_FOUND" = xmaybe; then + # Do we have a bin/java? + if test ! -x "$BOOT_JDK/bin/java"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have a bin/javac? + if test ! -x "$BOOT_JDK/bin/javac"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (This might be an JRE instead of an JDK)" >&5 +$as_echo "$as_me: (This might be an JRE instead of an JDK)" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have an rt.jar? (On MacOSX it is called classes.jar) + if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` + + # Extra M4 quote needed to protect [] in grep expression. + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} + BOOT_JDK_FOUND=no + else + # We're done! :-) + BOOT_JDK_FOUND=yes + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + + # Use eval to expand a potential ~ + eval path="$path" + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + BOOT_JDK="`cd "$path"; $THEPWDCMD -L`" + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } + fi # end check jdk version + fi # end check rt.jar + fi # end check javac + fi # end check java + fi # end check boot jdk found + fi + + # If that did not work out (e.g. too old), try explicit versions instead + + if test "x$BOOT_JDK_FOUND" = xno; then + # Now execute the test + + if test -x /usr/libexec/java_home; then + BOOT_JDK=`/usr/libexec/java_home -v 1.9` + BOOT_JDK_FOUND=maybe + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using /usr/libexec/java_home -v 1.9" >&5 +$as_echo "$as_me: Found potential Boot JDK using /usr/libexec/java_home -v 1.9" >&6;} + fi + + + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. + if test "x$BOOT_JDK_FOUND" = xmaybe; then + # Do we have a bin/java? + if test ! -x "$BOOT_JDK/bin/java"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have a bin/javac? + if test ! -x "$BOOT_JDK/bin/javac"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (This might be an JRE instead of an JDK)" >&5 +$as_echo "$as_me: (This might be an JRE instead of an JDK)" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have an rt.jar? (On MacOSX it is called classes.jar) + if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` + + # Extra M4 quote needed to protect [] in grep expression. + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} + BOOT_JDK_FOUND=no + else + # We're done! :-) + BOOT_JDK_FOUND=yes + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + + # Use eval to expand a potential ~ + eval path="$path" + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + BOOT_JDK="`cd "$path"; $THEPWDCMD -L`" + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } + fi # end check jdk version + fi # end check rt.jar + fi # end check javac + fi # end check java + fi # end check boot jdk found + fi + + + if test "x$BOOT_JDK_FOUND" = xno; then + # Now execute the test + + if test -x /usr/libexec/java_home; then + BOOT_JDK=`/usr/libexec/java_home -v 1.8` + BOOT_JDK_FOUND=maybe + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using /usr/libexec/java_home -v 1.8" >&5 +$as_echo "$as_me: Found potential Boot JDK using /usr/libexec/java_home -v 1.8" >&6;} + fi + + + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. + if test "x$BOOT_JDK_FOUND" = xmaybe; then + # Do we have a bin/java? + if test ! -x "$BOOT_JDK/bin/java"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have a bin/javac? + if test ! -x "$BOOT_JDK/bin/javac"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (This might be an JRE instead of an JDK)" >&5 +$as_echo "$as_me: (This might be an JRE instead of an JDK)" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have an rt.jar? (On MacOSX it is called classes.jar) + if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` + + # Extra M4 quote needed to protect [] in grep expression. + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} + BOOT_JDK_FOUND=no + else + # We're done! :-) + BOOT_JDK_FOUND=yes + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + + # Use eval to expand a potential ~ + eval path="$path" + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + BOOT_JDK="`cd "$path"; $THEPWDCMD -L`" + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } + fi # end check jdk version + fi # end check rt.jar + fi # end check javac + fi # end check java + fi # end check boot jdk found + fi + + + if test "x$BOOT_JDK_FOUND" = xno; then + # Now execute the test + + if test -x /usr/libexec/java_home; then + BOOT_JDK=`/usr/libexec/java_home -v 1.7` + BOOT_JDK_FOUND=maybe + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using /usr/libexec/java_home -v 1.7" >&5 +$as_echo "$as_me: Found potential Boot JDK using /usr/libexec/java_home -v 1.7" >&6;} + fi + + + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. + if test "x$BOOT_JDK_FOUND" = xmaybe; then + # Do we have a bin/java? + if test ! -x "$BOOT_JDK/bin/java"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have a bin/javac? + if test ! -x "$BOOT_JDK/bin/javac"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (This might be an JRE instead of an JDK)" >&5 +$as_echo "$as_me: (This might be an JRE instead of an JDK)" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have an rt.jar? (On MacOSX it is called classes.jar) + if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` + + # Extra M4 quote needed to protect [] in grep expression. + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} + BOOT_JDK_FOUND=no + else + # We're done! :-) + BOOT_JDK_FOUND=yes + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + + # Use eval to expand a potential ~ + eval path="$path" + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + BOOT_JDK="`cd "$path"; $THEPWDCMD -L`" + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } + fi # end check jdk version + fi # end check rt.jar + fi # end check javac + fi # end check java + fi # end check boot jdk found + fi + + fi + + + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. + if test "x$BOOT_JDK_FOUND" = xmaybe; then + # Do we have a bin/java? + if test ! -x "$BOOT_JDK/bin/java"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have a bin/javac? + if test ! -x "$BOOT_JDK/bin/javac"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (This might be an JRE instead of an JDK)" >&5 +$as_echo "$as_me: (This might be an JRE instead of an JDK)" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have an rt.jar? (On MacOSX it is called classes.jar) + if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` + + # Extra M4 quote needed to protect [] in grep expression. + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -11937,200 +21122,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} - BOOT_JDK_FOUND=no - else - # We're done! :-) - BOOT_JDK_FOUND=yes - - if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then - - # Input might be given as Windows format, start by converting to - # unix format. - path="$BOOT_JDK" - new_path=`$CYGPATH -u "$path"` - - # Cygwin tries to hide some aspects of the Windows file system, such that binaries are - # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered - # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then - # "foo.exe" is OK but "foo" is an error. - # - # This test is therefore slightly more accurate than "test -f" to check for file precense. - # It is also a way to make sure we got the proper file name for the real test later on. - test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` - if test "x$test_shortpath" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 -$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} - as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 - fi - - # Call helper function which possibly converts this using DOS-style short mode. - # If so, the updated path is stored in $new_path. - - input_path="$new_path" - # Check if we need to convert this using DOS-style short mode. If the path - # contains just simple characters, use it. Otherwise (spaces, weird characters), - # take no chances and rewrite it. - # Note: m4 eats our [], so we need to use [ and ] instead. - has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` - if test "x$has_forbidden_chars" != x; then - # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) - shortmode_path=`$CYGPATH -s -m -a "$input_path"` - path_after_shortmode=`$CYGPATH -u "$shortmode_path"` - if test "x$path_after_shortmode" != "x$input_to_shortpath"; then - # Going to short mode and back again did indeed matter. Since short mode is - # case insensitive, let's make it lowercase to improve readability. - shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - # Now convert it back to Unix-stile (cygpath) - input_path=`$CYGPATH -u "$shortmode_path"` - new_path="$input_path" - fi - fi - - test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` - if test "x$test_cygdrive_prefix" = x; then - # As a simple fix, exclude /usr/bin since it's not a real path. - if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then - # The path is in a Cygwin special directory (e.g. /home). We need this converted to - # a path prefixed by /cygdrive for fixpath to work. - new_path="$CYGWIN_ROOT_PATH$input_path" - fi - fi - - - if test "x$path" != "x$new_path"; then - BOOT_JDK="$new_path" - { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 -$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} - fi - - elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then - - path="$BOOT_JDK" - has_colon=`$ECHO $path | $GREP ^.:` - new_path="$path" - if test "x$has_colon" = x; then - # Not in mixed or Windows style, start by that. - new_path=`cmd //c echo $path` - fi - - - input_path="$new_path" - # Check if we need to convert this using DOS-style short mode. If the path - # contains just simple characters, use it. Otherwise (spaces, weird characters), - # take no chances and rewrite it. - # Note: m4 eats our [], so we need to use [ and ] instead. - has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` - if test "x$has_forbidden_chars" != x; then - # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) - new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - fi - - - windows_path="$new_path" - if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then - unix_path=`$CYGPATH -u "$windows_path"` - new_path="$unix_path" - elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then - unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` - new_path="$unix_path" - fi - - if test "x$path" != "x$new_path"; then - BOOT_JDK="$new_path" - { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 -$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} - fi - - # Save the first 10 bytes of this path to the storage, so fixpath can work. - all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") - - else - # We're on a posix platform. Hooray! :) - path="$BOOT_JDK" - has_space=`$ECHO "$path" | $GREP " "` - if test "x$has_space" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 -$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} - as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 - fi - - # Use eval to expand a potential ~ - eval path="$path" - if test ! -f "$path" && test ! -d "$path"; then - as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 - fi - - BOOT_JDK="`cd "$path"; $THEPWDCMD -L`" - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 -$as_echo_n "checking for Boot JDK... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 -$as_echo "$BOOT_JDK" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 -$as_echo_n "checking Boot JDK version... " >&6; } - BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 -$as_echo "$BOOT_JDK_VERSION" >&6; } - fi # end check jdk version - fi # end check rt.jar - fi # end check javac - fi # end check java - fi # end check boot jdk found - fi - - - # Test: Is there a /usr/libexec/java_home? (Typically on MacOSX) - - if test "x$BOOT_JDK_FOUND" = xno; then - # Now execute the test - - if test -x /usr/libexec/java_home; then - BOOT_JDK=`/usr/libexec/java_home` - BOOT_JDK_FOUND=maybe - { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using /usr/libexec/java_home" >&5 -$as_echo "$as_me: Found potential Boot JDK using /usr/libexec/java_home" >&6;} - fi - - - # If previous step claimed to have found a JDK, check it to see if it seems to be valid. - if test "x$BOOT_JDK_FOUND" = xmaybe; then - # Do we have a bin/java? - if test ! -x "$BOOT_JDK/bin/java"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&5 -$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&6;} - BOOT_JDK_FOUND=no - else - # Do we have a bin/javac? - if test ! -x "$BOOT_JDK/bin/javac"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&5 -$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (This might be an JRE instead of an JDK)" >&5 -$as_echo "$as_me: (This might be an JRE instead of an JDK)" >&6;} - BOOT_JDK_FOUND=no - else - # Do we have an rt.jar? (On MacOSX it is called classes.jar) - if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&5 -$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&6;} - BOOT_JDK_FOUND=no - else - # Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? - BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` - - # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 -$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -12453,12 +21450,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -12668,12 +21665,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -12848,12 +21845,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -13056,12 +22053,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -13236,12 +22233,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -13444,12 +22441,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -13624,12 +22621,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -13832,12 +22829,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -14012,12 +23009,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -14207,12 +23204,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -14385,12 +23382,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -14581,12 +23578,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -14759,12 +23756,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -14954,12 +23951,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -15132,12 +24129,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -15328,12 +24325,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -15506,12 +24503,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -15683,12 +24680,12 @@ $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.ja BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` # Extra M4 quote needed to protect [] in grep expression. - FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` - if test "x$FOUND_VERSION_78" = x; then + FOUND_CORRECT_VERSION=`echo $BOOT_JDK_VERSION | grep '\"1\.[789]\.'` + if test "x$FOUND_CORRECT_VERSION" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 $as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 -$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7, 8 or 9)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7, 8 or 9)" >&6;} BOOT_JDK_FOUND=no else # We're done! :-) @@ -15857,8 +24854,6 @@ $as_echo "$BOOT_JDK_VERSION" >&6; } pkgutil_help $MISSING_DEPENDENCY ;; pkgadd) pkgadd_help $MISSING_DEPENDENCY ;; - * ) - break ;; esac if test "x$PKGHANDLER_COMMAND" != x; then @@ -15891,104 +24886,768 @@ $as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >& # Setup tools from the Boot JDK. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for java in Boot JDK" >&5 + # Use user overridden value if available, otherwise locate tool in the Boot JDK. + + # Publish this variable in the help. + + + if test "x$JAVA" = x; then + # The variable is not set by user, try to locate tool using the code snippet + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for java in Boot JDK" >&5 $as_echo_n "checking for java in Boot JDK... " >&6; } - JAVA=$BOOT_JDK/bin/java - if test ! -x $JAVA; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 + JAVA=$BOOT_JDK/bin/java + if test ! -x $JAVA; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 $as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} - as_fn_error $? "Could not find java in the Boot JDK" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 + as_fn_error $? "Could not find java in the Boot JDK" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for javac in Boot JDK" >&5 + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !JAVA! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!JAVA!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xJAVA" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of JAVA from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of JAVA from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for java in Boot JDK" >&5 +$as_echo_n "checking for java in Boot JDK... " >&6; } + JAVA=$BOOT_JDK/bin/java + if test ! -x $JAVA; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Could not find java in the Boot JDK" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } + + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$JAVA" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool JAVA=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool JAVA=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_JAVA+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $JAVA in + [\\/]* | ?:[\\/]*) + ac_cv_path_JAVA="$JAVA" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_JAVA="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +JAVA=$ac_cv_path_JAVA +if test -n "$JAVA"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVA" >&5 +$as_echo "$JAVA" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$JAVA" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool JAVA=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool JAVA=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JAVA" >&5 +$as_echo_n "checking for JAVA... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool JAVA=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + + + # Use user overridden value if available, otherwise locate tool in the Boot JDK. + + # Publish this variable in the help. + + + if test "x$JAVAC" = x; then + # The variable is not set by user, try to locate tool using the code snippet + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for javac in Boot JDK" >&5 $as_echo_n "checking for javac in Boot JDK... " >&6; } - JAVAC=$BOOT_JDK/bin/javac - if test ! -x $JAVAC; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 + JAVAC=$BOOT_JDK/bin/javac + if test ! -x $JAVAC; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 $as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} - as_fn_error $? "Could not find javac in the Boot JDK" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 + as_fn_error $? "Could not find javac in the Boot JDK" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for javah in Boot JDK" >&5 + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !JAVAC! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!JAVAC!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xJAVAC" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of JAVAC from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of JAVAC from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for javac in Boot JDK" >&5 +$as_echo_n "checking for javac in Boot JDK... " >&6; } + JAVAC=$BOOT_JDK/bin/javac + if test ! -x $JAVAC; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Could not find javac in the Boot JDK" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } + + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$JAVAC" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool JAVAC=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool JAVAC=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_JAVAC+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $JAVAC in + [\\/]* | ?:[\\/]*) + ac_cv_path_JAVAC="$JAVAC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_JAVAC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +JAVAC=$ac_cv_path_JAVAC +if test -n "$JAVAC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVAC" >&5 +$as_echo "$JAVAC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$JAVAC" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool JAVAC=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool JAVAC=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JAVAC" >&5 +$as_echo_n "checking for JAVAC... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool JAVAC=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + + + # Use user overridden value if available, otherwise locate tool in the Boot JDK. + + # Publish this variable in the help. + + + if test "x$JAVAH" = x; then + # The variable is not set by user, try to locate tool using the code snippet + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for javah in Boot JDK" >&5 $as_echo_n "checking for javah in Boot JDK... " >&6; } - JAVAH=$BOOT_JDK/bin/javah - if test ! -x $JAVAH; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 + JAVAH=$BOOT_JDK/bin/javah + if test ! -x $JAVAH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 $as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} - as_fn_error $? "Could not find javah in the Boot JDK" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 + as_fn_error $? "Could not find javah in the Boot JDK" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for javap in Boot JDK" >&5 -$as_echo_n "checking for javap in Boot JDK... " >&6; } - JAVAP=$BOOT_JDK/bin/javap - if test ! -x $JAVAP; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !JAVAH! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!JAVAH!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xJAVAH" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of JAVAH from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of JAVAH from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for javah in Boot JDK" >&5 +$as_echo_n "checking for javah in Boot JDK... " >&6; } + JAVAH=$BOOT_JDK/bin/javah + if test ! -x $JAVAH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 $as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} - as_fn_error $? "Could not find javap in the Boot JDK" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 + as_fn_error $? "Could not find javah in the Boot JDK" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jar in Boot JDK" >&5 + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$JAVAH" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool JAVAH=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool JAVAH=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_JAVAH+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $JAVAH in + [\\/]* | ?:[\\/]*) + ac_cv_path_JAVAH="$JAVAH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_JAVAH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +JAVAH=$ac_cv_path_JAVAH +if test -n "$JAVAH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVAH" >&5 +$as_echo "$JAVAH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$JAVAH" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool JAVAH=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool JAVAH=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JAVAH" >&5 +$as_echo_n "checking for JAVAH... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool JAVAH=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + + + # Use user overridden value if available, otherwise locate tool in the Boot JDK. + + # Publish this variable in the help. + + + if test "x$JAR" = x; then + # The variable is not set by user, try to locate tool using the code snippet + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jar in Boot JDK" >&5 $as_echo_n "checking for jar in Boot JDK... " >&6; } - JAR=$BOOT_JDK/bin/jar - if test ! -x $JAR; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 + JAR=$BOOT_JDK/bin/jar + if test ! -x $JAR; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 $as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} - as_fn_error $? "Could not find jar in the Boot JDK" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 + as_fn_error $? "Could not find jar in the Boot JDK" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for rmic in Boot JDK" >&5 -$as_echo_n "checking for rmic in Boot JDK... " >&6; } - RMIC=$BOOT_JDK/bin/rmic - if test ! -x $RMIC; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !JAR! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!JAR!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xJAR" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of JAR from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of JAR from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jar in Boot JDK" >&5 +$as_echo_n "checking for jar in Boot JDK... " >&6; } + JAR=$BOOT_JDK/bin/jar + if test ! -x $JAR; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 $as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} - as_fn_error $? "Could not find rmic in the Boot JDK" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 + as_fn_error $? "Could not find jar in the Boot JDK" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for native2ascii in Boot JDK" >&5 + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$JAR" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool JAR=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool JAR=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_JAR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $JAR in + [\\/]* | ?:[\\/]*) + ac_cv_path_JAR="$JAR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_JAR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +JAR=$ac_cv_path_JAR +if test -n "$JAR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAR" >&5 +$as_echo "$JAR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$JAR" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool JAR=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool JAR=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JAR" >&5 +$as_echo_n "checking for JAR... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool JAR=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + + + # Use user overridden value if available, otherwise locate tool in the Boot JDK. + + # Publish this variable in the help. + + + if test "x$NATIVE2ASCII" = x; then + # The variable is not set by user, try to locate tool using the code snippet + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for native2ascii in Boot JDK" >&5 $as_echo_n "checking for native2ascii in Boot JDK... " >&6; } - NATIVE2ASCII=$BOOT_JDK/bin/native2ascii - if test ! -x $NATIVE2ASCII; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 + NATIVE2ASCII=$BOOT_JDK/bin/native2ascii + if test ! -x $NATIVE2ASCII; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 $as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} - as_fn_error $? "Could not find native2ascii in the Boot JDK" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 + as_fn_error $? "Could not find native2ascii in the Boot JDK" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !NATIVE2ASCII! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!NATIVE2ASCII!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xNATIVE2ASCII" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of NATIVE2ASCII from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of NATIVE2ASCII from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for native2ascii in Boot JDK" >&5 +$as_echo_n "checking for native2ascii in Boot JDK... " >&6; } + NATIVE2ASCII=$BOOT_JDK/bin/native2ascii + if test ! -x $NATIVE2ASCII; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Could not find native2ascii in the Boot JDK" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } + + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$NATIVE2ASCII" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool NATIVE2ASCII=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool NATIVE2ASCII=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_NATIVE2ASCII+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $NATIVE2ASCII in + [\\/]* | ?:[\\/]*) + ac_cv_path_NATIVE2ASCII="$NATIVE2ASCII" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_NATIVE2ASCII="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +NATIVE2ASCII=$ac_cv_path_NATIVE2ASCII +if test -n "$NATIVE2ASCII"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NATIVE2ASCII" >&5 +$as_echo "$NATIVE2ASCII" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$NATIVE2ASCII" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool NATIVE2ASCII=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool NATIVE2ASCII=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for NATIVE2ASCII" >&5 +$as_echo_n "checking for NATIVE2ASCII... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool NATIVE2ASCII=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + + + # Use user overridden value if available, otherwise locate tool in the Boot JDK. + + # Publish this variable in the help. + + + if test "x$JARSIGNER" = x; then + # The variable is not set by user, try to locate tool using the code snippet + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jarsigner in Boot JDK" >&5 +$as_echo_n "checking for jarsigner in Boot JDK... " >&6; } + JARSIGNER=$BOOT_JDK/bin/jarsigner + if test ! -x $JARSIGNER; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Could not find jarsigner in the Boot JDK" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } + + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !JARSIGNER! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!JARSIGNER!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xJARSIGNER" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of JARSIGNER from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of JARSIGNER from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jarsigner in Boot JDK" >&5 +$as_echo_n "checking for jarsigner in Boot JDK... " >&6; } + JARSIGNER=$BOOT_JDK/bin/jarsigner + if test ! -x $JARSIGNER; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Could not find jarsigner in the Boot JDK" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } + + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$JARSIGNER" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool JARSIGNER=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool JARSIGNER=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_JARSIGNER+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $JARSIGNER in + [\\/]* | ?:[\\/]*) + ac_cv_path_JARSIGNER="$JARSIGNER" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_JARSIGNER="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +JARSIGNER=$ac_cv_path_JARSIGNER +if test -n "$JARSIGNER"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JARSIGNER" >&5 +$as_echo "$JARSIGNER" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$JARSIGNER" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool JARSIGNER=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool JARSIGNER=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JARSIGNER" >&5 +$as_echo_n "checking for JARSIGNER... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool JARSIGNER=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + + # Finally, set some other options... # When compiling code to be executed by the Boot JDK, force jdk7 compatibility. @@ -16037,7 +25696,7 @@ fi JVM_ARG_OK=false fi - if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then + if test "x$OPENJDK_TARGET_OS" = "xmacosx" || test "x$OPENJDK_TARGET_CPU" = "xppc64" ; then # Why does macosx need more heap? Its the huge JDK batch. $ECHO "Check if jvm arg is ok: -Xmx1600M" >&5 @@ -16621,7 +26280,14 @@ $as_echo "$JTREGEXE" >&6; } else # try to find jtreg on path - for ac_prog in jtreg + + + # Publish this variable in the help. + + + if test "x$JTREGEXE" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in jtreg do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -16666,16 +26332,143 @@ fi test -n "$JTREGEXE" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !JTREGEXE! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!JTREGEXE!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xJTREGEXE" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of JTREGEXE from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of JTREGEXE from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in jtreg +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_JTREGEXE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $JTREGEXE in + [\\/]* | ?:[\\/]*) + ac_cv_path_JTREGEXE="$JTREGEXE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_JTREGEXE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +JTREGEXE=$ac_cv_path_JTREGEXE +if test -n "$JTREGEXE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JTREGEXE" >&5 +$as_echo "$JTREGEXE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$JTREGEXE" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$JTREGEXE" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool JTREGEXE=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool JTREGEXE=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_JTREGEXE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $JTREGEXE in + [\\/]* | ?:[\\/]*) + ac_cv_path_JTREGEXE="$JTREGEXE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_JTREGEXE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +JTREGEXE=$ac_cv_path_JTREGEXE +if test -n "$JTREGEXE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JTREGEXE" >&5 +$as_echo "$JTREGEXE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$JTREGEXE" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool JTREGEXE=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool JTREGEXE=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JTREGEXE" >&5 +$as_echo_n "checking for JTREGEXE... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool JTREGEXE=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$JTREGEXE" = x; then - if test "xjtreg" = x; then - PROG_NAME=jtregexe - else - PROG_NAME=jtreg - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 + as_fn_error $? "Could not find required tool for JTREGEXE" "$LINENO" 5 fi @@ -17964,6 +27757,13 @@ fi # otherwise we might pick up cross-compilers which don't use standard naming. # Otherwise, we'll set the BUILD_tools to the native tools, but that'll have # to wait until they are properly discovered. + + + # Publish this variable in the help. + + + if test "x$BUILD_CC" = x; then + # The variable is not set by user, try to locate tool using the code snippet for ac_prog in cl cc gcc do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -18009,6 +27809,140 @@ fi test -n "$BUILD_CC" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !BUILD_CC! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!BUILD_CC!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xBUILD_CC" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of BUILD_CC from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of BUILD_CC from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in cl cc gcc +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_BUILD_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $BUILD_CC in + [\\/]* | ?:[\\/]*) + ac_cv_path_BUILD_CC="$BUILD_CC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_BUILD_CC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +BUILD_CC=$ac_cv_path_BUILD_CC +if test -n "$BUILD_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BUILD_CC" >&5 +$as_echo "$BUILD_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$BUILD_CC" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$BUILD_CC" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool BUILD_CC=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool BUILD_CC=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_BUILD_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $BUILD_CC in + [\\/]* | ?:[\\/]*) + ac_cv_path_BUILD_CC="$BUILD_CC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_BUILD_CC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +BUILD_CC=$ac_cv_path_BUILD_CC +if test -n "$BUILD_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BUILD_CC" >&5 +$as_echo "$BUILD_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$BUILD_CC" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool BUILD_CC=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool BUILD_CC=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BUILD_CC" >&5 +$as_echo_n "checking for BUILD_CC... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool BUILD_CC=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then @@ -18275,6 +28209,13 @@ $as_echo "$as_me: This might be caused by spaces in the path, which is not allow $as_echo "$as_me: Rewriting BUILD_CC to \"$new_complete\"" >&6;} fi + + + # Publish this variable in the help. + + + if test "x$BUILD_CXX" = x; then + # The variable is not set by user, try to locate tool using the code snippet for ac_prog in cl CC g++ do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -18320,6 +28261,140 @@ fi test -n "$BUILD_CXX" && break done + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !BUILD_CXX! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!BUILD_CXX!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xBUILD_CXX" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of BUILD_CXX from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of BUILD_CXX from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in cl CC g++ +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_BUILD_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $BUILD_CXX in + [\\/]* | ?:[\\/]*) + ac_cv_path_BUILD_CXX="$BUILD_CXX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_BUILD_CXX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +BUILD_CXX=$ac_cv_path_BUILD_CXX +if test -n "$BUILD_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BUILD_CXX" >&5 +$as_echo "$BUILD_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$BUILD_CXX" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$BUILD_CXX" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool BUILD_CXX=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool BUILD_CXX=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_BUILD_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $BUILD_CXX in + [\\/]* | ?:[\\/]*) + ac_cv_path_BUILD_CXX="$BUILD_CXX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_BUILD_CXX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +BUILD_CXX=$ac_cv_path_BUILD_CXX +if test -n "$BUILD_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BUILD_CXX" >&5 +$as_echo "$BUILD_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$BUILD_CXX" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool BUILD_CXX=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool BUILD_CXX=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BUILD_CXX" >&5 +$as_echo_n "checking for BUILD_CXX... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool BUILD_CXX=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then @@ -18586,8 +28661,17 @@ $as_echo "$as_me: This might be caused by spaces in the path, which is not allow $as_echo "$as_me: Rewriting BUILD_CXX to \"$new_complete\"" >&6;} fi - # Extract the first word of "ld", so it can be a program name with args. -set dummy ld; ac_word=$2 + + + # Publish this variable in the help. + + + if test "x$BUILD_LD" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in ld +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_BUILD_LD+:} false; then : @@ -18626,6 +28710,143 @@ $as_echo "no" >&6; } fi + test -n "$BUILD_LD" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !BUILD_LD! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!BUILD_LD!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xBUILD_LD" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of BUILD_LD from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of BUILD_LD from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in ld +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_BUILD_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $BUILD_LD in + [\\/]* | ?:[\\/]*) + ac_cv_path_BUILD_LD="$BUILD_LD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_BUILD_LD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +BUILD_LD=$ac_cv_path_BUILD_LD +if test -n "$BUILD_LD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BUILD_LD" >&5 +$as_echo "$BUILD_LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$BUILD_LD" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$BUILD_LD" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool BUILD_LD=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool BUILD_LD=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_BUILD_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $BUILD_LD in + [\\/]* | ?:[\\/]*) + ac_cv_path_BUILD_LD="$BUILD_LD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_BUILD_LD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +BUILD_LD=$ac_cv_path_BUILD_LD +if test -n "$BUILD_LD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BUILD_LD" >&5 +$as_echo "$BUILD_LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$BUILD_LD" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool BUILD_LD=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool BUILD_LD=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BUILD_LD" >&5 +$as_echo_n "checking for BUILD_LD... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool BUILD_LD=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then @@ -19073,78 +29294,29 @@ $as_echo "$as_me: Downloading build dependency devkit from $with_builddeps_serve # On Solaris, cc is preferred to gcc. # Elsewhere, gcc is preferred to cc. - if test "x$CC" != x; then - COMPILER_CHECK_LIST="$CC" - elif test "x$OPENJDK_TARGET_OS" = "xwindows"; then + if test "x$OPENJDK_TARGET_OS" = "xwindows"; then COMPILER_CHECK_LIST="cl" elif test "x$OPENJDK_TARGET_OS" = "xsolaris"; then COMPILER_CHECK_LIST="cc gcc" + elif test "x$OPENJDK_TARGET_OS" = "xaix"; then + # Do not probe for cc on AIX. + COMPILER_CHECK_LIST="xlc_r" else COMPILER_CHECK_LIST="gcc cc" fi COMPILER_NAME=C + SEARCH_LIST="$COMPILER_CHECK_LIST" - CC= - # If TOOLS_DIR is set, check for all compiler names in there first - # before checking the rest of the PATH. - if test -n "$TOOLS_DIR"; then - PATH_save="$PATH" - PATH="$TOOLS_DIR" - for ac_prog in $COMPILER_CHECK_LIST -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_TOOLS_DIR_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $TOOLS_DIR_CC in - [\\/]* | ?:[\\/]*) - ac_cv_path_TOOLS_DIR_CC="$TOOLS_DIR_CC" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_TOOLS_DIR_CC="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + if test "x$CC" != x; then + # User has supplied compiler name already, always let that override. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied compiler CC=$CC" >&5 +$as_echo "$as_me: Will use user supplied compiler CC=$CC" >&6;} + if test "x`basename $CC`" = "x$CC"; then + # A command without a complete path is provided, search $PATH. - ;; -esac -fi -TOOLS_DIR_CC=$ac_cv_path_TOOLS_DIR_CC -if test -n "$TOOLS_DIR_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TOOLS_DIR_CC" >&5 -$as_echo "$TOOLS_DIR_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$TOOLS_DIR_CC" && break -done - - CC=$TOOLS_DIR_CC - PATH="$PATH_save" - fi - - # AC_PATH_PROGS can't be run multiple times with the same variable, - # so create a new name for this run. - if test "x$CC" = x; then - for ac_prog in $COMPILER_CHECK_LIST + for ac_prog in $CC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -19189,10 +29361,126 @@ fi test -n "$POTENTIAL_CC" && break done - CC=$POTENTIAL_CC + if test "x$POTENTIAL_CC" != x; then + CC=$POTENTIAL_CC + else + as_fn_error $? "User supplied compiler CC=$CC could not be found" "$LINENO" 5 + fi + else + # Otherwise it might already be a complete path + if test ! -x "$CC"; then + as_fn_error $? "User supplied compiler CC=$CC does not exist" "$LINENO" 5 + fi + fi + else + # No user supplied value. Locate compiler ourselves + CC= + # If TOOLS_DIR is set, check for all compiler names in there first + # before checking the rest of the PATH. + if test -n "$TOOLS_DIR"; then + PATH_save="$PATH" + PATH="$TOOLS_DIR" + for ac_prog in $SEARCH_LIST +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_TOOLS_DIR_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $TOOLS_DIR_CC in + [\\/]* | ?:[\\/]*) + ac_cv_path_TOOLS_DIR_CC="$TOOLS_DIR_CC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_TOOLS_DIR_CC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 fi +done + done +IFS=$as_save_IFS - if test "x$CC" = x; then + ;; +esac +fi +TOOLS_DIR_CC=$ac_cv_path_TOOLS_DIR_CC +if test -n "$TOOLS_DIR_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TOOLS_DIR_CC" >&5 +$as_echo "$TOOLS_DIR_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$TOOLS_DIR_CC" && break +done + + CC=$TOOLS_DIR_CC + PATH="$PATH_save" + fi + + # AC_PATH_PROGS can't be run multiple times with the same variable, + # so create a new name for this run. + if test "x$CC" = x; then + for ac_prog in $SEARCH_LIST +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_POTENTIAL_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $POTENTIAL_CC in + [\\/]* | ?:[\\/]*) + ac_cv_path_POTENTIAL_CC="$POTENTIAL_CC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_POTENTIAL_CC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +POTENTIAL_CC=$ac_cv_path_POTENTIAL_CC +if test -n "$POTENTIAL_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $POTENTIAL_CC" >&5 +$as_echo "$POTENTIAL_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$POTENTIAL_CC" && break +done + + CC=$POTENTIAL_CC + fi + + if test "x$CC" = x; then # Print a helpful message on how to acquire the necessary build dependency. # devkit is the help tag: freetype, cups, pulse, alsa etc @@ -19216,8 +29504,6 @@ done pkgutil_help $MISSING_DEPENDENCY ;; pkgadd) pkgadd_help $MISSING_DEPENDENCY ;; - * ) - break ;; esac if test "x$PKGHANDLER_COMMAND" != x; then @@ -19225,9 +29511,12 @@ done fi fi - as_fn_error $? "Could not find a $COMPILER_NAME compiler. $HELP_MSG" "$LINENO" 5 + as_fn_error $? "Could not find a $COMPILER_NAME compiler. $HELP_MSG" "$LINENO" 5 + fi fi + # Now we have a compiler binary in CC. Make sure it's okay. + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then # First separate the path from the arguments. This will split at the first @@ -19493,9 +29782,12 @@ $as_echo "$as_me: This might be caused by spaces in the path, which is not allow $as_echo "$as_me: Rewriting CC to \"$new_complete\"" >&6;} fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking resolved symbolic links for CC" >&5 -$as_echo_n "checking resolved symbolic links for CC... " >&6; } TEST_COMPILER="$CC" + # Don't remove symbolic links on AIX because 'xlc_r' and 'xlC_r' may all be links + # to 'xlc' but it is crucial that we invoke the compiler with the right name! + if test "x$OPENJDK_BUILD_OS" != xaix; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking resolved symbolic links for CC" >&5 +$as_echo_n "checking resolved symbolic links for CC... " >&6; } if test "x$OPENJDK_BUILD_OS" != xwindows; then # Follow a chain of symbolic links. Use readlink @@ -19544,8 +29836,9 @@ $as_echo_n "checking resolved symbolic links for CC... " >&6; } fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEST_COMPILER" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEST_COMPILER" >&5 $as_echo "$TEST_COMPILER" >&6; } + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if CC is disguised ccache" >&5 $as_echo_n "checking if CC is disguised ccache... " >&6; } @@ -20009,6 +30302,15 @@ $as_echo "$as_me: The result from running with -V was: \"$COMPILER_VERSION_TEST\ COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.*[ ,\t]$COMPILER_NAME[ ,\t]\([1-9]\.[0-9][0-9]*\).*/\1/p"` COMPILER_VENDOR="Sun Studio" fi + elif test "x$OPENJDK_TARGET_OS" = xaix; then + COMPILER_VERSION_TEST=`$COMPILER -qversion 2>&1 | $TAIL -n 1` + $ECHO $COMPILER_VERSION_TEST | $GREP "^Version: " > /dev/null + if test $? -ne 0; then + as_fn_error $? "Failed to detect the compiler version of $COMPILER ...." "$LINENO" 5 + else + COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n 's/Version: \(0-90-9\.0-90-9*\).*/\1/p'` + COMPILER_VENDOR='IBM' + fi elif test "x$OPENJDK_TARGET_OS" = xwindows; then # First line typically looks something like: # Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86 @@ -20650,80 +30952,39 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + # Option used to tell the compiler whether to create 32- or 64-bit executables + # Notice that CC contains the full compiler path at this point. + case $CC in + *xlc_r) COMPILER_TARGET_BITS_FLAG="-q";; + *) COMPILER_TARGET_BITS_FLAG="-m";; + esac + + ### Locate C++ compiler (CXX) - if test "x$CXX" != x; then - COMPILER_CHECK_LIST="$CXX" - elif test "x$OPENJDK_TARGET_OS" = "xwindows"; then + if test "x$OPENJDK_TARGET_OS" = "xwindows"; then COMPILER_CHECK_LIST="cl" elif test "x$OPENJDK_TARGET_OS" = "xsolaris"; then COMPILER_CHECK_LIST="CC g++" + elif test "x$OPENJDK_TARGET_OS" = "xaix"; then + # Do not probe for CC on AIX . + COMPILER_CHECK_LIST="xlC_r" else COMPILER_CHECK_LIST="g++ CC" fi COMPILER_NAME=C++ + SEARCH_LIST="$COMPILER_CHECK_LIST" - CXX= - # If TOOLS_DIR is set, check for all compiler names in there first - # before checking the rest of the PATH. - if test -n "$TOOLS_DIR"; then - PATH_save="$PATH" - PATH="$TOOLS_DIR" - for ac_prog in $COMPILER_CHECK_LIST -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_TOOLS_DIR_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $TOOLS_DIR_CXX in - [\\/]* | ?:[\\/]*) - ac_cv_path_TOOLS_DIR_CXX="$TOOLS_DIR_CXX" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_TOOLS_DIR_CXX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS + if test "x$CXX" != x; then + # User has supplied compiler name already, always let that override. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied compiler CXX=$CXX" >&5 +$as_echo "$as_me: Will use user supplied compiler CXX=$CXX" >&6;} + if test "x`basename $CXX`" = "x$CXX"; then + # A command without a complete path is provided, search $PATH. - ;; -esac -fi -TOOLS_DIR_CXX=$ac_cv_path_TOOLS_DIR_CXX -if test -n "$TOOLS_DIR_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TOOLS_DIR_CXX" >&5 -$as_echo "$TOOLS_DIR_CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$TOOLS_DIR_CXX" && break -done - - CXX=$TOOLS_DIR_CXX - PATH="$PATH_save" - fi - - # AC_PATH_PROGS can't be run multiple times with the same variable, - # so create a new name for this run. - if test "x$CXX" = x; then - for ac_prog in $COMPILER_CHECK_LIST + for ac_prog in $CXX do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -20768,10 +31029,126 @@ fi test -n "$POTENTIAL_CXX" && break done - CXX=$POTENTIAL_CXX + if test "x$POTENTIAL_CXX" != x; then + CXX=$POTENTIAL_CXX + else + as_fn_error $? "User supplied compiler CXX=$CXX could not be found" "$LINENO" 5 + fi + else + # Otherwise it might already be a complete path + if test ! -x "$CXX"; then + as_fn_error $? "User supplied compiler CXX=$CXX does not exist" "$LINENO" 5 + fi + fi + else + # No user supplied value. Locate compiler ourselves + CXX= + # If TOOLS_DIR is set, check for all compiler names in there first + # before checking the rest of the PATH. + if test -n "$TOOLS_DIR"; then + PATH_save="$PATH" + PATH="$TOOLS_DIR" + for ac_prog in $SEARCH_LIST +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_TOOLS_DIR_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $TOOLS_DIR_CXX in + [\\/]* | ?:[\\/]*) + ac_cv_path_TOOLS_DIR_CXX="$TOOLS_DIR_CXX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_TOOLS_DIR_CXX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 fi +done + done +IFS=$as_save_IFS - if test "x$CXX" = x; then + ;; +esac +fi +TOOLS_DIR_CXX=$ac_cv_path_TOOLS_DIR_CXX +if test -n "$TOOLS_DIR_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TOOLS_DIR_CXX" >&5 +$as_echo "$TOOLS_DIR_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$TOOLS_DIR_CXX" && break +done + + CXX=$TOOLS_DIR_CXX + PATH="$PATH_save" + fi + + # AC_PATH_PROGS can't be run multiple times with the same variable, + # so create a new name for this run. + if test "x$CXX" = x; then + for ac_prog in $SEARCH_LIST +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_POTENTIAL_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $POTENTIAL_CXX in + [\\/]* | ?:[\\/]*) + ac_cv_path_POTENTIAL_CXX="$POTENTIAL_CXX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_POTENTIAL_CXX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +POTENTIAL_CXX=$ac_cv_path_POTENTIAL_CXX +if test -n "$POTENTIAL_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $POTENTIAL_CXX" >&5 +$as_echo "$POTENTIAL_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$POTENTIAL_CXX" && break +done + + CXX=$POTENTIAL_CXX + fi + + if test "x$CXX" = x; then # Print a helpful message on how to acquire the necessary build dependency. # devkit is the help tag: freetype, cups, pulse, alsa etc @@ -20795,8 +31172,6 @@ done pkgutil_help $MISSING_DEPENDENCY ;; pkgadd) pkgadd_help $MISSING_DEPENDENCY ;; - * ) - break ;; esac if test "x$PKGHANDLER_COMMAND" != x; then @@ -20804,9 +31179,12 @@ done fi fi - as_fn_error $? "Could not find a $COMPILER_NAME compiler. $HELP_MSG" "$LINENO" 5 + as_fn_error $? "Could not find a $COMPILER_NAME compiler. $HELP_MSG" "$LINENO" 5 + fi fi + # Now we have a compiler binary in CXX. Make sure it's okay. + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then # First separate the path from the arguments. This will split at the first @@ -21072,9 +31450,12 @@ $as_echo "$as_me: This might be caused by spaces in the path, which is not allow $as_echo "$as_me: Rewriting CXX to \"$new_complete\"" >&6;} fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking resolved symbolic links for CXX" >&5 -$as_echo_n "checking resolved symbolic links for CXX... " >&6; } TEST_COMPILER="$CXX" + # Don't remove symbolic links on AIX because 'xlc_r' and 'xlC_r' may all be links + # to 'xlc' but it is crucial that we invoke the compiler with the right name! + if test "x$OPENJDK_BUILD_OS" != xaix; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking resolved symbolic links for CXX" >&5 +$as_echo_n "checking resolved symbolic links for CXX... " >&6; } if test "x$OPENJDK_BUILD_OS" != xwindows; then # Follow a chain of symbolic links. Use readlink @@ -21123,8 +31504,9 @@ $as_echo_n "checking resolved symbolic links for CXX... " >&6; } fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEST_COMPILER" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEST_COMPILER" >&5 $as_echo "$TEST_COMPILER" >&6; } + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if CXX is disguised ccache" >&5 $as_echo_n "checking if CXX is disguised ccache... " >&6; } @@ -21588,6 +31970,15 @@ $as_echo "$as_me: The result from running with -V was: \"$COMPILER_VERSION_TEST\ COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.*[ ,\t]$COMPILER_NAME[ ,\t]\([1-9]\.[0-9][0-9]*\).*/\1/p"` COMPILER_VENDOR="Sun Studio" fi + elif test "x$OPENJDK_TARGET_OS" = xaix; then + COMPILER_VERSION_TEST=`$COMPILER -qversion 2>&1 | $TAIL -n 1` + $ECHO $COMPILER_VERSION_TEST | $GREP "^Version: " > /dev/null + if test $? -ne 0; then + as_fn_error $? "Failed to detect the compiler version of $COMPILER ...." "$LINENO" 5 + else + COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n 's/Version: \(0-90-9\.0-90-9*\).*/\1/p'` + COMPILER_VENDOR='IBM' + fi elif test "x$OPENJDK_TARGET_OS" = xwindows; then # First line typically looks something like: # Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86 @@ -22432,9 +32823,18 @@ $as_echo "$as_me: Rewriting OBJC to \"$new_complete\"" >&6;} if test "x$OPENJDK_TARGET_OS" != xwindows; then + + + # Publish this variable in the help. + + + if test "x$AR" = x; then + # The variable is not set by user, try to locate tool using the code snippet if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : @@ -22450,7 +32850,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="${ac_tool_prefix}ar" + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -22470,11 +32870,15 @@ $as_echo "no" >&6; } fi + test -n "$AR" && break + done fi -if test -z "$ac_cv_prog_AR"; then +if test -z "$AR"; then ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : @@ -22490,7 +32894,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_AR="ar" + ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -22509,6 +32913,10 @@ else $as_echo "no" >&6; } fi + + test -n "$ac_ct_AR" && break +done + if test "x$ac_ct_AR" = x; then AR="" else @@ -22520,10 +32928,197 @@ ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi -else - AR="$ac_cv_prog_AR" fi + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !AR! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!AR!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xAR" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of AR from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of AR from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + if test -n "$ac_tool_prefix"; then + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$AR" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool AR=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool AR=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $AR in + [\\/]* | ?:[\\/]*) + ac_cv_path_AR="$AR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_AR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +AR=$ac_cv_path_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$AR" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool AR=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool AR=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for AR" >&5 +$as_echo_n "checking for AR... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool AR=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then @@ -22793,6 +33388,8 @@ $as_echo "$as_me: Rewriting AR to \"$new_complete\"" >&6;} fi if test "x$OPENJDK_TARGET_OS" = xmacosx; then ARFLAGS="-r" + elif test "x$OPENJDK_TARGET_OS" = xaix; then + ARFLAGS="-X64" else ARFLAGS="" fi @@ -25310,8 +35907,17 @@ $as_echo "$as_me: Rewriting CXXCPP to \"$new_complete\"" >&6;} # Find the right assembler. if test "x$OPENJDK_TARGET_OS" = xsolaris; then - # Extract the first word of "as", so it can be a program name with args. -set dummy as; ac_word=$2 + + + # Publish this variable in the help. + + + if test "x$AS" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in as +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_AS+:} false; then : @@ -25350,6 +35956,143 @@ $as_echo "no" >&6; } fi + test -n "$AS" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !AS! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!AS!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xAS" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of AS from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of AS from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in as +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_AS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $AS in + [\\/]* | ?:[\\/]*) + ac_cv_path_AS="$AS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_AS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +AS=$ac_cv_path_AS +if test -n "$AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 +$as_echo "$AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AS" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$AS" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool AS=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool AS=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_AS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $AS in + [\\/]* | ?:[\\/]*) + ac_cv_path_AS="$AS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_AS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +AS=$ac_cv_path_AS +if test -n "$AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 +$as_echo "$AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$AS" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool AS=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool AS=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for AS" >&5 +$as_echo_n "checking for AS... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool AS=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then @@ -25622,8 +36365,17 @@ $as_echo "$as_me: Rewriting AS to \"$new_complete\"" >&6;} if test "x$OPENJDK_TARGET_OS" = xsolaris; then - # Extract the first word of "nm", so it can be a program name with args. -set dummy nm; ac_word=$2 + + + # Publish this variable in the help. + + + if test "x$NM" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in nm +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_NM+:} false; then : @@ -25662,6 +36414,143 @@ $as_echo "no" >&6; } fi + test -n "$NM" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !NM! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!NM!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xNM" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of NM from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of NM from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in nm +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $NM in + [\\/]* | ?:[\\/]*) + ac_cv_path_NM="$NM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_NM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +NM=$ac_cv_path_NM +if test -n "$NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 +$as_echo "$NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$NM" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$NM" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool NM=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool NM=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $NM in + [\\/]* | ?:[\\/]*) + ac_cv_path_NM="$NM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_NM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +NM=$ac_cv_path_NM +if test -n "$NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 +$as_echo "$NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$NM" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool NM=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool NM=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for NM" >&5 +$as_echo_n "checking for NM... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool NM=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then @@ -25928,8 +36817,17 @@ $as_echo "$as_me: This might be caused by spaces in the path, which is not allow $as_echo "$as_me: Rewriting NM to \"$new_complete\"" >&6;} fi - # Extract the first word of "gnm", so it can be a program name with args. -set dummy gnm; ac_word=$2 + + + # Publish this variable in the help. + + + if test "x$GNM" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in gnm +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GNM+:} false; then : @@ -25968,6 +36866,143 @@ $as_echo "no" >&6; } fi + test -n "$GNM" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !GNM! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!GNM!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xGNM" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of GNM from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of GNM from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in gnm +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_GNM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $GNM in + [\\/]* | ?:[\\/]*) + ac_cv_path_GNM="$GNM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_GNM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +GNM=$ac_cv_path_GNM +if test -n "$GNM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GNM" >&5 +$as_echo "$GNM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$GNM" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$GNM" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool GNM=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool GNM=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_GNM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $GNM in + [\\/]* | ?:[\\/]*) + ac_cv_path_GNM="$GNM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_GNM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +GNM=$ac_cv_path_GNM +if test -n "$GNM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GNM" >&5 +$as_echo "$GNM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$GNM" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool GNM=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool GNM=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNM" >&5 +$as_echo_n "checking for GNM... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool GNM=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then @@ -26234,8 +37269,17 @@ $as_echo "$as_me: This might be caused by spaces in the path, which is not allow $as_echo "$as_me: Rewriting GNM to \"$new_complete\"" >&6;} fi - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 + + + # Publish this variable in the help. + + + if test "x$STRIP" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in strip +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_STRIP+:} false; then : @@ -26274,6 +37318,143 @@ $as_echo "no" >&6; } fi + test -n "$STRIP" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !STRIP! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!STRIP!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xSTRIP" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of STRIP from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of STRIP from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in strip +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $STRIP in + [\\/]* | ?:[\\/]*) + ac_cv_path_STRIP="$STRIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_STRIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +STRIP=$ac_cv_path_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$STRIP" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$STRIP" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool STRIP=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool STRIP=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $STRIP in + [\\/]* | ?:[\\/]*) + ac_cv_path_STRIP="$STRIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_STRIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +STRIP=$ac_cv_path_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$STRIP" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool STRIP=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool STRIP=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for STRIP" >&5 +$as_echo_n "checking for STRIP... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool STRIP=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then @@ -26540,8 +37721,17 @@ $as_echo "$as_me: This might be caused by spaces in the path, which is not allow $as_echo "$as_me: Rewriting STRIP to \"$new_complete\"" >&6;} fi - # Extract the first word of "mcs", so it can be a program name with args. -set dummy mcs; ac_word=$2 + + + # Publish this variable in the help. + + + if test "x$MCS" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in mcs +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MCS+:} false; then : @@ -26580,6 +37770,143 @@ $as_echo "no" >&6; } fi + test -n "$MCS" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !MCS! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!MCS!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xMCS" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of MCS from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of MCS from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in mcs +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MCS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MCS in + [\\/]* | ?:[\\/]*) + ac_cv_path_MCS="$MCS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_MCS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MCS=$ac_cv_path_MCS +if test -n "$MCS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MCS" >&5 +$as_echo "$MCS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$MCS" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$MCS" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool MCS=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool MCS=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MCS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MCS in + [\\/]* | ?:[\\/]*) + ac_cv_path_MCS="$MCS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_MCS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MCS=$ac_cv_path_MCS +if test -n "$MCS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MCS" >&5 +$as_echo "$MCS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$MCS" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool MCS=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool MCS=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MCS" >&5 +$as_echo_n "checking for MCS... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool MCS=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then @@ -26847,9 +38174,18 @@ $as_echo "$as_me: Rewriting MCS to \"$new_complete\"" >&6;} fi elif test "x$OPENJDK_TARGET_OS" != xwindows; then + + + # Publish this variable in the help. + + + if test "x$NM" = x; then + # The variable is not set by user, try to locate tool using the code snippet if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}nm", so it can be a program name with args. -set dummy ${ac_tool_prefix}nm; ac_word=$2 + for ac_prog in nm + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NM+:} false; then : @@ -26865,7 +38201,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_NM="${ac_tool_prefix}nm" + ac_cv_prog_NM="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -26885,11 +38221,15 @@ $as_echo "no" >&6; } fi + test -n "$NM" && break + done fi -if test -z "$ac_cv_prog_NM"; then +if test -z "$NM"; then ac_ct_NM=$NM - # Extract the first word of "nm", so it can be a program name with args. -set dummy nm; ac_word=$2 + for ac_prog in nm +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NM+:} false; then : @@ -26905,7 +38245,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_NM="nm" + ac_cv_prog_ac_ct_NM="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -26924,6 +38264,10 @@ else $as_echo "no" >&6; } fi + + test -n "$ac_ct_NM" && break +done + if test "x$ac_ct_NM" = x; then NM="" else @@ -26935,10 +38279,197 @@ ac_tool_warned=yes ;; esac NM=$ac_ct_NM fi -else - NM="$ac_cv_prog_NM" fi + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !NM! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!NM!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xNM" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of NM from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of NM from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + if test -n "$ac_tool_prefix"; then + for ac_prog in nm + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + ac_cv_prog_NM="$NM" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_NM="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NM=$ac_cv_prog_NM +if test -n "$NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 +$as_echo "$NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$NM" && break + done +fi +if test -z "$NM"; then + ac_ct_NM=$NM + for ac_prog in nm +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NM"; then + ac_cv_prog_ac_ct_NM="$ac_ct_NM" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_NM="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NM=$ac_cv_prog_ac_ct_NM +if test -n "$ac_ct_NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NM" >&5 +$as_echo "$ac_ct_NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_NM" && break +done + + if test "x$ac_ct_NM" = x; then + NM="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NM=$ac_ct_NM + fi +fi + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$NM" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool NM=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool NM=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $NM in + [\\/]* | ?:[\\/]*) + ac_cv_path_NM="$NM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_NM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +NM=$ac_cv_path_NM +if test -n "$NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 +$as_echo "$NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$NM" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool NM=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool NM=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for NM" >&5 +$as_echo_n "checking for NM... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool NM=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then @@ -27207,9 +38738,18 @@ $as_echo "$as_me: Rewriting NM to \"$new_complete\"" >&6;} GNM="$NM" + + + # Publish this variable in the help. + + + if test "x$STRIP" = x; then + # The variable is not set by user, try to locate tool using the code snippet if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 + for ac_prog in strip + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : @@ -27225,7 +38765,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" + ac_cv_prog_STRIP="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -27245,11 +38785,15 @@ $as_echo "no" >&6; } fi + test -n "$STRIP" && break + done fi -if test -z "$ac_cv_prog_STRIP"; then +if test -z "$STRIP"; then ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 + for ac_prog in strip +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : @@ -27265,7 +38809,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_STRIP="strip" + ac_cv_prog_ac_ct_STRIP="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -27284,6 +38828,10 @@ else $as_echo "no" >&6; } fi + + test -n "$ac_ct_STRIP" && break +done + if test "x$ac_ct_STRIP" = x; then STRIP="" else @@ -27295,10 +38843,197 @@ ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi -else - STRIP="$ac_cv_prog_STRIP" fi + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !STRIP! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!STRIP!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xSTRIP" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of STRIP from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of STRIP from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + if test -n "$ac_tool_prefix"; then + for ac_prog in strip + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$STRIP" && break + done +fi +if test -z "$STRIP"; then + ac_ct_STRIP=$STRIP + for ac_prog in strip +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_STRIP" && break +done + + if test "x$ac_ct_STRIP" = x; then + STRIP="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +fi + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$STRIP" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool STRIP=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool STRIP=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $STRIP in + [\\/]* | ?:[\\/]*) + ac_cv_path_STRIP="$STRIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_STRIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +STRIP=$ac_cv_path_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$STRIP" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool STRIP=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool STRIP=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for STRIP" >&5 +$as_echo_n "checking for STRIP... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool STRIP=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then @@ -27570,6 +39305,13 @@ $as_echo "$as_me: Rewriting STRIP to \"$new_complete\"" >&6;} # objcopy is used for moving debug symbols to separate files when # full debug symbols are enabled. if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_OS" = xlinux; then + + + # Publish this variable in the help. + + + if test "x$OBJCOPY" = x; then + # The variable is not set by user, try to locate tool using the code snippet if test -n "$ac_tool_prefix"; then for ac_prog in gobjcopy objcopy do @@ -27670,6 +39412,195 @@ esac fi fi + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !OBJCOPY! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!OBJCOPY!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xOBJCOPY" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of OBJCOPY from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of OBJCOPY from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + if test -n "$ac_tool_prefix"; then + for ac_prog in gobjcopy objcopy + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJCOPY+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJCOPY"; then + ac_cv_prog_OBJCOPY="$OBJCOPY" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJCOPY="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJCOPY=$ac_cv_prog_OBJCOPY +if test -n "$OBJCOPY"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJCOPY" >&5 +$as_echo "$OBJCOPY" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$OBJCOPY" && break + done +fi +if test -z "$OBJCOPY"; then + ac_ct_OBJCOPY=$OBJCOPY + for ac_prog in gobjcopy objcopy +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJCOPY+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJCOPY"; then + ac_cv_prog_ac_ct_OBJCOPY="$ac_ct_OBJCOPY" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJCOPY="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJCOPY=$ac_cv_prog_ac_ct_OBJCOPY +if test -n "$ac_ct_OBJCOPY"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJCOPY" >&5 +$as_echo "$ac_ct_OBJCOPY" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_OBJCOPY" && break +done + + if test "x$ac_ct_OBJCOPY" = x; then + OBJCOPY="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJCOPY=$ac_ct_OBJCOPY + fi +fi + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$OBJCOPY" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool OBJCOPY=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool OBJCOPY=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_OBJCOPY+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $OBJCOPY in + [\\/]* | ?:[\\/]*) + ac_cv_path_OBJCOPY="$OBJCOPY" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_OBJCOPY="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +OBJCOPY=$ac_cv_path_OBJCOPY +if test -n "$OBJCOPY"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJCOPY" >&5 +$as_echo "$OBJCOPY" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$OBJCOPY" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool OBJCOPY=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool OBJCOPY=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OBJCOPY" >&5 +$as_echo_n "checking for OBJCOPY... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool OBJCOPY=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + # Only call fixup if objcopy was found. if test -n "$OBJCOPY"; then @@ -27941,7 +39872,14 @@ $as_echo "$as_me: Rewriting OBJCOPY to \"$new_complete\"" >&6;} fi fi - if test -n "$ac_tool_prefix"; then + + + # Publish this variable in the help. + + + if test "x$OBJDUMP" = x; then + # The variable is not set by user, try to locate tool using the code snippet + if test -n "$ac_tool_prefix"; then for ac_prog in gobjdump objdump do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. @@ -28041,6 +39979,195 @@ esac fi fi + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !OBJDUMP! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!OBJDUMP!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xOBJDUMP" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of OBJDUMP from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of OBJDUMP from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + if test -n "$ac_tool_prefix"; then + for ac_prog in gobjdump objdump + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$OBJDUMP" && break + done +fi +if test -z "$OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + for ac_prog in gobjdump objdump +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_OBJDUMP" && break +done + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +fi + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$OBJDUMP" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool OBJDUMP=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool OBJDUMP=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $OBJDUMP in + [\\/]* | ?:[\\/]*) + ac_cv_path_OBJDUMP="$OBJDUMP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_OBJDUMP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +OBJDUMP=$ac_cv_path_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$OBJDUMP" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool OBJDUMP=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool OBJDUMP=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OBJDUMP" >&5 +$as_echo_n "checking for OBJDUMP... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool OBJDUMP=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$OBJDUMP" != x; then # Only used for compare.sh; we can live without it. BASIC_FIXUP_EXECUTABLE bails if argument is missing. @@ -28312,8 +40439,17 @@ $as_echo "$as_me: Rewriting OBJDUMP to \"$new_complete\"" >&6;} fi if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then - # Extract the first word of "lipo", so it can be a program name with args. -set dummy lipo; ac_word=$2 + + + # Publish this variable in the help. + + + if test "x$LIPO" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in lipo +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_LIPO+:} false; then : @@ -28352,6 +40488,143 @@ $as_echo "no" >&6; } fi + test -n "$LIPO" && break +done + + else + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !LIPO! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!LIPO!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xLIPO" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of LIPO from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of LIPO from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in lipo +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $LIPO in + [\\/]* | ?:[\\/]*) + ac_cv_path_LIPO="$LIPO" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_LIPO="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +LIPO=$ac_cv_path_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$LIPO" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$LIPO" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool LIPO=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool LIPO=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $LIPO in + [\\/]* | ?:[\\/]*) + ac_cv_path_LIPO="$LIPO" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_LIPO="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +LIPO=$ac_cv_path_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$LIPO" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool LIPO=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool LIPO=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIPO" >&5 +$as_echo_n "checking for LIPO... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool LIPO=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then @@ -28768,16 +41041,17 @@ done # is made at runtime.) # - if test "x$OPENJDK_TARGET_OS" = xsolaris; then - # Always specify -m flags on Solaris + if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_OS" = xaix; then + # Always specify -m flag on Solaris + # And -q on AIX because otherwise the compiler produces 32-bit objects by default # When we add flags to the "official" CFLAGS etc, we need to # keep track of these additions in ADDED_CFLAGS etc. These # will later be checked to make sure only controlled additions # have been made to CFLAGS etc. - ADDED_CFLAGS=" -m${OPENJDK_TARGET_CPU_BITS}" - ADDED_CXXFLAGS=" -m${OPENJDK_TARGET_CPU_BITS}" - ADDED_LDFLAGS=" -m${OPENJDK_TARGET_CPU_BITS}" + ADDED_CFLAGS=" ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" + ADDED_CXXFLAGS=" ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" + ADDED_LDFLAGS=" ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" CFLAGS="${CFLAGS}${ADDED_CFLAGS}" CXXFLAGS="${CXXFLAGS}${ADDED_CXXFLAGS}" @@ -28795,9 +41069,9 @@ done # keep track of these additions in ADDED_CFLAGS etc. These # will later be checked to make sure only controlled additions # have been made to CFLAGS etc. - ADDED_CFLAGS=" -m${OPENJDK_TARGET_CPU_BITS}" - ADDED_CXXFLAGS=" -m${OPENJDK_TARGET_CPU_BITS}" - ADDED_LDFLAGS=" -m${OPENJDK_TARGET_CPU_BITS}" + ADDED_CFLAGS=" ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" + ADDED_CXXFLAGS=" ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" + ADDED_LDFLAGS=" ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" CFLAGS="${CFLAGS}${ADDED_CFLAGS}" CXXFLAGS="${CXXFLAGS}${ADDED_CXXFLAGS}" @@ -28871,20 +41145,85 @@ _ACEOF - if test "x$SIZEOF_INT_P" != "x$ac_cv_sizeof_int_p"; then - # Workaround autoconf bug, see http://lists.gnu.org/archive/html/autoconf/2010-07/msg00004.html - SIZEOF_INT_P="$ac_cv_sizeof_int_p" - fi - - if test "x$SIZEOF_INT_P" = x; then + # AC_CHECK_SIZEOF defines 'ac_cv_sizeof_int_p' to hold the number of bytes used by an 'int*' + if test "x$ac_cv_sizeof_int_p" = x; then # The test failed, lets stick to the assumed value. { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The number of bits in the target could not be determined, using $OPENJDK_TARGET_CPU_BITS." >&5 $as_echo "$as_me: WARNING: The number of bits in the target could not be determined, using $OPENJDK_TARGET_CPU_BITS." >&2;} else - TESTED_TARGET_CPU_BITS=`expr 8 \* $SIZEOF_INT_P` + TESTED_TARGET_CPU_BITS=`expr 8 \* $ac_cv_sizeof_int_p` if test "x$TESTED_TARGET_CPU_BITS" != "x$OPENJDK_TARGET_CPU_BITS"; then - as_fn_error $? "The tested number of bits in the target ($TESTED_TARGET_CPU_BITS) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS)" "$LINENO" 5 + # This situation may happen on 64-bit platforms where the compiler by default only generates 32-bit objects + # Let's try to implicitely set the compilers target architecture and retry the test + { $as_echo "$as_me:${as_lineno-$LINENO}: The tested number of bits in the target ($TESTED_TARGET_CPU_BITS) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS)." >&5 +$as_echo "$as_me: The tested number of bits in the target ($TESTED_TARGET_CPU_BITS) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS)." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: I'll retry after setting the platforms compiler target bits flag to ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" >&5 +$as_echo "$as_me: I'll retry after setting the platforms compiler target bits flag to ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" >&6;} + + # When we add flags to the "official" CFLAGS etc, we need to + # keep track of these additions in ADDED_CFLAGS etc. These + # will later be checked to make sure only controlled additions + # have been made to CFLAGS etc. + ADDED_CFLAGS=" ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" + ADDED_CXXFLAGS=" ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" + ADDED_LDFLAGS=" ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" + + CFLAGS="${CFLAGS}${ADDED_CFLAGS}" + CXXFLAGS="${CXXFLAGS}${ADDED_CXXFLAGS}" + LDFLAGS="${LDFLAGS}${ADDED_LDFLAGS}" + + CFLAGS_JDK="${CFLAGS_JDK}${ADDED_CFLAGS}" + CXXFLAGS_JDK="${CXXFLAGS_JDK}${ADDED_CXXFLAGS}" + LDFLAGS_JDK="${LDFLAGS_JDK}${ADDED_LDFLAGS}" + + + # We have to unset 'ac_cv_sizeof_int_p' first, otherwise AC_CHECK_SIZEOF will use the previously cached value! + unset ac_cv_sizeof_int_p + # And we have to undef the definition of SIZEOF_INT_P in confdefs.h by the previous invocation of AC_CHECK_SIZEOF + cat >>confdefs.h <<_ACEOF +#undef SIZEOF_INT_P +_ACEOF + + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int *" >&5 +$as_echo_n "checking size of int *... " >&6; } +if ${ac_cv_sizeof_int_p+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (int *))" "ac_cv_sizeof_int_p" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_int_p" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (int *) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_int_p=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int_p" >&5 +$as_echo "$ac_cv_sizeof_int_p" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_INT_P $ac_cv_sizeof_int_p +_ACEOF + + + + TESTED_TARGET_CPU_BITS=`expr 8 \* $ac_cv_sizeof_int_p` + + if test "x$TESTED_TARGET_CPU_BITS" != "x$OPENJDK_TARGET_CPU_BITS"; then + as_fn_error $? "The tested number of bits in the target ($TESTED_TARGET_CPU_BITS) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS)" "$LINENO" 5 + fi fi fi @@ -29197,6 +41536,29 @@ $as_echo "$ac_cv_c_bigendian" >&6; } POST_STRIP_CMD="$STRIP -x" POST_MCS_CMD="$MCS -d -a \"JDK $FULL_VERSION\"" fi + if test "x$OPENJDK_TARGET_OS" = xaix; then + COMPILER_NAME=xlc + PICFLAG="-qpic=large" + LIBRARY_PREFIX=lib + SHARED_LIBRARY='lib$1.so' + STATIC_LIBRARY='lib$1.a' + SHARED_LIBRARY_FLAGS="-qmkshrobj" + SHARED_LIBRARY_SUFFIX='.so' + STATIC_LIBRARY_SUFFIX='.a' + OBJ_SUFFIX='.o' + EXE_SUFFIX='' + SET_SHARED_LIBRARY_NAME='' + SET_SHARED_LIBRARY_MAPFILE='' + C_FLAG_REORDER='' + CXX_FLAG_REORDER='' + SET_SHARED_LIBRARY_ORIGIN='' + SET_EXECUTABLE_ORIGIN="" + CFLAGS_JDK="" + CXXFLAGS_JDK="" + CFLAGS_JDKLIB_EXTRA='' + POST_STRIP_CMD="$STRIP -X32_64" + POST_MCS_CMD="" + fi if test "x$OPENJDK_TARGET_OS" = xwindows; then # If it is not gcc, then assume it is the MS Visual Studio compiler COMPILER_NAME=cl @@ -29382,6 +41744,24 @@ rm -f core conftest.err conftest.$ac_objext \ CFLAGS_DEBUG_SYMBOLS="-g -xs" CXXFLAGS_DEBUG_SYMBOLS="-g0 -xs" + ;; + xlc ) + C_FLAG_DEPS="-qmakedep=gcc -MF" + CXX_FLAG_DEPS="-qmakedep=gcc -MF" + C_O_FLAG_HIGHEST="-O3" + C_O_FLAG_HI="-O3 -qstrict" + C_O_FLAG_NORM="-O2" + C_O_FLAG_NONE="" + CXX_O_FLAG_HIGHEST="-O3" + CXX_O_FLAG_HI="-O3 -qstrict" + CXX_O_FLAG_NORM="-O2" + CXX_O_FLAG_NONE="" + CFLAGS_DEBUG_SYMBOLS="-g" + CXXFLAGS_DEBUG_SYMBOLS="-g" + LDFLAGS_JDK="${LDFLAGS_JDK} -q64 -brtl -bnolibpath -liconv -bexpall" + CFLAGS_JDK="${CFLAGS_JDK} -qchars=signed -q64 -qfullpath -qsaveopt" + CXXFLAGS_JDK="${CXXFLAGS_JDK} -qchars=signed -q64 -qfullpath -qsaveopt" + ;; esac ;; CL ) @@ -29505,6 +41885,13 @@ fi LDFLAGS_JDK="$LDFLAGS_JDK -z defs -xildoff -ztext" LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK -norunpath -xnolib" ;; + xlc ) + 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" + + LDFLAGS_JDK="$LDFLAGS_JDK" + LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK" + ;; cl ) CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \ @@ -29574,6 +41961,9 @@ fi if test "x$OPENJDK_TARGET_OS" = xsolaris; then CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DSOLARIS" fi + if test "x$OPENJDK_TARGET_OS" = xaix; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DAIX -DPPC64" + fi if test "x$OPENJDK_TARGET_OS" = xmacosx; then CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE -D_DARWIN_UNLIMITED_SELECT" # Setting these parameters makes it an error to link to macosx APIs that are @@ -29706,10 +42096,10 @@ fi # ZERO_ARCHFLAG tells the compiler which mode to build for case "${OPENJDK_TARGET_CPU}" in s390) - ZERO_ARCHFLAG="-m31" + ZERO_ARCHFLAG="${COMPILER_TARGET_BITS_FLAG}31" ;; *) - ZERO_ARCHFLAG="-m${OPENJDK_TARGET_CPU_BITS}" + ZERO_ARCHFLAG="${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler supports \"$ZERO_ARCHFLAG\"" >&5 @@ -29778,15 +42168,15 @@ $as_echo "$supports" >&6; } - # Check that the compiler supports -mX flags + # Check that the compiler supports -mX (or -qX on AIX) flags # Set COMPILER_SUPPORTS_TARGET_BITS_FLAG to 'true' if it does - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler supports \"-m${OPENJDK_TARGET_CPU_BITS}\"" >&5 -$as_echo_n "checking if compiler supports \"-m${OPENJDK_TARGET_CPU_BITS}\"... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler supports \"${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}\"" >&5 +$as_echo_n "checking if compiler supports \"${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}\"... " >&6; } supports=yes saved_cflags="$CFLAGS" - CFLAGS="$CFLAGS -m${OPENJDK_TARGET_CPU_BITS}" + CFLAGS="$CFLAGS ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -29812,7 +42202,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu CFLAGS="$saved_cflags" saved_cxxflags="$CXXFLAGS" - CXXFLAGS="$CXXFLAG -m${OPENJDK_TARGET_CPU_BITS}" + CXXFLAGS="$CXXFLAG ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -29848,6 +42238,27 @@ $as_echo "$supports" >&6; } + # Check for broken SuSE 'ld' for which 'Only anonymous version tag is allowed in executable.' + USING_BROKEN_SUSE_LD=no + if test "x$OPENJDK_TARGET_OS" = xlinux && test "x$GCC" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for broken SuSE 'ld' which only understands anonymous version tags in executables" >&5 +$as_echo_n "checking for broken SuSE 'ld' which only understands anonymous version tags in executables... " >&6; } + echo "SUNWprivate_1.1 { local: *; };" > version-script.map + echo "int main() { }" > main.c + if $CXX -Xlinker -version-script=version-script.map main.c 2>&5 >&5; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + USING_BROKEN_SUSE_LD=no + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + USING_BROKEN_SUSE_LD=yes + fi + rm -rf version-script.map main.c + fi + + + # Setup debug symbols (need objcopy from the toolchain for that) # @@ -30004,6 +42415,16 @@ $as_echo_n "checking what is not needed on Solaris?... " >&6; } $as_echo "alsa pulse" >&6; } fi + if test "x$OPENJDK_TARGET_OS" = xaix; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on AIX?" >&5 +$as_echo_n "checking what is not needed on AIX?... " >&6; } + ALSA_NOT_NEEDED=yes + PULSE_NOT_NEEDED=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa pulse" >&5 +$as_echo "alsa pulse" >&6; } + fi + + if test "x$OPENJDK_TARGET_OS" = xwindows; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on Windows?" >&5 $as_echo_n "checking what is not needed on Windows?... " >&6; } @@ -30814,8 +43235,6 @@ fi pkgutil_help $MISSING_DEPENDENCY ;; pkgadd) pkgadd_help $MISSING_DEPENDENCY ;; - * ) - break ;; esac if test "x$PKGHANDLER_COMMAND" != x; then @@ -30906,8 +43325,6 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu pkgutil_help $MISSING_DEPENDENCY ;; pkgadd) pkgadd_help $MISSING_DEPENDENCY ;; - * ) - break ;; esac if test "x$PKGHANDLER_COMMAND" != x; then @@ -31168,8 +43585,6 @@ $as_echo "$CUPS_FOUND" >&6; } pkgutil_help $MISSING_DEPENDENCY ;; pkgadd) pkgadd_help $MISSING_DEPENDENCY ;; - * ) - break ;; esac if test "x$PKGHANDLER_COMMAND" != x; then @@ -33930,8 +46345,6 @@ $as_echo "$FREETYPE_LIB_PATH" >&6; } pkgutil_help $MISSING_DEPENDENCY ;; pkgadd) pkgadd_help $MISSING_DEPENDENCY ;; - * ) - break ;; esac if test "x$PKGHANDLER_COMMAND" != x; then @@ -34267,8 +46680,6 @@ $as_echo "$as_me: Using FREETYPE_CFLAGS=$FREETYPE_CFLAGS and FREETYPE_LIBS=$FREE pkgutil_help $MISSING_DEPENDENCY ;; pkgadd) pkgadd_help $MISSING_DEPENDENCY ;; - * ) - break ;; esac if test "x$PKGHANDLER_COMMAND" != x; then @@ -34620,8 +47031,6 @@ done pkgutil_help $MISSING_DEPENDENCY ;; pkgadd) pkgadd_help $MISSING_DEPENDENCY ;; - * ) - break ;; esac if test "x$PKGHANDLER_COMMAND" != x; then @@ -35424,6 +47833,9 @@ $as_echo_n "checking for number of cores... " >&6; } # Looks like a MacOSX system NUM_CORES=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Cores' | awk '{print $5}'` FOUND_CORES=yes + elif test "x$OPENJDK_BUILD_OS" = xaix ; then + NUM_CORES=`/usr/sbin/prtconf | grep "^Number Of Processors" | awk '{ print $4 }'` + FOUND_CORES=yes elif test -n "$NUMBER_OF_PROCESSORS"; then # On windows, look in the env NUM_CORES=$NUMBER_OF_PROCESSORS @@ -35468,8 +47880,8 @@ $as_echo_n "checking for memory size... " >&6; } MEMORY_SIZE=`expr $MEMORY_SIZE / 1024` FOUND_MEM=yes elif test -x /usr/sbin/prtconf; then - # Looks like a Solaris system - MEMORY_SIZE=`/usr/sbin/prtconf | grep "Memory size" | awk '{ print $3 }'` + # Looks like a Solaris or AIX system + MEMORY_SIZE=`/usr/sbin/prtconf | grep "^Memory [Ss]ize" | awk '{ print $3 }'` FOUND_MEM=yes elif test -x /usr/sbin/system_profiler; then # Looks like a MacOSX system @@ -35802,18 +48214,33 @@ $as_echo "yes" >&6; } # Check whether --enable-ccache was given. if test "${enable_ccache+set}" = set; then : - enableval=$enable_ccache; ENABLE_CCACHE=${enable_ccache} -else - ENABLE_CCACHE=yes + enableval=$enable_ccache; fi - if test "x$ENABLE_CCACHE" = xyes; then + + CCACHE= + { $as_echo "$as_me:${as_lineno-$LINENO}: checking is ccache enabled" >&5 +$as_echo_n "checking is ccache enabled... " >&6; } + ENABLE_CCACHE=$enable_ccache + if test "x$enable_ccache" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } OLD_PATH="$PATH" if test "x$TOOLS_DIR" != x; then PATH=$TOOLS_DIR:$PATH fi - # Extract the first word of "ccache", so it can be a program name with args. -set dummy ccache; ac_word=$2 + + + + # Publish this variable in the help. + + + if test "x$CCACHE" = x; then + # The variable is not set by user, try to locate tool using the code snippet + for ac_prog in ccache +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_CCACHE+:} false; then : @@ -35852,13 +48279,161 @@ $as_echo "no" >&6; } fi - PATH="$OLD_PATH" + test -n "$CCACHE" && break +done + else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ccache" >&5 -$as_echo_n "checking for ccache... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: explicitly disabled" >&5 -$as_echo "explicitly disabled" >&6; } - CCACHE= + # The variable is set, but is it from the command line or the environment? + + # Try to remove the string !CCACHE! from our list. + try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!CCACHE!/} + if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then + # If it failed, the variable was not from the command line. Ignore it, + # but warn the user (except for BASH, which is always set by the calling BASH). + if test "xCCACHE" != xBASH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of CCACHE from the environment. Use command line variables instead." >&5 +$as_echo "$as_me: WARNING: Ignoring value of CCACHE from the environment. Use command line variables instead." >&2;} + fi + # Try to locate tool using the code snippet + for ac_prog in ccache +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CCACHE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CCACHE in + [\\/]* | ?:[\\/]*) + ac_cv_path_CCACHE="$CCACHE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CCACHE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CCACHE=$ac_cv_path_CCACHE +if test -n "$CCACHE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CCACHE" >&5 +$as_echo "$CCACHE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CCACHE" && break +done + + else + # If it succeeded, then it was overridden by the user. We will use it + # for the tool. + + # First remove it from the list of overridden variables, so we can test + # for unknown variables in the end. + CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var" + + # Check if the provided tool contains a complete path. + tool_specified="$CCACHE" + tool_basename="${tool_specified##*/}" + if test "x$tool_basename" = "x$tool_specified"; then + # A command without a complete path is provided, search $PATH. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool CCACHE=$tool_basename" >&5 +$as_echo "$as_me: Will search for user supplied tool CCACHE=$tool_basename" >&6;} + # Extract the first word of "$tool_basename", so it can be a program name with args. +set dummy $tool_basename; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CCACHE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CCACHE in + [\\/]* | ?:[\\/]*) + ac_cv_path_CCACHE="$CCACHE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CCACHE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CCACHE=$ac_cv_path_CCACHE +if test -n "$CCACHE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CCACHE" >&5 +$as_echo "$CCACHE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$CCACHE" = x; then + as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5 + fi + else + # Otherwise we believe it is a complete path. Use it as it is. + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool CCACHE=$tool_specified" >&5 +$as_echo "$as_me: Will use user supplied tool CCACHE=$tool_specified" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CCACHE" >&5 +$as_echo_n "checking for CCACHE... " >&6; } + if test ! -x "$tool_specified"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + as_fn_error $? "User supplied tool CCACHE=$tool_specified does not exist or is not executable" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5 +$as_echo "$tool_specified" >&6; } + fi + fi + fi + + + + if test "x$CCACHE" = x; then + as_fn_error $? "Could not find required tool for CCACHE" "$LINENO" 5 + fi + + + CCACHE_STATUS="enabled" + PATH="$OLD_PATH" + elif test "x$enable_ccache" = xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, explicitly disabled" >&5 +$as_echo "no, explicitly disabled" >&6; } + elif test "x$enable_ccache" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5 +$as_echo "unknown" >&6; } + as_fn_error $? "--enable-ccache does not accept any parameters" "$LINENO" 5 fi @@ -35873,12 +48448,15 @@ fi # When using a non home ccache directory, assume the use is to share ccache files # with other users. Thus change the umask. SET_CCACHE_DIR="CCACHE_DIR=$with_ccache_dir CCACHE_UMASK=002" + if test "x$CCACHE" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-ccache-dir has no meaning when ccache is not enabled" >&5 +$as_echo "$as_me: WARNING: --with-ccache-dir has no meaning when ccache is not enabled" >&2;} + fi fi - CCACHE_FOUND="" + if test "x$CCACHE" != x; then if test "x$CCACHE" != x; then - CCACHE_FOUND="true" # Only use ccache if it is 3.1.4 or later, which supports # precompiled headers. { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ccache supports precompiled headers" >&5 @@ -35888,6 +48466,7 @@ $as_echo_n "checking if ccache supports precompiled headers... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, disabling ccache" >&5 $as_echo "no, disabling ccache" >&6; } CCACHE= + CCACHE_STATUS="disabled" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } @@ -35920,6 +48499,7 @@ $as_echo "yes" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, disabling ccaching of precompiled headers" >&5 $as_echo "no, disabling ccaching of precompiled headers" >&6; } CCACHE= + CCACHE_STATUS="disabled" fi fi fi @@ -35954,6 +48534,16 @@ $as_echo "no, disabling ccaching of precompiled headers" >&6; } fi + # Did user specify any unknown variables? + + if test "x$CONFIGURE_OVERRIDDEN_VARIABLES" != x; then + # Replace the separating ! with spaces before presenting for end user. + unknown_variables=${CONFIGURE_OVERRIDDEN_VARIABLES//!/ } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The following variables might be unknown to configure: $unknown_variables" >&5 +$as_echo "$as_me: WARNING: The following variables might be unknown to configure: $unknown_variables" >&2;} + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if build directory is on local disk" >&5 $as_echo_n "checking if build directory is on local disk... " >&6; } @@ -35996,14 +48586,6 @@ $as_echo "$OUTPUT_DIR_IS_LOCAL" >&6; } IS_RECONFIGURE=no fi - if test -e $SRC_ROOT/build/.hide-configure-performance-hints; then - HIDE_PERFORMANCE_HINTS=yes - else - HIDE_PERFORMANCE_HINTS=no - # Hide it the next time around... - $TOUCH $SRC_ROOT/build/.hide-configure-performance-hints > /dev/null 2>&1 - fi - # At the end, call the custom hook. (Dummy macro if no custom sources available) @@ -37305,22 +49887,6 @@ $CHMOD +x $OUTPUT_ROOT/compare.sh # Finally output some useful information to the user - if test "x$CCACHE_FOUND" != x; then - if test "x$HAS_GOOD_CCACHE" = x; then - CCACHE_STATUS="installed, but disabled (version older than 3.1.4)" - CCACHE_HELP_MSG="You have ccache installed, but it is a version prior to 3.1.4. Try upgrading." - else - CCACHE_STATUS="installed and in use" - fi - else - if test "x$GCC" = xyes; then - CCACHE_STATUS="not installed (consider installing)" - CCACHE_HELP_MSG="You do not have ccache installed. Try installing it." - else - CCACHE_STATUS="not available for your system" - fi - fi - printf "\n" printf "====================================================\n" printf "A new configuration has been successfully created in\n" @@ -37351,48 +49917,11 @@ $CHMOD +x $OUTPUT_ROOT/compare.sh printf "Build performance summary:\n" printf "* Cores to use: $JOBS\n" printf "* Memory limit: $MEMORY_SIZE MB\n" - printf "* ccache status: $CCACHE_STATUS\n" + if test "x$CCACHE_STATUS" != "x"; then + printf "* ccache status: $CCACHE_STATUS\n" + fi printf "\n" - if test "x$CCACHE_HELP_MSG" != x && test "x$HIDE_PERFORMANCE_HINTS" = "xno"; then - printf "Build performance tip: ccache gives a tremendous speedup for C++ recompilations.\n" - printf "$CCACHE_HELP_MSG\n" - - # Print a helpful message on how to acquire the necessary build dependency. - # ccache is the help tag: freetype, cups, pulse, alsa etc - MISSING_DEPENDENCY=ccache - - 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 ;; - port) - port_help $MISSING_DEPENDENCY ;; - pkgutil) - pkgutil_help $MISSING_DEPENDENCY ;; - pkgadd) - pkgadd_help $MISSING_DEPENDENCY ;; - * ) - break ;; - esac - - if test "x$PKGHANDLER_COMMAND" != x; then - HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." - fi - fi - - printf "$HELP_MSG\n" - printf "\n" - fi - if test "x$BUILDING_MULTIPLE_JVM_VARIANTS" = "xyes"; then printf "NOTE: You have requested to build more than one version of the JVM, which\n" printf "will result in longer build times.\n" diff --git a/common/autoconf/help.m4 b/common/autoconf/help.m4 index 5cfcc6fcfc1..89ecfbef68c 100644 --- a/common/autoconf/help.m4 +++ b/common/autoconf/help.m4 @@ -52,8 +52,6 @@ AC_DEFUN([HELP_MSG_MISSING_DEPENDENCY], pkgutil_help $MISSING_DEPENDENCY ;; pkgadd) pkgadd_help $MISSING_DEPENDENCY ;; - * ) - break ;; esac if test "x$PKGHANDLER_COMMAND" != x; then @@ -92,8 +90,6 @@ http://www.freetype.org/ If you put the resulting build in \"C:\Program Files\GnuWin32\", it will be found automatically." fi ;; - * ) - break ;; esac } @@ -119,8 +115,6 @@ apt_help() { PKGHANDLER_COMMAND="sudo apt-get install libX11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev" ;; ccache) PKGHANDLER_COMMAND="sudo apt-get install ccache" ;; - * ) - break ;; esac } @@ -142,8 +136,6 @@ yum_help() { PKGHANDLER_COMMAND="sudo yum install libXtst-devel libXt-devel libXrender-devel" ;; ccache) PKGHANDLER_COMMAND="sudo yum install ccache" ;; - * ) - break ;; esac } @@ -163,22 +155,6 @@ AC_DEFUN_ONCE([HELP_PRINT_SUMMARY_AND_WARNINGS], [ # Finally output some useful information to the user - if test "x$CCACHE_FOUND" != x; then - if test "x$HAS_GOOD_CCACHE" = x; then - CCACHE_STATUS="installed, but disabled (version older than 3.1.4)" - CCACHE_HELP_MSG="You have ccache installed, but it is a version prior to 3.1.4. Try upgrading." - else - CCACHE_STATUS="installed and in use" - fi - else - if test "x$GCC" = xyes; then - CCACHE_STATUS="not installed (consider installing)" - CCACHE_HELP_MSG="You do not have ccache installed. Try installing it." - else - CCACHE_STATUS="not available for your system" - fi - fi - printf "\n" printf "====================================================\n" printf "A new configuration has been successfully created in\n" @@ -209,16 +185,10 @@ AC_DEFUN_ONCE([HELP_PRINT_SUMMARY_AND_WARNINGS], printf "Build performance summary:\n" printf "* Cores to use: $JOBS\n" printf "* Memory limit: $MEMORY_SIZE MB\n" - printf "* ccache status: $CCACHE_STATUS\n" - printf "\n" - - if test "x$CCACHE_HELP_MSG" != x && test "x$HIDE_PERFORMANCE_HINTS" = "xno"; then - printf "Build performance tip: ccache gives a tremendous speedup for C++ recompilations.\n" - printf "$CCACHE_HELP_MSG\n" - HELP_MSG_MISSING_DEPENDENCY([ccache]) - printf "$HELP_MSG\n" - printf "\n" + if test "x$CCACHE_STATUS" != "x"; then + printf "* ccache status: $CCACHE_STATUS\n" fi + printf "\n" if test "x$BUILDING_MULTIPLE_JVM_VARIANTS" = "xyes"; then printf "NOTE: You have requested to build more than one version of the JVM, which\n" diff --git a/common/autoconf/hotspot-spec.gmk.in b/common/autoconf/hotspot-spec.gmk.in index 82677a5be58..25aca388fbe 100644 --- a/common/autoconf/hotspot-spec.gmk.in +++ b/common/autoconf/hotspot-spec.gmk.in @@ -91,6 +91,11 @@ LLVM_LDFLAGS=@LLVM_LDFLAGS@ ALT_OUTPUTDIR=$(HOTSPOT_OUTPUTDIR) ALT_EXPORT_PATH=$(HOTSPOT_DIST) +JVM_INTERPRETER:=@JVM_INTERPRETER@ +ifeq ($(JVM_INTERPRETER), cpp) + CC_INTERP=true +endif + HOTSPOT_MAKE_ARGS:=@HOTSPOT_MAKE_ARGS@ @STATIC_CXX_SETTING@ # This is used from the libjvm build for C/C++ code. HOTSPOT_BUILD_JOBS:=$(JOBS) diff --git a/common/autoconf/jdk-options.m4 b/common/autoconf/jdk-options.m4 index 9db8c238030..095fa79bf9a 100644 --- a/common/autoconf/jdk-options.m4 +++ b/common/autoconf/jdk-options.m4 @@ -51,6 +51,33 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_VARIANT], AC_MSG_RESULT([$JDK_VARIANT]) ]) +AC_DEFUN_ONCE([JDKOPT_SETUP_JVM_INTERPRETER], +[ +############################################################################### +# +# Check which interpreter of the JVM we want to build. +# Currently we have: +# template: Template interpreter (the default) +# cpp : C++ interpreter +AC_MSG_CHECKING([which interpreter of the JVM to build]) +AC_ARG_WITH([jvm-interpreter], [AS_HELP_STRING([--with-jvm-interpreter], + [JVM interpreter to build (template, cpp) @<:@template@:>@])]) + +if test "x$with_jvm_interpreter" = x; then + with_jvm_interpreter="template" +fi + +JVM_INTERPRETER="$with_jvm_interpreter" + +if test "x$JVM_INTERPRETER" != xtemplate && test "x$JVM_INTERPRETER" != xcpp; then + AC_MSG_ERROR([The available JVM interpreters are: template, cpp]) +fi + +AC_SUBST(JVM_INTERPRETER) + +AC_MSG_RESULT([$with_jvm_interpreter]) +]) + AC_DEFUN_ONCE([JDKOPT_SETUP_JVM_VARIANTS], [ @@ -65,19 +92,20 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_JVM_VARIANTS], # ie normal interpreter and C1, only the serial GC, kernel jvmti etc # zero: no machine code interpreter, no compiler # zeroshark: zero interpreter and shark/llvm compiler backend +# core: interpreter only, no compiler (only works on some platforms) AC_MSG_CHECKING([which variants of the JVM to build]) AC_ARG_WITH([jvm-variants], [AS_HELP_STRING([--with-jvm-variants], - [JVM variants (separated by commas) to build (server, client, minimal1, kernel, zero, zeroshark) @<:@server@:>@])]) + [JVM variants (separated by commas) to build (server, client, minimal1, kernel, zero, zeroshark, core) @<:@server@:>@])]) if test "x$with_jvm_variants" = x; then with_jvm_variants="server" fi JVM_VARIANTS=",$with_jvm_variants," - TEST_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,//' -e 's/client,//' -e 's/minimal1,//' -e 's/kernel,//' -e 's/zero,//' -e 's/zeroshark,//'` + TEST_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,//' -e 's/client,//' -e 's/minimal1,//' -e 's/kernel,//' -e 's/zero,//' -e 's/zeroshark,//' -e 's/core,//'` if test "x$TEST_VARIANTS" != "x,"; then - AC_MSG_ERROR([The available JVM variants are: server, client, minimal1, kernel, zero, zeroshark]) + AC_MSG_ERROR([The available JVM variants are: server, client, minimal1, kernel, zero, zeroshark, core]) fi AC_MSG_RESULT([$with_jvm_variants]) @@ -87,6 +115,7 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_JVM_VARIANTS], JVM_VARIANT_KERNEL=`$ECHO "$JVM_VARIANTS" | $SED -e '/,kernel,/!s/.*/false/g' -e '/,kernel,/s/.*/true/g'` JVM_VARIANT_ZERO=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zero,/!s/.*/false/g' -e '/,zero,/s/.*/true/g'` JVM_VARIANT_ZEROSHARK=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zeroshark,/!s/.*/false/g' -e '/,zeroshark,/s/.*/true/g'` + JVM_VARIANT_CORE=`$ECHO "$JVM_VARIANTS" | $SED -e '/,core,/!s/.*/false/g' -e '/,core,/s/.*/true/g'` if test "x$JVM_VARIANT_CLIENT" = xtrue; then if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then @@ -106,7 +135,7 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_JVM_VARIANTS], # Replace the commas with AND for use in the build directory name. ANDED_JVM_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/^,//' -e 's/,$//' -e 's/,/AND/g'` - COUNT_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,/1/' -e 's/client,/1/' -e 's/minimal1,/1/' -e 's/kernel,/1/' -e 's/zero,/1/' -e 's/zeroshark,/1/'` + COUNT_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,/1/' -e 's/client,/1/' -e 's/minimal1,/1/' -e 's/kernel,/1/' -e 's/zero,/1/' -e 's/zeroshark,/1/' -e 's/core,/1/'` if test "x$COUNT_VARIANTS" != "x,1"; then BUILDING_MULTIPLE_JVM_VARIANTS=yes else @@ -120,6 +149,7 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_JVM_VARIANTS], AC_SUBST(JVM_VARIANT_KERNEL) AC_SUBST(JVM_VARIANT_ZERO) AC_SUBST(JVM_VARIANT_ZEROSHARK) + AC_SUBST(JVM_VARIANT_CORE) INCLUDE_SA=true if test "x$JVM_VARIANT_ZERO" = xtrue ; then @@ -128,6 +158,9 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_JVM_VARIANTS], if test "x$JVM_VARIANT_ZEROSHARK" = xtrue ; then INCLUDE_SA=false fi + if test "x$VAR_CPU" = xppc64 ; then + INCLUDE_SA=false + fi AC_SUBST(INCLUDE_SA) if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then @@ -236,6 +269,10 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_DEBUG_LEVEL], HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}shark " fi + if test "x$JVM_VARIANT_CORE" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}core " + fi + HOTSPOT_TARGET="$HOTSPOT_TARGET docs export_$HOTSPOT_EXPORT" # On Macosx universal binaries are produced, but they only contain diff --git a/common/autoconf/libraries.m4 b/common/autoconf/libraries.m4 index c2cc3794429..fa96a03fa88 100644 --- a/common/autoconf/libraries.m4 +++ b/common/autoconf/libraries.m4 @@ -43,6 +43,14 @@ AC_DEFUN_ONCE([LIB_SETUP_INIT], AC_MSG_RESULT([alsa pulse]) fi + if test "x$OPENJDK_TARGET_OS" = xaix; then + AC_MSG_CHECKING([what is not needed on AIX?]) + ALSA_NOT_NEEDED=yes + PULSE_NOT_NEEDED=yes + AC_MSG_RESULT([alsa pulse]) + fi + + if test "x$OPENJDK_TARGET_OS" = xwindows; then AC_MSG_CHECKING([what is not needed on Windows?]) CUPS_NOT_NEEDED=yes diff --git a/common/autoconf/platform.m4 b/common/autoconf/platform.m4 index 757bf227e78..d1b1573b101 100644 --- a/common/autoconf/platform.m4 +++ b/common/autoconf/platform.m4 @@ -126,6 +126,11 @@ AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_OS], VAR_OS_API=winapi VAR_OS_ENV=windows.msys ;; + *aix*) + VAR_OS=aix + VAR_OS_API=posix + VAR_OS_ENV=aix + ;; *) AC_MSG_ERROR([unsupported operating system $1]) ;; @@ -432,9 +437,9 @@ AC_DEFUN([PLATFORM_SET_COMPILER_TARGET_BITS_FLAGS], # keep track of these additions in ADDED_CFLAGS etc. These # will later be checked to make sure only controlled additions # have been made to CFLAGS etc. - ADDED_CFLAGS=" -m${OPENJDK_TARGET_CPU_BITS}" - ADDED_CXXFLAGS=" -m${OPENJDK_TARGET_CPU_BITS}" - ADDED_LDFLAGS=" -m${OPENJDK_TARGET_CPU_BITS}" + ADDED_CFLAGS=" ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" + ADDED_CXXFLAGS=" ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" + ADDED_LDFLAGS=" ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" CFLAGS="${CFLAGS}${ADDED_CFLAGS}" CXXFLAGS="${CXXFLAGS}${ADDED_CXXFLAGS}" @@ -454,8 +459,9 @@ AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_TARGET_BITS], # is made at runtime.) # - if test "x$OPENJDK_TARGET_OS" = xsolaris; then - # Always specify -m flags on Solaris + if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_OS" = xaix; then + # Always specify -m flag on Solaris + # And -q on AIX because otherwise the compiler produces 32-bit objects by default PLATFORM_SET_COMPILER_TARGET_BITS_FLAGS elif test "x$COMPILE_TYPE" = xreduced; then if test "x$OPENJDK_TARGET_OS" != xwindows; then @@ -477,19 +483,34 @@ AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_TARGET_BITS], AC_CHECK_SIZEOF([int *], [1111]) - if test "x$SIZEOF_INT_P" != "x$ac_cv_sizeof_int_p"; then - # Workaround autoconf bug, see http://lists.gnu.org/archive/html/autoconf/2010-07/msg00004.html - SIZEOF_INT_P="$ac_cv_sizeof_int_p" - fi - - if test "x$SIZEOF_INT_P" = x; then + # AC_CHECK_SIZEOF defines 'ac_cv_sizeof_int_p' to hold the number of bytes used by an 'int*' + if test "x$ac_cv_sizeof_int_p" = x; then # The test failed, lets stick to the assumed value. AC_MSG_WARN([The number of bits in the target could not be determined, using $OPENJDK_TARGET_CPU_BITS.]) else - TESTED_TARGET_CPU_BITS=`expr 8 \* $SIZEOF_INT_P` + TESTED_TARGET_CPU_BITS=`expr 8 \* $ac_cv_sizeof_int_p` if test "x$TESTED_TARGET_CPU_BITS" != "x$OPENJDK_TARGET_CPU_BITS"; then - AC_MSG_ERROR([The tested number of bits in the target ($TESTED_TARGET_CPU_BITS) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS)]) + # This situation may happen on 64-bit platforms where the compiler by default only generates 32-bit objects + # Let's try to implicitely set the compilers target architecture and retry the test + AC_MSG_NOTICE([The tested number of bits in the target ($TESTED_TARGET_CPU_BITS) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS).]) + AC_MSG_NOTICE([I'll retry after setting the platforms compiler target bits flag to ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}]) + PLATFORM_SET_COMPILER_TARGET_BITS_FLAGS + + # We have to unset 'ac_cv_sizeof_int_p' first, otherwise AC_CHECK_SIZEOF will use the previously cached value! + unset ac_cv_sizeof_int_p + # And we have to undef the definition of SIZEOF_INT_P in confdefs.h by the previous invocation of AC_CHECK_SIZEOF + cat >>confdefs.h <<_ACEOF +#undef SIZEOF_INT_P +_ACEOF + + AC_CHECK_SIZEOF([int *], [1111]) + + TESTED_TARGET_CPU_BITS=`expr 8 \* $ac_cv_sizeof_int_p` + + if test "x$TESTED_TARGET_CPU_BITS" != "x$OPENJDK_TARGET_CPU_BITS"; then + AC_MSG_ERROR([The tested number of bits in the target ($TESTED_TARGET_CPU_BITS) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS)]) + fi fi fi diff --git a/common/autoconf/spec.gmk.in b/common/autoconf/spec.gmk.in index e8649ddbee5..ee18cb1b07a 100644 --- a/common/autoconf/spec.gmk.in +++ b/common/autoconf/spec.gmk.in @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -37,6 +37,8 @@ X:= SPACE:=$(X) $(X) COMMA:=, HASH:=\# +LEFT_PAREN:=( +RIGHT_PAREN:=) SQUOTE:=' #' DQUOTE:=" @@ -208,6 +210,7 @@ JVM_VARIANT_MINIMAL1:=@JVM_VARIANT_MINIMAL1@ JVM_VARIANT_KERNEL:=@JVM_VARIANT_KERNEL@ JVM_VARIANT_ZERO:=@JVM_VARIANT_ZERO@ JVM_VARIANT_ZEROSHARK:=@JVM_VARIANT_ZEROSHARK@ +JVM_VARIANT_CORE:=@JVM_VARIANT_CORE@ # Universal binaries on macosx MACOSX_UNIVERSAL=@MACOSX_UNIVERSAL@ @@ -297,6 +300,8 @@ MACOSX_VERSION_MIN=@MACOSX_VERSION_MIN@ COMPILER_TYPE:=@COMPILER_TYPE@ COMPILER_NAME:=@COMPILER_NAME@ +# Option used to tell the compiler whether to create 32- or 64-bit executables +COMPILER_TARGET_BITS_FLAG:=@COMPILER_TARGET_BITS_FLAG@ COMPILER_SUPPORTS_TARGET_BITS_FLAG=@COMPILER_SUPPORTS_TARGET_BITS_FLAG@ CC_OUT_OPTION:=@CC_OUT_OPTION@ @@ -340,6 +345,11 @@ CPP:=@FIXPATH@ @CPP@ # The linker can be gcc or ld on posix systems, or link.exe on windows systems. LD:=@FIXPATH@ @LD@ +# The linker on older SuSE distros (e.g. on SLES 10) complains with: +# "Invalid version tag `SUNWprivate_1.1'. Only anonymous version tag is allowed in executable." +# if feeded with a version script which contains named tags. +USING_BROKEN_SUSE_LD:=@USING_BROKEN_SUSE_LD@ + # LDFLAGS used to link the jdk native libraries (C-code) LDFLAGS_JDKLIB:=@LDFLAGS_JDKLIB@ LDFLAGS_JDKLIB_SUFFIX:=@LDFLAGS_JDKLIB_SUFFIX@ @@ -430,28 +440,29 @@ POST_MCS_CMD:=@POST_MCS_CMD@ JAVA_FLAGS:=@BOOT_JDK_JVMARGS@ -JAVA=@FIXPATH@ $(BOOT_JDK)/bin/java $(JAVA_FLAGS) +JAVA=@FIXPATH@ @JAVA@ $(JAVA_FLAGS) -JAVAC=@FIXPATH@ $(BOOT_JDK)/bin/javac +JAVAC:=@FIXPATH@ @JAVAC@ # Hotspot sets this variable before reading the SPEC when compiling sa-jdi.jar. Avoid # overriding that value by using ?=. JAVAC_FLAGS?=@JAVAC_FLAGS@ -JAVAH=@FIXPATH@ $(BOOT_JDK)/bin/javah +JAVAH:=@FIXPATH@ @JAVAH@ -JAR=@FIXPATH@ $(BOOT_JDK)/bin/jar +JAR:=@FIXPATH@ @JAR@ -RMIC=@FIXPATH@ $(BOOT_JDK)/bin/rmic +NATIVE2ASCII:=@FIXPATH@ @NATIVE2ASCII@ -NATIVE2ASCII=@FIXPATH@ $(BOOT_JDK)/bin/native2ascii - -JARSIGNER=@FIXPATH@ $(BOOT_JDK)/bin/jarsigner +JARSIGNER:=@FIXPATH@ @JARSIGNER@ # You run the new javac using the boot jdk with $(BOOT_JDK)/bin/java $(NEW_JAVAC) ... -BOOTSTRAP_JAVAC_JAR:=$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar -BOOTSTRAP_JAVAC_ARGS:="-Xbootclasspath/p:$(BOOTSTRAP_JAVAC_JAR)" -cp $(BOOTSTRAP_JAVAC_JAR) -NEW_JAVAC = $(BOOTSTRAP_JAVAC_ARGS) com.sun.tools.javac.Main -NEW_JAVADOC = $(BOOTSTRAP_JAVAC_ARGS) com.sun.tools.javadoc.Main +INTERIM_LANGTOOLS_JAR := $(LANGTOOLS_OUTPUTDIR)/dist/interim_langtools.jar +INTERIM_LANGTOOLS_ARGS := "-Xbootclasspath/p:$(INTERIM_LANGTOOLS_JAR)" -cp $(INTERIM_LANGTOOLS_JAR) +NEW_JAVAC = $(INTERIM_LANGTOOLS_ARGS) com.sun.tools.javac.Main +NEW_JAVADOC = $(INTERIM_LANGTOOLS_ARGS) com.sun.tools.javadoc.Main + +# The interim corba jar is needed for running rmic +INTERIM_CORBA_JAR := $(CORBA_OUTPUTDIR)/dist/interim_corba.jar # Base flags for RC # Guarding this against resetting value. Legacy make files include spec multiple diff --git a/common/autoconf/toolchain.m4 b/common/autoconf/toolchain.m4 index 84793969b92..f358daf3473 100644 --- a/common/autoconf/toolchain.m4 +++ b/common/autoconf/toolchain.m4 @@ -44,6 +44,15 @@ AC_DEFUN([TOOLCHAIN_CHECK_COMPILER_VERSION], COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.*@<:@ ,\t@:>@$COMPILER_NAME@<:@ ,\t@:>@\(@<:@1-9@:>@\.@<:@0-9@:>@@<:@0-9@:>@*\).*/\1/p"` COMPILER_VENDOR="Sun Studio" fi + elif test "x$OPENJDK_TARGET_OS" = xaix; then + COMPILER_VERSION_TEST=`$COMPILER -qversion 2>&1 | $TAIL -n 1` + $ECHO $COMPILER_VERSION_TEST | $GREP "^Version: " > /dev/null + if test $? -ne 0; then + AC_MSG_ERROR([Failed to detect the compiler version of $COMPILER ....]) + else + COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n 's/Version: \([0-9][0-9]\.[0-9][0-9]*\).*/\1/p'` + COMPILER_VENDOR='IBM' + fi elif test "x$OPENJDK_TARGET_OS" = xwindows; then # First line typically looks something like: # Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86 @@ -113,34 +122,62 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_SYSROOT_AND_OUT_OPTIONS], AC_DEFUN([TOOLCHAIN_FIND_COMPILER], [ COMPILER_NAME=$2 + SEARCH_LIST="$3" - $1= - # If TOOLS_DIR is set, check for all compiler names in there first - # before checking the rest of the PATH. - if test -n "$TOOLS_DIR"; then - PATH_save="$PATH" - PATH="$TOOLS_DIR" - AC_PATH_PROGS(TOOLS_DIR_$1, $3) - $1=$TOOLS_DIR_$1 - PATH="$PATH_save" + if test "x[$]$1" != x; then + # User has supplied compiler name already, always let that override. + AC_MSG_NOTICE([Will use user supplied compiler $1=[$]$1]) + if test "x`basename [$]$1`" = "x[$]$1"; then + # A command without a complete path is provided, search $PATH. + + AC_PATH_PROGS(POTENTIAL_$1, [$]$1) + if test "x$POTENTIAL_$1" != x; then + $1=$POTENTIAL_$1 + else + AC_MSG_ERROR([User supplied compiler $1=[$]$1 could not be found]) + fi + else + # Otherwise it might already be a complete path + if test ! -x "[$]$1"; then + AC_MSG_ERROR([User supplied compiler $1=[$]$1 does not exist]) + fi + fi + else + # No user supplied value. Locate compiler ourselves + $1= + # If TOOLS_DIR is set, check for all compiler names in there first + # before checking the rest of the PATH. + if test -n "$TOOLS_DIR"; then + PATH_save="$PATH" + PATH="$TOOLS_DIR" + AC_PATH_PROGS(TOOLS_DIR_$1, $SEARCH_LIST) + $1=$TOOLS_DIR_$1 + PATH="$PATH_save" + fi + + # AC_PATH_PROGS can't be run multiple times with the same variable, + # so create a new name for this run. + if test "x[$]$1" = x; then + AC_PATH_PROGS(POTENTIAL_$1, $SEARCH_LIST) + $1=$POTENTIAL_$1 + fi + + if test "x[$]$1" = x; then + HELP_MSG_MISSING_DEPENDENCY([devkit]) + AC_MSG_ERROR([Could not find a $COMPILER_NAME compiler. $HELP_MSG]) + fi fi - # AC_PATH_PROGS can't be run multiple times with the same variable, - # so create a new name for this run. - if test "x[$]$1" = x; then - AC_PATH_PROGS(POTENTIAL_$1, $3) - $1=$POTENTIAL_$1 - fi - - if test "x[$]$1" = x; then - HELP_MSG_MISSING_DEPENDENCY([devkit]) - AC_MSG_ERROR([Could not find a $COMPILER_NAME compiler. $HELP_MSG]) - fi + # Now we have a compiler binary in $1. Make sure it's okay. BASIC_FIXUP_EXECUTABLE($1) - AC_MSG_CHECKING([resolved symbolic links for $1]) TEST_COMPILER="[$]$1" - BASIC_REMOVE_SYMBOLIC_LINKS(TEST_COMPILER) - AC_MSG_RESULT([$TEST_COMPILER]) + # Don't remove symbolic links on AIX because 'xlc_r' and 'xlC_r' may all be links + # to 'xlc' but it is crucial that we invoke the compiler with the right name! + if test "x$OPENJDK_BUILD_OS" != xaix; then + AC_MSG_CHECKING([resolved symbolic links for $1]) + BASIC_REMOVE_SYMBOLIC_LINKS(TEST_COMPILER) + AC_MSG_RESULT([$TEST_COMPILER]) + fi AC_MSG_CHECKING([if $1 is disguised ccache]) COMPILER_BASENAME=`$BASENAME "$TEST_COMPILER"` @@ -201,11 +238,11 @@ AC_DEFUN([TOOLCHAIN_SETUP_PATHS], # otherwise we might pick up cross-compilers which don't use standard naming. # Otherwise, we'll set the BUILD_tools to the native tools, but that'll have # to wait until they are properly discovered. - AC_PATH_PROGS(BUILD_CC, [cl cc gcc]) + BASIC_PATH_PROGS(BUILD_CC, [cl cc gcc]) BASIC_FIXUP_EXECUTABLE(BUILD_CC) - AC_PATH_PROGS(BUILD_CXX, [cl CC g++]) + BASIC_PATH_PROGS(BUILD_CXX, [cl CC g++]) BASIC_FIXUP_EXECUTABLE(BUILD_CXX) - AC_PATH_PROG(BUILD_LD, ld) + BASIC_PATH_PROGS(BUILD_LD, ld) BASIC_FIXUP_EXECUTABLE(BUILD_LD) fi AC_SUBST(BUILD_CC) @@ -248,12 +285,13 @@ AC_DEFUN([TOOLCHAIN_SETUP_PATHS], # On Solaris, cc is preferred to gcc. # Elsewhere, gcc is preferred to cc. - if test "x$CC" != x; then - COMPILER_CHECK_LIST="$CC" - elif test "x$OPENJDK_TARGET_OS" = "xwindows"; then + if test "x$OPENJDK_TARGET_OS" = "xwindows"; then COMPILER_CHECK_LIST="cl" elif test "x$OPENJDK_TARGET_OS" = "xsolaris"; then COMPILER_CHECK_LIST="cc gcc" + elif test "x$OPENJDK_TARGET_OS" = "xaix"; then + # Do not probe for cc on AIX. + COMPILER_CHECK_LIST="xlc_r" else COMPILER_CHECK_LIST="gcc cc" fi @@ -262,14 +300,23 @@ AC_DEFUN([TOOLCHAIN_SETUP_PATHS], # Now that we have resolved CC ourself, let autoconf have its go at it AC_PROG_CC([$CC]) + # Option used to tell the compiler whether to create 32- or 64-bit executables + # Notice that CC contains the full compiler path at this point. + case $CC in + *xlc_r) COMPILER_TARGET_BITS_FLAG="-q";; + *) COMPILER_TARGET_BITS_FLAG="-m";; + esac + AC_SUBST(COMPILER_TARGET_BITS_FLAG) + ### Locate C++ compiler (CXX) - if test "x$CXX" != x; then - COMPILER_CHECK_LIST="$CXX" - elif test "x$OPENJDK_TARGET_OS" = "xwindows"; then + if test "x$OPENJDK_TARGET_OS" = "xwindows"; then COMPILER_CHECK_LIST="cl" elif test "x$OPENJDK_TARGET_OS" = "xsolaris"; then COMPILER_CHECK_LIST="CC g++" + elif test "x$OPENJDK_TARGET_OS" = "xaix"; then + # Do not probe for CC on AIX . + COMPILER_CHECK_LIST="xlC_r" else COMPILER_CHECK_LIST="g++ CC" fi @@ -306,11 +353,13 @@ AC_DEFUN([TOOLCHAIN_SETUP_PATHS], AC_SUBST(LDEXECXX) if test "x$OPENJDK_TARGET_OS" != xwindows; then - AC_CHECK_TOOL(AR, ar) + BASIC_CHECK_TOOLS(AR, ar) BASIC_FIXUP_EXECUTABLE(AR) fi if test "x$OPENJDK_TARGET_OS" = xmacosx; then ARFLAGS="-r" + elif test "x$OPENJDK_TARGET_OS" = xaix; then + ARFLAGS="-X64" else ARFLAGS="" fi @@ -431,7 +480,7 @@ AC_DEFUN([TOOLCHAIN_SETUP_PATHS], # Find the right assembler. if test "x$OPENJDK_TARGET_OS" = xsolaris; then - AC_PATH_PROG(AS, as) + BASIC_PATH_PROGS(AS, as) BASIC_FIXUP_EXECUTABLE(AS) else AS="$CC -c" @@ -439,41 +488,41 @@ AC_DEFUN([TOOLCHAIN_SETUP_PATHS], AC_SUBST(AS) if test "x$OPENJDK_TARGET_OS" = xsolaris; then - AC_PATH_PROG(NM, nm) + BASIC_PATH_PROGS(NM, nm) BASIC_FIXUP_EXECUTABLE(NM) - AC_PATH_PROG(GNM, gnm) + BASIC_PATH_PROGS(GNM, gnm) BASIC_FIXUP_EXECUTABLE(GNM) - AC_PATH_PROG(STRIP, strip) + BASIC_PATH_PROGS(STRIP, strip) BASIC_FIXUP_EXECUTABLE(STRIP) - AC_PATH_PROG(MCS, mcs) + BASIC_PATH_PROGS(MCS, mcs) BASIC_FIXUP_EXECUTABLE(MCS) elif test "x$OPENJDK_TARGET_OS" != xwindows; then - AC_CHECK_TOOL(NM, nm) + BASIC_CHECK_TOOLS(NM, nm) BASIC_FIXUP_EXECUTABLE(NM) GNM="$NM" AC_SUBST(GNM) - AC_CHECK_TOOL(STRIP, strip) + BASIC_CHECK_TOOLS(STRIP, strip) BASIC_FIXUP_EXECUTABLE(STRIP) fi # objcopy is used for moving debug symbols to separate files when # full debug symbols are enabled. if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_OS" = xlinux; then - AC_CHECK_TOOLS(OBJCOPY, [gobjcopy objcopy]) + BASIC_CHECK_TOOLS(OBJCOPY, [gobjcopy objcopy]) # Only call fixup if objcopy was found. if test -n "$OBJCOPY"; then BASIC_FIXUP_EXECUTABLE(OBJCOPY) fi fi - AC_CHECK_TOOLS(OBJDUMP, [gobjdump objdump]) + BASIC_CHECK_TOOLS(OBJDUMP, [gobjdump objdump]) if test "x$OBJDUMP" != x; then # Only used for compare.sh; we can live without it. BASIC_FIXUP_EXECUTABLE bails if argument is missing. BASIC_FIXUP_EXECUTABLE(OBJDUMP) fi if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then - AC_PATH_PROG(LIPO, lipo) + BASIC_PATH_PROGS(LIPO, lipo) BASIC_FIXUP_EXECUTABLE(LIPO) fi @@ -554,6 +603,29 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_LIBS], POST_STRIP_CMD="$STRIP -x" POST_MCS_CMD="$MCS -d -a \"JDK $FULL_VERSION\"" fi + if test "x$OPENJDK_TARGET_OS" = xaix; then + COMPILER_NAME=xlc + PICFLAG="-qpic=large" + LIBRARY_PREFIX=lib + SHARED_LIBRARY='lib[$]1.so' + STATIC_LIBRARY='lib[$]1.a' + SHARED_LIBRARY_FLAGS="-qmkshrobj" + SHARED_LIBRARY_SUFFIX='.so' + STATIC_LIBRARY_SUFFIX='.a' + OBJ_SUFFIX='.o' + EXE_SUFFIX='' + SET_SHARED_LIBRARY_NAME='' + SET_SHARED_LIBRARY_MAPFILE='' + C_FLAG_REORDER='' + CXX_FLAG_REORDER='' + SET_SHARED_LIBRARY_ORIGIN='' + SET_EXECUTABLE_ORIGIN="" + CFLAGS_JDK="" + CXXFLAGS_JDK="" + CFLAGS_JDKLIB_EXTRA='' + POST_STRIP_CMD="$STRIP -X32_64" + POST_MCS_CMD="" + fi if test "x$OPENJDK_TARGET_OS" = xwindows; then # If it is not gcc, then assume it is the MS Visual Studio compiler COMPILER_NAME=cl @@ -730,6 +802,24 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_OPTIMIZATION], CFLAGS_DEBUG_SYMBOLS="-g -xs" CXXFLAGS_DEBUG_SYMBOLS="-g0 -xs" + ;; + xlc ) + C_FLAG_DEPS="-qmakedep=gcc -MF" + CXX_FLAG_DEPS="-qmakedep=gcc -MF" + C_O_FLAG_HIGHEST="-O3" + C_O_FLAG_HI="-O3 -qstrict" + C_O_FLAG_NORM="-O2" + C_O_FLAG_NONE="" + CXX_O_FLAG_HIGHEST="-O3" + CXX_O_FLAG_HI="-O3 -qstrict" + CXX_O_FLAG_NORM="-O2" + CXX_O_FLAG_NONE="" + CFLAGS_DEBUG_SYMBOLS="-g" + CXXFLAGS_DEBUG_SYMBOLS="-g" + LDFLAGS_JDK="${LDFLAGS_JDK} -q64 -brtl -bnolibpath -liconv -bexpall" + CFLAGS_JDK="${CFLAGS_JDK} -qchars=signed -q64 -qfullpath -qsaveopt" + CXXFLAGS_JDK="${CXXFLAGS_JDK} -qchars=signed -q64 -qfullpath -qsaveopt" + ;; esac ;; CL ) @@ -840,6 +930,13 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_JDK], LDFLAGS_JDK="$LDFLAGS_JDK -z defs -xildoff -ztext" LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK -norunpath -xnolib" ;; + xlc ) + 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" + + LDFLAGS_JDK="$LDFLAGS_JDK" + LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK" + ;; cl ) CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \ @@ -909,6 +1006,9 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_JDK], if test "x$OPENJDK_TARGET_OS" = xsolaris; then CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DSOLARIS" fi + if test "x$OPENJDK_TARGET_OS" = xaix; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DAIX -DPPC64" + fi if test "x$OPENJDK_TARGET_OS" = xmacosx; then CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE -D_DARWIN_UNLIMITED_SELECT" # Setting these parameters makes it an error to link to macosx APIs that are @@ -1076,20 +1176,38 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_COMPILER_FLAGS_MISC], # ZERO_ARCHFLAG tells the compiler which mode to build for case "${OPENJDK_TARGET_CPU}" in s390) - ZERO_ARCHFLAG="-m31" + ZERO_ARCHFLAG="${COMPILER_TARGET_BITS_FLAG}31" ;; *) - ZERO_ARCHFLAG="-m${OPENJDK_TARGET_CPU_BITS}" + ZERO_ARCHFLAG="${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" esac TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([$ZERO_ARCHFLAG], [], [ZERO_ARCHFLAG=""]) AC_SUBST(ZERO_ARCHFLAG) - # Check that the compiler supports -mX flags + # Check that the compiler supports -mX (or -qX on AIX) flags # Set COMPILER_SUPPORTS_TARGET_BITS_FLAG to 'true' if it does - TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([-m${OPENJDK_TARGET_CPU_BITS}], + TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}], [COMPILER_SUPPORTS_TARGET_BITS_FLAG=true], [COMPILER_SUPPORTS_TARGET_BITS_FLAG=false]) AC_SUBST(COMPILER_SUPPORTS_TARGET_BITS_FLAG) + + + # Check for broken SuSE 'ld' for which 'Only anonymous version tag is allowed in executable.' + USING_BROKEN_SUSE_LD=no + if test "x$OPENJDK_TARGET_OS" = xlinux && test "x$GCC" = xyes; then + AC_MSG_CHECKING([for broken SuSE 'ld' which only understands anonymous version tags in executables]) + echo "SUNWprivate_1.1 { local: *; };" > version-script.map + echo "int main() { }" > main.c + if $CXX -Xlinker -version-script=version-script.map main.c 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD; then + AC_MSG_RESULT(no) + USING_BROKEN_SUSE_LD=no + else + AC_MSG_RESULT(yes) + USING_BROKEN_SUSE_LD=yes + fi + rm -rf version-script.map main.c + fi + AC_SUBST(USING_BROKEN_SUSE_LD) ]) # Setup the JTREG paths @@ -1126,7 +1244,7 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_JTREG], AC_MSG_RESULT($JTREGEXE) else # try to find jtreg on path - BASIC_REQUIRE_PROG(JTREGEXE, jtreg) + BASIC_REQUIRE_PROGS(JTREGEXE, jtreg) JT_HOME="`$DIRNAME $JTREGEXE`" fi fi diff --git a/corba/.hgtags b/corba/.hgtags index 914430fb54c..03c69ec949f 100644 --- a/corba/.hgtags +++ b/corba/.hgtags @@ -244,3 +244,4 @@ d6820a414f182a011a53a29a52370c696cd58dab jdk8-b118 53fd772d28c8a9f0f43adfc06f75f6b3cfa93cb5 jdk8-b120 a7d3638deb2f4e33217b1ecf889479e90f9e5b50 jdk9-b00 79a8136b18c1c6848f500088f5a4b39f262f082d jdk9-b01 +8394993063135a42b63a94473280399fb2a13aa7 jdk9-b02 diff --git a/corba/make/BuildCorba.gmk b/corba/make/BuildCorba.gmk index 3190ce899cf..05bcbe31337 100644 --- a/corba/make/BuildCorba.gmk +++ b/corba/make/BuildCorba.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2007, 2014, 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,235 +31,15 @@ default: all include $(SPEC) -include MakeBase.gmk -include JavaCompilation.gmk -include IdlCompilation.gmk -# The Corba sources are old and generates a LOT of warnings. -# Disable these using Xlint, until someone cares to fix them. -DISABLE_CORBA_WARNINGS := -Xlint:all,-deprecation,-unchecked,-serial,-fallthrough,-cast,-rawtypes,-static,-dep-ann +gensrc-corba: + +$(MAKE) -f $(CORBA_TOPDIR)/make/GensrcCorba.gmk -# The "generate old bytecode" javac setup uses the new compiler to compile for the -# boot jdk to generate tools that need to be run with the boot jdk. -# Thus we force the target bytecode to the boot jdk bytecode. -$(eval $(call SetupJavaCompiler,GENERATE_OLDBYTECODE, \ - JVM := $(JAVA), \ - JAVAC := $(NEW_JAVAC), \ - FLAGS := $(BOOT_JDK_SOURCETARGET) \ - -bootclasspath "$(BOOT_RTJAR)$(PATH_SEP)$(BOOT_TOOLSJAR)" \ - $(DISABLE_CORBA_WARNINGS), \ - SERVER_DIR := $(SJAVAC_SERVER_DIR), \ - SERVER_JVM := $(SJAVAC_SERVER_JAVA))) +compile-corba: gensrc-corba + +$(MAKE) -f $(CORBA_TOPDIR)/make/CompileCorba.gmk -# The "generate new bytecode" uses the new compiler to generate bytecode -# for the new jdk that is being built. The code compiled by this setup -# cannot necessarily be run with the boot jdk. -$(eval $(call SetupJavaCompiler,GENERATE_NEWBYTECODE, \ - JVM := $(JAVA), \ - JAVAC := $(NEW_JAVAC), \ - FLAGS := -cp $(BOOT_TOOLSJAR) -XDignore.symbol.file=true $(DISABLE_CORBA_WARNINGS), \ - SERVER_DIR := $(SJAVAC_SERVER_DIR), \ - SERVER_JVM := $(SJAVAC_SERVER_JAVA))) - -$(eval $(call SetupJavaCompilation,BUILD_STRIPPROP, \ - SETUP := GENERATE_OLDBYTECODE, \ - SRC := $(CORBA_TOPDIR)/make/tools/src, \ - BIN := $(CORBA_OUTPUTDIR)/btclasses/stripprop_classes)) - -$(eval $(call SetupArchive,ARCHIVE_STRIPPROP, $(BUILD_STRIPPROP), \ - SRCS := $(CORBA_OUTPUTDIR)/btclasses/stripprop_classes, \ - JAR := $(CORBA_OUTPUTDIR)/btjars/stripproperties.jar, \ - JARMAIN := build.tools.stripproperties.StripPropertiesCorba)) - -$(eval $(call SetupJavaCompilation,BUILD_IDLJ, \ - SETUP := GENERATE_OLDBYTECODE, \ - SRC := $(CORBA_TOPDIR)/src/share/classes, \ - BIN := $(CORBA_OUTPUTDIR)/btclasses/idlj_classes, \ - COPY := .prp, \ - INCLUDES := com/sun/tools/corba/se/idl, \ - EXCLUDE_FILES := ResourceBundleUtil.java)) - -$(eval $(call SetupArchive,ARCHIVE_IDLJ, $(BUILD_IDLJ), \ - SRCS := $(CORBA_OUTPUTDIR)/btclasses/idlj_classes, \ - SUFFIXES := .class .prp, \ - JAR := $(CORBA_OUTPUTDIR)/btjars/idlj.jar, \ - JARMAIN := com.sun.tools.corba.se.idl.toJavaPortable.Compile)) - -$(eval $(call SetupJavaCompilation,BUILD_LOGUTIL, \ - SETUP := GENERATE_OLDBYTECODE, \ - SRC := $(CORBA_TOPDIR)/src/share/classes, \ - BIN := $(CORBA_OUTPUTDIR)/btclasses/logutil_classes, \ - INCLUDES := com/sun/tools/corba/se/logutil)) - -$(eval $(call SetupArchive,ARCHIVE_LOGUTIL, $(BUILD_LOGUTIL), \ - SRCS := $(CORBA_OUTPUTDIR)/btclasses/logutil_classes, \ - JAR := $(CORBA_OUTPUTDIR)/btjars/logutil.jar, \ - JARMAIN := com.sun.tools.corba.se.logutil.MC)) - -# Generate LogWrapper classes -$(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/%SystemException.java: \ - $(CORBA_TOPDIR)/src/share/classes/com/sun/corba/se/spi/logging/data/%.mc \ - $(CORBA_OUTPUTDIR)/btjars/logutil.jar - $(MKDIR) -p $(@D) - $(RM) -f $(@D)/_the_wrappers.d - $(ECHO) $(LOG_INFO) Generating class file from $*.mc - $(JAVA) -jar $(CORBA_OUTPUTDIR)/btjars/logutil.jar make-class $< $(@D) - -# Generate LogWrapper properties file by concatening resource files -$(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/LogStrings.properties: \ - $(CORBA_OUTPUTDIR)/logwrappers/ActivationSystemException.resource \ - $(CORBA_OUTPUTDIR)/logwrappers/IORSystemException.resource \ - $(CORBA_OUTPUTDIR)/logwrappers/InterceptorsSystemException.resource \ - $(CORBA_OUTPUTDIR)/logwrappers/NamingSystemException.resource \ - $(CORBA_OUTPUTDIR)/logwrappers/OMGSystemException.resource \ - $(CORBA_OUTPUTDIR)/logwrappers/ORBUtilSystemException.resource \ - $(CORBA_OUTPUTDIR)/logwrappers/POASystemException.resource \ - $(CORBA_OUTPUTDIR)/logwrappers/UtilSystemException.resource - $(MKDIR) -p $(@D) - $(ECHO) $(LOG_INFO) Concatenating 8 resource files into $(@F) - $(CAT) $^ > $@ - -# The resources files are generated from lisp-like .mc files. -$(CORBA_OUTPUTDIR)/logwrappers/%SystemException.resource: $(CORBA_TOPDIR)/src/share/classes/com/sun/corba/se/spi/logging/data/%.mc $(CORBA_OUTPUTDIR)/btjars/logutil.jar - $(MKDIR) -p $(@D) - $(RM) -f $(@D)/_the_wrappers.d - $(ECHO) $(LOG_INFO) Generating resource file from $*.mc - $(JAVA) -jar $(CORBA_OUTPUTDIR)/btjars/logutil.jar make-resource $< $(@D) +all: compile-corba -$(CORBA_OUTPUTDIR)/logwrappers/_the_wrappers.d: $(CORBA_OUTPUTDIR)/btjars/logutil.jar \ - $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/ActivationSystemException.java \ - $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/IORSystemException.java \ - $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/InterceptorsSystemException.java \ - $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/NamingSystemException.java \ - $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/OMGSystemException.java \ - $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/ORBUtilSystemException.java \ - $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/POASystemException.java \ - $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/UtilSystemException.java \ - $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/LogStrings.properties - $(MKDIR) -p $(@D) - $(ECHO) LOGWRAPPERS_ARE_CREATED = yes > $@ - -# Trigger the generation of the logwrappers. After the logwrapper classes and -# resources have been created, then the makefile will restart and the newly -# created java files will become part of the build further along in the makefile. --include $(CORBA_OUTPUTDIR)/logwrappers/_the_wrappers.d - -ifeq ($(LOGWRAPPERS_ARE_CREATED), yes) - - $(eval $(call SetupIdlCompilation,BUILD_IDLS, \ - IDLJ := $(JAVA) -jar $(CORBA_OUTPUTDIR)/btjars/idlj.jar, \ - SRC := $(CORBA_TOPDIR)/src/share/classes, \ - BIN := $(CORBA_OUTPUTDIR)/gensrc, \ - EXCLUDES := com/sun/tools/corba/se/idl/% \ - org/omg/CORBA/% \ - com/sun/corba/se/GiopIDL/% \ - org/omg/PortableServer/corba.idl, \ - INCLUDES := %, \ - OLDIMPLBASES := com/sun/corba/se/PortableActivationIDL/activation.idl \ - com/sun/corba/se/spi/activation/activation.idl, \ - DELETES := DYNANYDELETEFILES org/omg/DynamicAny/*POA* org/omg/DynamicAny/*Holder* org/omg/DynamicAny/DynValueBoxHelper.java org/omg/DynamicAny/DynValueCommonHelper.java org/omg/DynamicAny/_DynValueCommonStub.java org/omg/DynamicAny/_DynValueBoxStub.java org/omg/DynamicAny/DynAnyPackage/TypeMismatchHolder.java org/omg/DynamicAny/DynAnyPackage/InvalidValueHolder.java org/omg/DynamicAny/DynAnyFactoryPackage/InconsistentTypeCodeHolder.java IOPDELETEFILES org/omg/IOP/BI_DIR_IIOP.java org/omg/IOP/ChainBypassCheck.java org/omg/IOP/ChainBypassInfo.java org/omg/IOP/FORWARDED_IDENTITY.java org/omg/IOP/INVOCATION_POLICIES.java org/omg/IOP/LogicalThreadId.java org/omg/IOP/SendingContextRunTime.java org/omg/IOP/UnknownExceptionInfo.java org/omg/IOP/TaggedComponentSeqHolder.java POAHELHOLFILES org/omg/PortableServer/CurrentPackage/NoContextHolder.java org/omg/PortableServer/ForwardRequestHolder.java org/omg/PortableServer/IdAssignmentPolicyValueHelper.java org/omg/PortableServer/IdAssignmentPolicyValueHolder.java org/omg/PortableServer/IdUniquenessPolicyValueHelper.java org/omg/PortableServer/IdUniquenessPolicyValueHolder.java org/omg/PortableServer/ImplicitActivationPolicyValueHelper.java org/omg/PortableServer/ImplicitActivationPolicyValueHolder.java org/omg/PortableServer/LifespanPolicyValueHelper.java org/omg/PortableServer/LifespanPolicyValueHolder.java org/omg/PortableServer/ServantRetentionPolicyValueHelper.java org/omg/PortableServer/ServantRetentionPolicyValueHolder.java org/omg/PortableServer/ObjectIdHelper.java org/omg/PortableServer/ObjectIdHolder.java org/omg/PortableServer/POAListHelper.java org/omg/PortableServer/POAListHolder.java org/omg/PortableServer/POAManagerPackage/AdapterInactiveHolder.java org/omg/PortableServer/POAManagerPackage/StateHelper.java org/omg/PortableServer/POAManagerPackage/StateHolder.java org/omg/PortableServer/POAPackage/AdapterAlreadyExistsHolder.java org/omg/PortableServer/POAPackage/AdapterNonExistentHolder.java org/omg/PortableServer/POAPackage/InvalidPolicyHolder.java org/omg/PortableServer/POAPackage/NoServantHolder.java org/omg/PortableServer/POAPackage/ObjectAlreadyActiveHolder.java org/omg/PortableServer/POAPackage/ObjectNotActiveHolder.java org/omg/PortableServer/POAPackage/ServantAlreadyActiveHolder.java org/omg/PortableServer/POAPackage/ServantNotActiveHolder.java org/omg/PortableServer/POAPackage/WrongAdapterHolder.java org/omg/PortableServer/POAPackage/WrongPolicyHolder.java org/omg/PortableServer/RequestProcessingPolicyValueHelper.java org/omg/PortableServer/RequestProcessingPolicyValueHolder.java org/omg/PortableServer/ServantActivatorHolder.java org/omg/PortableServer/ServantLocatorHolder.java org/omg/PortableServer/ThreadPolicyValueHelper.java org/omg/PortableServer/ThreadPolicyValueHolder.java PIHELHOLFILES org/omg/PortableInterceptor/ClientRequestInfoHelper.java org/omg/PortableInterceptor/ClientRequestInterceptorHelper.java org/omg/PortableInterceptor/IORInfoHelper.java org/omg/PortableInterceptor/IORInterceptorHelper.java org/omg/PortableInterceptor/InterceptorHelper.java org/omg/PortableInterceptor/ORBInitInfoHelper.java org/omg/PortableInterceptor/ORBInitializerHelper.java org/omg/PortableInterceptor/PolicyFactoryHelper.java org/omg/PortableInterceptor/ReplyStatusHelper.java org/omg/PortableInterceptor/RequestInfoHelper.java org/omg/PortableInterceptor/ServerRequestInfoHelper.java org/omg/PortableInterceptor/ServerRequestInterceptorHelper.java org/omg/PortableInterceptor/SlotIdHelper.java org/omg/PortableInterceptor/ClientRequestInfoHolder.java org/omg/PortableInterceptor/ClientRequestInterceptorHolder.java org/omg/PortableInterceptor/CurrentHolder.java org/omg/PortableInterceptor/ForwardRequestHolder.java org/omg/PortableInterceptor/IORInfoHolder.java org/omg/PortableInterceptor/IORInterceptorHolder.java org/omg/PortableInterceptor/InterceptorHolder.java org/omg/PortableInterceptor/InvalidSlotHolder.java org/omg/PortableInterceptor/ORBInitInfoHolder.java org/omg/PortableInterceptor/ORBInitializerHolder.java org/omg/PortableInterceptor/PolicyFactoryHolder.java org/omg/PortableInterceptor/RequestInfoHolder.java org/omg/PortableInterceptor/ServerRequestInfoHolder.java org/omg/PortableInterceptor/ServerRequestInterceptorHolder.java org/omg/PortableInterceptor/TaggedComponentSeqHolder.java org/omg/PortableInterceptor/ORBInitInfoPackage/DuplicateNameHolder.java org/omg/PortableInterceptor/ORBInitInfoPackage/InvalidNameHolder.java org/omg/IOP/CodecPackage/FormatMismatchHolder.java org/omg/IOP/CodecPackage/InvalidTypeForEncodingHolder.java org/omg/IOP/CodecPackage/TypeMismatchHolder.java org/omg/IOP/CodecHelper.java org/omg/IOP/EncodingFormatHelper.java org/omg/IOP/EncodingHelper.java org/omg/IOP/CodecFactoryPackage/UnknownEncodingHolder.java org/omg/IOP/CodecFactoryHolder.java org/omg/IOP/CodecHolder.java org/omg/IOP/EncodingHolder.java org/omg/IOP/TaggedComponentSeqHelper.java org/omg/Dynamic/ContextListHelper.java org/omg/Dynamic/ExceptionListHelper.java org/omg/Dynamic/ParameterHolder.java org/omg/Dynamic/ParameterListHolder.java org/omg/Dynamic/ExceptionListHolder.java org/omg/Dynamic/ParameterHelper.java org/omg/Dynamic/ParameterListHelper.java org/omg/Dynamic/RequestContextHelper.java CORBAX org/omg/CORBA/OctetSeqHelper.java org/omg/CORBA/OctetSeqHolder.java org/omg/CORBA/PolicyError.java org/omg/CORBA/RepositoryIdHelper.java)) - - $(BUILD_IDLS): $(CORBA_OUTPUTDIR)/btjars/idlj.jar - - $(CORBA_OUTPUTDIR)/gensrc/_the_idls.d: $(BUILD_IDLS) $(CORBA_OUTPUTDIR)/btjars/idlj.jar - $(MKDIR) -p $(@D) - $(ECHO) IDLS_ARE_CREATED = yes > $@ - - -include $(CORBA_OUTPUTDIR)/gensrc/_the_idls.d - - ifeq ($(IDLS_ARE_CREATED), yes) - - $(eval $(call SetupJavaCompilation,BUILD_CORBA, \ - SETUP := GENERATE_NEWBYTECODE, \ - SRC := $(CORBA_TOPDIR)/src/share/classes $(CORBA_OUTPUTDIR)/gensrc $(CORBA_OUTPUTDIR)/logwrappers, \ - EXCLUDES := com/sun/corba/se/PortableActivationIDL \ - com/sun/tools/corba/se/logutil, \ - EXCLUDE_FILES := com/sun/corba/se/impl/presentation/rmi/JNDIStateFactoryImpl.java \ - com/sun/corba/se/spi/presentation/rmi/StubWrapper.java \ - com/sun/org/omg/CORBA/IDLTypeOperations.java \ - com/sun/org/omg/CORBA/IRObjectOperations.java \ - org/omg/PortableInterceptor/UNKNOWN.java \ - com/sun/tools/corba/se/idl/ResourceBundleUtil.java \ - com/sun/corba/se/impl/presentation/rmi/jndi.properties, \ - COPY := .prp LogStrings.properties, \ - BIN := $(CORBA_OUTPUTDIR)/classes)) - - $(eval $(call SetupJavaCompilation,BUILD_BOOTSTRAP_CORBA, \ - SETUP := GENERATE_OLDBYTECODE, \ - SRC := $(BUILD_CORBA_SRC), \ - EXCLUDES := $(BUILD_CORBA_EXCLUDES), \ - EXCLUDE_FILES := $(BUILD_CORBA_EXCLUDE_FILES), \ - COPY := $(BUILD_CORBA_COPY), \ - BIN := $(CORBA_OUTPUTDIR)/btclasses/corba_classes, \ - JAR := $(CORBA_OUTPUTDIR)/btjars/btcorba.jar)) - - # Separate src.zip call to include sources that were excluded in the build to - # mimic behavior in old build system. - $(eval $(call SetupZipArchive,ARCHIVE_BUILD_CORBA, \ - SRC := $(CORBA_TOPDIR)/src/share/classes $(CORBA_OUTPUTDIR)/gensrc $(CORBA_OUTPUTDIR)/logwrappers, \ - ZIP := $(CORBA_OUTPUTDIR)/dist/lib/src.zip)) - - $(BUILD_CORBA): $(BUILD_IDLS) $(LOGWRAPPER_DEPENDENCIES) - - # Run stripproperties on all sunorb resource files. - STRIP_PROP_SRC_FILES := $(shell $(FIND) $(CORBA_TOPDIR)/src/share/classes -name "sunorb*.properties") - STRIP_PROP_FILES := $(patsubst $(CORBA_TOPDIR)/src/share/classes/%, $(CORBA_OUTPUTDIR)/classes/%, \ - $(STRIP_PROP_SRC_FILES)) - # Simple delivery of zh_HK properties files just copies zh_TW properties files - STRIP_PROP_FILES += $(patsubst $(CORBA_TOPDIR)/src/share/classes/%_zh_TW.properties, \ - $(CORBA_OUTPUTDIR)/classes/%_zh_HK.properties, \ - $(shell $(FIND) $(CORBA_TOPDIR)/src/share/classes -name "sunorb_zh_TW.properties")) - STRIP_PROP_SRC_FILES += $(shell $(FIND) $(CORBA_TOPDIR)/src/share/classes -name "sunorb_zh_TW.properties") - STRIP_PROP_CMDLINE := $(subst _SPACE_, $(SPACE), \ - $(join $(addprefix -clean_SPACE_, $(STRIP_PROP_SRC_FILES)), \ - $(addprefix _SPACE_, $(STRIP_PROP_FILES)))) - - $(CORBA_OUTPUTDIR)/_the.stripped_properties: $(STRIP_PROP_SRC_FILES) \ - $(CORBA_OUTPUTDIR)/btjars/stripproperties.jar - $(MKDIR) -p $(sort $(dir $(STRIP_PROP_FILES))) - $(call ListPathsSafely,STRIP_PROP_CMDLINE,\n, >> $(CORBA_OUTPUTDIR)/_the.strip_prop.cmdline) - $(JAVA) -jar $(CORBA_OUTPUTDIR)/btjars/stripproperties.jar \ - @$(CORBA_OUTPUTDIR)/_the.strip_prop.cmdline - $(TOUCH) $@ - - $(eval $(call SetupArchive,ARCHIVE_CORBA, \ - $(BUILD_CORBA) $(CORBA_OUTPUTDIR)/_the.stripped_properties, \ - SRCS := $(CORBA_OUTPUTDIR)/classes, \ - SUFFIXES := .class .prp .properties, \ - JAR := $(CORBA_OUTPUTDIR)/dist/lib/classes.jar)) - - # The created classes.jar now contains Corba compiled to run on the target JDK - # and is ready for inclusion in jdk rt.jar. - - # The created src.zip now contains .java and .properties files used to create the classes in classes.jar - # and is ready for inclusion into the jdk src.zip - - BIN_FILES := $(CORBA_TOPDIR)/src/share/classes/com/sun/tools/corba/se/idl/orb.idl \ - $(CORBA_TOPDIR)/src/share/classes/com/sun/tools/corba/se/idl/ir.idl - - $(CORBA_OUTPUTDIR)/dist/lib/bin.zip: $(BIN_FILES) $(CORBA_OUTPUTDIR)/dist/lib/classes.jar - $(MKDIR) -p $(CORBA_OUTPUTDIR)/dist/lib - $(MKDIR) -p $(CORBA_OUTPUTDIR)/lib - $(RM) -f $@ - $(ECHO) Creating `basename $@` - $(CP) $(BIN_FILES) $(CORBA_OUTPUTDIR)/lib - $(CHMOD) ug+w $(CORBA_OUTPUTDIR)/lib/* - (cd $(CORBA_OUTPUTDIR); $(ZIP) -q $@ lib/orb.idl lib/ir.idl) - - # The created bin.zip now contains the corba specific binaries: orb.idl, ir.idl - - all: $(CORBA_OUTPUTDIR)/btjars/stripproperties.jar \ - $(CORBA_OUTPUTDIR)/btjars/idlj.jar \ - $(CORBA_OUTPUTDIR)/btjars/logutil.jar \ - $(CORBA_OUTPUTDIR)/btjars/btcorba.jar \ - $(CORBA_OUTPUTDIR)/dist/lib/classes.jar \ - $(CORBA_OUTPUTDIR)/dist/lib/src.zip \ - $(CORBA_OUTPUTDIR)/dist/lib/bin.zip - endif -endif - -clean: - $(RM) -rf $(CORBA_OUTPUTDIR) - -.PHONY: default all clean clobber +.PHONY: default all +.PHONY: gensrc-corba compile-corba diff --git a/corba/make/CommonCorba.gmk b/corba/make/CommonCorba.gmk new file mode 100644 index 00000000000..11b69b6f715 --- /dev/null +++ b/corba/make/CommonCorba.gmk @@ -0,0 +1,53 @@ +# +# Copyright (c) 2014, 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. +# + +################################################################################ +# The Corba sources are old and generates a LOT of warnings. +# Disable these using Xlint, until someone cares to fix them. +DISABLE_CORBA_WARNINGS := -Xlint:all,-deprecation,-unchecked,-serial,-fallthrough,-cast,-rawtypes,-static,-dep-ann + +# The "generate old bytecode" javac setup uses the new compiler to compile for the +# boot jdk to generate tools that need to be run with the boot jdk. +# Thus we force the target bytecode to the boot jdk bytecode. +$(eval $(call SetupJavaCompiler,GENERATE_OLDBYTECODE, \ + JVM := $(JAVA), \ + JAVAC := $(NEW_JAVAC), \ + FLAGS := $(BOOT_JDK_SOURCETARGET) \ + -bootclasspath "$(BOOT_RTJAR)$(PATH_SEP)$(BOOT_TOOLSJAR)" \ + $(DISABLE_CORBA_WARNINGS), \ + SERVER_DIR := $(SJAVAC_SERVER_DIR), \ + SERVER_JVM := $(SJAVAC_SERVER_JAVA))) + +# The "generate new bytecode" uses the new compiler to generate bytecode +# for the new jdk that is being built. The code compiled by this setup +# cannot necessarily be run with the boot jdk. +$(eval $(call SetupJavaCompiler,GENERATE_NEWBYTECODE, \ + JVM := $(JAVA), \ + JAVAC := $(NEW_JAVAC), \ + FLAGS := -cp $(BOOT_TOOLSJAR) -XDignore.symbol.file=true $(DISABLE_CORBA_WARNINGS), \ + SERVER_DIR := $(SJAVAC_SERVER_DIR), \ + SERVER_JVM := $(SJAVAC_SERVER_JAVA))) + +################################################################################ diff --git a/corba/make/CompileCorba.gmk b/corba/make/CompileCorba.gmk new file mode 100644 index 00000000000..16e0c4e679d --- /dev/null +++ b/corba/make/CompileCorba.gmk @@ -0,0 +1,87 @@ +# +# Copyright (c) 2014, 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. +# + +# This must be the first rule +default: all + +include $(SPEC) +include MakeBase.gmk +include JavaCompilation.gmk + +include CommonCorba.gmk + +################################################################################ + +$(eval $(call SetupJavaCompilation,BUILD_CORBA, \ + SETUP := GENERATE_NEWBYTECODE, \ + SRC := $(CORBA_TOPDIR)/src/share/classes $(CORBA_OUTPUTDIR)/gensrc, \ + EXCLUDES := com/sun/corba/se/PortableActivationIDL \ + com/sun/tools/corba/se/logutil, \ + EXCLUDE_FILES := com/sun/corba/se/impl/presentation/rmi/JNDIStateFactoryImpl.java \ + com/sun/corba/se/spi/presentation/rmi/StubWrapper.java \ + com/sun/org/omg/CORBA/IDLTypeOperations.java \ + com/sun/org/omg/CORBA/IRObjectOperations.java \ + org/omg/PortableInterceptor/UNKNOWN.java \ + com/sun/tools/corba/se/idl/ResourceBundleUtil.java \ + com/sun/corba/se/impl/presentation/rmi/jndi.properties, \ + COPY := .prp LogStrings.properties, \ + BIN := $(CORBA_OUTPUTDIR)/classes, \ + JAR := $(CORBA_OUTPUTDIR)/dist/lib/classes.jar)) + +$(eval $(call SetupJavaCompilation,BUILD_INTERIM_CORBA, \ + SETUP := GENERATE_OLDBYTECODE, \ + SRC := $(BUILD_CORBA_SRC), \ + EXCLUDES := $(BUILD_CORBA_EXCLUDES), \ + EXCLUDE_FILES := $(BUILD_CORBA_EXCLUDE_FILES), \ + COPY := $(BUILD_CORBA_COPY), \ + BIN := $(CORBA_OUTPUTDIR)/interim_classes, \ + JAR := $(INTERIM_CORBA_JAR))) + +# Separate src.zip call to include sources that were excluded in the build to +# mimic behavior in old build system. +$(eval $(call SetupZipArchive,ARCHIVE_CORBA_SRC, \ + SRC := $(CORBA_TOPDIR)/src/share/classes $(CORBA_OUTPUTDIR)/gensrc, \ + ZIP := $(CORBA_OUTPUTDIR)/dist/lib/src.zip)) + JAR := $(CORBA_OUTPUTDIR)/dist/lib/classes.jar)) + +################################################################################ +# Create bin.zip containing the corba specific binaries: orb.idl, ir.idl +BIN_FILES := $(CORBA_TOPDIR)/src/share/classes/com/sun/tools/corba/se/idl/orb.idl \ + $(CORBA_TOPDIR)/src/share/classes/com/sun/tools/corba/se/idl/ir.idl + +$(CORBA_OUTPUTDIR)/dist/lib/bin.zip: $(BIN_FILES) + $(MKDIR) -p $(CORBA_OUTPUTDIR)/dist/lib + $(MKDIR) -p $(CORBA_OUTPUTDIR)/lib + $(RM) -f $@ + $(ECHO) Creating `basename $@` + $(CP) $(BIN_FILES) $(CORBA_OUTPUTDIR)/lib + $(CHMOD) ug+w $(CORBA_OUTPUTDIR)/lib/* + (cd $(CORBA_OUTPUTDIR); $(ZIP) -q $@ lib/orb.idl lib/ir.idl) + +################################################################################ + + +all: $(BUILD_CORBA) $(BUILD_INTERIM_CORBA) $(ARCHIVE_CORBA_SRC) \ + $(CORBA_OUTPUTDIR)/dist/lib/bin.zip diff --git a/corba/make/GensrcCorba.gmk b/corba/make/GensrcCorba.gmk new file mode 100644 index 00000000000..61030ed5af7 --- /dev/null +++ b/corba/make/GensrcCorba.gmk @@ -0,0 +1,153 @@ +# +# Copyright (c) 2014, 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. +# + +default: all + +include $(SPEC) +include MakeBase.gmk +include JavaCompilation.gmk +include IdlCompilation.gmk + +include CommonCorba.gmk + +################################################################################ + +$(eval $(call SetupJavaCompilation,BUILD_STRIPPROP, \ + SETUP := GENERATE_OLDBYTECODE, \ + SRC := $(CORBA_TOPDIR)/make/tools/src, \ + BIN := $(CORBA_OUTPUTDIR)/stripprop_classes)) + +TOOL_STRIPPROP_CMD := $(JAVA) -cp $(CORBA_OUTPUTDIR)/stripprop_classes \ + build.tools.stripproperties.StripPropertiesCorba + +$(eval $(call SetupJavaCompilation,BUILD_IDLJ, \ + SETUP := GENERATE_OLDBYTECODE, \ + SRC := $(CORBA_TOPDIR)/src/share/classes, \ + BIN := $(CORBA_OUTPUTDIR)/idlj_classes, \ + COPY := .prp, \ + INCLUDES := com/sun/tools/corba/se/idl, \ + EXCLUDE_FILES := ResourceBundleUtil.java)) + +TOOL_IDLJ_CMD := $(JAVA) -cp $(CORBA_OUTPUTDIR)/idlj_classes \ + com.sun.tools.corba.se.idl.toJavaPortable.Compile + +$(eval $(call SetupJavaCompilation,BUILD_LOGUTIL, \ + SETUP := GENERATE_OLDBYTECODE, \ + SRC := $(CORBA_TOPDIR)/src/share/classes, \ + BIN := $(CORBA_OUTPUTDIR)/logutil_classes, \ + INCLUDES := com/sun/tools/corba/se/logutil)) + +TOOL_LOGUTIL_CMD := $(JAVA) -cp $(CORBA_OUTPUTDIR)/logutil_classes \ + com.sun.tools.corba.se.logutil.MC + +################################################################################ + +# Generate LogWrapper classes +$(CORBA_OUTPUTDIR)/gensrc/com/sun/corba/se/impl/logging/%SystemException.java: \ + $(CORBA_TOPDIR)/src/share/classes/com/sun/corba/se/spi/logging/data/%.mc \ + $(BUILD_LOGUTIL) + $(MKDIR) -p $(@D) + $(RM) -f $(@D)/_the_wrappers.d + $(ECHO) $(LOG_INFO) Generating class file from $*.mc + $(TOOL_LOGUTIL_CMD) make-class $< $(@D) + +# Generate LogWrapper properties file by concatening resource files +$(CORBA_OUTPUTDIR)/gensrc/com/sun/corba/se/impl/logging/LogStrings.properties: \ + $(CORBA_OUTPUTDIR)/logwrappers/ActivationSystemException.resource \ + $(CORBA_OUTPUTDIR)/logwrappers/IORSystemException.resource \ + $(CORBA_OUTPUTDIR)/logwrappers/InterceptorsSystemException.resource \ + $(CORBA_OUTPUTDIR)/logwrappers/NamingSystemException.resource \ + $(CORBA_OUTPUTDIR)/logwrappers/OMGSystemException.resource \ + $(CORBA_OUTPUTDIR)/logwrappers/ORBUtilSystemException.resource \ + $(CORBA_OUTPUTDIR)/logwrappers/POASystemException.resource \ + $(CORBA_OUTPUTDIR)/logwrappers/UtilSystemException.resource + $(MKDIR) -p $(@D) + $(ECHO) $(LOG_INFO) Concatenating 8 resource files into $(@F) + $(CAT) $^ > $@ + +# The resources files are generated from lisp-like .mc files. +$(CORBA_OUTPUTDIR)/logwrappers/%SystemException.resource: \ + $(CORBA_TOPDIR)/src/share/classes/com/sun/corba/se/spi/logging/data/%.mc \ + $(BUILD_LOGUTIL) + $(MKDIR) -p $(@D) + $(RM) -f $(@D)/_the_wrappers.d + $(ECHO) $(LOG_INFO) Generating resource file from $*.mc + $(TOOL_LOGUTIL_CMD) make-resource $< $(@D) + + +LOGWRAPPER_TARGETS := \ + $(CORBA_OUTPUTDIR)/gensrc/com/sun/corba/se/impl/logging/ActivationSystemException.java \ + $(CORBA_OUTPUTDIR)/gensrc/com/sun/corba/se/impl/logging/IORSystemException.java \ + $(CORBA_OUTPUTDIR)/gensrc/com/sun/corba/se/impl/logging/InterceptorsSystemException.java \ + $(CORBA_OUTPUTDIR)/gensrc/com/sun/corba/se/impl/logging/NamingSystemException.java \ + $(CORBA_OUTPUTDIR)/gensrc/com/sun/corba/se/impl/logging/OMGSystemException.java \ + $(CORBA_OUTPUTDIR)/gensrc/com/sun/corba/se/impl/logging/ORBUtilSystemException.java \ + $(CORBA_OUTPUTDIR)/gensrc/com/sun/corba/se/impl/logging/POASystemException.java \ + $(CORBA_OUTPUTDIR)/gensrc/com/sun/corba/se/impl/logging/UtilSystemException.java \ + $(CORBA_OUTPUTDIR)/gensrc/com/sun/corba/se/impl/logging/LogStrings.properties + +################################################################################ +# Build the IDLs. + +$(eval $(call SetupIdlCompilation,BUILD_IDLS, \ + IDLJ := $(TOOL_IDLJ_CMD), \ + SRC := $(CORBA_TOPDIR)/src/share/classes, \ + BIN := $(CORBA_OUTPUTDIR)/gensrc, \ + EXCLUDES := com/sun/tools/corba/se/idl/% \ + org/omg/CORBA/% \ + com/sun/corba/se/GiopIDL/% \ + org/omg/PortableServer/corba.idl, \ + INCLUDES := %, \ + OLDIMPLBASES := com/sun/corba/se/PortableActivationIDL/activation.idl \ + com/sun/corba/se/spi/activation/activation.idl, \ + DELETES := DYNANYDELETEFILES org/omg/DynamicAny/*POA* org/omg/DynamicAny/*Holder* org/omg/DynamicAny/DynValueBoxHelper.java org/omg/DynamicAny/DynValueCommonHelper.java org/omg/DynamicAny/_DynValueCommonStub.java org/omg/DynamicAny/_DynValueBoxStub.java org/omg/DynamicAny/DynAnyPackage/TypeMismatchHolder.java org/omg/DynamicAny/DynAnyPackage/InvalidValueHolder.java org/omg/DynamicAny/DynAnyFactoryPackage/InconsistentTypeCodeHolder.java IOPDELETEFILES org/omg/IOP/BI_DIR_IIOP.java org/omg/IOP/ChainBypassCheck.java org/omg/IOP/ChainBypassInfo.java org/omg/IOP/FORWARDED_IDENTITY.java org/omg/IOP/INVOCATION_POLICIES.java org/omg/IOP/LogicalThreadId.java org/omg/IOP/SendingContextRunTime.java org/omg/IOP/UnknownExceptionInfo.java org/omg/IOP/TaggedComponentSeqHolder.java POAHELHOLFILES org/omg/PortableServer/CurrentPackage/NoContextHolder.java org/omg/PortableServer/ForwardRequestHolder.java org/omg/PortableServer/IdAssignmentPolicyValueHelper.java org/omg/PortableServer/IdAssignmentPolicyValueHolder.java org/omg/PortableServer/IdUniquenessPolicyValueHelper.java org/omg/PortableServer/IdUniquenessPolicyValueHolder.java org/omg/PortableServer/ImplicitActivationPolicyValueHelper.java org/omg/PortableServer/ImplicitActivationPolicyValueHolder.java org/omg/PortableServer/LifespanPolicyValueHelper.java org/omg/PortableServer/LifespanPolicyValueHolder.java org/omg/PortableServer/ServantRetentionPolicyValueHelper.java org/omg/PortableServer/ServantRetentionPolicyValueHolder.java org/omg/PortableServer/ObjectIdHelper.java org/omg/PortableServer/ObjectIdHolder.java org/omg/PortableServer/POAListHelper.java org/omg/PortableServer/POAListHolder.java org/omg/PortableServer/POAManagerPackage/AdapterInactiveHolder.java org/omg/PortableServer/POAManagerPackage/StateHelper.java org/omg/PortableServer/POAManagerPackage/StateHolder.java org/omg/PortableServer/POAPackage/AdapterAlreadyExistsHolder.java org/omg/PortableServer/POAPackage/AdapterNonExistentHolder.java org/omg/PortableServer/POAPackage/InvalidPolicyHolder.java org/omg/PortableServer/POAPackage/NoServantHolder.java org/omg/PortableServer/POAPackage/ObjectAlreadyActiveHolder.java org/omg/PortableServer/POAPackage/ObjectNotActiveHolder.java org/omg/PortableServer/POAPackage/ServantAlreadyActiveHolder.java org/omg/PortableServer/POAPackage/ServantNotActiveHolder.java org/omg/PortableServer/POAPackage/WrongAdapterHolder.java org/omg/PortableServer/POAPackage/WrongPolicyHolder.java org/omg/PortableServer/RequestProcessingPolicyValueHelper.java org/omg/PortableServer/RequestProcessingPolicyValueHolder.java org/omg/PortableServer/ServantActivatorHolder.java org/omg/PortableServer/ServantLocatorHolder.java org/omg/PortableServer/ThreadPolicyValueHelper.java org/omg/PortableServer/ThreadPolicyValueHolder.java PIHELHOLFILES org/omg/PortableInterceptor/ClientRequestInfoHelper.java org/omg/PortableInterceptor/ClientRequestInterceptorHelper.java org/omg/PortableInterceptor/IORInfoHelper.java org/omg/PortableInterceptor/IORInterceptorHelper.java org/omg/PortableInterceptor/InterceptorHelper.java org/omg/PortableInterceptor/ORBInitInfoHelper.java org/omg/PortableInterceptor/ORBInitializerHelper.java org/omg/PortableInterceptor/PolicyFactoryHelper.java org/omg/PortableInterceptor/ReplyStatusHelper.java org/omg/PortableInterceptor/RequestInfoHelper.java org/omg/PortableInterceptor/ServerRequestInfoHelper.java org/omg/PortableInterceptor/ServerRequestInterceptorHelper.java org/omg/PortableInterceptor/SlotIdHelper.java org/omg/PortableInterceptor/ClientRequestInfoHolder.java org/omg/PortableInterceptor/ClientRequestInterceptorHolder.java org/omg/PortableInterceptor/CurrentHolder.java org/omg/PortableInterceptor/ForwardRequestHolder.java org/omg/PortableInterceptor/IORInfoHolder.java org/omg/PortableInterceptor/IORInterceptorHolder.java org/omg/PortableInterceptor/InterceptorHolder.java org/omg/PortableInterceptor/InvalidSlotHolder.java org/omg/PortableInterceptor/ORBInitInfoHolder.java org/omg/PortableInterceptor/ORBInitializerHolder.java org/omg/PortableInterceptor/PolicyFactoryHolder.java org/omg/PortableInterceptor/RequestInfoHolder.java org/omg/PortableInterceptor/ServerRequestInfoHolder.java org/omg/PortableInterceptor/ServerRequestInterceptorHolder.java org/omg/PortableInterceptor/TaggedComponentSeqHolder.java org/omg/PortableInterceptor/ORBInitInfoPackage/DuplicateNameHolder.java org/omg/PortableInterceptor/ORBInitInfoPackage/InvalidNameHolder.java org/omg/IOP/CodecPackage/FormatMismatchHolder.java org/omg/IOP/CodecPackage/InvalidTypeForEncodingHolder.java org/omg/IOP/CodecPackage/TypeMismatchHolder.java org/omg/IOP/CodecHelper.java org/omg/IOP/EncodingFormatHelper.java org/omg/IOP/EncodingHelper.java org/omg/IOP/CodecFactoryPackage/UnknownEncodingHolder.java org/omg/IOP/CodecFactoryHolder.java org/omg/IOP/CodecHolder.java org/omg/IOP/EncodingHolder.java org/omg/IOP/TaggedComponentSeqHelper.java org/omg/Dynamic/ContextListHelper.java org/omg/Dynamic/ExceptionListHelper.java org/omg/Dynamic/ParameterHolder.java org/omg/Dynamic/ParameterListHolder.java org/omg/Dynamic/ExceptionListHolder.java org/omg/Dynamic/ParameterHelper.java org/omg/Dynamic/ParameterListHelper.java org/omg/Dynamic/RequestContextHelper.java CORBAX org/omg/CORBA/OctetSeqHelper.java org/omg/CORBA/OctetSeqHolder.java org/omg/CORBA/PolicyError.java org/omg/CORBA/RepositoryIdHelper.java)) + +$(BUILD_IDLS): $(BUILD_IDLJ) + +################################################################################ +# Run stripproperties on all sunorb resource files. + +STRIP_PROP_SRC_FILES := $(shell $(FIND) $(CORBA_TOPDIR)/src/share/classes -name "sunorb*.properties") +STRIP_PROP_FILES := $(patsubst $(CORBA_TOPDIR)/src/share/classes/%, $(CORBA_OUTPUTDIR)/classes/%, \ + $(STRIP_PROP_SRC_FILES)) +# Simple delivery of zh_HK properties files just copies zh_TW properties files +STRIP_PROP_SRC_FILE_ZH_TW := $(shell $(FIND) $(CORBA_TOPDIR)/src/share/classes -name "sunorb_zh_TW.properties") +STRIP_PROP_SRC_FILES += $(STRIP_PROP_SRC_FILE_ZH_TW) +STRIP_PROP_FILES += $(patsubst $(CORBA_TOPDIR)/src/share/classes/%_zh_TW.properties, \ + $(CORBA_OUTPUTDIR)/classes/%_zh_HK.properties, $(STRIP_PROP_SRC_FILE_ZH_TW)) +STRIP_PROP_CMDLINE := $(subst _SPACE_, $(SPACE), \ + $(join $(addprefix -clean_SPACE_, $(STRIP_PROP_SRC_FILES)), \ + $(addprefix _SPACE_, $(STRIP_PROP_FILES)))) + +$(CORBA_OUTPUTDIR)/_the.stripped_properties: $(STRIP_PROP_SRC_FILES) \ + $(BUILD_STRIPPROP) + $(MKDIR) -p $(sort $(dir $(STRIP_PROP_FILES))) + $(call ListPathsSafely,STRIP_PROP_CMDLINE,\n, >> $(CORBA_OUTPUTDIR)/_the.strip_prop.cmdline) + $(TOOL_STRIPPROP_CMD) @$(CORBA_OUTPUTDIR)/_the.strip_prop.cmdline + $(TOUCH) $@ + +################################################################################ + +all: $(BUILD_IDLS) $(CORBA_OUTPUTDIR)/_the.stripped_properties $(LOGWRAPPER_TARGETS) diff --git a/hotspot/.hgtags b/hotspot/.hgtags index 7b9d7597d6e..9b4aa750ec2 100644 --- a/hotspot/.hgtags +++ b/hotspot/.hgtags @@ -404,3 +404,4 @@ ce42d815dd2130250acf6132b51b624001638f0d jdk8-b119 fca262db9c4309f99d2f5542ab0780e45c2f1578 jdk8-b120 ce2d7e46f3c7e41241f3b407705a4071323a11ab jdk9-b00 050a626a88951140df874f7b163e304d07b6c296 jdk9-b01 +b188446de75bda5fc52d102cddf242c3ef5ecbdf jdk9-b02 diff --git a/hotspot/THIRD_PARTY_README b/hotspot/THIRD_PARTY_README index ee5463a922e..a93b35b994c 100644 --- a/hotspot/THIRD_PARTY_README +++ b/hotspot/THIRD_PARTY_README @@ -2,11 +2,12 @@ DO NOT TRANSLATE OR LOCALIZE. ----------------------------- %% This notice is provided with respect to ASM Bytecode Manipulation -Framework v3.1, which is included with JRE 7, JDK 7, and OpenJDK 7. +Framework v5.0, which may be included with JRE 8, and JDK 8, and +OpenJDK 8. --- begin of LICENSE --- -Copyright (c) 2000-2005 INRIA, France Telecom +Copyright (c) 2000-2011 France Télécom All rights reserved. Redistribution and use in source and binary forms, with or without @@ -40,8 +41,41 @@ THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- -%% This notice is provided with respect to CodeViewer 1.0, which is included -with JDK 7. +%% This notice is provided with respect to BSDiff v4.3, which may be +included with JRE 8, JDK 8, and OpenJDK 8. + +--- begin of LICENSE --- + +Copyright 2003-2005 Colin Percival +All rights reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted providing that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +--- end of LICENSE --- + +------------------------------------------------------------------------------- + +%% This notice is provided with respect to CodeViewer 1.0, which may be +included with JDK 8. --- begin of LICENSE --- @@ -81,8 +115,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ------------------------------------------------------------------------------- -%% This notice is provided with respect to Cryptix AES 3.2.0, which is -included with JRE 7, JDK 7, and OpenJDK 7. +%% This notice is provided with respect to Cryptix AES 3.2.0, which may be +included with JRE 8, JDK 8, and OpenJDK 8. --- begin of LICENSE --- @@ -121,7 +155,7 @@ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------- %% This notice is provided with respect to CUP Parser Generator for -Java 0.10k, which is included with JRE 7, JDK 7, and OpenJDK 7. +Java 0.10k, which may be included with JRE 8, JDK 8, and OpenJDK 8. --- begin of LICENSE --- @@ -148,7 +182,7 @@ performance of this software. ------------------------------------------------------------------------------- %% This notice is provided with respect to Document Object Model (DOM) Level 2 -& 3, which is included with JRE 7, JDK 7, and OpenJDK 7. +& 3, which may be included with JRE 8, JDK 8, and OpenJDK 8. --- begin of LICENSE --- @@ -212,19 +246,52 @@ site-policy@w3.org. ------------------------------------------------------------------------------- +%% This notice is provided with respect to Dynalink v0.5, which may be +included with JRE 8, JDK 8, and OpenJDK 8. + +--- begin of LICENSE --- + +Copyright (c) 2009-2013, Attila Szegedi + +All rights reserved.Redistribution and use in source and binary forms, with or +without modification, are permitted provided that the following conditions are +met:* Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. * Redistributions in +binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other +materials provided with the distribution. * Neither the name of Attila +Szegedi nor the names of its contributors may be used to endorse or promote +products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THEPOSSIBILITY OF SUCH DAMAGE. + +--- end of LICENSE --- + +------------------------------------------------------------------------------- + %% This notice is provided with respect to Elliptic Curve Cryptography, which -is included with JRE 7, JDK 7, and OpenJDK 7. +may be included with JRE 8, JDK 8, and OpenJDK 8. You are receiving a copy of the Elliptic Curve Cryptography library in source -form with the JDK 7 source distribution and object code in the JRE 7 & JDK 7 -runtime. +form with the JDK 8 and OpenJDK 8 source distributions, and as object code in +the JRE 8 & JDK 8 runtimes. + +In the case of the JRE 8 & JDK 8 runtimes, the terms of the Oracle license do +NOT apply to the Elliptic Curve Cryptography library; it is licensed under the +following license, separately from Oracle's JDK & JRE. If you do not wish to +install the Elliptic Curve Cryptography library, you may delete the library +named libsunec.so (on Solaris and Linux systems) or sunec.dll (on Windows +systems) from the JRE bin directory reserved for native libraries. -The terms of the Oracle license do NOT apply to the Elliptic Curve -Cryptography library program; it is licensed under the following license, -separately from the Oracle programs you receive. If you do not wish to install -this program, you may delete the library named libsunec.so (on Solaris and -Linux systems) or sunec.dll (on Windows systems) from the JRE bin directory -reserved for native libraries. --- begin of LICENSE --- @@ -735,13 +802,138 @@ That's all there is to it! ------------------------------------------------------------------------------- -%% This notice is provided with respect to FontConfig 2.5, which is -included with JRE 7, JDK 7, and OpenJDK 7 source distributions on +%% This notice is provided with respect to ECMAScript Language +Specification ECMA-262 Edition 5.1 which may be included with +JRE 8, JDK 8, and OpenJDK 8. + +--- begin of LICENSE --- + +Copyright notice +Copyright © 2011 Ecma International +Ecma International +Rue du Rhone 114 +CH-1204 Geneva +Tel: +41 22 849 6000 +Fax: +41 22 849 6001 +Web: http://www.ecma-international.org + +This document and possible translations of it may be copied and furnished to +others, and derivative works that comment on or otherwise explain it or assist +in its implementation may be prepared, copied, published, and distributed, in +whole or in part, without restriction of any kind, provided that the above +copyright notice and this section are included on all such copies and derivative +works. However, this document itself may not be modified in any way, including +by removing the copyright notice or references to Ecma International, except as +needed for the purpose of developing any document or deliverable produced by +Ecma International (in which case the rules applied to copyrights must be +followed) or as required to translate it into languages other than English. The +limited permissions granted above are perpetual and will not be revoked by Ecma +International or its successors or assigns. This document and the information +contained herein is provided on an "AS IS" basis and ECMA INTERNATIONAL +DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY +WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY OWNERSHIP +RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR +PURPOSE." Software License + +All Software contained in this document ("Software)" is protected by copyright +and is being made available under the "BSD License", included below. This +Software may be subject to third party rights (rights from parties other than +Ecma International), including patent rights, and no licenses under such third +party rights are granted under this license even if the third party concerned is +a member of Ecma International. SEE THE ECMA CODE OF CONDUCT IN PATENT MATTERS +AVAILABLE AT http://www.ecma-international.org/memento/codeofconduct.htm FOR +INFORMATION REGARDING THE LICENSING OF PATENT CLAIMS THAT ARE REQUIRED TO +IMPLEMENT ECMA INTERNATIONAL STANDARDS*. Redistribution and use in source and +binary forms, with or without modification, are permitted provided that the +following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation and/or +other materials provided with the distribution. + +3. Neither the name of the authors nor Ecma International may be used to endorse +or promote products derived from this software without specific prior written +permission. + +THIS SOFTWARE IS PROVIDED BY THE ECMA INTERNATIONAL "AS IS" AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT +SHALL ECMA INTERNATIONAL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +--- end of LICENSE --- + +%% This notice is provided with respect to Dynalink library which is included +with the Nashorn technology. + +--- begin of LICENSE --- +Copyright (c) 2009-2013, Attila Szegedi + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +* Neither the name of the copyright holder nor the names of + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--- end of LICENSE --- + +%% This notice is provided with respect to Joni library which is included +with the Nashorn technology. + +--- begin of LICENSE --- +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +--- end of LICENSE --- + +------------------------------------------------------------------------------- + +%% This notice is provided with respect to FontConfig 2.5, which may be +included with JRE 8, JDK 8, and OpenJDK 8 source distributions on Linux and Solaris. --- begin of LICENSE --- -Copyright © 2001,2003 Keith Packard +Copyright © 2001,2003 Keith Packard Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the @@ -765,7 +957,7 @@ CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ------------------------------------------------------------------------------- %% This notice is provided with respect to IAIK PKCS#11 Wrapper, -which is included with JRE 7, JDK 7, and OpenJDK 7. +which may be included with JRE 8, JDK 8, and OpenJDK 8. --- begin of LICENSE --- @@ -816,7 +1008,7 @@ POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------- %% This notice is provided with respect to ICU4C 4.0.1 and ICU4J 4.4, which -is included with JRE 7, JDK 7, and OpenJDK 7. +may be included with JRE 8, JDK 8, and OpenJDK 8. --- begin of LICENSE --- @@ -852,8 +1044,8 @@ their respective owners. ------------------------------------------------------------------------------- -%% This notice is provided with respect to IJG JPEG 6b, which is -included with JRE 7, JDK 7, and OpenJDK 7. +%% This notice is provided with respect to IJG JPEG 6b, which may be +included with JRE 8, JDK 8, and OpenJDK 8. --- begin of LICENSE --- @@ -891,8 +1083,35 @@ assumed by the product vendor. -------------------------------------------------------------------------------- -%% This notice is provided with respect to JOpt-Simple v3.0, which is -included with JRE 7, JDK 7, and OpenJDK 7. +%% This notice is provided with respect to Joni v1.1.9, which may be +included with JRE 8, JDK 8, and OpenJDK 8. + +--- begin of LICENSE --- + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +--- end of LICENSE --- + +------------------------------------------------------------------------------- + +%% This notice is provided with respect to JOpt-Simple v3.0, which may be +included with JRE 8, JDK 8, and OpenJDK 8. --- begin of LICENSE --- @@ -921,8 +1140,39 @@ included with JRE 7, JDK 7, and OpenJDK 7. -------------------------------------------------------------------------------- +%% This notice is provided with respect to JSON, which may be included +with JRE 8 & JDK 8. + +--- begin of LICENSE --- + +Copyright (c) 2002 JSON.org + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +The Software shall be used for Good, not Evil. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +--- end of LICENSE --- + +------------------------------------------------------------------------------- + %% This notice is provided with respect to Kerberos functionality, which -which is included with JRE 7, JDK 7, and OpenJDK 7. +which may be included with JRE 8, JDK 8, and OpenJDK 8. --- begin of LICENSE --- @@ -934,7 +1184,7 @@ which is included with JRE 7, JDK 7, and OpenJDK 7. ------------------------------------------------------------------------------- %% This notice is provided with respect to Kerberos functionality from -FundsXpress, INC., which is included with JRE 7, JDK 7, and OpenJDK 7. +FundsXpress, INC., which may be included with JRE 8, JDK 8, and OpenJDK 8. --- begin of LICENSE --- @@ -967,8 +1217,8 @@ FundsXpress, INC., which is included with JRE 7, JDK 7, and OpenJDK 7. ------------------------------------------------------------------------------- -%% This notice is provided with respect to Kronos OpenGL headers, which is -included with JDK 7 and OpenJDK 7 source distributions. +%% This notice is provided with respect to Kronos OpenGL headers, which may be +included with JDK 8 and OpenJDK 8 source distributions. --- begin of LICENSE --- @@ -1000,8 +1250,8 @@ included with JDK 7 and OpenJDK 7 source distributions. ------------------------------------------------------------------------------- -%% This notice is provided with respect to libpng 1.2.18, which is -included with JRE 7, JDK 7, and OpenJDK 7. +%% This notice is provided with respect to libpng 1.5.4, which may be +included with JRE 8, JDK 8, and OpenJDK 8. --- begin of LICENSE --- @@ -1014,8 +1264,10 @@ COPYRIGHT NOTICE, DISCLAIMER, and LICENSE: If you modify libpng you may insert additional notices immediately following this sentence. -libpng versions 1.2.6, August 15, 2004, through 1.2.18, May 15, 2007, are -Copyright (c) 2004, 2006-2007 Glenn Randers-Pehrson, and are +This code is released under the libpng license. + +libpng versions 1.2.6, August 15, 2004, through 1.5.4, July 7, 2011, are +Copyright (c) 2004, 2006-2011 Glenn Randers-Pehrson, and are distributed according to the same disclaimer and license as libpng-1.2.5 with the following individual added to the list of Contributing Authors @@ -1112,14 +1364,14 @@ certification mark of the Open Source Initiative. Glenn Randers-Pehrson glennrp at users.sourceforge.net -May 15, 2007 +July 7, 2011 --- end of LICENSE --- ------------------------------------------------------------------------------- -%% This notice is provided with respect to libungif 4.1.3, which is -included with JRE 7, JDK 7, and OpenJDK 7. +%% This notice is provided with respect to libungif 4.1.3, which may be +included with JRE 8, JDK 8, and OpenJDK 8. --- begin of LICENSE --- @@ -1147,8 +1399,8 @@ THE SOFTWARE. ------------------------------------------------------------------------------- -%% This notice is provided with respect to Little CMS 2.0, which is -included with OpenJDK 7. +%% This notice is provided with respect to Little CMS 2.4, which may be +included with JRE 8, JDK 8, and OpenJDK 8. --- begin of LICENSE --- @@ -1183,7 +1435,7 @@ U.S. and other countries. ------------------------------------------------------------------------------- %% This notice is provided with respect to Mesa 3D Graphics Library v4.1, -which is included with JRE 7, JDK 7, and OpenJDK 7 source distributions. +which may be included with JRE 8, JDK 8, and OpenJDK 8 source distributions. --- begin of LICENSE --- @@ -1213,8 +1465,402 @@ which is included with JRE 7, JDK 7, and OpenJDK 7 source distributions. ------------------------------------------------------------------------------- +%% This notice is provided with respect to Mozilla Network Security +Services (NSS), which is supplied with the JDK test suite in the OpenJDK +source code repository. It is licensed under Mozilla Public License (MPL), +version 2.0. + +The NSS libraries are supplied in executable form, built from unmodified +NSS source code labeled with the "NSS_3.13.1_RTM" release tag. + +The NSS source code is available in the OpenJDK source code repository at: + jdk/test/sun/security/pkcs11/nss/src + +The NSS libraries are available in the OpenJDK source code repository at: + jdk/test/sun/security/pkcs11/nss/lib + +--- begin of LICENSE --- + +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. + +--- end of LICENSE --- + +------------------------------------------------------------------------------- + %% This notice is provided with respect to PC/SC Lite for Suse Linux v.1.1.1, -which is included with JRE 7, JDK 7, and OpenJDK 7 on Linux and Solaris. +which may be included with JRE 8, JDK 8, and OpenJDK 8 on Linux and Solaris. --- begin of LICENSE --- @@ -1257,8 +1903,30 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------- +%% This notice is provided with respect to PorterStemmer v4, which may be +included with JRE 8, JDK 8, and OpenJDK 8. + +--- begin of LICENSE --- + +See: http://tartarus.org/~martin/PorterStemmer + +The software is completely free for any purpose, unless notes at the head of +the program text indicates otherwise (which is rare). In any case, the notes +about licensing are never more restrictive than the BSD License. + +In every case where the software is not written by me (Martin Porter), this +licensing arrangement has been endorsed by the contributor, and it is +therefore unnecessary to ask the contributor again to confirm it. + +I have not asked any contributors (or their employers, if they have them) for +proofs that they have the right to distribute their software in this way. + +--- end of LICENSE --- + +------------------------------------------------------------------------------- + %% This notice is provided with respect to Relax NG Object/Parser v.20050510, -which is included with JRE 7, JDK 7, and OpenJDK 7. +which may be included with JRE 8, JDK 8, and OpenJDK 8. --- begin of LICENSE --- @@ -1285,8 +1953,8 @@ SOFTWARE. ------------------------------------------------------------------------------- -%% This notice is provided with respect to RelaxNGCC v1.12, which is -included with JRE 7, JDK 7, and OpenJDK 7. +%% This notice is provided with respect to RelaxNGCC v1.12, which may be +included with JRE 8, JDK 8, and OpenJDK 8. --- begin of LICENSE --- @@ -1335,487 +2003,8 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------- -%% This notice is provided with respect to Mozilla Rhino v1.7R3, which -is included with JRE 7, JDK 7, and OpenJDK 7 - ---- begin of LICENSE --- - - MOZILLA PUBLIC LICENSE - Version 1.1 - - --------------- - -1. Definitions. - - 1.0.1. "Commercial Use" means distribution or otherwise making the - Covered Code available to a third party. - - 1.1. "Contributor" means each entity that creates or contributes to - the creation of Modifications. - - 1.2. "Contributor Version" means the combination of the Original - Code, prior Modifications used by a Contributor, and the Modifications - made by that particular Contributor. - - 1.3. "Covered Code" means the Original Code or Modifications or the - combination of the Original Code and Modifications, in each case - including portions thereof. - - 1.4. "Electronic Distribution Mechanism" means a mechanism generally - accepted in the software development community for the electronic - transfer of data. - - 1.5. "Executable" means Covered Code in any form other than Source - Code. - - 1.6. "Initial Developer" means the individual or entity identified - as the Initial Developer in the Source Code notice required by Exhibit - A. - - 1.7. "Larger Work" means a work which combines Covered Code or - portions thereof with code not governed by the terms of this License. - - 1.8. "License" means this document. - - 1.8.1. "Licensable" means having the right to grant, to the maximum - extent possible, whether at the time of the initial grant or - subsequently acquired, any and all of the rights conveyed herein. - - 1.9. "Modifications" means any addition to or deletion from the - substance or structure of either the Original Code or any previous - Modifications. When Covered Code is released as a series of files, a - Modification is: - A. Any addition to or deletion from the contents of a file - containing Original Code or previous Modifications. - - B. Any new file that contains any part of the Original Code or - previous Modifications. - - 1.10. "Original Code" means Source Code of computer software code - which is described in the Source Code notice required by Exhibit A as - Original Code, and which, at the time of its release under this - License is not already Covered Code governed by this License. - - 1.10.1. "Patent Claims" means any patent claim(s), now owned or - hereafter acquired, including without limitation, method, process, - and apparatus claims, in any patent Licensable by grantor. - - 1.11. "Source Code" means the preferred form of the Covered Code for - making modifications to it, including all modules it contains, plus - any associated interface definition files, scripts used to control - compilation and installation of an Executable, or source code - differential comparisons against either the Original Code or another - well known, available Covered Code of the Contributor's choice. The - Source Code can be in a compressed or archival form, provided the - appropriate decompression or de-archiving software is widely available - for no charge. - - 1.12. "You" (or "Your") means an individual or a legal entity - exercising rights under, and complying with all of the terms of, this - License or a future version of this License issued under Section 6.1. - For legal entities, "You" includes any entity which controls, is - controlled by, or is under common control with You. For purposes of - this definition, "control" means (a) the power, direct or indirect, - to cause the direction or management of such entity, whether by - contract or otherwise, or (b) ownership of more than fifty percent - (50%) of the outstanding shares or beneficial ownership of such - entity. - -2. Source Code License. - - 2.1. The Initial Developer Grant. - The Initial Developer hereby grants You a world-wide, royalty-free, - non-exclusive license, subject to third party intellectual property - claims: - (a) under intellectual property rights (other than patent or - trademark) Licensable by Initial Developer to use, reproduce, - modify, display, perform, sublicense and distribute the Original - Code (or portions thereof) with or without Modifications, and/or - as part of a Larger Work; and - - (b) under Patents Claims infringed by the making, using or - selling of Original Code, to make, have made, use, practice, - sell, and offer for sale, and/or otherwise dispose of the - Original Code (or portions thereof). - - (c) the licenses granted in this Section 2.1(a) and (b) are - effective on the date Initial Developer first distributes - Original Code under the terms of this License. - - (d) Notwithstanding Section 2.1(b) above, no patent license is - granted: 1) for code that You delete from the Original Code; 2) - separate from the Original Code; or 3) for infringements caused - by: i) the modification of the Original Code or ii) the - combination of the Original Code with other software or devices. - - 2.2. Contributor Grant. - Subject to third party intellectual property claims, each Contributor - hereby grants You a world-wide, royalty-free, non-exclusive license - - (a) under intellectual property rights (other than patent or - trademark) Licensable by Contributor, to use, reproduce, modify, - display, perform, sublicense and distribute the Modifications - created by such Contributor (or portions thereof) either on an - unmodified basis, with other Modifications, as Covered Code - and/or as part of a Larger Work; and - - (b) under Patent Claims infringed by the making, using, or - selling of Modifications made by that Contributor either alone - and/or in combination with its Contributor Version (or portions - of such combination), to make, use, sell, offer for sale, have - made, and/or otherwise dispose of: 1) Modifications made by that - Contributor (or portions thereof); and 2) the combination of - Modifications made by that Contributor with its Contributor - Version (or portions of such combination). - - (c) the licenses granted in Sections 2.2(a) and 2.2(b) are - effective on the date Contributor first makes Commercial Use of - the Covered Code. - - (d) Notwithstanding Section 2.2(b) above, no patent license is - granted: 1) for any code that Contributor has deleted from the - Contributor Version; 2) separate from the Contributor Version; - 3) for infringements caused by: i) third party modifications of - Contributor Version or ii) the combination of Modifications made - by that Contributor with other software (except as part of the - Contributor Version) or other devices; or 4) under Patent Claims - infringed by Covered Code in the absence of Modifications made by - that Contributor. - -3. Distribution Obligations. - - 3.1. Application of License. - The Modifications which You create or to which You contribute are - governed by the terms of this License, including without limitation - Section 2.2. The Source Code version of Covered Code may be - distributed only under the terms of this License or a future version - of this License released under Section 6.1, and You must include a - copy of this License with every copy of the Source Code You - distribute. You may not offer or impose any terms on any Source Code - version that alters or restricts the applicable version of this - License or the recipients' rights hereunder. However, You may include - an additional document offering the additional rights described in - Section 3.5. - - 3.2. Availability of Source Code. - Any Modification which You create or to which You contribute must be - made available in Source Code form under the terms of this License - either on the same media as an Executable version or via an accepted - Electronic Distribution Mechanism to anyone to whom you made an - Executable version available; and if made available via Electronic - Distribution Mechanism, must remain available for at least twelve (12) - months after the date it initially became available, or at least six - (6) months after a subsequent version of that particular Modification - has been made available to such recipients. You are responsible for - ensuring that the Source Code version remains available even if the - Electronic Distribution Mechanism is maintained by a third party. - - 3.3. Description of Modifications. - You must cause all Covered Code to which You contribute to contain a - file documenting the changes You made to create that Covered Code and - the date of any change. You must include a prominent statement that - the Modification is derived, directly or indirectly, from Original - Code provided by the Initial Developer and including the name of the - Initial Developer in (a) the Source Code, and (b) in any notice in an - Executable version or related documentation in which You describe the - origin or ownership of the Covered Code. - - 3.4. Intellectual Property Matters - (a) Third Party Claims. - If Contributor has knowledge that a license under a third party's - intellectual property rights is required to exercise the rights - granted by such Contributor under Sections 2.1 or 2.2, - Contributor must include a text file with the Source Code - distribution titled "LEGAL" which describes the claim and the - party making the claim in sufficient detail that a recipient will - know whom to contact. If Contributor obtains such knowledge after - the Modification is made available as described in Section 3.2, - Contributor shall promptly modify the LEGAL file in all copies - Contributor makes available thereafter and shall take other steps - (such as notifying appropriate mailing lists or newsgroups) - reasonably calculated to inform those who received the Covered - Code that new knowledge has been obtained. - - (b) Contributor APIs. - If Contributor's Modifications include an application programming - interface and Contributor has knowledge of patent licenses which - are reasonably necessary to implement that API, Contributor must - also include this information in the LEGAL file. - - (c) Representations. - Contributor represents that, except as disclosed pursuant to - Section 3.4(a) above, Contributor believes that Contributor's - Modifications are Contributor's original creation(s) and/or - Contributor has sufficient rights to grant the rights conveyed by - this License. - - 3.5. Required Notices. - You must duplicate the notice in Exhibit A in each file of the Source - Code. If it is not possible to put such notice in a particular Source - Code file due to its structure, then You must include such notice in a - location (such as a relevant directory) where a user would be likely - to look for such a notice. If You created one or more Modification(s) - You may add your name as a Contributor to the notice described in - Exhibit A. You must also duplicate this License in any documentation - for the Source Code where You describe recipients' rights or ownership - rights relating to Covered Code. You may choose to offer, and to - charge a fee for, warranty, support, indemnity or liability - obligations to one or more recipients of Covered Code. However, You - may do so only on Your own behalf, and not on behalf of the Initial - Developer or any Contributor. You must make it absolutely clear than - any such warranty, support, indemnity or liability obligation is - offered by You alone, and You hereby agree to indemnify the Initial - Developer and every Contributor for any liability incurred by the - Initial Developer or such Contributor as a result of warranty, - support, indemnity or liability terms You offer. - - 3.6. Distribution of Executable Versions. - You may distribute Covered Code in Executable form only if the - requirements of Section 3.1-3.5 have been met for that Covered Code, - and if You include a notice stating that the Source Code version of - the Covered Code is available under the terms of this License, - including a description of how and where You have fulfilled the - obligations of Section 3.2. The notice must be conspicuously included - in any notice in an Executable version, related documentation or - collateral in which You describe recipients' rights relating to the - Covered Code. You may distribute the Executable version of Covered - Code or ownership rights under a license of Your choice, which may - contain terms different from this License, provided that You are in - compliance with the terms of this License and that the license for the - Executable version does not attempt to limit or alter the recipient's - rights in the Source Code version from the rights set forth in this - License. If You distribute the Executable version under a different - license You must make it absolutely clear that any terms which differ - from this License are offered by You alone, not by the Initial - Developer or any Contributor. You hereby agree to indemnify the - Initial Developer and every Contributor for any liability incurred by - the Initial Developer or such Contributor as a result of any such - terms You offer. - - 3.7. Larger Works. - You may create a Larger Work by combining Covered Code with other code - not governed by the terms of this License and distribute the Larger - Work as a single product. In such a case, You must make sure the - requirements of this License are fulfilled for the Covered Code. - -4. Inability to Comply Due to Statute or Regulation. - - If it is impossible for You to comply with any of the terms of this - License with respect to some or all of the Covered Code due to - statute, judicial order, or regulation then You must: (a) comply with - the terms of this License to the maximum extent possible; and (b) - describe the limitations and the code they affect. Such description - must be included in the LEGAL file described in Section 3.4 and must - be included with all distributions of the Source Code. Except to the - extent prohibited by statute or regulation, such description must be - sufficiently detailed for a recipient of ordinary skill to be able to - understand it. - -5. Application of this License. - - This License applies to code to which the Initial Developer has - attached the notice in Exhibit A and to related Covered Code. - -6. Versions of the License. - - 6.1. New Versions. - Netscape Communications Corporation ("Netscape") may publish revised - and/or new versions of the License from time to time. Each version - will be given a distinguishing version number. - - 6.2. Effect of New Versions. - Once Covered Code has been published under a particular version of the - License, You may always continue to use it under the terms of that - version. You may also choose to use such Covered Code under the terms - of any subsequent version of the License published by Netscape. No one - other than Netscape has the right to modify the terms applicable to - Covered Code created under this License. - - 6.3. Derivative Works. - If You create or use a modified version of this License (which you may - only do in order to apply it to code which is not already Covered Code - governed by this License), You must (a) rename Your license so that - the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", - "MPL", "NPL" or any confusingly similar phrase do not appear in your - license (except to note that your license differs from this License) - and (b) otherwise make it clear that Your version of the license - contains terms which differ from the Mozilla Public License and - Netscape Public License. (Filling in the name of the Initial - Developer, Original Code or Contributor in the notice described in - Exhibit A shall not of themselves be deemed to be modifications of - this License.) - -7. DISCLAIMER OF WARRANTY. - - COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, - WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF - DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. - THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE - IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, - YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE - COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER - OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF - ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. - -8. TERMINATION. - - 8.1. This License and the rights granted hereunder will terminate - automatically if You fail to comply with terms herein and fail to cure - such breach within 30 days of becoming aware of the breach. All - sublicenses to the Covered Code which are properly granted shall - survive any termination of this License. Provisions which, by their - nature, must remain in effect beyond the termination of this License - shall survive. - - 8.2. If You initiate litigation by asserting a patent infringement - claim (excluding declatory judgment actions) against Initial Developer - or a Contributor (the Initial Developer or Contributor against whom - You file such action is referred to as "Participant") alleging that: - - (a) such Participant's Contributor Version directly or indirectly - infringes any patent, then any and all rights granted by such - Participant to You under Sections 2.1 and/or 2.2 of this License - shall, upon 60 days notice from Participant terminate prospectively, - unless if within 60 days after receipt of notice You either: (i) - agree in writing to pay Participant a mutually agreeable reasonable - royalty for Your past and future use of Modifications made by such - Participant, or (ii) withdraw Your litigation claim with respect to - the Contributor Version against such Participant. If within 60 days - of notice, a reasonable royalty and payment arrangement are not - mutually agreed upon in writing by the parties or the litigation claim - is not withdrawn, the rights granted by Participant to You under - Sections 2.1 and/or 2.2 automatically terminate at the expiration of - the 60 day notice period specified above. - - (b) any software, hardware, or device, other than such Participant's - Contributor Version, directly or indirectly infringes any patent, then - any rights granted to You by such Participant under Sections 2.1(b) - and 2.2(b) are revoked effective as of the date You first made, used, - sold, distributed, or had made, Modifications made by that - Participant. - - 8.3. If You assert a patent infringement claim against Participant - alleging that such Participant's Contributor Version directly or - indirectly infringes any patent where such claim is resolved (such as - by license or settlement) prior to the initiation of patent - infringement litigation, then the reasonable value of the licenses - granted by such Participant under Sections 2.1 or 2.2 shall be taken - into account in determining the amount or value of any payment or - license. - - 8.4. In the event of termination under Sections 8.1 or 8.2 above, - all end user license agreements (excluding distributors and resellers) - which have been validly granted by You or any distributor hereunder - prior to termination shall survive termination. - -9. LIMITATION OF LIABILITY. - - UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT - (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL - DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, - OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR - ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY - CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, - WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER - COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN - INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF - LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY - RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW - PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE - EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO - THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. - -10. U.S. GOVERNMENT END USERS. - - The Covered Code is a "commercial item," as that term is defined in - 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer - software" and "commercial computer software documentation," as such - terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 - C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), - all U.S. Government End Users acquire Covered Code with only those - rights set forth herein. - -11. MISCELLANEOUS. - - This License represents the complete agreement concerning subject - matter hereof. If any provision of this License is held to be - unenforceable, such provision shall be reformed only to the extent - necessary to make it enforceable. This License shall be governed by - California law provisions (except to the extent applicable law, if - any, provides otherwise), excluding its conflict-of-law provisions. - With respect to disputes in which at least one party is a citizen of, - or an entity chartered or registered to do business in the United - States of America, any litigation relating to this License shall be - subject to the jurisdiction of the Federal Courts of the Northern - District of California, with venue lying in Santa Clara County, - California, with the losing party responsible for costs, including - without limitation, court costs and reasonable attorneys' fees and - expenses. The application of the United Nations Convention on - Contracts for the International Sale of Goods is expressly excluded. - Any law or regulation which provides that the language of a contract - shall be construed against the drafter shall not apply to this - License. - -12. RESPONSIBILITY FOR CLAIMS. - - As between Initial Developer and the Contributors, each party is - responsible for claims and damages arising, directly or indirectly, - out of its utilization of rights under this License and You agree to - work with Initial Developer and Contributors to distribute such - responsibility on an equitable basis. Nothing herein is intended or - shall be deemed to constitute any admission of liability. - -13. MULTIPLE-LICENSED CODE. - - Initial Developer may designate portions of the Covered Code as - "Multiple-Licensed". "Multiple-Licensed" means that the Initial - Developer permits you to utilize portions of the Covered Code under - Your choice of the NPL or the alternative licenses, if any, specified - by the Initial Developer in the file described in Exhibit A. - -EXHIBIT A - Mozilla Public License. - - ``The contents of this file are subject to the Mozilla Public License - Version 1.1 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the - License for the specific language governing rights and limitations - under the License. - - The Original Code is ______________________________________. - - The Initial Developer of the Original Code is ________________________. - Portions created by ______________________ are Copyright (C) ______ - _______________________. All Rights Reserved. - - Contributor(s): ______________________________________. - - Alternatively, the contents of this file may be used under the terms - of the _____ license (the "[___] License"), in which case the - provisions of [______] License are applicable instead of those - above. If you wish to allow use of your version of this file only - under the terms of the [____] License and not to allow others to use - your version of this file under the MPL, indicate your decision by - deleting the provisions above and replace them with the notice and - other provisions required by the [___] License. If you do not delete - the provisions above, a recipient may use your version of this file - under either the MPL or the [___] License." - - [NOTE: The text of this Exhibit A may differ slightly from the text of - the notices in the Source Code files of the Original Code. You should - use the text of this Exhibit A rather than the text found in the - Original Code Source Code for Your Modifications.] - ---- end of LICENSE --- - -------------------------------------------------------------------------------- - -%% This notice is provided with respect to SAX 2.0.1, which is included -with JRE 7, JDK 7, and OpenJDK 7. +%% This notice is provided with respect to SAX 2.0.1, which may be included +with JRE 8, JDK 8, and OpenJDK 8. --- begin of LICENSE --- @@ -1876,8 +2065,8 @@ with JRE 7, JDK 7, and OpenJDK 7. ------------------------------------------------------------------------------- -%% This notice is provided with respect to SoftFloat version 2b, which is -included with JRE 7, JDK 7, and OpenJDK 7 on Linux/ARM. +%% This notice is provided with respect to SoftFloat version 2b, which may be +included with JRE 8, JDK 8, and OpenJDK 8 on Linux/ARM. --- begin of LICENSE --- @@ -1909,12 +2098,41 @@ satisfied. ------------------------------------------------------------------------------- +%% This notice is provided with respect to Sparkle 1.5, +which may be included with JRE 8 on Mac OS X. + +--- begin of LICENSE --- + +Copyright (c) 2012 Sparkle.org and Andy Matuschak + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +--- end of LICENSE --- + +------------------------------------------------------------------------------- + %% Portions licensed from Taligent, Inc. ------------------------------------------------------------------------------- -%% This notice is provided with respect to Thai Dictionary, which is -included with JRE 7, JDK 7, and OpenJDK 7. +%% This notice is provided with respect to Thai Dictionary, which may be +included with JRE 8, JDK 8, and OpenJDK 8. --- begin of LICENSE --- @@ -1947,8 +2165,8 @@ SOFTWARE. ------------------------------------------------------------------------------- -%% This notice is provided with respect to Unicode 6.0.0, CLDR v1.4.1, & CLDR -v1.9, which is included with JRE 7, JDK 7, and OpenJDK 7. +%% This notice is provided with respect to Unicode 6.2.0 & CLDR 21.0.1 +which may be included with JRE 8, JDK 8, and OpenJDK 8. --- begin of LICENSE --- @@ -1959,7 +2177,7 @@ Privacy Policy. For trademark usage, see the Unicode® Consortium Name and Trademark Usage Policy. A. Unicode Copyright. - 1. Copyright © 1991-2011 Unicode, Inc. All rights reserved. + 1. Copyright © 1991-2013 Unicode, Inc. All rights reserved. 2. Certain documents and files on this website contain a legend indicating that "Modification is permitted." Any person is hereby authorized, @@ -2094,7 +2312,7 @@ SOFTWARE. COPYRIGHT AND PERMISSION NOTICE -Copyright © 1991-2011 Unicode, Inc. All rights reserved. Distributed under the +Copyright © 1991-2012 Unicode, Inc. All rights reserved. Distributed under the Terms of Use in http://www.unicode.org/copyright.html. Permission is hereby granted, free of charge, to any person obtaining a copy @@ -2134,8 +2352,8 @@ the property of their respective owners. ------------------------------------------------------------------------------- -%% This notice is provided with respect to UPX v3.01, which is included -with JRE 7 on Windows. +%% This notice is provided with respect to UPX v3.01, which may be included +with JRE 8 on Windows. --- begin of LICENSE --- @@ -2274,7 +2492,7 @@ The UPX license file is at http://upx.sourceforge.net/upx-license.html. ------------------------------------------------------------------------------- %% This notice is provided with respect to Xfree86-VidMode Extension 1.0, -which is included with JRE 7, JDK 7, and OpenJDK 7 on Linux and Solaris. +which may be included with JRE 8, JDK 8, and OpenJDK 8 on Linux and Solaris. --- begin of LICENSE --- @@ -2326,8 +2544,8 @@ to do so,subject to the following conditions: ------------------------------------------------------------------------------- -%% This notice is provided with respect to X Window System 6.8.2, which is -included with JRE 7, JDK 7, and OpenJDK 7 on Linux and Solaris. +%% This notice is provided with respect to X Window System 6.8.2, which may be +included with JRE 8, JDK 8, and OpenJDK 8 on Linux and Solaris. --- begin of LICENSE --- @@ -3131,12 +3349,12 @@ info@urwpp.de or design@bigelowandholmes.com ------------------------------------------------------------------------------- -%% This notice is provided with respect to zlib v1.2.3, which is included -with JRE 7, JDK 7, and OpenJDK 7 +%% This notice is provided with respect to zlib v1.2.5, which may be included +with JRE 8, JDK 8, and OpenJDK 8. --- begin of LICENSE --- - version 1.2.3, July 18th, 2005 + version 1.2.5, July 18th, 2005 Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler @@ -3163,16 +3381,18 @@ with JRE 7, JDK 7, and OpenJDK 7 ------------------------------------------------------------------------------- -%% This notice is provided with respect to the following which is -included with JRE 7, JDK 7, and OpenJDK 7, except where noted: +%% This notice is provided with respect to the following which may be +included with JRE 8, JDK 8, and OpenJDK 8, except where noted: - Apache Derby 10.8.1.2 [included with JDK 7 only] + Apache Commons Math 2.2 + Apache Derby 10.10.1.2 [included with JDK 8] Apache Jakarta BCEL 5.2 Apache Jakarta Regexp 1.4 - Apache Santuario XMLSec-Java 1.4.2 + Apache Santuario XML Security for Java 1.5.4 Apache Xalan-Java 2.7.1 - Apache Xerces2 Java 2.10.0 + Apache Xerces Java 2.10.0 Apache XML Resolver 1.1 + Dynalink 0.5 --- begin of LICENSE --- diff --git a/hotspot/agent/src/os/linux/libproc_impl.c b/hotspot/agent/src/os/linux/libproc_impl.c index 2ea0d0f88f9..a04bc37d1d7 100644 --- a/hotspot/agent/src/os/linux/libproc_impl.c +++ b/hotspot/agent/src/os/linux/libproc_impl.c @@ -29,54 +29,51 @@ #include #include "libproc_impl.h" -static const char* alt_root = NULL; -static int alt_root_len = -1; - #define SA_ALTROOT "SA_ALTROOT" -static void init_alt_root() { - if (alt_root_len == -1) { - alt_root = getenv(SA_ALTROOT); - if (alt_root) { - alt_root_len = strlen(alt_root); - } else { - alt_root_len = 0; - } - } -} - int pathmap_open(const char* name) { - int fd; - char alt_path[PATH_MAX + 1]; + static const char *alt_root = NULL; + static int alt_root_initialized = 0; - init_alt_root(); + int fd; + char alt_path[PATH_MAX + 1], *alt_path_end; + const char *s; - if (alt_root_len > 0) { - strcpy(alt_path, alt_root); - strcat(alt_path, name); - fd = open(alt_path, O_RDONLY); - if (fd >= 0) { - print_debug("path %s substituted for %s\n", alt_path, name); - return fd; - } + if (!alt_root_initialized) { + alt_root_initialized = -1; + alt_root = getenv(SA_ALTROOT); + } - if (strrchr(name, '/')) { - strcpy(alt_path, alt_root); - strcat(alt_path, strrchr(name, '/')); - fd = open(alt_path, O_RDONLY); - if (fd >= 0) { - print_debug("path %s substituted for %s\n", alt_path, name); - return fd; - } - } - } else { - fd = open(name, O_RDONLY); - if (fd >= 0) { - return fd; - } - } + if (alt_root == NULL) { + return open(name, O_RDONLY); + } - return -1; + strcpy(alt_path, alt_root); + alt_path_end = alt_path + strlen(alt_path); + + // Strip path items one by one and try to open file with alt_root prepended + s = name; + while (1) { + strcat(alt_path, s); + s += 1; + + fd = open(alt_path, O_RDONLY); + if (fd >= 0) { + print_debug("path %s substituted for %s\n", alt_path, name); + return fd; + } + + // Linker always put full path to solib to process, so we can rely + // on presence of /. If slash is not present, it means, that SOlib doesn't + // physically exist (e.g. linux-gate.so) and we fail opening it anyway + if ((s = strchr(s, '/')) == NULL) { + break; + } + + *alt_path_end = 0; + } + + return -1; } static bool _libsaproc_debug; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/LinuxCDebugger.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/LinuxCDebugger.java index f2d947493ee..91d47c60e3f 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/LinuxCDebugger.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/LinuxCDebugger.java @@ -55,31 +55,21 @@ class LinuxCDebugger implements CDebugger { if (pc == null) { return null; } - List objs = getLoadObjectList(); - Object[] arr = objs.toArray(); - // load objects are sorted by base address, do binary search - int mid = -1; - int low = 0; - int high = arr.length - 1; - while (low <= high) { - mid = (low + high) >> 1; - LoadObject midVal = (LoadObject) arr[mid]; - long cmp = pc.minus(midVal.getBase()); - if (cmp < 0) { - high = mid - 1; - } else if (cmp > 0) { - long size = midVal.getSize(); - if (cmp >= size) { - low = mid + 1; - } else { - return (LoadObject) arr[mid]; - } - } else { // match found - return (LoadObject) arr[mid]; - } + /* Typically we have about ten loaded objects here. So no reason to do + sort/binary search here. Linear search gives us acceptable performance.*/ + + List objs = getLoadObjectList(); + + for (int i = 0; i < objs.size(); i++) { + LoadObject ob = (LoadObject) objs.get(i); + Address base = ob.getBase(); + long size = ob.getSize(); + if ( pc.greaterThanOrEqual(base) && pc.lessThan(base.addOffsetTo(size))) { + return ob; + } } - // no match found. + return null; } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/AdaptiveFreeList.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/AdaptiveFreeList.java new file mode 100644 index 00000000000..19dca2610ce --- /dev/null +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/AdaptiveFreeList.java @@ -0,0 +1,77 @@ +/* + * @(#)AdaptiveFreeList.java + * + * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package sun.jvm.hotspot.memory; + +import java.util.Observable; +import java.util.Observer; + +import sun.jvm.hotspot.debugger.Address; +import sun.jvm.hotspot.runtime.VM; +import sun.jvm.hotspot.runtime.VMObject; +import sun.jvm.hotspot.types.CIntegerField; +import sun.jvm.hotspot.types.Type; +import sun.jvm.hotspot.types.TypeDataBase; + +public class AdaptiveFreeList extends VMObject { + static { + VM.registerVMInitializedObserver(new Observer() { + public void update(Observable o, Object data) { + initialize(VM.getVM().getTypeDataBase()); + } + }); + } + + private static synchronized void initialize(TypeDataBase db) { + Type type = db.lookupType("AdaptiveFreeList"); + sizeField = type.getCIntegerField("_size"); + countField = type.getCIntegerField("_count"); + headerSize = type.getSize(); + } + + // Fields + private static CIntegerField sizeField; + private static CIntegerField countField; + private static long headerSize; + + //Constructor + public AdaptiveFreeList(Address address) { + super(address); + } + + // Accessors + public long size() { + return sizeField.getValue(addr); + } + + public long count() { + return countField.getValue(addr); + } + + public static long sizeOf() { + return headerSize; + } +} diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/CompactibleFreeListSpace.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/CompactibleFreeListSpace.java index 23cb0bcb7fb..ed26af725e0 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/CompactibleFreeListSpace.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/CompactibleFreeListSpace.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,25 +24,29 @@ package sun.jvm.hotspot.memory; -import java.io.*; -import java.util.*; -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.oops.*; -import sun.jvm.hotspot.runtime.*; -import sun.jvm.hotspot.types.*; -import sun.jvm.hotspot.utilities.*; +import java.io.PrintStream; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Observable; +import java.util.Observer; + +import sun.jvm.hotspot.debugger.Address; +import sun.jvm.hotspot.debugger.Debugger; +import sun.jvm.hotspot.oops.ObjectHeap; +import sun.jvm.hotspot.oops.Oop; +import sun.jvm.hotspot.runtime.VM; +import sun.jvm.hotspot.runtime.VMObjectFactory; +import sun.jvm.hotspot.types.AddressField; +import sun.jvm.hotspot.types.Type; +import sun.jvm.hotspot.types.TypeDataBase; +import sun.jvm.hotspot.utilities.Assert; public class CompactibleFreeListSpace extends CompactibleSpace { private static AddressField collectorField; - - // for free size, three fields - // FreeBlockDictionary* _dictionary; // ptr to dictionary for large size blocks - // FreeList _indexedFreeList[IndexSetSize]; // indexed array for small size blocks - // LinearAllocBlock _smallLinearAllocBlock; // small linear alloc in TLAB private static AddressField indexedFreeListField; private static AddressField dictionaryField; private static long smallLinearAllocBlockFieldOffset; - private static long indexedFreeListSizeOf; private int heapWordSize; // 4 for 32bit, 8 for 64 bits private int IndexSetStart; // for small indexed list @@ -109,11 +113,11 @@ public class CompactibleFreeListSpace extends CompactibleSpace { // small chunks long size = 0; Address cur = addr.addOffsetTo( indexedFreeListField.getOffset() ); - cur = cur.addOffsetTo(IndexSetStart*FreeList.sizeOf()); + cur = cur.addOffsetTo(IndexSetStart*AdaptiveFreeList.sizeOf()); for (int i=IndexSetStart; i"); - sizeField = type.getCIntegerField("_size"); - countField = type.getCIntegerField("_count"); - headerSize = type.getSize(); - } - - // Fields - private static CIntegerField sizeField; - private static CIntegerField countField; - private static long headerSize; - - //Constructor - public FreeList(Address address) { - super(address); - } - - // Accessors - public long size() { - return sizeField.getValue(addr); - } - - public long count() { - return countField.getValue(addr); - } - - public static long sizeOf() { - return headerSize; - } -} diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/opto/Block.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/opto/Block.java index 156e8def9ca..519eeef4e61 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/opto/Block.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/opto/Block.java @@ -48,7 +48,7 @@ public class Block extends VMObject { preOrderField = new CIntField(type.getCIntegerField("_pre_order"), 0); domDepthField = new CIntField(type.getCIntegerField("_dom_depth"), 0); idomField = type.getAddressField("_idom"); - freqField = type.getJFloatField("_freq"); + freqField = type.getJDoubleField("_freq"); } private static AddressField nodesField; @@ -57,7 +57,7 @@ public class Block extends VMObject { private static CIntField preOrderField; private static CIntField domDepthField; private static AddressField idomField; - private static JFloatField freqField; + private static JDoubleField freqField; public Block(Address addr) { super(addr); @@ -67,8 +67,8 @@ public class Block extends VMObject { return (int)preOrderField.getValue(getAddress()); } - public float freq() { - return (float)freqField.getValue(getAddress()); + public double freq() { + return (double)freqField.getValue(getAddress()); } public Node_List nodes() { diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/soql/sa.js b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/soql/sa.js index a700f1bc6bd..14a8e9aa137 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/soql/sa.js +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/soql/sa.js @@ -371,19 +371,23 @@ function sym2addr(dso, sym) { return sa.dbg.lookup(dso, sym); } -// returns the ClosestSymbol or null -function closestSymbolFor(addr) { - if (sa.cdbg == null) { +function loadObjectContainingPC(addr) { + if (sa.cdbg == null) { // no CDebugger support, return null return null; - } else { - var dso = sa.cdbg.loadObjectContainingPC(addr); - if (dso != null) { - return dso.closestSymbolToPC(addr); - } else { - return null; - } - } + } + + return sa.cdbg.loadObjectContainingPC(addr); +} + +// returns the ClosestSymbol or null +function closestSymbolFor(addr) { + var dso = loadObjectContainingPC(addr); + if (dso != null) { + return dso.closestSymbolToPC(addr); + } + + return null; } // Address-to-symbol @@ -804,6 +808,16 @@ delete tmp; // VM type to SA class map var vmType2Class = new Object(); +// C2 only classes +try{ + vmType2Class["ExceptionBlob"] = sapkg.code.ExceptionBlob; + vmType2Class["UncommonTrapBlob"] = sapkg.code.UncommonTrapBlob; +} catch(e) { + // Ignore exception. C2 specific objects might be not + // available in client VM +} + + // This is *not* exhaustive. Add more if needed. // code blobs vmType2Class["BufferBlob"] = sapkg.code.BufferBlob; @@ -812,10 +826,8 @@ vmType2Class["RuntimeStub"] = sapkg.code.RuntimeStub; vmType2Class["SafepointBlob"] = sapkg.code.SafepointBlob; vmType2Class["C2IAdapter"] = sapkg.code.C2IAdapter; vmType2Class["DeoptimizationBlob"] = sapkg.code.DeoptimizationBlob; -vmType2Class["ExceptionBlob"] = sapkg.code.ExceptionBlob; vmType2Class["I2CAdapter"] = sapkg.code.I2CAdapter; vmType2Class["OSRAdapter"] = sapkg.code.OSRAdapter; -vmType2Class["UncommonTrapBlob"] = sapkg.code.UncommonTrapBlob; vmType2Class["PCDesc"] = sapkg.code.PCDesc; // interpreter @@ -876,21 +888,29 @@ function isOop(addr) { // returns description of given pointer as a String function whatis(addr) { - addr = any2addr(addr); - var ptrLoc = findPtr(addr); - if (ptrLoc.isUnknown()) { - var vmType = vmTypeof(addr); - if (vmType != null) { - return "pointer to " + vmType.name; - } else { - var sym = closestSymbolFor(addr); - if (sym != null) { - return sym.name + '+' + sym.offset; - } else { - return ptrLoc.toString(); - } - } - } else { - return ptrLoc.toString(); - } + addr = any2addr(addr); + var ptrLoc = findPtr(addr); + if (!ptrLoc.isUnknown()) { + return ptrLoc.toString(); + } + + var vmType = vmTypeof(addr); + if (vmType != null) { + return "pointer to " + vmType.name; + } + + var dso = loadObjectContainingPC(addr); + if (dso == null) { + return ptrLoc.toString(); + } + + var sym = dso.closestSymbolToPC(addr); + if (sym != null) { + return sym.name + '+' + sym.offset; + } + + var s = dso.getName(); + var p = s.lastIndexOf("/"); + var base = dso.getBase(); + return s.substring(p+1, s.length) + '+' + addr.minus(base); } diff --git a/hotspot/make/bsd/makefiles/gcc.make b/hotspot/make/bsd/makefiles/gcc.make index 8f708eab3df..b6bca43e5bd 100644 --- a/hotspot/make/bsd/makefiles/gcc.make +++ b/hotspot/make/bsd/makefiles/gcc.make @@ -260,7 +260,7 @@ ifeq ($(USE_CLANG), true) WARNINGS_ARE_ERRORS += -Wno-empty-body endif -WARNING_FLAGS = -Wpointer-arith -Wsign-compare -Wundef -Wunused-function -Wunused-value +WARNING_FLAGS = -Wpointer-arith -Wsign-compare -Wundef -Wunused-function -Wformat=2 -Wno-error=format-nonliteral ifeq ($(USE_CLANG),) # Since GCC 4.3, -Wconversion has changed its meanings to warn these implicit @@ -289,7 +289,7 @@ CFLAGS += -fno-strict-aliasing # The flags to use for an Optimized g++ build ifeq ($(OS_VENDOR), Darwin) # use -Os by default, unless -O3 can be proved to be worth the cost, as per policy - # + # OPT_CFLAGS_DEFAULT ?= SIZE else OPT_CFLAGS_DEFAULT ?= SPEED diff --git a/hotspot/make/linux/makefiles/gcc.make b/hotspot/make/linux/makefiles/gcc.make index 69801062545..071c36e5876 100644 --- a/hotspot/make/linux/makefiles/gcc.make +++ b/hotspot/make/linux/makefiles/gcc.make @@ -215,7 +215,7 @@ ifeq ($(USE_CLANG), true) WARNINGS_ARE_ERRORS += -Wno-return-type -Wno-empty-body endif -WARNING_FLAGS = -Wpointer-arith -Wsign-compare -Wundef -Wunused-function -Wunused-value +WARNING_FLAGS = -Wpointer-arith -Wsign-compare -Wundef -Wunused-function -Wunused-value -Wformat=2 -Wno-error=format-nonliteral ifeq ($(USE_CLANG),) # Since GCC 4.3, -Wconversion has changed its meanings to warn these implicit diff --git a/hotspot/make/solaris/makefiles/gcc.make b/hotspot/make/solaris/makefiles/gcc.make index fe65ad4f5bf..627691c78f3 100644 --- a/hotspot/make/solaris/makefiles/gcc.make +++ b/hotspot/make/solaris/makefiles/gcc.make @@ -118,7 +118,7 @@ endif # Compiler warnings are treated as errors WARNINGS_ARE_ERRORS = -Werror # Enable these warnings. See 'info gcc' about details on these options -WARNING_FLAGS = -Wpointer-arith -Wconversion -Wsign-compare -Wundef +WARNING_FLAGS = -Wpointer-arith -Wconversion -Wsign-compare -Wundef -Wformat=2 -Wno-error=format-nonliteral CFLAGS_WARN/DEFAULT = $(WARNINGS_ARE_ERRORS) $(WARNING_FLAGS) # Special cases CFLAGS_WARN/BYFILE = $(CFLAGS_WARN/$@)$(CFLAGS_WARN/DEFAULT$(CFLAGS_WARN/$@)) diff --git a/hotspot/src/cpu/ppc/vm/ppc.ad b/hotspot/src/cpu/ppc/vm/ppc.ad index cb1d75dc08b..01d5ffb8314 100644 --- a/hotspot/src/cpu/ppc/vm/ppc.ad +++ b/hotspot/src/cpu/ppc/vm/ppc.ad @@ -2076,6 +2076,8 @@ const bool Matcher::match_rule_supported(int opcode) { return false; switch (opcode) { + case Op_SqrtD: + return VM_Version::has_fsqrt(); case Op_CountLeadingZerosI: case Op_CountLeadingZerosL: case Op_CountTrailingZerosI: @@ -8740,7 +8742,7 @@ instruct negD_absD_reg(regD dst, regD src) %{ ins_pipe(pipe_class_default); %} -// VM_Version::has_sqrt() decides if this node will be used. +// VM_Version::has_fsqrt() decides if this node will be used. // Sqrt float double precision instruct sqrtD_reg(regD dst, regD src) %{ match(Set dst (SqrtD src)); diff --git a/hotspot/src/cpu/sparc/vm/sparc.ad b/hotspot/src/cpu/sparc/vm/sparc.ad index 3a470b0f851..15b5c7b524f 100644 --- a/hotspot/src/cpu/sparc/vm/sparc.ad +++ b/hotspot/src/cpu/sparc/vm/sparc.ad @@ -2037,19 +2037,6 @@ const RegMask Matcher::method_handle_invoke_SP_save_mask() { return L7_REGP_mask(); } -const RegMask Matcher::mathExactI_result_proj_mask() { - return G1_REGI_mask(); -} - -const RegMask Matcher::mathExactL_result_proj_mask() { - return G1_REGL_mask(); -} - -const RegMask Matcher::mathExactI_flags_proj_mask() { - return INT_FLAGS_mask(); -} - - %} diff --git a/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp b/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp index b4797bf3a39..74fa1b298ac 100644 --- a/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp +++ b/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp @@ -98,217 +98,6 @@ Address MacroAssembler::as_Address(ArrayAddress adr) { return Address::make_array(adr); } -int MacroAssembler::biased_locking_enter(Register lock_reg, - Register obj_reg, - Register swap_reg, - Register tmp_reg, - bool swap_reg_contains_mark, - Label& done, - Label* slow_case, - BiasedLockingCounters* counters) { - assert(UseBiasedLocking, "why call this otherwise?"); - assert(swap_reg == rax, "swap_reg must be rax, for cmpxchg"); - assert_different_registers(lock_reg, obj_reg, swap_reg); - - if (PrintBiasedLockingStatistics && counters == NULL) - counters = BiasedLocking::counters(); - - bool need_tmp_reg = false; - if (tmp_reg == noreg) { - need_tmp_reg = true; - tmp_reg = lock_reg; - } else { - assert_different_registers(lock_reg, obj_reg, swap_reg, tmp_reg); - } - assert(markOopDesc::age_shift == markOopDesc::lock_bits + markOopDesc::biased_lock_bits, "biased locking makes assumptions about bit layout"); - Address mark_addr (obj_reg, oopDesc::mark_offset_in_bytes()); - Address klass_addr (obj_reg, oopDesc::klass_offset_in_bytes()); - Address saved_mark_addr(lock_reg, 0); - - // Biased locking - // See whether the lock is currently biased toward our thread and - // whether the epoch is still valid - // Note that the runtime guarantees sufficient alignment of JavaThread - // pointers to allow age to be placed into low bits - // First check to see whether biasing is even enabled for this object - Label cas_label; - int null_check_offset = -1; - if (!swap_reg_contains_mark) { - null_check_offset = offset(); - movl(swap_reg, mark_addr); - } - if (need_tmp_reg) { - push(tmp_reg); - } - movl(tmp_reg, swap_reg); - andl(tmp_reg, markOopDesc::biased_lock_mask_in_place); - cmpl(tmp_reg, markOopDesc::biased_lock_pattern); - if (need_tmp_reg) { - pop(tmp_reg); - } - jcc(Assembler::notEqual, cas_label); - // The bias pattern is present in the object's header. Need to check - // whether the bias owner and the epoch are both still current. - // Note that because there is no current thread register on x86 we - // need to store off the mark word we read out of the object to - // avoid reloading it and needing to recheck invariants below. This - // store is unfortunate but it makes the overall code shorter and - // simpler. - movl(saved_mark_addr, swap_reg); - if (need_tmp_reg) { - push(tmp_reg); - } - get_thread(tmp_reg); - xorl(swap_reg, tmp_reg); - if (swap_reg_contains_mark) { - null_check_offset = offset(); - } - movl(tmp_reg, klass_addr); - xorl(swap_reg, Address(tmp_reg, Klass::prototype_header_offset())); - andl(swap_reg, ~((int) markOopDesc::age_mask_in_place)); - if (need_tmp_reg) { - pop(tmp_reg); - } - if (counters != NULL) { - cond_inc32(Assembler::zero, - ExternalAddress((address)counters->biased_lock_entry_count_addr())); - } - jcc(Assembler::equal, done); - - Label try_revoke_bias; - Label try_rebias; - - // At this point we know that the header has the bias pattern and - // that we are not the bias owner in the current epoch. We need to - // figure out more details about the state of the header in order to - // know what operations can be legally performed on the object's - // header. - - // If the low three bits in the xor result aren't clear, that means - // the prototype header is no longer biased and we have to revoke - // the bias on this object. - testl(swap_reg, markOopDesc::biased_lock_mask_in_place); - jcc(Assembler::notZero, try_revoke_bias); - - // Biasing is still enabled for this data type. See whether the - // epoch of the current bias is still valid, meaning that the epoch - // bits of the mark word are equal to the epoch bits of the - // prototype header. (Note that the prototype header's epoch bits - // only change at a safepoint.) If not, attempt to rebias the object - // toward the current thread. Note that we must be absolutely sure - // that the current epoch is invalid in order to do this because - // otherwise the manipulations it performs on the mark word are - // illegal. - testl(swap_reg, markOopDesc::epoch_mask_in_place); - jcc(Assembler::notZero, try_rebias); - - // The epoch of the current bias is still valid but we know nothing - // about the owner; it might be set or it might be clear. Try to - // acquire the bias of the object using an atomic operation. If this - // fails we will go in to the runtime to revoke the object's bias. - // Note that we first construct the presumed unbiased header so we - // don't accidentally blow away another thread's valid bias. - movl(swap_reg, saved_mark_addr); - andl(swap_reg, - markOopDesc::biased_lock_mask_in_place | markOopDesc::age_mask_in_place | markOopDesc::epoch_mask_in_place); - if (need_tmp_reg) { - push(tmp_reg); - } - get_thread(tmp_reg); - orl(tmp_reg, swap_reg); - if (os::is_MP()) { - lock(); - } - cmpxchgptr(tmp_reg, Address(obj_reg, 0)); - if (need_tmp_reg) { - pop(tmp_reg); - } - // If the biasing toward our thread failed, this means that - // another thread succeeded in biasing it toward itself and we - // need to revoke that bias. The revocation will occur in the - // interpreter runtime in the slow case. - if (counters != NULL) { - cond_inc32(Assembler::zero, - ExternalAddress((address)counters->anonymously_biased_lock_entry_count_addr())); - } - if (slow_case != NULL) { - jcc(Assembler::notZero, *slow_case); - } - jmp(done); - - bind(try_rebias); - // At this point we know the epoch has expired, meaning that the - // current "bias owner", if any, is actually invalid. Under these - // circumstances _only_, we are allowed to use the current header's - // value as the comparison value when doing the cas to acquire the - // bias in the current epoch. In other words, we allow transfer of - // the bias from one thread to another directly in this situation. - // - // FIXME: due to a lack of registers we currently blow away the age - // bits in this situation. Should attempt to preserve them. - if (need_tmp_reg) { - push(tmp_reg); - } - get_thread(tmp_reg); - movl(swap_reg, klass_addr); - orl(tmp_reg, Address(swap_reg, Klass::prototype_header_offset())); - movl(swap_reg, saved_mark_addr); - if (os::is_MP()) { - lock(); - } - cmpxchgptr(tmp_reg, Address(obj_reg, 0)); - if (need_tmp_reg) { - pop(tmp_reg); - } - // If the biasing toward our thread failed, then another thread - // succeeded in biasing it toward itself and we need to revoke that - // bias. The revocation will occur in the runtime in the slow case. - if (counters != NULL) { - cond_inc32(Assembler::zero, - ExternalAddress((address)counters->rebiased_lock_entry_count_addr())); - } - if (slow_case != NULL) { - jcc(Assembler::notZero, *slow_case); - } - jmp(done); - - bind(try_revoke_bias); - // The prototype mark in the klass doesn't have the bias bit set any - // more, indicating that objects of this data type are not supposed - // to be biased any more. We are going to try to reset the mark of - // this object to the prototype value and fall through to the - // CAS-based locking scheme. Note that if our CAS fails, it means - // that another thread raced us for the privilege of revoking the - // bias of this particular object, so it's okay to continue in the - // normal locking code. - // - // FIXME: due to a lack of registers we currently blow away the age - // bits in this situation. Should attempt to preserve them. - movl(swap_reg, saved_mark_addr); - if (need_tmp_reg) { - push(tmp_reg); - } - movl(tmp_reg, klass_addr); - movl(tmp_reg, Address(tmp_reg, Klass::prototype_header_offset())); - if (os::is_MP()) { - lock(); - } - cmpxchgptr(tmp_reg, Address(obj_reg, 0)); - if (need_tmp_reg) { - pop(tmp_reg); - } - // Fall through to the normal CAS-based lock, because no matter what - // the result of the above CAS, some thread must have succeeded in - // removing the bias bit from the object's header. - if (counters != NULL) { - cond_inc32(Assembler::zero, - ExternalAddress((address)counters->revoked_lock_entry_count_addr())); - } - - bind(cas_label); - - return null_check_offset; -} void MacroAssembler::call_VM_leaf_base(address entry_point, int number_of_arguments) { call(RuntimeAddress(entry_point)); @@ -726,165 +515,6 @@ Address MacroAssembler::as_Address(ArrayAddress adr) { return array; } -int MacroAssembler::biased_locking_enter(Register lock_reg, - Register obj_reg, - Register swap_reg, - Register tmp_reg, - bool swap_reg_contains_mark, - Label& done, - Label* slow_case, - BiasedLockingCounters* counters) { - assert(UseBiasedLocking, "why call this otherwise?"); - assert(swap_reg == rax, "swap_reg must be rax for cmpxchgq"); - assert(tmp_reg != noreg, "tmp_reg must be supplied"); - assert_different_registers(lock_reg, obj_reg, swap_reg, tmp_reg); - assert(markOopDesc::age_shift == markOopDesc::lock_bits + markOopDesc::biased_lock_bits, "biased locking makes assumptions about bit layout"); - Address mark_addr (obj_reg, oopDesc::mark_offset_in_bytes()); - Address saved_mark_addr(lock_reg, 0); - - if (PrintBiasedLockingStatistics && counters == NULL) - counters = BiasedLocking::counters(); - - // Biased locking - // See whether the lock is currently biased toward our thread and - // whether the epoch is still valid - // Note that the runtime guarantees sufficient alignment of JavaThread - // pointers to allow age to be placed into low bits - // First check to see whether biasing is even enabled for this object - Label cas_label; - int null_check_offset = -1; - if (!swap_reg_contains_mark) { - null_check_offset = offset(); - movq(swap_reg, mark_addr); - } - movq(tmp_reg, swap_reg); - andq(tmp_reg, markOopDesc::biased_lock_mask_in_place); - cmpq(tmp_reg, markOopDesc::biased_lock_pattern); - jcc(Assembler::notEqual, cas_label); - // The bias pattern is present in the object's header. Need to check - // whether the bias owner and the epoch are both still current. - load_prototype_header(tmp_reg, obj_reg); - orq(tmp_reg, r15_thread); - xorq(tmp_reg, swap_reg); - andq(tmp_reg, ~((int) markOopDesc::age_mask_in_place)); - if (counters != NULL) { - cond_inc32(Assembler::zero, - ExternalAddress((address) counters->anonymously_biased_lock_entry_count_addr())); - } - jcc(Assembler::equal, done); - - Label try_revoke_bias; - Label try_rebias; - - // At this point we know that the header has the bias pattern and - // that we are not the bias owner in the current epoch. We need to - // figure out more details about the state of the header in order to - // know what operations can be legally performed on the object's - // header. - - // If the low three bits in the xor result aren't clear, that means - // the prototype header is no longer biased and we have to revoke - // the bias on this object. - testq(tmp_reg, markOopDesc::biased_lock_mask_in_place); - jcc(Assembler::notZero, try_revoke_bias); - - // Biasing is still enabled for this data type. See whether the - // epoch of the current bias is still valid, meaning that the epoch - // bits of the mark word are equal to the epoch bits of the - // prototype header. (Note that the prototype header's epoch bits - // only change at a safepoint.) If not, attempt to rebias the object - // toward the current thread. Note that we must be absolutely sure - // that the current epoch is invalid in order to do this because - // otherwise the manipulations it performs on the mark word are - // illegal. - testq(tmp_reg, markOopDesc::epoch_mask_in_place); - jcc(Assembler::notZero, try_rebias); - - // The epoch of the current bias is still valid but we know nothing - // about the owner; it might be set or it might be clear. Try to - // acquire the bias of the object using an atomic operation. If this - // fails we will go in to the runtime to revoke the object's bias. - // Note that we first construct the presumed unbiased header so we - // don't accidentally blow away another thread's valid bias. - andq(swap_reg, - markOopDesc::biased_lock_mask_in_place | markOopDesc::age_mask_in_place | markOopDesc::epoch_mask_in_place); - movq(tmp_reg, swap_reg); - orq(tmp_reg, r15_thread); - if (os::is_MP()) { - lock(); - } - cmpxchgq(tmp_reg, Address(obj_reg, 0)); - // If the biasing toward our thread failed, this means that - // another thread succeeded in biasing it toward itself and we - // need to revoke that bias. The revocation will occur in the - // interpreter runtime in the slow case. - if (counters != NULL) { - cond_inc32(Assembler::zero, - ExternalAddress((address) counters->anonymously_biased_lock_entry_count_addr())); - } - if (slow_case != NULL) { - jcc(Assembler::notZero, *slow_case); - } - jmp(done); - - bind(try_rebias); - // At this point we know the epoch has expired, meaning that the - // current "bias owner", if any, is actually invalid. Under these - // circumstances _only_, we are allowed to use the current header's - // value as the comparison value when doing the cas to acquire the - // bias in the current epoch. In other words, we allow transfer of - // the bias from one thread to another directly in this situation. - // - // FIXME: due to a lack of registers we currently blow away the age - // bits in this situation. Should attempt to preserve them. - load_prototype_header(tmp_reg, obj_reg); - orq(tmp_reg, r15_thread); - if (os::is_MP()) { - lock(); - } - cmpxchgq(tmp_reg, Address(obj_reg, 0)); - // If the biasing toward our thread failed, then another thread - // succeeded in biasing it toward itself and we need to revoke that - // bias. The revocation will occur in the runtime in the slow case. - if (counters != NULL) { - cond_inc32(Assembler::zero, - ExternalAddress((address) counters->rebiased_lock_entry_count_addr())); - } - if (slow_case != NULL) { - jcc(Assembler::notZero, *slow_case); - } - jmp(done); - - bind(try_revoke_bias); - // The prototype mark in the klass doesn't have the bias bit set any - // more, indicating that objects of this data type are not supposed - // to be biased any more. We are going to try to reset the mark of - // this object to the prototype value and fall through to the - // CAS-based locking scheme. Note that if our CAS fails, it means - // that another thread raced us for the privilege of revoking the - // bias of this particular object, so it's okay to continue in the - // normal locking code. - // - // FIXME: due to a lack of registers we currently blow away the age - // bits in this situation. Should attempt to preserve them. - load_prototype_header(tmp_reg, obj_reg); - if (os::is_MP()) { - lock(); - } - cmpxchgq(tmp_reg, Address(obj_reg, 0)); - // Fall through to the normal CAS-based lock, because no matter what - // the result of the above CAS, some thread must have succeeded in - // removing the bias bit from the object's header. - if (counters != NULL) { - cond_inc32(Assembler::zero, - ExternalAddress((address) counters->revoked_lock_entry_count_addr())); - } - - bind(cas_label); - - return null_check_offset; -} - void MacroAssembler::call_VM_leaf_base(address entry_point, int num_args) { Label L, E; @@ -1360,9 +990,16 @@ void MacroAssembler::andptr(Register dst, int32_t imm32) { void MacroAssembler::atomic_incl(AddressLiteral counter_addr) { pushf(); - if (os::is_MP()) - lock(); - incrementl(counter_addr); + if (reachable(counter_addr)) { + if (os::is_MP()) + lock(); + incrementl(as_Address(counter_addr)); + } else { + lea(rscratch1, counter_addr); + if (os::is_MP()) + lock(); + incrementl(Address(rscratch1, 0)); + } popf(); } @@ -1393,6 +1030,234 @@ void MacroAssembler::bang_stack_size(Register size, Register tmp) { } } +int MacroAssembler::biased_locking_enter(Register lock_reg, + Register obj_reg, + Register swap_reg, + Register tmp_reg, + bool swap_reg_contains_mark, + Label& done, + Label* slow_case, + BiasedLockingCounters* counters) { + assert(UseBiasedLocking, "why call this otherwise?"); + assert(swap_reg == rax, "swap_reg must be rax for cmpxchgq"); + LP64_ONLY( assert(tmp_reg != noreg, "tmp_reg must be supplied"); ) + bool need_tmp_reg = false; + if (tmp_reg == noreg) { + need_tmp_reg = true; + tmp_reg = lock_reg; + assert_different_registers(lock_reg, obj_reg, swap_reg); + } else { + assert_different_registers(lock_reg, obj_reg, swap_reg, tmp_reg); + } + assert(markOopDesc::age_shift == markOopDesc::lock_bits + markOopDesc::biased_lock_bits, "biased locking makes assumptions about bit layout"); + Address mark_addr (obj_reg, oopDesc::mark_offset_in_bytes()); + Address saved_mark_addr(lock_reg, 0); + + if (PrintBiasedLockingStatistics && counters == NULL) { + counters = BiasedLocking::counters(); + } + // Biased locking + // See whether the lock is currently biased toward our thread and + // whether the epoch is still valid + // Note that the runtime guarantees sufficient alignment of JavaThread + // pointers to allow age to be placed into low bits + // First check to see whether biasing is even enabled for this object + Label cas_label; + int null_check_offset = -1; + if (!swap_reg_contains_mark) { + null_check_offset = offset(); + movptr(swap_reg, mark_addr); + } + if (need_tmp_reg) { + push(tmp_reg); + } + movptr(tmp_reg, swap_reg); + andptr(tmp_reg, markOopDesc::biased_lock_mask_in_place); + cmpptr(tmp_reg, markOopDesc::biased_lock_pattern); + if (need_tmp_reg) { + pop(tmp_reg); + } + jcc(Assembler::notEqual, cas_label); + // The bias pattern is present in the object's header. Need to check + // whether the bias owner and the epoch are both still current. +#ifndef _LP64 + // Note that because there is no current thread register on x86_32 we + // need to store off the mark word we read out of the object to + // avoid reloading it and needing to recheck invariants below. This + // store is unfortunate but it makes the overall code shorter and + // simpler. + movptr(saved_mark_addr, swap_reg); +#endif + if (need_tmp_reg) { + push(tmp_reg); + } + if (swap_reg_contains_mark) { + null_check_offset = offset(); + } + load_prototype_header(tmp_reg, obj_reg); +#ifdef _LP64 + orptr(tmp_reg, r15_thread); + xorptr(tmp_reg, swap_reg); + Register header_reg = tmp_reg; +#else + xorptr(tmp_reg, swap_reg); + get_thread(swap_reg); + xorptr(swap_reg, tmp_reg); + Register header_reg = swap_reg; +#endif + andptr(header_reg, ~((int) markOopDesc::age_mask_in_place)); + if (need_tmp_reg) { + pop(tmp_reg); + } + if (counters != NULL) { + cond_inc32(Assembler::zero, + ExternalAddress((address) counters->biased_lock_entry_count_addr())); + } + jcc(Assembler::equal, done); + + Label try_revoke_bias; + Label try_rebias; + + // At this point we know that the header has the bias pattern and + // that we are not the bias owner in the current epoch. We need to + // figure out more details about the state of the header in order to + // know what operations can be legally performed on the object's + // header. + + // If the low three bits in the xor result aren't clear, that means + // the prototype header is no longer biased and we have to revoke + // the bias on this object. + testptr(header_reg, markOopDesc::biased_lock_mask_in_place); + jccb(Assembler::notZero, try_revoke_bias); + + // Biasing is still enabled for this data type. See whether the + // epoch of the current bias is still valid, meaning that the epoch + // bits of the mark word are equal to the epoch bits of the + // prototype header. (Note that the prototype header's epoch bits + // only change at a safepoint.) If not, attempt to rebias the object + // toward the current thread. Note that we must be absolutely sure + // that the current epoch is invalid in order to do this because + // otherwise the manipulations it performs on the mark word are + // illegal. + testptr(header_reg, markOopDesc::epoch_mask_in_place); + jccb(Assembler::notZero, try_rebias); + + // The epoch of the current bias is still valid but we know nothing + // about the owner; it might be set or it might be clear. Try to + // acquire the bias of the object using an atomic operation. If this + // fails we will go in to the runtime to revoke the object's bias. + // Note that we first construct the presumed unbiased header so we + // don't accidentally blow away another thread's valid bias. + NOT_LP64( movptr(swap_reg, saved_mark_addr); ) + andptr(swap_reg, + markOopDesc::biased_lock_mask_in_place | markOopDesc::age_mask_in_place | markOopDesc::epoch_mask_in_place); + if (need_tmp_reg) { + push(tmp_reg); + } +#ifdef _LP64 + movptr(tmp_reg, swap_reg); + orptr(tmp_reg, r15_thread); +#else + get_thread(tmp_reg); + orptr(tmp_reg, swap_reg); +#endif + if (os::is_MP()) { + lock(); + } + cmpxchgptr(tmp_reg, mark_addr); // compare tmp_reg and swap_reg + if (need_tmp_reg) { + pop(tmp_reg); + } + // If the biasing toward our thread failed, this means that + // another thread succeeded in biasing it toward itself and we + // need to revoke that bias. The revocation will occur in the + // interpreter runtime in the slow case. + if (counters != NULL) { + cond_inc32(Assembler::zero, + ExternalAddress((address) counters->anonymously_biased_lock_entry_count_addr())); + } + if (slow_case != NULL) { + jcc(Assembler::notZero, *slow_case); + } + jmp(done); + + bind(try_rebias); + // At this point we know the epoch has expired, meaning that the + // current "bias owner", if any, is actually invalid. Under these + // circumstances _only_, we are allowed to use the current header's + // value as the comparison value when doing the cas to acquire the + // bias in the current epoch. In other words, we allow transfer of + // the bias from one thread to another directly in this situation. + // + // FIXME: due to a lack of registers we currently blow away the age + // bits in this situation. Should attempt to preserve them. + if (need_tmp_reg) { + push(tmp_reg); + } + load_prototype_header(tmp_reg, obj_reg); +#ifdef _LP64 + orptr(tmp_reg, r15_thread); +#else + get_thread(swap_reg); + orptr(tmp_reg, swap_reg); + movptr(swap_reg, saved_mark_addr); +#endif + if (os::is_MP()) { + lock(); + } + cmpxchgptr(tmp_reg, mark_addr); // compare tmp_reg and swap_reg + if (need_tmp_reg) { + pop(tmp_reg); + } + // If the biasing toward our thread failed, then another thread + // succeeded in biasing it toward itself and we need to revoke that + // bias. The revocation will occur in the runtime in the slow case. + if (counters != NULL) { + cond_inc32(Assembler::zero, + ExternalAddress((address) counters->rebiased_lock_entry_count_addr())); + } + if (slow_case != NULL) { + jcc(Assembler::notZero, *slow_case); + } + jmp(done); + + bind(try_revoke_bias); + // The prototype mark in the klass doesn't have the bias bit set any + // more, indicating that objects of this data type are not supposed + // to be biased any more. We are going to try to reset the mark of + // this object to the prototype value and fall through to the + // CAS-based locking scheme. Note that if our CAS fails, it means + // that another thread raced us for the privilege of revoking the + // bias of this particular object, so it's okay to continue in the + // normal locking code. + // + // FIXME: due to a lack of registers we currently blow away the age + // bits in this situation. Should attempt to preserve them. + NOT_LP64( movptr(swap_reg, saved_mark_addr); ) + if (need_tmp_reg) { + push(tmp_reg); + } + load_prototype_header(tmp_reg, obj_reg); + if (os::is_MP()) { + lock(); + } + cmpxchgptr(tmp_reg, mark_addr); // compare tmp_reg and swap_reg + if (need_tmp_reg) { + pop(tmp_reg); + } + // Fall through to the normal CAS-based lock, because no matter what + // the result of the above CAS, some thread must have succeeded in + // removing the bias bit from the object's header. + if (counters != NULL) { + cond_inc32(Assembler::zero, + ExternalAddress((address) counters->revoked_lock_entry_count_addr())); + } + + bind(cas_label); + + return null_check_offset; +} + void MacroAssembler::biased_locking_exit(Register obj_reg, Register temp_reg, Label& done) { assert(UseBiasedLocking, "why call this otherwise?"); @@ -1408,6 +1273,620 @@ void MacroAssembler::biased_locking_exit(Register obj_reg, Register temp_reg, La jcc(Assembler::equal, done); } +#ifdef COMPILER2 +// Fast_Lock and Fast_Unlock used by C2 + +// Because the transitions from emitted code to the runtime +// monitorenter/exit helper stubs are so slow it's critical that +// we inline both the stack-locking fast-path and the inflated fast path. +// +// See also: cmpFastLock and cmpFastUnlock. +// +// What follows is a specialized inline transliteration of the code +// in slow_enter() and slow_exit(). If we're concerned about I$ bloat +// another option would be to emit TrySlowEnter and TrySlowExit methods +// at startup-time. These methods would accept arguments as +// (rax,=Obj, rbx=Self, rcx=box, rdx=Scratch) and return success-failure +// indications in the icc.ZFlag. Fast_Lock and Fast_Unlock would simply +// marshal the arguments and emit calls to TrySlowEnter and TrySlowExit. +// In practice, however, the # of lock sites is bounded and is usually small. +// Besides the call overhead, TrySlowEnter and TrySlowExit might suffer +// if the processor uses simple bimodal branch predictors keyed by EIP +// Since the helper routines would be called from multiple synchronization +// sites. +// +// An even better approach would be write "MonitorEnter()" and "MonitorExit()" +// in java - using j.u.c and unsafe - and just bind the lock and unlock sites +// to those specialized methods. That'd give us a mostly platform-independent +// implementation that the JITs could optimize and inline at their pleasure. +// Done correctly, the only time we'd need to cross to native could would be +// to park() or unpark() threads. We'd also need a few more unsafe operators +// to (a) prevent compiler-JIT reordering of non-volatile accesses, and +// (b) explicit barriers or fence operations. +// +// TODO: +// +// * Arrange for C2 to pass "Self" into Fast_Lock and Fast_Unlock in one of the registers (scr). +// This avoids manifesting the Self pointer in the Fast_Lock and Fast_Unlock terminals. +// Given TLAB allocation, Self is usually manifested in a register, so passing it into +// the lock operators would typically be faster than reifying Self. +// +// * Ideally I'd define the primitives as: +// fast_lock (nax Obj, nax box, EAX tmp, nax scr) where box, tmp and scr are KILLED. +// fast_unlock (nax Obj, EAX box, nax tmp) where box and tmp are KILLED +// Unfortunately ADLC bugs prevent us from expressing the ideal form. +// Instead, we're stuck with a rather awkward and brittle register assignments below. +// Furthermore the register assignments are overconstrained, possibly resulting in +// sub-optimal code near the synchronization site. +// +// * Eliminate the sp-proximity tests and just use "== Self" tests instead. +// Alternately, use a better sp-proximity test. +// +// * Currently ObjectMonitor._Owner can hold either an sp value or a (THREAD *) value. +// Either one is sufficient to uniquely identify a thread. +// TODO: eliminate use of sp in _owner and use get_thread(tr) instead. +// +// * Intrinsify notify() and notifyAll() for the common cases where the +// object is locked by the calling thread but the waitlist is empty. +// avoid the expensive JNI call to JVM_Notify() and JVM_NotifyAll(). +// +// * use jccb and jmpb instead of jcc and jmp to improve code density. +// But beware of excessive branch density on AMD Opterons. +// +// * Both Fast_Lock and Fast_Unlock set the ICC.ZF to indicate success +// or failure of the fast-path. If the fast-path fails then we pass +// control to the slow-path, typically in C. In Fast_Lock and +// Fast_Unlock we often branch to DONE_LABEL, just to find that C2 +// will emit a conditional branch immediately after the node. +// So we have branches to branches and lots of ICC.ZF games. +// Instead, it might be better to have C2 pass a "FailureLabel" +// into Fast_Lock and Fast_Unlock. In the case of success, control +// will drop through the node. ICC.ZF is undefined at exit. +// In the case of failure, the node will branch directly to the +// FailureLabel + + +// obj: object to lock +// box: on-stack box address (displaced header location) - KILLED +// rax,: tmp -- KILLED +// scr: tmp -- KILLED +void MacroAssembler::fast_lock(Register objReg, Register boxReg, Register tmpReg, Register scrReg, BiasedLockingCounters* counters) { + // Ensure the register assignents are disjoint + guarantee (objReg != boxReg, ""); + guarantee (objReg != tmpReg, ""); + guarantee (objReg != scrReg, ""); + guarantee (boxReg != tmpReg, ""); + guarantee (boxReg != scrReg, ""); + guarantee (tmpReg == rax, ""); + + if (counters != NULL) { + atomic_incl(ExternalAddress((address)counters->total_entry_count_addr())); + } + if (EmitSync & 1) { + // set box->dhw = unused_mark (3) + // Force all sync thru slow-path: slow_enter() and slow_exit() + movptr (Address(boxReg, 0), (int32_t)intptr_t(markOopDesc::unused_mark())); + cmpptr (rsp, (int32_t)NULL_WORD); + } else + if (EmitSync & 2) { + Label DONE_LABEL ; + if (UseBiasedLocking) { + // Note: tmpReg maps to the swap_reg argument and scrReg to the tmp_reg argument. + biased_locking_enter(boxReg, objReg, tmpReg, scrReg, false, DONE_LABEL, NULL, counters); + } + + movptr(tmpReg, Address(objReg, 0)); // fetch markword + orptr (tmpReg, 0x1); + movptr(Address(boxReg, 0), tmpReg); // Anticipate successful CAS + if (os::is_MP()) { + lock(); + } + cmpxchgptr(boxReg, Address(objReg, 0)); // Updates tmpReg + jccb(Assembler::equal, DONE_LABEL); + // Recursive locking + subptr(tmpReg, rsp); + andptr(tmpReg, (int32_t) (NOT_LP64(0xFFFFF003) LP64_ONLY(7 - os::vm_page_size())) ); + movptr(Address(boxReg, 0), tmpReg); + bind(DONE_LABEL); + } else { + // Possible cases that we'll encounter in fast_lock + // ------------------------------------------------ + // * Inflated + // -- unlocked + // -- Locked + // = by self + // = by other + // * biased + // -- by Self + // -- by other + // * neutral + // * stack-locked + // -- by self + // = sp-proximity test hits + // = sp-proximity test generates false-negative + // -- by other + // + + Label IsInflated, DONE_LABEL; + + // it's stack-locked, biased or neutral + // TODO: optimize away redundant LDs of obj->mark and improve the markword triage + // order to reduce the number of conditional branches in the most common cases. + // Beware -- there's a subtle invariant that fetch of the markword + // at [FETCH], below, will never observe a biased encoding (*101b). + // If this invariant is not held we risk exclusion (safety) failure. + if (UseBiasedLocking && !UseOptoBiasInlining) { + biased_locking_enter(boxReg, objReg, tmpReg, scrReg, true, DONE_LABEL, NULL, counters); + } + + movptr(tmpReg, Address(objReg, 0)); // [FETCH] + testl (tmpReg, markOopDesc::monitor_value); // inflated vs stack-locked|neutral|biased + jccb (Assembler::notZero, IsInflated); + + // Attempt stack-locking ... + orptr (tmpReg, 0x1); + movptr(Address(boxReg, 0), tmpReg); // Anticipate successful CAS + if (os::is_MP()) { + lock(); + } + cmpxchgptr(boxReg, Address(objReg, 0)); // Updates tmpReg + if (counters != NULL) { + cond_inc32(Assembler::equal, + ExternalAddress((address)counters->fast_path_entry_count_addr())); + } + jccb(Assembler::equal, DONE_LABEL); + + // Recursive locking + subptr(tmpReg, rsp); + andptr(tmpReg, (int32_t) (NOT_LP64(0xFFFFF003) LP64_ONLY(7 - os::vm_page_size())) ); + movptr(Address(boxReg, 0), tmpReg); + if (counters != NULL) { + cond_inc32(Assembler::equal, + ExternalAddress((address)counters->fast_path_entry_count_addr())); + } + jmpb(DONE_LABEL); + + bind(IsInflated); +#ifndef _LP64 + // The object is inflated. + // + // TODO-FIXME: eliminate the ugly use of manifest constants: + // Use markOopDesc::monitor_value instead of "2". + // use markOop::unused_mark() instead of "3". + // The tmpReg value is an objectMonitor reference ORed with + // markOopDesc::monitor_value (2). We can either convert tmpReg to an + // objectmonitor pointer by masking off the "2" bit or we can just + // use tmpReg as an objectmonitor pointer but bias the objectmonitor + // field offsets with "-2" to compensate for and annul the low-order tag bit. + // + // I use the latter as it avoids AGI stalls. + // As such, we write "mov r, [tmpReg+OFFSETOF(Owner)-2]" + // instead of "mov r, [tmpReg+OFFSETOF(Owner)]". + // + #define OFFSET_SKEWED(f) ((ObjectMonitor::f ## _offset_in_bytes())-2) + + // boxReg refers to the on-stack BasicLock in the current frame. + // We'd like to write: + // set box->_displaced_header = markOop::unused_mark(). Any non-0 value suffices. + // This is convenient but results a ST-before-CAS penalty. The following CAS suffers + // additional latency as we have another ST in the store buffer that must drain. + + if (EmitSync & 8192) { + movptr(Address(boxReg, 0), 3); // results in ST-before-CAS penalty + get_thread (scrReg); + movptr(boxReg, tmpReg); // consider: LEA box, [tmp-2] + movptr(tmpReg, NULL_WORD); // consider: xor vs mov + if (os::is_MP()) { + lock(); + } + cmpxchgptr(scrReg, Address(boxReg, ObjectMonitor::owner_offset_in_bytes()-2)); + } else + if ((EmitSync & 128) == 0) { // avoid ST-before-CAS + movptr(scrReg, boxReg); + movptr(boxReg, tmpReg); // consider: LEA box, [tmp-2] + + // Using a prefetchw helps avoid later RTS->RTO upgrades and cache probes + if ((EmitSync & 2048) && VM_Version::supports_3dnow_prefetch() && os::is_MP()) { + // prefetchw [eax + Offset(_owner)-2] + prefetchw(Address(tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)); + } + + if ((EmitSync & 64) == 0) { + // Optimistic form: consider XORL tmpReg,tmpReg + movptr(tmpReg, NULL_WORD); + } else { + // Can suffer RTS->RTO upgrades on shared or cold $ lines + // Test-And-CAS instead of CAS + movptr(tmpReg, Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)); // rax, = m->_owner + testptr(tmpReg, tmpReg); // Locked ? + jccb (Assembler::notZero, DONE_LABEL); + } + + // Appears unlocked - try to swing _owner from null to non-null. + // Ideally, I'd manifest "Self" with get_thread and then attempt + // to CAS the register containing Self into m->Owner. + // But we don't have enough registers, so instead we can either try to CAS + // rsp or the address of the box (in scr) into &m->owner. If the CAS succeeds + // we later store "Self" into m->Owner. Transiently storing a stack address + // (rsp or the address of the box) into m->owner is harmless. + // Invariant: tmpReg == 0. tmpReg is EAX which is the implicit cmpxchg comparand. + if (os::is_MP()) { + lock(); + } + cmpxchgptr(scrReg, Address(boxReg, ObjectMonitor::owner_offset_in_bytes()-2)); + movptr(Address(scrReg, 0), 3); // box->_displaced_header = 3 + jccb (Assembler::notZero, DONE_LABEL); + get_thread (scrReg); // beware: clobbers ICCs + movptr(Address(boxReg, ObjectMonitor::owner_offset_in_bytes()-2), scrReg); + xorptr(boxReg, boxReg); // set icc.ZFlag = 1 to indicate success + + // If the CAS fails we can either retry or pass control to the slow-path. + // We use the latter tactic. + // Pass the CAS result in the icc.ZFlag into DONE_LABEL + // If the CAS was successful ... + // Self has acquired the lock + // Invariant: m->_recursions should already be 0, so we don't need to explicitly set it. + // Intentional fall-through into DONE_LABEL ... + } else { + movptr(Address(boxReg, 0), intptr_t(markOopDesc::unused_mark())); // results in ST-before-CAS penalty + movptr(boxReg, tmpReg); + + // Using a prefetchw helps avoid later RTS->RTO upgrades and cache probes + if ((EmitSync & 2048) && VM_Version::supports_3dnow_prefetch() && os::is_MP()) { + // prefetchw [eax + Offset(_owner)-2] + prefetchw(Address(tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)); + } + + if ((EmitSync & 64) == 0) { + // Optimistic form + xorptr (tmpReg, tmpReg); + } else { + // Can suffer RTS->RTO upgrades on shared or cold $ lines + movptr(tmpReg, Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)); // rax, = m->_owner + testptr(tmpReg, tmpReg); // Locked ? + jccb (Assembler::notZero, DONE_LABEL); + } + + // Appears unlocked - try to swing _owner from null to non-null. + // Use either "Self" (in scr) or rsp as thread identity in _owner. + // Invariant: tmpReg == 0. tmpReg is EAX which is the implicit cmpxchg comparand. + get_thread (scrReg); + if (os::is_MP()) { + lock(); + } + cmpxchgptr(scrReg, Address(boxReg, ObjectMonitor::owner_offset_in_bytes()-2)); + + // If the CAS fails we can either retry or pass control to the slow-path. + // We use the latter tactic. + // Pass the CAS result in the icc.ZFlag into DONE_LABEL + // If the CAS was successful ... + // Self has acquired the lock + // Invariant: m->_recursions should already be 0, so we don't need to explicitly set it. + // Intentional fall-through into DONE_LABEL ... + } +#else // _LP64 + // It's inflated + + // TODO: someday avoid the ST-before-CAS penalty by + // relocating (deferring) the following ST. + // We should also think about trying a CAS without having + // fetched _owner. If the CAS is successful we may + // avoid an RTO->RTS upgrade on the $line. + + // Without cast to int32_t a movptr will destroy r10 which is typically obj + movptr(Address(boxReg, 0), (int32_t)intptr_t(markOopDesc::unused_mark())); + + mov (boxReg, tmpReg); + movptr (tmpReg, Address(boxReg, ObjectMonitor::owner_offset_in_bytes()-2)); + testptr(tmpReg, tmpReg); + jccb (Assembler::notZero, DONE_LABEL); + + // It's inflated and appears unlocked + if (os::is_MP()) { + lock(); + } + cmpxchgptr(r15_thread, Address(boxReg, ObjectMonitor::owner_offset_in_bytes()-2)); + // Intentional fall-through into DONE_LABEL ... + +#endif + + // DONE_LABEL is a hot target - we'd really like to place it at the + // start of cache line by padding with NOPs. + // See the AMD and Intel software optimization manuals for the + // most efficient "long" NOP encodings. + // Unfortunately none of our alignment mechanisms suffice. + bind(DONE_LABEL); + + // At DONE_LABEL the icc ZFlag is set as follows ... + // Fast_Unlock uses the same protocol. + // ZFlag == 1 -> Success + // ZFlag == 0 -> Failure - force control through the slow-path + } +} + +// obj: object to unlock +// box: box address (displaced header location), killed. Must be EAX. +// tmp: killed, cannot be obj nor box. +// +// Some commentary on balanced locking: +// +// Fast_Lock and Fast_Unlock are emitted only for provably balanced lock sites. +// Methods that don't have provably balanced locking are forced to run in the +// interpreter - such methods won't be compiled to use fast_lock and fast_unlock. +// The interpreter provides two properties: +// I1: At return-time the interpreter automatically and quietly unlocks any +// objects acquired the current activation (frame). Recall that the +// interpreter maintains an on-stack list of locks currently held by +// a frame. +// I2: If a method attempts to unlock an object that is not held by the +// the frame the interpreter throws IMSX. +// +// Lets say A(), which has provably balanced locking, acquires O and then calls B(). +// B() doesn't have provably balanced locking so it runs in the interpreter. +// Control returns to A() and A() unlocks O. By I1 and I2, above, we know that O +// is still locked by A(). +// +// The only other source of unbalanced locking would be JNI. The "Java Native Interface: +// Programmer's Guide and Specification" claims that an object locked by jni_monitorenter +// should not be unlocked by "normal" java-level locking and vice-versa. The specification +// doesn't specify what will occur if a program engages in such mixed-mode locking, however. + +void MacroAssembler::fast_unlock(Register objReg, Register boxReg, Register tmpReg) { + guarantee (objReg != boxReg, ""); + guarantee (objReg != tmpReg, ""); + guarantee (boxReg != tmpReg, ""); + guarantee (boxReg == rax, ""); + + if (EmitSync & 4) { + // Disable - inhibit all inlining. Force control through the slow-path + cmpptr (rsp, 0); + } else + if (EmitSync & 8) { + Label DONE_LABEL; + if (UseBiasedLocking) { + biased_locking_exit(objReg, tmpReg, DONE_LABEL); + } + // Classic stack-locking code ... + // Check whether the displaced header is 0 + //(=> recursive unlock) + movptr(tmpReg, Address(boxReg, 0)); + testptr(tmpReg, tmpReg); + jccb(Assembler::zero, DONE_LABEL); + // If not recursive lock, reset the header to displaced header + if (os::is_MP()) { + lock(); + } + cmpxchgptr(tmpReg, Address(objReg, 0)); // Uses RAX which is box + bind(DONE_LABEL); + } else { + Label DONE_LABEL, Stacked, CheckSucc; + + // Critically, the biased locking test must have precedence over + // and appear before the (box->dhw == 0) recursive stack-lock test. + if (UseBiasedLocking && !UseOptoBiasInlining) { + biased_locking_exit(objReg, tmpReg, DONE_LABEL); + } + + cmpptr(Address(boxReg, 0), (int32_t)NULL_WORD); // Examine the displaced header + movptr(tmpReg, Address(objReg, 0)); // Examine the object's markword + jccb (Assembler::zero, DONE_LABEL); // 0 indicates recursive stack-lock + + testptr(tmpReg, 0x02); // Inflated? + jccb (Assembler::zero, Stacked); + + // It's inflated. + // Despite our balanced locking property we still check that m->_owner == Self + // as java routines or native JNI code called by this thread might + // have released the lock. + // Refer to the comments in synchronizer.cpp for how we might encode extra + // state in _succ so we can avoid fetching EntryList|cxq. + // + // I'd like to add more cases in fast_lock() and fast_unlock() -- + // such as recursive enter and exit -- but we have to be wary of + // I$ bloat, T$ effects and BP$ effects. + // + // If there's no contention try a 1-0 exit. That is, exit without + // a costly MEMBAR or CAS. See synchronizer.cpp for details on how + // we detect and recover from the race that the 1-0 exit admits. + // + // Conceptually Fast_Unlock() must execute a STST|LDST "release" barrier + // before it STs null into _owner, releasing the lock. Updates + // to data protected by the critical section must be visible before + // we drop the lock (and thus before any other thread could acquire + // the lock and observe the fields protected by the lock). + // IA32's memory-model is SPO, so STs are ordered with respect to + // each other and there's no need for an explicit barrier (fence). + // See also http://gee.cs.oswego.edu/dl/jmm/cookbook.html. +#ifndef _LP64 + get_thread (boxReg); + if ((EmitSync & 4096) && VM_Version::supports_3dnow_prefetch() && os::is_MP()) { + // prefetchw [ebx + Offset(_owner)-2] + prefetchw(Address(tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)); + } + + // Note that we could employ various encoding schemes to reduce + // the number of loads below (currently 4) to just 2 or 3. + // Refer to the comments in synchronizer.cpp. + // In practice the chain of fetches doesn't seem to impact performance, however. + if ((EmitSync & 65536) == 0 && (EmitSync & 256)) { + // Attempt to reduce branch density - AMD's branch predictor. + xorptr(boxReg, Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)); + orptr(boxReg, Address (tmpReg, ObjectMonitor::recursions_offset_in_bytes()-2)); + orptr(boxReg, Address (tmpReg, ObjectMonitor::EntryList_offset_in_bytes()-2)); + orptr(boxReg, Address (tmpReg, ObjectMonitor::cxq_offset_in_bytes()-2)); + jccb (Assembler::notZero, DONE_LABEL); + movptr(Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2), NULL_WORD); + jmpb (DONE_LABEL); + } else { + xorptr(boxReg, Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)); + orptr(boxReg, Address (tmpReg, ObjectMonitor::recursions_offset_in_bytes()-2)); + jccb (Assembler::notZero, DONE_LABEL); + movptr(boxReg, Address (tmpReg, ObjectMonitor::EntryList_offset_in_bytes()-2)); + orptr(boxReg, Address (tmpReg, ObjectMonitor::cxq_offset_in_bytes()-2)); + jccb (Assembler::notZero, CheckSucc); + movptr(Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2), NULL_WORD); + jmpb (DONE_LABEL); + } + + // The Following code fragment (EmitSync & 65536) improves the performance of + // contended applications and contended synchronization microbenchmarks. + // Unfortunately the emission of the code - even though not executed - causes regressions + // in scimark and jetstream, evidently because of $ effects. Replacing the code + // with an equal number of never-executed NOPs results in the same regression. + // We leave it off by default. + + if ((EmitSync & 65536) != 0) { + Label LSuccess, LGoSlowPath ; + + bind (CheckSucc); + + // Optional pre-test ... it's safe to elide this + if ((EmitSync & 16) == 0) { + cmpptr(Address (tmpReg, ObjectMonitor::succ_offset_in_bytes()-2), (int32_t)NULL_WORD); + jccb (Assembler::zero, LGoSlowPath); + } + + // We have a classic Dekker-style idiom: + // ST m->_owner = 0 ; MEMBAR; LD m->_succ + // There are a number of ways to implement the barrier: + // (1) lock:andl &m->_owner, 0 + // is fast, but mask doesn't currently support the "ANDL M,IMM32" form. + // LOCK: ANDL [ebx+Offset(_Owner)-2], 0 + // Encodes as 81 31 OFF32 IMM32 or 83 63 OFF8 IMM8 + // (2) If supported, an explicit MFENCE is appealing. + // In older IA32 processors MFENCE is slower than lock:add or xchg + // particularly if the write-buffer is full as might be the case if + // if stores closely precede the fence or fence-equivalent instruction. + // In more modern implementations MFENCE appears faster, however. + // (3) In lieu of an explicit fence, use lock:addl to the top-of-stack + // The $lines underlying the top-of-stack should be in M-state. + // The locked add instruction is serializing, of course. + // (4) Use xchg, which is serializing + // mov boxReg, 0; xchgl boxReg, [tmpReg + Offset(_owner)-2] also works + // (5) ST m->_owner = 0 and then execute lock:orl &m->_succ, 0. + // The integer condition codes will tell us if succ was 0. + // Since _succ and _owner should reside in the same $line and + // we just stored into _owner, it's likely that the $line + // remains in M-state for the lock:orl. + // + // We currently use (3), although it's likely that switching to (2) + // is correct for the future. + + movptr(Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2), NULL_WORD); + if (os::is_MP()) { + if (VM_Version::supports_sse2() && 1 == FenceInstruction) { + mfence(); + } else { + lock (); addptr(Address(rsp, 0), 0); + } + } + // Ratify _succ remains non-null + cmpptr(Address (tmpReg, ObjectMonitor::succ_offset_in_bytes()-2), 0); + jccb (Assembler::notZero, LSuccess); + + xorptr(boxReg, boxReg); // box is really EAX + if (os::is_MP()) { lock(); } + cmpxchgptr(rsp, Address(tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)); + jccb (Assembler::notEqual, LSuccess); + // Since we're low on registers we installed rsp as a placeholding in _owner. + // Now install Self over rsp. This is safe as we're transitioning from + // non-null to non=null + get_thread (boxReg); + movptr(Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2), boxReg); + // Intentional fall-through into LGoSlowPath ... + + bind (LGoSlowPath); + orptr(boxReg, 1); // set ICC.ZF=0 to indicate failure + jmpb (DONE_LABEL); + + bind (LSuccess); + xorptr(boxReg, boxReg); // set ICC.ZF=1 to indicate success + jmpb (DONE_LABEL); + } + + bind (Stacked); + // It's not inflated and it's not recursively stack-locked and it's not biased. + // It must be stack-locked. + // Try to reset the header to displaced header. + // The "box" value on the stack is stable, so we can reload + // and be assured we observe the same value as above. + movptr(tmpReg, Address(boxReg, 0)); + if (os::is_MP()) { + lock(); + } + cmpxchgptr(tmpReg, Address(objReg, 0)); // Uses RAX which is box + // Intention fall-thru into DONE_LABEL + + // DONE_LABEL is a hot target - we'd really like to place it at the + // start of cache line by padding with NOPs. + // See the AMD and Intel software optimization manuals for the + // most efficient "long" NOP encodings. + // Unfortunately none of our alignment mechanisms suffice. + if ((EmitSync & 65536) == 0) { + bind (CheckSucc); + } +#else // _LP64 + // It's inflated + movptr(boxReg, Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)); + xorptr(boxReg, r15_thread); + orptr (boxReg, Address (tmpReg, ObjectMonitor::recursions_offset_in_bytes()-2)); + jccb (Assembler::notZero, DONE_LABEL); + movptr(boxReg, Address (tmpReg, ObjectMonitor::cxq_offset_in_bytes()-2)); + orptr (boxReg, Address (tmpReg, ObjectMonitor::EntryList_offset_in_bytes()-2)); + jccb (Assembler::notZero, CheckSucc); + movptr(Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2), (int32_t)NULL_WORD); + jmpb (DONE_LABEL); + + if ((EmitSync & 65536) == 0) { + Label LSuccess, LGoSlowPath ; + bind (CheckSucc); + cmpptr(Address (tmpReg, ObjectMonitor::succ_offset_in_bytes()-2), (int32_t)NULL_WORD); + jccb (Assembler::zero, LGoSlowPath); + + // I'd much rather use lock:andl m->_owner, 0 as it's faster than the + // the explicit ST;MEMBAR combination, but masm doesn't currently support + // "ANDQ M,IMM". Don't use MFENCE here. lock:add to TOS, xchg, etc + // are all faster when the write buffer is populated. + movptr (Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2), (int32_t)NULL_WORD); + if (os::is_MP()) { + lock (); addl (Address(rsp, 0), 0); + } + cmpptr(Address (tmpReg, ObjectMonitor::succ_offset_in_bytes()-2), (int32_t)NULL_WORD); + jccb (Assembler::notZero, LSuccess); + + movptr (boxReg, (int32_t)NULL_WORD); // box is really EAX + if (os::is_MP()) { lock(); } + cmpxchgptr(r15_thread, Address(tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)); + jccb (Assembler::notEqual, LSuccess); + // Intentional fall-through into slow-path + + bind (LGoSlowPath); + orl (boxReg, 1); // set ICC.ZF=0 to indicate failure + jmpb (DONE_LABEL); + + bind (LSuccess); + testl (boxReg, 0); // set ICC.ZF=1 to indicate success + jmpb (DONE_LABEL); + } + + bind (Stacked); + movptr(tmpReg, Address (boxReg, 0)); // re-fetch + if (os::is_MP()) { lock(); } + cmpxchgptr(tmpReg, Address(objReg, 0)); // Uses RAX which is box + + if (EmitSync & 65536) { + bind (CheckSucc); + } +#endif + bind(DONE_LABEL); + // Avoid branch to branch on AMD processors + if (EmitSync & 32768) { + nop(); + } + } +} +#endif // COMPILER2 + void MacroAssembler::c2bool(Register x) { // implements x == 0 ? 0 : 1 // note: must only look at least-significant byte of x diff --git a/hotspot/src/cpu/x86/vm/macroAssembler_x86.hpp b/hotspot/src/cpu/x86/vm/macroAssembler_x86.hpp index 198fc98e86a..6ac95774ba9 100644 --- a/hotspot/src/cpu/x86/vm/macroAssembler_x86.hpp +++ b/hotspot/src/cpu/x86/vm/macroAssembler_x86.hpp @@ -651,7 +651,12 @@ class MacroAssembler: public Assembler { Label& done, Label* slow_case = NULL, BiasedLockingCounters* counters = NULL); void biased_locking_exit (Register obj_reg, Register temp_reg, Label& done); - +#ifdef COMPILER2 + // Code used by cmpFastLock and cmpFastUnlock mach instructions in .ad file. + // See full desription in macroAssembler_x86.cpp. + void fast_lock(Register obj, Register box, Register tmp, Register scr, BiasedLockingCounters* counters); + void fast_unlock(Register obj, Register box, Register tmp); +#endif Condition negate_condition(Condition cond); diff --git a/hotspot/src/cpu/x86/vm/x86_32.ad b/hotspot/src/cpu/x86/vm/x86_32.ad index cc0dfaa110f..8948682a99f 100644 --- a/hotspot/src/cpu/x86/vm/x86_32.ad +++ b/hotspot/src/cpu/x86/vm/x86_32.ad @@ -1542,19 +1542,6 @@ const RegMask Matcher::method_handle_invoke_SP_save_mask() { return EBP_REG_mask(); } -const RegMask Matcher::mathExactI_result_proj_mask() { - return EAX_REG_mask(); -} - -const RegMask Matcher::mathExactL_result_proj_mask() { - ShouldNotReachHere(); - return RegMask(); -} - -const RegMask Matcher::mathExactI_flags_proj_mask() { - return INT_FLAGS_mask(); -} - // Returns true if the high 32 bits of the value is known to be zero. bool is_operand_hi32_zero(Node* n) { int opc = n->Opcode(); @@ -2918,542 +2905,6 @@ encode %{ emit_d8 (cbuf,0 ); %} - - // Because the transitions from emitted code to the runtime - // monitorenter/exit helper stubs are so slow it's critical that - // we inline both the stack-locking fast-path and the inflated fast path. - // - // See also: cmpFastLock and cmpFastUnlock. - // - // What follows is a specialized inline transliteration of the code - // in slow_enter() and slow_exit(). If we're concerned about I$ bloat - // another option would be to emit TrySlowEnter and TrySlowExit methods - // at startup-time. These methods would accept arguments as - // (rax,=Obj, rbx=Self, rcx=box, rdx=Scratch) and return success-failure - // indications in the icc.ZFlag. Fast_Lock and Fast_Unlock would simply - // marshal the arguments and emit calls to TrySlowEnter and TrySlowExit. - // In practice, however, the # of lock sites is bounded and is usually small. - // Besides the call overhead, TrySlowEnter and TrySlowExit might suffer - // if the processor uses simple bimodal branch predictors keyed by EIP - // Since the helper routines would be called from multiple synchronization - // sites. - // - // An even better approach would be write "MonitorEnter()" and "MonitorExit()" - // in java - using j.u.c and unsafe - and just bind the lock and unlock sites - // to those specialized methods. That'd give us a mostly platform-independent - // implementation that the JITs could optimize and inline at their pleasure. - // Done correctly, the only time we'd need to cross to native could would be - // to park() or unpark() threads. We'd also need a few more unsafe operators - // to (a) prevent compiler-JIT reordering of non-volatile accesses, and - // (b) explicit barriers or fence operations. - // - // TODO: - // - // * Arrange for C2 to pass "Self" into Fast_Lock and Fast_Unlock in one of the registers (scr). - // This avoids manifesting the Self pointer in the Fast_Lock and Fast_Unlock terminals. - // Given TLAB allocation, Self is usually manifested in a register, so passing it into - // the lock operators would typically be faster than reifying Self. - // - // * Ideally I'd define the primitives as: - // fast_lock (nax Obj, nax box, EAX tmp, nax scr) where box, tmp and scr are KILLED. - // fast_unlock (nax Obj, EAX box, nax tmp) where box and tmp are KILLED - // Unfortunately ADLC bugs prevent us from expressing the ideal form. - // Instead, we're stuck with a rather awkward and brittle register assignments below. - // Furthermore the register assignments are overconstrained, possibly resulting in - // sub-optimal code near the synchronization site. - // - // * Eliminate the sp-proximity tests and just use "== Self" tests instead. - // Alternately, use a better sp-proximity test. - // - // * Currently ObjectMonitor._Owner can hold either an sp value or a (THREAD *) value. - // Either one is sufficient to uniquely identify a thread. - // TODO: eliminate use of sp in _owner and use get_thread(tr) instead. - // - // * Intrinsify notify() and notifyAll() for the common cases where the - // object is locked by the calling thread but the waitlist is empty. - // avoid the expensive JNI call to JVM_Notify() and JVM_NotifyAll(). - // - // * use jccb and jmpb instead of jcc and jmp to improve code density. - // But beware of excessive branch density on AMD Opterons. - // - // * Both Fast_Lock and Fast_Unlock set the ICC.ZF to indicate success - // or failure of the fast-path. If the fast-path fails then we pass - // control to the slow-path, typically in C. In Fast_Lock and - // Fast_Unlock we often branch to DONE_LABEL, just to find that C2 - // will emit a conditional branch immediately after the node. - // So we have branches to branches and lots of ICC.ZF games. - // Instead, it might be better to have C2 pass a "FailureLabel" - // into Fast_Lock and Fast_Unlock. In the case of success, control - // will drop through the node. ICC.ZF is undefined at exit. - // In the case of failure, the node will branch directly to the - // FailureLabel - - - // obj: object to lock - // box: on-stack box address (displaced header location) - KILLED - // rax,: tmp -- KILLED - // scr: tmp -- KILLED - enc_class Fast_Lock( eRegP obj, eRegP box, eAXRegI tmp, eRegP scr ) %{ - - Register objReg = as_Register($obj$$reg); - Register boxReg = as_Register($box$$reg); - Register tmpReg = as_Register($tmp$$reg); - Register scrReg = as_Register($scr$$reg); - - // Ensure the register assignents are disjoint - guarantee (objReg != boxReg, "") ; - guarantee (objReg != tmpReg, "") ; - guarantee (objReg != scrReg, "") ; - guarantee (boxReg != tmpReg, "") ; - guarantee (boxReg != scrReg, "") ; - guarantee (tmpReg == as_Register(EAX_enc), "") ; - - MacroAssembler masm(&cbuf); - - if (_counters != NULL) { - masm.atomic_incl(ExternalAddress((address) _counters->total_entry_count_addr())); - } - if (EmitSync & 1) { - // set box->dhw = unused_mark (3) - // Force all sync thru slow-path: slow_enter() and slow_exit() - masm.movptr (Address(boxReg, 0), int32_t(markOopDesc::unused_mark())) ; - masm.cmpptr (rsp, (int32_t)0) ; - } else - if (EmitSync & 2) { - Label DONE_LABEL ; - if (UseBiasedLocking) { - // Note: tmpReg maps to the swap_reg argument and scrReg to the tmp_reg argument. - masm.biased_locking_enter(boxReg, objReg, tmpReg, scrReg, false, DONE_LABEL, NULL, _counters); - } - - masm.movptr(tmpReg, Address(objReg, 0)) ; // fetch markword - masm.orptr (tmpReg, 0x1); - masm.movptr(Address(boxReg, 0), tmpReg); // Anticipate successful CAS - if (os::is_MP()) { masm.lock(); } - masm.cmpxchgptr(boxReg, Address(objReg, 0)); // Updates tmpReg - masm.jcc(Assembler::equal, DONE_LABEL); - // Recursive locking - masm.subptr(tmpReg, rsp); - masm.andptr(tmpReg, (int32_t) 0xFFFFF003 ); - masm.movptr(Address(boxReg, 0), tmpReg); - masm.bind(DONE_LABEL) ; - } else { - // Possible cases that we'll encounter in fast_lock - // ------------------------------------------------ - // * Inflated - // -- unlocked - // -- Locked - // = by self - // = by other - // * biased - // -- by Self - // -- by other - // * neutral - // * stack-locked - // -- by self - // = sp-proximity test hits - // = sp-proximity test generates false-negative - // -- by other - // - - Label IsInflated, DONE_LABEL, PopDone ; - - // TODO: optimize away redundant LDs of obj->mark and improve the markword triage - // order to reduce the number of conditional branches in the most common cases. - // Beware -- there's a subtle invariant that fetch of the markword - // at [FETCH], below, will never observe a biased encoding (*101b). - // If this invariant is not held we risk exclusion (safety) failure. - if (UseBiasedLocking && !UseOptoBiasInlining) { - masm.biased_locking_enter(boxReg, objReg, tmpReg, scrReg, false, DONE_LABEL, NULL, _counters); - } - - masm.movptr(tmpReg, Address(objReg, 0)) ; // [FETCH] - masm.testptr(tmpReg, 0x02) ; // Inflated v (Stack-locked or neutral) - masm.jccb (Assembler::notZero, IsInflated) ; - - // Attempt stack-locking ... - masm.orptr (tmpReg, 0x1); - masm.movptr(Address(boxReg, 0), tmpReg); // Anticipate successful CAS - if (os::is_MP()) { masm.lock(); } - masm.cmpxchgptr(boxReg, Address(objReg, 0)); // Updates tmpReg - if (_counters != NULL) { - masm.cond_inc32(Assembler::equal, - ExternalAddress((address)_counters->fast_path_entry_count_addr())); - } - masm.jccb (Assembler::equal, DONE_LABEL); - - // Recursive locking - masm.subptr(tmpReg, rsp); - masm.andptr(tmpReg, 0xFFFFF003 ); - masm.movptr(Address(boxReg, 0), tmpReg); - if (_counters != NULL) { - masm.cond_inc32(Assembler::equal, - ExternalAddress((address)_counters->fast_path_entry_count_addr())); - } - masm.jmp (DONE_LABEL) ; - - masm.bind (IsInflated) ; - - // The object is inflated. - // - // TODO-FIXME: eliminate the ugly use of manifest constants: - // Use markOopDesc::monitor_value instead of "2". - // use markOop::unused_mark() instead of "3". - // The tmpReg value is an objectMonitor reference ORed with - // markOopDesc::monitor_value (2). We can either convert tmpReg to an - // objectmonitor pointer by masking off the "2" bit or we can just - // use tmpReg as an objectmonitor pointer but bias the objectmonitor - // field offsets with "-2" to compensate for and annul the low-order tag bit. - // - // I use the latter as it avoids AGI stalls. - // As such, we write "mov r, [tmpReg+OFFSETOF(Owner)-2]" - // instead of "mov r, [tmpReg+OFFSETOF(Owner)]". - // - #define OFFSET_SKEWED(f) ((ObjectMonitor::f ## _offset_in_bytes())-2) - - // boxReg refers to the on-stack BasicLock in the current frame. - // We'd like to write: - // set box->_displaced_header = markOop::unused_mark(). Any non-0 value suffices. - // This is convenient but results a ST-before-CAS penalty. The following CAS suffers - // additional latency as we have another ST in the store buffer that must drain. - - if (EmitSync & 8192) { - masm.movptr(Address(boxReg, 0), 3) ; // results in ST-before-CAS penalty - masm.get_thread (scrReg) ; - masm.movptr(boxReg, tmpReg); // consider: LEA box, [tmp-2] - masm.movptr(tmpReg, NULL_WORD); // consider: xor vs mov - if (os::is_MP()) { masm.lock(); } - masm.cmpxchgptr(scrReg, Address(boxReg, ObjectMonitor::owner_offset_in_bytes()-2)) ; - } else - if ((EmitSync & 128) == 0) { // avoid ST-before-CAS - masm.movptr(scrReg, boxReg) ; - masm.movptr(boxReg, tmpReg); // consider: LEA box, [tmp-2] - - // Using a prefetchw helps avoid later RTS->RTO upgrades and cache probes - if ((EmitSync & 2048) && VM_Version::supports_3dnow_prefetch() && os::is_MP()) { - // prefetchw [eax + Offset(_owner)-2] - masm.prefetchw(Address(rax, ObjectMonitor::owner_offset_in_bytes()-2)); - } - - if ((EmitSync & 64) == 0) { - // Optimistic form: consider XORL tmpReg,tmpReg - masm.movptr(tmpReg, NULL_WORD) ; - } else { - // Can suffer RTS->RTO upgrades on shared or cold $ lines - // Test-And-CAS instead of CAS - masm.movptr(tmpReg, Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)) ; // rax, = m->_owner - masm.testptr(tmpReg, tmpReg) ; // Locked ? - masm.jccb (Assembler::notZero, DONE_LABEL) ; - } - - // Appears unlocked - try to swing _owner from null to non-null. - // Ideally, I'd manifest "Self" with get_thread and then attempt - // to CAS the register containing Self into m->Owner. - // But we don't have enough registers, so instead we can either try to CAS - // rsp or the address of the box (in scr) into &m->owner. If the CAS succeeds - // we later store "Self" into m->Owner. Transiently storing a stack address - // (rsp or the address of the box) into m->owner is harmless. - // Invariant: tmpReg == 0. tmpReg is EAX which is the implicit cmpxchg comparand. - if (os::is_MP()) { masm.lock(); } - masm.cmpxchgptr(scrReg, Address(boxReg, ObjectMonitor::owner_offset_in_bytes()-2)) ; - masm.movptr(Address(scrReg, 0), 3) ; // box->_displaced_header = 3 - masm.jccb (Assembler::notZero, DONE_LABEL) ; - masm.get_thread (scrReg) ; // beware: clobbers ICCs - masm.movptr(Address(boxReg, ObjectMonitor::owner_offset_in_bytes()-2), scrReg) ; - masm.xorptr(boxReg, boxReg) ; // set icc.ZFlag = 1 to indicate success - - // If the CAS fails we can either retry or pass control to the slow-path. - // We use the latter tactic. - // Pass the CAS result in the icc.ZFlag into DONE_LABEL - // If the CAS was successful ... - // Self has acquired the lock - // Invariant: m->_recursions should already be 0, so we don't need to explicitly set it. - // Intentional fall-through into DONE_LABEL ... - } else { - masm.movptr(Address(boxReg, 0), 3) ; // results in ST-before-CAS penalty - masm.movptr(boxReg, tmpReg) ; - - // Using a prefetchw helps avoid later RTS->RTO upgrades and cache probes - if ((EmitSync & 2048) && VM_Version::supports_3dnow_prefetch() && os::is_MP()) { - // prefetchw [eax + Offset(_owner)-2] - masm.prefetchw(Address(rax, ObjectMonitor::owner_offset_in_bytes()-2)); - } - - if ((EmitSync & 64) == 0) { - // Optimistic form - masm.xorptr (tmpReg, tmpReg) ; - } else { - // Can suffer RTS->RTO upgrades on shared or cold $ lines - masm.movptr(tmpReg, Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)) ; // rax, = m->_owner - masm.testptr(tmpReg, tmpReg) ; // Locked ? - masm.jccb (Assembler::notZero, DONE_LABEL) ; - } - - // Appears unlocked - try to swing _owner from null to non-null. - // Use either "Self" (in scr) or rsp as thread identity in _owner. - // Invariant: tmpReg == 0. tmpReg is EAX which is the implicit cmpxchg comparand. - masm.get_thread (scrReg) ; - if (os::is_MP()) { masm.lock(); } - masm.cmpxchgptr(scrReg, Address(boxReg, ObjectMonitor::owner_offset_in_bytes()-2)) ; - - // If the CAS fails we can either retry or pass control to the slow-path. - // We use the latter tactic. - // Pass the CAS result in the icc.ZFlag into DONE_LABEL - // If the CAS was successful ... - // Self has acquired the lock - // Invariant: m->_recursions should already be 0, so we don't need to explicitly set it. - // Intentional fall-through into DONE_LABEL ... - } - - // DONE_LABEL is a hot target - we'd really like to place it at the - // start of cache line by padding with NOPs. - // See the AMD and Intel software optimization manuals for the - // most efficient "long" NOP encodings. - // Unfortunately none of our alignment mechanisms suffice. - masm.bind(DONE_LABEL); - - // Avoid branch-to-branch on AMD processors - // This appears to be superstition. - if (EmitSync & 32) masm.nop() ; - - - // At DONE_LABEL the icc ZFlag is set as follows ... - // Fast_Unlock uses the same protocol. - // ZFlag == 1 -> Success - // ZFlag == 0 -> Failure - force control through the slow-path - } - %} - - // obj: object to unlock - // box: box address (displaced header location), killed. Must be EAX. - // rbx,: killed tmp; cannot be obj nor box. - // - // Some commentary on balanced locking: - // - // Fast_Lock and Fast_Unlock are emitted only for provably balanced lock sites. - // Methods that don't have provably balanced locking are forced to run in the - // interpreter - such methods won't be compiled to use fast_lock and fast_unlock. - // The interpreter provides two properties: - // I1: At return-time the interpreter automatically and quietly unlocks any - // objects acquired the current activation (frame). Recall that the - // interpreter maintains an on-stack list of locks currently held by - // a frame. - // I2: If a method attempts to unlock an object that is not held by the - // the frame the interpreter throws IMSX. - // - // Lets say A(), which has provably balanced locking, acquires O and then calls B(). - // B() doesn't have provably balanced locking so it runs in the interpreter. - // Control returns to A() and A() unlocks O. By I1 and I2, above, we know that O - // is still locked by A(). - // - // The only other source of unbalanced locking would be JNI. The "Java Native Interface: - // Programmer's Guide and Specification" claims that an object locked by jni_monitorenter - // should not be unlocked by "normal" java-level locking and vice-versa. The specification - // doesn't specify what will occur if a program engages in such mixed-mode locking, however. - - enc_class Fast_Unlock( nabxRegP obj, eAXRegP box, eRegP tmp) %{ - - Register objReg = as_Register($obj$$reg); - Register boxReg = as_Register($box$$reg); - Register tmpReg = as_Register($tmp$$reg); - - guarantee (objReg != boxReg, "") ; - guarantee (objReg != tmpReg, "") ; - guarantee (boxReg != tmpReg, "") ; - guarantee (boxReg == as_Register(EAX_enc), "") ; - MacroAssembler masm(&cbuf); - - if (EmitSync & 4) { - // Disable - inhibit all inlining. Force control through the slow-path - masm.cmpptr (rsp, 0) ; - } else - if (EmitSync & 8) { - Label DONE_LABEL ; - if (UseBiasedLocking) { - masm.biased_locking_exit(objReg, tmpReg, DONE_LABEL); - } - // classic stack-locking code ... - masm.movptr(tmpReg, Address(boxReg, 0)) ; - masm.testptr(tmpReg, tmpReg) ; - masm.jcc (Assembler::zero, DONE_LABEL) ; - if (os::is_MP()) { masm.lock(); } - masm.cmpxchgptr(tmpReg, Address(objReg, 0)); // Uses EAX which is box - masm.bind(DONE_LABEL); - } else { - Label DONE_LABEL, Stacked, CheckSucc, Inflated ; - - // Critically, the biased locking test must have precedence over - // and appear before the (box->dhw == 0) recursive stack-lock test. - if (UseBiasedLocking && !UseOptoBiasInlining) { - masm.biased_locking_exit(objReg, tmpReg, DONE_LABEL); - } - - masm.cmpptr(Address(boxReg, 0), 0) ; // Examine the displaced header - masm.movptr(tmpReg, Address(objReg, 0)) ; // Examine the object's markword - masm.jccb (Assembler::zero, DONE_LABEL) ; // 0 indicates recursive stack-lock - - masm.testptr(tmpReg, 0x02) ; // Inflated? - masm.jccb (Assembler::zero, Stacked) ; - - masm.bind (Inflated) ; - // It's inflated. - // Despite our balanced locking property we still check that m->_owner == Self - // as java routines or native JNI code called by this thread might - // have released the lock. - // Refer to the comments in synchronizer.cpp for how we might encode extra - // state in _succ so we can avoid fetching EntryList|cxq. - // - // I'd like to add more cases in fast_lock() and fast_unlock() -- - // such as recursive enter and exit -- but we have to be wary of - // I$ bloat, T$ effects and BP$ effects. - // - // If there's no contention try a 1-0 exit. That is, exit without - // a costly MEMBAR or CAS. See synchronizer.cpp for details on how - // we detect and recover from the race that the 1-0 exit admits. - // - // Conceptually Fast_Unlock() must execute a STST|LDST "release" barrier - // before it STs null into _owner, releasing the lock. Updates - // to data protected by the critical section must be visible before - // we drop the lock (and thus before any other thread could acquire - // the lock and observe the fields protected by the lock). - // IA32's memory-model is SPO, so STs are ordered with respect to - // each other and there's no need for an explicit barrier (fence). - // See also http://gee.cs.oswego.edu/dl/jmm/cookbook.html. - - masm.get_thread (boxReg) ; - if ((EmitSync & 4096) && VM_Version::supports_3dnow_prefetch() && os::is_MP()) { - // prefetchw [ebx + Offset(_owner)-2] - masm.prefetchw(Address(rbx, ObjectMonitor::owner_offset_in_bytes()-2)); - } - - // Note that we could employ various encoding schemes to reduce - // the number of loads below (currently 4) to just 2 or 3. - // Refer to the comments in synchronizer.cpp. - // In practice the chain of fetches doesn't seem to impact performance, however. - if ((EmitSync & 65536) == 0 && (EmitSync & 256)) { - // Attempt to reduce branch density - AMD's branch predictor. - masm.xorptr(boxReg, Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)) ; - masm.orptr(boxReg, Address (tmpReg, ObjectMonitor::recursions_offset_in_bytes()-2)) ; - masm.orptr(boxReg, Address (tmpReg, ObjectMonitor::EntryList_offset_in_bytes()-2)) ; - masm.orptr(boxReg, Address (tmpReg, ObjectMonitor::cxq_offset_in_bytes()-2)) ; - masm.jccb (Assembler::notZero, DONE_LABEL) ; - masm.movptr(Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2), NULL_WORD) ; - masm.jmpb (DONE_LABEL) ; - } else { - masm.xorptr(boxReg, Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)) ; - masm.orptr(boxReg, Address (tmpReg, ObjectMonitor::recursions_offset_in_bytes()-2)) ; - masm.jccb (Assembler::notZero, DONE_LABEL) ; - masm.movptr(boxReg, Address (tmpReg, ObjectMonitor::EntryList_offset_in_bytes()-2)) ; - masm.orptr(boxReg, Address (tmpReg, ObjectMonitor::cxq_offset_in_bytes()-2)) ; - masm.jccb (Assembler::notZero, CheckSucc) ; - masm.movptr(Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2), NULL_WORD) ; - masm.jmpb (DONE_LABEL) ; - } - - // The Following code fragment (EmitSync & 65536) improves the performance of - // contended applications and contended synchronization microbenchmarks. - // Unfortunately the emission of the code - even though not executed - causes regressions - // in scimark and jetstream, evidently because of $ effects. Replacing the code - // with an equal number of never-executed NOPs results in the same regression. - // We leave it off by default. - - if ((EmitSync & 65536) != 0) { - Label LSuccess, LGoSlowPath ; - - masm.bind (CheckSucc) ; - - // Optional pre-test ... it's safe to elide this - if ((EmitSync & 16) == 0) { - masm.cmpptr(Address (tmpReg, ObjectMonitor::succ_offset_in_bytes()-2), 0) ; - masm.jccb (Assembler::zero, LGoSlowPath) ; - } - - // We have a classic Dekker-style idiom: - // ST m->_owner = 0 ; MEMBAR; LD m->_succ - // There are a number of ways to implement the barrier: - // (1) lock:andl &m->_owner, 0 - // is fast, but mask doesn't currently support the "ANDL M,IMM32" form. - // LOCK: ANDL [ebx+Offset(_Owner)-2], 0 - // Encodes as 81 31 OFF32 IMM32 or 83 63 OFF8 IMM8 - // (2) If supported, an explicit MFENCE is appealing. - // In older IA32 processors MFENCE is slower than lock:add or xchg - // particularly if the write-buffer is full as might be the case if - // if stores closely precede the fence or fence-equivalent instruction. - // In more modern implementations MFENCE appears faster, however. - // (3) In lieu of an explicit fence, use lock:addl to the top-of-stack - // The $lines underlying the top-of-stack should be in M-state. - // The locked add instruction is serializing, of course. - // (4) Use xchg, which is serializing - // mov boxReg, 0; xchgl boxReg, [tmpReg + Offset(_owner)-2] also works - // (5) ST m->_owner = 0 and then execute lock:orl &m->_succ, 0. - // The integer condition codes will tell us if succ was 0. - // Since _succ and _owner should reside in the same $line and - // we just stored into _owner, it's likely that the $line - // remains in M-state for the lock:orl. - // - // We currently use (3), although it's likely that switching to (2) - // is correct for the future. - - masm.movptr(Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2), NULL_WORD) ; - if (os::is_MP()) { - if (VM_Version::supports_sse2() && 1 == FenceInstruction) { - masm.mfence(); - } else { - masm.lock () ; masm.addptr(Address(rsp, 0), 0) ; - } - } - // Ratify _succ remains non-null - masm.cmpptr(Address (tmpReg, ObjectMonitor::succ_offset_in_bytes()-2), 0) ; - masm.jccb (Assembler::notZero, LSuccess) ; - - masm.xorptr(boxReg, boxReg) ; // box is really EAX - if (os::is_MP()) { masm.lock(); } - masm.cmpxchgptr(rsp, Address(tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)); - masm.jccb (Assembler::notEqual, LSuccess) ; - // Since we're low on registers we installed rsp as a placeholding in _owner. - // Now install Self over rsp. This is safe as we're transitioning from - // non-null to non=null - masm.get_thread (boxReg) ; - masm.movptr(Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2), boxReg) ; - // Intentional fall-through into LGoSlowPath ... - - masm.bind (LGoSlowPath) ; - masm.orptr(boxReg, 1) ; // set ICC.ZF=0 to indicate failure - masm.jmpb (DONE_LABEL) ; - - masm.bind (LSuccess) ; - masm.xorptr(boxReg, boxReg) ; // set ICC.ZF=1 to indicate success - masm.jmpb (DONE_LABEL) ; - } - - masm.bind (Stacked) ; - // It's not inflated and it's not recursively stack-locked and it's not biased. - // It must be stack-locked. - // Try to reset the header to displaced header. - // The "box" value on the stack is stable, so we can reload - // and be assured we observe the same value as above. - masm.movptr(tmpReg, Address(boxReg, 0)) ; - if (os::is_MP()) { masm.lock(); } - masm.cmpxchgptr(tmpReg, Address(objReg, 0)); // Uses EAX which is box - // Intention fall-thru into DONE_LABEL - - - // DONE_LABEL is a hot target - we'd really like to place it at the - // start of cache line by padding with NOPs. - // See the AMD and Intel software optimization manuals for the - // most efficient "long" NOP encodings. - // Unfortunately none of our alignment mechanisms suffice. - if ((EmitSync & 65536) == 0) { - masm.bind (CheckSucc) ; - } - masm.bind(DONE_LABEL); - - // Avoid branch to branch on AMD processors - if (EmitSync & 32768) { masm.nop() ; } - } - %} - - enc_class enc_pop_rdx() %{ emit_opcode(cbuf,0x5A); %} @@ -7545,44 +6996,6 @@ instruct cmovL_regUCF(cmpOpUCF cop, eFlagsRegUCF cr, eRegL dst, eRegL src) %{ //----------Arithmetic Instructions-------------------------------------------- //----------Addition Instructions---------------------------------------------- -instruct addExactI_eReg(eAXRegI dst, rRegI src, eFlagsReg cr) -%{ - match(AddExactI dst src); - effect(DEF cr); - - format %{ "ADD $dst, $src\t# addExact int" %} - ins_encode %{ - __ addl($dst$$Register, $src$$Register); - %} - ins_pipe(ialu_reg_reg); -%} - -instruct addExactI_eReg_imm(eAXRegI dst, immI src, eFlagsReg cr) -%{ - match(AddExactI dst src); - effect(DEF cr); - - format %{ "ADD $dst, $src\t# addExact int" %} - ins_encode %{ - __ addl($dst$$Register, $src$$constant); - %} - ins_pipe(ialu_reg_reg); -%} - -instruct addExactI_eReg_mem(eAXRegI dst, memory src, eFlagsReg cr) -%{ - match(AddExactI dst (LoadI src)); - effect(DEF cr); - - ins_cost(125); - format %{ "ADD $dst,$src\t# addExact int" %} - ins_encode %{ - __ addl($dst$$Register, $src$$Address); - %} - ins_pipe( ialu_reg_mem ); -%} - - // Integer Addition Instructions instruct addI_eReg(rRegI dst, rRegI src, eFlagsReg cr) %{ match(Set dst (AddI dst src)); @@ -7892,43 +7305,6 @@ instruct xchgP( memory mem, pRegP newval) %{ //----------Subtraction Instructions------------------------------------------- -instruct subExactI_eReg(eAXRegI dst, rRegI src, eFlagsReg cr) -%{ - match(SubExactI dst src); - effect(DEF cr); - - format %{ "SUB $dst, $src\t# subExact int" %} - ins_encode %{ - __ subl($dst$$Register, $src$$Register); - %} - ins_pipe(ialu_reg_reg); -%} - -instruct subExactI_eReg_imm(eAXRegI dst, immI src, eFlagsReg cr) -%{ - match(SubExactI dst src); - effect(DEF cr); - - format %{ "SUB $dst, $src\t# subExact int" %} - ins_encode %{ - __ subl($dst$$Register, $src$$constant); - %} - ins_pipe(ialu_reg_reg); -%} - -instruct subExactI_eReg_mem(eAXRegI dst, memory src, eFlagsReg cr) -%{ - match(SubExactI dst (LoadI src)); - effect(DEF cr); - - ins_cost(125); - format %{ "SUB $dst,$src\t# subExact int" %} - ins_encode %{ - __ subl($dst$$Register, $src$$Address); - %} - ins_pipe( ialu_reg_mem ); -%} - // Integer Subtraction Instructions instruct subI_eReg(rRegI dst, rRegI src, eFlagsReg cr) %{ match(Set dst (SubI dst src)); @@ -7997,17 +7373,6 @@ instruct negI_eReg(rRegI dst, immI0 zero, eFlagsReg cr) %{ ins_pipe( ialu_reg ); %} -instruct negExactI_eReg(eAXRegI dst, eFlagsReg cr) %{ - match(NegExactI dst); - effect(DEF cr); - - format %{ "NEG $dst\t# negExact int"%} - ins_encode %{ - __ negl($dst$$Register); - %} - ins_pipe(ialu_reg); -%} - //----------Multiplication/Division Instructions------------------------------- // Integer Multiplication Instructions // Multiply Register @@ -8219,46 +7584,6 @@ instruct mulL_eReg_con(eADXRegL dst, immL_127 src, rRegI tmp, eFlagsReg cr) %{ ins_pipe( pipe_slow ); %} -instruct mulExactI_eReg(eAXRegI dst, rRegI src, eFlagsReg cr) -%{ - match(MulExactI dst src); - effect(DEF cr); - - ins_cost(300); - format %{ "IMUL $dst, $src\t# mulExact int" %} - ins_encode %{ - __ imull($dst$$Register, $src$$Register); - %} - ins_pipe(ialu_reg_reg_alu0); -%} - -instruct mulExactI_eReg_imm(eAXRegI dst, rRegI src, immI imm, eFlagsReg cr) -%{ - match(MulExactI src imm); - effect(DEF cr); - - ins_cost(300); - format %{ "IMUL $dst, $src, $imm\t# mulExact int" %} - ins_encode %{ - __ imull($dst$$Register, $src$$Register, $imm$$constant); - %} - ins_pipe(ialu_reg_reg_alu0); -%} - -instruct mulExactI_eReg_mem(eAXRegI dst, memory src, eFlagsReg cr) -%{ - match(MulExactI dst (LoadI src)); - effect(DEF cr); - - ins_cost(350); - format %{ "IMUL $dst, $src\t# mulExact int" %} - ins_encode %{ - __ imull($dst$$Register, $src$$Address); - %} - ins_pipe(ialu_reg_mem_alu0); -%} - - // Integer DIV with Register instruct divI_eReg(eAXRegI rax, eDXRegI rdx, eCXRegI div, eFlagsReg cr) %{ match(Set rax (DivI rax div)); @@ -9124,6 +8449,91 @@ instruct and_cmpLTMask(rRegI p, rRegI q, rRegI y, eFlagsReg cr) %{ instruct cadd_cmpLTMask_mem(ncxRegI p, ncxRegI q, memory y, eCXRegI tmp, eFlagsReg cr) %{ match(Set p (AddI (AndI (CmpLTMask p q) (LoadI y)) (SubI p q))); */ +//----------Overflow Math Instructions----------------------------------------- + +instruct overflowAddI_eReg(eFlagsReg cr, eAXRegI op1, rRegI op2) +%{ + match(Set cr (OverflowAddI op1 op2)); + effect(DEF cr, USE_KILL op1, USE op2); + + format %{ "ADD $op1, $op2\t# overflow check int" %} + + ins_encode %{ + __ addl($op1$$Register, $op2$$Register); + %} + ins_pipe(ialu_reg_reg); +%} + +instruct overflowAddI_rReg_imm(eFlagsReg cr, eAXRegI op1, immI op2) +%{ + match(Set cr (OverflowAddI op1 op2)); + effect(DEF cr, USE_KILL op1, USE op2); + + format %{ "ADD $op1, $op2\t# overflow check int" %} + + ins_encode %{ + __ addl($op1$$Register, $op2$$constant); + %} + ins_pipe(ialu_reg_reg); +%} + +instruct overflowSubI_rReg(eFlagsReg cr, rRegI op1, rRegI op2) +%{ + match(Set cr (OverflowSubI op1 op2)); + + format %{ "CMP $op1, $op2\t# overflow check int" %} + ins_encode %{ + __ cmpl($op1$$Register, $op2$$Register); + %} + ins_pipe(ialu_reg_reg); +%} + +instruct overflowSubI_rReg_imm(eFlagsReg cr, rRegI op1, immI op2) +%{ + match(Set cr (OverflowSubI op1 op2)); + + format %{ "CMP $op1, $op2\t# overflow check int" %} + ins_encode %{ + __ cmpl($op1$$Register, $op2$$constant); + %} + ins_pipe(ialu_reg_reg); +%} + +instruct overflowNegI_rReg(eFlagsReg cr, immI0 zero, eAXRegI op2) +%{ + match(Set cr (OverflowSubI zero op2)); + effect(DEF cr, USE_KILL op2); + + format %{ "NEG $op2\t# overflow check int" %} + ins_encode %{ + __ negl($op2$$Register); + %} + ins_pipe(ialu_reg_reg); +%} + +instruct overflowMulI_rReg(eFlagsReg cr, eAXRegI op1, rRegI op2) +%{ + match(Set cr (OverflowMulI op1 op2)); + effect(DEF cr, USE_KILL op1, USE op2); + + format %{ "IMUL $op1, $op2\t# overflow check int" %} + ins_encode %{ + __ imull($op1$$Register, $op2$$Register); + %} + ins_pipe(ialu_reg_reg_alu0); +%} + +instruct overflowMulI_rReg_imm(eFlagsReg cr, rRegI op1, immI op2, rRegI tmp) +%{ + match(Set cr (OverflowMulI op1 op2)); + effect(DEF cr, TEMP tmp, USE op1, USE op2); + + format %{ "IMUL $tmp, $op1, $op2\t# overflow check int" %} + ins_encode %{ + __ imull($tmp$$Register, $op1$$Register, $op2$$constant); + %} + ins_pipe(ialu_reg_reg_alu0); +%} //----------Long Instructions------------------------------------------------ // Add Long Register with Register @@ -13157,23 +12567,26 @@ instruct RethrowException() // inlined locking and unlocking - -instruct cmpFastLock( eFlagsReg cr, eRegP object, eBXRegP box, eAXRegI tmp, eRegP scr) %{ - match( Set cr (FastLock object box) ); - effect( TEMP tmp, TEMP scr, USE_KILL box ); +instruct cmpFastLock(eFlagsReg cr, eRegP object, eBXRegP box, eAXRegI tmp, eRegP scr) %{ + match(Set cr (FastLock object box)); + effect(TEMP tmp, TEMP scr, USE_KILL box); ins_cost(300); format %{ "FASTLOCK $object,$box\t! kills $box,$tmp,$scr" %} - ins_encode( Fast_Lock(object,box,tmp,scr) ); - ins_pipe( pipe_slow ); + ins_encode %{ + __ fast_lock($object$$Register, $box$$Register, $tmp$$Register, $scr$$Register, _counters); + %} + ins_pipe(pipe_slow); %} -instruct cmpFastUnlock( eFlagsReg cr, eRegP object, eAXRegP box, eRegP tmp ) %{ - match( Set cr (FastUnlock object box) ); - effect( TEMP tmp, USE_KILL box ); +instruct cmpFastUnlock(eFlagsReg cr, eRegP object, eAXRegP box, eRegP tmp ) %{ + match(Set cr (FastUnlock object box)); + effect(TEMP tmp, USE_KILL box); ins_cost(300); format %{ "FASTUNLOCK $object,$box\t! kills $box,$tmp" %} - ins_encode( Fast_Unlock(object,box,tmp) ); - ins_pipe( pipe_slow ); + ins_encode %{ + __ fast_unlock($object$$Register, $box$$Register, $tmp$$Register); + %} + ins_pipe(pipe_slow); %} diff --git a/hotspot/src/cpu/x86/vm/x86_64.ad b/hotspot/src/cpu/x86/vm/x86_64.ad index 21f9aca7619..b10f920793e 100644 --- a/hotspot/src/cpu/x86/vm/x86_64.ad +++ b/hotspot/src/cpu/x86/vm/x86_64.ad @@ -1657,18 +1657,6 @@ const RegMask Matcher::method_handle_invoke_SP_save_mask() { return PTR_RBP_REG_mask(); } -const RegMask Matcher::mathExactI_result_proj_mask() { - return INT_RAX_REG_mask(); -} - -const RegMask Matcher::mathExactL_result_proj_mask() { - return LONG_RAX_REG_mask(); -} - -const RegMask Matcher::mathExactI_flags_proj_mask() { - return INT_FLAGS_mask(); -} - %} //----------ENCODING BLOCK----------------------------------------------------- @@ -2599,231 +2587,6 @@ encode %{ %} - // obj: object to lock - // box: box address (header location) -- killed - // tmp: rax -- killed - // scr: rbx -- killed - // - // What follows is a direct transliteration of fast_lock() and fast_unlock() - // from i486.ad. See that file for comments. - // TODO: where possible switch from movq (r, 0) to movl(r,0) and - // use the shorter encoding. (Movl clears the high-order 32-bits). - - - enc_class Fast_Lock(rRegP obj, rRegP box, rax_RegI tmp, rRegP scr) - %{ - Register objReg = as_Register((int)$obj$$reg); - Register boxReg = as_Register((int)$box$$reg); - Register tmpReg = as_Register($tmp$$reg); - Register scrReg = as_Register($scr$$reg); - MacroAssembler masm(&cbuf); - - // Verify uniqueness of register assignments -- necessary but not sufficient - assert (objReg != boxReg && objReg != tmpReg && - objReg != scrReg && tmpReg != scrReg, "invariant") ; - - if (_counters != NULL) { - masm.atomic_incl(ExternalAddress((address) _counters->total_entry_count_addr())); - } - if (EmitSync & 1) { - // Without cast to int32_t a movptr will destroy r10 which is typically obj - masm.movptr (Address(boxReg, 0), (int32_t)intptr_t(markOopDesc::unused_mark())) ; - masm.cmpptr(rsp, (int32_t)NULL_WORD) ; - } else - if (EmitSync & 2) { - Label DONE_LABEL; - if (UseBiasedLocking) { - // Note: tmpReg maps to the swap_reg argument and scrReg to the tmp_reg argument. - masm.biased_locking_enter(boxReg, objReg, tmpReg, scrReg, false, DONE_LABEL, NULL, _counters); - } - // QQQ was movl... - masm.movptr(tmpReg, 0x1); - masm.orptr(tmpReg, Address(objReg, 0)); - masm.movptr(Address(boxReg, 0), tmpReg); - if (os::is_MP()) { - masm.lock(); - } - masm.cmpxchgptr(boxReg, Address(objReg, 0)); // Updates tmpReg - masm.jcc(Assembler::equal, DONE_LABEL); - - // Recursive locking - masm.subptr(tmpReg, rsp); - masm.andptr(tmpReg, 7 - os::vm_page_size()); - masm.movptr(Address(boxReg, 0), tmpReg); - - masm.bind(DONE_LABEL); - masm.nop(); // avoid branch to branch - } else { - Label DONE_LABEL, IsInflated, Egress; - - masm.movptr(tmpReg, Address(objReg, 0)) ; - masm.testl (tmpReg, 0x02) ; // inflated vs stack-locked|neutral|biased - masm.jcc (Assembler::notZero, IsInflated) ; - - // it's stack-locked, biased or neutral - // TODO: optimize markword triage order to reduce the number of - // conditional branches in the most common cases. - // Beware -- there's a subtle invariant that fetch of the markword - // at [FETCH], below, will never observe a biased encoding (*101b). - // If this invariant is not held we'll suffer exclusion (safety) failure. - - if (UseBiasedLocking && !UseOptoBiasInlining) { - masm.biased_locking_enter(boxReg, objReg, tmpReg, scrReg, true, DONE_LABEL, NULL, _counters); - masm.movptr(tmpReg, Address(objReg, 0)) ; // [FETCH] - } - - // was q will it destroy high? - masm.orl (tmpReg, 1) ; - masm.movptr(Address(boxReg, 0), tmpReg) ; - if (os::is_MP()) { masm.lock(); } - masm.cmpxchgptr(boxReg, Address(objReg, 0)); // Updates tmpReg - if (_counters != NULL) { - masm.cond_inc32(Assembler::equal, - ExternalAddress((address) _counters->fast_path_entry_count_addr())); - } - masm.jcc (Assembler::equal, DONE_LABEL); - - // Recursive locking - masm.subptr(tmpReg, rsp); - masm.andptr(tmpReg, 7 - os::vm_page_size()); - masm.movptr(Address(boxReg, 0), tmpReg); - if (_counters != NULL) { - masm.cond_inc32(Assembler::equal, - ExternalAddress((address) _counters->fast_path_entry_count_addr())); - } - masm.jmp (DONE_LABEL) ; - - masm.bind (IsInflated) ; - // It's inflated - - // TODO: someday avoid the ST-before-CAS penalty by - // relocating (deferring) the following ST. - // We should also think about trying a CAS without having - // fetched _owner. If the CAS is successful we may - // avoid an RTO->RTS upgrade on the $line. - // Without cast to int32_t a movptr will destroy r10 which is typically obj - masm.movptr(Address(boxReg, 0), (int32_t)intptr_t(markOopDesc::unused_mark())) ; - - masm.mov (boxReg, tmpReg) ; - masm.movptr (tmpReg, Address(tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)) ; - masm.testptr(tmpReg, tmpReg) ; - masm.jcc (Assembler::notZero, DONE_LABEL) ; - - // It's inflated and appears unlocked - if (os::is_MP()) { masm.lock(); } - masm.cmpxchgptr(r15_thread, Address(boxReg, ObjectMonitor::owner_offset_in_bytes()-2)) ; - // Intentional fall-through into DONE_LABEL ... - - masm.bind (DONE_LABEL) ; - masm.nop () ; // avoid jmp to jmp - } - %} - - // obj: object to unlock - // box: box address (displaced header location), killed - // RBX: killed tmp; cannot be obj nor box - enc_class Fast_Unlock(rRegP obj, rax_RegP box, rRegP tmp) - %{ - - Register objReg = as_Register($obj$$reg); - Register boxReg = as_Register($box$$reg); - Register tmpReg = as_Register($tmp$$reg); - MacroAssembler masm(&cbuf); - - if (EmitSync & 4) { - masm.cmpptr(rsp, 0) ; - } else - if (EmitSync & 8) { - Label DONE_LABEL; - if (UseBiasedLocking) { - masm.biased_locking_exit(objReg, tmpReg, DONE_LABEL); - } - - // Check whether the displaced header is 0 - //(=> recursive unlock) - masm.movptr(tmpReg, Address(boxReg, 0)); - masm.testptr(tmpReg, tmpReg); - masm.jcc(Assembler::zero, DONE_LABEL); - - // If not recursive lock, reset the header to displaced header - if (os::is_MP()) { - masm.lock(); - } - masm.cmpxchgptr(tmpReg, Address(objReg, 0)); // Uses RAX which is box - masm.bind(DONE_LABEL); - masm.nop(); // avoid branch to branch - } else { - Label DONE_LABEL, Stacked, CheckSucc ; - - if (UseBiasedLocking && !UseOptoBiasInlining) { - masm.biased_locking_exit(objReg, tmpReg, DONE_LABEL); - } - - masm.movptr(tmpReg, Address(objReg, 0)) ; - masm.cmpptr(Address(boxReg, 0), (int32_t)NULL_WORD) ; - masm.jcc (Assembler::zero, DONE_LABEL) ; - masm.testl (tmpReg, 0x02) ; - masm.jcc (Assembler::zero, Stacked) ; - - // It's inflated - masm.movptr(boxReg, Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)) ; - masm.xorptr(boxReg, r15_thread) ; - masm.orptr (boxReg, Address (tmpReg, ObjectMonitor::recursions_offset_in_bytes()-2)) ; - masm.jcc (Assembler::notZero, DONE_LABEL) ; - masm.movptr(boxReg, Address (tmpReg, ObjectMonitor::cxq_offset_in_bytes()-2)) ; - masm.orptr (boxReg, Address (tmpReg, ObjectMonitor::EntryList_offset_in_bytes()-2)) ; - masm.jcc (Assembler::notZero, CheckSucc) ; - masm.movptr(Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2), (int32_t)NULL_WORD) ; - masm.jmp (DONE_LABEL) ; - - if ((EmitSync & 65536) == 0) { - Label LSuccess, LGoSlowPath ; - masm.bind (CheckSucc) ; - masm.cmpptr(Address (tmpReg, ObjectMonitor::succ_offset_in_bytes()-2), (int32_t)NULL_WORD) ; - masm.jcc (Assembler::zero, LGoSlowPath) ; - - // I'd much rather use lock:andl m->_owner, 0 as it's faster than the - // the explicit ST;MEMBAR combination, but masm doesn't currently support - // "ANDQ M,IMM". Don't use MFENCE here. lock:add to TOS, xchg, etc - // are all faster when the write buffer is populated. - masm.movptr (Address (tmpReg, ObjectMonitor::owner_offset_in_bytes()-2), (int32_t)NULL_WORD) ; - if (os::is_MP()) { - masm.lock () ; masm.addl (Address(rsp, 0), 0) ; - } - masm.cmpptr(Address (tmpReg, ObjectMonitor::succ_offset_in_bytes()-2), (int32_t)NULL_WORD) ; - masm.jcc (Assembler::notZero, LSuccess) ; - - masm.movptr (boxReg, (int32_t)NULL_WORD) ; // box is really EAX - if (os::is_MP()) { masm.lock(); } - masm.cmpxchgptr(r15_thread, Address(tmpReg, ObjectMonitor::owner_offset_in_bytes()-2)); - masm.jcc (Assembler::notEqual, LSuccess) ; - // Intentional fall-through into slow-path - - masm.bind (LGoSlowPath) ; - masm.orl (boxReg, 1) ; // set ICC.ZF=0 to indicate failure - masm.jmp (DONE_LABEL) ; - - masm.bind (LSuccess) ; - masm.testl (boxReg, 0) ; // set ICC.ZF=1 to indicate success - masm.jmp (DONE_LABEL) ; - } - - masm.bind (Stacked) ; - masm.movptr(tmpReg, Address (boxReg, 0)) ; // re-fetch - if (os::is_MP()) { masm.lock(); } - masm.cmpxchgptr(tmpReg, Address(objReg, 0)); // Uses RAX which is box - - if (EmitSync & 65536) { - masm.bind (CheckSucc) ; - } - masm.bind(DONE_LABEL); - if (EmitSync & 32768) { - masm.nop(); // avoid branch to branch - } - } - %} - - enc_class enc_rethrow() %{ cbuf.set_insts_mark(); @@ -6963,82 +6726,6 @@ instruct cmovD_regUCF(cmpOpUCF cop, rFlagsRegUCF cr, regD dst, regD src) %{ //----------Arithmetic Instructions-------------------------------------------- //----------Addition Instructions---------------------------------------------- -instruct addExactI_rReg(rax_RegI dst, rRegI src, rFlagsReg cr) -%{ - match(AddExactI dst src); - effect(DEF cr); - - format %{ "addl $dst, $src\t# addExact int" %} - ins_encode %{ - __ addl($dst$$Register, $src$$Register); - %} - ins_pipe(ialu_reg_reg); -%} - -instruct addExactI_rReg_imm(rax_RegI dst, immI src, rFlagsReg cr) -%{ - match(AddExactI dst src); - effect(DEF cr); - - format %{ "addl $dst, $src\t# addExact int" %} - ins_encode %{ - __ addl($dst$$Register, $src$$constant); - %} - ins_pipe(ialu_reg_reg); -%} - -instruct addExactI_rReg_mem(rax_RegI dst, memory src, rFlagsReg cr) -%{ - match(AddExactI dst (LoadI src)); - effect(DEF cr); - - ins_cost(125); // XXX - format %{ "addl $dst, $src\t# addExact int" %} - ins_encode %{ - __ addl($dst$$Register, $src$$Address); - %} - - ins_pipe(ialu_reg_mem); -%} - -instruct addExactL_rReg(rax_RegL dst, rRegL src, rFlagsReg cr) -%{ - match(AddExactL dst src); - effect(DEF cr); - - format %{ "addq $dst, $src\t# addExact long" %} - ins_encode %{ - __ addq($dst$$Register, $src$$Register); - %} - ins_pipe(ialu_reg_reg); -%} - -instruct addExactL_rReg_imm(rax_RegL dst, immL32 src, rFlagsReg cr) -%{ - match(AddExactL dst src); - effect(DEF cr); - - format %{ "addq $dst, $src\t# addExact long" %} - ins_encode %{ - __ addq($dst$$Register, $src$$constant); - %} - ins_pipe(ialu_reg_reg); -%} - -instruct addExactL_rReg_mem(rax_RegL dst, memory src, rFlagsReg cr) -%{ - match(AddExactL dst (LoadL src)); - effect(DEF cr); - - ins_cost(125); // XXX - format %{ "addq $dst, $src\t# addExact long" %} - ins_encode %{ - __ addq($dst$$Register, $src$$Address); - %} - - ins_pipe(ialu_reg_mem); -%} - instruct addI_rReg(rRegI dst, rRegI src, rFlagsReg cr) %{ match(Set dst (AddI dst src)); @@ -7651,80 +7338,6 @@ instruct subI_mem_imm(memory dst, immI src, rFlagsReg cr) ins_pipe(ialu_mem_imm); %} -instruct subExactI_rReg(rax_RegI dst, rRegI src, rFlagsReg cr) -%{ - match(SubExactI dst src); - effect(DEF cr); - - format %{ "subl $dst, $src\t# subExact int" %} - ins_encode %{ - __ subl($dst$$Register, $src$$Register); - %} - ins_pipe(ialu_reg_reg); -%} - -instruct subExactI_rReg_imm(rax_RegI dst, immI src, rFlagsReg cr) -%{ - match(SubExactI dst src); - effect(DEF cr); - - format %{ "subl $dst, $src\t# subExact int" %} - ins_encode %{ - __ subl($dst$$Register, $src$$constant); - %} - ins_pipe(ialu_reg_reg); -%} - -instruct subExactI_rReg_mem(rax_RegI dst, memory src, rFlagsReg cr) -%{ - match(SubExactI dst (LoadI src)); - effect(DEF cr); - - ins_cost(125); - format %{ "subl $dst, $src\t# subExact int" %} - ins_encode %{ - __ subl($dst$$Register, $src$$Address); - %} - ins_pipe(ialu_reg_mem); -%} - -instruct subExactL_rReg(rax_RegL dst, rRegL src, rFlagsReg cr) -%{ - match(SubExactL dst src); - effect(DEF cr); - - format %{ "subq $dst, $src\t# subExact long" %} - ins_encode %{ - __ subq($dst$$Register, $src$$Register); - %} - ins_pipe(ialu_reg_reg); -%} - -instruct subExactL_rReg_imm(rax_RegL dst, immL32 src, rFlagsReg cr) -%{ - match(SubExactL dst (LoadL src)); - effect(DEF cr); - - format %{ "subq $dst, $src\t# subExact long" %} - ins_encode %{ - __ subq($dst$$Register, $src$$constant); - %} - ins_pipe(ialu_reg_reg); -%} - -instruct subExactL_rReg_mem(rax_RegI dst, memory src, rFlagsReg cr) -%{ - match(SubExactI dst src); - effect(DEF cr); - - ins_cost(125); - format %{ "subq $dst, $src\t# subExact long" %} - ins_encode %{ - __ subq($dst$$Register, $src$$Address); - %} - ins_pipe(ialu_reg_mem); -%} - instruct subL_rReg(rRegL dst, rRegL src, rFlagsReg cr) %{ match(Set dst (SubL dst src)); @@ -7841,31 +7454,6 @@ instruct negL_mem(memory dst, immL0 zero, rFlagsReg cr) ins_pipe(ialu_reg); %} -instruct negExactI_rReg(rax_RegI dst, rFlagsReg cr) -%{ - match(NegExactI dst); - effect(KILL cr); - - format %{ "negl $dst\t# negExact int" %} - ins_encode %{ - __ negl($dst$$Register); - %} - ins_pipe(ialu_reg); -%} - -instruct negExactL_rReg(rax_RegL dst, rFlagsReg cr) -%{ - match(NegExactL dst); - effect(KILL cr); - - format %{ "negq $dst\t# negExact long" %} - ins_encode %{ - __ negq($dst$$Register); - %} - ins_pipe(ialu_reg); -%} - - //----------Multiplication/Division Instructions------------------------------- // Integer Multiplication Instructions // Multiply Register @@ -7982,86 +7570,6 @@ instruct mulHiL_rReg(rdx_RegL dst, no_rax_RegL src, rax_RegL rax, rFlagsReg cr) ins_pipe(ialu_reg_reg_alu0); %} - -instruct mulExactI_rReg(rax_RegI dst, rRegI src, rFlagsReg cr) -%{ - match(MulExactI dst src); - effect(DEF cr); - - ins_cost(300); - format %{ "imull $dst, $src\t# mulExact int" %} - ins_encode %{ - __ imull($dst$$Register, $src$$Register); - %} - ins_pipe(ialu_reg_reg_alu0); -%} - - -instruct mulExactI_rReg_imm(rax_RegI dst, rRegI src, immI imm, rFlagsReg cr) -%{ - match(MulExactI src imm); - effect(DEF cr); - - ins_cost(300); - format %{ "imull $dst, $src, $imm\t# mulExact int" %} - ins_encode %{ - __ imull($dst$$Register, $src$$Register, $imm$$constant); - %} - ins_pipe(ialu_reg_reg_alu0); -%} - -instruct mulExactI_rReg_mem(rax_RegI dst, memory src, rFlagsReg cr) -%{ - match(MulExactI dst (LoadI src)); - effect(DEF cr); - - ins_cost(350); - format %{ "imull $dst, $src\t# mulExact int" %} - ins_encode %{ - __ imull($dst$$Register, $src$$Address); - %} - ins_pipe(ialu_reg_mem_alu0); -%} - -instruct mulExactL_rReg(rax_RegL dst, rRegL src, rFlagsReg cr) -%{ - match(MulExactL dst src); - effect(DEF cr); - - ins_cost(300); - format %{ "imulq $dst, $src\t# mulExact long" %} - ins_encode %{ - __ imulq($dst$$Register, $src$$Register); - %} - ins_pipe(ialu_reg_reg_alu0); -%} - -instruct mulExactL_rReg_imm(rax_RegL dst, rRegL src, immL32 imm, rFlagsReg cr) -%{ - match(MulExactL src imm); - effect(DEF cr); - - ins_cost(300); - format %{ "imulq $dst, $src, $imm\t# mulExact long" %} - ins_encode %{ - __ imulq($dst$$Register, $src$$Register, $imm$$constant); - %} - ins_pipe(ialu_reg_reg_alu0); -%} - -instruct mulExactL_rReg_mem(rax_RegL dst, memory src, rFlagsReg cr) -%{ - match(MulExactL dst (LoadL src)); - effect(DEF cr); - - ins_cost(350); - format %{ "imulq $dst, $src\t# mulExact long" %} - ins_encode %{ - __ imulq($dst$$Register, $src$$Address); - %} - ins_pipe(ialu_reg_mem_alu0); -%} - instruct divI_rReg(rax_RegI rax, rdx_RegI rdx, no_rax_rdx_RegI div, rFlagsReg cr) %{ @@ -10670,6 +10178,174 @@ instruct encode_iso_array(rsi_RegP src, rdi_RegP dst, rdx_RegI len, ins_pipe( pipe_slow ); %} +//----------Overflow Math Instructions----------------------------------------- + +instruct overflowAddI_rReg(rFlagsReg cr, rax_RegI op1, rRegI op2) +%{ + match(Set cr (OverflowAddI op1 op2)); + effect(DEF cr, USE_KILL op1, USE op2); + + format %{ "addl $op1, $op2\t# overflow check int" %} + + ins_encode %{ + __ addl($op1$$Register, $op2$$Register); + %} + ins_pipe(ialu_reg_reg); +%} + +instruct overflowAddI_rReg_imm(rFlagsReg cr, rax_RegI op1, immI op2) +%{ + match(Set cr (OverflowAddI op1 op2)); + effect(DEF cr, USE_KILL op1, USE op2); + + format %{ "addl $op1, $op2\t# overflow check int" %} + + ins_encode %{ + __ addl($op1$$Register, $op2$$constant); + %} + ins_pipe(ialu_reg_reg); +%} + +instruct overflowAddL_rReg(rFlagsReg cr, rax_RegL op1, rRegL op2) +%{ + match(Set cr (OverflowAddL op1 op2)); + effect(DEF cr, USE_KILL op1, USE op2); + + format %{ "addq $op1, $op2\t# overflow check long" %} + ins_encode %{ + __ addq($op1$$Register, $op2$$Register); + %} + ins_pipe(ialu_reg_reg); +%} + +instruct overflowAddL_rReg_imm(rFlagsReg cr, rax_RegL op1, immL32 op2) +%{ + match(Set cr (OverflowAddL op1 op2)); + effect(DEF cr, USE_KILL op1, USE op2); + + format %{ "addq $op1, $op2\t# overflow check long" %} + ins_encode %{ + __ addq($op1$$Register, $op2$$constant); + %} + ins_pipe(ialu_reg_reg); +%} + +instruct overflowSubI_rReg(rFlagsReg cr, rRegI op1, rRegI op2) +%{ + match(Set cr (OverflowSubI op1 op2)); + + format %{ "cmpl $op1, $op2\t# overflow check int" %} + ins_encode %{ + __ cmpl($op1$$Register, $op2$$Register); + %} + ins_pipe(ialu_reg_reg); +%} + +instruct overflowSubI_rReg_imm(rFlagsReg cr, rRegI op1, immI op2) +%{ + match(Set cr (OverflowSubI op1 op2)); + + format %{ "cmpl $op1, $op2\t# overflow check int" %} + ins_encode %{ + __ cmpl($op1$$Register, $op2$$constant); + %} + ins_pipe(ialu_reg_reg); +%} + +instruct overflowSubL_rReg(rFlagsReg cr, rRegL op1, rRegL op2) +%{ + match(Set cr (OverflowSubL op1 op2)); + + format %{ "cmpq $op1, $op2\t# overflow check long" %} + ins_encode %{ + __ cmpq($op1$$Register, $op2$$Register); + %} + ins_pipe(ialu_reg_reg); +%} + +instruct overflowSubL_rReg_imm(rFlagsReg cr, rRegL op1, immL32 op2) +%{ + match(Set cr (OverflowSubL op1 op2)); + + format %{ "cmpq $op1, $op2\t# overflow check long" %} + ins_encode %{ + __ cmpq($op1$$Register, $op2$$constant); + %} + ins_pipe(ialu_reg_reg); +%} + +instruct overflowNegI_rReg(rFlagsReg cr, immI0 zero, rax_RegI op2) +%{ + match(Set cr (OverflowSubI zero op2)); + effect(DEF cr, USE_KILL op2); + + format %{ "negl $op2\t# overflow check int" %} + ins_encode %{ + __ negl($op2$$Register); + %} + ins_pipe(ialu_reg_reg); +%} + +instruct overflowNegL_rReg(rFlagsReg cr, immL0 zero, rax_RegL op2) +%{ + match(Set cr (OverflowSubL zero op2)); + effect(DEF cr, USE_KILL op2); + + format %{ "negq $op2\t# overflow check long" %} + ins_encode %{ + __ negq($op2$$Register); + %} + ins_pipe(ialu_reg_reg); +%} + +instruct overflowMulI_rReg(rFlagsReg cr, rax_RegI op1, rRegI op2) +%{ + match(Set cr (OverflowMulI op1 op2)); + effect(DEF cr, USE_KILL op1, USE op2); + + format %{ "imull $op1, $op2\t# overflow check int" %} + ins_encode %{ + __ imull($op1$$Register, $op2$$Register); + %} + ins_pipe(ialu_reg_reg_alu0); +%} + +instruct overflowMulI_rReg_imm(rFlagsReg cr, rRegI op1, immI op2, rRegI tmp) +%{ + match(Set cr (OverflowMulI op1 op2)); + effect(DEF cr, TEMP tmp, USE op1, USE op2); + + format %{ "imull $tmp, $op1, $op2\t# overflow check int" %} + ins_encode %{ + __ imull($tmp$$Register, $op1$$Register, $op2$$constant); + %} + ins_pipe(ialu_reg_reg_alu0); +%} + +instruct overflowMulL_rReg(rFlagsReg cr, rax_RegL op1, rRegL op2) +%{ + match(Set cr (OverflowMulL op1 op2)); + effect(DEF cr, USE_KILL op1, USE op2); + + format %{ "imulq $op1, $op2\t# overflow check long" %} + ins_encode %{ + __ imulq($op1$$Register, $op2$$Register); + %} + ins_pipe(ialu_reg_reg_alu0); +%} + +instruct overflowMulL_rReg_imm(rFlagsReg cr, rRegL op1, immL32 op2, rRegL tmp) +%{ + match(Set cr (OverflowMulL op1 op2)); + effect(DEF cr, TEMP tmp, USE op1, USE op2); + + format %{ "imulq $tmp, $op1, $op2\t# overflow check long" %} + ins_encode %{ + __ imulq($tmp$$Register, $op1$$Register, $op2$$constant); + %} + ins_pipe(ialu_reg_reg_alu0); +%} + //----------Control Flow Instructions------------------------------------------ // Signed compare Instructions @@ -11453,27 +11129,25 @@ instruct jmpConUCF2_short(cmpOpUCF2 cop, rFlagsRegUCF cmp, label labl) %{ // ============================================================================ // inlined locking and unlocking -instruct cmpFastLock(rFlagsReg cr, - rRegP object, rbx_RegP box, rax_RegI tmp, rRegP scr) -%{ +instruct cmpFastLock(rFlagsReg cr, rRegP object, rbx_RegP box, rax_RegI tmp, rRegP scr) %{ match(Set cr (FastLock object box)); effect(TEMP tmp, TEMP scr, USE_KILL box); - ins_cost(300); format %{ "fastlock $object,$box\t! kills $box,$tmp,$scr" %} - ins_encode(Fast_Lock(object, box, tmp, scr)); + ins_encode %{ + __ fast_lock($object$$Register, $box$$Register, $tmp$$Register, $scr$$Register, _counters); + %} ins_pipe(pipe_slow); %} -instruct cmpFastUnlock(rFlagsReg cr, - rRegP object, rax_RegP box, rRegP tmp) -%{ +instruct cmpFastUnlock(rFlagsReg cr, rRegP object, rax_RegP box, rRegP tmp) %{ match(Set cr (FastUnlock object box)); effect(TEMP tmp, USE_KILL box); - ins_cost(300); format %{ "fastunlock $object,$box\t! kills $box,$tmp" %} - ins_encode(Fast_Unlock(object, box, tmp)); + ins_encode %{ + __ fast_unlock($object$$Register, $box$$Register, $tmp$$Register); + %} ins_pipe(pipe_slow); %} diff --git a/hotspot/src/os/aix/vm/os_aix.cpp b/hotspot/src/os/aix/vm/os_aix.cpp index ded1fe218f0..ba6b8d494c6 100644 --- a/hotspot/src/os/aix/vm/os_aix.cpp +++ b/hotspot/src/os/aix/vm/os_aix.cpp @@ -1496,6 +1496,10 @@ void* os::dll_lookup(void* handle, const char* name) { return res; } +void* os::get_default_process_handle() { + return (void*)::dlopen(NULL, RTLD_LAZY); +} + void os::print_dll_info(outputStream *st) { st->print_cr("Dynamic libraries:"); LoadedLibraries::print(st); diff --git a/hotspot/src/os/bsd/vm/os_bsd.cpp b/hotspot/src/os/bsd/vm/os_bsd.cpp index 795aedf26fe..72f2c2194b3 100644 --- a/hotspot/src/os/bsd/vm/os_bsd.cpp +++ b/hotspot/src/os/bsd/vm/os_bsd.cpp @@ -1788,7 +1788,7 @@ void os::jvm_path(char *buf, jint buflen) { jrelib_p = buf + len; snprintf(jrelib_p, buflen-len, "/%s", COMPILER_VARIANT); if (0 != access(buf, F_OK)) { - snprintf(jrelib_p, buflen-len, ""); + snprintf(jrelib_p, buflen-len, "%s", ""); } // If the path exists within JAVA_HOME, add the JVM library name diff --git a/hotspot/src/share/vm/adlc/archDesc.cpp b/hotspot/src/share/vm/adlc/archDesc.cpp index 937f175117a..e577c0eead0 100644 --- a/hotspot/src/share/vm/adlc/archDesc.cpp +++ b/hotspot/src/share/vm/adlc/archDesc.cpp @@ -1167,15 +1167,12 @@ void ArchDesc::buildMustCloneMap(FILE *fp_hpp, FILE *fp_cpp) { || strcmp(idealName,"CmpF") == 0 || strcmp(idealName,"FastLock") == 0 || strcmp(idealName,"FastUnlock") == 0 - || strcmp(idealName,"AddExactI") == 0 - || strcmp(idealName,"AddExactL") == 0 - || strcmp(idealName,"SubExactI") == 0 - || strcmp(idealName,"SubExactL") == 0 - || strcmp(idealName,"MulExactI") == 0 - || strcmp(idealName,"MulExactL") == 0 - || strcmp(idealName,"NegExactI") == 0 - || strcmp(idealName,"NegExactL") == 0 - || strcmp(idealName,"FlagsProj") == 0 + || strcmp(idealName,"OverflowAddI") == 0 + || strcmp(idealName,"OverflowAddL") == 0 + || strcmp(idealName,"OverflowSubI") == 0 + || strcmp(idealName,"OverflowSubL") == 0 + || strcmp(idealName,"OverflowMulI") == 0 + || strcmp(idealName,"OverflowMulL") == 0 || strcmp(idealName,"Bool") == 0 || strcmp(idealName,"Binary") == 0 ) { // Removed ConI from the must_clone list. CPUs that cannot use diff --git a/hotspot/src/share/vm/ci/ciClassList.hpp b/hotspot/src/share/vm/ci/ciClassList.hpp index ee82685a4df..1e6816030f7 100644 --- a/hotspot/src/share/vm/ci/ciClassList.hpp +++ b/hotspot/src/share/vm/ci/ciClassList.hpp @@ -103,6 +103,7 @@ friend class ciMethodHandle; \ friend class ciMethodType; \ friend class ciReceiverTypeData; \ friend class ciTypeEntries; \ +friend class ciSpeculativeTrapData; \ friend class ciSymbol; \ friend class ciArray; \ friend class ciObjArray; \ diff --git a/hotspot/src/share/vm/ci/ciMethodData.cpp b/hotspot/src/share/vm/ci/ciMethodData.cpp index 025146885db..950e3d6dd21 100644 --- a/hotspot/src/share/vm/ci/ciMethodData.cpp +++ b/hotspot/src/share/vm/ci/ciMethodData.cpp @@ -78,6 +78,35 @@ ciMethodData::ciMethodData() : ciMetadata(NULL) { _parameters = NULL; } +void ciMethodData::load_extra_data() { + MethodData* mdo = get_MethodData(); + + // speculative trap entries also hold a pointer to a Method so need to be translated + DataLayout* dp_src = mdo->extra_data_base(); + DataLayout* end_src = mdo->extra_data_limit(); + DataLayout* dp_dst = extra_data_base(); + for (;; dp_src = MethodData::next_extra(dp_src), dp_dst = MethodData::next_extra(dp_dst)) { + assert(dp_src < end_src, "moved past end of extra data"); + assert(dp_src->tag() == dp_dst->tag(), err_msg("should be same tags %d != %d", dp_src->tag(), dp_dst->tag())); + switch(dp_src->tag()) { + case DataLayout::speculative_trap_data_tag: { + ciSpeculativeTrapData* data_dst = new ciSpeculativeTrapData(dp_dst); + SpeculativeTrapData* data_src = new SpeculativeTrapData(dp_src); + data_dst->translate_from(data_src); + break; + } + case DataLayout::bit_data_tag: + break; + case DataLayout::no_tag: + case DataLayout::arg_info_data_tag: + // An empty slot or ArgInfoData entry marks the end of the trap data + return; + default: + fatal(err_msg("bad tag = %d", dp_src->tag())); + } + } +} + void ciMethodData::load_data() { MethodData* mdo = get_MethodData(); if (mdo == NULL) { @@ -116,6 +145,8 @@ void ciMethodData::load_data() { parameters->translate_from(mdo->parameters_type_data()); } + load_extra_data(); + // Note: Extra data are all BitData, and do not need translation. _current_mileage = MethodData::mileage_of(mdo->method()); _invocation_counter = mdo->invocation_count(); @@ -156,6 +187,12 @@ void ciReturnTypeEntry::translate_type_data_from(const ReturnTypeEntry* ret) { set_type(translate_klass(k)); } +void ciSpeculativeTrapData::translate_from(const ProfileData* data) { + Method* m = data->as_SpeculativeTrapData()->method(); + ciMethod* ci_m = CURRENT_ENV->get_method(m); + set_method(ci_m); +} + // Get the data at an arbitrary (sort of) data index. ciProfileData* ciMethodData::data_at(int data_index) { if (out_of_bounds(data_index)) { @@ -203,33 +240,65 @@ ciProfileData* ciMethodData::next_data(ciProfileData* current) { return next; } -// Translate a bci to its corresponding data, or NULL. -ciProfileData* ciMethodData::bci_to_data(int bci) { - ciProfileData* data = data_before(bci); - for ( ; is_valid(data); data = next_data(data)) { - if (data->bci() == bci) { - set_hint_di(dp_to_di(data->dp())); - return data; - } else if (data->bci() > bci) { - break; - } - } +ciProfileData* ciMethodData::bci_to_extra_data(int bci, ciMethod* m, bool& two_free_slots) { // bci_to_extra_data(bci) ... DataLayout* dp = data_layout_at(data_size()); DataLayout* end = data_layout_at(data_size() + extra_data_size()); - for (; dp < end; dp = MethodData::next_extra(dp)) { - if (dp->tag() == DataLayout::no_tag) { + two_free_slots = false; + for (;dp < end; dp = MethodData::next_extra(dp)) { + switch(dp->tag()) { + case DataLayout::no_tag: _saw_free_extra_data = true; // observed an empty slot (common case) + two_free_slots = (MethodData::next_extra(dp)->tag() == DataLayout::no_tag); return NULL; + case DataLayout::arg_info_data_tag: + return NULL; // ArgInfoData is at the end of extra data section. + case DataLayout::bit_data_tag: + if (m == NULL && dp->bci() == bci) { + return new ciBitData(dp); + } + break; + case DataLayout::speculative_trap_data_tag: { + ciSpeculativeTrapData* data = new ciSpeculativeTrapData(dp); + // data->method() might be null if the MDO is snapshotted + // concurrently with a trap + if (m != NULL && data->method() == m && dp->bci() == bci) { + return data; + } + break; } - if (dp->tag() == DataLayout::arg_info_data_tag) { - break; // ArgInfoData is at the end of extra data section. + default: + fatal(err_msg("bad tag = %d", dp->tag())); } - if (dp->bci() == bci) { - assert(dp->tag() == DataLayout::bit_data_tag, "sane"); - return new ciBitData(dp); + } + return NULL; +} + +// Translate a bci to its corresponding data, or NULL. +ciProfileData* ciMethodData::bci_to_data(int bci, ciMethod* m) { + // If m is not NULL we look for a SpeculativeTrapData entry + if (m == NULL) { + ciProfileData* data = data_before(bci); + for ( ; is_valid(data); data = next_data(data)) { + if (data->bci() == bci) { + set_hint_di(dp_to_di(data->dp())); + return data; + } else if (data->bci() > bci) { + break; + } } } + bool two_free_slots = false; + ciProfileData* result = bci_to_extra_data(bci, m, two_free_slots); + if (result != NULL) { + return result; + } + if (m != NULL && !two_free_slots) { + // We were looking for a SpeculativeTrapData entry we didn't + // find. Room is not available for more SpeculativeTrapData + // entries, look in the non SpeculativeTrapData entries. + return bci_to_data(bci, NULL); + } return NULL; } @@ -525,18 +594,25 @@ void ciMethodData::print_data_on(outputStream* st) { st->print_cr("--- Extra data:"); DataLayout* dp = data_layout_at(data_size()); DataLayout* end = data_layout_at(data_size() + extra_data_size()); - for (; dp < end; dp = MethodData::next_extra(dp)) { - if (dp->tag() == DataLayout::no_tag) continue; - if (dp->tag() == DataLayout::bit_data_tag) { + for (;; dp = MethodData::next_extra(dp)) { + assert(dp < end, "moved past end of extra data"); + switch (dp->tag()) { + case DataLayout::no_tag: + continue; + case DataLayout::bit_data_tag: data = new BitData(dp); - } else { - assert(dp->tag() == DataLayout::arg_info_data_tag, "must be BitData or ArgInfo"); + break; + case DataLayout::arg_info_data_tag: data = new ciArgInfoData(dp); dp = end; // ArgInfoData is at the end of extra data section. + break; + default: + fatal(err_msg("unexpected tag %d", dp->tag())); } st->print("%d", dp_to_di(data->dp())); st->fill_to(6); data->print_data_on(st); + if (dp >= end) return; } } @@ -569,8 +645,8 @@ void ciReturnTypeEntry::print_data_on(outputStream* st) const { st->cr(); } -void ciCallTypeData::print_data_on(outputStream* st) const { - print_shared(st, "ciCallTypeData"); +void ciCallTypeData::print_data_on(outputStream* st, const char* extra) const { + print_shared(st, "ciCallTypeData", extra); if (has_arguments()) { tab(st, true); st->print("argument types"); @@ -599,18 +675,18 @@ void ciReceiverTypeData::print_receiver_data_on(outputStream* st) const { } } -void ciReceiverTypeData::print_data_on(outputStream* st) const { - print_shared(st, "ciReceiverTypeData"); +void ciReceiverTypeData::print_data_on(outputStream* st, const char* extra) const { + print_shared(st, "ciReceiverTypeData", extra); print_receiver_data_on(st); } -void ciVirtualCallData::print_data_on(outputStream* st) const { - print_shared(st, "ciVirtualCallData"); +void ciVirtualCallData::print_data_on(outputStream* st, const char* extra) const { + print_shared(st, "ciVirtualCallData", extra); rtd_super()->print_receiver_data_on(st); } -void ciVirtualCallTypeData::print_data_on(outputStream* st) const { - print_shared(st, "ciVirtualCallTypeData"); +void ciVirtualCallTypeData::print_data_on(outputStream* st, const char* extra) const { + print_shared(st, "ciVirtualCallTypeData", extra); rtd_super()->print_receiver_data_on(st); if (has_arguments()) { tab(st, true); @@ -624,8 +700,15 @@ void ciVirtualCallTypeData::print_data_on(outputStream* st) const { } } -void ciParametersTypeData::print_data_on(outputStream* st) const { - st->print_cr("Parametertypes"); +void ciParametersTypeData::print_data_on(outputStream* st, const char* extra) const { + st->print_cr("ciParametersTypeData"); parameters()->print_data_on(st); } + +void ciSpeculativeTrapData::print_data_on(outputStream* st, const char* extra) const { + st->print_cr("ciSpeculativeTrapData"); + tab(st); + method()->print_short_name(st); + st->cr(); +} #endif diff --git a/hotspot/src/share/vm/ci/ciMethodData.hpp b/hotspot/src/share/vm/ci/ciMethodData.hpp index f1a7f2634e4..e5b380fe70f 100644 --- a/hotspot/src/share/vm/ci/ciMethodData.hpp +++ b/hotspot/src/share/vm/ci/ciMethodData.hpp @@ -31,6 +31,7 @@ #include "ci/ciUtilities.hpp" #include "oops/methodData.hpp" #include "oops/oop.inline.hpp" +#include "runtime/deoptimization.hpp" class ciBitData; class ciCounterData; @@ -44,6 +45,7 @@ class ciArgInfoData; class ciCallTypeData; class ciVirtualCallTypeData; class ciParametersTypeData; +class ciSpeculativeTrapData;; typedef ProfileData ciProfileData; @@ -173,7 +175,7 @@ public: } #ifndef PRODUCT - void print_data_on(outputStream* st) const; + void print_data_on(outputStream* st, const char* extra) const; #endif }; @@ -200,7 +202,7 @@ public: } void translate_receiver_data_from(const ProfileData* data); #ifndef PRODUCT - void print_data_on(outputStream* st) const; + void print_data_on(outputStream* st, const char* extra) const; void print_receiver_data_on(outputStream* st) const; #endif }; @@ -225,7 +227,7 @@ public: rtd_super()->translate_receiver_data_from(data); } #ifndef PRODUCT - void print_data_on(outputStream* st) const; + void print_data_on(outputStream* st, const char* extra) const; #endif }; @@ -287,7 +289,7 @@ public: } #ifndef PRODUCT - void print_data_on(outputStream* st) const; + void print_data_on(outputStream* st, const char* extra) const; #endif }; @@ -336,7 +338,26 @@ public: } #ifndef PRODUCT - void print_data_on(outputStream* st) const; + void print_data_on(outputStream* st, const char* extra) const; +#endif +}; + +class ciSpeculativeTrapData : public SpeculativeTrapData { +public: + ciSpeculativeTrapData(DataLayout* layout) : SpeculativeTrapData(layout) {} + + virtual void translate_from(const ProfileData* data); + + ciMethod* method() const { + return (ciMethod*)intptr_at(method_offset); + } + + void set_method(ciMethod* m) { + set_intptr_at(method_offset, (intptr_t)m); + } + +#ifndef PRODUCT + void print_data_on(outputStream* st, const char* extra) const; #endif }; @@ -436,6 +457,16 @@ private: ciArgInfoData *arg_info() const; + address data_base() const { + return (address) _data; + } + DataLayout* limit_data_position() const { + return (DataLayout*)((address)data_base() + _data_size); + } + + void load_extra_data(); + ciProfileData* bci_to_extra_data(int bci, ciMethod* m, bool& two_free_slots); + public: bool is_method_data() const { return true; } @@ -475,9 +506,11 @@ public: ciProfileData* next_data(ciProfileData* current); bool is_valid(ciProfileData* current) { return current != NULL; } - // Get the data at an arbitrary bci, or NULL if there is none. - ciProfileData* bci_to_data(int bci); - ciProfileData* bci_to_extra_data(int bci, bool create_if_missing); + DataLayout* extra_data_base() const { return limit_data_position(); } + + // Get the data at an arbitrary bci, or NULL if there is none. If m + // is not NULL look for a SpeculativeTrapData if any first. + ciProfileData* bci_to_data(int bci, ciMethod* m = NULL); uint overflow_trap_count() const { return _orig.overflow_trap_count(); @@ -496,12 +529,13 @@ public: // Helpful query functions that decode trap_state. int has_trap_at(ciProfileData* data, int reason); - int has_trap_at(int bci, int reason) { - return has_trap_at(bci_to_data(bci), reason); + int has_trap_at(int bci, ciMethod* m, int reason) { + assert((m != NULL) == Deoptimization::reason_is_speculate(reason), "inconsistent method/reason"); + return has_trap_at(bci_to_data(bci, m), reason); } int trap_recompiled_at(ciProfileData* data); - int trap_recompiled_at(int bci) { - return trap_recompiled_at(bci_to_data(bci)); + int trap_recompiled_at(int bci, ciMethod* m) { + return trap_recompiled_at(bci_to_data(bci, m)); } void clear_escape_info(); diff --git a/hotspot/src/share/vm/classfile/classLoaderData.cpp b/hotspot/src/share/vm/classfile/classLoaderData.cpp index 892ea92fb00..6b34e01506c 100644 --- a/hotspot/src/share/vm/classfile/classLoaderData.cpp +++ b/hotspot/src/share/vm/classfile/classLoaderData.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014, 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 @@ -520,6 +520,13 @@ void ClassLoaderData::verify() { } } +bool ClassLoaderData::contains_klass(Klass* klass) { + for (Klass* k = _klasses; k != NULL; k = k->next_link()) { + if (k == klass) return true; + } + return false; +} + // GC root of class loader data created. ClassLoaderData* ClassLoaderDataGraph::_head = NULL; diff --git a/hotspot/src/share/vm/classfile/classLoaderData.hpp b/hotspot/src/share/vm/classfile/classLoaderData.hpp index 9e76b50441f..3fcbb6b7d5c 100644 --- a/hotspot/src/share/vm/classfile/classLoaderData.hpp +++ b/hotspot/src/share/vm/classfile/classLoaderData.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014, 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 @@ -260,6 +260,7 @@ class ClassLoaderData : public CHeapObj { jobject add_handle(Handle h); void add_class(Klass* k); void remove_class(Klass* k); + bool contains_klass(Klass* k); void record_dependency(Klass* to, TRAPS); void init_dependencies(TRAPS); diff --git a/hotspot/src/share/vm/classfile/dictionary.cpp b/hotspot/src/share/vm/classfile/dictionary.cpp index e308791caa7..9a2bb74f821 100644 --- a/hotspot/src/share/vm/classfile/dictionary.cpp +++ b/hotspot/src/share/vm/classfile/dictionary.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -707,7 +707,7 @@ void Dictionary::verify() { loader_data->class_loader() == NULL || loader_data->class_loader()->is_instance(), "checking type of class_loader"); - e->verify(/*check_dictionary*/false); + e->verify(); probe->verify_protection_domain_set(); element_count++; } diff --git a/hotspot/src/share/vm/classfile/systemDictionary.cpp b/hotspot/src/share/vm/classfile/systemDictionary.cpp index f5c5c017dcd..703443517fd 100644 --- a/hotspot/src/share/vm/classfile/systemDictionary.cpp +++ b/hotspot/src/share/vm/classfile/systemDictionary.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -2650,23 +2650,6 @@ void SystemDictionary::verify() { constraints()->verify(dictionary(), placeholders()); } - -void SystemDictionary::verify_obj_klass_present(Symbol* class_name, - ClassLoaderData* loader_data) { - GCMutexLocker mu(SystemDictionary_lock); - Symbol* name; - - Klass* probe = find_class(class_name, loader_data); - if (probe == NULL) { - probe = SystemDictionary::find_shared_class(class_name); - if (probe == NULL) { - name = find_placeholder(class_name, loader_data); - } - } - guarantee(probe != NULL || name != NULL, - "Loaded klasses should be in SystemDictionary"); -} - // utility function for class load event void SystemDictionary::post_class_load_event(const Ticks& start_time, instanceKlassHandle k, diff --git a/hotspot/src/share/vm/classfile/systemDictionary.hpp b/hotspot/src/share/vm/classfile/systemDictionary.hpp index b0e914ff9e4..88132f5209f 100644 --- a/hotspot/src/share/vm/classfile/systemDictionary.hpp +++ b/hotspot/src/share/vm/classfile/systemDictionary.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -375,10 +375,6 @@ public: static bool is_internal_format(Symbol* class_name); #endif - // Verify class is in dictionary - static void verify_obj_klass_present(Symbol* class_name, - ClassLoaderData* loader_data); - // Initialization static void initialize(TRAPS); diff --git a/hotspot/src/share/vm/code/nmethod.cpp b/hotspot/src/share/vm/code/nmethod.cpp index f4dd4aaa5eb..020916b8d34 100644 --- a/hotspot/src/share/vm/code/nmethod.cpp +++ b/hotspot/src/share/vm/code/nmethod.cpp @@ -50,27 +50,6 @@ // Only bother with this argument setup if dtrace is available -#ifndef USDT2 -HS_DTRACE_PROBE_DECL8(hotspot, compiled__method__load, - const char*, int, const char*, int, const char*, int, void*, size_t); - -HS_DTRACE_PROBE_DECL6(hotspot, compiled__method__unload, - char*, int, char*, int, char*, int); - -#define DTRACE_METHOD_UNLOAD_PROBE(method) \ - { \ - Method* m = (method); \ - if (m != NULL) { \ - Symbol* klass_name = m->klass_name(); \ - Symbol* name = m->name(); \ - Symbol* signature = m->signature(); \ - HS_DTRACE_PROBE6(hotspot, compiled__method__unload, \ - klass_name->bytes(), klass_name->utf8_length(), \ - name->bytes(), name->utf8_length(), \ - signature->bytes(), signature->utf8_length()); \ - } \ - } -#else /* USDT2 */ #define DTRACE_METHOD_UNLOAD_PROBE(method) \ { \ Method* m = (method); \ @@ -84,7 +63,6 @@ HS_DTRACE_PROBE_DECL6(hotspot, compiled__method__unload, (char *) signature->bytes(), signature->utf8_length()); \ } \ } -#endif /* USDT2 */ #else // ndef DTRACE_ENABLED @@ -1520,16 +1498,6 @@ bool nmethod::can_unload(BoolObjectClosure* is_alive, oop* root, bool unloading_ void nmethod::post_compiled_method_load_event() { Method* moop = method(); -#ifndef USDT2 - HS_DTRACE_PROBE8(hotspot, compiled__method__load, - moop->klass_name()->bytes(), - moop->klass_name()->utf8_length(), - moop->name()->bytes(), - moop->name()->utf8_length(), - moop->signature()->bytes(), - moop->signature()->utf8_length(), - insts_begin(), insts_size()); -#else /* USDT2 */ HOTSPOT_COMPILED_METHOD_LOAD( (char *) moop->klass_name()->bytes(), moop->klass_name()->utf8_length(), @@ -1538,7 +1506,6 @@ void nmethod::post_compiled_method_load_event() { (char *) moop->signature()->bytes(), moop->signature()->utf8_length(), insts_begin(), insts_size()); -#endif /* USDT2 */ if (JvmtiExport::should_post_compiled_method_load() || JvmtiExport::should_post_compiled_method_unload()) { diff --git a/hotspot/src/share/vm/compiler/compileBroker.cpp b/hotspot/src/share/vm/compiler/compileBroker.cpp index 536bca7851a..51fff71d54b 100644 --- a/hotspot/src/share/vm/compiler/compileBroker.cpp +++ b/hotspot/src/share/vm/compiler/compileBroker.cpp @@ -60,38 +60,6 @@ // Only bother with this argument setup if dtrace is available -#ifndef USDT2 -HS_DTRACE_PROBE_DECL8(hotspot, method__compile__begin, - char*, intptr_t, char*, intptr_t, char*, intptr_t, char*, intptr_t); -HS_DTRACE_PROBE_DECL9(hotspot, method__compile__end, - char*, intptr_t, char*, intptr_t, char*, intptr_t, char*, intptr_t, bool); - -#define DTRACE_METHOD_COMPILE_BEGIN_PROBE(method, comp_name) \ - { \ - Symbol* klass_name = (method)->klass_name(); \ - Symbol* name = (method)->name(); \ - Symbol* signature = (method)->signature(); \ - HS_DTRACE_PROBE8(hotspot, method__compile__begin, \ - comp_name, strlen(comp_name), \ - klass_name->bytes(), klass_name->utf8_length(), \ - name->bytes(), name->utf8_length(), \ - signature->bytes(), signature->utf8_length()); \ - } - -#define DTRACE_METHOD_COMPILE_END_PROBE(method, comp_name, success) \ - { \ - Symbol* klass_name = (method)->klass_name(); \ - Symbol* name = (method)->name(); \ - Symbol* signature = (method)->signature(); \ - HS_DTRACE_PROBE9(hotspot, method__compile__end, \ - comp_name, strlen(comp_name), \ - klass_name->bytes(), klass_name->utf8_length(), \ - name->bytes(), name->utf8_length(), \ - signature->bytes(), signature->utf8_length(), (success)); \ - } - -#else /* USDT2 */ - #define DTRACE_METHOD_COMPILE_BEGIN_PROBE(method, comp_name) \ { \ Symbol* klass_name = (method)->klass_name(); \ @@ -115,7 +83,6 @@ HS_DTRACE_PROBE_DECL9(hotspot, method__compile__end, (char *) name->bytes(), name->utf8_length(), \ (char *) signature->bytes(), signature->utf8_length(), (success)); \ } -#endif /* USDT2 */ #else // ndef DTRACE_ENABLED diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp index 0e4e62a88e0..cd3e7ddc21c 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp @@ -1730,8 +1730,8 @@ CompactibleFreeListSpace::returnChunkToDictionary(FreeChunk* chunk) { _dictionary->return_chunk(chunk); #ifndef PRODUCT if (CMSCollector::abstract_state() != CMSCollector::Sweeping) { - TreeChunk* tc = TreeChunk::as_TreeChunk(chunk); - TreeList* tl = tc->list(); + TreeChunk >* tc = TreeChunk >::as_TreeChunk(chunk); + TreeList >* tl = tc->list(); tl->verify_stats(); } #endif // PRODUCT @@ -2541,10 +2541,10 @@ void CompactibleFreeListSpace::verifyIndexedFreeList(size_t size) const { #ifndef PRODUCT void CompactibleFreeListSpace::check_free_list_consistency() const { - assert((TreeChunk::min_size() <= IndexSetSize), + assert((TreeChunk >::min_size() <= IndexSetSize), "Some sizes can't be allocated without recourse to" " linear allocation buffers"); - assert((TreeChunk::min_size()*HeapWordSize == sizeof(TreeChunk)), + assert((TreeChunk >::min_size()*HeapWordSize == sizeof(TreeChunk >)), "else MIN_TREE_CHUNK_SIZE is wrong"); assert(IndexSetStart != 0, "IndexSetStart not initialized"); assert(IndexSetStride != 0, "IndexSetStride not initialized"); diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp index 847a8326fa0..5807db38eed 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp @@ -3035,7 +3035,6 @@ void CMSCollector::verify_after_remark_work_1() { true, // activate StrongRootsScope SharedHeap::ScanningOption(roots_scanning_options()), ¬Older, - true, // walk code active on stacks NULL, NULL); // SSS: Provide correct closure @@ -3102,7 +3101,6 @@ void CMSCollector::verify_after_remark_work_2() { true, // activate StrongRootsScope SharedHeap::ScanningOption(roots_scanning_options()), ¬Older, - true, // walk code active on stacks NULL, &klass_closure); @@ -3680,12 +3678,6 @@ void CMSCollector::checkpointRootsInitialWork(bool asynch) { ResourceMark rm; HandleMark hm; - FalseClosure falseClosure; - // In the case of a synchronous collection, we will elide the - // remark step, so it's important to catch all the nmethod oops - // in this step. - // The final 'true' flag to gen_process_strong_roots will ensure this. - // If 'async' is true, we can relax the nmethod tracing. MarkRefsIntoClosure notOlder(_span, &_markBitMap); GenCollectedHeap* gch = GenCollectedHeap::heap(); @@ -3738,7 +3730,6 @@ void CMSCollector::checkpointRootsInitialWork(bool asynch) { true, // activate StrongRootsScope SharedHeap::ScanningOption(roots_scanning_options()), ¬Older, - true, // walk all of code cache if (so & SO_AllCodeCache) NULL, &klass_closure); } @@ -5237,7 +5228,6 @@ void CMSParInitialMarkTask::work(uint worker_id) { false, // this is parallel code SharedHeap::ScanningOption(_collector->CMSCollector::roots_scanning_options()), &par_mri_cl, - true, // walk all of code cache if (so & SO_AllCodeCache) NULL, &klass_closure); assert(_collector->should_unload_classes() @@ -5373,7 +5363,6 @@ void CMSParRemarkTask::work(uint worker_id) { false, // this is parallel code SharedHeap::ScanningOption(_collector->CMSCollector::roots_scanning_options()), &par_mrias_cl, - true, // walk all of code cache if (so & SO_AllCodeCache) NULL, NULL); // The dirty klasses will be handled below assert(_collector->should_unload_classes() @@ -5963,7 +5952,6 @@ void CMSCollector::do_remark_non_parallel() { false, // use the local StrongRootsScope SharedHeap::ScanningOption(roots_scanning_options()), &mrias_cl, - true, // walk code active on stacks NULL, NULL); // The dirty klasses will be handled below diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp index e98e8b6ce28..3c771ef3946 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp @@ -1383,13 +1383,6 @@ class ASConcurrentMarkSweepGeneration : public ConcurrentMarkSweepGeneration { // Closures of various sorts used by CMS to accomplish its work // -// This closure is used to check that a certain set of oops is empty. -class FalseClosure: public OopClosure { - public: - void do_oop(oop* p) { guarantee(false, "Should be an empty set"); } - void do_oop(narrowOop* p) { guarantee(false, "Should be an empty set"); } -}; - // This closure is used to do concurrent marking from the roots // following the first checkpoint. class MarkFromRootsClosure: public BitMapClosure { diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.cpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.cpp index 8024d298f05..46c0650a772 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.cpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.cpp @@ -35,14 +35,6 @@ #include "utilities/dtrace.hpp" -#ifndef USDT2 -HS_DTRACE_PROBE_DECL(hs_private, cms__initmark__begin); -HS_DTRACE_PROBE_DECL(hs_private, cms__initmark__end); - -HS_DTRACE_PROBE_DECL(hs_private, cms__remark__begin); -HS_DTRACE_PROBE_DECL(hs_private, cms__remark__end); -#endif /* !USDT2 */ - ////////////////////////////////////////////////////////// // Methods in abstract class VM_CMS_Operation ////////////////////////////////////////////////////////// @@ -138,11 +130,7 @@ void VM_CMS_Initial_Mark::doit() { // Nothing to do. return; } -#ifndef USDT2 - HS_DTRACE_PROBE(hs_private, cms__initmark__begin); -#else /* USDT2 */ HS_PRIVATE_CMS_INITMARK_BEGIN(); -#endif /* USDT2 */ _collector->_gc_timer_cm->register_gc_pause_start("Initial Mark"); @@ -158,11 +146,7 @@ void VM_CMS_Initial_Mark::doit() { _collector->_gc_timer_cm->register_gc_pause_end(); -#ifndef USDT2 - HS_DTRACE_PROBE(hs_private, cms__initmark__end); -#else /* USDT2 */ HS_PRIVATE_CMS_INITMARK_END(); -#endif /* USDT2 */ } ////////////////////////////////////////////////////////// @@ -173,11 +157,7 @@ void VM_CMS_Final_Remark::doit() { // Nothing to do. return; } -#ifndef USDT2 - HS_DTRACE_PROBE(hs_private, cms__remark__begin); -#else /* USDT2 */ HS_PRIVATE_CMS_REMARK_BEGIN(); -#endif /* USDT2 */ _collector->_gc_timer_cm->register_gc_pause_start("Final Mark"); @@ -194,11 +174,7 @@ void VM_CMS_Final_Remark::doit() { _collector->save_heap_summary(); _collector->_gc_timer_cm->register_gc_pause_end(); -#ifndef USDT2 - HS_DTRACE_PROBE(hs_private, cms__remark__end); -#else /* USDT2 */ HS_PRIVATE_CMS_REMARK_END(); -#endif /* USDT2 */ } // VM operation to invoke a concurrent collection of a diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp index 1a46ed3f52d..2a0a563d5f4 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,7 +41,7 @@ nonstatic_field(LinearAllocBlock, _word_size, size_t) \ nonstatic_field(AFLBinaryTreeDictionary, _total_size, size_t) \ nonstatic_field(CompactibleFreeListSpace, _dictionary, AFLBinaryTreeDictionary*) \ - nonstatic_field(CompactibleFreeListSpace, _indexedFreeList[0], FreeList) \ + nonstatic_field(CompactibleFreeListSpace, _indexedFreeList[0], AdaptiveFreeList) \ nonstatic_field(CompactibleFreeListSpace, _smallLinearAllocBlock, LinearAllocBlock) diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp index f027f29491c..c9e43171368 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp @@ -3394,13 +3394,12 @@ void G1CollectedHeap::verify(bool silent, VerifyOption vo) { if (!silent) { gclog_or_tty->print("Roots "); } VerifyRootsClosure rootsCl(vo); - G1VerifyCodeRootOopClosure codeRootsCl(this, &rootsCl, vo); - G1VerifyCodeRootBlobClosure blobsCl(&codeRootsCl); VerifyKlassClosure klassCl(this, &rootsCl); // We apply the relevant closures to all the oops in the - // system dictionary, the string table and the code cache. - const int so = SO_AllClasses | SO_Strings | SO_AllCodeCache; + // system dictionary, class loader data graph and the string table. + // Don't verify the code cache here, since it's verified below. + const int so = SO_AllClasses | SO_Strings; // Need cleared claim bits for the strong roots processing ClassLoaderDataGraph::clear_claimed_marks(); @@ -3408,10 +3407,14 @@ void G1CollectedHeap::verify(bool silent, VerifyOption vo) { process_strong_roots(true, // activate StrongRootsScope ScanningOption(so), // roots scanning options &rootsCl, - &blobsCl, &klassCl ); + // Verify the nmethods in the code cache. + G1VerifyCodeRootOopClosure codeRootsCl(this, &rootsCl, vo); + G1VerifyCodeRootBlobClosure blobsCl(&codeRootsCl); + CodeCache::blobs_do(&blobsCl); + bool failures = rootsCl.failures() || codeRootsCl.failures(); if (vo != VerifyOption_G1UseMarkWord) { @@ -5115,12 +5118,9 @@ g1_process_strong_roots(bool is_scavenging, BufferingOopClosure buf_scan_non_heap_roots(scan_non_heap_roots); - CodeBlobToOopClosure scan_code_roots(&buf_scan_non_heap_roots, true /* do_marking */); - process_strong_roots(false, // no scoping; this is parallel code so, &buf_scan_non_heap_roots, - &scan_code_roots, scan_klasses ); @@ -5180,12 +5180,6 @@ g1_process_strong_roots(bool is_scavenging, _process_strong_tasks->all_tasks_completed(); } -void -G1CollectedHeap::g1_process_weak_roots(OopClosure* root_closure) { - CodeBlobToOopClosure roots_in_blobs(root_closure, /*do_marking=*/ false); - SharedHeap::process_weak_roots(root_closure, &roots_in_blobs); -} - class G1StringSymbolTableUnlinkTask : public AbstractGangTask { private: BoolObjectClosure* _is_alive; diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp index 07bbe275788..45caab039ea 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp @@ -833,11 +833,6 @@ protected: G1KlassScanClosure* scan_klasses, int worker_i); - // Apply "blk" to all the weak roots of the system. These include - // JNI weak roots, the code cache, system dictionary, symbol table, - // string table, and referents of reachable weak refs. - void g1_process_weak_roots(OopClosure* root_closure); - // Frees a non-humongous region by initializing its contents and // adding it to the free list that's passed as a parameter (this is // usually a local list which will be appended to the master free diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp index 2cc0f46a2cc..dee7ce0b72e 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp @@ -133,7 +133,6 @@ void G1MarkSweep::mark_sweep_phase1(bool& marked_for_unloading, sh->process_strong_roots(true, // activate StrongRootsScope SharedHeap::SO_SystemClasses, &GenMarkSweep::follow_root_closure, - &GenMarkSweep::follow_code_root_closure, &GenMarkSweep::follow_klass_closure); // Process reference objects found during marking @@ -307,9 +306,8 @@ void G1MarkSweep::mark_sweep_phase3() { ClassLoaderDataGraph::clear_claimed_marks(); sh->process_strong_roots(true, // activate StrongRootsScope - SharedHeap::SO_AllClasses, + SharedHeap::SO_AllClasses | SharedHeap::SO_Strings | SharedHeap::SO_AllCodeCache, &GenMarkSweep::adjust_pointer_closure, - NULL, // do not touch code cache here &GenMarkSweep::adjust_klass_closure); assert(GenMarkSweep::ref_processor() == g1h->ref_processor_stw(), "Sanity"); @@ -317,7 +315,7 @@ void G1MarkSweep::mark_sweep_phase3() { // Now adjust pointers in remaining weak roots. (All of which should // have been cleared if they pointed to non-surviving objects.) - g1h->g1_process_weak_roots(&GenMarkSweep::adjust_pointer_closure); + sh->process_weak_roots(&GenMarkSweep::adjust_pointer_closure); GenMarkSweep::adjust_marks(); diff --git a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp b/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp index d97cc0dceb0..cc926949990 100644 --- a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp +++ b/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp @@ -621,7 +621,6 @@ void ParNewGenTask::work(uint worker_id) { false, // no scope; this is parallel code SharedHeap::ScanningOption(so), &par_scan_state.to_space_root_closure(), - true, // walk *all* scavengable nmethods &par_scan_state.older_gen_closure(), &klass_scan_closure); par_scan_state.end_strong_roots(); diff --git a/hotspot/src/share/vm/gc_implementation/shared/markSweep.cpp b/hotspot/src/share/vm/gc_implementation/shared/markSweep.cpp index 1bc3ea46a3e..67d8a5ac8ec 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/markSweep.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/markSweep.cpp @@ -47,7 +47,6 @@ STWGCTimer* MarkSweep::_gc_timer = NULL; SerialOldTracer* MarkSweep::_gc_tracer = NULL; MarkSweep::FollowRootClosure MarkSweep::follow_root_closure; -CodeBlobToOopClosure MarkSweep::follow_code_root_closure(&MarkSweep::follow_root_closure, /*do_marking=*/ true); void MarkSweep::FollowRootClosure::do_oop(oop* p) { follow_root(p); } void MarkSweep::FollowRootClosure::do_oop(narrowOop* p) { follow_root(p); } diff --git a/hotspot/src/share/vm/gc_implementation/shared/markSweep.hpp b/hotspot/src/share/vm/gc_implementation/shared/markSweep.hpp index 38fc8e70589..1857c2a3acc 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/markSweep.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/markSweep.hpp @@ -143,7 +143,6 @@ class MarkSweep : AllStatic { // Public closures static IsAliveClosure is_alive; static FollowRootClosure follow_root_closure; - static CodeBlobToOopClosure follow_code_root_closure; // => follow_root_closure static MarkAndPushClosure mark_and_push_closure; static FollowKlassClosure follow_klass_closure; static FollowStackClosure follow_stack_closure; diff --git a/hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.cpp b/hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.cpp index ca3c0f48310..9027b89c375 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.cpp @@ -41,33 +41,18 @@ #include "gc_implementation/g1/g1CollectedHeap.inline.hpp" #endif // INCLUDE_ALL_GCS -#ifndef USDT2 -HS_DTRACE_PROBE_DECL1(hotspot, gc__begin, bool); -HS_DTRACE_PROBE_DECL(hotspot, gc__end); -#endif /* !USDT2 */ - // The same dtrace probe can't be inserted in two different files, so we // have to call it here, so it's only in one file. Can't create new probes // for the other file anymore. The dtrace probes have to remain stable. void VM_GC_Operation::notify_gc_begin(bool full) { -#ifndef USDT2 - HS_DTRACE_PROBE1(hotspot, gc__begin, full); - HS_DTRACE_WORKAROUND_TAIL_CALL_BUG(); -#else /* USDT2 */ HOTSPOT_GC_BEGIN( full); HS_DTRACE_WORKAROUND_TAIL_CALL_BUG(); -#endif /* USDT2 */ } void VM_GC_Operation::notify_gc_end() { -#ifndef USDT2 - HS_DTRACE_PROBE(hotspot, gc__end); - HS_DTRACE_WORKAROUND_TAIL_CALL_BUG(); -#else /* USDT2 */ HOTSPOT_GC_END(); HS_DTRACE_WORKAROUND_TAIL_CALL_BUG(); -#endif /* USDT2 */ } void VM_GC_Operation::acquire_pending_list_lock() { diff --git a/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp b/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp index 7389d3afbf0..06261c804de 100644 --- a/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp +++ b/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp @@ -415,10 +415,10 @@ * On some architectures/platforms it should be possible to do this implicitly */ #undef CHECK_NULL -#define CHECK_NULL(obj_) \ - if ((obj_) == NULL) { \ - VM_JAVA_ERROR(vmSymbols::java_lang_NullPointerException(), "", note_nullCheck_trap); \ - } \ +#define CHECK_NULL(obj_) \ + if ((obj_) == NULL) { \ + VM_JAVA_ERROR(vmSymbols::java_lang_NullPointerException(), NULL, note_nullCheck_trap); \ + } \ VERIFY_OOP(obj_) #define VMdoubleConstZero() 0.0 diff --git a/hotspot/src/share/vm/interpreter/bytecodeTracer.cpp b/hotspot/src/share/vm/interpreter/bytecodeTracer.cpp index 37ac6d1a6e4..1892940f216 100644 --- a/hotspot/src/share/vm/interpreter/bytecodeTracer.cpp +++ b/hotspot/src/share/vm/interpreter/bytecodeTracer.cpp @@ -596,7 +596,7 @@ void BytecodePrinter::bytecode_epilog(int bci, outputStream* st) { if (data != NULL) { st->print(" %d", mdo->dp_to_di(data->dp())); st->fill_to(6); - data->print_data_on(st); + data->print_data_on(st, mdo); } } } diff --git a/hotspot/src/share/vm/memory/binaryTreeDictionary.cpp b/hotspot/src/share/vm/memory/binaryTreeDictionary.cpp index 68b97e9f0d3..8198c2f927c 100644 --- a/hotspot/src/share/vm/memory/binaryTreeDictionary.cpp +++ b/hotspot/src/share/vm/memory/binaryTreeDictionary.cpp @@ -44,16 +44,16 @@ // This is currently used in the Concurrent Mark&Sweep implementation. //////////////////////////////////////////////////////////////////////////////// -template class FreeList_t> +template size_t TreeChunk::_min_tree_chunk_size = sizeof(TreeChunk)/HeapWordSize; -template class FreeList_t> +template TreeChunk* TreeChunk::as_TreeChunk(Chunk_t* fc) { // Do some assertion checking here. return (TreeChunk*) fc; } -template class FreeList_t> +template void TreeChunk::verify_tree_chunk_list() const { TreeChunk* nextTC = (TreeChunk*)next(); if (prev() != NULL) { // interior list node shouldn't have tree fields @@ -67,11 +67,11 @@ void TreeChunk::verify_tree_chunk_list() const { } } -template class FreeList_t> +template TreeList::TreeList() : _parent(NULL), _left(NULL), _right(NULL) {} -template class FreeList_t> +template TreeList* TreeList::as_TreeList(TreeChunk* tc) { // This first free chunk in the list will be the tree list. @@ -88,20 +88,7 @@ TreeList::as_TreeList(TreeChunk* tc) { return tl; } - -template class FreeList_t> -TreeList* -get_chunk(size_t size, enum FreeBlockDictionary::Dither dither) { - FreeBlockDictionary::verify_par_locked(); - Chunk_t* res = get_chunk_from_tree(size, dither); - assert(res == NULL || res->is_free(), - "Should be returning a free chunk"); - assert(dither != FreeBlockDictionary::exactly || - res->size() == size, "Not correct size"); - return res; -} - -template class FreeList_t> +template TreeList* TreeList::as_TreeList(HeapWord* addr, size_t size) { TreeChunk* tc = (TreeChunk*) addr; @@ -125,17 +112,17 @@ TreeList::as_TreeList(HeapWord* addr, size_t size) { // an over populated size. The general get_better_list() just returns // the current list. template <> -TreeList* -TreeList::get_better_list( - BinaryTreeDictionary* dictionary) { +TreeList >* +TreeList >::get_better_list( + BinaryTreeDictionary >* dictionary) { // A candidate chunk has been found. If it is already under // populated, get a chunk associated with the hint for this // chunk. - TreeList* curTL = this; + TreeList >* curTL = this; if (surplus() <= 0) { /* Use the hint to find a size with a surplus, and reset the hint. */ - TreeList* hintTL = this; + TreeList >* hintTL = this; while (hintTL->hint() != 0) { assert(hintTL->hint() > hintTL->size(), "hint points in the wrong direction"); @@ -163,14 +150,14 @@ TreeList::get_better_list( } #endif // INCLUDE_ALL_GCS -template class FreeList_t> +template TreeList* TreeList::get_better_list( BinaryTreeDictionary* dictionary) { return this; } -template class FreeList_t> +template TreeList* TreeList::remove_chunk_replace_if_needed(TreeChunk* tc) { TreeList* retTL = this; @@ -286,7 +273,7 @@ TreeList* TreeList::remove_chunk_repla return retTL; } -template class FreeList_t> +template void TreeList::return_chunk_at_tail(TreeChunk* chunk) { assert(chunk != NULL, "returning NULL chunk"); assert(chunk->list() == this, "list should be set for chunk"); @@ -301,7 +288,7 @@ void TreeList::return_chunk_at_tail(TreeChunklink_tail(chunk); assert(!tail() || size() == tail()->size(), "Wrong sized chunk in list"); - FreeList_t::increment_count(); + FreeList_t::increment_count(); debug_only(this->increment_returned_bytes_by(chunk->size()*sizeof(HeapWord));) assert(head() == NULL || head()->prev() == NULL, "list invariant"); assert(tail() == NULL || tail()->next() == NULL, "list invariant"); @@ -311,7 +298,7 @@ void TreeList::return_chunk_at_tail(TreeChunk is embedded in the first TreeChunk in the // list. See the definition of TreeChunk. -template class FreeList_t> +template void TreeList::return_chunk_at_head(TreeChunk* chunk) { assert(chunk->list() == this, "list should be set for chunk"); assert(head() != NULL, "The tree list is embedded in the first chunk"); @@ -329,13 +316,13 @@ void TreeList::return_chunk_at_head(TreeChunklink_after(chunk); assert(!head() || size() == head()->size(), "Wrong sized chunk in list"); - FreeList_t::increment_count(); + FreeList_t::increment_count(); debug_only(this->increment_returned_bytes_by(chunk->size()*sizeof(HeapWord));) assert(head() == NULL || head()->prev() == NULL, "list invariant"); assert(tail() == NULL || tail()->next() == NULL, "list invariant"); } -template class FreeList_t> +template void TreeChunk::assert_is_mangled() const { assert((ZapUnusedHeapArea && SpaceMangler::is_mangled((HeapWord*) Chunk_t::size_addr()) && @@ -345,14 +332,14 @@ void TreeChunk::assert_is_mangled() const { "Space should be clear or mangled"); } -template class FreeList_t> +template TreeChunk* TreeList::head_as_TreeChunk() { assert(head() == NULL || (TreeChunk::as_TreeChunk(head())->list() == this), "Wrong type of chunk?"); return TreeChunk::as_TreeChunk(head()); } -template class FreeList_t> +template TreeChunk* TreeList::first_available() { assert(head() != NULL, "The head of the list cannot be NULL"); Chunk_t* fc = head()->next(); @@ -369,7 +356,7 @@ TreeChunk* TreeList::first_available() // Returns the block with the largest heap address amongst // those in the list for this size; potentially slow and expensive, // use with caution! -template class FreeList_t> +template TreeChunk* TreeList::largest_address() { assert(head() != NULL, "The head of the list cannot be NULL"); Chunk_t* fc = head()->next(); @@ -392,7 +379,7 @@ TreeChunk* TreeList::largest_address() return retTC; } -template class FreeList_t> +template BinaryTreeDictionary::BinaryTreeDictionary(MemRegion mr) { assert((mr.byte_size() > min_size()), "minimum chunk size"); @@ -405,17 +392,17 @@ BinaryTreeDictionary::BinaryTreeDictionary(MemRegion mr) { assert(total_free_blocks() == 1, "reset check failed"); } -template class FreeList_t> +template void BinaryTreeDictionary::inc_total_size(size_t inc) { _total_size = _total_size + inc; } -template class FreeList_t> +template void BinaryTreeDictionary::dec_total_size(size_t dec) { _total_size = _total_size - dec; } -template class FreeList_t> +template void BinaryTreeDictionary::reset(MemRegion mr) { assert((mr.byte_size() > min_size()), "minimum chunk size"); set_root(TreeList::as_TreeList(mr.start(), mr.word_size())); @@ -423,13 +410,13 @@ void BinaryTreeDictionary::reset(MemRegion mr) { set_total_free_blocks(1); } -template class FreeList_t> +template void BinaryTreeDictionary::reset(HeapWord* addr, size_t byte_size) { MemRegion mr(addr, heap_word_size(byte_size)); reset(mr); } -template class FreeList_t> +template void BinaryTreeDictionary::reset() { set_root(NULL); set_total_size(0); @@ -437,7 +424,7 @@ void BinaryTreeDictionary::reset() { } // Get a free block of size at least size from tree, or NULL. -template class FreeList_t> +template TreeChunk* BinaryTreeDictionary::get_chunk_from_tree( size_t size, @@ -496,7 +483,7 @@ BinaryTreeDictionary::get_chunk_from_tree( return retTC; } -template class FreeList_t> +template TreeList* BinaryTreeDictionary::find_list(size_t size) const { TreeList* curTL; for (curTL = root(); curTL != NULL;) { @@ -515,7 +502,7 @@ TreeList* BinaryTreeDictionary::find_l } -template class FreeList_t> +template bool BinaryTreeDictionary::verify_chunk_in_free_list(Chunk_t* tc) const { size_t size = tc->size(); TreeList* tl = find_list(size); @@ -526,7 +513,7 @@ bool BinaryTreeDictionary::verify_chunk_in_free_list(Chunk_ } } -template class FreeList_t> +template Chunk_t* BinaryTreeDictionary::find_largest_dict() const { TreeList *curTL = root(); if (curTL != NULL) { @@ -541,7 +528,7 @@ Chunk_t* BinaryTreeDictionary::find_largest_dict() const { // chunk in a list on a tree node, just unlink it. // If it is the last chunk in the list (the next link is NULL), // remove the node and repair the tree. -template class FreeList_t> +template TreeChunk* BinaryTreeDictionary::remove_chunk_from_tree(TreeChunk* tc) { assert(tc != NULL, "Should not call with a NULL chunk"); @@ -682,7 +669,7 @@ BinaryTreeDictionary::remove_chunk_from_tree(TreeChunk class FreeList_t> +template TreeList* BinaryTreeDictionary::remove_tree_minimum(TreeList* tl) { assert(tl != NULL && tl->parent() != NULL, "really need a proper sub-tree"); // locate the subtree minimum by walking down left branches @@ -717,7 +704,7 @@ TreeList* BinaryTreeDictionary::remove return curTL; } -template class FreeList_t> +template void BinaryTreeDictionary::insert_chunk_in_tree(Chunk_t* fc) { TreeList *curTL, *prevTL; size_t size = fc->size(); @@ -783,7 +770,7 @@ void BinaryTreeDictionary::insert_chunk_in_tree(Chunk_t* fc } } -template class FreeList_t> +template size_t BinaryTreeDictionary::max_chunk_size() const { FreeBlockDictionary::verify_par_locked(); TreeList* tc = root(); @@ -792,7 +779,7 @@ size_t BinaryTreeDictionary::max_chunk_size() const { return tc->size(); } -template class FreeList_t> +template size_t BinaryTreeDictionary::total_list_length(TreeList* tl) const { size_t res; res = tl->count(); @@ -805,7 +792,7 @@ size_t BinaryTreeDictionary::total_list_length(TreeList class FreeList_t> +template size_t BinaryTreeDictionary::total_size_in_tree(TreeList* tl) const { if (tl == NULL) return 0; @@ -814,7 +801,7 @@ size_t BinaryTreeDictionary::total_size_in_tree(TreeListright()); } -template class FreeList_t> +template double BinaryTreeDictionary::sum_of_squared_block_sizes(TreeList* const tl) const { if (tl == NULL) { return 0.0; @@ -826,7 +813,7 @@ double BinaryTreeDictionary::sum_of_squared_block_sizes(Tre return curr; } -template class FreeList_t> +template size_t BinaryTreeDictionary::total_free_blocks_in_tree(TreeList* tl) const { if (tl == NULL) return 0; @@ -835,14 +822,14 @@ size_t BinaryTreeDictionary::total_free_blocks_in_tree(Tree total_free_blocks_in_tree(tl->right()); } -template class FreeList_t> +template size_t BinaryTreeDictionary::num_free_blocks() const { assert(total_free_blocks_in_tree(root()) == total_free_blocks(), "_total_free_blocks inconsistency"); return total_free_blocks(); } -template class FreeList_t> +template size_t BinaryTreeDictionary::tree_height_helper(TreeList* tl) const { if (tl == NULL) return 0; @@ -850,12 +837,12 @@ size_t BinaryTreeDictionary::tree_height_helper(TreeListright())); } -template class FreeList_t> +template size_t BinaryTreeDictionary::tree_height() const { return tree_height_helper(root()); } -template class FreeList_t> +template size_t BinaryTreeDictionary::total_nodes_helper(TreeList* tl) const { if (tl == NULL) { return 0; @@ -864,18 +851,18 @@ size_t BinaryTreeDictionary::total_nodes_helper(TreeListright()); } -template class FreeList_t> +template size_t BinaryTreeDictionary::total_nodes_in_tree(TreeList* tl) const { return total_nodes_helper(root()); } -template class FreeList_t> +template void BinaryTreeDictionary::dict_census_update(size_t size, bool split, bool birth){} #if INCLUDE_ALL_GCS template <> -void AFLBinaryTreeDictionary::dict_census_update(size_t size, bool split, bool birth){ - TreeList* nd = find_list(size); +void AFLBinaryTreeDictionary::dict_census_update(size_t size, bool split, bool birth) { + TreeList >* nd = find_list(size); if (nd) { if (split) { if (birth) { @@ -903,7 +890,7 @@ void AFLBinaryTreeDictionary::dict_census_update(size_t size, bool split, bool b } #endif // INCLUDE_ALL_GCS -template class FreeList_t> +template bool BinaryTreeDictionary::coal_dict_over_populated(size_t size) { // For the general type of freelists, encourage coalescing by // returning true. @@ -915,7 +902,7 @@ template <> bool AFLBinaryTreeDictionary::coal_dict_over_populated(size_t size) { if (FLSAlwaysCoalesceLarge) return true; - TreeList* list_of_size = find_list(size); + TreeList >* list_of_size = find_list(size); // None of requested size implies overpopulated. return list_of_size == NULL || list_of_size->coal_desired() <= 0 || list_of_size->count() > list_of_size->coal_desired(); @@ -928,15 +915,15 @@ bool AFLBinaryTreeDictionary::coal_dict_over_populated(size_t size) { // do_tree() walks the nodes in the binary tree applying do_list() // to each list at each node. -template class FreeList_t> +template class TreeCensusClosure : public StackObj { protected: - virtual void do_list(FreeList_t* fl) = 0; + virtual void do_list(FreeList_t* fl) = 0; public: virtual void do_tree(TreeList* tl) = 0; }; -template class FreeList_t> +template class AscendTreeCensusClosure : public TreeCensusClosure { public: void do_tree(TreeList* tl) { @@ -948,7 +935,7 @@ class AscendTreeCensusClosure : public TreeCensusClosure { } }; -template class FreeList_t> +template class DescendTreeCensusClosure : public TreeCensusClosure { public: void do_tree(TreeList* tl) { @@ -962,7 +949,7 @@ class DescendTreeCensusClosure : public TreeCensusClosure { // For each list in the tree, calculate the desired, desired // coalesce, count before sweep, and surplus before sweep. -template class FreeList_t> +template class BeginSweepClosure : public AscendTreeCensusClosure { double _percentage; float _inter_sweep_current; @@ -995,16 +982,16 @@ class BeginSweepClosure : public AscendTreeCensusClosure { // Similar to TreeCensusClosure but searches the // tree and returns promptly when found. -template class FreeList_t> +template class TreeSearchClosure : public StackObj { protected: - virtual bool do_list(FreeList_t* fl) = 0; + virtual bool do_list(FreeList_t* fl) = 0; public: virtual bool do_tree(TreeList* tl) = 0; }; #if 0 // Don't need this yet but here for symmetry. -template class FreeList_t> +template class AscendTreeSearchClosure : public TreeSearchClosure { public: bool do_tree(TreeList* tl) { @@ -1018,7 +1005,7 @@ class AscendTreeSearchClosure : public TreeSearchClosure { }; #endif -template class FreeList_t> +template class DescendTreeSearchClosure : public TreeSearchClosure { public: bool do_tree(TreeList* tl) { @@ -1033,14 +1020,14 @@ class DescendTreeSearchClosure : public TreeSearchClosure { // Searches the tree for a chunk that ends at the // specified address. -template class FreeList_t> +template class EndTreeSearchClosure : public DescendTreeSearchClosure { HeapWord* _target; Chunk_t* _found; public: EndTreeSearchClosure(HeapWord* target) : _target(target), _found(NULL) {} - bool do_list(FreeList_t* fl) { + bool do_list(FreeList_t* fl) { Chunk_t* item = fl->head(); while (item != NULL) { if (item->end() == (uintptr_t*) _target) { @@ -1054,7 +1041,7 @@ class EndTreeSearchClosure : public DescendTreeSearchClosure class FreeList_t> +template Chunk_t* BinaryTreeDictionary::find_chunk_ends_at(HeapWord* target) const { EndTreeSearchClosure etsc(target); bool found_target = etsc.do_tree(root()); @@ -1063,7 +1050,7 @@ Chunk_t* BinaryTreeDictionary::find_chunk_ends_at(HeapWord* return etsc.found(); } -template class FreeList_t> +template void BinaryTreeDictionary::begin_sweep_dict_census(double coalSurplusPercent, float inter_sweep_current, float inter_sweep_estimate, float intra_sweep_estimate) { BeginSweepClosure bsc(coalSurplusPercent, inter_sweep_current, @@ -1075,32 +1062,32 @@ void BinaryTreeDictionary::begin_sweep_dict_census(double c // Closures and methods for calculating total bytes returned to the // free lists in the tree. #ifndef PRODUCT -template class FreeList_t> +template class InitializeDictReturnedBytesClosure : public AscendTreeCensusClosure { public: - void do_list(FreeList_t* fl) { + void do_list(FreeList_t* fl) { fl->set_returned_bytes(0); } }; -template class FreeList_t> +template void BinaryTreeDictionary::initialize_dict_returned_bytes() { InitializeDictReturnedBytesClosure idrb; idrb.do_tree(root()); } -template class FreeList_t> +template class ReturnedBytesClosure : public AscendTreeCensusClosure { size_t _dict_returned_bytes; public: ReturnedBytesClosure() { _dict_returned_bytes = 0; } - void do_list(FreeList_t* fl) { + void do_list(FreeList_t* fl) { _dict_returned_bytes += fl->returned_bytes(); } size_t dict_returned_bytes() { return _dict_returned_bytes; } }; -template class FreeList_t> +template size_t BinaryTreeDictionary::sum_dict_returned_bytes() { ReturnedBytesClosure rbc; rbc.do_tree(root()); @@ -1109,17 +1096,17 @@ size_t BinaryTreeDictionary::sum_dict_returned_bytes() { } // Count the number of entries in the tree. -template class FreeList_t> +template class treeCountClosure : public DescendTreeCensusClosure { public: uint count; treeCountClosure(uint c) { count = c; } - void do_list(FreeList_t* fl) { + void do_list(FreeList_t* fl) { count++; } }; -template class FreeList_t> +template size_t BinaryTreeDictionary::total_count() { treeCountClosure ctc(0); ctc.do_tree(root()); @@ -1128,7 +1115,7 @@ size_t BinaryTreeDictionary::total_count() { #endif // PRODUCT // Calculate surpluses for the lists in the tree. -template class FreeList_t> +template class setTreeSurplusClosure : public AscendTreeCensusClosure { double percentage; public: @@ -1144,14 +1131,14 @@ class setTreeSurplusClosure : public AscendTreeCensusClosure class FreeList_t> +template void BinaryTreeDictionary::set_tree_surplus(double splitSurplusPercent) { setTreeSurplusClosure sts(splitSurplusPercent); sts.do_tree(root()); } // Set hints for the lists in the tree. -template class FreeList_t> +template class setTreeHintsClosure : public DescendTreeCensusClosure { size_t hint; public: @@ -1170,14 +1157,14 @@ class setTreeHintsClosure : public DescendTreeCensusClosure #endif // INCLUDE_ALL_GCS }; -template class FreeList_t> +template void BinaryTreeDictionary::set_tree_hints(void) { setTreeHintsClosure sth(0); sth.do_tree(root()); } // Save count before previous sweep and splits and coalesces. -template class FreeList_t> +template class clearTreeCensusClosure : public AscendTreeCensusClosure { void do_list(FreeList* fl) {} @@ -1192,14 +1179,14 @@ class clearTreeCensusClosure : public AscendTreeCensusClosure class FreeList_t> +template void BinaryTreeDictionary::clear_tree_census(void) { clearTreeCensusClosure ctc; ctc.do_tree(root()); } // Do reporting and post sweep clean up. -template class FreeList_t> +template void BinaryTreeDictionary::end_sweep_dict_census(double splitSurplusPercent) { // Does walking the tree 3 times hurt? set_tree_surplus(splitSurplusPercent); @@ -1211,7 +1198,7 @@ void BinaryTreeDictionary::end_sweep_dict_census(double spl } // Print summary statistics -template class FreeList_t> +template void BinaryTreeDictionary::report_statistics() const { FreeBlockDictionary::verify_par_locked(); gclog_or_tty->print("Statistics for BinaryTreeDictionary:\n" @@ -1230,22 +1217,22 @@ void BinaryTreeDictionary::report_statistics() const { // Print census information - counts, births, deaths, etc. // for each list in the tree. Also print some summary // information. -template class FreeList_t> +template class PrintTreeCensusClosure : public AscendTreeCensusClosure { int _print_line; size_t _total_free; - FreeList_t _total; + FreeList_t _total; public: PrintTreeCensusClosure() { _print_line = 0; _total_free = 0; } - FreeList_t* total() { return &_total; } + FreeList_t* total() { return &_total; } size_t total_free() { return _total_free; } void do_list(FreeList* fl) { if (++_print_line >= 40) { - FreeList_t::print_labels_on(gclog_or_tty, "size"); + FreeList_t::print_labels_on(gclog_or_tty, "size"); _print_line = 0; } fl->print_on(gclog_or_tty); @@ -1256,7 +1243,7 @@ class PrintTreeCensusClosure : public AscendTreeCensusClosure* fl) { if (++_print_line >= 40) { - FreeList_t::print_labels_on(gclog_or_tty, "size"); + FreeList_t::print_labels_on(gclog_or_tty, "size"); _print_line = 0; } fl->print_on(gclog_or_tty); @@ -1275,16 +1262,16 @@ class PrintTreeCensusClosure : public AscendTreeCensusClosure class FreeList_t> +template void BinaryTreeDictionary::print_dict_census(void) const { gclog_or_tty->print("\nBinaryTree\n"); - FreeList_t::print_labels_on(gclog_or_tty, "size"); + FreeList_t::print_labels_on(gclog_or_tty, "size"); PrintTreeCensusClosure ptc; ptc.do_tree(root()); - FreeList_t* total = ptc.total(); - FreeList_t::print_labels_on(gclog_or_tty, " "); + FreeList_t* total = ptc.total(); + FreeList_t::print_labels_on(gclog_or_tty, " "); } #if INCLUDE_ALL_GCS @@ -1293,7 +1280,7 @@ void AFLBinaryTreeDictionary::print_dict_census(void) const { gclog_or_tty->print("\nBinaryTree\n"); AdaptiveFreeList::print_labels_on(gclog_or_tty, "size"); - PrintTreeCensusClosure ptc; + PrintTreeCensusClosure > ptc; ptc.do_tree(root()); AdaptiveFreeList* total = ptc.total(); @@ -1311,7 +1298,7 @@ void AFLBinaryTreeDictionary::print_dict_census(void) const { } #endif // INCLUDE_ALL_GCS -template class FreeList_t> +template class PrintFreeListsClosure : public AscendTreeCensusClosure { outputStream* _st; int _print_line; @@ -1321,9 +1308,9 @@ class PrintFreeListsClosure : public AscendTreeCensusClosure* fl) { + void do_list(FreeList_t* fl) { if (++_print_line >= 40) { - FreeList_t::print_labels_on(_st, "size"); + FreeList_t::print_labels_on(_st, "size"); _print_line = 0; } fl->print_on(gclog_or_tty); @@ -1337,10 +1324,10 @@ class PrintFreeListsClosure : public AscendTreeCensusClosure class FreeList_t> +template void BinaryTreeDictionary::print_free_lists(outputStream* st) const { - FreeList_t::print_labels_on(st, "size"); + FreeList_t::print_labels_on(st, "size"); PrintFreeListsClosure pflc(st); pflc.do_tree(root()); } @@ -1349,7 +1336,7 @@ void BinaryTreeDictionary::print_free_lists(outputStream* s // . _root has no parent // . parent and child point to each other // . each node's key correctly related to that of its child(ren) -template class FreeList_t> +template void BinaryTreeDictionary::verify_tree() const { guarantee(root() == NULL || total_free_blocks() == 0 || total_size() != 0, "_total_size shouldn't be 0?"); @@ -1357,7 +1344,7 @@ void BinaryTreeDictionary::verify_tree() const { verify_tree_helper(root()); } -template class FreeList_t> +template size_t BinaryTreeDictionary::verify_prev_free_ptrs(TreeList* tl) { size_t ct = 0; for (Chunk_t* curFC = tl->head(); curFC != NULL; curFC = curFC->next()) { @@ -1371,7 +1358,7 @@ size_t BinaryTreeDictionary::verify_prev_free_ptrs(TreeList // Note: this helper is recursive rather than iterative, so use with // caution on very deep trees; and watch out for stack overflow errors; // In general, to be used only for debugging. -template class FreeList_t> +template void BinaryTreeDictionary::verify_tree_helper(TreeList* tl) const { if (tl == NULL) return; @@ -1400,25 +1387,25 @@ void BinaryTreeDictionary::verify_tree_helper(TreeListright()); } -template class FreeList_t> +template void BinaryTreeDictionary::verify() const { verify_tree(); guarantee(total_size() == total_size_in_tree(root()), "Total Size inconsistency"); } -template class TreeList; -template class BinaryTreeDictionary; -template class TreeChunk; +template class TreeList >; +template class BinaryTreeDictionary >; +template class TreeChunk >; -template class TreeList; -template class BinaryTreeDictionary; -template class TreeChunk; +template class TreeList >; +template class BinaryTreeDictionary >; +template class TreeChunk >; #if INCLUDE_ALL_GCS // Explicitly instantiate these types for FreeChunk. -template class TreeList; -template class BinaryTreeDictionary; -template class TreeChunk; +template class TreeList >; +template class BinaryTreeDictionary >; +template class TreeChunk >; #endif // INCLUDE_ALL_GCS diff --git a/hotspot/src/share/vm/memory/binaryTreeDictionary.hpp b/hotspot/src/share/vm/memory/binaryTreeDictionary.hpp index 1867ed2ae22..8377912f242 100644 --- a/hotspot/src/share/vm/memory/binaryTreeDictionary.hpp +++ b/hotspot/src/share/vm/memory/binaryTreeDictionary.hpp @@ -37,18 +37,18 @@ // A TreeList is a FreeList which can be used to maintain a // binary tree of free lists. -template class FreeList_t> class TreeChunk; -template class FreeList_t> class BinaryTreeDictionary; -template class FreeList_t> class AscendTreeCensusClosure; -template class FreeList_t> class DescendTreeCensusClosure; -template class FreeList_t> class DescendTreeSearchClosure; +template class TreeChunk; +template class BinaryTreeDictionary; +template class AscendTreeCensusClosure; +template class DescendTreeCensusClosure; +template class DescendTreeSearchClosure; class FreeChunk; template class AdaptiveFreeList; -typedef BinaryTreeDictionary AFLBinaryTreeDictionary; +typedef BinaryTreeDictionary > AFLBinaryTreeDictionary; -template class FreeList_t> -class TreeList : public FreeList_t { +template +class TreeList : public FreeList_t { friend class TreeChunk; friend class BinaryTreeDictionary; friend class AscendTreeCensusClosure; @@ -66,12 +66,12 @@ class TreeList : public FreeList_t { TreeList* right() const { return _right; } // Wrapper on call to base class, to get the template to compile. - Chunk_t* head() const { return FreeList_t::head(); } - Chunk_t* tail() const { return FreeList_t::tail(); } - void set_head(Chunk_t* head) { FreeList_t::set_head(head); } - void set_tail(Chunk_t* tail) { FreeList_t::set_tail(tail); } + Chunk_t* head() const { return FreeList_t::head(); } + Chunk_t* tail() const { return FreeList_t::tail(); } + void set_head(Chunk_t* head) { FreeList_t::set_head(head); } + void set_tail(Chunk_t* tail) { FreeList_t::set_tail(tail); } - size_t size() const { return FreeList_t::size(); } + size_t size() const { return FreeList_t::size(); } // Accessors for links in tree. @@ -90,7 +90,7 @@ class TreeList : public FreeList_t { void clear_left() { _left = NULL; } void clear_right() { _right = NULL; } void clear_parent() { _parent = NULL; } - void initialize() { clear_left(); clear_right(), clear_parent(); FreeList_t::initialize(); } + void initialize() { clear_left(); clear_right(), clear_parent(); FreeList_t::initialize(); } // For constructing a TreeList from a Tree chunk or // address and size. @@ -139,7 +139,7 @@ class TreeList : public FreeList_t { // on the free list for a node in the tree and is only removed if // it is the last chunk on the free list. -template class FreeList_t> +template class TreeChunk : public Chunk_t { friend class TreeList; TreeList* _list; @@ -173,7 +173,7 @@ class TreeChunk : public Chunk_t { }; -template class FreeList_t> +template class BinaryTreeDictionary: public FreeBlockDictionary { friend class VMStructs; size_t _total_size; diff --git a/hotspot/src/share/vm/memory/defNewGeneration.cpp b/hotspot/src/share/vm/memory/defNewGeneration.cpp index 1e3cb9aaa3c..b4cf451f10e 100644 --- a/hotspot/src/share/vm/memory/defNewGeneration.cpp +++ b/hotspot/src/share/vm/memory/defNewGeneration.cpp @@ -626,7 +626,6 @@ void DefNewGeneration::collect(bool full, true, // activate StrongRootsScope SharedHeap::ScanningOption(so), &fsc_with_no_gc_barrier, - true, // walk *all* scavengable nmethods &fsc_with_gc_barrier, &klass_scan_closure); diff --git a/hotspot/src/share/vm/memory/genCollectedHeap.cpp b/hotspot/src/share/vm/memory/genCollectedHeap.cpp index 5e0572e4ba7..be4ad6945dd 100644 --- a/hotspot/src/share/vm/memory/genCollectedHeap.cpp +++ b/hotspot/src/share/vm/memory/genCollectedHeap.cpp @@ -594,20 +594,12 @@ gen_process_strong_roots(int level, bool activate_scope, SharedHeap::ScanningOption so, OopsInGenClosure* not_older_gens, - bool do_code_roots, OopsInGenClosure* older_gens, KlassClosure* klass_closure) { // General strong roots. - if (!do_code_roots) { - SharedHeap::process_strong_roots(activate_scope, so, - not_older_gens, NULL, klass_closure); - } else { - bool do_code_marking = (activate_scope || nmethod::oops_do_marking_is_active()); - CodeBlobToOopClosure code_roots(not_older_gens, /*do_marking=*/ do_code_marking); - SharedHeap::process_strong_roots(activate_scope, so, - not_older_gens, &code_roots, klass_closure); - } + SharedHeap::process_strong_roots(activate_scope, so, + not_older_gens, klass_closure); if (younger_gens_as_roots) { if (!_gen_process_strong_tasks->is_task_claimed(GCH_PS_younger_gens)) { @@ -629,9 +621,8 @@ gen_process_strong_roots(int level, _gen_process_strong_tasks->all_tasks_completed(); } -void GenCollectedHeap::gen_process_weak_roots(OopClosure* root_closure, - CodeBlobClosure* code_roots) { - SharedHeap::process_weak_roots(root_closure, code_roots); +void GenCollectedHeap::gen_process_weak_roots(OopClosure* root_closure) { + SharedHeap::process_weak_roots(root_closure); // "Local" "weak" refs for (int i = 0; i < _n_gens; i++) { _gens[i]->ref_processor()->weak_oops_do(root_closure); diff --git a/hotspot/src/share/vm/memory/genCollectedHeap.hpp b/hotspot/src/share/vm/memory/genCollectedHeap.hpp index 7bea23d68e4..f687a1c97e6 100644 --- a/hotspot/src/share/vm/memory/genCollectedHeap.hpp +++ b/hotspot/src/share/vm/memory/genCollectedHeap.hpp @@ -414,15 +414,13 @@ public: bool activate_scope, SharedHeap::ScanningOption so, OopsInGenClosure* not_older_gens, - bool do_code_roots, OopsInGenClosure* older_gens, KlassClosure* klass_closure); - // Apply "blk" to all the weak roots of the system. These include - // JNI weak roots, the code cache, system dictionary, symbol table, - // string table, and referents of reachable weak refs. - void gen_process_weak_roots(OopClosure* root_closure, - CodeBlobClosure* code_roots); + // Apply "root_closure" to all the weak roots of the system. + // These include JNI weak roots, string table, + // and referents of reachable weak refs. + void gen_process_weak_roots(OopClosure* root_closure); // Set the saved marks of generations, if that makes sense. // In particular, if any generation might iterate over the oops diff --git a/hotspot/src/share/vm/memory/genMarkSweep.cpp b/hotspot/src/share/vm/memory/genMarkSweep.cpp index 2ae8b3dc6e2..80a35d10e2c 100644 --- a/hotspot/src/share/vm/memory/genMarkSweep.cpp +++ b/hotspot/src/share/vm/memory/genMarkSweep.cpp @@ -212,7 +212,6 @@ void GenMarkSweep::mark_sweep_phase1(int level, true, // activate StrongRootsScope SharedHeap::SO_SystemClasses, &follow_root_closure, - true, // walk code active on stacks &follow_root_closure, &follow_klass_closure); @@ -295,18 +294,12 @@ void GenMarkSweep::mark_sweep_phase3(int level) { gch->gen_process_strong_roots(level, false, // Younger gens are not roots. true, // activate StrongRootsScope - SharedHeap::SO_AllClasses, + SharedHeap::SO_AllClasses | SharedHeap::SO_Strings | SharedHeap::SO_AllCodeCache, &adjust_pointer_closure, - false, // do not walk code &adjust_pointer_closure, &adjust_klass_closure); - // Now adjust pointers in remaining weak roots. (All of which should - // have been cleared if they pointed to non-surviving objects.) - CodeBlobToOopClosure adjust_code_pointer_closure(&adjust_pointer_closure, - /*do_marking=*/ false); - gch->gen_process_weak_roots(&adjust_pointer_closure, - &adjust_code_pointer_closure); + gch->gen_process_weak_roots(&adjust_pointer_closure); adjust_marks(); GenAdjustPointersClosure blk; diff --git a/hotspot/src/share/vm/memory/metaspace.cpp b/hotspot/src/share/vm/memory/metaspace.cpp index 6105321c30f..9c3b48dc8f8 100644 --- a/hotspot/src/share/vm/memory/metaspace.cpp +++ b/hotspot/src/share/vm/memory/metaspace.cpp @@ -46,8 +46,8 @@ #include "utilities/copy.hpp" #include "utilities/debug.hpp" -typedef BinaryTreeDictionary BlockTreeDictionary; -typedef BinaryTreeDictionary ChunkTreeDictionary; +typedef BinaryTreeDictionary > BlockTreeDictionary; +typedef BinaryTreeDictionary > ChunkTreeDictionary; // Set this constant to enable slow integrity checking of the free chunk lists const bool metaspace_slow_verify = false; @@ -790,7 +790,7 @@ MetaWord* BlockFreelist::get_block(size_t word_size) { return NULL; } - if (word_size < TreeChunk::min_size()) { + if (word_size < TreeChunk >::min_size()) { // Dark matter. Too small for dictionary. return NULL; } @@ -810,7 +810,7 @@ MetaWord* BlockFreelist::get_block(size_t word_size) { MetaWord* new_block = (MetaWord*)free_block; assert(block_size >= word_size, "Incorrect size of block from freelist"); const size_t unused = block_size - word_size; - if (unused >= TreeChunk::min_size()) { + if (unused >= TreeChunk >::min_size()) { return_block(new_block + word_size, unused); } @@ -2240,7 +2240,7 @@ ChunkIndex ChunkManager::list_index(size_t size) { void SpaceManager::deallocate(MetaWord* p, size_t word_size) { assert_lock_strong(_lock); size_t raw_word_size = get_raw_word_size(word_size); - size_t min_size = TreeChunk::min_size(); + size_t min_size = TreeChunk >::min_size(); assert(raw_word_size >= min_size, err_msg("Should not deallocate dark matter " SIZE_FORMAT "<" SIZE_FORMAT, word_size, min_size)); block_freelists()->return_block(p, raw_word_size); @@ -2296,7 +2296,7 @@ void SpaceManager::add_chunk(Metachunk* new_chunk, bool make_current) { void SpaceManager::retire_current_chunk() { if (current_chunk() != NULL) { size_t remaining_words = current_chunk()->free_word_size(); - if (remaining_words >= TreeChunk::min_size()) { + if (remaining_words >= TreeChunk >::min_size()) { block_freelists()->return_block(current_chunk()->allocate(remaining_words), remaining_words); inc_used_metrics(remaining_words); } @@ -3279,7 +3279,7 @@ void Metaspace::deallocate(MetaWord* ptr, size_t word_size, bool is_class) { assert(Thread::current()->is_VM_thread(), "should be the VM thread"); // Don't take Heap_lock MutexLockerEx ml(vsm()->lock(), Mutex::_no_safepoint_check_flag); - if (word_size < TreeChunk::min_size()) { + if (word_size < TreeChunk >::min_size()) { // Dark matter. Too small for dictionary. #ifdef ASSERT Copy::fill_to_words((HeapWord*)ptr, word_size, 0xf5f5f5f5); @@ -3294,7 +3294,7 @@ void Metaspace::deallocate(MetaWord* ptr, size_t word_size, bool is_class) { } else { MutexLockerEx ml(vsm()->lock(), Mutex::_no_safepoint_check_flag); - if (word_size < TreeChunk::min_size()) { + if (word_size < TreeChunk >::min_size()) { // Dark matter. Too small for dictionary. #ifdef ASSERT Copy::fill_to_words((HeapWord*)ptr, word_size, 0xf5f5f5f5); diff --git a/hotspot/src/share/vm/memory/sharedHeap.cpp b/hotspot/src/share/vm/memory/sharedHeap.cpp index 2dbf43ef156..9de74e25c7c 100644 --- a/hotspot/src/share/vm/memory/sharedHeap.cpp +++ b/hotspot/src/share/vm/memory/sharedHeap.cpp @@ -139,7 +139,6 @@ SharedHeap::StrongRootsScope::~StrongRootsScope() { void SharedHeap::process_strong_roots(bool activate_scope, ScanningOption so, OopClosure* roots, - CodeBlobClosure* code_roots, KlassClosure* klass_closure) { StrongRootsScope srs(this, activate_scope); @@ -156,15 +155,17 @@ void SharedHeap::process_strong_roots(bool activate_scope, if (!_process_strong_tasks->is_task_claimed(SH_PS_JNIHandles_oops_do)) JNIHandles::oops_do(roots); + CodeBlobToOopClosure code_roots(roots, true); + CLDToOopClosure roots_from_clds(roots); // If we limit class scanning to SO_SystemClasses we need to apply a CLD closure to // CLDs which are strongly reachable from the thread stacks. CLDToOopClosure* roots_from_clds_p = ((so & SO_SystemClasses) ? &roots_from_clds : NULL); // All threads execute this; the individual threads are task groups. if (CollectedHeap::use_parallel_gc_threads()) { - Threads::possibly_parallel_oops_do(roots, roots_from_clds_p, code_roots); + Threads::possibly_parallel_oops_do(roots, roots_from_clds_p, &code_roots); } else { - Threads::oops_do(roots, roots_from_clds_p, code_roots); + Threads::oops_do(roots, roots_from_clds_p, &code_roots); } if (!_process_strong_tasks-> is_task_claimed(SH_PS_ObjectSynchronizer_oops_do)) @@ -206,17 +207,17 @@ void SharedHeap::process_strong_roots(bool activate_scope, if (!_process_strong_tasks->is_task_claimed(SH_PS_CodeCache_oops_do)) { if (so & SO_ScavengeCodeCache) { - assert(code_roots != NULL, "must supply closure for code cache"); + assert(&code_roots != NULL, "must supply closure for code cache"); // We only visit parts of the CodeCache when scavenging. - CodeCache::scavenge_root_nmethods_do(code_roots); + CodeCache::scavenge_root_nmethods_do(&code_roots); } if (so & SO_AllCodeCache) { - assert(code_roots != NULL, "must supply closure for code cache"); + assert(&code_roots != NULL, "must supply closure for code cache"); // CMSCollector uses this to do intermediate-strength collections. // We scan the entire code cache, since CodeCache::do_unloading is not called. - CodeCache::blobs_do(code_roots); + CodeCache::blobs_do(&code_roots); } // Verify that the code cache contents are not subject to // movement by a scavenging collection. @@ -233,13 +234,9 @@ public: }; static AlwaysTrueClosure always_true; -void SharedHeap::process_weak_roots(OopClosure* root_closure, - CodeBlobClosure* code_roots) { +void SharedHeap::process_weak_roots(OopClosure* root_closure) { // Global (weak) JNI handles JNIHandles::weak_oops_do(&always_true, root_closure); - - CodeCache::blobs_do(code_roots); - StringTable::oops_do(root_closure); } void SharedHeap::set_barrier_set(BarrierSet* bs) { diff --git a/hotspot/src/share/vm/memory/sharedHeap.hpp b/hotspot/src/share/vm/memory/sharedHeap.hpp index 398e593cc10..21d6755d9d3 100644 --- a/hotspot/src/share/vm/memory/sharedHeap.hpp +++ b/hotspot/src/share/vm/memory/sharedHeap.hpp @@ -238,14 +238,10 @@ public: void process_strong_roots(bool activate_scope, ScanningOption so, OopClosure* roots, - CodeBlobClosure* code_roots, KlassClosure* klass_closure); - // Apply "blk" to all the weak roots of the system. These include - // JNI weak roots, the code cache, system dictionary, symbol table, - // string table. - void process_weak_roots(OopClosure* root_closure, - CodeBlobClosure* code_roots); + // Apply "root_closure" to the JNI weak roots.. + void process_weak_roots(OopClosure* root_closure); // The functions below are helper functions that a subclass of // "SharedHeap" can use in the implementation of its virtual @@ -275,4 +271,8 @@ public: size_t capacity); }; +inline SharedHeap::ScanningOption operator|(SharedHeap::ScanningOption so0, SharedHeap::ScanningOption so1) { + return static_cast(static_cast(so0) | static_cast(so1)); +} + #endif // SHARE_VM_MEMORY_SHAREDHEAP_HPP diff --git a/hotspot/src/share/vm/oops/arrayKlass.cpp b/hotspot/src/share/vm/oops/arrayKlass.cpp index 9e40206c253..fcb46b11f02 100644 --- a/hotspot/src/share/vm/oops/arrayKlass.cpp +++ b/hotspot/src/share/vm/oops/arrayKlass.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -214,8 +214,8 @@ void ArrayKlass::oop_print_on(oop obj, outputStream* st) { // Verification -void ArrayKlass::verify_on(outputStream* st, bool check_dictionary) { - Klass::verify_on(st, check_dictionary); +void ArrayKlass::verify_on(outputStream* st) { + Klass::verify_on(st); if (component_mirror() != NULL) { guarantee(component_mirror()->klass() != NULL, "should have a class"); diff --git a/hotspot/src/share/vm/oops/arrayKlass.hpp b/hotspot/src/share/vm/oops/arrayKlass.hpp index 4b06f1c0ed6..7b4ad2e9a99 100644 --- a/hotspot/src/share/vm/oops/arrayKlass.hpp +++ b/hotspot/src/share/vm/oops/arrayKlass.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -146,7 +146,7 @@ class ArrayKlass: public Klass { void oop_print_on(oop obj, outputStream* st); // Verification - void verify_on(outputStream* st, bool check_dictionary); + void verify_on(outputStream* st); void oop_verify_on(oop obj, outputStream* st); }; diff --git a/hotspot/src/share/vm/oops/instanceKlass.cpp b/hotspot/src/share/vm/oops/instanceKlass.cpp index 4a27fc15307..7dee4f3dba3 100644 --- a/hotspot/src/share/vm/oops/instanceKlass.cpp +++ b/hotspot/src/share/vm/oops/instanceKlass.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -77,51 +77,6 @@ #ifdef DTRACE_ENABLED -#ifndef USDT2 - -HS_DTRACE_PROBE_DECL4(hotspot, class__initialization__required, - char*, intptr_t, oop, intptr_t); -HS_DTRACE_PROBE_DECL5(hotspot, class__initialization__recursive, - char*, intptr_t, oop, intptr_t, int); -HS_DTRACE_PROBE_DECL5(hotspot, class__initialization__concurrent, - char*, intptr_t, oop, intptr_t, int); -HS_DTRACE_PROBE_DECL5(hotspot, class__initialization__erroneous, - char*, intptr_t, oop, intptr_t, int); -HS_DTRACE_PROBE_DECL5(hotspot, class__initialization__super__failed, - char*, intptr_t, oop, intptr_t, int); -HS_DTRACE_PROBE_DECL5(hotspot, class__initialization__clinit, - char*, intptr_t, oop, intptr_t, int); -HS_DTRACE_PROBE_DECL5(hotspot, class__initialization__error, - char*, intptr_t, oop, intptr_t, int); -HS_DTRACE_PROBE_DECL5(hotspot, class__initialization__end, - char*, intptr_t, oop, intptr_t, int); - -#define DTRACE_CLASSINIT_PROBE(type, clss, thread_type) \ - { \ - char* data = NULL; \ - int len = 0; \ - Symbol* name = (clss)->name(); \ - if (name != NULL) { \ - data = (char*)name->bytes(); \ - len = name->utf8_length(); \ - } \ - HS_DTRACE_PROBE4(hotspot, class__initialization__##type, \ - data, len, SOLARIS_ONLY((void *))(clss)->class_loader(), thread_type); \ - } - -#define DTRACE_CLASSINIT_PROBE_WAIT(type, clss, thread_type, wait) \ - { \ - char* data = NULL; \ - int len = 0; \ - Symbol* name = (clss)->name(); \ - if (name != NULL) { \ - data = (char*)name->bytes(); \ - len = name->utf8_length(); \ - } \ - HS_DTRACE_PROBE5(hotspot, class__initialization__##type, \ - data, len, SOLARIS_ONLY((void *))(clss)->class_loader(), thread_type, wait); \ - } -#else /* USDT2 */ #define HOTSPOT_CLASS_INITIALIZATION_required HOTSPOT_CLASS_INITIALIZATION_REQUIRED #define HOTSPOT_CLASS_INITIALIZATION_recursive HOTSPOT_CLASS_INITIALIZATION_RECURSIVE @@ -156,7 +111,6 @@ HS_DTRACE_PROBE_DECL5(hotspot, class__initialization__end, HOTSPOT_CLASS_INITIALIZATION_##type( \ data, len, (clss)->class_loader(), thread_type, wait); \ } -#endif /* USDT2 */ #else // ndef DTRACE_ENABLED @@ -2238,15 +2192,7 @@ void InstanceKlass::clean_method_data(BoolObjectClosure* is_alive) { for (int m = 0; m < methods()->length(); m++) { MethodData* mdo = methods()->at(m)->method_data(); if (mdo != NULL) { - for (ProfileData* data = mdo->first_data(); - mdo->is_valid(data); - data = mdo->next_data(data)) { - data->clean_weak_klass_links(is_alive); - } - ParametersTypeData* parameters = mdo->parameters_type_data(); - if (parameters != NULL) { - parameters->clean_weak_klass_links(is_alive); - } + mdo->clean_method_data(is_alive); } } } @@ -3184,7 +3130,7 @@ class VerifyFieldClosure: public OopClosure { virtual void do_oop(narrowOop* p) { VerifyFieldClosure::do_oop_work(p); } }; -void InstanceKlass::verify_on(outputStream* st, bool check_dictionary) { +void InstanceKlass::verify_on(outputStream* st) { #ifndef PRODUCT // Avoid redundant verifies, this really should be in product. if (_verify_count == Universe::verify_count()) return; @@ -3192,14 +3138,11 @@ void InstanceKlass::verify_on(outputStream* st, bool check_dictionary) { #endif // Verify Klass - Klass::verify_on(st, check_dictionary); + Klass::verify_on(st); - // Verify that klass is present in SystemDictionary if not already - // verifying the SystemDictionary. - if (is_loaded() && !is_anonymous() && check_dictionary) { - Symbol* h_name = name(); - SystemDictionary::verify_obj_klass_present(h_name, class_loader_data()); - } + // Verify that klass is present in ClassLoaderData + guarantee(class_loader_data()->contains_klass(this), + "this class isn't found in class loader data"); // Verify vtables if (is_linked()) { diff --git a/hotspot/src/share/vm/oops/instanceKlass.hpp b/hotspot/src/share/vm/oops/instanceKlass.hpp index f503de6725a..b25c75afc3b 100644 --- a/hotspot/src/share/vm/oops/instanceKlass.hpp +++ b/hotspot/src/share/vm/oops/instanceKlass.hpp @@ -306,7 +306,7 @@ class InstanceKlass: public Klass { // three cases: // NULL: no implementor. // A Klass* that's not itself: one implementor. - // Itsef: more than one implementors. + // Itself: more than one implementors. // embedded host klass follows here // The embedded host klass only exists in an anonymous class for // dynamic language support (JSR 292 enabled). The host class grants @@ -1087,7 +1087,7 @@ public: const char* internal_name() const; // Verification - void verify_on(outputStream* st, bool check_dictionary); + void verify_on(outputStream* st); void oop_verify_on(oop obj, outputStream* st); }; diff --git a/hotspot/src/share/vm/oops/klass.cpp b/hotspot/src/share/vm/oops/klass.cpp index bf5dae0606d..adca246aaa9 100644 --- a/hotspot/src/share/vm/oops/klass.cpp +++ b/hotspot/src/share/vm/oops/klass.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -638,7 +638,7 @@ void Klass::collect_statistics(KlassSizeStats *sz) const { // Verification -void Klass::verify_on(outputStream* st, bool check_dictionary) { +void Klass::verify_on(outputStream* st) { // This can be expensive, but it is worth checking that this klass is actually // in the CLD graph but not in production. diff --git a/hotspot/src/share/vm/oops/klass.hpp b/hotspot/src/share/vm/oops/klass.hpp index 9855fdd3233..a31a2357355 100644 --- a/hotspot/src/share/vm/oops/klass.hpp +++ b/hotspot/src/share/vm/oops/klass.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -695,8 +695,8 @@ class Klass : public Metadata { virtual const char* internal_name() const = 0; // Verification - virtual void verify_on(outputStream* st, bool check_dictionary); - void verify(bool check_dictionary = true) { verify_on(tty, check_dictionary); } + virtual void verify_on(outputStream* st); + void verify() { verify_on(tty); } #ifndef PRODUCT bool verify_vtable_index(int index); diff --git a/hotspot/src/share/vm/oops/methodData.cpp b/hotspot/src/share/vm/oops/methodData.cpp index 2da63c08d8c..b226173d832 100644 --- a/hotspot/src/share/vm/oops/methodData.cpp +++ b/hotspot/src/share/vm/oops/methodData.cpp @@ -80,8 +80,42 @@ ProfileData::ProfileData() { _data = NULL; } +char* ProfileData::print_data_on_helper(const MethodData* md) const { + DataLayout* dp = md->extra_data_base(); + DataLayout* end = md->extra_data_limit(); + stringStream ss; + for (;; dp = MethodData::next_extra(dp)) { + assert(dp < end, "moved past end of extra data"); + switch(dp->tag()) { + case DataLayout::speculative_trap_data_tag: + if (dp->bci() == bci()) { + SpeculativeTrapData* data = new SpeculativeTrapData(dp); + int trap = data->trap_state(); + char buf[100]; + ss.print("trap/"); + data->method()->print_short_name(&ss); + ss.print("(%s) ", Deoptimization::format_trap_state(buf, sizeof(buf), trap)); + } + break; + case DataLayout::bit_data_tag: + break; + case DataLayout::no_tag: + case DataLayout::arg_info_data_tag: + return ss.as_string(); + break; + default: + fatal(err_msg("unexpected tag %d", dp->tag())); + } + } + return NULL; +} + +void ProfileData::print_data_on(outputStream* st, const MethodData* md) const { + print_data_on(st, print_data_on_helper(md)); +} + #ifndef PRODUCT -void ProfileData::print_shared(outputStream* st, const char* name) const { +void ProfileData::print_shared(outputStream* st, const char* name, const char* extra) const { st->print("bci: %d", bci()); st->fill_to(tab_width_one); st->print("%s", name); @@ -91,9 +125,13 @@ void ProfileData::print_shared(outputStream* st, const char* name) const { char buf[100]; st->print("trap(%s) ", Deoptimization::format_trap_state(buf, sizeof(buf), trap)); } + if (extra != NULL) { + st->print(extra); + } int flags = data()->flags(); - if (flags != 0) + if (flags != 0) { st->print("flags(%d) ", flags); + } } void ProfileData::tab(outputStream* st, bool first) const { @@ -109,8 +147,8 @@ void ProfileData::tab(outputStream* st, bool first) const { #ifndef PRODUCT -void BitData::print_data_on(outputStream* st) const { - print_shared(st, "BitData"); +void BitData::print_data_on(outputStream* st, const char* extra) const { + print_shared(st, "BitData", extra); } #endif // !PRODUCT @@ -120,8 +158,8 @@ void BitData::print_data_on(outputStream* st) const { // A CounterData corresponds to a simple counter. #ifndef PRODUCT -void CounterData::print_data_on(outputStream* st) const { - print_shared(st, "CounterData"); +void CounterData::print_data_on(outputStream* st, const char* extra) const { + print_shared(st, "CounterData", extra); st->print_cr("count(%u)", count()); } #endif // !PRODUCT @@ -150,8 +188,8 @@ void JumpData::post_initialize(BytecodeStream* stream, MethodData* mdo) { } #ifndef PRODUCT -void JumpData::print_data_on(outputStream* st) const { - print_shared(st, "JumpData"); +void JumpData::print_data_on(outputStream* st, const char* extra) const { + print_shared(st, "JumpData", extra); st->print_cr("taken(%u) displacement(%d)", taken(), displacement()); } #endif // !PRODUCT @@ -332,8 +370,8 @@ void ReturnTypeEntry::print_data_on(outputStream* st) const { st->cr(); } -void CallTypeData::print_data_on(outputStream* st) const { - CounterData::print_data_on(st); +void CallTypeData::print_data_on(outputStream* st, const char* extra) const { + CounterData::print_data_on(st, extra); if (has_arguments()) { tab(st, true); st->print("argument types"); @@ -346,8 +384,8 @@ void CallTypeData::print_data_on(outputStream* st) const { } } -void VirtualCallTypeData::print_data_on(outputStream* st) const { - VirtualCallData::print_data_on(st); +void VirtualCallTypeData::print_data_on(outputStream* st, const char* extra) const { + VirtualCallData::print_data_on(st, extra); if (has_arguments()) { tab(st, true); st->print("argument types"); @@ -400,12 +438,12 @@ void ReceiverTypeData::print_receiver_data_on(outputStream* st) const { } } } -void ReceiverTypeData::print_data_on(outputStream* st) const { - print_shared(st, "ReceiverTypeData"); +void ReceiverTypeData::print_data_on(outputStream* st, const char* extra) const { + print_shared(st, "ReceiverTypeData", extra); print_receiver_data_on(st); } -void VirtualCallData::print_data_on(outputStream* st) const { - print_shared(st, "VirtualCallData"); +void VirtualCallData::print_data_on(outputStream* st, const char* extra) const { + print_shared(st, "VirtualCallData", extra); print_receiver_data_on(st); } #endif // !PRODUCT @@ -461,8 +499,8 @@ DataLayout* RetData::advance(MethodData *md, int bci) { #endif // CC_INTERP #ifndef PRODUCT -void RetData::print_data_on(outputStream* st) const { - print_shared(st, "RetData"); +void RetData::print_data_on(outputStream* st, const char* extra) const { + print_shared(st, "RetData", extra); uint row; int entries = 0; for (row = 0; row < row_limit(); row++) { @@ -496,8 +534,8 @@ void BranchData::post_initialize(BytecodeStream* stream, MethodData* mdo) { } #ifndef PRODUCT -void BranchData::print_data_on(outputStream* st) const { - print_shared(st, "BranchData"); +void BranchData::print_data_on(outputStream* st, const char* extra) const { + print_shared(st, "BranchData", extra); st->print_cr("taken(%u) displacement(%d)", taken(), displacement()); tab(st); @@ -570,8 +608,8 @@ void MultiBranchData::post_initialize(BytecodeStream* stream, } #ifndef PRODUCT -void MultiBranchData::print_data_on(outputStream* st) const { - print_shared(st, "MultiBranchData"); +void MultiBranchData::print_data_on(outputStream* st, const char* extra) const { + print_shared(st, "MultiBranchData", extra); st->print_cr("default_count(%u) displacement(%d)", default_count(), default_displacement()); int cases = number_of_cases(); @@ -584,8 +622,8 @@ void MultiBranchData::print_data_on(outputStream* st) const { #endif #ifndef PRODUCT -void ArgInfoData::print_data_on(outputStream* st) const { - print_shared(st, "ArgInfoData"); +void ArgInfoData::print_data_on(outputStream* st, const char* extra) const { + print_shared(st, "ArgInfoData", extra); int nargs = number_of_args(); for (int i = 0; i < nargs; i++) { st->print(" 0x%x", arg_modified(i)); @@ -616,10 +654,17 @@ bool ParametersTypeData::profiling_enabled() { } #ifndef PRODUCT -void ParametersTypeData::print_data_on(outputStream* st) const { - st->print("parameter types"); +void ParametersTypeData::print_data_on(outputStream* st, const char* extra) const { + st->print("parameter types", extra); _parameters.print_data_on(st); } + +void SpeculativeTrapData::print_data_on(outputStream* st, const char* extra) const { + print_shared(st, "SpeculativeTrapData", extra); + tab(st); + method()->print_short_name(st); + st->cr(); +} #endif // ================================================================== @@ -745,7 +790,27 @@ int MethodData::compute_data_size(BytecodeStream* stream) { return DataLayout::compute_size_in_bytes(cell_count); } -int MethodData::compute_extra_data_count(int data_size, int empty_bc_count) { +bool MethodData::is_speculative_trap_bytecode(Bytecodes::Code code) { + // Bytecodes for which we may use speculation + switch (code) { + case Bytecodes::_checkcast: + case Bytecodes::_instanceof: + case Bytecodes::_aastore: + case Bytecodes::_invokevirtual: + case Bytecodes::_invokeinterface: + case Bytecodes::_if_acmpeq: + case Bytecodes::_if_acmpne: + case Bytecodes::_invokestatic: +#ifdef COMPILER2 + return UseTypeSpeculation; +#endif + default: + return false; + } + return false; +} + +int MethodData::compute_extra_data_count(int data_size, int empty_bc_count, bool needs_speculative_traps) { if (ProfileTraps) { // Assume that up to 3% of BCIs with no MDP will need to allocate one. int extra_data_count = (uint)(empty_bc_count * 3) / 128 + 1; @@ -756,7 +821,18 @@ int MethodData::compute_extra_data_count(int data_size, int empty_bc_count) { extra_data_count = one_percent_of_data; if (extra_data_count > empty_bc_count) extra_data_count = empty_bc_count; // no need for more - return extra_data_count; + + // Make sure we have a minimum number of extra data slots to + // allocate SpeculativeTrapData entries. We would want to have one + // entry per compilation that inlines this method and for which + // some type speculation assumption fails. So the room we need for + // the SpeculativeTrapData entries doesn't directly depend on the + // size of the method. Because it's hard to estimate, we reserve + // space for an arbitrary number of entries. + int spec_data_count = (needs_speculative_traps ? SpecTrapLimitExtraEntries : 0) * + (SpeculativeTrapData::static_cell_count() + DataLayout::header_size_in_cells()); + + return MAX2(extra_data_count, spec_data_count); } else { return 0; } @@ -769,15 +845,17 @@ int MethodData::compute_allocation_size_in_bytes(methodHandle method) { BytecodeStream stream(method); Bytecodes::Code c; int empty_bc_count = 0; // number of bytecodes lacking data + bool needs_speculative_traps = false; while ((c = stream.next()) >= 0) { int size_in_bytes = compute_data_size(&stream); data_size += size_in_bytes; if (size_in_bytes == 0) empty_bc_count += 1; + needs_speculative_traps = needs_speculative_traps || is_speculative_trap_bytecode(c); } int object_size = in_bytes(data_offset()) + data_size; // Add some extra DataLayout cells (at least one) to track stray traps. - int extra_data_count = compute_extra_data_count(data_size, empty_bc_count); + int extra_data_count = compute_extra_data_count(data_size, empty_bc_count, needs_speculative_traps); object_size += extra_data_count * DataLayout::compute_size_in_bytes(0); // Add a cell to record information about modified arguments. @@ -1009,18 +1087,23 @@ MethodData::MethodData(methodHandle method, int size, TRAPS) { _data[0] = 0; // apparently not set below. BytecodeStream stream(method); Bytecodes::Code c; + bool needs_speculative_traps = false; while ((c = stream.next()) >= 0) { int size_in_bytes = initialize_data(&stream, data_size); data_size += size_in_bytes; if (size_in_bytes == 0) empty_bc_count += 1; + needs_speculative_traps = needs_speculative_traps || is_speculative_trap_bytecode(c); } _data_size = data_size; int object_size = in_bytes(data_offset()) + data_size; // Add some extra DataLayout cells (at least one) to track stray traps. - int extra_data_count = compute_extra_data_count(data_size, empty_bc_count); + int extra_data_count = compute_extra_data_count(data_size, empty_bc_count, needs_speculative_traps); int extra_size = extra_data_count * DataLayout::compute_size_in_bytes(0); + // Let's zero the space for the extra data + Copy::zero_to_bytes(((address)_data) + data_size, extra_size); + // Add a cell to record information about modified arguments. // Set up _args_modified array after traps cells so that // the code for traps cells works. @@ -1032,17 +1115,17 @@ MethodData::MethodData(methodHandle method, int size, TRAPS) { int arg_data_size = DataLayout::compute_size_in_bytes(arg_size+1); object_size += extra_size + arg_data_size; - int args_cell = ParametersTypeData::compute_cell_count(method()); + int parms_cell = ParametersTypeData::compute_cell_count(method()); // If we are profiling parameters, we reserver an area near the end // of the MDO after the slots for bytecodes (because there's no bci // for method entry so they don't fit with the framework for the // profiling of bytecodes). We store the offset within the MDO of // this area (or -1 if no parameter is profiled) - if (args_cell > 0) { - object_size += DataLayout::compute_size_in_bytes(args_cell); + if (parms_cell > 0) { + object_size += DataLayout::compute_size_in_bytes(parms_cell); _parameters_type_data_di = data_size + extra_size + arg_data_size; DataLayout *dp = data_layout_at(data_size + extra_size + arg_data_size); - dp->initialize(DataLayout::parameters_type_data_tag, 0, args_cell); + dp->initialize(DataLayout::parameters_type_data_tag, 0, parms_cell); } else { _parameters_type_data_di = -1; } @@ -1133,39 +1216,113 @@ ProfileData* MethodData::bci_to_data(int bci) { break; } } - return bci_to_extra_data(bci, false); + return bci_to_extra_data(bci, NULL, false); } -// Translate a bci to its corresponding extra data, or NULL. -ProfileData* MethodData::bci_to_extra_data(int bci, bool create_if_missing) { - DataLayout* dp = extra_data_base(); - DataLayout* end = extra_data_limit(); - DataLayout* avail = NULL; - for (; dp < end; dp = next_extra(dp)) { +DataLayout* MethodData::next_extra(DataLayout* dp) { + int nb_cells = 0; + switch(dp->tag()) { + case DataLayout::bit_data_tag: + case DataLayout::no_tag: + nb_cells = BitData::static_cell_count(); + break; + case DataLayout::speculative_trap_data_tag: + nb_cells = SpeculativeTrapData::static_cell_count(); + break; + default: + fatal(err_msg("unexpected tag %d", dp->tag())); + } + return (DataLayout*)((address)dp + DataLayout::compute_size_in_bytes(nb_cells)); +} + +ProfileData* MethodData::bci_to_extra_data_helper(int bci, Method* m, DataLayout*& dp) { + DataLayout* end = extra_data_limit(); + + for (;; dp = next_extra(dp)) { + assert(dp < end, "moved past end of extra data"); // No need for "OrderAccess::load_acquire" ops, // since the data structure is monotonic. - if (dp->tag() == DataLayout::no_tag) break; - if (dp->tag() == DataLayout::arg_info_data_tag) { - dp = end; // ArgInfoData is at the end of extra data section. + switch(dp->tag()) { + case DataLayout::no_tag: + return NULL; + case DataLayout::arg_info_data_tag: + dp = end; + return NULL; // ArgInfoData is at the end of extra data section. + case DataLayout::bit_data_tag: + if (m == NULL && dp->bci() == bci) { + return new BitData(dp); + } break; - } - if (dp->bci() == bci) { - assert(dp->tag() == DataLayout::bit_data_tag, "sane"); - return new BitData(dp); + case DataLayout::speculative_trap_data_tag: + if (m != NULL) { + SpeculativeTrapData* data = new SpeculativeTrapData(dp); + // data->method() may be null in case of a concurrent + // allocation. Assume it's for the same method and use that + // entry in that case. + if (dp->bci() == bci) { + if (data->method() == NULL) { + return NULL; + } else if (data->method() == m) { + return data; + } + } + } + break; + default: + fatal(err_msg("unexpected tag %d", dp->tag())); } } - if (create_if_missing && dp < end) { - // Allocate this one. There is no mutual exclusion, - // so two threads could allocate different BCIs to the - // same data layout. This means these extra data - // records, like most other MDO contents, must not be - // trusted too much. - DataLayout temp; - temp.initialize(DataLayout::bit_data_tag, bci, 0); - dp->release_set_header(temp.header()); - assert(dp->tag() == DataLayout::bit_data_tag, "sane"); - //NO: assert(dp->bci() == bci, "no concurrent allocation"); - return new BitData(dp); + return NULL; +} + + +// Translate a bci to its corresponding extra data, or NULL. +ProfileData* MethodData::bci_to_extra_data(int bci, Method* m, bool create_if_missing) { + // This code assumes an entry for a SpeculativeTrapData is 2 cells + assert(2*DataLayout::compute_size_in_bytes(BitData::static_cell_count()) == + DataLayout::compute_size_in_bytes(SpeculativeTrapData::static_cell_count()), + "code needs to be adjusted"); + + DataLayout* dp = extra_data_base(); + DataLayout* end = extra_data_limit(); + + // Allocation in the extra data space has to be atomic because not + // all entries have the same size and non atomic concurrent + // allocation would result in a corrupted extra data space. + while (true) { + ProfileData* result = bci_to_extra_data_helper(bci, m, dp); + if (result != NULL) { + return result; + } + + if (create_if_missing && dp < end) { + assert(dp->tag() == DataLayout::no_tag || (dp->tag() == DataLayout::speculative_trap_data_tag && m != NULL), "should be free"); + assert(next_extra(dp)->tag() == DataLayout::no_tag || next_extra(dp)->tag() == DataLayout::arg_info_data_tag, "should be free or arg info"); + u1 tag = m == NULL ? DataLayout::bit_data_tag : DataLayout::speculative_trap_data_tag; + // SpeculativeTrapData is 2 slots. Make sure we have room. + if (m != NULL && next_extra(dp)->tag() != DataLayout::no_tag) { + return NULL; + } + DataLayout temp; + temp.initialize(tag, bci, 0); + // May have been set concurrently + if (dp->header() != temp.header() && !dp->atomic_set_header(temp.header())) { + // Allocation failure because of concurrent allocation. Try + // again. + continue; + } + assert(dp->tag() == tag, "sane"); + assert(dp->bci() == bci, "no concurrent allocation"); + if (tag == DataLayout::bit_data_tag) { + return new BitData(dp); + } else { + // If being allocated concurrently, one trap may be lost + SpeculativeTrapData* data = new SpeculativeTrapData(dp); + data->set_method(m); + return data; + } + } + return NULL; } return NULL; } @@ -1210,25 +1367,35 @@ void MethodData::print_data_on(outputStream* st) const { for ( ; is_valid(data); data = next_data(data)) { st->print("%d", dp_to_di(data->dp())); st->fill_to(6); - data->print_data_on(st); + data->print_data_on(st, this); } st->print_cr("--- Extra data:"); DataLayout* dp = extra_data_base(); DataLayout* end = extra_data_limit(); - for (; dp < end; dp = next_extra(dp)) { + for (;; dp = next_extra(dp)) { + assert(dp < end, "moved past end of extra data"); // No need for "OrderAccess::load_acquire" ops, // since the data structure is monotonic. - if (dp->tag() == DataLayout::no_tag) continue; - if (dp->tag() == DataLayout::bit_data_tag) { + switch(dp->tag()) { + case DataLayout::no_tag: + continue; + case DataLayout::bit_data_tag: data = new BitData(dp); - } else { - assert(dp->tag() == DataLayout::arg_info_data_tag, "must be BitData or ArgInfo"); + break; + case DataLayout::speculative_trap_data_tag: + data = new SpeculativeTrapData(dp); + break; + case DataLayout::arg_info_data_tag: data = new ArgInfoData(dp); dp = end; // ArgInfoData is at the end of extra data section. + break; + default: + fatal(err_msg("unexpected tag %d", dp->tag())); } st->print("%d", dp_to_di(data->dp())); st->fill_to(6); data->print_data_on(st); + if (dp >= end) return; } } #endif @@ -1351,3 +1518,110 @@ bool MethodData::profile_parameters_for_method(methodHandle m) { assert(profile_parameters_jsr292_only(), "inconsistent"); return m->is_compiled_lambda_form(); } + +void MethodData::clean_extra_data_helper(DataLayout* dp, int shift, bool reset) { + if (shift == 0) { + return; + } + if (!reset) { + // Move all cells of trap entry at dp left by "shift" cells + intptr_t* start = (intptr_t*)dp; + intptr_t* end = (intptr_t*)next_extra(dp); + for (intptr_t* ptr = start; ptr < end; ptr++) { + *(ptr-shift) = *ptr; + } + } else { + // Reset "shift" cells stopping at dp + intptr_t* start = ((intptr_t*)dp) - shift; + intptr_t* end = (intptr_t*)dp; + for (intptr_t* ptr = start; ptr < end; ptr++) { + *ptr = 0; + } + } +} + +// Remove SpeculativeTrapData entries that reference an unloaded +// method +void MethodData::clean_extra_data(BoolObjectClosure* is_alive) { + DataLayout* dp = extra_data_base(); + DataLayout* end = extra_data_limit(); + + int shift = 0; + for (; dp < end; dp = next_extra(dp)) { + switch(dp->tag()) { + case DataLayout::speculative_trap_data_tag: { + SpeculativeTrapData* data = new SpeculativeTrapData(dp); + Method* m = data->method(); + assert(m != NULL, "should have a method"); + if (!m->method_holder()->is_loader_alive(is_alive)) { + // "shift" accumulates the number of cells for dead + // SpeculativeTrapData entries that have been seen so + // far. Following entries must be shifted left by that many + // cells to remove the dead SpeculativeTrapData entries. + shift += (int)((intptr_t*)next_extra(dp) - (intptr_t*)dp); + } else { + // Shift this entry left if it follows dead + // SpeculativeTrapData entries + clean_extra_data_helper(dp, shift); + } + break; + } + case DataLayout::bit_data_tag: + // Shift this entry left if it follows dead SpeculativeTrapData + // entries + clean_extra_data_helper(dp, shift); + continue; + case DataLayout::no_tag: + case DataLayout::arg_info_data_tag: + // We are at end of the live trap entries. The previous "shift" + // cells contain entries that are either dead or were shifted + // left. They need to be reset to no_tag + clean_extra_data_helper(dp, shift, true); + return; + default: + fatal(err_msg("unexpected tag %d", dp->tag())); + } + } +} + +// Verify there's no unloaded method referenced by a +// SpeculativeTrapData entry +void MethodData::verify_extra_data_clean(BoolObjectClosure* is_alive) { +#ifdef ASSERT + DataLayout* dp = extra_data_base(); + DataLayout* end = extra_data_limit(); + + for (; dp < end; dp = next_extra(dp)) { + switch(dp->tag()) { + case DataLayout::speculative_trap_data_tag: { + SpeculativeTrapData* data = new SpeculativeTrapData(dp); + Method* m = data->method(); + assert(m != NULL && m->method_holder()->is_loader_alive(is_alive), "Method should exist"); + break; + } + case DataLayout::bit_data_tag: + continue; + case DataLayout::no_tag: + case DataLayout::arg_info_data_tag: + return; + default: + fatal(err_msg("unexpected tag %d", dp->tag())); + } + } +#endif +} + +void MethodData::clean_method_data(BoolObjectClosure* is_alive) { + for (ProfileData* data = first_data(); + is_valid(data); + data = next_data(data)) { + data->clean_weak_klass_links(is_alive); + } + ParametersTypeData* parameters = parameters_type_data(); + if (parameters != NULL) { + parameters->clean_weak_klass_links(is_alive); + } + + clean_extra_data(is_alive); + verify_extra_data_clean(is_alive); +} diff --git a/hotspot/src/share/vm/oops/methodData.hpp b/hotspot/src/share/vm/oops/methodData.hpp index 57790371e7c..76b0708f233 100644 --- a/hotspot/src/share/vm/oops/methodData.hpp +++ b/hotspot/src/share/vm/oops/methodData.hpp @@ -120,7 +120,8 @@ public: arg_info_data_tag, call_type_data_tag, virtual_call_type_data_tag, - parameters_type_data_tag + parameters_type_data_tag, + speculative_trap_data_tag }; enum { @@ -189,8 +190,11 @@ public: void set_header(intptr_t value) { _header._bits = value; } - void release_set_header(intptr_t value) { - OrderAccess::release_store_ptr(&_header._bits, value); + bool atomic_set_header(intptr_t value) { + if (Atomic::cmpxchg_ptr(value, (volatile intptr_t*)&_header._bits, 0) == 0) { + return true; + } + return false; } intptr_t header() { return _header._bits; @@ -271,6 +275,7 @@ class ArrayData; class MultiBranchData; class ArgInfoData; class ParametersTypeData; +class SpeculativeTrapData; // ProfileData // @@ -291,6 +296,8 @@ private: // This is a pointer to a section of profiling data. DataLayout* _data; + char* print_data_on_helper(const MethodData* md) const; + protected: DataLayout* data() { return _data; } const DataLayout* data() const { return _data; } @@ -440,6 +447,7 @@ public: virtual bool is_CallTypeData() const { return false; } virtual bool is_VirtualCallTypeData()const { return false; } virtual bool is_ParametersTypeData() const { return false; } + virtual bool is_SpeculativeTrapData()const { return false; } BitData* as_BitData() const { @@ -494,6 +502,10 @@ public: assert(is_ParametersTypeData(), "wrong type"); return is_ParametersTypeData() ? (ParametersTypeData*)this : NULL; } + SpeculativeTrapData* as_SpeculativeTrapData() const { + assert(is_SpeculativeTrapData(), "wrong type"); + return is_SpeculativeTrapData() ? (SpeculativeTrapData*)this : NULL; + } // Subclass specific initialization @@ -509,12 +521,14 @@ public: // translation here, and the required translators are in the ci subclasses. virtual void translate_from(const ProfileData* data) {} - virtual void print_data_on(outputStream* st) const { + virtual void print_data_on(outputStream* st, const char* extra = NULL) const { ShouldNotReachHere(); } + void print_data_on(outputStream* st, const MethodData* md) const; + #ifndef PRODUCT - void print_shared(outputStream* st, const char* name) const; + void print_shared(outputStream* st, const char* name, const char* extra) const; void tab(outputStream* st, bool first = false) const; #endif }; @@ -576,7 +590,7 @@ public: #endif // CC_INTERP #ifndef PRODUCT - void print_data_on(outputStream* st) const; + void print_data_on(outputStream* st, const char* extra = NULL) const; #endif }; @@ -639,7 +653,7 @@ public: #endif // CC_INTERP #ifndef PRODUCT - void print_data_on(outputStream* st) const; + void print_data_on(outputStream* st, const char* extra = NULL) const; #endif }; @@ -726,7 +740,7 @@ public: void post_initialize(BytecodeStream* stream, MethodData* mdo); #ifndef PRODUCT - void print_data_on(outputStream* st) const; + void print_data_on(outputStream* st, const char* extra = NULL) const; #endif }; @@ -1137,7 +1151,7 @@ public: } #ifndef PRODUCT - virtual void print_data_on(outputStream* st) const; + virtual void print_data_on(outputStream* st, const char* extra = NULL) const; #endif }; @@ -1282,7 +1296,7 @@ public: #ifndef PRODUCT void print_receiver_data_on(outputStream* st) const; - void print_data_on(outputStream* st) const; + void print_data_on(outputStream* st, const char* extra = NULL) const; #endif }; @@ -1325,7 +1339,7 @@ public: #endif // CC_INTERP #ifndef PRODUCT - void print_data_on(outputStream* st) const; + void print_data_on(outputStream* st, const char* extra = NULL) const; #endif }; @@ -1451,7 +1465,7 @@ public: } #ifndef PRODUCT - virtual void print_data_on(outputStream* st) const; + virtual void print_data_on(outputStream* st, const char* extra = NULL) const; #endif }; @@ -1554,7 +1568,7 @@ public: void post_initialize(BytecodeStream* stream, MethodData* mdo); #ifndef PRODUCT - void print_data_on(outputStream* st) const; + void print_data_on(outputStream* st, const char* extra = NULL) const; #endif }; @@ -1632,7 +1646,7 @@ public: void post_initialize(BytecodeStream* stream, MethodData* mdo); #ifndef PRODUCT - void print_data_on(outputStream* st) const; + void print_data_on(outputStream* st, const char* extra = NULL) const; #endif }; @@ -1825,7 +1839,7 @@ public: void post_initialize(BytecodeStream* stream, MethodData* mdo); #ifndef PRODUCT - void print_data_on(outputStream* st) const; + void print_data_on(outputStream* st, const char* extra = NULL) const; #endif }; @@ -1852,7 +1866,7 @@ public: } #ifndef PRODUCT - void print_data_on(outputStream* st) const; + void print_data_on(outputStream* st, const char* extra = NULL) const; #endif }; @@ -1913,7 +1927,7 @@ public: } #ifndef PRODUCT - virtual void print_data_on(outputStream* st) const; + virtual void print_data_on(outputStream* st, const char* extra = NULL) const; #endif static ByteSize stack_slot_offset(int i) { @@ -1925,6 +1939,54 @@ public: } }; +// SpeculativeTrapData +// +// A SpeculativeTrapData is used to record traps due to type +// speculation. It records the root of the compilation: that type +// speculation is wrong in the context of one compilation (for +// method1) doesn't mean it's wrong in the context of another one (for +// method2). Type speculation could have more/different data in the +// context of the compilation of method2 and it's worthwhile to try an +// optimization that failed for compilation of method1 in the context +// of compilation of method2. +// Space for SpeculativeTrapData entries is allocated from the extra +// data space in the MDO. If we run out of space, the trap data for +// the ProfileData at that bci is updated. +class SpeculativeTrapData : public ProfileData { +protected: + enum { + method_offset, + speculative_trap_cell_count + }; +public: + SpeculativeTrapData(DataLayout* layout) : ProfileData(layout) { + assert(layout->tag() == DataLayout::speculative_trap_data_tag, "wrong type"); + } + + virtual bool is_SpeculativeTrapData() const { return true; } + + static int static_cell_count() { + return speculative_trap_cell_count; + } + + virtual int cell_count() const { + return static_cell_count(); + } + + // Direct accessor + Method* method() const { + return (Method*)intptr_at(method_offset); + } + + void set_method(Method* m) { + set_intptr_at(method_offset, (intptr_t)m); + } + +#ifndef PRODUCT + virtual void print_data_on(outputStream* st, const char* extra = NULL) const; +#endif +}; + // MethodData* // // A MethodData* holds information which has been collected about @@ -1994,7 +2056,7 @@ public: // Whole-method sticky bits and flags enum { - _trap_hist_limit = 17, // decoupled from Deoptimization::Reason_LIMIT + _trap_hist_limit = 18, // decoupled from Deoptimization::Reason_LIMIT _trap_hist_mask = max_jubyte, _extra_data_count = 4 // extra DataLayout headers, for trap history }; // Public flag values @@ -2049,6 +2111,7 @@ private: // Helper for size computation static int compute_data_size(BytecodeStream* stream); static int bytecode_cell_count(Bytecodes::Code code); + static bool is_speculative_trap_bytecode(Bytecodes::Code code); enum { no_profile_data = -1, variable_cell_count = -2 }; // Helper for initialization @@ -2092,8 +2155,9 @@ private: // What is the index of the first data entry? int first_di() const { return 0; } + ProfileData* bci_to_extra_data_helper(int bci, Method* m, DataLayout*& dp); // Find or create an extra ProfileData: - ProfileData* bci_to_extra_data(int bci, bool create_if_missing); + ProfileData* bci_to_extra_data(int bci, Method* m, bool create_if_missing); // return the argument info cell ArgInfoData *arg_info(); @@ -2116,6 +2180,10 @@ private: static bool profile_parameters_jsr292_only(); static bool profile_all_parameters(); + void clean_extra_data(BoolObjectClosure* is_alive); + void clean_extra_data_helper(DataLayout* dp, int shift, bool reset = false); + void verify_extra_data_clean(BoolObjectClosure* is_alive); + public: static int header_size() { return sizeof(MethodData)/wordSize; @@ -2124,7 +2192,7 @@ public: // Compute the size of a MethodData* before it is created. static int compute_allocation_size_in_bytes(methodHandle method); static int compute_allocation_size_in_words(methodHandle method); - static int compute_extra_data_count(int data_size, int empty_bc_count); + static int compute_extra_data_count(int data_size, int empty_bc_count, bool needs_speculative_traps); // Determine if a given bytecode can have profile information. static bool bytecode_has_profile(Bytecodes::Code code) { @@ -2265,9 +2333,26 @@ public: ProfileData* bci_to_data(int bci); // Same, but try to create an extra_data record if one is needed: - ProfileData* allocate_bci_to_data(int bci) { - ProfileData* data = bci_to_data(bci); - return (data != NULL) ? data : bci_to_extra_data(bci, true); + ProfileData* allocate_bci_to_data(int bci, Method* m) { + ProfileData* data = NULL; + // If m not NULL, try to allocate a SpeculativeTrapData entry + if (m == NULL) { + data = bci_to_data(bci); + } + if (data != NULL) { + return data; + } + data = bci_to_extra_data(bci, m, true); + if (data != NULL) { + return data; + } + // If SpeculativeTrapData allocation fails try to allocate a + // regular entry + data = bci_to_data(bci); + if (data != NULL) { + return data; + } + return bci_to_extra_data(bci, NULL, true); } // Add a handful of extra data records, for trap tracking. @@ -2275,7 +2360,7 @@ public: DataLayout* extra_data_limit() const { return (DataLayout*)((address)this + size_in_bytes()); } int extra_data_size() const { return (address)extra_data_limit() - (address)extra_data_base(); } - static DataLayout* next_extra(DataLayout* dp) { return (DataLayout*)((address)dp + in_bytes(DataLayout::cell_offset(0))); } + static DataLayout* next_extra(DataLayout* dp); // Return (uint)-1 for overflow. uint trap_count(int reason) const { @@ -2375,6 +2460,8 @@ public: static bool profile_return(); static bool profile_parameters(); static bool profile_return_jsr292_only(); + + void clean_method_data(BoolObjectClosure* is_alive); }; #endif // SHARE_VM_OOPS_METHODDATAOOP_HPP diff --git a/hotspot/src/share/vm/oops/objArrayKlass.cpp b/hotspot/src/share/vm/oops/objArrayKlass.cpp index 7294ebe9adb..3316a8b27e6 100644 --- a/hotspot/src/share/vm/oops/objArrayKlass.cpp +++ b/hotspot/src/share/vm/oops/objArrayKlass.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -674,8 +674,8 @@ const char* ObjArrayKlass::internal_name() const { // Verification -void ObjArrayKlass::verify_on(outputStream* st, bool check_dictionary) { - ArrayKlass::verify_on(st, check_dictionary); +void ObjArrayKlass::verify_on(outputStream* st) { + ArrayKlass::verify_on(st); guarantee(element_klass()->is_klass(), "should be klass"); guarantee(bottom_klass()->is_klass(), "should be klass"); Klass* bk = bottom_klass(); diff --git a/hotspot/src/share/vm/oops/objArrayKlass.hpp b/hotspot/src/share/vm/oops/objArrayKlass.hpp index af06fd42084..cfe31e86e61 100644 --- a/hotspot/src/share/vm/oops/objArrayKlass.hpp +++ b/hotspot/src/share/vm/oops/objArrayKlass.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -151,7 +151,7 @@ class ObjArrayKlass : public ArrayKlass { const char* internal_name() const; // Verification - void verify_on(outputStream* st, bool check_dictionary); + void verify_on(outputStream* st); void oop_verify_on(oop obj, outputStream* st); }; diff --git a/hotspot/src/share/vm/opto/block.hpp b/hotspot/src/share/vm/opto/block.hpp index d085b29df3e..48aa6eeb25d 100644 --- a/hotspot/src/share/vm/opto/block.hpp +++ b/hotspot/src/share/vm/opto/block.hpp @@ -90,9 +90,9 @@ public: class CFGElement : public ResourceObj { friend class VMStructs; public: - float _freq; // Execution frequency (estimate) + double _freq; // Execution frequency (estimate) - CFGElement() : _freq(0.0f) {} + CFGElement() : _freq(0.0) {} virtual bool is_block() { return false; } virtual bool is_loop() { return false; } Block* as_Block() { assert(is_block(), "must be block"); return (Block*)this; } @@ -202,7 +202,7 @@ public: // BLOCK_FREQUENCY is a sentinel to mark uses of constant block frequencies. // It is currently also used to scale such frequencies relative to // FreqCountInvocations relative to the old value of 1500. -#define BLOCK_FREQUENCY(f) ((f * (float) 1500) / FreqCountInvocations) +#define BLOCK_FREQUENCY(f) ((f * (double) 1500) / FreqCountInvocations) // Register Pressure (estimate) for Splitting heuristic uint _reg_pressure; @@ -393,7 +393,7 @@ class PhaseCFG : public Phase { CFGLoop* _root_loop; // Outmost loop frequency - float _outer_loop_frequency; + double _outer_loop_frequency; // Per node latency estimation, valid only during GCM GrowableArray* _node_latency; @@ -508,7 +508,7 @@ class PhaseCFG : public Phase { } // Get the outer most frequency - float get_outer_loop_frequency() const { + double get_outer_loop_frequency() const { return _outer_loop_frequency; } @@ -656,13 +656,13 @@ public: class BlockProbPair VALUE_OBJ_CLASS_SPEC { protected: Block* _target; // block target - float _prob; // probability of edge to block + double _prob; // probability of edge to block public: BlockProbPair() : _target(NULL), _prob(0.0) {} - BlockProbPair(Block* b, float p) : _target(b), _prob(p) {} + BlockProbPair(Block* b, double p) : _target(b), _prob(p) {} Block* get_target() const { return _target; } - float get_prob() const { return _prob; } + double get_prob() const { return _prob; } }; //------------------------------CFGLoop------------------------------------------- @@ -675,8 +675,8 @@ class CFGLoop : public CFGElement { CFGLoop *_child; // first child, use child's sibling to visit all immediately nested loops GrowableArray _members; // list of members of loop GrowableArray _exits; // list of successor blocks and their probabilities - float _exit_prob; // probability any loop exit is taken on a single loop iteration - void update_succ_freq(Block* b, float freq); + double _exit_prob; // probability any loop exit is taken on a single loop iteration + void update_succ_freq(Block* b, double freq); public: CFGLoop(int id) : @@ -702,9 +702,9 @@ class CFGLoop : public CFGElement { void compute_loop_depth(int depth); void compute_freq(); // compute frequency with loop assuming head freq 1.0f void scale_freq(); // scale frequency by loop trip count (including outer loops) - float outer_loop_freq() const; // frequency of outer loop + double outer_loop_freq() const; // frequency of outer loop bool in_loop_nest(Block* b); - float trip_count() const { return 1.0f / _exit_prob; } + double trip_count() const { return 1.0 / _exit_prob; } virtual bool is_loop() { return true; } int id() { return _id; } @@ -723,7 +723,7 @@ class CFGEdge : public ResourceObj { private: Block * _from; // Source basic block Block * _to; // Destination basic block - float _freq; // Execution frequency (estimate) + double _freq; // Execution frequency (estimate) int _state; bool _infrequent; int _from_pct; @@ -742,13 +742,13 @@ class CFGEdge : public ResourceObj { interior // edge is interior to trace (could be backedge) }; - CFGEdge(Block *from, Block *to, float freq, int from_pct, int to_pct) : + CFGEdge(Block *from, Block *to, double freq, int from_pct, int to_pct) : _from(from), _to(to), _freq(freq), _from_pct(from_pct), _to_pct(to_pct), _state(open) { _infrequent = from_infrequent() || to_infrequent(); } - float freq() const { return _freq; } + double freq() const { return _freq; } Block* from() const { return _from; } Block* to () const { return _to; } int infrequent() const { return _infrequent; } diff --git a/hotspot/src/share/vm/opto/c2_globals.hpp b/hotspot/src/share/vm/opto/c2_globals.hpp index 2ccfb25517a..a22d6871ad6 100644 --- a/hotspot/src/share/vm/opto/c2_globals.hpp +++ b/hotspot/src/share/vm/opto/c2_globals.hpp @@ -644,7 +644,7 @@ diagnostic(bool, OptimizeExpensiveOps, true, \ "Find best control for expensive operations") \ \ - experimental(bool, UseMathExactIntrinsics, false, \ + product(bool, UseMathExactIntrinsics, true, \ "Enables intrinsification of various java.lang.Math functions") \ \ experimental(bool, ReplaceInParentMaps, false, \ diff --git a/hotspot/src/share/vm/opto/chaitin.cpp b/hotspot/src/share/vm/opto/chaitin.cpp index d79b62694f1..5a1040aac48 100644 --- a/hotspot/src/share/vm/opto/chaitin.cpp +++ b/hotspot/src/share/vm/opto/chaitin.cpp @@ -210,7 +210,7 @@ PhaseChaitin::PhaseChaitin(uint unique, PhaseCFG &cfg, Matcher &matcher) { NOT_PRODUCT( Compile::TracePhase t3("ctorChaitin", &_t_ctorChaitin, TimeCompiler); ) - _high_frequency_lrg = MIN2(float(OPTO_LRG_HIGH_FREQ), _cfg.get_outer_loop_frequency()); + _high_frequency_lrg = MIN2(double(OPTO_LRG_HIGH_FREQ), _cfg.get_outer_loop_frequency()); // Build a list of basic blocks, sorted by frequency _blks = NEW_RESOURCE_ARRAY(Block *, _cfg.number_of_blocks()); @@ -1799,7 +1799,7 @@ bool PhaseChaitin::stretch_base_pointer_live_ranges(ResourceArea *a) { Block *phi_block = _cfg.get_block_for_node(phi); if (_cfg.get_block_for_node(phi_block->pred(2)) == block) { const RegMask *mask = C->matcher()->idealreg2spillmask[Op_RegI]; - Node *spill = new (C) MachSpillCopyNode( phi, *mask, *mask ); + Node *spill = new (C) MachSpillCopyNode(MachSpillCopyNode::LoopPhiInput, phi, *mask, *mask); insert_proj( phi_block, 1, spill, maxlrg++ ); n->set_req(1,spill); must_recompute_live = true; diff --git a/hotspot/src/share/vm/opto/chaitin.hpp b/hotspot/src/share/vm/opto/chaitin.hpp index fb114bbd930..f11b5b1f416 100644 --- a/hotspot/src/share/vm/opto/chaitin.hpp +++ b/hotspot/src/share/vm/opto/chaitin.hpp @@ -34,10 +34,9 @@ #include "opto/phase.hpp" #include "opto/regalloc.hpp" #include "opto/regmask.hpp" +#include "opto/machnode.hpp" class LoopTree; -class MachCallNode; -class MachSafePointNode; class Matcher; class PhaseCFG; class PhaseLive; @@ -424,8 +423,8 @@ class PhaseChaitin : public PhaseRegAlloc { uint _simplified; // Linked list head of simplified LRGs // Helper functions for Split() - uint split_DEF( Node *def, Block *b, int loc, uint max, Node **Reachblock, Node **debug_defs, GrowableArray splits, int slidx ); - uint split_USE( Node *def, Block *b, Node *use, uint useidx, uint max, bool def_down, bool cisc_sp, GrowableArray splits, int slidx ); + uint split_DEF(Node *def, Block *b, int loc, uint max, Node **Reachblock, Node **debug_defs, GrowableArray splits, int slidx ); + uint split_USE(MachSpillCopyNode::SpillType spill_type, Node *def, Block *b, Node *use, uint useidx, uint max, bool def_down, bool cisc_sp, GrowableArray splits, int slidx ); //------------------------------clone_projs------------------------------------ // After cloning some rematerialized instruction, clone any MachProj's that @@ -447,7 +446,7 @@ class PhaseChaitin : public PhaseRegAlloc { int slidx, uint *lrg2reach, Node **Reachblock, bool walkThru); // True if lidx is used before any real register is def'd in the block bool prompt_use( Block *b, uint lidx ); - Node *get_spillcopy_wide( Node *def, Node *use, uint uidx ); + Node *get_spillcopy_wide(MachSpillCopyNode::SpillType spill_type, Node *def, Node *use, uint uidx ); // Insert the spill at chosen location. Skip over any intervening Proj's or // Phis. Skip over a CatchNode and projs, inserting in the fall-through block // instead. Update high-pressure indices. Create a new live range. @@ -501,8 +500,9 @@ private: // Used for aggressive coalescing. void build_ifg_virtual( ); + // used when computing the register pressure for each block in the CFG. This + // is done during IFG creation. class Pressure { - public: // keeps track of the register pressure at the current // instruction (used when stepping backwards in the block) uint _current_pressure; @@ -518,6 +518,7 @@ private: // number of live ranges that constitute high register pressure const uint _high_pressure_limit; + public: // lower the register pressure and look for a low to high pressure // transition @@ -525,9 +526,6 @@ private: _current_pressure -= lrg.reg_pressure(); if (_current_pressure == _high_pressure_limit) { _high_pressure_index = location; - if (_current_pressure > _final_pressure) { - _final_pressure = _current_pressure + 1; - } } } @@ -540,6 +538,45 @@ private: } } + uint high_pressure_index() const { + return _high_pressure_index; + } + + uint final_pressure() const { + return _final_pressure; + } + + uint current_pressure() const { + return _current_pressure; + } + + uint high_pressure_limit() const { + return _high_pressure_limit; + } + + void lower_high_pressure_index() { + _high_pressure_index--; + } + + void set_high_pressure_index_to_block_start() { + _high_pressure_index = 0; + } + + void check_pressure_at_fatproj(uint fatproj_location, RegMask& fatproj_mask) { + // this pressure is only valid at this instruction, i.e. we don't need to lower + // the register pressure since the fat proj was never live before (going backwards) + uint new_pressure = current_pressure() + fatproj_mask.Size(); + if (new_pressure > final_pressure()) { + _final_pressure = new_pressure; + } + + // if we were at a low pressure and now and the fat proj is at high pressure, record the fat proj location + // as coming from a low to high (to low again) + if (current_pressure() <= high_pressure_limit() && new_pressure > high_pressure_limit()) { + _high_pressure_index = fatproj_location; + } + } + Pressure(uint high_pressure_index, uint high_pressure_limit) : _current_pressure(0) , _high_pressure_index(high_pressure_index) diff --git a/hotspot/src/share/vm/opto/classes.hpp b/hotspot/src/share/vm/opto/classes.hpp index bbfd980dd76..3cdc2c58525 100644 --- a/hotspot/src/share/vm/opto/classes.hpp +++ b/hotspot/src/share/vm/opto/classes.hpp @@ -29,8 +29,6 @@ macro(AbsD) macro(AbsF) macro(AbsI) macro(AddD) -macro(AddExactI) -macro(AddExactL) macro(AddF) macro(AddI) macro(AddL) @@ -135,7 +133,6 @@ macro(EncodePKlass) macro(ExpD) macro(FastLock) macro(FastUnlock) -macro(FlagsProj) macro(Goto) macro(Halt) macro(If) @@ -170,9 +167,6 @@ macro(Loop) macro(LoopLimit) macro(Mach) macro(MachProj) -macro(MathExact) -macro(MathExactI) -macro(MathExactL) macro(MaxI) macro(MemBarAcquire) macro(LoadFence) @@ -194,22 +188,24 @@ macro(MoveF2I) macro(MoveL2D) macro(MoveD2L) macro(MulD) -macro(MulExactI) -macro(MulExactL) macro(MulF) macro(MulHiL) macro(MulI) macro(MulL) macro(Multi) macro(NegD) -macro(NegExactI) -macro(NegExactL) macro(NegF) macro(NeverBranch) macro(Opaque1) macro(Opaque2) macro(OrI) macro(OrL) +macro(OverflowAddI) +macro(OverflowSubI) +macro(OverflowMulI) +macro(OverflowAddL) +macro(OverflowSubL) +macro(OverflowMulL) macro(PCTable) macro(Parm) macro(PartialSubtypeCheck) @@ -253,8 +249,6 @@ macro(StrComp) macro(StrEquals) macro(StrIndexOf) macro(SubD) -macro(SubExactI) -macro(SubExactL) macro(SubF) macro(SubI) macro(SubL) diff --git a/hotspot/src/share/vm/opto/coalesce.cpp b/hotspot/src/share/vm/opto/coalesce.cpp index bd207b584a1..5579d90c485 100644 --- a/hotspot/src/share/vm/opto/coalesce.cpp +++ b/hotspot/src/share/vm/opto/coalesce.cpp @@ -291,7 +291,7 @@ void PhaseAggressiveCoalesce::insert_copies( Matcher &matcher ) { _phc.clone_projs(pred, pred->end_idx(), m, copy, _phc._lrg_map); } else { const RegMask *rm = C->matcher()->idealreg2spillmask[m->ideal_reg()]; - copy = new (C) MachSpillCopyNode(m, *rm, *rm); + copy = new (C) MachSpillCopyNode(MachSpillCopyNode::PhiInput, m, *rm, *rm); // Find a good place to insert. Kinda tricky, use a subroutine insert_copy_with_overlap(pred,copy,phi_name,src_name); } @@ -325,7 +325,7 @@ void PhaseAggressiveCoalesce::insert_copies( Matcher &matcher ) { l += _phc.clone_projs(b, l, m, copy, _phc._lrg_map); } else { const RegMask *rm = C->matcher()->idealreg2spillmask[m->ideal_reg()]; - copy = new (C) MachSpillCopyNode(m, *rm, *rm); + copy = new (C) MachSpillCopyNode(MachSpillCopyNode::TwoAddress, m, *rm, *rm); // Insert the copy in the basic block, just before us b->insert_node(copy, l++); } @@ -372,7 +372,7 @@ void PhaseAggressiveCoalesce::insert_copies( Matcher &matcher ) { continue; // Live out; do not pre-split // Split the lrg at this use const RegMask *rm = C->matcher()->idealreg2spillmask[inp->ideal_reg()]; - Node *copy = new (C) MachSpillCopyNode( inp, *rm, *rm ); + Node* copy = new (C) MachSpillCopyNode(MachSpillCopyNode::DebugUse, inp, *rm, *rm); // Insert the copy in the use-def chain n->set_req(inpidx, copy ); // Insert the copy in the basic block, just before us diff --git a/hotspot/src/share/vm/opto/compile.cpp b/hotspot/src/share/vm/opto/compile.cpp index d838a5b6a8c..47acd4c5b49 100644 --- a/hotspot/src/share/vm/opto/compile.cpp +++ b/hotspot/src/share/vm/opto/compile.cpp @@ -3028,42 +3028,6 @@ void Compile::final_graph_reshaping_impl( Node *n, Final_Reshape_Counts &frc) { n->set_req(MemBarNode::Precedent, top()); } break; - // Must set a control edge on all nodes that produce a FlagsProj - // so they can't escape the block that consumes the flags. - // Must also set the non throwing branch as the control - // for all nodes that depends on the result. Unless the node - // already have a control that isn't the control of the - // flag producer - case Op_FlagsProj: - { - MathExactNode* math = (MathExactNode*) n->in(0); - Node* ctrl = math->control_node(); - Node* non_throwing = math->non_throwing_branch(); - math->set_req(0, ctrl); - - Node* result = math->result_node(); - if (result != NULL) { - for (DUIterator_Fast jmax, j = result->fast_outs(jmax); j < jmax; j++) { - Node* out = result->fast_out(j); - // Phi nodes shouldn't be moved. They would only match below if they - // had the same control as the MathExactNode. The only time that - // would happen is if the Phi is also an input to the MathExact - // - // Cmp nodes shouldn't have control set at all. - if (out->is_Phi() || - out->is_Cmp()) { - continue; - } - - if (out->in(0) == NULL) { - out->set_req(0, non_throwing); - } else if (out->in(0) == ctrl) { - out->set_req(0, non_throwing); - } - } - } - } - break; default: assert( !n->is_Call(), "" ); assert( !n->is_Mem(), "" ); @@ -3285,7 +3249,8 @@ bool Compile::too_many_traps(ciMethod* method, // because of a transient condition during start-up in the interpreter. return false; } - if (md->has_trap_at(bci, reason) != 0) { + ciMethod* m = Deoptimization::reason_is_speculate(reason) ? this->method() : NULL; + if (md->has_trap_at(bci, m, reason) != 0) { // Assume PerBytecodeTrapLimit==0, for a more conservative heuristic. // Also, if there are multiple reasons, or if there is no per-BCI record, // assume the worst. @@ -3303,7 +3268,7 @@ bool Compile::too_many_traps(ciMethod* method, // Less-accurate variant which does not require a method and bci. bool Compile::too_many_traps(Deoptimization::DeoptReason reason, ciMethodData* logmd) { - if (trap_count(reason) >= (uint)PerMethodTrapLimit) { + if (trap_count(reason) >= Deoptimization::per_method_trap_limit(reason)) { // Too many traps globally. // Note that we use cumulative trap_count, not just md->trap_count. if (log()) { @@ -3338,10 +3303,11 @@ bool Compile::too_many_recompiles(ciMethod* method, uint m_cutoff = (uint) PerMethodRecompilationCutoff / 2 + 1; // not zero Deoptimization::DeoptReason per_bc_reason = Deoptimization::reason_recorded_per_bytecode_if_any(reason); + ciMethod* m = Deoptimization::reason_is_speculate(reason) ? this->method() : NULL; if ((per_bc_reason == Deoptimization::Reason_none - || md->has_trap_at(bci, reason) != 0) + || md->has_trap_at(bci, m, reason) != 0) // The trap frequency measure we care about is the recompile count: - && md->trap_recompiled_at(bci) + && md->trap_recompiled_at(bci, m) && md->overflow_recompile_count() >= bc_cutoff) { // Do not emit a trap here if it has already caused recompilations. // Also, if there are multiple reasons, or if there is no per-BCI record, diff --git a/hotspot/src/share/vm/opto/doCall.cpp b/hotspot/src/share/vm/opto/doCall.cpp index e888b550f66..d56f460ea6d 100644 --- a/hotspot/src/share/vm/opto/doCall.cpp +++ b/hotspot/src/share/vm/opto/doCall.cpp @@ -250,7 +250,7 @@ CallGenerator* Compile::call_generator(ciMethod* callee, int vtable_index, bool CallGenerator* miss_cg; Deoptimization::DeoptReason reason = morphism == 2 ? Deoptimization::Reason_bimorphic : - Deoptimization::Reason_class_check; + (speculative_receiver_type == NULL ? Deoptimization::Reason_class_check : Deoptimization::Reason_speculate_class_check); if ((morphism == 1 || (morphism == 2 && next_hit_cg != NULL)) && !too_many_traps(jvms->method(), jvms->bci(), reason) ) { diff --git a/hotspot/src/share/vm/opto/gcm.cpp b/hotspot/src/share/vm/opto/gcm.cpp index bd9a0304181..fcfb3880e19 100644 --- a/hotspot/src/share/vm/opto/gcm.cpp +++ b/hotspot/src/share/vm/opto/gcm.cpp @@ -1661,10 +1661,10 @@ void CFGLoop::compute_freq() { } assert (_members.length() > 0, "no empty loops"); Block* hd = head(); - hd->_freq = 1.0f; + hd->_freq = 1.0; for (int i = 0; i < _members.length(); i++) { CFGElement* s = _members.at(i); - float freq = s->_freq; + double freq = s->_freq; if (s->is_block()) { Block* b = s->as_Block(); for (uint j = 0; j < b->_num_succs; j++) { @@ -1676,7 +1676,7 @@ void CFGLoop::compute_freq() { assert(lp->_parent == this, "immediate child"); for (int k = 0; k < lp->_exits.length(); k++) { Block* eb = lp->_exits.at(k).get_target(); - float prob = lp->_exits.at(k).get_prob(); + double prob = lp->_exits.at(k).get_prob(); update_succ_freq(eb, freq * prob); } } @@ -1688,7 +1688,7 @@ void CFGLoop::compute_freq() { // inner blocks do not get erroneously scaled. if (_depth != 0) { // Total the exit probabilities for this loop. - float exits_sum = 0.0f; + double exits_sum = 0.0f; for (int i = 0; i < _exits.length(); i++) { exits_sum += _exits.at(i).get_prob(); } @@ -1935,7 +1935,7 @@ void Block::update_uncommon_branch(Block* ub) { //------------------------------update_succ_freq------------------------------- // Update the appropriate frequency associated with block 'b', a successor of // a block in this loop. -void CFGLoop::update_succ_freq(Block* b, float freq) { +void CFGLoop::update_succ_freq(Block* b, double freq) { if (b->_loop == this) { if (b == head()) { // back branch within the loop @@ -1976,11 +1976,11 @@ bool CFGLoop::in_loop_nest(Block* b) { // Scale frequency of loops and blocks by trip counts from outer loops // Do a top down traversal of loop tree (visit outer loops first.) void CFGLoop::scale_freq() { - float loop_freq = _freq * trip_count(); + double loop_freq = _freq * trip_count(); _freq = loop_freq; for (int i = 0; i < _members.length(); i++) { CFGElement* s = _members.at(i); - float block_freq = s->_freq * loop_freq; + double block_freq = s->_freq * loop_freq; if (g_isnan(block_freq) || block_freq < MIN_BLOCK_FREQUENCY) block_freq = MIN_BLOCK_FREQUENCY; s->_freq = block_freq; @@ -1993,7 +1993,7 @@ void CFGLoop::scale_freq() { } // Frequency of outer loop -float CFGLoop::outer_loop_freq() const { +double CFGLoop::outer_loop_freq() const { if (_child != NULL) { return _child->_freq; } @@ -2042,7 +2042,7 @@ void CFGLoop::dump() const { k = 0; } Block *blk = _exits.at(i).get_target(); - float prob = _exits.at(i).get_prob(); + double prob = _exits.at(i).get_prob(); tty->print(" ->%d@%d%%", blk->_pre_order, (int)(prob*100)); } tty->print("\n"); diff --git a/hotspot/src/share/vm/opto/graphKit.cpp b/hotspot/src/share/vm/opto/graphKit.cpp index af4b2f452a2..d2876a93a5e 100644 --- a/hotspot/src/share/vm/opto/graphKit.cpp +++ b/hotspot/src/share/vm/opto/graphKit.cpp @@ -612,9 +612,10 @@ void GraphKit::builtin_throw(Deoptimization::DeoptReason reason, Node* arg) { // Usual case: Bail to interpreter. // Reserve the right to recompile if we haven't seen anything yet. + assert(!Deoptimization::reason_is_speculate(reason), "unsupported"); Deoptimization::DeoptAction action = Deoptimization::Action_maybe_recompile; if (treat_throw_as_hot - && (method()->method_data()->trap_recompiled_at(bci()) + && (method()->method_data()->trap_recompiled_at(bci(), NULL) || C->too_many_traps(reason))) { // We cannot afford to take more traps here. Suffer in the interpreter. if (C->log() != NULL) @@ -2145,7 +2146,7 @@ Node* GraphKit::record_profile_for_speculation(Node* n, ciKlass* exact_kls) { * * @param n receiver node * - * @return node with improved type + * @return node with improved type */ Node* GraphKit::record_profiled_receiver_for_speculation(Node* n) { if (!UseTypeSpeculation) { @@ -2739,12 +2740,14 @@ bool GraphKit::seems_never_null(Node* obj, ciProfileData* data) { // Subsequent type checks will always fold up. Node* GraphKit::maybe_cast_profiled_receiver(Node* not_null_obj, ciKlass* require_klass, - ciKlass* spec_klass, + ciKlass* spec_klass, bool safe_for_replace) { if (!UseTypeProfile || !TypeProfileCasts) return NULL; + Deoptimization::DeoptReason reason = spec_klass == NULL ? Deoptimization::Reason_class_check : Deoptimization::Reason_speculate_class_check; + // Make sure we haven't already deoptimized from this tactic. - if (too_many_traps(Deoptimization::Reason_class_check)) + if (too_many_traps(reason)) return NULL; // (No, this isn't a call, but it's enough like a virtual call @@ -2766,7 +2769,7 @@ Node* GraphKit::maybe_cast_profiled_receiver(Node* not_null_obj, &exact_obj); { PreserveJVMState pjvms(this); set_control(slow_ctl); - uncommon_trap(Deoptimization::Reason_class_check, + uncommon_trap(reason, Deoptimization::Action_maybe_recompile); } if (safe_for_replace) { @@ -2793,8 +2796,10 @@ Node* GraphKit::maybe_cast_profiled_obj(Node* obj, bool not_null) { // type == NULL if profiling tells us this object is always null if (type != NULL) { - if (!too_many_traps(Deoptimization::Reason_null_check) && - !too_many_traps(Deoptimization::Reason_class_check)) { + Deoptimization::DeoptReason class_reason = Deoptimization::Reason_speculate_class_check; + Deoptimization::DeoptReason null_reason = Deoptimization::Reason_null_check; + if (!too_many_traps(null_reason) && + !too_many_traps(class_reason)) { Node* not_null_obj = NULL; // not_null is true if we know the object is not null and // there's no need for a null check @@ -2813,7 +2818,7 @@ Node* GraphKit::maybe_cast_profiled_obj(Node* obj, { PreserveJVMState pjvms(this); set_control(slow_ctl); - uncommon_trap(Deoptimization::Reason_class_check, + uncommon_trap(class_reason, Deoptimization::Action_maybe_recompile); } replace_in_map(not_null_obj, exact_obj); @@ -2882,7 +2887,7 @@ Node* GraphKit::gen_instanceof(Node* obj, Node* superklass, bool safe_for_replac } if (known_statically && UseTypeSpeculation) { - // If we know the type check always succeed then we don't use the + // If we know the type check always succeeds then we don't use the // profiling data at this bytecode. Don't lose it, feed it to the // type system as a speculative type. not_null_obj = record_profiled_receiver_for_speculation(not_null_obj); diff --git a/hotspot/src/share/vm/opto/graphKit.hpp b/hotspot/src/share/vm/opto/graphKit.hpp index e49c4684686..fbbf8c9aa86 100644 --- a/hotspot/src/share/vm/opto/graphKit.hpp +++ b/hotspot/src/share/vm/opto/graphKit.hpp @@ -406,7 +406,7 @@ class GraphKit : public Phase { // Use the type profile to narrow an object type. Node* maybe_cast_profiled_receiver(Node* not_null_obj, ciKlass* require_klass, - ciKlass* spec, + ciKlass* spec, bool safe_for_replace); // Cast obj to type and emit guard unless we had too many traps here already diff --git a/hotspot/src/share/vm/opto/ifg.cpp b/hotspot/src/share/vm/opto/ifg.cpp index 24aab15143f..b84ea45abb7 100644 --- a/hotspot/src/share/vm/opto/ifg.cpp +++ b/hotspot/src/share/vm/opto/ifg.cpp @@ -439,8 +439,8 @@ void PhaseChaitin::lower_pressure(Block* b, uint location, LRG& lrg, IndexSet* l } } } - assert(int_pressure._current_pressure == count_int_pressure(liveout), "the int pressure is incorrect"); - assert(float_pressure._current_pressure == count_float_pressure(liveout), "the float pressure is incorrect"); + assert(int_pressure.current_pressure() == count_int_pressure(liveout), "the int pressure is incorrect"); + assert(float_pressure.current_pressure() == count_float_pressure(liveout), "the float pressure is incorrect"); } /* Go to the first non-phi index in a block */ @@ -513,8 +513,8 @@ void PhaseChaitin::compute_initial_block_pressure(Block* b, IndexSet* liveout, P raise_pressure(b, lrg, int_pressure, float_pressure); lid = elements.next(); } - assert(int_pressure._current_pressure == count_int_pressure(liveout), "the int pressure is incorrect"); - assert(float_pressure._current_pressure == count_float_pressure(liveout), "the float pressure is incorrect"); + assert(int_pressure.current_pressure() == count_int_pressure(liveout), "the int pressure is incorrect"); + assert(float_pressure.current_pressure() == count_float_pressure(liveout), "the float pressure is incorrect"); } /* @@ -548,17 +548,7 @@ bool PhaseChaitin::remove_node_if_not_used(Block* b, uint location, Node* n, uin void PhaseChaitin::check_for_high_pressure_transition_at_fatproj(uint& block_reg_pressure, uint location, LRG& lrg, Pressure& pressure, const int op_regtype) { RegMask mask_tmp = lrg.mask(); mask_tmp.AND(*Matcher::idealreg2regmask[op_regtype]); - // this pressure is only valid at this instruction, i.e. we don't need to lower - // the register pressure since the fat proj was never live before (going backwards) - uint new_pressure = pressure._current_pressure + mask_tmp.Size(); - if (new_pressure > pressure._final_pressure) { - pressure._final_pressure = new_pressure; - } - // if we were at a low pressure and now at the fat proj is at high pressure, record the fat proj location - // as coming from a low to high (to low again) - if (pressure._current_pressure <= pressure._high_pressure_limit && new_pressure > pressure._high_pressure_limit) { - pressure._high_pressure_index = location; - } + pressure.check_pressure_at_fatproj(location, mask_tmp); } /* @@ -700,23 +690,23 @@ void PhaseChaitin::add_input_to_liveout(Block* b, Node* n, IndexSet* liveout, do // Newly live things assumed live from here to top of block lrg._area += cost; raise_pressure(b, lrg, int_pressure, float_pressure); - assert(int_pressure._current_pressure == count_int_pressure(liveout), "the int pressure is incorrect"); - assert(float_pressure._current_pressure == count_float_pressure(liveout), "the float pressure is incorrect"); + assert(int_pressure.current_pressure() == count_int_pressure(liveout), "the int pressure is incorrect"); + assert(float_pressure.current_pressure() == count_float_pressure(liveout), "the float pressure is incorrect"); } - assert(!(lrg._area < 0.0), "negative spill area" ); + assert(lrg._area >= 0.0, "negative spill area" ); } } /* * If we run off the top of the block with high pressure just record that the * whole block is high pressure. (Even though we might have a transition - * lower down in the block) + * later down in the block) */ void PhaseChaitin::check_for_high_pressure_block(Pressure& pressure) { // current pressure now means the pressure before the first instruction in the block // (since we have stepped through all instructions backwards) - if (pressure._current_pressure > pressure._high_pressure_limit) { - pressure._high_pressure_index = 0; + if (pressure.current_pressure() > pressure.high_pressure_limit()) { + pressure.set_high_pressure_index_to_block_start(); } } @@ -725,7 +715,7 @@ void PhaseChaitin::check_for_high_pressure_block(Pressure& pressure) { * and set the high pressure index for the block */ void PhaseChaitin::adjust_high_pressure_index(Block* b, uint& block_hrp_index, Pressure& pressure) { - uint i = pressure._high_pressure_index; + uint i = pressure.high_pressure_index(); if (i < b->number_of_nodes() && i < b->end_idx() + 1) { Node* cur = b->get_node(i); while (cur->is_Proj() || (cur->is_MachNullCheck()) || cur->is_Catch()) { @@ -772,7 +762,7 @@ uint PhaseChaitin::build_ifg_physical( ResourceArea *a ) { int inst_count = last_inst - first_inst; double cost = (inst_count <= 0) ? 0.0 : block->_freq * double(inst_count); - assert(!(cost < 0.0), "negative spill cost" ); + assert(cost >= 0.0, "negative spill cost" ); compute_initial_block_pressure(block, &liveout, int_pressure, float_pressure, cost); @@ -789,8 +779,8 @@ uint PhaseChaitin::build_ifg_physical( ResourceArea *a ) { if (!liveout.member(lid) && n->Opcode() != Op_SafePoint) { if (remove_node_if_not_used(block, location, n, lid, &liveout)) { - float_pressure._high_pressure_index--; - int_pressure._high_pressure_index--; + float_pressure.lower_high_pressure_index(); + int_pressure.lower_high_pressure_index(); continue; } if (lrg._fat_proj) { @@ -799,7 +789,11 @@ uint PhaseChaitin::build_ifg_physical( ResourceArea *a ) { } } else { // A live range ends at its definition, remove the remaining area. - lrg._area -= cost; + // If the cost is +Inf (which might happen in extreme cases), the lrg area will also be +Inf, + // and +Inf - +Inf = NaN. So let's not do that subtraction. + if (g_isfinite(cost)) { + lrg._area -= cost; + } assert(lrg._area >= 0.0, "negative spill area" ); assign_high_score_to_immediate_copies(block, n, lrg, location + 1, last_inst); @@ -837,13 +831,13 @@ uint PhaseChaitin::build_ifg_physical( ResourceArea *a ) { adjust_high_pressure_index(block, block->_ihrp_index, int_pressure); adjust_high_pressure_index(block, block->_fhrp_index, float_pressure); // set the final_pressure as the register pressure for the block - block->_reg_pressure = int_pressure._final_pressure; - block->_freg_pressure = float_pressure._final_pressure; + block->_reg_pressure = int_pressure.final_pressure(); + block->_freg_pressure = float_pressure.final_pressure(); #ifndef PRODUCT // Gather Register Pressure Statistics if (PrintOptoStatistics) { - if (block->_reg_pressure > int_pressure._high_pressure_limit || block->_freg_pressure > float_pressure._high_pressure_limit) { + if (block->_reg_pressure > int_pressure.high_pressure_limit() || block->_freg_pressure > float_pressure.high_pressure_limit()) { _high_pressure++; } else { _low_pressure++; diff --git a/hotspot/src/share/vm/opto/ifnode.cpp b/hotspot/src/share/vm/opto/ifnode.cpp index 6e61a1f98bc..1c9dbb70839 100644 --- a/hotspot/src/share/vm/opto/ifnode.cpp +++ b/hotspot/src/share/vm/opto/ifnode.cpp @@ -76,7 +76,6 @@ static Node* split_if(IfNode *iff, PhaseIterGVN *igvn) { if( !i1->is_Bool() ) return NULL; BoolNode *b = i1->as_Bool(); Node *cmp = b->in(1); - if( cmp->is_FlagsProj() ) return NULL; if( !cmp->is_Cmp() ) return NULL; i1 = cmp->in(1); if( i1 == NULL || !i1->is_Phi() ) return NULL; diff --git a/hotspot/src/share/vm/opto/lcm.cpp b/hotspot/src/share/vm/opto/lcm.cpp index 869928a54d9..8398bb3d254 100644 --- a/hotspot/src/share/vm/opto/lcm.cpp +++ b/hotspot/src/share/vm/opto/lcm.cpp @@ -520,13 +520,6 @@ Node* PhaseCFG::select(Block* block, Node_List &worklist, GrowableArray &re break; } - // For nodes that produce a FlagsProj, make the node adjacent to the - // use of the FlagsProj - if (use->is_FlagsProj() && get_block_for_node(use) == block) { - found_machif = true; - break; - } - // More than this instruction pending for successor to be ready, // don't choose this if other opportunities are ready if (ready_cnt.at(use->_idx) > 1) diff --git a/hotspot/src/share/vm/opto/library_call.cpp b/hotspot/src/share/vm/opto/library_call.cpp index 3a2279ee568..73c6e9090f9 100644 --- a/hotspot/src/share/vm/opto/library_call.cpp +++ b/hotspot/src/share/vm/opto/library_call.cpp @@ -203,7 +203,9 @@ class LibraryCallKit : public GraphKit { bool inline_math_native(vmIntrinsics::ID id); bool inline_trig(vmIntrinsics::ID id); bool inline_math(vmIntrinsics::ID id); - void inline_math_mathExact(Node* math); + template + bool inline_math_overflow(Node* arg1, Node* arg2); + void inline_math_mathExact(Node* math, Node* test); bool inline_math_addExactI(bool is_increment); bool inline_math_addExactL(bool is_increment); bool inline_math_multiplyExactI(); @@ -517,31 +519,31 @@ CallGenerator* Compile::make_vm_intrinsic(ciMethod* m, bool is_virtual) { case vmIntrinsics::_incrementExactI: case vmIntrinsics::_addExactI: - if (!Matcher::match_rule_supported(Op_AddExactI) || !UseMathExactIntrinsics) return NULL; + if (!Matcher::match_rule_supported(Op_OverflowAddI) || !UseMathExactIntrinsics) return NULL; break; case vmIntrinsics::_incrementExactL: case vmIntrinsics::_addExactL: - if (!Matcher::match_rule_supported(Op_AddExactL) || !UseMathExactIntrinsics) return NULL; + if (!Matcher::match_rule_supported(Op_OverflowAddL) || !UseMathExactIntrinsics) return NULL; break; case vmIntrinsics::_decrementExactI: case vmIntrinsics::_subtractExactI: - if (!Matcher::match_rule_supported(Op_SubExactI) || !UseMathExactIntrinsics) return NULL; + if (!Matcher::match_rule_supported(Op_OverflowSubI) || !UseMathExactIntrinsics) return NULL; break; case vmIntrinsics::_decrementExactL: case vmIntrinsics::_subtractExactL: - if (!Matcher::match_rule_supported(Op_SubExactL) || !UseMathExactIntrinsics) return NULL; + if (!Matcher::match_rule_supported(Op_OverflowSubL) || !UseMathExactIntrinsics) return NULL; break; case vmIntrinsics::_negateExactI: - if (!Matcher::match_rule_supported(Op_NegExactI) || !UseMathExactIntrinsics) return NULL; + if (!Matcher::match_rule_supported(Op_OverflowSubI) || !UseMathExactIntrinsics) return NULL; break; case vmIntrinsics::_negateExactL: - if (!Matcher::match_rule_supported(Op_NegExactL) || !UseMathExactIntrinsics) return NULL; + if (!Matcher::match_rule_supported(Op_OverflowSubL) || !UseMathExactIntrinsics) return NULL; break; case vmIntrinsics::_multiplyExactI: - if (!Matcher::match_rule_supported(Op_MulExactI) || !UseMathExactIntrinsics) return NULL; + if (!Matcher::match_rule_supported(Op_OverflowMulI) || !UseMathExactIntrinsics) return NULL; break; case vmIntrinsics::_multiplyExactL: - if (!Matcher::match_rule_supported(Op_MulExactL) || !UseMathExactIntrinsics) return NULL; + if (!Matcher::match_rule_supported(Op_OverflowMulL) || !UseMathExactIntrinsics) return NULL; break; default: @@ -1937,7 +1939,7 @@ bool LibraryCallKit::inline_math_native(vmIntrinsics::ID id) { runtime_math(OptoRuntime::Math_D_D_Type(), FN_PTR(SharedRuntime::dlog10), "LOG10"); // These intrinsics are supported on all hardware - case vmIntrinsics::_dsqrt: return Matcher::has_match_rule(Op_SqrtD) ? inline_math(id) : false; + case vmIntrinsics::_dsqrt: return Matcher::match_rule_supported(Op_SqrtD) ? inline_math(id) : false; case vmIntrinsics::_dabs: return Matcher::has_match_rule(Op_AbsD) ? inline_math(id) : false; case vmIntrinsics::_dexp: return Matcher::has_match_rule(Op_ExpD) ? inline_exp() : @@ -1970,18 +1972,8 @@ bool LibraryCallKit::inline_min_max(vmIntrinsics::ID id) { return true; } -void LibraryCallKit::inline_math_mathExact(Node* math) { - // If we didn't get the expected opcode it means we have optimized - // the node to something else and don't need the exception edge. - if (!math->is_MathExact()) { - set_result(math); - return; - } - - Node* result = _gvn.transform( new(C) ProjNode(math, MathExactNode::result_proj_node)); - Node* flags = _gvn.transform( new(C) FlagsProjNode(math, MathExactNode::flags_proj_node)); - - Node* bol = _gvn.transform( new (C) BoolNode(flags, BoolTest::overflow) ); +void LibraryCallKit::inline_math_mathExact(Node* math, Node *test) { + Node* bol = _gvn.transform( new (C) BoolNode(test, BoolTest::overflow) ); IfNode* check = create_and_map_if(control(), bol, PROB_UNLIKELY_MAG(3), COUNT_UNKNOWN); Node* fast_path = _gvn.transform( new (C) IfFalseNode(check)); Node* slow_path = _gvn.transform( new (C) IfTrueNode(check) ); @@ -1999,108 +1991,50 @@ void LibraryCallKit::inline_math_mathExact(Node* math) { } set_control(fast_path); - set_result(result); + set_result(math); +} + +template +bool LibraryCallKit::inline_math_overflow(Node* arg1, Node* arg2) { + typedef typename OverflowOp::MathOp MathOp; + + MathOp* mathOp = new(C) MathOp(arg1, arg2); + Node* operation = _gvn.transform( mathOp ); + Node* ofcheck = _gvn.transform( new(C) OverflowOp(arg1, arg2) ); + inline_math_mathExact(operation, ofcheck); + return true; } bool LibraryCallKit::inline_math_addExactI(bool is_increment) { - Node* arg1 = argument(0); - Node* arg2 = NULL; - - if (is_increment) { - arg2 = intcon(1); - } else { - arg2 = argument(1); - } - - Node* add = _gvn.transform( new(C) AddExactINode(NULL, arg1, arg2) ); - inline_math_mathExact(add); - return true; + return inline_math_overflow(argument(0), is_increment ? intcon(1) : argument(1)); } bool LibraryCallKit::inline_math_addExactL(bool is_increment) { - Node* arg1 = argument(0); // type long - // argument(1) == TOP - Node* arg2 = NULL; - - if (is_increment) { - arg2 = longcon(1); - } else { - arg2 = argument(2); // type long - // argument(3) == TOP - } - - Node* add = _gvn.transform(new(C) AddExactLNode(NULL, arg1, arg2)); - inline_math_mathExact(add); - return true; + return inline_math_overflow(argument(0), is_increment ? longcon(1) : argument(2)); } bool LibraryCallKit::inline_math_subtractExactI(bool is_decrement) { - Node* arg1 = argument(0); - Node* arg2 = NULL; - - if (is_decrement) { - arg2 = intcon(1); - } else { - arg2 = argument(1); - } - - Node* sub = _gvn.transform(new(C) SubExactINode(NULL, arg1, arg2)); - inline_math_mathExact(sub); - return true; + return inline_math_overflow(argument(0), is_decrement ? intcon(1) : argument(1)); } bool LibraryCallKit::inline_math_subtractExactL(bool is_decrement) { - Node* arg1 = argument(0); // type long - // argument(1) == TOP - Node* arg2 = NULL; - - if (is_decrement) { - arg2 = longcon(1); - } else { - arg2 = argument(2); // type long - // argument(3) == TOP - } - - Node* sub = _gvn.transform(new(C) SubExactLNode(NULL, arg1, arg2)); - inline_math_mathExact(sub); - return true; + return inline_math_overflow(argument(0), is_decrement ? longcon(1) : argument(2)); } bool LibraryCallKit::inline_math_negateExactI() { - Node* arg1 = argument(0); - - Node* neg = _gvn.transform(new(C) NegExactINode(NULL, arg1)); - inline_math_mathExact(neg); - return true; + return inline_math_overflow(intcon(0), argument(0)); } bool LibraryCallKit::inline_math_negateExactL() { - Node* arg1 = argument(0); - // argument(1) == TOP - - Node* neg = _gvn.transform(new(C) NegExactLNode(NULL, arg1)); - inline_math_mathExact(neg); - return true; + return inline_math_overflow(longcon(0), argument(0)); } bool LibraryCallKit::inline_math_multiplyExactI() { - Node* arg1 = argument(0); - Node* arg2 = argument(1); - - Node* mul = _gvn.transform(new(C) MulExactINode(NULL, arg1, arg2)); - inline_math_mathExact(mul); - return true; + return inline_math_overflow(argument(0), argument(1)); } bool LibraryCallKit::inline_math_multiplyExactL() { - Node* arg1 = argument(0); - // argument(1) == TOP - Node* arg2 = argument(2); - // argument(3) == TOP - - Node* mul = _gvn.transform(new(C) MulExactLNode(NULL, arg1, arg2)); - inline_math_mathExact(mul); - return true; + return inline_math_overflow(argument(0), argument(2)); } Node* diff --git a/hotspot/src/share/vm/opto/loopTransform.cpp b/hotspot/src/share/vm/opto/loopTransform.cpp index 4cc7a537558..7fa685b03eb 100644 --- a/hotspot/src/share/vm/opto/loopTransform.cpp +++ b/hotspot/src/share/vm/opto/loopTransform.cpp @@ -713,10 +713,6 @@ bool IdealLoopTree::policy_unroll( PhaseIdealLoop *phase ) const { case Op_ModL: body_size += 30; break; case Op_DivL: body_size += 30; break; case Op_MulL: body_size += 10; break; - case Op_FlagsProj: - // Can't handle unrolling of loops containing - // nodes that generate a FlagsProj at the moment - return false; case Op_StrComp: case Op_StrEquals: case Op_StrIndexOf: @@ -780,10 +776,6 @@ bool IdealLoopTree::policy_range_check( PhaseIdealLoop *phase ) const { continue; // not RC Node *cmp = bol->in(1); - if (cmp->is_FlagsProj()) { - continue; - } - Node *rc_exp = cmp->in(1); Node *limit = cmp->in(2); diff --git a/hotspot/src/share/vm/opto/loopopts.cpp b/hotspot/src/share/vm/opto/loopopts.cpp index ac97d3edec5..f9a87bbac57 100644 --- a/hotspot/src/share/vm/opto/loopopts.cpp +++ b/hotspot/src/share/vm/opto/loopopts.cpp @@ -43,12 +43,6 @@ Node *PhaseIdealLoop::split_thru_phi( Node *n, Node *region, int policy ) { return NULL; } - if (n->is_MathExact()) { - // MathExact has projections that are not correctly handled in the code - // below. - return NULL; - } - int wins = 0; assert(!n->is_CFG(), ""); assert(region->is_Region(), ""); @@ -2362,8 +2356,7 @@ bool PhaseIdealLoop::partial_peel( IdealLoopTree *loop, Node_List &old_new ) { opc == Op_Catch || opc == Op_CatchProj || opc == Op_Jump || - opc == Op_JumpProj || - opc == Op_FlagsProj) { + opc == Op_JumpProj) { #if !defined(PRODUCT) if (TracePartialPeeling) { tty->print_cr("\nExit control too complex: lp: %d", head->_idx); diff --git a/hotspot/src/share/vm/opto/machnode.hpp b/hotspot/src/share/vm/opto/machnode.hpp index 5ea42a43fce..55d7e515882 100644 --- a/hotspot/src/share/vm/opto/machnode.hpp +++ b/hotspot/src/share/vm/opto/machnode.hpp @@ -520,12 +520,33 @@ public: // Machine SpillCopy Node. Copies 1 or 2 words from any location to any // location (stack or register). class MachSpillCopyNode : public MachIdealNode { +public: + enum SpillType { + TwoAddress, // Inserted when coalescing of a two-address-instruction node and its input fails + PhiInput, // Inserted when coalescing of a phi node and its input fails + DebugUse, // Inserted as debug info spills to safepoints in non-frequent blocks + LoopPhiInput, // Pre-split compares of loop-phis + Definition, // An lrg marked as spilled will be spilled to memory right after its definition, + // if in high pressure region or the lrg is bound + RegToReg, // A register to register move + RegToMem, // A register to memory move + MemToReg, // A memory to register move + PhiLocationDifferToInputLocation, // When coalescing phi nodes in PhaseChaitin::Split(), a move spill is inserted if + // the phi and its input resides at different locations (i.e. reg or mem) + BasePointerToMem, // Spill base pointer to memory at safepoint + InputToRematerialization, // When rematerializing a node we stretch the inputs live ranges, and they might be + // stretched beyond a new definition point, therefore we split out new copies instead + CallUse, // Spill use at a call + Bound // An lrg marked as spill that is bound and needs to be spilled at a use + }; +private: const RegMask *_in; // RegMask for input const RegMask *_out; // RegMask for output const Type *_type; + const SpillType _spill_type; public: - MachSpillCopyNode( Node *n, const RegMask &in, const RegMask &out ) : - MachIdealNode(), _in(&in), _out(&out), _type(n->bottom_type()) { + MachSpillCopyNode(SpillType spill_type, Node *n, const RegMask &in, const RegMask &out ) : + MachIdealNode(), _spill_type(spill_type), _in(&in), _out(&out), _type(n->bottom_type()) { init_class_id(Class_MachSpillCopy); init_flags(Flag_is_Copy); add_req(NULL); @@ -544,8 +565,42 @@ public: virtual void emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const; virtual uint size(PhaseRegAlloc *ra_) const; + #ifndef PRODUCT - virtual const char *Name() const { return "MachSpillCopy"; } + virtual const char *Name() const { + switch (_spill_type) { + case TwoAddress: + return "TwoAddressSpillCopy"; + case PhiInput: + return "PhiInputSpillCopy"; + case DebugUse: + return "DebugUseSpillCopy"; + case LoopPhiInput: + return "LoopPhiInputSpillCopy"; + case Definition: + return "DefinitionSpillCopy"; + case RegToReg: + return "RegToRegSpillCopy"; + case RegToMem: + return "RegToMemSpillCopy"; + case MemToReg: + return "MemToRegSpillCopy"; + case PhiLocationDifferToInputLocation: + return "PhiLocationDifferToInputLocationSpillCopy"; + case BasePointerToMem: + return "BasePointerToMemSpillCopy"; + case InputToRematerialization: + return "InputToRematerializationSpillCopy"; + case CallUse: + return "CallUseSpillCopy"; + case Bound: + return "BoundSpillCopy"; + default: + assert(false, "Must have valid spill type"); + return "MachSpillCopy"; + } + } + virtual void format( PhaseRegAlloc *, outputStream *st ) const; #endif }; diff --git a/hotspot/src/share/vm/opto/matcher.cpp b/hotspot/src/share/vm/opto/matcher.cpp index 6d35afde069..03ee1dc8086 100644 --- a/hotspot/src/share/vm/opto/matcher.cpp +++ b/hotspot/src/share/vm/opto/matcher.cpp @@ -1998,7 +1998,6 @@ void Matcher::find_shared( Node *n ) { case Op_Catch: case Op_CatchProj: case Op_CProj: - case Op_FlagsProj: case Op_JumpProj: case Op_JProj: case Op_NeverBranch: diff --git a/hotspot/src/share/vm/opto/matcher.hpp b/hotspot/src/share/vm/opto/matcher.hpp index 6d0c8e3b050..38eeca40290 100644 --- a/hotspot/src/share/vm/opto/matcher.hpp +++ b/hotspot/src/share/vm/opto/matcher.hpp @@ -340,10 +340,6 @@ public: // Register for MODL projection of divmodL static RegMask modL_proj_mask(); - static const RegMask mathExactI_result_proj_mask(); - static const RegMask mathExactL_result_proj_mask(); - static const RegMask mathExactI_flags_proj_mask(); - // Use hardware DIV instruction when it is faster than // a code which use multiply for division by constant. static bool use_asm_for_ldiv_by_con( jlong divisor ); diff --git a/hotspot/src/share/vm/opto/mathexactnode.cpp b/hotspot/src/share/vm/opto/mathexactnode.cpp index bb930b37d52..00466ad3d50 100644 --- a/hotspot/src/share/vm/opto/mathexactnode.cpp +++ b/hotspot/src/share/vm/opto/mathexactnode.cpp @@ -31,358 +31,93 @@ #include "opto/mathexactnode.hpp" #include "opto/subnode.hpp" -MathExactNode::MathExactNode(Node* ctrl, Node* in1) : MultiNode(2) { - init_class_id(Class_MathExact); - init_req(0, ctrl); - init_req(1, in1); -} +template +class AddHelper { +public: + typedef typename OverflowOp::TypeClass TypeClass; + typedef typename TypeClass::NativeType NativeType; -MathExactNode::MathExactNode(Node* ctrl, Node* in1, Node* in2) : MultiNode(3) { - init_class_id(Class_MathExact); - init_req(0, ctrl); - init_req(1, in1); - init_req(2, in2); -} - -BoolNode* MathExactNode::bool_node() const { - Node* flags = flags_node(); - BoolNode* boolnode = flags->unique_out()->as_Bool(); - assert(boolnode != NULL, "must have BoolNode"); - return boolnode; -} - -IfNode* MathExactNode::if_node() const { - BoolNode* boolnode = bool_node(); - IfNode* ifnode = boolnode->unique_out()->as_If(); - assert(ifnode != NULL, "must have IfNode"); - return ifnode; -} - -Node* MathExactNode::control_node() const { - IfNode* ifnode = if_node(); - return ifnode->in(0); -} - -Node* MathExactNode::non_throwing_branch() const { - IfNode* ifnode = if_node(); - if (bool_node()->_test._test == BoolTest::overflow) { - return ifnode->proj_out(0); - } - return ifnode->proj_out(1); -} - -// If the MathExactNode won't overflow we have to replace the -// FlagsProjNode and ProjNode that is generated by the MathExactNode -Node* MathExactNode::no_overflow(PhaseGVN* phase, Node* new_result) { - PhaseIterGVN* igvn = phase->is_IterGVN(); - if (igvn) { - ProjNode* result = result_node(); - ProjNode* flags = flags_node(); - - if (result != NULL) { - igvn->replace_node(result, new_result); - } - - if (flags != NULL) { - BoolNode* boolnode = bool_node(); - switch (boolnode->_test._test) { - case BoolTest::overflow: - // if the check is for overflow - never taken - igvn->replace_node(boolnode, phase->intcon(0)); - break; - case BoolTest::no_overflow: - // if the check is for no overflow - always taken - igvn->replace_node(boolnode, phase->intcon(1)); - break; - default: - fatal("Unexpected value of BoolTest"); - break; - } - flags->del_req(0); - } - } - return new_result; -} - -Node* MathExactINode::match(const ProjNode* proj, const Matcher* m) { - uint ideal_reg = proj->ideal_reg(); - RegMask rm; - if (proj->_con == result_proj_node) { - rm = m->mathExactI_result_proj_mask(); - } else { - assert(proj->_con == flags_proj_node, "must be result or flags"); - assert(ideal_reg == Op_RegFlags, "sanity"); - rm = m->mathExactI_flags_proj_mask(); - } - return new (m->C) MachProjNode(this, proj->_con, rm, ideal_reg); -} - -Node* MathExactLNode::match(const ProjNode* proj, const Matcher* m) { - uint ideal_reg = proj->ideal_reg(); - RegMask rm; - if (proj->_con == result_proj_node) { - rm = m->mathExactL_result_proj_mask(); - } else { - assert(proj->_con == flags_proj_node, "must be result or flags"); - assert(ideal_reg == Op_RegFlags, "sanity"); - rm = m->mathExactI_flags_proj_mask(); - } - return new (m->C) MachProjNode(this, proj->_con, rm, ideal_reg); -} - -Node* AddExactINode::Ideal(PhaseGVN* phase, bool can_reshape) { - Node* arg1 = in(1); - Node* arg2 = in(2); - - const Type* type1 = phase->type(arg1); - const Type* type2 = phase->type(arg2); - - if (type1 != Type::TOP && type1->singleton() && - type2 != Type::TOP && type2->singleton()) { - jint val1 = arg1->get_int(); - jint val2 = arg2->get_int(); - jint result = val1 + val2; + static bool will_overflow(NativeType value1, NativeType value2) { + NativeType result = value1 + value2; // Hacker's Delight 2-12 Overflow if both arguments have the opposite sign of the result - if ( (((val1 ^ result) & (val2 ^ result)) >= 0)) { - Node* con_result = ConINode::make(phase->C, result); - return no_overflow(phase, con_result); + if (((value1 ^ result) & (value2 ^ result)) >= 0) { + return false; } - return NULL; + return true; } - if (type1 == TypeInt::ZERO || type2 == TypeInt::ZERO) { // (Add 0 x) == x - Node* add_result = new (phase->C) AddINode(arg1, arg2); - return no_overflow(phase, add_result); - } - - if (type2->singleton()) { - return NULL; // no change - keep constant on the right - } - - if (type1->singleton()) { - // Make it x + Constant - move constant to the right - swap_edges(1, 2); - return this; - } - - if (arg2->is_Load()) { - return NULL; // no change - keep load on the right - } - - if (arg1->is_Load()) { - // Make it x + Load - move load to the right - swap_edges(1, 2); - return this; - } - - if (arg1->_idx > arg2->_idx) { - // Sort the edges - swap_edges(1, 2); - return this; - } - - return NULL; -} - -Node* AddExactLNode::Ideal(PhaseGVN* phase, bool can_reshape) { - Node* arg1 = in(1); - Node* arg2 = in(2); - - const Type* type1 = phase->type(arg1); - const Type* type2 = phase->type(arg2); - - if (type1 != Type::TOP && type1->singleton() && - type2 != Type::TOP && type2->singleton()) { - jlong val1 = arg1->get_long(); - jlong val2 = arg2->get_long(); - jlong result = val1 + val2; - // Hacker's Delight 2-12 Overflow if both arguments have the opposite sign of the result - if ( (((val1 ^ result) & (val2 ^ result)) >= 0)) { - Node* con_result = ConLNode::make(phase->C, result); - return no_overflow(phase, con_result); + static bool can_overflow(const Type* type1, const Type* type2) { + if (type1 == TypeClass::ZERO || type2 == TypeClass::ZERO) { + return false; } - return NULL; + return true; } +}; - if (type1 == TypeLong::ZERO || type2 == TypeLong::ZERO) { // (Add 0 x) == x - Node* add_result = new (phase->C) AddLNode(arg1, arg2); - return no_overflow(phase, add_result); - } +template +class SubHelper { +public: + typedef typename OverflowOp::TypeClass TypeClass; + typedef typename TypeClass::NativeType NativeType; - if (type2->singleton()) { - return NULL; // no change - keep constant on the right - } - - if (type1->singleton()) { - // Make it x + Constant - move constant to the right - swap_edges(1, 2); - return this; - } - - if (arg2->is_Load()) { - return NULL; // no change - keep load on the right - } - - if (arg1->is_Load()) { - // Make it x + Load - move load to the right - swap_edges(1, 2); - return this; - } - - if (arg1->_idx > arg2->_idx) { - // Sort the edges - swap_edges(1, 2); - return this; - } - - return NULL; -} - -Node* SubExactINode::Ideal(PhaseGVN* phase, bool can_reshape) { - Node* arg1 = in(1); - Node* arg2 = in(2); - - const Type* type1 = phase->type(arg1); - const Type* type2 = phase->type(arg2); - - if (type1 != Type::TOP && type1->singleton() && - type2 != Type::TOP && type2->singleton()) { - jint val1 = arg1->get_int(); - jint val2 = arg2->get_int(); - jint result = val1 - val2; - - // Hacker's Delight 2-12 Overflow iff the arguments have different signs and + static bool will_overflow(NativeType value1, NativeType value2) { + NativeType result = value1 - value2; + // hacker's delight 2-12 overflow iff the arguments have different signs and // the sign of the result is different than the sign of arg1 - if (((val1 ^ val2) & (val1 ^ result)) >= 0) { - Node* con_result = ConINode::make(phase->C, result); - return no_overflow(phase, con_result); + if (((value1 ^ value2) & (value1 ^ result)) >= 0) { + return false; } - return NULL; + return true; } - if (type1 == TypeInt::ZERO || type2 == TypeInt::ZERO) { - // Sub with zero is the same as add with zero - Node* add_result = new (phase->C) AddINode(arg1, arg2); - return no_overflow(phase, add_result); + static bool can_overflow(const Type* type1, const Type* type2) { + if (type2 == TypeClass::ZERO) { + return false; + } + return true; } +}; - return NULL; +template +class MulHelper { +public: + typedef typename OverflowOp::TypeClass TypeClass; + + static bool can_overflow(const Type* type1, const Type* type2) { + if (type1 == TypeClass::ZERO || type2 == TypeClass::ZERO) { + return false; + } else if (type1 == TypeClass::ONE || type2 == TypeClass::ONE) { + return false; + } + return true; + } +}; + +bool OverflowAddINode::will_overflow(jint v1, jint v2) const { + return AddHelper::will_overflow(v1, v2); } -Node* SubExactLNode::Ideal(PhaseGVN* phase, bool can_reshape) { - Node* arg1 = in(1); - Node* arg2 = in(2); - - const Type* type1 = phase->type(arg1); - const Type* type2 = phase->type(arg2); - - if (type1 != Type::TOP && type1->singleton() && - type2 != Type::TOP && type2->singleton()) { - jlong val1 = arg1->get_long(); - jlong val2 = arg2->get_long(); - jlong result = val1 - val2; - - // Hacker's Delight 2-12 Overflow iff the arguments have different signs and - // the sign of the result is different than the sign of arg1 - if (((val1 ^ val2) & (val1 ^ result)) >= 0) { - Node* con_result = ConLNode::make(phase->C, result); - return no_overflow(phase, con_result); - } - return NULL; - } - - if (type1 == TypeLong::ZERO || type2 == TypeLong::ZERO) { - // Sub with zero is the same as add with zero - Node* add_result = new (phase->C) AddLNode(arg1, arg2); - return no_overflow(phase, add_result); - } - - return NULL; +bool OverflowSubINode::will_overflow(jint v1, jint v2) const { + return SubHelper::will_overflow(v1, v2); } -Node* NegExactINode::Ideal(PhaseGVN* phase, bool can_reshape) { - Node *arg = in(1); - - const Type* type = phase->type(arg); - if (type != Type::TOP && type->singleton()) { - jint value = arg->get_int(); - if (value != min_jint) { - Node* neg_result = ConINode::make(phase->C, -value); - return no_overflow(phase, neg_result); - } - } - return NULL; -} - -Node* NegExactLNode::Ideal(PhaseGVN* phase, bool can_reshape) { - Node *arg = in(1); - - const Type* type = phase->type(arg); - if (type != Type::TOP && type->singleton()) { - jlong value = arg->get_long(); - if (value != min_jlong) { - Node* neg_result = ConLNode::make(phase->C, -value); - return no_overflow(phase, neg_result); - } - } - return NULL; -} - -Node* MulExactINode::Ideal(PhaseGVN* phase, bool can_reshape) { - Node* arg1 = in(1); - Node* arg2 = in(2); - - const Type* type1 = phase->type(arg1); - const Type* type2 = phase->type(arg2); - - if (type1 != Type::TOP && type1->singleton() && - type2 != Type::TOP && type2->singleton()) { - jint val1 = arg1->get_int(); - jint val2 = arg2->get_int(); - jlong result = (jlong) val1 * (jlong) val2; +bool OverflowMulINode::will_overflow(jint v1, jint v2) const { + jlong result = (jlong) v1 * (jlong) v2; if ((jint) result == result) { - // no overflow - Node* mul_result = ConINode::make(phase->C, result); - return no_overflow(phase, mul_result); + return false; } - } - - if (type1 == TypeInt::ZERO || type2 == TypeInt::ZERO) { - return no_overflow(phase, ConINode::make(phase->C, 0)); - } - - if (type1 == TypeInt::ONE) { - Node* mul_result = new (phase->C) AddINode(arg2, phase->intcon(0)); - return no_overflow(phase, mul_result); - } - if (type2 == TypeInt::ONE) { - Node* mul_result = new (phase->C) AddINode(arg1, phase->intcon(0)); - return no_overflow(phase, mul_result); - } - - if (type1 == TypeInt::MINUS_1) { - return new (phase->C) NegExactINode(NULL, arg2); - } - - if (type2 == TypeInt::MINUS_1) { - return new (phase->C) NegExactINode(NULL, arg1); - } - - return NULL; + return true; } -Node* MulExactLNode::Ideal(PhaseGVN* phase, bool can_reshape) { - Node* arg1 = in(1); - Node* arg2 = in(2); +bool OverflowAddLNode::will_overflow(jlong v1, jlong v2) const { + return AddHelper::will_overflow(v1, v2); +} - const Type* type1 = phase->type(arg1); - const Type* type2 = phase->type(arg2); - - if (type1 != Type::TOP && type1->singleton() && - type2 != Type::TOP && type2->singleton()) { - jlong val1 = arg1->get_long(); - jlong val2 = arg2->get_long(); +bool OverflowSubLNode::will_overflow(jlong v1, jlong v2) const { + return SubHelper::will_overflow(v1, v2); +} +bool OverflowMulLNode::will_overflow(jlong val1, jlong val2) const { jlong result = val1 * val2; jlong ax = (val1 < 0 ? -val1 : val1); jlong ay = (val2 < 0 ? -val2 : val2); @@ -398,33 +133,125 @@ Node* MulExactLNode::Ideal(PhaseGVN* phase, bool can_reshape) { } } - if (!overflow) { - Node* mul_result = ConLNode::make(phase->C, result); - return no_overflow(phase, mul_result); - } - } - - if (type1 == TypeLong::ZERO || type2 == TypeLong::ZERO) { - return no_overflow(phase, ConLNode::make(phase->C, 0)); - } - - if (type1 == TypeLong::ONE) { - Node* mul_result = new (phase->C) AddLNode(arg2, phase->longcon(0)); - return no_overflow(phase, mul_result); - } - if (type2 == TypeLong::ONE) { - Node* mul_result = new (phase->C) AddLNode(arg1, phase->longcon(0)); - return no_overflow(phase, mul_result); - } - - if (type1 == TypeLong::MINUS_1) { - return new (phase->C) NegExactLNode(NULL, arg2); - } - - if (type2 == TypeLong::MINUS_1) { - return new (phase->C) NegExactLNode(NULL, arg1); - } - - return NULL; + return overflow; +} + +bool OverflowAddINode::can_overflow(const Type* t1, const Type* t2) const { + return AddHelper::can_overflow(t1, t2); +} + +bool OverflowSubINode::can_overflow(const Type* t1, const Type* t2) const { + if (in(1) == in(2)) { + return false; + } + return SubHelper::can_overflow(t1, t2); +} + +bool OverflowMulINode::can_overflow(const Type* t1, const Type* t2) const { + return MulHelper::can_overflow(t1, t2); +} + +bool OverflowAddLNode::can_overflow(const Type* t1, const Type* t2) const { + return AddHelper::can_overflow(t1, t2); +} + +bool OverflowSubLNode::can_overflow(const Type* t1, const Type* t2) const { + if (in(1) == in(2)) { + return false; + } + return SubHelper::can_overflow(t1, t2); +} + +bool OverflowMulLNode::can_overflow(const Type* t1, const Type* t2) const { + return MulHelper::can_overflow(t1, t2); +} + +const Type* OverflowNode::sub(const Type* t1, const Type* t2) const { + fatal(err_msg_res("sub() should not be called for '%s'", NodeClassNames[this->Opcode()])); + return TypeInt::CC; +} + +template +struct IdealHelper { + typedef typename OverflowOp::TypeClass TypeClass; // TypeInt, TypeLong + typedef typename TypeClass::NativeType NativeType; + + static Node* Ideal(const OverflowOp* node, PhaseGVN* phase, bool can_reshape) { + Node* arg1 = node->in(1); + Node* arg2 = node->in(2); + const Type* type1 = phase->type(arg1); + const Type* type2 = phase->type(arg2); + + if (type1 == NULL || type2 == NULL) { + return NULL; + } + + if (type1 != Type::TOP && type1->singleton() && + type2 != Type::TOP && type2->singleton()) { + NativeType val1 = TypeClass::as_self(type1)->get_con(); + NativeType val2 = TypeClass::as_self(type2)->get_con(); + if (node->will_overflow(val1, val2) == false) { + Node* con_result = ConINode::make(phase->C, 0); + return con_result; + } + return NULL; + } + return NULL; + } + + static const Type* Value(const OverflowOp* node, PhaseTransform* phase) { + const Type *t1 = phase->type( node->in(1) ); + const Type *t2 = phase->type( node->in(2) ); + if( t1 == Type::TOP ) return Type::TOP; + if( t2 == Type::TOP ) return Type::TOP; + + const TypeClass* i1 = TypeClass::as_self(t1); + const TypeClass* i2 = TypeClass::as_self(t2); + + if (i1 == NULL || i2 == NULL) { + return TypeInt::CC; + } + + if (t1->singleton() && t2->singleton()) { + NativeType val1 = i1->get_con(); + NativeType val2 = i2->get_con(); + if (node->will_overflow(val1, val2)) { + return TypeInt::CC; + } + return TypeInt::ZERO; + } else if (i1 != TypeClass::TYPE_DOMAIN && i2 != TypeClass::TYPE_DOMAIN) { + if (node->will_overflow(i1->_lo, i2->_lo)) { + return TypeInt::CC; + } else if (node->will_overflow(i1->_lo, i2->_hi)) { + return TypeInt::CC; + } else if (node->will_overflow(i1->_hi, i2->_lo)) { + return TypeInt::CC; + } else if (node->will_overflow(i1->_hi, i2->_hi)) { + return TypeInt::CC; + } + return TypeInt::ZERO; + } + + if (!node->can_overflow(t1, t2)) { + return TypeInt::ZERO; + } + return TypeInt::CC; + } +}; + +Node* OverflowINode::Ideal(PhaseGVN* phase, bool can_reshape) { + return IdealHelper::Ideal(this, phase, can_reshape); +} + +Node* OverflowLNode::Ideal(PhaseGVN* phase, bool can_reshape) { + return IdealHelper::Ideal(this, phase, can_reshape); +} + +const Type* OverflowINode::Value(PhaseTransform* phase) const { + return IdealHelper::Value(this, phase); +} + +const Type* OverflowLNode::Value(PhaseTransform* phase) const { + return IdealHelper::Value(this, phase); } diff --git a/hotspot/src/share/vm/opto/mathexactnode.hpp b/hotspot/src/share/vm/opto/mathexactnode.hpp index a30304ba93a..3e037cf568b 100644 --- a/hotspot/src/share/vm/opto/mathexactnode.hpp +++ b/hotspot/src/share/vm/opto/mathexactnode.hpp @@ -27,128 +27,111 @@ #include "opto/multnode.hpp" #include "opto/node.hpp" +#include "opto/addnode.hpp" #include "opto/subnode.hpp" #include "opto/type.hpp" -class BoolNode; -class IfNode; -class Node; - class PhaseGVN; class PhaseTransform; -class MathExactNode : public MultiNode { +class OverflowNode : public CmpNode { public: - MathExactNode(Node* ctrl, Node* in1); - MathExactNode(Node* ctrl, Node* in1, Node* in2); - enum { - result_proj_node = 0, - flags_proj_node = 1 - }; - virtual int Opcode() const; - virtual Node* Identity(PhaseTransform* phase) { return this; } - virtual Node* Ideal(PhaseGVN* phase, bool can_reshape) { return NULL; } - virtual const Type* Value(PhaseTransform* phase) const { return bottom_type(); } - virtual uint hash() const { return NO_HASH; } - virtual bool is_CFG() const { return false; } - virtual uint ideal_reg() const { return NotAMachineReg; } + OverflowNode(Node* in1, Node* in2) : CmpNode(in1, in2) {} - ProjNode* result_node() const { return proj_out(result_proj_node); } - ProjNode* flags_node() const { return proj_out(flags_proj_node); } - Node* control_node() const; - Node* non_throwing_branch() const; -protected: - IfNode* if_node() const; - BoolNode* bool_node() const; - Node* no_overflow(PhaseGVN *phase, Node* new_result); -}; - -class MathExactINode : public MathExactNode { - public: - MathExactINode(Node* ctrl, Node* in1) : MathExactNode(ctrl, in1) {} - MathExactINode(Node* ctrl, Node* in1, Node* in2) : MathExactNode(ctrl, in1, in2) {} - virtual int Opcode() const; - virtual Node* match(const ProjNode* proj, const Matcher* m); - virtual const Type* bottom_type() const { return TypeTuple::INT_CC_PAIR; } -}; - -class MathExactLNode : public MathExactNode { -public: - MathExactLNode(Node* ctrl, Node* in1) : MathExactNode(ctrl, in1) {} - MathExactLNode(Node* ctrl, Node* in1, Node* in2) : MathExactNode(ctrl, in1, in2) {} - virtual int Opcode() const; - virtual Node* match(const ProjNode* proj, const Matcher* m); - virtual const Type* bottom_type() const { return TypeTuple::LONG_CC_PAIR; } -}; - -class AddExactINode : public MathExactINode { -public: - AddExactINode(Node* ctrl, Node* in1, Node* in2) : MathExactINode(ctrl, in1, in2) {} - virtual int Opcode() const; - virtual Node *Ideal(PhaseGVN *phase, bool can_reshape); -}; - -class AddExactLNode : public MathExactLNode { -public: - AddExactLNode(Node* ctrl, Node* in1, Node* in2) : MathExactLNode(ctrl, in1, in2) {} - virtual int Opcode() const; - virtual Node* Ideal(PhaseGVN* phase, bool can_reshape); -}; - -class SubExactINode : public MathExactINode { -public: - SubExactINode(Node* ctrl, Node* in1, Node* in2) : MathExactINode(ctrl, in1, in2) {} - virtual int Opcode() const; - virtual Node* Ideal(PhaseGVN* phase, bool can_reshape); -}; - -class SubExactLNode : public MathExactLNode { -public: - SubExactLNode(Node* ctrl, Node* in1, Node* in2) : MathExactLNode(ctrl, in1, in2) {} - virtual int Opcode() const; - virtual Node* Ideal(PhaseGVN* phase, bool can_reshape); -}; - -class NegExactINode : public MathExactINode { -public: - NegExactINode(Node* ctrl, Node* in1) : MathExactINode(ctrl, in1) {} - virtual int Opcode() const; - virtual Node* Ideal(PhaseGVN* phase, bool can_reshape); -}; - -class NegExactLNode : public MathExactLNode { -public: - NegExactLNode(Node* ctrl, Node* in1) : MathExactLNode(ctrl, in1) {} - virtual int Opcode() const; - virtual Node* Ideal(PhaseGVN* phase, bool can_reshape); -}; - -class MulExactINode : public MathExactINode { -public: - MulExactINode(Node* ctrl, Node* in1, Node* in2) : MathExactINode(ctrl, in1, in2) {} - virtual int Opcode() const; - virtual Node* Ideal(PhaseGVN* phase, bool can_reshape); -}; - -class MulExactLNode : public MathExactLNode { -public: - MulExactLNode(Node* ctrl, Node* in1, Node* in2) : MathExactLNode(ctrl, in1, in2) {} - virtual int Opcode() const; - virtual Node* Ideal(PhaseGVN* phase, bool can_reshape); -}; - -class FlagsProjNode : public ProjNode { -public: - FlagsProjNode(Node* src, uint con) : ProjNode(src, con) { - init_class_id(Class_FlagsProj); - } - - virtual int Opcode() const; - virtual bool is_CFG() const { return false; } - virtual const Type* bottom_type() const { return TypeInt::CC; } virtual uint ideal_reg() const { return Op_RegFlags; } + virtual const Type* sub(const Type* t1, const Type* t2) const; }; +class OverflowINode : public OverflowNode { +public: + typedef TypeInt TypeClass; + + OverflowINode(Node* in1, Node* in2) : OverflowNode(in1, in2) {} + virtual Node* Ideal(PhaseGVN* phase, bool can_reshape); + virtual const Type* Value(PhaseTransform* phase) const; + + virtual bool will_overflow(jint v1, jint v2) const = 0; + virtual bool can_overflow(const Type* t1, const Type* t2) const = 0; +}; + + +class OverflowLNode : public OverflowNode { +public: + typedef TypeLong TypeClass; + + OverflowLNode(Node* in1, Node* in2) : OverflowNode(in1, in2) {} + virtual Node* Ideal(PhaseGVN* phase, bool can_reshape); + virtual const Type* Value(PhaseTransform* phase) const; + + virtual bool will_overflow(jlong v1, jlong v2) const = 0; + virtual bool can_overflow(const Type* t1, const Type* t2) const = 0; +}; + +class OverflowAddINode : public OverflowINode { +public: + typedef AddINode MathOp; + + OverflowAddINode(Node* in1, Node* in2) : OverflowINode(in1, in2) {} + virtual int Opcode() const; + + virtual bool will_overflow(jint v1, jint v2) const; + virtual bool can_overflow(const Type* t1, const Type* t2) const; +}; + +class OverflowSubINode : public OverflowINode { +public: + typedef SubINode MathOp; + + OverflowSubINode(Node* in1, Node* in2) : OverflowINode(in1, in2) {} + virtual int Opcode() const; + + virtual bool will_overflow(jint v1, jint v2) const; + virtual bool can_overflow(const Type* t1, const Type* t2) const; +}; + +class OverflowMulINode : public OverflowINode { +public: + typedef MulINode MathOp; + + OverflowMulINode(Node* in1, Node* in2) : OverflowINode(in1, in2) {} + virtual int Opcode() const; + + virtual bool will_overflow(jint v1, jint v2) const; + virtual bool can_overflow(const Type* t1, const Type* t2) const; +}; + +class OverflowAddLNode : public OverflowLNode { +public: + typedef AddLNode MathOp; + + OverflowAddLNode(Node* in1, Node* in2) : OverflowLNode(in1, in2) {} + virtual int Opcode() const; + + virtual bool will_overflow(jlong v1, jlong v2) const; + virtual bool can_overflow(const Type* t1, const Type* t2) const; +}; + +class OverflowSubLNode : public OverflowLNode { +public: + typedef SubLNode MathOp; + + OverflowSubLNode(Node* in1, Node* in2) : OverflowLNode(in1, in2) {} + virtual int Opcode() const; + + virtual bool will_overflow(jlong v1, jlong v2) const; + virtual bool can_overflow(const Type* t1, const Type* t2) const; +}; + +class OverflowMulLNode : public OverflowLNode { +public: + typedef MulLNode MathOp; + + OverflowMulLNode(Node* in1, Node* in2) : OverflowLNode(in1, in2) {} + virtual int Opcode() const; + + virtual bool will_overflow(jlong v1, jlong v2) const; + virtual bool can_overflow(const Type* t1, const Type* t2) const; +}; #endif diff --git a/hotspot/src/share/vm/opto/multnode.cpp b/hotspot/src/share/vm/opto/multnode.cpp index d9e04a2741d..300f6246369 100644 --- a/hotspot/src/share/vm/opto/multnode.cpp +++ b/hotspot/src/share/vm/opto/multnode.cpp @@ -54,11 +54,6 @@ ProjNode* MultiNode::proj_out(uint which_proj) const { assert(Opcode() != Op_If || proj->Opcode() == (which_proj?Op_IfTrue:Op_IfFalse), "bad if #2"); return proj; } - } else if (p->is_FlagsProj()) { - FlagsProjNode *proj = p->as_FlagsProj(); - if (proj->_con == which_proj) { - return proj; - } } else { assert(p == this && this->is_Start(), "else must be proj"); continue; diff --git a/hotspot/src/share/vm/opto/node.cpp b/hotspot/src/share/vm/opto/node.cpp index 2ba71f6bccd..e201fde52a6 100644 --- a/hotspot/src/share/vm/opto/node.cpp +++ b/hotspot/src/share/vm/opto/node.cpp @@ -285,6 +285,10 @@ void DUIterator_Last::verify_step(uint num_edges) { #ifdef _MSC_VER // the IDX_INIT hack falls foul of warning C4355 #pragma warning( disable:4355 ) // 'this' : used in base member initializer list #endif +#ifdef __clang__ +#pragma clang diagnostic push +#pragma GCC diagnostic ignored "-Wuninitialized" +#endif // Out-of-line code from node constructors. // Executed only when extra debug info. is being passed around. @@ -468,6 +472,10 @@ Node::Node(Node *n0, Node *n1, Node *n2, Node *n3, _in[6] = n6; if (n6 != NULL) n6->add_out((Node *)this); } +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + //------------------------------clone------------------------------------------ // Clone a Node. diff --git a/hotspot/src/share/vm/opto/node.hpp b/hotspot/src/share/vm/opto/node.hpp index b04a0fad78e..5f883d5f1cf 100644 --- a/hotspot/src/share/vm/opto/node.hpp +++ b/hotspot/src/share/vm/opto/node.hpp @@ -69,7 +69,6 @@ class EncodePNode; class EncodePKlassNode; class FastLockNode; class FastUnlockNode; -class FlagsProjNode; class IfNode; class IfFalseNode; class IfTrueNode; @@ -100,7 +99,6 @@ class MachSafePointNode; class MachSpillCopyNode; class MachTempNode; class Matcher; -class MathExactNode; class MemBarNode; class MemBarStoreStoreNode; class MemNode; @@ -575,7 +573,6 @@ public: DEFINE_CLASS_ID(MemBar, Multi, 3) DEFINE_CLASS_ID(Initialize, MemBar, 0) DEFINE_CLASS_ID(MemBarStoreStore, MemBar, 1) - DEFINE_CLASS_ID(MathExact, Multi, 4) DEFINE_CLASS_ID(Mach, Node, 1) DEFINE_CLASS_ID(MachReturn, Mach, 0) @@ -632,7 +629,6 @@ public: DEFINE_CLASS_ID(Cmp, Sub, 0) DEFINE_CLASS_ID(FastLock, Cmp, 0) DEFINE_CLASS_ID(FastUnlock, Cmp, 1) - DEFINE_CLASS_ID(FlagsProj, Cmp, 2) DEFINE_CLASS_ID(MergeMem, Node, 7) DEFINE_CLASS_ID(Bool, Node, 8) @@ -736,7 +732,6 @@ public: DEFINE_CLASS_QUERY(EncodePKlass) DEFINE_CLASS_QUERY(FastLock) DEFINE_CLASS_QUERY(FastUnlock) - DEFINE_CLASS_QUERY(FlagsProj) DEFINE_CLASS_QUERY(If) DEFINE_CLASS_QUERY(IfFalse) DEFINE_CLASS_QUERY(IfTrue) @@ -765,7 +760,6 @@ public: DEFINE_CLASS_QUERY(MachSafePoint) DEFINE_CLASS_QUERY(MachSpillCopy) DEFINE_CLASS_QUERY(MachTemp) - DEFINE_CLASS_QUERY(MathExact) DEFINE_CLASS_QUERY(Mem) DEFINE_CLASS_QUERY(MemBar) DEFINE_CLASS_QUERY(MemBarStoreStore) diff --git a/hotspot/src/share/vm/opto/reg_split.cpp b/hotspot/src/share/vm/opto/reg_split.cpp index cfcecadd338..7ec346bc6a9 100644 --- a/hotspot/src/share/vm/opto/reg_split.cpp +++ b/hotspot/src/share/vm/opto/reg_split.cpp @@ -55,7 +55,7 @@ static const char out_of_nodes[] = "out of nodes during split"; // Get a SpillCopy node with wide-enough masks. Use the 'wide-mask', the // wide ideal-register spill-mask if possible. If the 'wide-mask' does // not cover the input (or output), use the input (or output) mask instead. -Node *PhaseChaitin::get_spillcopy_wide( Node *def, Node *use, uint uidx ) { +Node *PhaseChaitin::get_spillcopy_wide(MachSpillCopyNode::SpillType spill_type, Node *def, Node *use, uint uidx ) { // If ideal reg doesn't exist we've got a bad schedule happening // that is forcing us to spill something that isn't spillable. // Bail rather than abort @@ -93,7 +93,7 @@ Node *PhaseChaitin::get_spillcopy_wide( Node *def, Node *use, uint uidx ) { // Here we assume a trip through memory is required. w_i_mask = &C->FIRST_STACK_mask(); } - return new (C) MachSpillCopyNode( def, *w_i_mask, *w_o_mask ); + return new (C) MachSpillCopyNode(spill_type, def, *w_i_mask, *w_o_mask ); } //------------------------------insert_proj------------------------------------ @@ -159,7 +159,7 @@ uint PhaseChaitin::split_DEF( Node *def, Block *b, int loc, uint maxlrg, Node ** assert( loc >= 0, "must insert past block head" ); // Get a def-side SpillCopy - Node *spill = get_spillcopy_wide(def,NULL,0); + Node *spill = get_spillcopy_wide(MachSpillCopyNode::Definition, def, NULL, 0); // Did we fail to split?, then bail if (!spill) { return 0; @@ -180,7 +180,7 @@ uint PhaseChaitin::split_DEF( Node *def, Block *b, int loc, uint maxlrg, Node ** //------------------------------split_USE-------------------------------------- // Splits at uses can involve redeffing the LRG, so no CISC Spilling there. // Debug uses want to know if def is already stack enabled. -uint PhaseChaitin::split_USE( Node *def, Block *b, Node *use, uint useidx, uint maxlrg, bool def_down, bool cisc_sp, GrowableArray splits, int slidx ) { +uint PhaseChaitin::split_USE(MachSpillCopyNode::SpillType spill_type, Node *def, Block *b, Node *use, uint useidx, uint maxlrg, bool def_down, bool cisc_sp, GrowableArray splits, int slidx ) { #ifdef ASSERT // Increment the counter for this lrg splits.at_put(slidx, splits.at(slidx)+1); @@ -216,7 +216,7 @@ uint PhaseChaitin::split_USE( Node *def, Block *b, Node *use, uint useidx, uint // DEF is UP, so must copy it DOWN and hook in USE // Insert SpillCopy before the USE, which uses DEF as its input, // and defs a new live range, which is used by this node. - Node *spill = get_spillcopy_wide(def,use,useidx); + Node *spill = get_spillcopy_wide(spill_type, def,use,useidx); // did we fail to split? if (!spill) { // Bail @@ -268,7 +268,7 @@ uint PhaseChaitin::split_USE( Node *def, Block *b, Node *use, uint useidx, uint bindex = b->find_node(use); } - Node *spill = get_spillcopy_wide( def, use, useidx ); + Node *spill = get_spillcopy_wide(spill_type, def, use, useidx ); if( !spill ) return 0; // Bailed out // Insert SpillCopy before the USE, which uses the reaching DEF as // its input, and defs a new live range, which is used by this node. @@ -327,7 +327,7 @@ Node *PhaseChaitin::split_Rematerialize( Node *def, Block *b, uint insidx, uint Block *b_def = _cfg.get_block_for_node(def); int idx_def = b_def->find_node(def); - Node *in_spill = get_spillcopy_wide( in, def, i ); + Node *in_spill = get_spillcopy_wide(MachSpillCopyNode::InputToRematerialization, in, def, i ); if( !in_spill ) return 0; // Bailed out insert_proj(b_def,idx_def,in_spill,maxlrg++); if( b_def == b ) @@ -935,7 +935,7 @@ uint PhaseChaitin::Split(uint maxlrg, ResourceArea* split_arena) { // This def has been rematerialized a couple of times without // progress. It doesn't care if it lives UP or DOWN, so // spill it down now. - maxlrg = split_USE(def,b,n,inpidx,maxlrg,false,false,splits,slidx); + maxlrg = split_USE(MachSpillCopyNode::BasePointerToMem, def,b,n,inpidx,maxlrg,false,false,splits,slidx); // If it wasn't split bail if (!maxlrg) { return 0; @@ -1015,7 +1015,7 @@ uint PhaseChaitin::Split(uint maxlrg, ResourceArea* split_arena) { !is_vect && umask.is_misaligned_pair())) { // These need a Split regardless of overlap or pressure // SPLIT - NO DEF - NO CISC SPILL - maxlrg = split_USE(def,b,n,inpidx,maxlrg,dup,false, splits,slidx); + maxlrg = split_USE(MachSpillCopyNode::Bound, def,b,n,inpidx,maxlrg,dup,false, splits,slidx); // If it wasn't split bail if (!maxlrg) { return 0; @@ -1027,7 +1027,7 @@ uint PhaseChaitin::Split(uint maxlrg, ResourceArea* split_arena) { if (UseFPUForSpilling && n->is_MachCall() && !uup && !dup ) { // The use at the call can force the def down so insert // a split before the use to allow the def more freedom. - maxlrg = split_USE(def,b,n,inpidx,maxlrg,dup,false, splits,slidx); + maxlrg = split_USE(MachSpillCopyNode::CallUse, def,b,n,inpidx,maxlrg,dup,false, splits,slidx); // If it wasn't split bail if (!maxlrg) { return 0; @@ -1063,7 +1063,7 @@ uint PhaseChaitin::Split(uint maxlrg, ResourceArea* split_arena) { else { // Both are either up or down, and there is no overlap if( dup ) { // If UP, reg->reg copy // COPY ACROSS HERE - NO DEF - NO CISC SPILL - maxlrg = split_USE(def,b,n,inpidx,maxlrg,false,false, splits,slidx); + maxlrg = split_USE(MachSpillCopyNode::RegToReg, def,b,n,inpidx,maxlrg,false,false, splits,slidx); // If it wasn't split bail if (!maxlrg) { return 0; @@ -1075,10 +1075,10 @@ uint PhaseChaitin::Split(uint maxlrg, ResourceArea* split_arena) { // First Split-UP to move value into Register uint def_ideal = def->ideal_reg(); const RegMask* tmp_rm = Matcher::idealreg2regmask[def_ideal]; - Node *spill = new (C) MachSpillCopyNode(def, dmask, *tmp_rm); + Node *spill = new (C) MachSpillCopyNode(MachSpillCopyNode::MemToReg, def, dmask, *tmp_rm); insert_proj( b, insidx, spill, maxlrg ); // Then Split-DOWN as if previous Split was DEF - maxlrg = split_USE(spill,b,n,inpidx,maxlrg,false,false, splits,slidx); + maxlrg = split_USE(MachSpillCopyNode::RegToMem, spill,b,n,inpidx,maxlrg,false,false, splits,slidx); // If it wasn't split bail if (!maxlrg) { return 0; @@ -1103,7 +1103,7 @@ uint PhaseChaitin::Split(uint maxlrg, ResourceArea* split_arena) { } } // COPY DOWN HERE - NO DEF - NO CISC SPILL - maxlrg = split_USE(def,b,n,inpidx,maxlrg,false,false, splits,slidx); + maxlrg = split_USE(MachSpillCopyNode::RegToMem, def,b,n,inpidx,maxlrg,false,false, splits,slidx); // If it wasn't split bail if (!maxlrg) { return 0; @@ -1118,7 +1118,7 @@ uint PhaseChaitin::Split(uint maxlrg, ResourceArea* split_arena) { else { // DOWN, Split-UP and check register pressure if( is_high_pressure( b, &lrgs(useidx), insidx ) ) { // COPY UP HERE - NO DEF - CISC SPILL - maxlrg = split_USE(def,b,n,inpidx,maxlrg,true,true, splits,slidx); + maxlrg = split_USE(MachSpillCopyNode::MemToReg, def,b,n,inpidx,maxlrg,true,true, splits,slidx); // If it wasn't split bail if (!maxlrg) { return 0; @@ -1126,7 +1126,7 @@ uint PhaseChaitin::Split(uint maxlrg, ResourceArea* split_arena) { insidx++; // Reset iterator to skip USE side split } else { // LRP // COPY UP HERE - WITH DEF - NO CISC SPILL - maxlrg = split_USE(def,b,n,inpidx,maxlrg,true,false, splits,slidx); + maxlrg = split_USE(MachSpillCopyNode::MemToReg, def,b,n,inpidx,maxlrg,true,false, splits,slidx); // If it wasn't split bail if (!maxlrg) { return 0; @@ -1229,7 +1229,7 @@ uint PhaseChaitin::Split(uint maxlrg, ResourceArea* split_arena) { if (C->check_node_count(NodeLimitFudgeFactor, out_of_nodes)) { // Check when generating nodes return 0; } - Node *spill = new (C) MachSpillCopyNode(use,use_rm,def_rm); + Node *spill = new (C) MachSpillCopyNode(MachSpillCopyNode::MemToReg, use,use_rm,def_rm); n->set_req(copyidx,spill); n->as_MachSpillCopy()->set_in_RegMask(def_rm); // Put the spill just before the copy @@ -1336,7 +1336,7 @@ uint PhaseChaitin::Split(uint maxlrg, ResourceArea* split_arena) { // Grab the UP/DOWN sense for the input u1 = UP[pidx][slidx]; if( u1 != (phi_up != 0)) { - maxlrg = split_USE(def, b, phi, i, maxlrg, !u1, false, splits,slidx); + maxlrg = split_USE(MachSpillCopyNode::PhiLocationDifferToInputLocation, def, b, phi, i, maxlrg, !u1, false, splits,slidx); // If it wasn't split bail if (!maxlrg) { return 0; diff --git a/hotspot/src/share/vm/opto/subnode.cpp b/hotspot/src/share/vm/opto/subnode.cpp index fcbead264af..71ffed86691 100644 --- a/hotspot/src/share/vm/opto/subnode.cpp +++ b/hotspot/src/share/vm/opto/subnode.cpp @@ -1126,11 +1126,15 @@ Node *BoolNode::Ideal(PhaseGVN *phase, bool can_reshape) { Node *cmp = in(1); if( !cmp->is_Sub() ) return NULL; int cop = cmp->Opcode(); - if( cop == Op_FastLock || cop == Op_FastUnlock || cop == Op_FlagsProj) return NULL; + if( cop == Op_FastLock || cop == Op_FastUnlock) return NULL; Node *cmp1 = cmp->in(1); Node *cmp2 = cmp->in(2); if( !cmp1 ) return NULL; + if (_test._test == BoolTest::overflow || _test._test == BoolTest::no_overflow) { + return NULL; + } + // Constant on left? Node *con = cmp1; uint op2 = cmp2->Opcode(); diff --git a/hotspot/src/share/vm/opto/superword.cpp b/hotspot/src/share/vm/opto/superword.cpp index 96c81bd999c..9363caa1da4 100644 --- a/hotspot/src/share/vm/opto/superword.cpp +++ b/hotspot/src/share/vm/opto/superword.cpp @@ -441,6 +441,7 @@ bool SuperWord::ref_is_alignable(SWPointer& p) { return true; // no induction variable } CountedLoopEndNode* pre_end = get_pre_loop_end(lp()->as_CountedLoop()); + assert(pre_end != NULL, "we must have a correct pre-loop"); assert(pre_end->stride_is_con(), "pre loop stride is constant"); int preloop_stride = pre_end->stride_con(); @@ -1981,7 +1982,7 @@ void SuperWord::align_initial_loop_index(MemNode* align_to_ref) { CountedLoopNode *main_head = lp()->as_CountedLoop(); assert(main_head->is_main_loop(), ""); CountedLoopEndNode* pre_end = get_pre_loop_end(main_head); - assert(pre_end != NULL, ""); + assert(pre_end != NULL, "we must have a correct pre-loop"); Node *pre_opaq1 = pre_end->limit(); assert(pre_opaq1->Opcode() == Op_Opaque1, ""); Opaque1Node *pre_opaq = (Opaque1Node*)pre_opaq1; @@ -2145,7 +2146,8 @@ CountedLoopEndNode* SuperWord::get_pre_loop_end(CountedLoopNode *cl) { if (!p_f->is_IfFalse()) return NULL; if (!p_f->in(0)->is_CountedLoopEnd()) return NULL; CountedLoopEndNode *pre_end = p_f->in(0)->as_CountedLoopEnd(); - if (!pre_end->loopnode()->is_pre_loop()) return NULL; + CountedLoopNode* loop_node = pre_end->loopnode(); + if (loop_node == NULL || !loop_node->is_pre_loop()) return NULL; return pre_end; } diff --git a/hotspot/src/share/vm/opto/type.cpp b/hotspot/src/share/vm/opto/type.cpp index c907fc7124c..b957a227eb6 100644 --- a/hotspot/src/share/vm/opto/type.cpp +++ b/hotspot/src/share/vm/opto/type.cpp @@ -306,6 +306,7 @@ void Type::Initialize_shared(Compile* current) { TypeInt::POS1 = TypeInt::make(1,max_jint, WidenMin); // Positive values TypeInt::INT = TypeInt::make(min_jint,max_jint, WidenMax); // 32-bit integers TypeInt::SYMINT = TypeInt::make(-max_jint,max_jint,WidenMin); // symmetric range + TypeInt::TYPE_DOMAIN = TypeInt::INT; // CmpL is overloaded both as the bytecode computation returning // a trinary (-1,0,+1) integer result AND as an efficient long // compare returning optimizer ideal-type flags. @@ -322,6 +323,7 @@ void Type::Initialize_shared(Compile* current) { TypeLong::LONG = TypeLong::make(min_jlong,max_jlong,WidenMax); // 64-bit integers TypeLong::INT = TypeLong::make((jlong)min_jint,(jlong)max_jint,WidenMin); TypeLong::UINT = TypeLong::make(0,(jlong)max_juint,WidenMin); + TypeLong::TYPE_DOMAIN = TypeLong::LONG; const Type **fboth =(const Type**)shared_type_arena->Amalloc_4(2*sizeof(Type*)); fboth[0] = Type::CONTROL; @@ -1161,6 +1163,7 @@ const TypeInt *TypeInt::POS; // Positive 32-bit integers or zero const TypeInt *TypeInt::POS1; // Positive 32-bit integers const TypeInt *TypeInt::INT; // 32-bit integers const TypeInt *TypeInt::SYMINT; // symmetric range [-max_jint..max_jint] +const TypeInt *TypeInt::TYPE_DOMAIN; // alias for TypeInt::INT //------------------------------TypeInt---------------------------------------- TypeInt::TypeInt( jint lo, jint hi, int w ) : Type(Int), _lo(lo), _hi(hi), _widen(w) { @@ -1418,6 +1421,7 @@ const TypeLong *TypeLong::POS; // >=0 const TypeLong *TypeLong::LONG; // 64-bit integers const TypeLong *TypeLong::INT; // 32-bit subrange const TypeLong *TypeLong::UINT; // 32-bit unsigned subrange +const TypeLong *TypeLong::TYPE_DOMAIN; // alias for TypeLong::LONG //------------------------------TypeLong--------------------------------------- TypeLong::TypeLong( jlong lo, jlong hi, int w ) : Type(Long), _lo(lo), _hi(hi), _widen(w) { diff --git a/hotspot/src/share/vm/opto/type.hpp b/hotspot/src/share/vm/opto/type.hpp index d02792f7bb3..8c30f69795e 100644 --- a/hotspot/src/share/vm/opto/type.hpp +++ b/hotspot/src/share/vm/opto/type.hpp @@ -489,6 +489,7 @@ protected: virtual const Type *filter_helper(const Type *kills, bool include_speculative) const; public: + typedef jint NativeType; virtual bool eq( const Type *t ) const; virtual int hash() const; // Type specific hashing virtual bool singleton(void) const; // TRUE if type is a singleton @@ -531,6 +532,9 @@ public: static const TypeInt *POS1; static const TypeInt *INT; static const TypeInt *SYMINT; // symmetric range [-max_jint..max_jint] + static const TypeInt *TYPE_DOMAIN; // alias for TypeInt::INT + + static const TypeInt *as_self(const Type *t) { return t->is_int(); } #ifndef PRODUCT virtual void dump2( Dict &d, uint depth, outputStream *st ) const; #endif @@ -546,6 +550,7 @@ protected: // Do not kill _widen bits. virtual const Type *filter_helper(const Type *kills, bool include_speculative) const; public: + typedef jlong NativeType; virtual bool eq( const Type *t ) const; virtual int hash() const; // Type specific hashing virtual bool singleton(void) const; // TRUE if type is a singleton @@ -568,6 +573,7 @@ public: virtual bool is_finite() const; // Has a finite value + virtual const Type *xmeet( const Type *t ) const; virtual const Type *xdual() const; // Compute dual right now. virtual const Type *widen( const Type *t, const Type* limit_type ) const; @@ -580,6 +586,11 @@ public: static const TypeLong *LONG; static const TypeLong *INT; // 32-bit subrange [min_jint..max_jint] static const TypeLong *UINT; // 32-bit unsigned [0..max_juint] + static const TypeLong *TYPE_DOMAIN; // alias for TypeLong::LONG + + // static convenience methods. + static const TypeLong *as_self(const Type *t) { return t->is_long(); } + #ifndef PRODUCT virtual void dump2( Dict &d, uint, outputStream *st ) const;// Specialized per-Type dumping #endif diff --git a/hotspot/src/share/vm/prims/jni.cpp b/hotspot/src/share/vm/prims/jni.cpp index 1164448d3da..030393cd275 100644 --- a/hotspot/src/share/vm/prims/jni.cpp +++ b/hotspot/src/share/vm/prims/jni.cpp @@ -114,33 +114,6 @@ static jint CurrentVersion = JNI_VERSION_1_8; // return_value = 5; // return return_value; // JNI_END -#ifndef USDT2 -#define DT_RETURN_MARK_DECL(name, type) \ - HS_DTRACE_PROBE_DECL1(hotspot_jni, name##__return, type); \ - DTRACE_ONLY( \ - class DTraceReturnProbeMark_##name { \ - public: \ - const type& _ret_ref; \ - DTraceReturnProbeMark_##name(const type& v) : _ret_ref(v) {} \ - ~DTraceReturnProbeMark_##name() { \ - HS_DTRACE_PROBE1(hotspot_jni, name##__return, _ret_ref); \ - } \ - } \ - ) -// Void functions are simpler since there's no return value -#define DT_VOID_RETURN_MARK_DECL(name) \ - HS_DTRACE_PROBE_DECL0(hotspot_jni, name##__return); \ - DTRACE_ONLY( \ - class DTraceReturnProbeMark_##name { \ - public: \ - ~DTraceReturnProbeMark_##name() { \ - HS_DTRACE_PROBE0(hotspot_jni, name##__return); \ - } \ - } \ - ) - -#else /* USDT2 */ - #define DT_RETURN_MARK_DECL(name, type, probe) \ DTRACE_ONLY( \ class DTraceReturnProbeMark_##name { \ @@ -162,7 +135,6 @@ static jint CurrentVersion = JNI_VERSION_1_8; } \ } \ ) -#endif /* USDT2 */ // Place these macros in the function to mark the return. Non-void // functions need the type and address of the return value. @@ -191,15 +163,9 @@ static jint CurrentVersion = JNI_VERSION_1_8; // Choose DT_RETURN_MARK macros based on the type: float/double -> void // (dtrace doesn't do FP yet) -#ifndef USDT2 -#define DT_RETURN_MARK_DECL_FOR(TypeName, name, type) \ - FP_SELECT(TypeName, \ - DT_RETURN_MARK_DECL(name, type), DT_VOID_RETURN_MARK_DECL(name) ) -#else /* USDT2 */ #define DT_RETURN_MARK_DECL_FOR(TypeName, name, type, probe) \ FP_SELECT(TypeName, \ DT_RETURN_MARK_DECL(name, type, probe), DT_VOID_RETURN_MARK_DECL(name, probe) ) -#endif /* USDT2 */ #define DT_RETURN_MARK_FOR(TypeName, name, type, ref) \ FP_SELECT(TypeName, \ DT_RETURN_MARK(name, type, ref), DT_VOID_RETURN_MARK(name) ) @@ -358,24 +324,16 @@ const int MAX_REASONABLE_LOCAL_CAPACITY = 4*K; // Implementation of JNI entries -#ifndef USDT2 -DT_RETURN_MARK_DECL(DefineClass, jclass); -#else /* USDT2 */ DT_RETURN_MARK_DECL(DefineClass, jclass , HOTSPOT_JNI_DEFINECLASS_RETURN(_ret_ref)); -#endif /* USDT2 */ JNI_ENTRY(jclass, jni_DefineClass(JNIEnv *env, const char *name, jobject loaderRef, const jbyte *buf, jsize bufLen)) JNIWrapper("DefineClass"); -#ifndef USDT2 - DTRACE_PROBE5(hotspot_jni, DefineClass__entry, - env, name, loaderRef, buf, bufLen); -#else /* USDT2 */ HOTSPOT_JNI_DEFINECLASS_ENTRY( env, (char*) name, loaderRef, (char*) buf, bufLen); -#endif /* USDT2 */ + jclass cls = NULL; DT_RETURN_MARK(DefineClass, jclass, (const jclass&)cls); @@ -421,20 +379,13 @@ JNI_END static bool first_time_FindClass = true; -#ifndef USDT2 -DT_RETURN_MARK_DECL(FindClass, jclass); -#else /* USDT2 */ DT_RETURN_MARK_DECL(FindClass, jclass , HOTSPOT_JNI_FINDCLASS_RETURN(_ret_ref)); -#endif /* USDT2 */ JNI_ENTRY(jclass, jni_FindClass(JNIEnv *env, const char *name)) JNIWrapper("FindClass"); -#ifndef USDT2 - DTRACE_PROBE2(hotspot_jni, FindClass__entry, env, name); -#else /* USDT2 */ + HOTSPOT_JNI_FINDCLASS_ENTRY(env, (char *)name); -#endif /* USDT2 */ jclass result = NULL; DT_RETURN_MARK(FindClass, jclass, (const jclass&)result); @@ -498,20 +449,14 @@ JNI_ENTRY(jclass, jni_FindClass(JNIEnv *env, const char *name)) return result; JNI_END -#ifndef USDT2 -DT_RETURN_MARK_DECL(FromReflectedMethod, jmethodID); -#else /* USDT2 */ DT_RETURN_MARK_DECL(FromReflectedMethod, jmethodID , HOTSPOT_JNI_FROMREFLECTEDMETHOD_RETURN((uintptr_t)_ret_ref)); -#endif /* USDT2 */ JNI_ENTRY(jmethodID, jni_FromReflectedMethod(JNIEnv *env, jobject method)) JNIWrapper("FromReflectedMethod"); -#ifndef USDT2 - DTRACE_PROBE2(hotspot_jni, FromReflectedMethod__entry, env, method); -#else /* USDT2 */ + HOTSPOT_JNI_FROMREFLECTEDMETHOD_ENTRY(env, method); -#endif /* USDT2 */ + jmethodID ret = NULL; DT_RETURN_MARK(FromReflectedMethod, jmethodID, (const jmethodID&)ret); @@ -538,20 +483,14 @@ JNI_ENTRY(jmethodID, jni_FromReflectedMethod(JNIEnv *env, jobject method)) return ret; JNI_END -#ifndef USDT2 -DT_RETURN_MARK_DECL(FromReflectedField, jfieldID); -#else /* USDT2 */ DT_RETURN_MARK_DECL(FromReflectedField, jfieldID , HOTSPOT_JNI_FROMREFLECTEDFIELD_RETURN((uintptr_t)_ret_ref)); -#endif /* USDT2 */ JNI_ENTRY(jfieldID, jni_FromReflectedField(JNIEnv *env, jobject field)) JNIWrapper("FromReflectedField"); -#ifndef USDT2 - DTRACE_PROBE2(hotspot_jni, FromReflectedField__entry, env, field); -#else /* USDT2 */ + HOTSPOT_JNI_FROMREFLECTEDFIELD_ENTRY(env, field); -#endif /* USDT2 */ + jfieldID ret = NULL; DT_RETURN_MARK(FromReflectedField, jfieldID, (const jfieldID&)ret); @@ -586,20 +525,15 @@ JNI_ENTRY(jfieldID, jni_FromReflectedField(JNIEnv *env, jobject field)) return ret; JNI_END -#ifndef USDT2 -DT_RETURN_MARK_DECL(ToReflectedMethod, jobject); -#else /* USDT2 */ + DT_RETURN_MARK_DECL(ToReflectedMethod, jobject , HOTSPOT_JNI_TOREFLECTEDMETHOD_RETURN(_ret_ref)); -#endif /* USDT2 */ JNI_ENTRY(jobject, jni_ToReflectedMethod(JNIEnv *env, jclass cls, jmethodID method_id, jboolean isStatic)) JNIWrapper("ToReflectedMethod"); -#ifndef USDT2 - DTRACE_PROBE4(hotspot_jni, ToReflectedMethod__entry, env, cls, method_id, isStatic); -#else /* USDT2 */ + HOTSPOT_JNI_TOREFLECTEDMETHOD_ENTRY(env, cls, (uintptr_t) method_id, isStatic); -#endif /* USDT2 */ + jobject ret = NULL; DT_RETURN_MARK(ToReflectedMethod, jobject, (const jobject&)ret); @@ -615,20 +549,14 @@ JNI_ENTRY(jobject, jni_ToReflectedMethod(JNIEnv *env, jclass cls, jmethodID meth return ret; JNI_END -#ifndef USDT2 -DT_RETURN_MARK_DECL(GetSuperclass, jclass); -#else /* USDT2 */ DT_RETURN_MARK_DECL(GetSuperclass, jclass , HOTSPOT_JNI_GETSUPERCLASS_RETURN(_ret_ref)); -#endif /* USDT2 */ JNI_ENTRY(jclass, jni_GetSuperclass(JNIEnv *env, jclass sub)) JNIWrapper("GetSuperclass"); -#ifndef USDT2 - DTRACE_PROBE2(hotspot_jni, GetSuperclass__entry, env, sub); -#else /* USDT2 */ + HOTSPOT_JNI_GETSUPERCLASS_ENTRY(env, sub); -#endif /* USDT2 */ + jclass obj = NULL; DT_RETURN_MARK(GetSuperclass, jclass, (const jclass&)obj); @@ -657,21 +585,16 @@ JNI_END JNI_QUICK_ENTRY(jboolean, jni_IsAssignableFrom(JNIEnv *env, jclass sub, jclass super)) JNIWrapper("IsSubclassOf"); -#ifndef USDT2 - DTRACE_PROBE3(hotspot_jni, IsAssignableFrom__entry, env, sub, super); -#else /* USDT2 */ + HOTSPOT_JNI_ISASSIGNABLEFROM_ENTRY(env, sub, super); -#endif /* USDT2 */ + oop sub_mirror = JNIHandles::resolve_non_null(sub); oop super_mirror = JNIHandles::resolve_non_null(super); if (java_lang_Class::is_primitive(sub_mirror) || java_lang_Class::is_primitive(super_mirror)) { jboolean ret = (sub_mirror == super_mirror); -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, IsAssignableFrom__return, ret); -#else /* USDT2 */ + HOTSPOT_JNI_ISASSIGNABLEFROM_RETURN(ret); -#endif /* USDT2 */ return ret; } Klass* sub_klass = java_lang_Class::as_Klass(sub_mirror); @@ -679,28 +602,20 @@ JNI_QUICK_ENTRY(jboolean, jni_IsAssignableFrom(JNIEnv *env, jclass sub, jclass s assert(sub_klass != NULL && super_klass != NULL, "invalid arguments to jni_IsAssignableFrom"); jboolean ret = sub_klass->is_subtype_of(super_klass) ? JNI_TRUE : JNI_FALSE; -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, IsAssignableFrom__return, ret); -#else /* USDT2 */ + HOTSPOT_JNI_ISASSIGNABLEFROM_RETURN(ret); -#endif /* USDT2 */ return ret; JNI_END -#ifndef USDT2 -DT_RETURN_MARK_DECL(Throw, jint); -#else /* USDT2 */ + DT_RETURN_MARK_DECL(Throw, jint , HOTSPOT_JNI_THROW_RETURN(_ret_ref)); -#endif /* USDT2 */ JNI_ENTRY(jint, jni_Throw(JNIEnv *env, jthrowable obj)) JNIWrapper("Throw"); -#ifndef USDT2 - DTRACE_PROBE2(hotspot_jni, Throw__entry, env, obj); -#else /* USDT2 */ + HOTSPOT_JNI_THROW_ENTRY(env, obj); -#endif /* USDT2 */ + jint ret = JNI_OK; DT_RETURN_MARK(Throw, jint, (const jint&)ret); @@ -708,20 +623,15 @@ JNI_ENTRY(jint, jni_Throw(JNIEnv *env, jthrowable obj)) ShouldNotReachHere(); JNI_END -#ifndef USDT2 -DT_RETURN_MARK_DECL(ThrowNew, jint); -#else /* USDT2 */ + DT_RETURN_MARK_DECL(ThrowNew, jint , HOTSPOT_JNI_THROWNEW_RETURN(_ret_ref)); -#endif /* USDT2 */ JNI_ENTRY(jint, jni_ThrowNew(JNIEnv *env, jclass clazz, const char *message)) JNIWrapper("ThrowNew"); -#ifndef USDT2 - DTRACE_PROBE3(hotspot_jni, ThrowNew__entry, env, clazz, message); -#else /* USDT2 */ + HOTSPOT_JNI_THROWNEW_ENTRY(env, clazz, (char *) message); -#endif /* USDT2 */ + jint ret = JNI_OK; DT_RETURN_MARK(ThrowNew, jint, (const jint&)ret); @@ -750,30 +660,23 @@ static void jni_check_async_exceptions(JavaThread *thread) { JNI_ENTRY_NO_PRESERVE(jthrowable, jni_ExceptionOccurred(JNIEnv *env)) JNIWrapper("ExceptionOccurred"); -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, ExceptionOccurred__entry, env); -#else /* USDT2 */ + HOTSPOT_JNI_EXCEPTIONOCCURRED_ENTRY(env); -#endif /* USDT2 */ + jni_check_async_exceptions(thread); oop exception = thread->pending_exception(); jthrowable ret = (jthrowable) JNIHandles::make_local(env, exception); -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, ExceptionOccurred__return, ret); -#else /* USDT2 */ + HOTSPOT_JNI_EXCEPTIONOCCURRED_RETURN(ret); -#endif /* USDT2 */ return ret; JNI_END JNI_ENTRY_NO_PRESERVE(void, jni_ExceptionDescribe(JNIEnv *env)) JNIWrapper("ExceptionDescribe"); -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, ExceptionDescribe__entry, env); -#else /* USDT2 */ + HOTSPOT_JNI_EXCEPTIONDESCRIBE_ENTRY(env); -#endif /* USDT2 */ + if (thread->has_pending_exception()) { Handle ex(thread, thread->pending_exception()); thread->clear_pending_exception(); @@ -809,21 +712,15 @@ JNI_ENTRY_NO_PRESERVE(void, jni_ExceptionDescribe(JNIEnv *env)) } } } -#ifndef USDT2 - DTRACE_PROBE(hotspot_jni, ExceptionDescribe__return); -#else /* USDT2 */ + HOTSPOT_JNI_EXCEPTIONDESCRIBE_RETURN(); -#endif /* USDT2 */ JNI_END JNI_QUICK_ENTRY(void, jni_ExceptionClear(JNIEnv *env)) JNIWrapper("ExceptionClear"); -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, ExceptionClear__entry, env); -#else /* USDT2 */ + HOTSPOT_JNI_EXCEPTIONCLEAR_ENTRY(env); -#endif /* USDT2 */ // The jni code might be using this API to clear java thrown exception. // So just mark jvmti thread exception state as exception caught. @@ -832,21 +729,16 @@ JNI_QUICK_ENTRY(void, jni_ExceptionClear(JNIEnv *env)) state->set_exception_caught(); } thread->clear_pending_exception(); -#ifndef USDT2 - DTRACE_PROBE(hotspot_jni, ExceptionClear__return); -#else /* USDT2 */ + HOTSPOT_JNI_EXCEPTIONCLEAR_RETURN(); -#endif /* USDT2 */ JNI_END JNI_ENTRY(void, jni_FatalError(JNIEnv *env, const char *msg)) JNIWrapper("FatalError"); -#ifndef USDT2 - DTRACE_PROBE2(hotspot_jni, FatalError__entry, env, msg); -#else /* USDT2 */ + HOTSPOT_JNI_FATALERROR_ENTRY(env, (char *) msg); -#endif /* USDT2 */ + tty->print_cr("FATAL ERROR in native method: %s", msg); thread->print_stack(); os::abort(); // Dump core and abort @@ -855,18 +747,12 @@ JNI_END JNI_ENTRY(jint, jni_PushLocalFrame(JNIEnv *env, jint capacity)) JNIWrapper("PushLocalFrame"); -#ifndef USDT2 - DTRACE_PROBE2(hotspot_jni, PushLocalFrame__entry, env, capacity); -#else /* USDT2 */ + HOTSPOT_JNI_PUSHLOCALFRAME_ENTRY(env, capacity); -#endif /* USDT2 */ + //%note jni_11 if (capacity < 0 || capacity > MAX_REASONABLE_LOCAL_CAPACITY) { -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, PushLocalFrame__return, JNI_ERR); -#else /* USDT2 */ HOTSPOT_JNI_PUSHLOCALFRAME_RETURN((uint32_t)JNI_ERR); -#endif /* USDT2 */ return JNI_ERR; } JNIHandleBlock* old_handles = thread->active_handles(); @@ -875,22 +761,16 @@ JNI_ENTRY(jint, jni_PushLocalFrame(JNIEnv *env, jint capacity)) new_handles->set_pop_frame_link(old_handles); thread->set_active_handles(new_handles); jint ret = JNI_OK; -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, PushLocalFrame__return, ret); -#else /* USDT2 */ HOTSPOT_JNI_PUSHLOCALFRAME_RETURN(ret); -#endif /* USDT2 */ return ret; JNI_END JNI_ENTRY(jobject, jni_PopLocalFrame(JNIEnv *env, jobject result)) JNIWrapper("PopLocalFrame"); -#ifndef USDT2 - DTRACE_PROBE2(hotspot_jni, PopLocalFrame__entry, env, result); -#else /* USDT2 */ + HOTSPOT_JNI_POPLOCALFRAME_ENTRY(env, result); -#endif /* USDT2 */ + //%note jni_11 Handle result_handle(thread, JNIHandles::resolve(result)); JNIHandleBlock* old_handles = thread->active_handles(); @@ -905,127 +785,91 @@ JNI_ENTRY(jobject, jni_PopLocalFrame(JNIEnv *env, jobject result)) JNIHandleBlock::release_block(old_handles, thread); // may block result = JNIHandles::make_local(thread, result_handle()); } -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, PopLocalFrame__return, result); -#else /* USDT2 */ HOTSPOT_JNI_POPLOCALFRAME_RETURN(result); -#endif /* USDT2 */ return result; JNI_END JNI_ENTRY(jobject, jni_NewGlobalRef(JNIEnv *env, jobject ref)) JNIWrapper("NewGlobalRef"); -#ifndef USDT2 - DTRACE_PROBE2(hotspot_jni, NewGlobalRef__entry, env, ref); -#else /* USDT2 */ + HOTSPOT_JNI_NEWGLOBALREF_ENTRY(env, ref); -#endif /* USDT2 */ + Handle ref_handle(thread, JNIHandles::resolve(ref)); jobject ret = JNIHandles::make_global(ref_handle); -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, NewGlobalRef__return, ret); -#else /* USDT2 */ + HOTSPOT_JNI_NEWGLOBALREF_RETURN(ret); -#endif /* USDT2 */ return ret; JNI_END // Must be JNI_ENTRY (with HandleMark) JNI_ENTRY_NO_PRESERVE(void, jni_DeleteGlobalRef(JNIEnv *env, jobject ref)) JNIWrapper("DeleteGlobalRef"); -#ifndef USDT2 - DTRACE_PROBE2(hotspot_jni, DeleteGlobalRef__entry, env, ref); -#else /* USDT2 */ + HOTSPOT_JNI_DELETEGLOBALREF_ENTRY(env, ref); -#endif /* USDT2 */ + JNIHandles::destroy_global(ref); -#ifndef USDT2 - DTRACE_PROBE(hotspot_jni, DeleteGlobalRef__return); -#else /* USDT2 */ + HOTSPOT_JNI_DELETEGLOBALREF_RETURN(); -#endif /* USDT2 */ JNI_END JNI_QUICK_ENTRY(void, jni_DeleteLocalRef(JNIEnv *env, jobject obj)) JNIWrapper("DeleteLocalRef"); -#ifndef USDT2 - DTRACE_PROBE2(hotspot_jni, DeleteLocalRef__entry, env, obj); -#else /* USDT2 */ + HOTSPOT_JNI_DELETELOCALREF_ENTRY(env, obj); -#endif /* USDT2 */ + JNIHandles::destroy_local(obj); -#ifndef USDT2 - DTRACE_PROBE(hotspot_jni, DeleteLocalRef__return); -#else /* USDT2 */ + HOTSPOT_JNI_DELETELOCALREF_RETURN(); -#endif /* USDT2 */ JNI_END JNI_QUICK_ENTRY(jboolean, jni_IsSameObject(JNIEnv *env, jobject r1, jobject r2)) JNIWrapper("IsSameObject"); -#ifndef USDT2 - DTRACE_PROBE3(hotspot_jni, IsSameObject__entry, env, r1, r2); -#else /* USDT2 */ + HOTSPOT_JNI_ISSAMEOBJECT_ENTRY(env, r1, r2); -#endif /* USDT2 */ + oop a = JNIHandles::resolve(r1); oop b = JNIHandles::resolve(r2); jboolean ret = (a == b) ? JNI_TRUE : JNI_FALSE; -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, IsSameObject__return, ret); -#else /* USDT2 */ + HOTSPOT_JNI_ISSAMEOBJECT_RETURN(ret); -#endif /* USDT2 */ return ret; JNI_END JNI_ENTRY(jobject, jni_NewLocalRef(JNIEnv *env, jobject ref)) JNIWrapper("NewLocalRef"); -#ifndef USDT2 - DTRACE_PROBE2(hotspot_jni, NewLocalRef__entry, env, ref); -#else /* USDT2 */ + HOTSPOT_JNI_NEWLOCALREF_ENTRY(env, ref); -#endif /* USDT2 */ + jobject ret = JNIHandles::make_local(env, JNIHandles::resolve(ref)); -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, NewLocalRef__return, ret); -#else /* USDT2 */ + HOTSPOT_JNI_NEWLOCALREF_RETURN(ret); -#endif /* USDT2 */ return ret; JNI_END JNI_LEAF(jint, jni_EnsureLocalCapacity(JNIEnv *env, jint capacity)) JNIWrapper("EnsureLocalCapacity"); -#ifndef USDT2 - DTRACE_PROBE2(hotspot_jni, EnsureLocalCapacity__entry, env, capacity); -#else /* USDT2 */ + HOTSPOT_JNI_ENSURELOCALCAPACITY_ENTRY(env, capacity); -#endif /* USDT2 */ + jint ret; if (capacity >= 0 && capacity <= MAX_REASONABLE_LOCAL_CAPACITY) { ret = JNI_OK; } else { ret = JNI_ERR; } -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, EnsureLocalCapacity__return, ret); -#else /* USDT2 */ + HOTSPOT_JNI_ENSURELOCALCAPACITY_RETURN(ret); -#endif /* USDT2 */ return ret; JNI_END // Return the Handle Type JNI_LEAF(jobjectRefType, jni_GetObjectRefType(JNIEnv *env, jobject obj)) JNIWrapper("GetObjectRefType"); -#ifndef USDT2 - DTRACE_PROBE2(hotspot_jni, GetObjectRefType__entry, env, obj); -#else /* USDT2 */ + HOTSPOT_JNI_GETOBJECTREFTYPE_ENTRY(env, obj); -#endif /* USDT2 */ + jobjectRefType ret; if (JNIHandles::is_local_handle(thread, obj) || JNIHandles::is_frame_handle(thread, obj)) @@ -1036,11 +880,8 @@ JNI_LEAF(jobjectRefType, jni_GetObjectRefType(JNIEnv *env, jobject obj)) ret = JNIWeakGlobalRefType; else ret = JNIInvalidRefType; -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, GetObjectRefType__return, ret); -#else /* USDT2 */ + HOTSPOT_JNI_GETOBJECTREFTYPE_RETURN((void *) ret); -#endif /* USDT2 */ return ret; JNI_END @@ -1369,21 +1210,14 @@ static instanceOop alloc_object(jclass clazz, TRAPS) { return ih; } -#ifndef USDT2 -DT_RETURN_MARK_DECL(AllocObject, jobject); -#else /* USDT2 */ DT_RETURN_MARK_DECL(AllocObject, jobject , HOTSPOT_JNI_ALLOCOBJECT_RETURN(_ret_ref)); -#endif /* USDT2 */ JNI_ENTRY(jobject, jni_AllocObject(JNIEnv *env, jclass clazz)) JNIWrapper("AllocObject"); -#ifndef USDT2 - DTRACE_PROBE2(hotspot_jni, AllocObject__entry, env, clazz); -#else /* USDT2 */ HOTSPOT_JNI_ALLOCOBJECT_ENTRY(env, clazz); -#endif /* USDT2 */ + jobject ret = NULL; DT_RETURN_MARK(AllocObject, jobject, (const jobject&)ret); @@ -1392,20 +1226,14 @@ JNI_ENTRY(jobject, jni_AllocObject(JNIEnv *env, jclass clazz)) return ret; JNI_END -#ifndef USDT2 -DT_RETURN_MARK_DECL(NewObjectA, jobject); -#else /* USDT2 */ DT_RETURN_MARK_DECL(NewObjectA, jobject , HOTSPOT_JNI_NEWOBJECTA_RETURN(_ret_ref)); -#endif /* USDT2 */ JNI_ENTRY(jobject, jni_NewObjectA(JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args)) JNIWrapper("NewObjectA"); -#ifndef USDT2 - DTRACE_PROBE3(hotspot_jni, NewObjectA__entry, env, clazz, methodID); -#else /* USDT2 */ + HOTSPOT_JNI_NEWOBJECTA_ENTRY(env, clazz, (uintptr_t) methodID); -#endif /* USDT2 */ + jobject obj = NULL; DT_RETURN_MARK(NewObjectA, jobject, (const jobject)obj); @@ -1417,20 +1245,15 @@ JNI_ENTRY(jobject, jni_NewObjectA(JNIEnv *env, jclass clazz, jmethodID methodID, return obj; JNI_END -#ifndef USDT2 -DT_RETURN_MARK_DECL(NewObjectV, jobject); -#else /* USDT2 */ + DT_RETURN_MARK_DECL(NewObjectV, jobject , HOTSPOT_JNI_NEWOBJECTV_RETURN(_ret_ref)); -#endif /* USDT2 */ JNI_ENTRY(jobject, jni_NewObjectV(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args)) JNIWrapper("NewObjectV"); -#ifndef USDT2 - DTRACE_PROBE3(hotspot_jni, NewObjectV__entry, env, clazz, methodID); -#else /* USDT2 */ + HOTSPOT_JNI_NEWOBJECTV_ENTRY(env, clazz, (uintptr_t) methodID); -#endif /* USDT2 */ + jobject obj = NULL; DT_RETURN_MARK(NewObjectV, jobject, (const jobject&)obj); @@ -1442,20 +1265,15 @@ JNI_ENTRY(jobject, jni_NewObjectV(JNIEnv *env, jclass clazz, jmethodID methodID, return obj; JNI_END -#ifndef USDT2 -DT_RETURN_MARK_DECL(NewObject, jobject); -#else /* USDT2 */ + DT_RETURN_MARK_DECL(NewObject, jobject , HOTSPOT_JNI_NEWOBJECT_RETURN(_ret_ref)); -#endif /* USDT2 */ JNI_ENTRY(jobject, jni_NewObject(JNIEnv *env, jclass clazz, jmethodID methodID, ...)) JNIWrapper("NewObject"); -#ifndef USDT2 - DTRACE_PROBE3(hotspot_jni, NewObject__entry, env, clazz, methodID); -#else /* USDT2 */ + HOTSPOT_JNI_NEWOBJECT_ENTRY(env, clazz, (uintptr_t) methodID); -#endif /* USDT2 */ + jobject obj = NULL; DT_RETURN_MARK(NewObject, jobject, (const jobject&)obj); @@ -1473,29 +1291,22 @@ JNI_END JNI_ENTRY(jclass, jni_GetObjectClass(JNIEnv *env, jobject obj)) JNIWrapper("GetObjectClass"); -#ifndef USDT2 - DTRACE_PROBE2(hotspot_jni, GetObjectClass__entry, env, obj); -#else /* USDT2 */ + HOTSPOT_JNI_GETOBJECTCLASS_ENTRY(env, obj); -#endif /* USDT2 */ + Klass* k = JNIHandles::resolve_non_null(obj)->klass(); jclass ret = (jclass) JNIHandles::make_local(env, k->java_mirror()); -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, GetObjectClass__return, ret); -#else /* USDT2 */ + HOTSPOT_JNI_GETOBJECTCLASS_RETURN(ret); -#endif /* USDT2 */ return ret; JNI_END JNI_QUICK_ENTRY(jboolean, jni_IsInstanceOf(JNIEnv *env, jobject obj, jclass clazz)) JNIWrapper("IsInstanceOf"); -#ifndef USDT2 - DTRACE_PROBE3(hotspot_jni, IsInstanceOf__entry, env, obj, clazz); -#else /* USDT2 */ + HOTSPOT_JNI_ISINSTANCEOF_ENTRY(env, obj, clazz); -#endif /* USDT2 */ + jboolean ret = JNI_TRUE; if (obj != NULL) { ret = JNI_FALSE; @@ -1505,11 +1316,8 @@ JNI_QUICK_ENTRY(jboolean, jni_IsInstanceOf(JNIEnv *env, jobject obj, jclass claz ret = JNIHandles::resolve_non_null(obj)->is_a(k) ? JNI_TRUE : JNI_FALSE; } } -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, IsInstanceOf__return, ret); -#else /* USDT2 */ + HOTSPOT_JNI_ISINSTANCEOF_RETURN(ret); -#endif /* USDT2 */ return ret; JNI_END @@ -1569,17 +1377,9 @@ static jmethodID get_method_id(JNIEnv *env, jclass clazz, const char *name_str, JNI_ENTRY(jmethodID, jni_GetMethodID(JNIEnv *env, jclass clazz, const char *name, const char *sig)) JNIWrapper("GetMethodID"); -#ifndef USDT2 - DTRACE_PROBE4(hotspot_jni, GetMethodID__entry, env, clazz, name, sig); -#else /* USDT2 */ HOTSPOT_JNI_GETMETHODID_ENTRY(env, clazz, (char *) name, (char *) sig); -#endif /* USDT2 */ jmethodID ret = get_method_id(env, clazz, name, sig, false, thread); -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, GetMethodID__return, ret); -#else /* USDT2 */ HOTSPOT_JNI_GETMETHODID_RETURN((uintptr_t) ret); -#endif /* USDT2 */ return ret; JNI_END @@ -1587,17 +1387,9 @@ JNI_END JNI_ENTRY(jmethodID, jni_GetStaticMethodID(JNIEnv *env, jclass clazz, const char *name, const char *sig)) JNIWrapper("GetStaticMethodID"); -#ifndef USDT2 - DTRACE_PROBE4(hotspot_jni, GetStaticMethodID__entry, env, clazz, name, sig); -#else /* USDT2 */ HOTSPOT_JNI_GETSTATICMETHODID_ENTRY(env, (char *) clazz, (char *) name, (char *)sig); -#endif /* USDT2 */ jmethodID ret = get_method_id(env, clazz, name, sig, true, thread); -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, GetStaticMethodID__return, ret); -#else /* USDT2 */ HOTSPOT_JNI_GETSTATICMETHODID_RETURN((uintptr_t) ret); -#endif /* USDT2 */ return ret; JNI_END @@ -1607,82 +1399,6 @@ JNI_END // Calling Methods // -#ifndef USDT2 -#define DEFINE_CALLMETHOD(ResultType, Result, Tag) \ -\ - DT_RETURN_MARK_DECL_FOR(Result, Call##Result##Method, ResultType);\ - DT_RETURN_MARK_DECL_FOR(Result, Call##Result##MethodV, ResultType);\ - DT_RETURN_MARK_DECL_FOR(Result, Call##Result##MethodA, ResultType);\ -\ -JNI_ENTRY(ResultType, \ - jni_Call##Result##Method(JNIEnv *env, jobject obj, jmethodID methodID, ...)) \ - JNIWrapper("Call" XSTR(Result) "Method"); \ -\ - DTRACE_PROBE3(hotspot_jni, Call##Result##Method__entry, env, obj, methodID); \ - ResultType ret = 0;\ - DT_RETURN_MARK_FOR(Result, Call##Result##Method, ResultType, \ - (const ResultType&)ret);\ -\ - va_list args; \ - va_start(args, methodID); \ - JavaValue jvalue(Tag); \ - JNI_ArgumentPusherVaArg ap(methodID, args); \ - jni_invoke_nonstatic(env, &jvalue, obj, JNI_VIRTUAL, methodID, &ap, CHECK_0); \ - va_end(args); \ - ret = jvalue.get_##ResultType(); \ - return ret;\ -JNI_END \ -\ -\ -JNI_ENTRY(ResultType, \ - jni_Call##Result##MethodV(JNIEnv *env, jobject obj, jmethodID methodID, va_list args)) \ - JNIWrapper("Call" XSTR(Result) "MethodV"); \ -\ - DTRACE_PROBE3(hotspot_jni, Call##Result##MethodV__entry, env, obj, methodID); \ - ResultType ret = 0;\ - DT_RETURN_MARK_FOR(Result, Call##Result##MethodV, ResultType, \ - (const ResultType&)ret);\ -\ - JavaValue jvalue(Tag); \ - JNI_ArgumentPusherVaArg ap(methodID, args); \ - jni_invoke_nonstatic(env, &jvalue, obj, JNI_VIRTUAL, methodID, &ap, CHECK_0); \ - ret = jvalue.get_##ResultType(); \ - return ret;\ -JNI_END \ -\ -\ -JNI_ENTRY(ResultType, \ - jni_Call##Result##MethodA(JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args)) \ - JNIWrapper("Call" XSTR(Result) "MethodA"); \ - DTRACE_PROBE3(hotspot_jni, Call##Result##MethodA__entry, env, obj, methodID); \ - ResultType ret = 0;\ - DT_RETURN_MARK_FOR(Result, Call##Result##MethodA, ResultType, \ - (const ResultType&)ret);\ -\ - JavaValue jvalue(Tag); \ - JNI_ArgumentPusherArray ap(methodID, args); \ - jni_invoke_nonstatic(env, &jvalue, obj, JNI_VIRTUAL, methodID, &ap, CHECK_0); \ - ret = jvalue.get_##ResultType(); \ - return ret;\ -JNI_END - -// the runtime type of subword integral basic types is integer -DEFINE_CALLMETHOD(jboolean, Boolean, T_BOOLEAN) -DEFINE_CALLMETHOD(jbyte, Byte, T_BYTE) -DEFINE_CALLMETHOD(jchar, Char, T_CHAR) -DEFINE_CALLMETHOD(jshort, Short, T_SHORT) - -DEFINE_CALLMETHOD(jobject, Object, T_OBJECT) -DEFINE_CALLMETHOD(jint, Int, T_INT) -DEFINE_CALLMETHOD(jlong, Long, T_LONG) -DEFINE_CALLMETHOD(jfloat, Float, T_FLOAT) -DEFINE_CALLMETHOD(jdouble, Double, T_DOUBLE) - -DT_VOID_RETURN_MARK_DECL(CallVoidMethod); -DT_VOID_RETURN_MARK_DECL(CallVoidMethodV); -DT_VOID_RETURN_MARK_DECL(CallVoidMethodA); - -#else /* USDT2 */ #define DEFINE_CALLMETHOD(ResultType, Result, Tag \ , EntryProbe, ReturnProbe) \ @@ -1849,15 +1565,10 @@ DT_VOID_RETURN_MARK_DECL(CallVoidMethod, HOTSPOT_JNI_CALLVOIDMETHOD_RETURN()); DT_VOID_RETURN_MARK_DECL(CallVoidMethodV, HOTSPOT_JNI_CALLVOIDMETHODV_RETURN()); DT_VOID_RETURN_MARK_DECL(CallVoidMethodA, HOTSPOT_JNI_CALLVOIDMETHODA_RETURN()); -#endif /* USDT2 */ JNI_ENTRY(void, jni_CallVoidMethod(JNIEnv *env, jobject obj, jmethodID methodID, ...)) JNIWrapper("CallVoidMethod"); -#ifndef USDT2 - DTRACE_PROBE3(hotspot_jni, CallVoidMethod__entry, env, obj, methodID); -#else /* USDT2 */ HOTSPOT_JNI_CALLVOIDMETHOD_ENTRY(env, obj, (uintptr_t) methodID); -#endif /* USDT2 */ DT_VOID_RETURN_MARK(CallVoidMethod); va_list args; @@ -1871,11 +1582,7 @@ JNI_END JNI_ENTRY(void, jni_CallVoidMethodV(JNIEnv *env, jobject obj, jmethodID methodID, va_list args)) JNIWrapper("CallVoidMethodV"); -#ifndef USDT2 - DTRACE_PROBE3(hotspot_jni, CallVoidMethodV__entry, env, obj, methodID); -#else /* USDT2 */ HOTSPOT_JNI_CALLVOIDMETHODV_ENTRY(env, obj, (uintptr_t) methodID); -#endif /* USDT2 */ DT_VOID_RETURN_MARK(CallVoidMethodV); JavaValue jvalue(T_VOID); @@ -1886,11 +1593,7 @@ JNI_END JNI_ENTRY(void, jni_CallVoidMethodA(JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args)) JNIWrapper("CallVoidMethodA"); -#ifndef USDT2 - DTRACE_PROBE3(hotspot_jni, CallVoidMethodA__entry, env, obj, methodID); -#else /* USDT2 */ HOTSPOT_JNI_CALLVOIDMETHODA_ENTRY(env, obj, (uintptr_t) methodID); -#endif /* USDT2 */ DT_VOID_RETURN_MARK(CallVoidMethodA); JavaValue jvalue(T_VOID); @@ -1899,80 +1602,6 @@ JNI_ENTRY(void, jni_CallVoidMethodA(JNIEnv *env, jobject obj, jmethodID methodID JNI_END -#ifndef USDT2 -#define DEFINE_CALLNONVIRTUALMETHOD(ResultType, Result, Tag) \ -\ - DT_RETURN_MARK_DECL_FOR(Result, CallNonvirtual##Result##Method, ResultType);\ - DT_RETURN_MARK_DECL_FOR(Result, CallNonvirtual##Result##MethodV, ResultType);\ - DT_RETURN_MARK_DECL_FOR(Result, CallNonvirtual##Result##MethodA, ResultType);\ -\ -JNI_ENTRY(ResultType, \ - jni_CallNonvirtual##Result##Method(JNIEnv *env, jobject obj, jclass cls, jmethodID methodID, ...)) \ - JNIWrapper("CallNonvitual" XSTR(Result) "Method"); \ -\ - DTRACE_PROBE4(hotspot_jni, CallNonvirtual##Result##Method__entry, env, obj, cls, methodID);\ - ResultType ret;\ - DT_RETURN_MARK_FOR(Result, CallNonvirtual##Result##Method, ResultType, \ - (const ResultType&)ret);\ -\ - va_list args; \ - va_start(args, methodID); \ - JavaValue jvalue(Tag); \ - JNI_ArgumentPusherVaArg ap(methodID, args); \ - jni_invoke_nonstatic(env, &jvalue, obj, JNI_NONVIRTUAL, methodID, &ap, CHECK_0); \ - va_end(args); \ - ret = jvalue.get_##ResultType(); \ - return ret;\ -JNI_END \ -\ -JNI_ENTRY(ResultType, \ - jni_CallNonvirtual##Result##MethodV(JNIEnv *env, jobject obj, jclass cls, jmethodID methodID, va_list args)) \ - JNIWrapper("CallNonvitual" XSTR(Result) "#MethodV"); \ - DTRACE_PROBE4(hotspot_jni, CallNonvirtual##Result##MethodV__entry, env, obj, cls, methodID);\ - ResultType ret;\ - DT_RETURN_MARK_FOR(Result, CallNonvirtual##Result##MethodV, ResultType, \ - (const ResultType&)ret);\ -\ - JavaValue jvalue(Tag); \ - JNI_ArgumentPusherVaArg ap(methodID, args); \ - jni_invoke_nonstatic(env, &jvalue, obj, JNI_NONVIRTUAL, methodID, &ap, CHECK_0); \ - ret = jvalue.get_##ResultType(); \ - return ret;\ -JNI_END \ -\ -JNI_ENTRY(ResultType, \ - jni_CallNonvirtual##Result##MethodA(JNIEnv *env, jobject obj, jclass cls, jmethodID methodID, const jvalue *args)) \ - JNIWrapper("CallNonvitual" XSTR(Result) "MethodA"); \ - DTRACE_PROBE4(hotspot_jni, CallNonvirtual##Result##MethodA__entry, env, obj, cls, methodID);\ - ResultType ret;\ - DT_RETURN_MARK_FOR(Result, CallNonvirtual##Result##MethodA, ResultType, \ - (const ResultType&)ret);\ -\ - JavaValue jvalue(Tag); \ - JNI_ArgumentPusherArray ap(methodID, args); \ - jni_invoke_nonstatic(env, &jvalue, obj, JNI_NONVIRTUAL, methodID, &ap, CHECK_0); \ - ret = jvalue.get_##ResultType(); \ - return ret;\ -JNI_END - -// the runtime type of subword integral basic types is integer -DEFINE_CALLNONVIRTUALMETHOD(jboolean, Boolean, T_BOOLEAN) -DEFINE_CALLNONVIRTUALMETHOD(jbyte, Byte, T_BYTE) -DEFINE_CALLNONVIRTUALMETHOD(jchar, Char, T_CHAR) -DEFINE_CALLNONVIRTUALMETHOD(jshort, Short, T_SHORT) - -DEFINE_CALLNONVIRTUALMETHOD(jobject, Object, T_OBJECT) -DEFINE_CALLNONVIRTUALMETHOD(jint, Int, T_INT) -DEFINE_CALLNONVIRTUALMETHOD(jlong, Long, T_LONG) -DEFINE_CALLNONVIRTUALMETHOD(jfloat, Float, T_FLOAT) -DEFINE_CALLNONVIRTUALMETHOD(jdouble, Double, T_DOUBLE) - - -DT_VOID_RETURN_MARK_DECL(CallNonvirtualVoidMethod); -DT_VOID_RETURN_MARK_DECL(CallNonvirtualVoidMethodV); -DT_VOID_RETURN_MARK_DECL(CallNonvirtualVoidMethodA); - -#else /* USDT2 */ #define DEFINE_CALLNONVIRTUALMETHOD(ResultType, Result, Tag \ , EntryProbe, ReturnProbe) \ @@ -2142,17 +1771,11 @@ DT_VOID_RETURN_MARK_DECL(CallNonvirtualVoidMethodV , HOTSPOT_JNI_CALLNONVIRTUALVOIDMETHODV_RETURN()); DT_VOID_RETURN_MARK_DECL(CallNonvirtualVoidMethodA , HOTSPOT_JNI_CALLNONVIRTUALVOIDMETHODA_RETURN()); -#endif /* USDT2 */ JNI_ENTRY(void, jni_CallNonvirtualVoidMethod(JNIEnv *env, jobject obj, jclass cls, jmethodID methodID, ...)) JNIWrapper("CallNonvirtualVoidMethod"); -#ifndef USDT2 - DTRACE_PROBE4(hotspot_jni, CallNonvirtualVoidMethod__entry, - env, obj, cls, methodID); -#else /* USDT2 */ HOTSPOT_JNI_CALLNONVIRTUALVOIDMETHOD_ENTRY(env, obj, cls, (uintptr_t) methodID); -#endif /* USDT2 */ DT_VOID_RETURN_MARK(CallNonvirtualVoidMethod); va_list args; @@ -2167,13 +1790,8 @@ JNI_END JNI_ENTRY(void, jni_CallNonvirtualVoidMethodV(JNIEnv *env, jobject obj, jclass cls, jmethodID methodID, va_list args)) JNIWrapper("CallNonvirtualVoidMethodV"); -#ifndef USDT2 - DTRACE_PROBE4(hotspot_jni, CallNonvirtualVoidMethodV__entry, - env, obj, cls, methodID); -#else /* USDT2 */ HOTSPOT_JNI_CALLNONVIRTUALVOIDMETHODV_ENTRY( env, obj, cls, (uintptr_t) methodID); -#endif /* USDT2 */ DT_VOID_RETURN_MARK(CallNonvirtualVoidMethodV); JavaValue jvalue(T_VOID); @@ -2184,13 +1802,8 @@ JNI_END JNI_ENTRY(void, jni_CallNonvirtualVoidMethodA(JNIEnv *env, jobject obj, jclass cls, jmethodID methodID, const jvalue *args)) JNIWrapper("CallNonvirtualVoidMethodA"); -#ifndef USDT2 - DTRACE_PROBE4(hotspot_jni, CallNonvirtualVoidMethodA__entry, - env, obj, cls, methodID); -#else /* USDT2 */ HOTSPOT_JNI_CALLNONVIRTUALVOIDMETHODA_ENTRY( env, obj, cls, (uintptr_t) methodID); -#endif /* USDT2 */ DT_VOID_RETURN_MARK(CallNonvirtualVoidMethodA); JavaValue jvalue(T_VOID); JNI_ArgumentPusherArray ap(methodID, args); @@ -2198,80 +1811,6 @@ JNI_ENTRY(void, jni_CallNonvirtualVoidMethodA(JNIEnv *env, jobject obj, jclass c JNI_END -#ifndef USDT2 -#define DEFINE_CALLSTATICMETHOD(ResultType, Result, Tag) \ -\ - DT_RETURN_MARK_DECL_FOR(Result, CallStatic##Result##Method, ResultType);\ - DT_RETURN_MARK_DECL_FOR(Result, CallStatic##Result##MethodV, ResultType);\ - DT_RETURN_MARK_DECL_FOR(Result, CallStatic##Result##MethodA, ResultType);\ -\ -JNI_ENTRY(ResultType, \ - jni_CallStatic##Result##Method(JNIEnv *env, jclass cls, jmethodID methodID, ...)) \ - JNIWrapper("CallStatic" XSTR(Result) "Method"); \ -\ - DTRACE_PROBE3(hotspot_jni, CallStatic##Result##Method__entry, env, cls, methodID);\ - ResultType ret = 0;\ - DT_RETURN_MARK_FOR(Result, CallStatic##Result##Method, ResultType, \ - (const ResultType&)ret);\ -\ - va_list args; \ - va_start(args, methodID); \ - JavaValue jvalue(Tag); \ - JNI_ArgumentPusherVaArg ap(methodID, args); \ - jni_invoke_static(env, &jvalue, NULL, JNI_STATIC, methodID, &ap, CHECK_0); \ - va_end(args); \ - ret = jvalue.get_##ResultType(); \ - return ret;\ -JNI_END \ -\ -JNI_ENTRY(ResultType, \ - jni_CallStatic##Result##MethodV(JNIEnv *env, jclass cls, jmethodID methodID, va_list args)) \ - JNIWrapper("CallStatic" XSTR(Result) "MethodV"); \ - DTRACE_PROBE3(hotspot_jni, CallStatic##Result##MethodV__entry, env, cls, methodID);\ - ResultType ret = 0;\ - DT_RETURN_MARK_FOR(Result, CallStatic##Result##MethodV, ResultType, \ - (const ResultType&)ret);\ -\ - JavaValue jvalue(Tag); \ - JNI_ArgumentPusherVaArg ap(methodID, args); \ - jni_invoke_static(env, &jvalue, NULL, JNI_STATIC, methodID, &ap, CHECK_0); \ - ret = jvalue.get_##ResultType(); \ - return ret;\ -JNI_END \ -\ -JNI_ENTRY(ResultType, \ - jni_CallStatic##Result##MethodA(JNIEnv *env, jclass cls, jmethodID methodID, const jvalue *args)) \ - JNIWrapper("CallStatic" XSTR(Result) "MethodA"); \ - DTRACE_PROBE3(hotspot_jni, CallStatic##Result##MethodA__entry, env, cls, methodID);\ - ResultType ret = 0;\ - DT_RETURN_MARK_FOR(Result, CallStatic##Result##MethodA, ResultType, \ - (const ResultType&)ret);\ -\ - JavaValue jvalue(Tag); \ - JNI_ArgumentPusherArray ap(methodID, args); \ - jni_invoke_static(env, &jvalue, NULL, JNI_STATIC, methodID, &ap, CHECK_0); \ - ret = jvalue.get_##ResultType(); \ - return ret;\ -JNI_END - -// the runtime type of subword integral basic types is integer -DEFINE_CALLSTATICMETHOD(jboolean, Boolean, T_BOOLEAN) -DEFINE_CALLSTATICMETHOD(jbyte, Byte, T_BYTE) -DEFINE_CALLSTATICMETHOD(jchar, Char, T_CHAR) -DEFINE_CALLSTATICMETHOD(jshort, Short, T_SHORT) - -DEFINE_CALLSTATICMETHOD(jobject, Object, T_OBJECT) -DEFINE_CALLSTATICMETHOD(jint, Int, T_INT) -DEFINE_CALLSTATICMETHOD(jlong, Long, T_LONG) -DEFINE_CALLSTATICMETHOD(jfloat, Float, T_FLOAT) -DEFINE_CALLSTATICMETHOD(jdouble, Double, T_DOUBLE) - - -DT_VOID_RETURN_MARK_DECL(CallStaticVoidMethod); -DT_VOID_RETURN_MARK_DECL(CallStaticVoidMethodV); -DT_VOID_RETURN_MARK_DECL(CallStaticVoidMethodA); - -#else /* USDT2 */ #define DEFINE_CALLSTATICMETHOD(ResultType, Result, Tag \ , EntryProbe, ResultProbe) \ @@ -2445,15 +1984,10 @@ DT_VOID_RETURN_MARK_DECL(CallStaticVoidMethodV , HOTSPOT_JNI_CALLSTATICVOIDMETHODV_RETURN()); DT_VOID_RETURN_MARK_DECL(CallStaticVoidMethodA , HOTSPOT_JNI_CALLSTATICVOIDMETHODA_RETURN()); -#endif /* USDT2 */ JNI_ENTRY(void, jni_CallStaticVoidMethod(JNIEnv *env, jclass cls, jmethodID methodID, ...)) JNIWrapper("CallStaticVoidMethod"); -#ifndef USDT2 - DTRACE_PROBE3(hotspot_jni, CallStaticVoidMethod__entry, env, cls, methodID); -#else /* USDT2 */ HOTSPOT_JNI_CALLSTATICVOIDMETHOD_ENTRY(env, cls, (uintptr_t) methodID); -#endif /* USDT2 */ DT_VOID_RETURN_MARK(CallStaticVoidMethod); va_list args; @@ -2467,11 +2001,7 @@ JNI_END JNI_ENTRY(void, jni_CallStaticVoidMethodV(JNIEnv *env, jclass cls, jmethodID methodID, va_list args)) JNIWrapper("CallStaticVoidMethodV"); -#ifndef USDT2 - DTRACE_PROBE3(hotspot_jni, CallStaticVoidMethodV__entry, env, cls, methodID); -#else /* USDT2 */ HOTSPOT_JNI_CALLSTATICVOIDMETHODV_ENTRY(env, cls, (uintptr_t) methodID); -#endif /* USDT2 */ DT_VOID_RETURN_MARK(CallStaticVoidMethodV); JavaValue jvalue(T_VOID); @@ -2482,11 +2012,7 @@ JNI_END JNI_ENTRY(void, jni_CallStaticVoidMethodA(JNIEnv *env, jclass cls, jmethodID methodID, const jvalue *args)) JNIWrapper("CallStaticVoidMethodA"); -#ifndef USDT2 - DTRACE_PROBE3(hotspot_jni, CallStaticVoidMethodA__entry, env, cls, methodID); -#else /* USDT2 */ HOTSPOT_JNI_CALLSTATICVOIDMETHODA_ENTRY(env, cls, (uintptr_t) methodID); -#endif /* USDT2 */ DT_VOID_RETURN_MARK(CallStaticVoidMethodA); JavaValue jvalue(T_VOID); @@ -2500,21 +2026,13 @@ JNI_END // -#ifndef USDT2 -DT_RETURN_MARK_DECL(GetFieldID, jfieldID); -#else /* USDT2 */ DT_RETURN_MARK_DECL(GetFieldID, jfieldID , HOTSPOT_JNI_GETFIELDID_RETURN((uintptr_t)_ret_ref)); -#endif /* USDT2 */ JNI_ENTRY(jfieldID, jni_GetFieldID(JNIEnv *env, jclass clazz, const char *name, const char *sig)) JNIWrapper("GetFieldID"); -#ifndef USDT2 - DTRACE_PROBE4(hotspot_jni, GetFieldID__entry, env, clazz, name, sig); -#else /* USDT2 */ HOTSPOT_JNI_GETFIELDID_ENTRY(env, clazz, (char *) name, (char *) sig); -#endif /* USDT2 */ jfieldID ret = 0; DT_RETURN_MARK(GetFieldID, jfieldID, (const jfieldID&)ret); @@ -2546,11 +2064,7 @@ JNI_END JNI_ENTRY(jobject, jni_GetObjectField(JNIEnv *env, jobject obj, jfieldID fieldID)) JNIWrapper("GetObjectField"); -#ifndef USDT2 - DTRACE_PROBE3(hotspot_jni, GetObjectField__entry, env, obj, fieldID); -#else /* USDT2 */ HOTSPOT_JNI_GETOBJECTFIELD_ENTRY(env, obj, (uintptr_t) fieldID); -#endif /* USDT2 */ oop o = JNIHandles::resolve_non_null(obj); Klass* k = o->klass(); int offset = jfieldIDWorkaround::from_instance_jfieldID(k, fieldID); @@ -2580,50 +2094,11 @@ JNI_ENTRY(jobject, jni_GetObjectField(JNIEnv *env, jobject obj, jfieldID fieldID } } #endif // INCLUDE_ALL_GCS -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, GetObjectField__return, ret); -#else /* USDT2 */ HOTSPOT_JNI_GETOBJECTFIELD_RETURN(ret); -#endif /* USDT2 */ return ret; JNI_END -#ifndef USDT2 -#define DEFINE_GETFIELD(Return,Fieldname,Result) \ -\ - DT_RETURN_MARK_DECL_FOR(Result, Get##Result##Field, Return);\ -\ -JNI_QUICK_ENTRY(Return, jni_Get##Result##Field(JNIEnv *env, jobject obj, jfieldID fieldID)) \ - JNIWrapper("Get" XSTR(Result) "Field"); \ -\ - DTRACE_PROBE3(hotspot_jni, Get##Result##Field__entry, env, obj, fieldID);\ - Return ret = 0;\ - DT_RETURN_MARK_FOR(Result, Get##Result##Field, Return, (const Return&)ret);\ -\ - oop o = JNIHandles::resolve_non_null(obj); \ - Klass* k = o->klass(); \ - int offset = jfieldIDWorkaround::from_instance_jfieldID(k, fieldID); \ - /* Keep JVMTI addition small and only check enabled flag here. */ \ - /* jni_GetField_probe_nh() assumes that is not okay to create handles */ \ - /* and creates a ResetNoHandleMark. */ \ - if (JvmtiExport::should_post_field_access()) { \ - o = JvmtiExport::jni_GetField_probe_nh(thread, obj, o, k, fieldID, false); \ - } \ - ret = o->Fieldname##_field(offset); \ - return ret; \ -JNI_END - -DEFINE_GETFIELD(jboolean, bool, Boolean) -DEFINE_GETFIELD(jbyte, byte, Byte) -DEFINE_GETFIELD(jchar, char, Char) -DEFINE_GETFIELD(jshort, short, Short) -DEFINE_GETFIELD(jint, int, Int) -DEFINE_GETFIELD(jlong, long, Long) -DEFINE_GETFIELD(jfloat, float, Float) -DEFINE_GETFIELD(jdouble, double, Double) - -#else /* USDT2 */ #define DEFINE_GETFIELD(Return,Fieldname,Result \ , EntryProbe, ReturnProbe) \ @@ -2676,7 +2151,6 @@ DEFINE_GETFIELD(jfloat, float, Float DEFINE_GETFIELD(jdouble, double, Double , HOTSPOT_JNI_GETDOUBLEFIELD_ENTRY(env, obj, (uintptr_t)fieldID), HOTSPOT_JNI_GETDOUBLEFIELD_RETURN()) -#endif /* USDT2 */ address jni_GetBooleanField_addr() { return (address)jni_GetBooleanField; @@ -2705,11 +2179,7 @@ address jni_GetDoubleField_addr() { JNI_QUICK_ENTRY(void, jni_SetObjectField(JNIEnv *env, jobject obj, jfieldID fieldID, jobject value)) JNIWrapper("SetObjectField"); -#ifndef USDT2 - DTRACE_PROBE4(hotspot_jni, SetObjectField__entry, env, obj, fieldID, value); -#else /* USDT2 */ HOTSPOT_JNI_SETOBJECTFIELD_ENTRY(env, obj, (uintptr_t) fieldID, value); -#endif /* USDT2 */ oop o = JNIHandles::resolve_non_null(obj); Klass* k = o->klass(); int offset = jfieldIDWorkaround::from_instance_jfieldID(k, fieldID); @@ -2722,48 +2192,9 @@ JNI_QUICK_ENTRY(void, jni_SetObjectField(JNIEnv *env, jobject obj, jfieldID fiel o = JvmtiExport::jni_SetField_probe_nh(thread, obj, o, k, fieldID, false, 'L', (jvalue *)&field_value); } o->obj_field_put(offset, JNIHandles::resolve(value)); -#ifndef USDT2 - DTRACE_PROBE(hotspot_jni, SetObjectField__return); -#else /* USDT2 */ HOTSPOT_JNI_SETOBJECTFIELD_RETURN(); -#endif /* USDT2 */ JNI_END -#ifndef USDT2 -#define DEFINE_SETFIELD(Argument,Fieldname,Result,SigType,unionType) \ -\ -JNI_QUICK_ENTRY(void, jni_Set##Result##Field(JNIEnv *env, jobject obj, jfieldID fieldID, Argument value)) \ - JNIWrapper("Set" XSTR(Result) "Field"); \ -\ - FP_SELECT_##Result( \ - DTRACE_PROBE4(hotspot_jni, Set##Result##Field__entry, env, obj, fieldID, value), \ - DTRACE_PROBE3(hotspot_jni, Set##Result##Field__entry, env, obj, fieldID)); \ -\ - oop o = JNIHandles::resolve_non_null(obj); \ - Klass* k = o->klass(); \ - int offset = jfieldIDWorkaround::from_instance_jfieldID(k, fieldID); \ - /* Keep JVMTI addition small and only check enabled flag here. */ \ - /* jni_SetField_probe_nh() assumes that is not okay to create handles */ \ - /* and creates a ResetNoHandleMark. */ \ - if (JvmtiExport::should_post_field_modification()) { \ - jvalue field_value; \ - field_value.unionType = value; \ - o = JvmtiExport::jni_SetField_probe_nh(thread, obj, o, k, fieldID, false, SigType, (jvalue *)&field_value); \ - } \ - o->Fieldname##_field_put(offset, value); \ - DTRACE_PROBE(hotspot_jni, Set##Result##Field__return);\ -JNI_END - -DEFINE_SETFIELD(jboolean, bool, Boolean, 'Z', z) -DEFINE_SETFIELD(jbyte, byte, Byte, 'B', b) -DEFINE_SETFIELD(jchar, char, Char, 'C', c) -DEFINE_SETFIELD(jshort, short, Short, 'S', s) -DEFINE_SETFIELD(jint, int, Int, 'I', i) -DEFINE_SETFIELD(jlong, long, Long, 'J', j) -DEFINE_SETFIELD(jfloat, float, Float, 'F', f) -DEFINE_SETFIELD(jdouble, double, Double, 'D', d) - -#else /* USDT2 */ #define DEFINE_SETFIELD(Argument,Fieldname,Result,SigType,unionType \ , EntryProbe, ReturnProbe) \ @@ -2813,23 +2244,13 @@ DEFINE_SETFIELD(jfloat, float, Float, 'F', f DEFINE_SETFIELD(jdouble, double, Double, 'D', d , HOTSPOT_JNI_SETDOUBLEFIELD_ENTRY(env, obj, (uintptr_t)fieldID), HOTSPOT_JNI_SETDOUBLEFIELD_RETURN()) -#endif /* USDT2 */ -#ifndef USDT2 -DT_RETURN_MARK_DECL(ToReflectedField, jobject); -#else /* USDT2 */ DT_RETURN_MARK_DECL(ToReflectedField, jobject , HOTSPOT_JNI_TOREFLECTEDFIELD_RETURN(_ret_ref)); -#endif /* USDT2 */ JNI_ENTRY(jobject, jni_ToReflectedField(JNIEnv *env, jclass cls, jfieldID fieldID, jboolean isStatic)) JNIWrapper("ToReflectedField"); -#ifndef USDT2 - DTRACE_PROBE4(hotspot_jni, ToReflectedField__entry, - env, cls, fieldID, isStatic); -#else /* USDT2 */ HOTSPOT_JNI_TOREFLECTEDFIELD_ENTRY(env, cls, (uintptr_t) fieldID, isStatic); -#endif /* USDT2 */ jobject ret = NULL; DT_RETURN_MARK(ToReflectedField, jobject, (const jobject&)ret); @@ -2859,21 +2280,13 @@ JNI_END // // Accessing Static Fields // -#ifndef USDT2 -DT_RETURN_MARK_DECL(GetStaticFieldID, jfieldID); -#else /* USDT2 */ DT_RETURN_MARK_DECL(GetStaticFieldID, jfieldID , HOTSPOT_JNI_GETSTATICFIELDID_RETURN((uintptr_t)_ret_ref)); -#endif /* USDT2 */ JNI_ENTRY(jfieldID, jni_GetStaticFieldID(JNIEnv *env, jclass clazz, const char *name, const char *sig)) JNIWrapper("GetStaticFieldID"); -#ifndef USDT2 - DTRACE_PROBE4(hotspot_jni, GetStaticFieldID__entry, env, clazz, name, sig); -#else /* USDT2 */ HOTSPOT_JNI_GETSTATICFIELDID_ENTRY(env, clazz, (char *) name, (char *) sig); -#endif /* USDT2 */ jfieldID ret = NULL; DT_RETURN_MARK(GetStaticFieldID, jfieldID, (const jfieldID&)ret); @@ -2909,11 +2322,7 @@ JNI_END JNI_ENTRY(jobject, jni_GetStaticObjectField(JNIEnv *env, jclass clazz, jfieldID fieldID)) JNIWrapper("GetStaticObjectField"); -#ifndef USDT2 - DTRACE_PROBE3(hotspot_jni, GetStaticObjectField__entry, env, clazz, fieldID); -#else /* USDT2 */ HOTSPOT_JNI_GETSTATICOBJECTFIELD_ENTRY(env, clazz, (uintptr_t) fieldID); -#endif /* USDT2 */ #if INCLUDE_JNI_CHECK DEBUG_ONLY(Klass* param_k = jniCheck::validate_class(thread, clazz);) #endif // INCLUDE_JNI_CHECK @@ -2925,46 +2334,10 @@ JNI_ENTRY(jobject, jni_GetStaticObjectField(JNIEnv *env, jclass clazz, jfieldID JvmtiExport::jni_GetField_probe(thread, NULL, NULL, id->holder(), fieldID, true); } jobject ret = JNIHandles::make_local(id->holder()->java_mirror()->obj_field(id->offset())); -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, GetStaticObjectField__return, ret); -#else /* USDT2 */ HOTSPOT_JNI_GETSTATICOBJECTFIELD_RETURN(ret); -#endif /* USDT2 */ return ret; JNI_END -#ifndef USDT2 -#define DEFINE_GETSTATICFIELD(Return,Fieldname,Result) \ -\ - DT_RETURN_MARK_DECL_FOR(Result, GetStatic##Result##Field, Return);\ -\ -JNI_ENTRY(Return, jni_GetStatic##Result##Field(JNIEnv *env, jclass clazz, jfieldID fieldID)) \ - JNIWrapper("GetStatic" XSTR(Result) "Field"); \ - DTRACE_PROBE3(hotspot_jni, GetStatic##Result##Field__entry, env, clazz, fieldID);\ - Return ret = 0;\ - DT_RETURN_MARK_FOR(Result, GetStatic##Result##Field, Return, \ - (const Return&)ret);\ - JNIid* id = jfieldIDWorkaround::from_static_jfieldID(fieldID); \ - assert(id->is_static_field_id(), "invalid static field id"); \ - /* Keep JVMTI addition small and only check enabled flag here. */ \ - /* jni_GetField_probe() assumes that is okay to create handles. */ \ - if (JvmtiExport::should_post_field_access()) { \ - JvmtiExport::jni_GetField_probe(thread, NULL, NULL, id->holder(), fieldID, true); \ - } \ - ret = id->holder()->java_mirror()-> Fieldname##_field (id->offset()); \ - return ret;\ -JNI_END - -DEFINE_GETSTATICFIELD(jboolean, bool, Boolean) -DEFINE_GETSTATICFIELD(jbyte, byte, Byte) -DEFINE_GETSTATICFIELD(jchar, char, Char) -DEFINE_GETSTATICFIELD(jshort, short, Short) -DEFINE_GETSTATICFIELD(jint, int, Int) -DEFINE_GETSTATICFIELD(jlong, long, Long) -DEFINE_GETSTATICFIELD(jfloat, float, Float) -DEFINE_GETSTATICFIELD(jdouble, double, Double) - -#else /* USDT2 */ #define DEFINE_GETSTATICFIELD(Return,Fieldname,Result \ , EntryProbe, ReturnProbe) \ @@ -3006,15 +2379,10 @@ DEFINE_GETSTATICFIELD(jfloat, float, Float , HOTSPOT_JNI_GETSTATICFLOATFIELD_ENTRY(env, clazz, (uintptr_t) fieldID), HOTSPOT_JNI_GETSTATICFLOATFIELD_RETURN() ) DEFINE_GETSTATICFIELD(jdouble, double, Double , HOTSPOT_JNI_GETSTATICDOUBLEFIELD_ENTRY(env, clazz, (uintptr_t) fieldID), HOTSPOT_JNI_GETSTATICDOUBLEFIELD_RETURN() ) -#endif /* USDT2 */ JNI_ENTRY(void, jni_SetStaticObjectField(JNIEnv *env, jclass clazz, jfieldID fieldID, jobject value)) JNIWrapper("SetStaticObjectField"); -#ifndef USDT2 - DTRACE_PROBE4(hotspot_jni, SetStaticObjectField__entry, env, clazz, fieldID, value); -#else /* USDT2 */ HOTSPOT_JNI_SETSTATICOBJECTFIELD_ENTRY(env, clazz, (uintptr_t) fieldID, value); -#endif /* USDT2 */ JNIid* id = jfieldIDWorkaround::from_static_jfieldID(fieldID); assert(id->is_static_field_id(), "invalid static field id"); // Keep JVMTI addition small and only check enabled flag here. @@ -3025,46 +2393,10 @@ JNI_ENTRY(void, jni_SetStaticObjectField(JNIEnv *env, jclass clazz, jfieldID fie JvmtiExport::jni_SetField_probe(thread, NULL, NULL, id->holder(), fieldID, true, 'L', (jvalue *)&field_value); } id->holder()->java_mirror()->obj_field_put(id->offset(), JNIHandles::resolve(value)); -#ifndef USDT2 - DTRACE_PROBE(hotspot_jni, SetStaticObjectField__return); -#else /* USDT2 */ HOTSPOT_JNI_SETSTATICOBJECTFIELD_RETURN(); -#endif /* USDT2 */ JNI_END -#ifndef USDT2 -#define DEFINE_SETSTATICFIELD(Argument,Fieldname,Result,SigType,unionType) \ -\ -JNI_ENTRY(void, jni_SetStatic##Result##Field(JNIEnv *env, jclass clazz, jfieldID fieldID, Argument value)) \ - JNIWrapper("SetStatic" XSTR(Result) "Field"); \ - FP_SELECT_##Result( \ - DTRACE_PROBE4(hotspot_jni, SetStatic##Result##Field__entry, env, clazz, fieldID, value), \ - DTRACE_PROBE3(hotspot_jni, SetStatic##Result##Field__entry, env, clazz, fieldID)); \ -\ - JNIid* id = jfieldIDWorkaround::from_static_jfieldID(fieldID); \ - assert(id->is_static_field_id(), "invalid static field id"); \ - /* Keep JVMTI addition small and only check enabled flag here. */ \ - /* jni_SetField_probe() assumes that is okay to create handles. */ \ - if (JvmtiExport::should_post_field_modification()) { \ - jvalue field_value; \ - field_value.unionType = value; \ - JvmtiExport::jni_SetField_probe(thread, NULL, NULL, id->holder(), fieldID, true, SigType, (jvalue *)&field_value); \ - } \ - id->holder()->java_mirror()-> Fieldname##_field_put (id->offset(), value); \ - DTRACE_PROBE(hotspot_jni, SetStatic##Result##Field__return);\ -JNI_END - -DEFINE_SETSTATICFIELD(jboolean, bool, Boolean, 'Z', z) -DEFINE_SETSTATICFIELD(jbyte, byte, Byte, 'B', b) -DEFINE_SETSTATICFIELD(jchar, char, Char, 'C', c) -DEFINE_SETSTATICFIELD(jshort, short, Short, 'S', s) -DEFINE_SETSTATICFIELD(jint, int, Int, 'I', i) -DEFINE_SETSTATICFIELD(jlong, long, Long, 'J', j) -DEFINE_SETSTATICFIELD(jfloat, float, Float, 'F', f) -DEFINE_SETSTATICFIELD(jdouble, double, Double, 'D', d) - -#else /* USDT2 */ #define DEFINE_SETSTATICFIELD(Argument,Fieldname,Result,SigType,unionType \ , EntryProbe, ReturnProbe) \ @@ -3111,7 +2443,6 @@ DEFINE_SETSTATICFIELD(jfloat, float, Float, 'F', f DEFINE_SETSTATICFIELD(jdouble, double, Double, 'D', d , HOTSPOT_JNI_SETSTATICDOUBLEFIELD_ENTRY(env, clazz, (uintptr_t) fieldID), HOTSPOT_JNI_SETSTATICDOUBLEFIELD_RETURN()) -#endif /* USDT2 */ // // String Operations @@ -3119,20 +2450,12 @@ DEFINE_SETSTATICFIELD(jdouble, double, Double, 'D', d // Unicode Interface -#ifndef USDT2 -DT_RETURN_MARK_DECL(NewString, jstring); -#else /* USDT2 */ DT_RETURN_MARK_DECL(NewString, jstring , HOTSPOT_JNI_NEWSTRING_RETURN(_ret_ref)); -#endif /* USDT2 */ JNI_ENTRY(jstring, jni_NewString(JNIEnv *env, const jchar *unicodeChars, jsize len)) JNIWrapper("NewString"); -#ifndef USDT2 - DTRACE_PROBE3(hotspot_jni, NewString__entry, env, unicodeChars, len); -#else /* USDT2 */ HOTSPOT_JNI_NEWSTRING_ENTRY(env, (uint16_t *) unicodeChars, len); -#endif /* USDT2 */ jstring ret = NULL; DT_RETURN_MARK(NewString, jstring, (const jstring&)ret); oop string=java_lang_String::create_oop_from_unicode((jchar*) unicodeChars, len, CHECK_NULL); @@ -3143,21 +2466,13 @@ JNI_END JNI_QUICK_ENTRY(jsize, jni_GetStringLength(JNIEnv *env, jstring string)) JNIWrapper("GetStringLength"); -#ifndef USDT2 - DTRACE_PROBE2(hotspot_jni, GetStringLength__entry, env, string); -#else /* USDT2 */ HOTSPOT_JNI_GETSTRINGLENGTH_ENTRY(env, string); -#endif /* USDT2 */ jsize ret = 0; oop s = JNIHandles::resolve_non_null(string); if (java_lang_String::value(s) != NULL) { ret = java_lang_String::length(s); } -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, GetStringLength__return, ret); -#else /* USDT2 */ HOTSPOT_JNI_GETSTRINGLENGTH_RETURN(ret); -#endif /* USDT2 */ return ret; JNI_END @@ -3165,11 +2480,7 @@ JNI_END JNI_QUICK_ENTRY(const jchar*, jni_GetStringChars( JNIEnv *env, jstring string, jboolean *isCopy)) JNIWrapper("GetStringChars"); -#ifndef USDT2 - DTRACE_PROBE3(hotspot_jni, GetStringChars__entry, env, string, isCopy); -#else /* USDT2 */ HOTSPOT_JNI_GETSTRINGCHARS_ENTRY(env, string, (uintptr_t *) isCopy); -#endif /* USDT2 */ jchar* buf = NULL; oop s = JNIHandles::resolve_non_null(string); typeArrayOop s_value = java_lang_String::value(s); @@ -3189,52 +2500,32 @@ JNI_QUICK_ENTRY(const jchar*, jni_GetStringChars( } } } -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, GetStringChars__return, buf); -#else /* USDT2 */ HOTSPOT_JNI_GETSTRINGCHARS_RETURN(buf); -#endif /* USDT2 */ return buf; JNI_END JNI_QUICK_ENTRY(void, jni_ReleaseStringChars(JNIEnv *env, jstring str, const jchar *chars)) JNIWrapper("ReleaseStringChars"); -#ifndef USDT2 - DTRACE_PROBE3(hotspot_jni, ReleaseStringChars__entry, env, str, chars); -#else /* USDT2 */ HOTSPOT_JNI_RELEASESTRINGCHARS_ENTRY(env, str, (uint16_t *) chars); -#endif /* USDT2 */ //%note jni_6 if (chars != NULL) { // Since String objects are supposed to be immutable, don't copy any // new data back. A bad user will have to go after the char array. FreeHeap((void*) chars); } -#ifndef USDT2 - DTRACE_PROBE(hotspot_jni, ReleaseStringChars__return); -#else /* USDT2 */ HOTSPOT_JNI_RELEASESTRINGCHARS_RETURN(); -#endif /* USDT2 */ JNI_END // UTF Interface -#ifndef USDT2 -DT_RETURN_MARK_DECL(NewStringUTF, jstring); -#else /* USDT2 */ DT_RETURN_MARK_DECL(NewStringUTF, jstring , HOTSPOT_JNI_NEWSTRINGUTF_RETURN(_ret_ref)); -#endif /* USDT2 */ JNI_ENTRY(jstring, jni_NewStringUTF(JNIEnv *env, const char *bytes)) JNIWrapper("NewStringUTF"); -#ifndef USDT2 - DTRACE_PROBE2(hotspot_jni, NewStringUTF__entry, env, bytes); -#else /* USDT2 */ HOTSPOT_JNI_NEWSTRINGUTF_ENTRY(env, (char *) bytes); -#endif /* USDT2 */ jstring ret; DT_RETURN_MARK(NewStringUTF, jstring, (const jstring&)ret); @@ -3246,32 +2537,20 @@ JNI_END JNI_ENTRY(jsize, jni_GetStringUTFLength(JNIEnv *env, jstring string)) JNIWrapper("GetStringUTFLength"); -#ifndef USDT2 - DTRACE_PROBE2(hotspot_jni, GetStringUTFLength__entry, env, string); -#else /* USDT2 */ HOTSPOT_JNI_GETSTRINGUTFLENGTH_ENTRY(env, string); -#endif /* USDT2 */ jsize ret = 0; oop java_string = JNIHandles::resolve_non_null(string); if (java_lang_String::value(java_string) != NULL) { ret = java_lang_String::utf8_length(java_string); } -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, GetStringUTFLength__return, ret); -#else /* USDT2 */ HOTSPOT_JNI_GETSTRINGUTFLENGTH_RETURN(ret); -#endif /* USDT2 */ return ret; JNI_END JNI_ENTRY(const char*, jni_GetStringUTFChars(JNIEnv *env, jstring string, jboolean *isCopy)) JNIWrapper("GetStringUTFChars"); -#ifndef USDT2 - DTRACE_PROBE3(hotspot_jni, GetStringUTFChars__entry, env, string, isCopy); -#else /* USDT2 */ HOTSPOT_JNI_GETSTRINGUTFCHARS_ENTRY(env, string, (uintptr_t *) isCopy); -#endif /* USDT2 */ char* result = NULL; oop java_string = JNIHandles::resolve_non_null(string); if (java_lang_String::value(java_string) != NULL) { @@ -3285,48 +2564,28 @@ JNI_ENTRY(const char*, jni_GetStringUTFChars(JNIEnv *env, jstring string, jboole } } } -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, GetStringUTFChars__return, result); -#else /* USDT2 */ HOTSPOT_JNI_GETSTRINGUTFCHARS_RETURN(result); -#endif /* USDT2 */ return result; JNI_END JNI_LEAF(void, jni_ReleaseStringUTFChars(JNIEnv *env, jstring str, const char *chars)) JNIWrapper("ReleaseStringUTFChars"); -#ifndef USDT2 - DTRACE_PROBE3(hotspot_jni, ReleaseStringUTFChars__entry, env, str, chars); -#else /* USDT2 */ HOTSPOT_JNI_RELEASESTRINGUTFCHARS_ENTRY(env, str, (char *) chars); -#endif /* USDT2 */ if (chars != NULL) { FreeHeap((char*) chars); } -#ifndef USDT2 - DTRACE_PROBE(hotspot_jni, ReleaseStringUTFChars__return); -#else /* USDT2 */ HOTSPOT_JNI_RELEASESTRINGUTFCHARS_RETURN(); -#endif /* USDT2 */ JNI_END JNI_QUICK_ENTRY(jsize, jni_GetArrayLength(JNIEnv *env, jarray array)) JNIWrapper("GetArrayLength"); -#ifndef USDT2 - DTRACE_PROBE2(hotspot_jni, GetArrayLength__entry, env, array); -#else /* USDT2 */ HOTSPOT_JNI_GETARRAYLENGTH_ENTRY(env, array); -#endif /* USDT2 */ arrayOop a = arrayOop(JNIHandles::resolve_non_null(array)); assert(a->is_array(), "must be array"); jsize ret = a->length(); -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, GetArrayLength__return, ret); -#else /* USDT2 */ HOTSPOT_JNI_GETARRAYLENGTH_RETURN(ret); -#endif /* USDT2 */ return ret; JNI_END @@ -3335,20 +2594,12 @@ JNI_END // Object Array Operations // -#ifndef USDT2 -DT_RETURN_MARK_DECL(NewObjectArray, jobjectArray); -#else /* USDT2 */ DT_RETURN_MARK_DECL(NewObjectArray, jobjectArray , HOTSPOT_JNI_NEWOBJECTARRAY_RETURN(_ret_ref)); -#endif /* USDT2 */ JNI_ENTRY(jobjectArray, jni_NewObjectArray(JNIEnv *env, jsize length, jclass elementClass, jobject initialElement)) JNIWrapper("NewObjectArray"); -#ifndef USDT2 - DTRACE_PROBE4(hotspot_jni, NewObjectArray__entry, env, length, elementClass, initialElement); -#else /* USDT2 */ HOTSPOT_JNI_NEWOBJECTARRAY_ENTRY(env, length, elementClass, initialElement); -#endif /* USDT2 */ jobjectArray ret = NULL; DT_RETURN_MARK(NewObjectArray, jobjectArray, (const jobjectArray&)ret); KlassHandle ek(THREAD, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(elementClass))); @@ -3366,20 +2617,12 @@ JNI_ENTRY(jobjectArray, jni_NewObjectArray(JNIEnv *env, jsize length, jclass ele return ret; JNI_END -#ifndef USDT2 -DT_RETURN_MARK_DECL(GetObjectArrayElement, jobject); -#else /* USDT2 */ DT_RETURN_MARK_DECL(GetObjectArrayElement, jobject , HOTSPOT_JNI_GETOBJECTARRAYELEMENT_RETURN(_ret_ref)); -#endif /* USDT2 */ JNI_ENTRY(jobject, jni_GetObjectArrayElement(JNIEnv *env, jobjectArray array, jsize index)) JNIWrapper("GetObjectArrayElement"); -#ifndef USDT2 - DTRACE_PROBE3(hotspot_jni, GetObjectArrayElement__entry, env, array, index); -#else /* USDT2 */ HOTSPOT_JNI_GETOBJECTARRAYELEMENT_ENTRY(env, array, index); -#endif /* USDT2 */ jobject ret = NULL; DT_RETURN_MARK(GetObjectArrayElement, jobject, (const jobject&)ret); objArrayOop a = objArrayOop(JNIHandles::resolve_non_null(array)); @@ -3393,20 +2636,12 @@ JNI_ENTRY(jobject, jni_GetObjectArrayElement(JNIEnv *env, jobjectArray array, js } JNI_END -#ifndef USDT2 -DT_VOID_RETURN_MARK_DECL(SetObjectArrayElement); -#else /* USDT2 */ DT_VOID_RETURN_MARK_DECL(SetObjectArrayElement , HOTSPOT_JNI_SETOBJECTARRAYELEMENT_RETURN()); -#endif /* USDT2 */ JNI_ENTRY(void, jni_SetObjectArrayElement(JNIEnv *env, jobjectArray array, jsize index, jobject value)) JNIWrapper("SetObjectArrayElement"); -#ifndef USDT2 - DTRACE_PROBE4(hotspot_jni, SetObjectArrayElement__entry, env, array, index, value); -#else /* USDT2 */ HOTSPOT_JNI_SETOBJECTARRAYELEMENT_ENTRY(env, array, index, value); -#endif /* USDT2 */ DT_VOID_RETURN_MARK(SetObjectArrayElement); objArrayOop a = objArrayOop(JNIHandles::resolve_non_null(array)); @@ -3425,33 +2660,6 @@ JNI_ENTRY(void, jni_SetObjectArrayElement(JNIEnv *env, jobjectArray array, jsize JNI_END -#ifndef USDT2 -#define DEFINE_NEWSCALARARRAY(Return,Allocator,Result) \ -\ - DT_RETURN_MARK_DECL(New##Result##Array, Return); \ -\ -JNI_ENTRY(Return, \ - jni_New##Result##Array(JNIEnv *env, jsize len)) \ - JNIWrapper("New" XSTR(Result) "Array"); \ - DTRACE_PROBE2(hotspot_jni, New##Result##Array__entry, env, len);\ - Return ret = NULL;\ - DT_RETURN_MARK(New##Result##Array, Return, (const Return&)ret);\ -\ - oop obj= oopFactory::Allocator(len, CHECK_0); \ - ret = (Return) JNIHandles::make_local(env, obj); \ - return ret;\ -JNI_END - -DEFINE_NEWSCALARARRAY(jbooleanArray, new_boolArray, Boolean) -DEFINE_NEWSCALARARRAY(jbyteArray, new_byteArray, Byte) -DEFINE_NEWSCALARARRAY(jshortArray, new_shortArray, Short) -DEFINE_NEWSCALARARRAY(jcharArray, new_charArray, Char) -DEFINE_NEWSCALARARRAY(jintArray, new_intArray, Int) -DEFINE_NEWSCALARARRAY(jlongArray, new_longArray, Long) -DEFINE_NEWSCALARARRAY(jfloatArray, new_singleArray, Float) -DEFINE_NEWSCALARARRAY(jdoubleArray, new_doubleArray, Double) - -#else /* USDT2 */ #define DEFINE_NEWSCALARARRAY(Return,Allocator,Result \ ,EntryProbe,ReturnProbe) \ @@ -3495,7 +2703,6 @@ DEFINE_NEWSCALARARRAY(jfloatArray, new_singleArray, Float, DEFINE_NEWSCALARARRAY(jdoubleArray, new_doubleArray, Double, HOTSPOT_JNI_NEWDOUBLEARRAY_ENTRY(env, len), HOTSPOT_JNI_NEWDOUBLEARRAY_RETURN(_ret_ref)) -#endif /* USDT2 */ // Return an address which will fault if the caller writes to it. @@ -3513,47 +2720,6 @@ static char* get_bad_address() { } -#ifndef USDT2 -#define DEFINE_GETSCALARARRAYELEMENTS(ElementTag,ElementType,Result, Tag) \ -\ -JNI_QUICK_ENTRY(ElementType*, \ - jni_Get##Result##ArrayElements(JNIEnv *env, ElementType##Array array, jboolean *isCopy)) \ - JNIWrapper("Get" XSTR(Result) "ArrayElements"); \ - DTRACE_PROBE3(hotspot_jni, Get##Result##ArrayElements__entry, env, array, isCopy);\ - /* allocate an chunk of memory in c land */ \ - typeArrayOop a = typeArrayOop(JNIHandles::resolve_non_null(array)); \ - ElementType* result; \ - int len = a->length(); \ - if (len == 0) { \ - /* Empty array: legal but useless, can't return NULL. \ - * Return a pointer to something useless. \ - * Avoid asserts in typeArrayOop. */ \ - result = (ElementType*)get_bad_address(); \ - } else { \ - /* JNI Specification states return NULL on OOM */ \ - result = NEW_C_HEAP_ARRAY_RETURN_NULL(ElementType, len, mtInternal); \ - if (result != NULL) { \ - /* copy the array to the c chunk */ \ - memcpy(result, a->Tag##_at_addr(0), sizeof(ElementType)*len); \ - if (isCopy) { \ - *isCopy = JNI_TRUE; \ - } \ - } \ - } \ - DTRACE_PROBE1(hotspot_jni, Get##Result##ArrayElements__return, result);\ - return result; \ -JNI_END - -DEFINE_GETSCALARARRAYELEMENTS(T_BOOLEAN, jboolean, Boolean, bool) -DEFINE_GETSCALARARRAYELEMENTS(T_BYTE, jbyte, Byte, byte) -DEFINE_GETSCALARARRAYELEMENTS(T_SHORT, jshort, Short, short) -DEFINE_GETSCALARARRAYELEMENTS(T_CHAR, jchar, Char, char) -DEFINE_GETSCALARARRAYELEMENTS(T_INT, jint, Int, int) -DEFINE_GETSCALARARRAYELEMENTS(T_LONG, jlong, Long, long) -DEFINE_GETSCALARARRAYELEMENTS(T_FLOAT, jfloat, Float, float) -DEFINE_GETSCALARARRAYELEMENTS(T_DOUBLE, jdouble, Double, double) - -#else /* USDT2 */ #define DEFINE_GETSCALARARRAYELEMENTS(ElementTag,ElementType,Result, Tag \ , EntryProbe, ReturnProbe) \ @@ -3611,39 +2777,7 @@ DEFINE_GETSCALARARRAYELEMENTS(T_FLOAT, jfloat, Float, float DEFINE_GETSCALARARRAYELEMENTS(T_DOUBLE, jdouble, Double, double , HOTSPOT_JNI_GETDOUBLEARRAYELEMENTS_ENTRY(env, array, (uintptr_t *) isCopy), HOTSPOT_JNI_GETDOUBLEARRAYELEMENTS_RETURN(result)) -#endif /* USDT2 */ -#ifndef USDT2 -#define DEFINE_RELEASESCALARARRAYELEMENTS(ElementTag,ElementType,Result,Tag) \ -\ -JNI_QUICK_ENTRY(void, \ - jni_Release##Result##ArrayElements(JNIEnv *env, ElementType##Array array, \ - ElementType *buf, jint mode)) \ - JNIWrapper("Release" XSTR(Result) "ArrayElements"); \ - DTRACE_PROBE4(hotspot_jni, Release##Result##ArrayElements__entry, env, array, buf, mode);\ - typeArrayOop a = typeArrayOop(JNIHandles::resolve_non_null(array)); \ - int len = a->length(); \ - if (len != 0) { /* Empty array: nothing to free or copy. */ \ - if ((mode == 0) || (mode == JNI_COMMIT)) { \ - memcpy(a->Tag##_at_addr(0), buf, sizeof(ElementType)*len); \ - } \ - if ((mode == 0) || (mode == JNI_ABORT)) { \ - FreeHeap(buf); \ - } \ - } \ - DTRACE_PROBE(hotspot_jni, Release##Result##ArrayElements__return);\ -JNI_END - -DEFINE_RELEASESCALARARRAYELEMENTS(T_BOOLEAN, jboolean, Boolean, bool) -DEFINE_RELEASESCALARARRAYELEMENTS(T_BYTE, jbyte, Byte, byte) -DEFINE_RELEASESCALARARRAYELEMENTS(T_SHORT, jshort, Short, short) -DEFINE_RELEASESCALARARRAYELEMENTS(T_CHAR, jchar, Char, char) -DEFINE_RELEASESCALARARRAYELEMENTS(T_INT, jint, Int, int) -DEFINE_RELEASESCALARARRAYELEMENTS(T_LONG, jlong, Long, long) -DEFINE_RELEASESCALARARRAYELEMENTS(T_FLOAT, jfloat, Float, float) -DEFINE_RELEASESCALARARRAYELEMENTS(T_DOUBLE, jdouble, Double, double) - -#else /* USDT2 */ #define DEFINE_RELEASESCALARARRAYELEMENTS(ElementTag,ElementType,Result,Tag \ , EntryProbe, ReturnProbe);\ @@ -3690,41 +2824,7 @@ DEFINE_RELEASESCALARARRAYELEMENTS(T_FLOAT, jfloat, Float, float DEFINE_RELEASESCALARARRAYELEMENTS(T_DOUBLE, jdouble, Double, double , HOTSPOT_JNI_RELEASEDOUBLEARRAYELEMENTS_ENTRY(env, array, (double *) buf, mode), HOTSPOT_JNI_RELEASEDOUBLEARRAYELEMENTS_RETURN()) -#endif /* USDT2 */ -#ifndef USDT2 -#define DEFINE_GETSCALARARRAYREGION(ElementTag,ElementType,Result, Tag) \ - DT_VOID_RETURN_MARK_DECL(Get##Result##ArrayRegion);\ -\ -JNI_ENTRY(void, \ -jni_Get##Result##ArrayRegion(JNIEnv *env, ElementType##Array array, jsize start, \ - jsize len, ElementType *buf)) \ - JNIWrapper("Get" XSTR(Result) "ArrayRegion"); \ - DTRACE_PROBE5(hotspot_jni, Get##Result##ArrayRegion__entry, env, array, start, len, buf);\ - DT_VOID_RETURN_MARK(Get##Result##ArrayRegion); \ - typeArrayOop src = typeArrayOop(JNIHandles::resolve_non_null(array)); \ - if (start < 0 || len < 0 || ((unsigned int)start + (unsigned int)len > (unsigned int)src->length())) { \ - THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException()); \ - } else { \ - if (len > 0) { \ - int sc = TypeArrayKlass::cast(src->klass())->log2_element_size(); \ - memcpy((u_char*) buf, \ - (u_char*) src->Tag##_at_addr(start), \ - len << sc); \ - } \ - } \ -JNI_END - -DEFINE_GETSCALARARRAYREGION(T_BOOLEAN, jboolean,Boolean, bool) -DEFINE_GETSCALARARRAYREGION(T_BYTE, jbyte, Byte, byte) -DEFINE_GETSCALARARRAYREGION(T_SHORT, jshort, Short, short) -DEFINE_GETSCALARARRAYREGION(T_CHAR, jchar, Char, char) -DEFINE_GETSCALARARRAYREGION(T_INT, jint, Int, int) -DEFINE_GETSCALARARRAYREGION(T_LONG, jlong, Long, long) -DEFINE_GETSCALARARRAYREGION(T_FLOAT, jfloat, Float, float) -DEFINE_GETSCALARARRAYREGION(T_DOUBLE, jdouble, Double, double) - -#else /* USDT2 */ #define DEFINE_GETSCALARARRAYREGION(ElementTag,ElementType,Result, Tag \ , EntryProbe, ReturnProbe); \ @@ -3774,41 +2874,7 @@ DEFINE_GETSCALARARRAYREGION(T_FLOAT, jfloat, Float, float DEFINE_GETSCALARARRAYREGION(T_DOUBLE, jdouble, Double, double , HOTSPOT_JNI_GETDOUBLEARRAYREGION_ENTRY(env, array, start, len, (double *) buf), HOTSPOT_JNI_GETDOUBLEARRAYREGION_RETURN()); -#endif /* USDT2 */ -#ifndef USDT2 -#define DEFINE_SETSCALARARRAYREGION(ElementTag,ElementType,Result, Tag) \ - DT_VOID_RETURN_MARK_DECL(Set##Result##ArrayRegion);\ -\ -JNI_ENTRY(void, \ -jni_Set##Result##ArrayRegion(JNIEnv *env, ElementType##Array array, jsize start, \ - jsize len, const ElementType *buf)) \ - JNIWrapper("Set" XSTR(Result) "ArrayRegion"); \ - DTRACE_PROBE5(hotspot_jni, Set##Result##ArrayRegion__entry, env, array, start, len, buf);\ - DT_VOID_RETURN_MARK(Set##Result##ArrayRegion); \ - typeArrayOop dst = typeArrayOop(JNIHandles::resolve_non_null(array)); \ - if (start < 0 || len < 0 || ((unsigned int)start + (unsigned int)len > (unsigned int)dst->length())) { \ - THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException()); \ - } else { \ - if (len > 0) { \ - int sc = TypeArrayKlass::cast(dst->klass())->log2_element_size(); \ - memcpy((u_char*) dst->Tag##_at_addr(start), \ - (u_char*) buf, \ - len << sc); \ - } \ - } \ -JNI_END - -DEFINE_SETSCALARARRAYREGION(T_BOOLEAN, jboolean, Boolean, bool) -DEFINE_SETSCALARARRAYREGION(T_BYTE, jbyte, Byte, byte) -DEFINE_SETSCALARARRAYREGION(T_SHORT, jshort, Short, short) -DEFINE_SETSCALARARRAYREGION(T_CHAR, jchar, Char, char) -DEFINE_SETSCALARARRAYREGION(T_INT, jint, Int, int) -DEFINE_SETSCALARARRAYREGION(T_LONG, jlong, Long, long) -DEFINE_SETSCALARARRAYREGION(T_FLOAT, jfloat, Float, float) -DEFINE_SETSCALARARRAYREGION(T_DOUBLE, jdouble, Double, double) - -#else /* USDT2 */ #define DEFINE_SETSCALARARRAYREGION(ElementTag,ElementType,Result, Tag \ , EntryProbe, ReturnProbe); \ @@ -3858,7 +2924,6 @@ DEFINE_SETSCALARARRAYREGION(T_FLOAT, jfloat, Float, float DEFINE_SETSCALARARRAYREGION(T_DOUBLE, jdouble, Double, double , HOTSPOT_JNI_SETDOUBLEARRAYREGION_ENTRY(env, array, start, len, (double *) buf), HOTSPOT_JNI_SETDOUBLEARRAYREGION_RETURN()) -#endif /* USDT2 */ // @@ -3943,22 +3008,14 @@ static bool register_native(KlassHandle k, Symbol* name, Symbol* signature, addr return true; } -#ifndef USDT2 -DT_RETURN_MARK_DECL(RegisterNatives, jint); -#else /* USDT2 */ DT_RETURN_MARK_DECL(RegisterNatives, jint , HOTSPOT_JNI_REGISTERNATIVES_RETURN(_ret_ref)); -#endif /* USDT2 */ JNI_ENTRY(jint, jni_RegisterNatives(JNIEnv *env, jclass clazz, const JNINativeMethod *methods, jint nMethods)) JNIWrapper("RegisterNatives"); -#ifndef USDT2 - DTRACE_PROBE4(hotspot_jni, RegisterNatives__entry, env, clazz, methods, nMethods); -#else /* USDT2 */ HOTSPOT_JNI_REGISTERNATIVES_ENTRY(env, clazz, (void *) methods, nMethods); -#endif /* USDT2 */ jint ret = 0; DT_RETURN_MARK(RegisterNatives, jint, (const jint&)ret); @@ -3996,11 +3053,7 @@ JNI_END JNI_ENTRY(jint, jni_UnregisterNatives(JNIEnv *env, jclass clazz)) JNIWrapper("UnregisterNatives"); -#ifndef USDT2 - DTRACE_PROBE2(hotspot_jni, UnregisterNatives__entry, env, clazz); -#else /* USDT2 */ HOTSPOT_JNI_UNREGISTERNATIVES_ENTRY(env, clazz); -#endif /* USDT2 */ Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz)); //%note jni_2 if (k->oop_is_instance()) { @@ -4012,11 +3065,7 @@ JNI_ENTRY(jint, jni_UnregisterNatives(JNIEnv *env, jclass clazz)) } } } -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, UnregisterNatives__return, 0); -#else /* USDT2 */ HOTSPOT_JNI_UNREGISTERNATIVES_RETURN(0); -#endif /* USDT2 */ return 0; JNI_END @@ -4024,19 +3073,11 @@ JNI_END // Monitor functions // -#ifndef USDT2 -DT_RETURN_MARK_DECL(MonitorEnter, jint); -#else /* USDT2 */ DT_RETURN_MARK_DECL(MonitorEnter, jint , HOTSPOT_JNI_MONITORENTER_RETURN(_ret_ref)); -#endif /* USDT2 */ JNI_ENTRY(jint, jni_MonitorEnter(JNIEnv *env, jobject jobj)) -#ifndef USDT2 - DTRACE_PROBE2(hotspot_jni, MonitorEnter__entry, env, jobj); -#else /* USDT2 */ HOTSPOT_JNI_MONITORENTER_ENTRY(env, jobj); -#endif /* USDT2 */ jint ret = JNI_ERR; DT_RETURN_MARK(MonitorEnter, jint, (const jint&)ret); @@ -4051,19 +3092,11 @@ JNI_ENTRY(jint, jni_MonitorEnter(JNIEnv *env, jobject jobj)) return ret; JNI_END -#ifndef USDT2 -DT_RETURN_MARK_DECL(MonitorExit, jint); -#else /* USDT2 */ DT_RETURN_MARK_DECL(MonitorExit, jint , HOTSPOT_JNI_MONITOREXIT_RETURN(_ret_ref)); -#endif /* USDT2 */ JNI_ENTRY(jint, jni_MonitorExit(JNIEnv *env, jobject jobj)) -#ifndef USDT2 - DTRACE_PROBE2(hotspot_jni, MonitorExit__entry, env, jobj); -#else /* USDT2 */ HOTSPOT_JNI_MONITOREXIT_ENTRY(env, jobj); -#endif /* USDT2 */ jint ret = JNI_ERR; DT_RETURN_MARK(MonitorExit, jint, (const jint&)ret); @@ -4083,20 +3116,12 @@ JNI_END // Extensions // -#ifndef USDT2 -DT_VOID_RETURN_MARK_DECL(GetStringRegion); -#else /* USDT2 */ DT_VOID_RETURN_MARK_DECL(GetStringRegion , HOTSPOT_JNI_GETSTRINGREGION_RETURN()); -#endif /* USDT2 */ JNI_ENTRY(void, jni_GetStringRegion(JNIEnv *env, jstring string, jsize start, jsize len, jchar *buf)) JNIWrapper("GetStringRegion"); -#ifndef USDT2 - DTRACE_PROBE5(hotspot_jni, GetStringRegion__entry, env, string, start, len, buf); -#else /* USDT2 */ HOTSPOT_JNI_GETSTRINGREGION_ENTRY(env, string, start, len, buf); -#endif /* USDT2 */ DT_VOID_RETURN_MARK(GetStringRegion); oop s = JNIHandles::resolve_non_null(string); int s_len = java_lang_String::length(s); @@ -4111,20 +3136,12 @@ JNI_ENTRY(void, jni_GetStringRegion(JNIEnv *env, jstring string, jsize start, js } JNI_END -#ifndef USDT2 -DT_VOID_RETURN_MARK_DECL(GetStringUTFRegion); -#else /* USDT2 */ DT_VOID_RETURN_MARK_DECL(GetStringUTFRegion , HOTSPOT_JNI_GETSTRINGUTFREGION_RETURN()); -#endif /* USDT2 */ JNI_ENTRY(void, jni_GetStringUTFRegion(JNIEnv *env, jstring string, jsize start, jsize len, char *buf)) JNIWrapper("GetStringUTFRegion"); -#ifndef USDT2 - DTRACE_PROBE5(hotspot_jni, GetStringUTFRegion__entry, env, string, start, len, buf); -#else /* USDT2 */ HOTSPOT_JNI_GETSTRINGUTFREGION_ENTRY(env, string, start, len, buf); -#endif /* USDT2 */ DT_VOID_RETURN_MARK(GetStringUTFRegion); oop s = JNIHandles::resolve_non_null(string); int s_len = java_lang_String::length(s); @@ -4150,11 +3167,7 @@ JNI_END JNI_ENTRY(void*, jni_GetPrimitiveArrayCritical(JNIEnv *env, jarray array, jboolean *isCopy)) JNIWrapper("GetPrimitiveArrayCritical"); -#ifndef USDT2 - DTRACE_PROBE3(hotspot_jni, GetPrimitiveArrayCritical__entry, env, array, isCopy); -#else /* USDT2 */ HOTSPOT_JNI_GETPRIMITIVEARRAYCRITICAL_ENTRY(env, array, (uintptr_t *) isCopy); -#endif /* USDT2 */ GC_locker::lock_critical(thread); if (isCopy != NULL) { *isCopy = JNI_FALSE; @@ -4168,39 +3181,23 @@ JNI_ENTRY(void*, jni_GetPrimitiveArrayCritical(JNIEnv *env, jarray array, jboole type = TypeArrayKlass::cast(a->klass())->element_type(); } void* ret = arrayOop(a)->base(type); -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, GetPrimitiveArrayCritical__return, ret); -#else /* USDT2 */ HOTSPOT_JNI_GETPRIMITIVEARRAYCRITICAL_RETURN(ret); -#endif /* USDT2 */ return ret; JNI_END JNI_ENTRY(void, jni_ReleasePrimitiveArrayCritical(JNIEnv *env, jarray array, void *carray, jint mode)) JNIWrapper("ReleasePrimitiveArrayCritical"); -#ifndef USDT2 - DTRACE_PROBE4(hotspot_jni, ReleasePrimitiveArrayCritical__entry, env, array, carray, mode); -#else /* USDT2 */ HOTSPOT_JNI_RELEASEPRIMITIVEARRAYCRITICAL_ENTRY(env, array, carray, mode); -#endif /* USDT2 */ // The array, carray and mode arguments are ignored GC_locker::unlock_critical(thread); -#ifndef USDT2 - DTRACE_PROBE(hotspot_jni, ReleasePrimitiveArrayCritical__return); -#else /* USDT2 */ HOTSPOT_JNI_RELEASEPRIMITIVEARRAYCRITICAL_RETURN(); -#endif /* USDT2 */ JNI_END JNI_ENTRY(const jchar*, jni_GetStringCritical(JNIEnv *env, jstring string, jboolean *isCopy)) JNIWrapper("GetStringCritical"); -#ifndef USDT2 - DTRACE_PROBE3(hotspot_jni, GetStringCritical__entry, env, string, isCopy); -#else /* USDT2 */ HOTSPOT_JNI_GETSTRINGCRITICAL_ENTRY(env, string, (uintptr_t *) isCopy); -#endif /* USDT2 */ GC_locker::lock_critical(thread); if (isCopy != NULL) { *isCopy = JNI_FALSE; @@ -4215,80 +3212,44 @@ JNI_ENTRY(const jchar*, jni_GetStringCritical(JNIEnv *env, jstring string, jbool } else { ret = (jchar*) s_value->base(T_CHAR); } -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, GetStringCritical__return, ret); -#else /* USDT2 */ HOTSPOT_JNI_GETSTRINGCRITICAL_RETURN((uint16_t *) ret); -#endif /* USDT2 */ return ret; JNI_END JNI_ENTRY(void, jni_ReleaseStringCritical(JNIEnv *env, jstring str, const jchar *chars)) JNIWrapper("ReleaseStringCritical"); -#ifndef USDT2 - DTRACE_PROBE3(hotspot_jni, ReleaseStringCritical__entry, env, str, chars); -#else /* USDT2 */ HOTSPOT_JNI_RELEASESTRINGCRITICAL_ENTRY(env, str, (uint16_t *) chars); -#endif /* USDT2 */ // The str and chars arguments are ignored GC_locker::unlock_critical(thread); -#ifndef USDT2 - DTRACE_PROBE(hotspot_jni, ReleaseStringCritical__return); -#else /* USDT2 */ HOTSPOT_JNI_RELEASESTRINGCRITICAL_RETURN(); -#endif /* USDT2 */ JNI_END JNI_ENTRY(jweak, jni_NewWeakGlobalRef(JNIEnv *env, jobject ref)) JNIWrapper("jni_NewWeakGlobalRef"); -#ifndef USDT2 - DTRACE_PROBE2(hotspot_jni, NewWeakGlobalRef__entry, env, ref); -#else /* USDT2 */ HOTSPOT_JNI_NEWWEAKGLOBALREF_ENTRY(env, ref); -#endif /* USDT2 */ Handle ref_handle(thread, JNIHandles::resolve(ref)); jweak ret = JNIHandles::make_weak_global(ref_handle); -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, NewWeakGlobalRef__return, ret); -#else /* USDT2 */ HOTSPOT_JNI_NEWWEAKGLOBALREF_RETURN(ret); -#endif /* USDT2 */ return ret; JNI_END // Must be JNI_ENTRY (with HandleMark) JNI_ENTRY(void, jni_DeleteWeakGlobalRef(JNIEnv *env, jweak ref)) JNIWrapper("jni_DeleteWeakGlobalRef"); -#ifndef USDT2 - DTRACE_PROBE2(hotspot_jni, DeleteWeakGlobalRef__entry, env, ref); -#else /* USDT2 */ HOTSPOT_JNI_DELETEWEAKGLOBALREF_ENTRY(env, ref); -#endif /* USDT2 */ JNIHandles::destroy_weak_global(ref); -#ifndef USDT2 - DTRACE_PROBE(hotspot_jni, DeleteWeakGlobalRef__return); -#else /* USDT2 */ HOTSPOT_JNI_DELETEWEAKGLOBALREF_RETURN(); -#endif /* USDT2 */ JNI_END JNI_QUICK_ENTRY(jboolean, jni_ExceptionCheck(JNIEnv *env)) JNIWrapper("jni_ExceptionCheck"); -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, ExceptionCheck__entry, env); -#else /* USDT2 */ HOTSPOT_JNI_EXCEPTIONCHECK_ENTRY(env); -#endif /* USDT2 */ jni_check_async_exceptions(thread); jboolean ret = (thread->has_pending_exception()) ? JNI_TRUE : JNI_FALSE; -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, ExceptionCheck__return, ret); -#else /* USDT2 */ HOTSPOT_JNI_EXCEPTIONCHECK_RETURN(ret); -#endif /* USDT2 */ return ret; JNI_END @@ -4348,8 +3309,23 @@ static bool initializeDirectBufferSupport(JNIEnv* env, JavaThread* thread) { // Get needed field and method IDs directByteBufferConstructor = env->GetMethodID(directByteBufferClass, "", "(JI)V"); + if (env->ExceptionCheck()) { + env->ExceptionClear(); + directBufferSupportInitializeFailed = 1; + return false; + } directBufferAddressField = env->GetFieldID(bufferClass, "address", "J"); + if (env->ExceptionCheck()) { + env->ExceptionClear(); + directBufferSupportInitializeFailed = 1; + return false; + } bufferCapacityField = env->GetFieldID(bufferClass, "capacity", "I"); + if (env->ExceptionCheck()) { + env->ExceptionClear(); + directBufferSupportInitializeFailed = 1; + return false; + } if ((directByteBufferConstructor == NULL) || (directBufferAddressField == NULL) || @@ -4380,19 +3356,11 @@ extern "C" jobject JNICALL jni_NewDirectByteBuffer(JNIEnv *env, void* address, j JavaThread* thread = JavaThread::thread_from_jni_environment(env); JNIWrapper("jni_NewDirectByteBuffer"); -#ifndef USDT2 - DTRACE_PROBE3(hotspot_jni, NewDirectByteBuffer__entry, env, address, capacity); -#else /* USDT2 */ HOTSPOT_JNI_NEWDIRECTBYTEBUFFER_ENTRY(env, address, capacity); -#endif /* USDT2 */ if (!directBufferSupportInitializeEnded) { if (!initializeDirectBufferSupport(env, thread)) { -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, NewDirectByteBuffer__return, NULL); -#else /* USDT2 */ HOTSPOT_JNI_NEWDIRECTBYTEBUFFER_RETURN(NULL); -#endif /* USDT2 */ return NULL; } } @@ -4403,20 +3371,12 @@ extern "C" jobject JNICALL jni_NewDirectByteBuffer(JNIEnv *env, void* address, j // takes int capacity jint cap = (jint) capacity; jobject ret = env->NewObject(directByteBufferClass, directByteBufferConstructor, addr, cap); -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, NewDirectByteBuffer__return, ret); -#else /* USDT2 */ HOTSPOT_JNI_NEWDIRECTBYTEBUFFER_RETURN(ret); -#endif /* USDT2 */ return ret; } -#ifndef USDT2 -DT_RETURN_MARK_DECL(GetDirectBufferAddress, void*); -#else /* USDT2 */ DT_RETURN_MARK_DECL(GetDirectBufferAddress, void* , HOTSPOT_JNI_GETDIRECTBUFFERADDRESS_RETURN((void*) _ret_ref)); -#endif /* USDT2 */ extern "C" void* JNICALL jni_GetDirectBufferAddress(JNIEnv *env, jobject buf) { @@ -4424,11 +3384,7 @@ extern "C" void* JNICALL jni_GetDirectBufferAddress(JNIEnv *env, jobject buf) JavaThread* thread = JavaThread::thread_from_jni_environment(env); JNIWrapper("jni_GetDirectBufferAddress"); -#ifndef USDT2 - DTRACE_PROBE2(hotspot_jni, GetDirectBufferAddress__entry, env, buf); -#else /* USDT2 */ HOTSPOT_JNI_GETDIRECTBUFFERADDRESS_ENTRY(env, buf); -#endif /* USDT2 */ void* ret = NULL; DT_RETURN_MARK(GetDirectBufferAddress, void*, (const void*&)ret); @@ -4446,12 +3402,8 @@ extern "C" void* JNICALL jni_GetDirectBufferAddress(JNIEnv *env, jobject buf) return ret; } -#ifndef USDT2 -DT_RETURN_MARK_DECL(GetDirectBufferCapacity, jlong); -#else /* USDT2 */ DT_RETURN_MARK_DECL(GetDirectBufferCapacity, jlong , HOTSPOT_JNI_GETDIRECTBUFFERCAPACITY_RETURN(_ret_ref)); -#endif /* USDT2 */ extern "C" jlong JNICALL jni_GetDirectBufferCapacity(JNIEnv *env, jobject buf) { @@ -4459,11 +3411,7 @@ extern "C" jlong JNICALL jni_GetDirectBufferCapacity(JNIEnv *env, jobject buf) JavaThread* thread = JavaThread::thread_from_jni_environment(env); JNIWrapper("jni_GetDirectBufferCapacity"); -#ifndef USDT2 - DTRACE_PROBE2(hotspot_jni, GetDirectBufferCapacity__entry, env, buf); -#else /* USDT2 */ HOTSPOT_JNI_GETDIRECTBUFFERCAPACITY_ENTRY(env, buf); -#endif /* USDT2 */ jlong ret = -1; DT_RETURN_MARK(GetDirectBufferCapacity, jlong, (const jlong&)ret); @@ -4490,16 +3438,8 @@ extern "C" jlong JNICALL jni_GetDirectBufferCapacity(JNIEnv *env, jobject buf) JNI_LEAF(jint, jni_GetVersion(JNIEnv *env)) JNIWrapper("GetVersion"); -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, GetVersion__entry, env); -#else /* USDT2 */ HOTSPOT_JNI_GETVERSION_ENTRY(env); -#endif /* USDT2 */ -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, GetVersion__return, CurrentVersion); -#else /* USDT2 */ HOTSPOT_JNI_GETVERSION_RETURN(CurrentVersion); -#endif /* USDT2 */ return CurrentVersion; JNI_END @@ -4507,17 +3447,9 @@ extern struct JavaVM_ main_vm; JNI_LEAF(jint, jni_GetJavaVM(JNIEnv *env, JavaVM **vm)) JNIWrapper("jni_GetJavaVM"); -#ifndef USDT2 - DTRACE_PROBE2(hotspot_jni, GetJavaVM__entry, env, vm); -#else /* USDT2 */ HOTSPOT_JNI_GETJAVAVM_ENTRY(env, (void **) vm); -#endif /* USDT2 */ *vm = (JavaVM *)(&main_vm); -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, GetJavaVM__return, JNI_OK); -#else /* USDT2 */ HOTSPOT_JNI_GETJAVAVM_RETURN(JNI_OK); -#endif /* USDT2 */ return JNI_OK; JNI_END @@ -4895,20 +3827,11 @@ struct JavaVM_ main_vm = {&jni_InvokeInterface}; #define JAVASTACKSIZE (400 * 1024) /* Default size of a thread java stack */ enum { VERIFY_NONE, VERIFY_REMOTE, VERIFY_ALL }; -#ifndef USDT2 -HS_DTRACE_PROBE_DECL1(hotspot_jni, GetDefaultJavaVMInitArgs__entry, void*); -DT_RETURN_MARK_DECL(GetDefaultJavaVMInitArgs, jint); -#else /* USDT2 */ DT_RETURN_MARK_DECL(GetDefaultJavaVMInitArgs, jint , HOTSPOT_JNI_GETDEFAULTJAVAVMINITARGS_RETURN(_ret_ref)); -#endif /* USDT2 */ _JNI_IMPORT_OR_EXPORT_ jint JNICALL JNI_GetDefaultJavaVMInitArgs(void *args_) { -#ifndef USDT2 - HS_DTRACE_PROBE1(hotspot_jni, GetDefaultJavaVMInitArgs__entry, args_); -#else /* USDT2 */ HOTSPOT_JNI_GETDEFAULTJAVAVMINITARGS_ENTRY(args_); -#endif /* USDT2 */ JDK1_1InitArgs *args = (JDK1_1InitArgs *)args_; jint ret = JNI_ERR; DT_RETURN_MARK(GetDefaultJavaVMInitArgs, jint, (const jint&)ret); @@ -4994,20 +3917,11 @@ void execute_internal_vm_tests() { #endif -#ifndef USDT2 -HS_DTRACE_PROBE_DECL3(hotspot_jni, CreateJavaVM__entry, vm, penv, args); -DT_RETURN_MARK_DECL(CreateJavaVM, jint); -#else /* USDT2 */ DT_RETURN_MARK_DECL(CreateJavaVM, jint , HOTSPOT_JNI_CREATEJAVAVM_RETURN(_ret_ref)); -#endif /* USDT2 */ _JNI_IMPORT_OR_EXPORT_ jint JNICALL JNI_CreateJavaVM(JavaVM **vm, void **penv, void *args) { -#ifndef USDT2 - HS_DTRACE_PROBE3(hotspot_jni, CreateJavaVM__entry, vm, penv, args); -#else /* USDT2 */ HOTSPOT_JNI_CREATEJAVAVM_ENTRY((void **) vm, penv, args); -#endif /* USDT2 */ jint result = JNI_ERR; DT_RETURN_MARK(CreateJavaVM, jint, (const jint&)result); @@ -5129,50 +4043,30 @@ _JNI_IMPORT_OR_EXPORT_ jint JNICALL JNI_CreateJavaVM(JavaVM **vm, void **penv, v return result; } -#ifndef USDT2 -HS_DTRACE_PROBE_DECL3(hotspot_jni, GetCreatedJavaVMs__entry, \ - JavaVM**, jsize, jsize*); -HS_DTRACE_PROBE_DECL1(hotspot_jni, GetCreatedJavaVMs__return, jint); -#endif /* !USDT2 */ _JNI_IMPORT_OR_EXPORT_ jint JNICALL JNI_GetCreatedJavaVMs(JavaVM **vm_buf, jsize bufLen, jsize *numVMs) { // See bug 4367188, the wrapper can sometimes cause VM crashes // JNIWrapper("GetCreatedJavaVMs"); -#ifndef USDT2 - HS_DTRACE_PROBE3(hotspot_jni, GetCreatedJavaVMs__entry, \ - vm_buf, bufLen, numVMs); -#else /* USDT2 */ + HOTSPOT_JNI_GETCREATEDJAVAVMS_ENTRY((void **) vm_buf, bufLen, (uintptr_t *) numVMs); -#endif /* USDT2 */ + if (vm_created) { if (numVMs != NULL) *numVMs = 1; if (bufLen > 0) *vm_buf = (JavaVM *)(&main_vm); } else { if (numVMs != NULL) *numVMs = 0; } -#ifndef USDT2 - HS_DTRACE_PROBE1(hotspot_jni, GetCreatedJavaVMs__return, JNI_OK); -#else /* USDT2 */ HOTSPOT_JNI_GETCREATEDJAVAVMS_RETURN(JNI_OK); -#endif /* USDT2 */ return JNI_OK; } extern "C" { -#ifndef USDT2 -DT_RETURN_MARK_DECL(DestroyJavaVM, jint); -#else /* USDT2 */ DT_RETURN_MARK_DECL(DestroyJavaVM, jint , HOTSPOT_JNI_DESTROYJAVAVM_RETURN(_ret_ref)); -#endif /* USDT2 */ jint JNICALL jni_DestroyJavaVM(JavaVM *vm) { -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, DestroyJavaVM__entry, vm); -#else /* USDT2 */ HOTSPOT_JNI_DESTROYJAVAVM_ENTRY(vm); -#endif /* USDT2 */ jint res = JNI_ERR; DT_RETURN_MARK(DestroyJavaVM, jint, (const jint&)res); @@ -5324,58 +4218,34 @@ static jint attach_current_thread(JavaVM *vm, void **penv, void *_args, bool dae jint JNICALL jni_AttachCurrentThread(JavaVM *vm, void **penv, void *_args) { -#ifndef USDT2 - DTRACE_PROBE3(hotspot_jni, AttachCurrentThread__entry, vm, penv, _args); -#else /* USDT2 */ HOTSPOT_JNI_ATTACHCURRENTTHREAD_ENTRY(vm, penv, _args); -#endif /* USDT2 */ if (!vm_created) { -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, AttachCurrentThread__return, JNI_ERR); -#else /* USDT2 */ HOTSPOT_JNI_ATTACHCURRENTTHREAD_RETURN((uint32_t) JNI_ERR); -#endif /* USDT2 */ return JNI_ERR; } JNIWrapper("AttachCurrentThread"); jint ret = attach_current_thread(vm, penv, _args, false); -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, AttachCurrentThread__return, ret); -#else /* USDT2 */ HOTSPOT_JNI_ATTACHCURRENTTHREAD_RETURN(ret); -#endif /* USDT2 */ return ret; } jint JNICALL jni_DetachCurrentThread(JavaVM *vm) { -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, DetachCurrentThread__entry, vm); -#else /* USDT2 */ HOTSPOT_JNI_DETACHCURRENTTHREAD_ENTRY(vm); -#endif /* USDT2 */ VM_Exit::block_if_vm_exited(); JNIWrapper("DetachCurrentThread"); // If the thread has been deattacted the operations is a no-op if (ThreadLocalStorage::thread() == NULL) { -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, DetachCurrentThread__return, JNI_OK); -#else /* USDT2 */ HOTSPOT_JNI_DETACHCURRENTTHREAD_RETURN(JNI_OK); -#endif /* USDT2 */ return JNI_OK; } JavaThread* thread = JavaThread::current(); if (thread->has_last_Java_frame()) { -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, DetachCurrentThread__return, JNI_ERR); -#else /* USDT2 */ HOTSPOT_JNI_DETACHCURRENTTHREAD_RETURN((uint32_t) JNI_ERR); -#endif /* USDT2 */ // Can't detach a thread that's running java, that can't work. return JNI_ERR; } @@ -5396,27 +4266,15 @@ jint JNICALL jni_DetachCurrentThread(JavaVM *vm) { thread->exit(false, JavaThread::jni_detach); delete thread; -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, DetachCurrentThread__return, JNI_OK); -#else /* USDT2 */ HOTSPOT_JNI_DETACHCURRENTTHREAD_RETURN(JNI_OK); -#endif /* USDT2 */ return JNI_OK; } -#ifndef USDT2 -DT_RETURN_MARK_DECL(GetEnv, jint); -#else /* USDT2 */ DT_RETURN_MARK_DECL(GetEnv, jint , HOTSPOT_JNI_GETENV_RETURN(_ret_ref)); -#endif /* USDT2 */ jint JNICALL jni_GetEnv(JavaVM *vm, void **penv, jint version) { -#ifndef USDT2 - DTRACE_PROBE3(hotspot_jni, GetEnv__entry, vm, penv, version); -#else /* USDT2 */ HOTSPOT_JNI_GETENV_ENTRY(vm, penv, version); -#endif /* USDT2 */ jint ret = JNI_ERR; DT_RETURN_MARK(GetEnv, jint, (const jint&)ret); @@ -5470,27 +4328,15 @@ jint JNICALL jni_GetEnv(JavaVM *vm, void **penv, jint version) { jint JNICALL jni_AttachCurrentThreadAsDaemon(JavaVM *vm, void **penv, void *_args) { -#ifndef USDT2 - DTRACE_PROBE3(hotspot_jni, AttachCurrentThreadAsDaemon__entry, vm, penv, _args); -#else /* USDT2 */ HOTSPOT_JNI_ATTACHCURRENTTHREADASDAEMON_ENTRY(vm, penv, _args); -#endif /* USDT2 */ if (!vm_created) { -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, AttachCurrentThreadAsDaemon__return, JNI_ERR); -#else /* USDT2 */ HOTSPOT_JNI_ATTACHCURRENTTHREADASDAEMON_RETURN((uint32_t) JNI_ERR); -#endif /* USDT2 */ return JNI_ERR; } JNIWrapper("AttachCurrentThreadAsDaemon"); jint ret = attach_current_thread(vm, penv, _args, true); -#ifndef USDT2 - DTRACE_PROBE1(hotspot_jni, AttachCurrentThreadAsDaemon__return, ret); -#else /* USDT2 */ HOTSPOT_JNI_ATTACHCURRENTTHREADASDAEMON_RETURN(ret); -#endif /* USDT2 */ return ret; } diff --git a/hotspot/src/share/vm/prims/jvm.cpp b/hotspot/src/share/vm/prims/jvm.cpp index 0eec6fb5dda..e26fd27d481 100644 --- a/hotspot/src/share/vm/prims/jvm.cpp +++ b/hotspot/src/share/vm/prims/jvm.cpp @@ -85,12 +85,6 @@ #include -#ifndef USDT2 -HS_DTRACE_PROBE_DECL1(hotspot, thread__sleep__begin, long long); -HS_DTRACE_PROBE_DECL1(hotspot, thread__sleep__end, int); -HS_DTRACE_PROBE_DECL0(hotspot, thread__yield); -#endif /* !USDT2 */ - /* NOTE about use of any ctor or function call that can trigger a safepoint/GC: such ctors and calls MUST NOT come between an oop declaration/init and its @@ -3011,11 +3005,8 @@ JVM_END JVM_ENTRY(void, JVM_Yield(JNIEnv *env, jclass threadClass)) JVMWrapper("JVM_Yield"); if (os::dont_yield()) return; -#ifndef USDT2 - HS_DTRACE_PROBE0(hotspot, thread__yield); -#else /* USDT2 */ HOTSPOT_THREAD_YIELD(); -#endif /* USDT2 */ + // When ConvertYieldToSleep is off (default), this matches the classic VM use of yield. // Critical for similar threading behaviour if (ConvertYieldToSleep) { @@ -3041,12 +3032,7 @@ JVM_ENTRY(void, JVM_Sleep(JNIEnv* env, jclass threadClass, jlong millis)) // And set new thread state to SLEEPING. JavaThreadSleepState jtss(thread); -#ifndef USDT2 - HS_DTRACE_PROBE1(hotspot, thread__sleep__begin, millis); -#else /* USDT2 */ - HOTSPOT_THREAD_SLEEP_BEGIN( - millis); -#endif /* USDT2 */ + HOTSPOT_THREAD_SLEEP_BEGIN(millis); EventThreadSleep event; @@ -3074,12 +3060,8 @@ JVM_ENTRY(void, JVM_Sleep(JNIEnv* env, jclass threadClass, jlong millis)) event.set_time(millis); event.commit(); } -#ifndef USDT2 - HS_DTRACE_PROBE1(hotspot, thread__sleep__end,1); -#else /* USDT2 */ - HOTSPOT_THREAD_SLEEP_END( - 1); -#endif /* USDT2 */ + HOTSPOT_THREAD_SLEEP_END(1); + // TODO-FIXME: THROW_MSG returns which means we will not call set_state() // to properly restore the thread state. That's likely wrong. THROW_MSG(vmSymbols::java_lang_InterruptedException(), "sleep interrupted"); @@ -3091,12 +3073,7 @@ JVM_ENTRY(void, JVM_Sleep(JNIEnv* env, jclass threadClass, jlong millis)) event.set_time(millis); event.commit(); } -#ifndef USDT2 - HS_DTRACE_PROBE1(hotspot, thread__sleep__end,0); -#else /* USDT2 */ - HOTSPOT_THREAD_SLEEP_END( - 0); -#endif /* USDT2 */ + HOTSPOT_THREAD_SLEEP_END(0); JVM_END JVM_ENTRY(jobject, JVM_CurrentThread(JNIEnv* env, jclass threadClass)) diff --git a/hotspot/src/share/vm/prims/jvmtiEnv.cpp b/hotspot/src/share/vm/prims/jvmtiEnv.cpp index 6a197a84996..5aba54b6ca9 100644 --- a/hotspot/src/share/vm/prims/jvmtiEnv.cpp +++ b/hotspot/src/share/vm/prims/jvmtiEnv.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -999,8 +999,9 @@ JvmtiEnv::GetOwnedMonitorInfo(JavaThread* java_thread, jint* owned_monitor_count GrowableArray *owned_monitors_list = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(1, true); - uint32_t debug_bits = 0; - if (is_thread_fully_suspended(java_thread, true, &debug_bits)) { + // It is only safe to perform the direct operation on the current + // thread. All other usage needs to use a vm-safepoint-op for safety. + if (java_thread == calling_thread) { err = get_owned_monitors(calling_thread, java_thread, owned_monitors_list); } else { // JVMTI get monitors info at safepoint. Do not require target thread to @@ -1044,8 +1045,9 @@ JvmtiEnv::GetOwnedMonitorStackDepthInfo(JavaThread* java_thread, jint* monitor_i GrowableArray *owned_monitors_list = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(1, true); - uint32_t debug_bits = 0; - if (is_thread_fully_suspended(java_thread, true, &debug_bits)) { + // It is only safe to perform the direct operation on the current + // thread. All other usage needs to use a vm-safepoint-op for safety. + if (java_thread == calling_thread) { err = get_owned_monitors(calling_thread, java_thread, owned_monitors_list); } else { // JVMTI get owned monitors info at safepoint. Do not require target thread to @@ -1086,9 +1088,11 @@ JvmtiEnv::GetOwnedMonitorStackDepthInfo(JavaThread* java_thread, jint* monitor_i jvmtiError JvmtiEnv::GetCurrentContendedMonitor(JavaThread* java_thread, jobject* monitor_ptr) { jvmtiError err = JVMTI_ERROR_NONE; - uint32_t debug_bits = 0; JavaThread* calling_thread = JavaThread::current(); - if (is_thread_fully_suspended(java_thread, true, &debug_bits)) { + + // It is only safe to perform the direct operation on the current + // thread. All other usage needs to use a vm-safepoint-op for safety. + if (java_thread == calling_thread) { err = get_current_contended_monitor(calling_thread, java_thread, monitor_ptr); } else { // get contended monitor information at safepoint. @@ -1297,8 +1301,10 @@ JvmtiEnv::GetThreadGroupChildren(jthreadGroup group, jint* thread_count_ptr, jth jvmtiError JvmtiEnv::GetStackTrace(JavaThread* java_thread, jint start_depth, jint max_frame_count, jvmtiFrameInfo* frame_buffer, jint* count_ptr) { jvmtiError err = JVMTI_ERROR_NONE; - uint32_t debug_bits = 0; - if (is_thread_fully_suspended(java_thread, true, &debug_bits)) { + + // It is only safe to perform the direct operation on the current + // thread. All other usage needs to use a vm-safepoint-op for safety. + if (java_thread == JavaThread::current()) { err = get_stack_trace(java_thread, start_depth, max_frame_count, frame_buffer, count_ptr); } else { // JVMTI get stack trace at safepoint. Do not require target thread to diff --git a/hotspot/src/share/vm/prims/jvmtiEnvBase.hpp b/hotspot/src/share/vm/prims/jvmtiEnvBase.hpp index 0682118c88a..0f9495945ec 100644 --- a/hotspot/src/share/vm/prims/jvmtiEnvBase.hpp +++ b/hotspot/src/share/vm/prims/jvmtiEnvBase.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -356,8 +356,12 @@ public: } VMOp_Type type() const { return VMOp_GetOwnedMonitorInfo; } void doit() { - ((JvmtiEnvBase *)_env)->get_owned_monitors(_calling_thread, _java_thread, - _owned_monitors_list); + _result = JVMTI_ERROR_THREAD_NOT_ALIVE; + if (Threads::includes(_java_thread) && !_java_thread->is_exiting() + && _java_thread->threadObj() != NULL) { + _result = ((JvmtiEnvBase *)_env)->get_owned_monitors(_calling_thread, _java_thread, + _owned_monitors_list); + } } jvmtiError result() { return _result; } }; @@ -439,9 +443,13 @@ public: jvmtiError result() { return _result; } VMOp_Type type() const { return VMOp_GetStackTrace; } void doit() { - _result = ((JvmtiEnvBase *)_env)->get_stack_trace(_java_thread, - _start_depth, _max_count, - _frame_buffer, _count_ptr); + _result = JVMTI_ERROR_THREAD_NOT_ALIVE; + if (Threads::includes(_java_thread) && !_java_thread->is_exiting() + && _java_thread->threadObj() != NULL) { + _result = ((JvmtiEnvBase *)_env)->get_stack_trace(_java_thread, + _start_depth, _max_count, + _frame_buffer, _count_ptr); + } } }; diff --git a/hotspot/src/share/vm/prims/unsafe.cpp b/hotspot/src/share/vm/prims/unsafe.cpp index 8daafcd8949..d7885ff6ad5 100644 --- a/hotspot/src/share/vm/prims/unsafe.cpp +++ b/hotspot/src/share/vm/prims/unsafe.cpp @@ -44,11 +44,6 @@ * Implementation of class sun.misc.Unsafe */ -#ifndef USDT2 -HS_DTRACE_PROBE_DECL3(hotspot, thread__park__begin, uintptr_t, int, long long); -HS_DTRACE_PROBE_DECL1(hotspot, thread__park__end, uintptr_t); -HS_DTRACE_PROBE_DECL1(hotspot, thread__unpark, uintptr_t); -#endif /* !USDT2 */ #define MAX_OBJECT_SIZE \ ( arrayOopDesc::header_size(T_DOUBLE) * HeapWordSize \ @@ -861,6 +856,11 @@ static inline void throw_new(JNIEnv *env, const char *ename) { strcpy(buf, "java/lang/"); strcat(buf, ename); jclass cls = env->FindClass(buf); + if (env->ExceptionCheck()) { + env->ExceptionClear(); + tty->print_cr("Unsafe: cannot throw %s because FindClass has failed", buf); + return; + } char* msg = NULL; env->ThrowNew(cls, msg); } @@ -1209,20 +1209,12 @@ UNSAFE_END UNSAFE_ENTRY(void, Unsafe_Park(JNIEnv *env, jobject unsafe, jboolean isAbsolute, jlong time)) UnsafeWrapper("Unsafe_Park"); EventThreadPark event; -#ifndef USDT2 - HS_DTRACE_PROBE3(hotspot, thread__park__begin, thread->parker(), (int) isAbsolute, time); -#else /* USDT2 */ - HOTSPOT_THREAD_PARK_BEGIN( - (uintptr_t) thread->parker(), (int) isAbsolute, time); -#endif /* USDT2 */ + HOTSPOT_THREAD_PARK_BEGIN((uintptr_t) thread->parker(), (int) isAbsolute, time); + JavaThreadParkedState jtps(thread, time != 0); thread->parker()->park(isAbsolute != 0, time); -#ifndef USDT2 - HS_DTRACE_PROBE1(hotspot, thread__park__end, thread->parker()); -#else /* USDT2 */ - HOTSPOT_THREAD_PARK_END( - (uintptr_t) thread->parker()); -#endif /* USDT2 */ + + HOTSPOT_THREAD_PARK_END((uintptr_t) thread->parker()); if (event.should_commit()) { oop obj = thread->current_park_blocker(); event.set_klass((obj != NULL) ? obj->klass() : NULL); @@ -1261,12 +1253,7 @@ UNSAFE_ENTRY(void, Unsafe_Unpark(JNIEnv *env, jobject unsafe, jobject jthread)) } } if (p != NULL) { -#ifndef USDT2 - HS_DTRACE_PROBE1(hotspot, thread__unpark, p); -#else /* USDT2 */ - HOTSPOT_THREAD_UNPARK( - (uintptr_t) p); -#endif /* USDT2 */ + HOTSPOT_THREAD_UNPARK((uintptr_t) p); p->unpark(); } UNSAFE_END diff --git a/hotspot/src/share/vm/prims/whitebox.cpp b/hotspot/src/share/vm/prims/whitebox.cpp index 56919990889..d2d5fadb024 100644 --- a/hotspot/src/share/vm/prims/whitebox.cpp +++ b/hotspot/src/share/vm/prims/whitebox.cpp @@ -316,9 +316,10 @@ WB_END WB_ENTRY(jint, WB_DeoptimizeMethod(JNIEnv* env, jobject o, jobject method, jboolean is_osr)) jmethodID jmid = reflected_method_to_jmid(thread, env, method); + int result = 0; + CHECK_JNI_EXCEPTION_(env, result); MutexLockerEx mu(Compile_lock); methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); - int result = 0; nmethod* code; if (is_osr) { int bci = InvocationEntryBci; @@ -344,6 +345,7 @@ WB_END WB_ENTRY(jboolean, WB_IsMethodCompiled(JNIEnv* env, jobject o, jobject method, jboolean is_osr)) jmethodID jmid = reflected_method_to_jmid(thread, env, method); + CHECK_JNI_EXCEPTION_(env, JNI_FALSE); MutexLockerEx mu(Compile_lock); methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code(); @@ -355,6 +357,7 @@ WB_END WB_ENTRY(jboolean, WB_IsMethodCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level, jboolean is_osr)) jmethodID jmid = reflected_method_to_jmid(thread, env, method); + CHECK_JNI_EXCEPTION_(env, JNI_FALSE); MutexLockerEx mu(Compile_lock); methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); if (is_osr) { @@ -366,6 +369,7 @@ WB_END WB_ENTRY(jboolean, WB_IsMethodQueuedForCompilation(JNIEnv* env, jobject o, jobject method)) jmethodID jmid = reflected_method_to_jmid(thread, env, method); + CHECK_JNI_EXCEPTION_(env, JNI_FALSE); MutexLockerEx mu(Compile_lock); methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); return mh->queued_for_compilation(); @@ -373,6 +377,7 @@ WB_END WB_ENTRY(jint, WB_GetMethodCompilationLevel(JNIEnv* env, jobject o, jobject method, jboolean is_osr)) jmethodID jmid = reflected_method_to_jmid(thread, env, method); + CHECK_JNI_EXCEPTION_(env, CompLevel_none); methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code(); return (code != NULL ? code->comp_level() : CompLevel_none); @@ -380,6 +385,7 @@ WB_END WB_ENTRY(void, WB_MakeMethodNotCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level, jboolean is_osr)) jmethodID jmid = reflected_method_to_jmid(thread, env, method); + CHECK_JNI_EXCEPTION(env); methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); if (is_osr) { mh->set_not_osr_compilable(comp_level, true /* report */, "WhiteBox"); @@ -390,6 +396,7 @@ WB_END WB_ENTRY(jint, WB_GetMethodEntryBci(JNIEnv* env, jobject o, jobject method)) jmethodID jmid = reflected_method_to_jmid(thread, env, method); + CHECK_JNI_EXCEPTION_(env, InvocationEntryBci); methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); nmethod* code = mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false); return (code != NULL && code->is_osr_method() ? code->osr_entry_bci() : InvocationEntryBci); @@ -397,6 +404,7 @@ WB_END WB_ENTRY(jboolean, WB_TestSetDontInlineMethod(JNIEnv* env, jobject o, jobject method, jboolean value)) jmethodID jmid = reflected_method_to_jmid(thread, env, method); + CHECK_JNI_EXCEPTION_(env, JNI_FALSE); methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); bool result = mh->dont_inline(); mh->set_dont_inline(value == JNI_TRUE); @@ -414,6 +422,7 @@ WB_END WB_ENTRY(jboolean, WB_TestSetForceInlineMethod(JNIEnv* env, jobject o, jobject method, jboolean value)) jmethodID jmid = reflected_method_to_jmid(thread, env, method); + CHECK_JNI_EXCEPTION_(env, JNI_FALSE); methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); bool result = mh->force_inline(); mh->set_force_inline(value == JNI_TRUE); @@ -422,6 +431,7 @@ WB_END WB_ENTRY(jboolean, WB_EnqueueMethodForCompilation(JNIEnv* env, jobject o, jobject method, jint comp_level, jint bci)) jmethodID jmid = reflected_method_to_jmid(thread, env, method); + CHECK_JNI_EXCEPTION_(env, JNI_FALSE); methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); nmethod* nm = CompileBroker::compile_method(mh, bci, comp_level, mh, mh->invocation_count(), "WhiteBox", THREAD); MutexLockerEx mu(Compile_lock); @@ -430,6 +440,7 @@ WB_END WB_ENTRY(void, WB_ClearMethodState(JNIEnv* env, jobject o, jobject method)) jmethodID jmid = reflected_method_to_jmid(thread, env, method); + CHECK_JNI_EXCEPTION(env); methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); MutexLockerEx mu(Compile_lock); MethodData* mdo = mh->method_data(); @@ -616,14 +627,18 @@ JVM_ENTRY(void, JVM_RegisterWhiteBoxMethods(JNIEnv* env, jclass wbclass)) bool result = true; // one by one registration natives for exception catching jclass exceptionKlass = env->FindClass(vmSymbols::java_lang_NoSuchMethodError()->as_C_string()); + CHECK_JNI_EXCEPTION(env); for (int i = 0, n = sizeof(methods) / sizeof(methods[0]); i < n; ++i) { if (env->RegisterNatives(wbclass, methods + i, 1) != 0) { result = false; - if (env->ExceptionCheck() && env->IsInstanceOf(env->ExceptionOccurred(), exceptionKlass)) { - // j.l.NoSuchMethodError is thrown when a method can't be found or a method is not native - // ignoring the exception - tty->print_cr("Warning: 'NoSuchMethodError' on register of sun.hotspot.WhiteBox::%s%s", methods[i].name, methods[i].signature); + jthrowable throwable_obj = env->ExceptionOccurred(); + if (throwable_obj != NULL) { env->ExceptionClear(); + if (env->IsInstanceOf(throwable_obj, exceptionKlass)) { + // j.l.NoSuchMethodError is thrown when a method can't be found or a method is not native + // ignoring the exception + tty->print_cr("Warning: 'NoSuchMethodError' on register of sun.hotspot.WhiteBox::%s%s", methods[i].name, methods[i].signature); + } } else { // register is failed w/o exception or w/ unexpected exception tty->print_cr("Warning: unexpected error on register of sun.hotspot.WhiteBox::%s%s. All methods will be unregistered", methods[i].name, methods[i].signature); diff --git a/hotspot/src/share/vm/prims/whitebox.hpp b/hotspot/src/share/vm/prims/whitebox.hpp index f78117414cf..a6e27b49055 100644 --- a/hotspot/src/share/vm/prims/whitebox.hpp +++ b/hotspot/src/share/vm/prims/whitebox.hpp @@ -36,6 +36,24 @@ #define WB_END JNI_END #define WB_METHOD_DECLARE(result_type) extern "C" result_type JNICALL +#define CHECK_JNI_EXCEPTION_(env, value) \ + do { \ + JavaThread* THREAD = JavaThread::thread_from_jni_environment(env); \ + if (HAS_PENDING_EXCEPTION) { \ + CLEAR_PENDING_EXCEPTION; \ + return(value); \ + } \ + } while (0) + +#define CHECK_JNI_EXCEPTION(env) \ + do { \ + JavaThread* THREAD = JavaThread::thread_from_jni_environment(env); \ + if (HAS_PENDING_EXCEPTION) { \ + CLEAR_PENDING_EXCEPTION; \ + return; \ + } \ + } while (0) + class WhiteBox : public AllStatic { private: static bool _used; diff --git a/hotspot/src/share/vm/runtime/arguments.cpp b/hotspot/src/share/vm/runtime/arguments.cpp index 5a6de983469..b908439bcd9 100644 --- a/hotspot/src/share/vm/runtime/arguments.cpp +++ b/hotspot/src/share/vm/runtime/arguments.cpp @@ -2388,6 +2388,10 @@ bool Arguments::check_vm_args_consistency() { status &= verify_interval(NmethodSweepFraction, 1, ReservedCodeCacheSize/K, "NmethodSweepFraction"); status &= verify_interval(NmethodSweepActivity, 0, 2000, "NmethodSweepActivity"); + // TieredCompilation needs at least 2 compiler threads. + const int num_min_compiler_threads = (TieredCompilation) ? 2 : 1; + status &=verify_min_value(CICompilerCount, num_min_compiler_threads, "CICompilerCount"); + return status; } diff --git a/hotspot/src/share/vm/runtime/deoptimization.cpp b/hotspot/src/share/vm/runtime/deoptimization.cpp index 69b9e86c582..b1b078f6491 100644 --- a/hotspot/src/share/vm/runtime/deoptimization.cpp +++ b/hotspot/src/share/vm/runtime/deoptimization.cpp @@ -1489,6 +1489,7 @@ JRT_ENTRY(void, Deoptimization::uncommon_trap_inner(JavaThread* thread, jint tra bool maybe_prior_trap = false; bool maybe_prior_recompile = false; pdata = query_update_method_data(trap_mdo, trap_bci, reason, + nm->method(), //outputs: this_trap_count, maybe_prior_trap, @@ -1534,7 +1535,7 @@ JRT_ENTRY(void, Deoptimization::uncommon_trap_inner(JavaThread* thread, jint tra } // Go back to the compiler if there are too many traps in this method. - if (this_trap_count >= (uint)PerMethodTrapLimit) { + if (this_trap_count >= per_method_trap_limit(reason)) { // If there are too many traps in this method, force a recompile. // This will allow the compiler to see the limit overflow, and // take corrective action, if possible. @@ -1622,6 +1623,7 @@ ProfileData* Deoptimization::query_update_method_data(MethodData* trap_mdo, int trap_bci, Deoptimization::DeoptReason reason, + Method* compiled_method, //outputs: uint& ret_this_trap_count, bool& ret_maybe_prior_trap, @@ -1645,9 +1647,16 @@ Deoptimization::query_update_method_data(MethodData* trap_mdo, // Find the profile data for this BCI. If there isn't one, // try to allocate one from the MDO's set of spares. // This will let us detect a repeated trap at this point. - pdata = trap_mdo->allocate_bci_to_data(trap_bci); + pdata = trap_mdo->allocate_bci_to_data(trap_bci, reason_is_speculate(reason) ? compiled_method : NULL); if (pdata != NULL) { + if (reason_is_speculate(reason) && !pdata->is_SpeculativeTrapData()) { + if (LogCompilation && xtty != NULL) { + ttyLocker ttyl; + // no more room for speculative traps in this MDO + xtty->elem("speculative_traps_oom"); + } + } // Query the trap state of this profile datum. int tstate0 = pdata->trap_state(); if (!trap_state_has_reason(tstate0, per_bc_reason)) @@ -1685,8 +1694,10 @@ Deoptimization::update_method_data_from_interpreter(MethodData* trap_mdo, int tr uint ignore_this_trap_count; bool ignore_maybe_prior_trap; bool ignore_maybe_prior_recompile; + assert(!reason_is_speculate(reason), "reason speculate only used by compiler"); query_update_method_data(trap_mdo, trap_bci, (DeoptReason)reason, + NULL, ignore_this_trap_count, ignore_maybe_prior_trap, ignore_maybe_prior_recompile); @@ -1814,7 +1825,8 @@ const char* Deoptimization::_trap_reason_name[Reason_LIMIT] = { "div0_check", "age", "predicate", - "loop_limit_check" + "loop_limit_check", + "speculate_class_check" }; const char* Deoptimization::_trap_action_name[Action_LIMIT] = { // Note: Keep this in sync. with enum DeoptAction. diff --git a/hotspot/src/share/vm/runtime/deoptimization.hpp b/hotspot/src/share/vm/runtime/deoptimization.hpp index a32e33ca928..f2233c9869b 100644 --- a/hotspot/src/share/vm/runtime/deoptimization.hpp +++ b/hotspot/src/share/vm/runtime/deoptimization.hpp @@ -59,6 +59,7 @@ class Deoptimization : AllStatic { Reason_age, // nmethod too old; tier threshold reached Reason_predicate, // compiler generated predicate failed Reason_loop_limit_check, // compiler generated loop limits check failed + Reason_speculate_class_check, // saw unexpected object class from type speculation Reason_LIMIT, // Note: Keep this enum in sync. with _trap_reason_name. Reason_RECORDED_LIMIT = Reason_bimorphic // some are not recorded per bc @@ -311,10 +312,23 @@ class Deoptimization : AllStatic { return reason; else if (reason == Reason_div0_check) // null check due to divide-by-zero? return Reason_null_check; // recorded per BCI as a null check + else if (reason == Reason_speculate_class_check) + return Reason_class_check; else return Reason_none; } + static bool reason_is_speculate(int reason) { + if (reason == Reason_speculate_class_check) { + return true; + } + return false; + } + + static uint per_method_trap_limit(int reason) { + return reason_is_speculate(reason) ? (uint)PerMethodSpecTrapLimit : (uint)PerMethodTrapLimit; + } + static const char* trap_reason_name(int reason); static const char* trap_action_name(int action); // Format like reason='foo' action='bar' index='123'. @@ -337,6 +351,7 @@ class Deoptimization : AllStatic { static ProfileData* query_update_method_data(MethodData* trap_mdo, int trap_bci, DeoptReason reason, + Method* compiled_method, //outputs: uint& ret_this_trap_count, bool& ret_maybe_prior_trap, diff --git a/hotspot/src/share/vm/runtime/globals.hpp b/hotspot/src/share/vm/runtime/globals.hpp index d9cd10f9c3c..b971907b980 100644 --- a/hotspot/src/share/vm/runtime/globals.hpp +++ b/hotspot/src/share/vm/runtime/globals.hpp @@ -3078,9 +3078,15 @@ class CommandLineFlags { product(intx, PerMethodTrapLimit, 100, \ "Limit on traps (of one kind) in a method (includes inlines)") \ \ + experimental(intx, PerMethodSpecTrapLimit, 5000, \ + "Limit on speculative traps (of one kind) in a method (includes inlines)") \ + \ product(intx, PerBytecodeTrapLimit, 4, \ "Limit on traps (of one kind) at a particular BCI") \ \ + experimental(intx, SpecTrapLimitExtraEntries, 3, \ + "Extra method data trap entries for speculation") \ + \ develop(intx, InlineFrequencyRatio, 20, \ "Ratio of call site execution to caller method invocation") \ \ diff --git a/hotspot/src/share/vm/runtime/java.cpp b/hotspot/src/share/vm/runtime/java.cpp index 1c4087412cb..6c2d90daeaa 100644 --- a/hotspot/src/share/vm/runtime/java.cpp +++ b/hotspot/src/share/vm/runtime/java.cpp @@ -97,9 +97,6 @@ #include "opto/runtime.hpp" #endif -#ifndef USDT2 -HS_DTRACE_PROBE_DECL(hotspot, vm__shutdown); -#endif /* !USDT2 */ #ifndef PRODUCT @@ -603,13 +600,8 @@ void vm_exit(int code) { void notify_vm_shutdown() { // For now, just a dtrace probe. -#ifndef USDT2 - HS_DTRACE_PROBE(hotspot, vm__shutdown); - HS_DTRACE_WORKAROUND_TAIL_CALL_BUG(); -#else /* USDT2 */ HOTSPOT_VM_SHUTDOWN(); HS_DTRACE_WORKAROUND_TAIL_CALL_BUG(); -#endif /* USDT2 */ } void vm_direct_exit(int code) { diff --git a/hotspot/src/share/vm/runtime/objectMonitor.cpp b/hotspot/src/share/vm/runtime/objectMonitor.cpp index 88fa7e3181a..b1d04f1483c 100644 --- a/hotspot/src/share/vm/runtime/objectMonitor.cpp +++ b/hotspot/src/share/vm/runtime/objectMonitor.cpp @@ -78,39 +78,6 @@ len = klassname->utf8_length(); \ } -#ifndef USDT2 - -HS_DTRACE_PROBE_DECL4(hotspot, monitor__notify, - jlong, uintptr_t, char*, int); -HS_DTRACE_PROBE_DECL4(hotspot, monitor__notifyAll, - jlong, uintptr_t, char*, int); -HS_DTRACE_PROBE_DECL4(hotspot, monitor__contended__enter, - jlong, uintptr_t, char*, int); -HS_DTRACE_PROBE_DECL4(hotspot, monitor__contended__entered, - jlong, uintptr_t, char*, int); -HS_DTRACE_PROBE_DECL4(hotspot, monitor__contended__exit, - jlong, uintptr_t, char*, int); - -#define DTRACE_MONITOR_WAIT_PROBE(monitor, obj, thread, millis) \ - { \ - if (DTraceMonitorProbes) { \ - DTRACE_MONITOR_PROBE_COMMON(obj, thread); \ - HS_DTRACE_PROBE5(hotspot, monitor__wait, jtid, \ - (monitor), bytes, len, (millis)); \ - } \ - } - -#define DTRACE_MONITOR_PROBE(probe, monitor, obj, thread) \ - { \ - if (DTraceMonitorProbes) { \ - DTRACE_MONITOR_PROBE_COMMON(obj, thread); \ - HS_DTRACE_PROBE4(hotspot, monitor__##probe, jtid, \ - (uintptr_t)(monitor), bytes, len); \ - } \ - } - -#else /* USDT2 */ - #define DTRACE_MONITOR_WAIT_PROBE(monitor, obj, thread, millis) \ { \ if (DTraceMonitorProbes) { \ @@ -135,7 +102,6 @@ HS_DTRACE_PROBE_DECL4(hotspot, monitor__contended__exit, } \ } -#endif /* USDT2 */ #else // ndef DTRACE_ENABLED #define DTRACE_MONITOR_WAIT_PROBE(obj, thread, millis, mon) {;} diff --git a/hotspot/src/share/vm/runtime/sharedRuntime.cpp b/hotspot/src/share/vm/runtime/sharedRuntime.cpp index 4595dba2dce..e7a14162cd6 100644 --- a/hotspot/src/share/vm/runtime/sharedRuntime.cpp +++ b/hotspot/src/share/vm/runtime/sharedRuntime.cpp @@ -127,14 +127,6 @@ void SharedRuntime::generate_stubs() { #include -#ifndef USDT2 -HS_DTRACE_PROBE_DECL4(hotspot, object__alloc, Thread*, char*, int, size_t); -HS_DTRACE_PROBE_DECL7(hotspot, method__entry, int, - char*, int, char*, int, char*, int); -HS_DTRACE_PROBE_DECL7(hotspot, method__return, int, - char*, int, char*, int, char*, int); -#endif /* !USDT2 */ - // Implementation of SharedRuntime #ifndef PRODUCT @@ -969,14 +961,9 @@ int SharedRuntime::dtrace_object_alloc_base(Thread* thread, oopDesc* o) { Klass* klass = o->klass(); int size = o->size(); Symbol* name = klass->name(); -#ifndef USDT2 - HS_DTRACE_PROBE4(hotspot, object__alloc, get_java_tid(thread), - name->bytes(), name->utf8_length(), size * HeapWordSize); -#else /* USDT2 */ HOTSPOT_OBJECT_ALLOC( get_java_tid(thread), (char *) name->bytes(), name->utf8_length(), size * HeapWordSize); -#endif /* USDT2 */ return 0; } @@ -986,18 +973,11 @@ JRT_LEAF(int, SharedRuntime::dtrace_method_entry( Symbol* kname = method->klass_name(); Symbol* name = method->name(); Symbol* sig = method->signature(); -#ifndef USDT2 - HS_DTRACE_PROBE7(hotspot, method__entry, get_java_tid(thread), - kname->bytes(), kname->utf8_length(), - name->bytes(), name->utf8_length(), - sig->bytes(), sig->utf8_length()); -#else /* USDT2 */ HOTSPOT_METHOD_ENTRY( get_java_tid(thread), (char *) kname->bytes(), kname->utf8_length(), (char *) name->bytes(), name->utf8_length(), (char *) sig->bytes(), sig->utf8_length()); -#endif /* USDT2 */ return 0; JRT_END @@ -1007,18 +987,11 @@ JRT_LEAF(int, SharedRuntime::dtrace_method_exit( Symbol* kname = method->klass_name(); Symbol* name = method->name(); Symbol* sig = method->signature(); -#ifndef USDT2 - HS_DTRACE_PROBE7(hotspot, method__return, get_java_tid(thread), - kname->bytes(), kname->utf8_length(), - name->bytes(), name->utf8_length(), - sig->bytes(), sig->utf8_length()); -#else /* USDT2 */ HOTSPOT_METHOD_RETURN( get_java_tid(thread), (char *) kname->bytes(), kname->utf8_length(), (char *) name->bytes(), name->utf8_length(), (char *) sig->bytes(), sig->utf8_length()); -#endif /* USDT2 */ return 0; JRT_END diff --git a/hotspot/src/share/vm/runtime/synchronizer.cpp b/hotspot/src/share/vm/runtime/synchronizer.cpp index 1a89dfb5a68..e6d4913d71a 100644 --- a/hotspot/src/share/vm/runtime/synchronizer.cpp +++ b/hotspot/src/share/vm/runtime/synchronizer.cpp @@ -84,32 +84,6 @@ len = klassname->utf8_length(); \ } -#ifndef USDT2 -HS_DTRACE_PROBE_DECL5(hotspot, monitor__wait, - jlong, uintptr_t, char*, int, long); -HS_DTRACE_PROBE_DECL4(hotspot, monitor__waited, - jlong, uintptr_t, char*, int); - -#define DTRACE_MONITOR_WAIT_PROBE(monitor, obj, thread, millis) \ - { \ - if (DTraceMonitorProbes) { \ - DTRACE_MONITOR_PROBE_COMMON(obj, thread); \ - HS_DTRACE_PROBE5(hotspot, monitor__wait, jtid, \ - (monitor), bytes, len, (millis)); \ - } \ - } - -#define DTRACE_MONITOR_PROBE(probe, monitor, obj, thread) \ - { \ - if (DTraceMonitorProbes) { \ - DTRACE_MONITOR_PROBE_COMMON(obj, thread); \ - HS_DTRACE_PROBE4(hotspot, monitor__##probe, jtid, \ - (uintptr_t)(monitor), bytes, len); \ - } \ - } - -#else /* USDT2 */ - #define DTRACE_MONITOR_WAIT_PROBE(monitor, obj, thread, millis) \ { \ if (DTraceMonitorProbes) { \ @@ -130,7 +104,6 @@ HS_DTRACE_PROBE_DECL4(hotspot, monitor__waited, } \ } -#endif /* USDT2 */ #else // ndef DTRACE_ENABLED #define DTRACE_MONITOR_WAIT_PROBE(obj, thread, millis, mon) {;} diff --git a/hotspot/src/share/vm/runtime/thread.cpp b/hotspot/src/share/vm/runtime/thread.cpp index 2d9144ca526..ab3e26bfb62 100644 --- a/hotspot/src/share/vm/runtime/thread.cpp +++ b/hotspot/src/share/vm/runtime/thread.cpp @@ -112,29 +112,6 @@ // Only bother with this argument setup if dtrace is available -#ifndef USDT2 -HS_DTRACE_PROBE_DECL(hotspot, vm__init__begin); -HS_DTRACE_PROBE_DECL(hotspot, vm__init__end); -HS_DTRACE_PROBE_DECL5(hotspot, thread__start, char*, intptr_t, - intptr_t, intptr_t, bool); -HS_DTRACE_PROBE_DECL5(hotspot, thread__stop, char*, intptr_t, - intptr_t, intptr_t, bool); - -#define DTRACE_THREAD_PROBE(probe, javathread) \ - { \ - ResourceMark rm(this); \ - int len = 0; \ - const char* name = (javathread)->get_thread_name(); \ - len = strlen(name); \ - HS_DTRACE_PROBE5(hotspot, thread__##probe, \ - name, len, \ - java_lang_Thread::thread_id((javathread)->threadObj()), \ - (javathread)->osthread()->thread_id(), \ - java_lang_Thread::is_daemon((javathread)->threadObj())); \ - } - -#else /* USDT2 */ - #define HOTSPOT_THREAD_PROBE_start HOTSPOT_THREAD_START #define HOTSPOT_THREAD_PROBE_stop HOTSPOT_THREAD_STOP @@ -151,8 +128,6 @@ HS_DTRACE_PROBE_DECL5(hotspot, thread__stop, char*, intptr_t, java_lang_Thread::is_daemon((javathread)->threadObj())); \ } -#endif /* USDT2 */ - #else // ndef DTRACE_ENABLED #define DTRACE_THREAD_PROBE(probe, javathread) @@ -3394,11 +3369,7 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { os::pause(); } -#ifndef USDT2 - HS_DTRACE_PROBE(hotspot, vm__init__begin); -#else /* USDT2 */ HOTSPOT_VM_INIT_BEGIN(); -#endif /* USDT2 */ // Record VM creation timing statistics TraceVmCreationTime create_vm_timer; @@ -3560,11 +3531,7 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { // debug stuff, that does not work until all basic classes have been initialized. set_init_completed(); -#ifndef USDT2 - HS_DTRACE_PROBE(hotspot, vm__init__end); -#else /* USDT2 */ HOTSPOT_VM_INIT_END(); -#endif /* USDT2 */ // record VM initialization completion time #if INCLUDE_MANAGEMENT diff --git a/hotspot/src/share/vm/runtime/vmStructs.cpp b/hotspot/src/share/vm/runtime/vmStructs.cpp index b67187c6e3d..7044dc9b2b7 100644 --- a/hotspot/src/share/vm/runtime/vmStructs.cpp +++ b/hotspot/src/share/vm/runtime/vmStructs.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -248,7 +248,6 @@ typedef TwoOopHashtable KlassTwoOopHashtable; typedef Hashtable KlassHashtable; typedef HashtableEntry KlassHashtableEntry; typedef TwoOopHashtable SymbolTwoOopHashtable; -typedef BinaryTreeDictionary MetablockTreeDictionary; //-------------------------------------------------------------------------------- // VM_STRUCTS @@ -1177,9 +1176,9 @@ typedef BinaryTreeDictionary MetablockTreeDictionary; c2_nonstatic_field(Block, _pre_order, uint) \ c2_nonstatic_field(Block, _dom_depth, uint) \ c2_nonstatic_field(Block, _idom, Block*) \ - c2_nonstatic_field(Block, _freq, jfloat) \ + c2_nonstatic_field(Block, _freq, jdouble) \ \ - c2_nonstatic_field(CFGElement, _freq, jfloat) \ + c2_nonstatic_field(CFGElement, _freq, jdouble) \ \ c2_nonstatic_field(Block_List, _cnt, uint) \ \ @@ -1287,11 +1286,8 @@ typedef BinaryTreeDictionary MetablockTreeDictionary; volatile_nonstatic_field(FreeChunk, _size, size_t) \ nonstatic_field(FreeChunk, _next, FreeChunk*) \ nonstatic_field(FreeChunk, _prev, FreeChunk*) \ - nonstatic_field(FreeList, _size, size_t) \ - nonstatic_field(FreeList, _size, size_t) \ - nonstatic_field(FreeList, _count, ssize_t) \ - nonstatic_field(FreeList, _count, ssize_t) \ - nonstatic_field(MetablockTreeDictionary, _total_size, size_t) + nonstatic_field(AdaptiveFreeList, _size, size_t) \ + nonstatic_field(AdaptiveFreeList, _count, ssize_t) //-------------------------------------------------------------------------------- @@ -1946,15 +1942,6 @@ typedef BinaryTreeDictionary MetablockTreeDictionary; declare_c2_type(CmpF3Node, CmpFNode) \ declare_c2_type(CmpDNode, CmpNode) \ declare_c2_type(CmpD3Node, CmpDNode) \ - declare_c2_type(MathExactNode, MultiNode) \ - declare_c2_type(MathExactINode, MathExactNode) \ - declare_c2_type(AddExactINode, MathExactINode) \ - declare_c2_type(AddExactLNode, MathExactLNode) \ - declare_c2_type(SubExactINode, MathExactINode) \ - declare_c2_type(SubExactLNode, MathExactLNode) \ - declare_c2_type(NegExactINode, MathExactINode) \ - declare_c2_type(MulExactINode, MathExactINode) \ - declare_c2_type(FlagsProjNode, ProjNode) \ declare_c2_type(BoolNode, Node) \ declare_c2_type(AbsNode, Node) \ declare_c2_type(AbsINode, AbsNode) \ @@ -2035,6 +2022,15 @@ typedef BinaryTreeDictionary MetablockTreeDictionary; declare_c2_type(ExtractLNode, ExtractNode) \ declare_c2_type(ExtractFNode, ExtractNode) \ declare_c2_type(ExtractDNode, ExtractNode) \ + declare_c2_type(OverflowNode, CmpNode) \ + declare_c2_type(OverflowINode, OverflowNode) \ + declare_c2_type(OverflowAddINode, OverflowINode) \ + declare_c2_type(OverflowSubINode, OverflowINode) \ + declare_c2_type(OverflowMulINode, OverflowINode) \ + declare_c2_type(OverflowLNode, OverflowNode) \ + declare_c2_type(OverflowAddLNode, OverflowLNode) \ + declare_c2_type(OverflowSubLNode, OverflowLNode) \ + declare_c2_type(OverflowMulLNode, OverflowLNode) \ \ /*********************/ \ /* Adapter Blob Entries */ \ @@ -2163,14 +2159,8 @@ typedef BinaryTreeDictionary MetablockTreeDictionary; \ /* freelist */ \ declare_toplevel_type(FreeChunk*) \ - declare_toplevel_type(Metablock*) \ - declare_toplevel_type(FreeBlockDictionary*) \ - declare_toplevel_type(FreeList*) \ - declare_toplevel_type(FreeList) \ - declare_toplevel_type(FreeBlockDictionary*) \ - declare_toplevel_type(FreeList*) \ - declare_toplevel_type(FreeList) \ - declare_type(MetablockTreeDictionary, FreeBlockDictionary) + declare_toplevel_type(AdaptiveFreeList*) \ + declare_toplevel_type(AdaptiveFreeList) //-------------------------------------------------------------------------------- diff --git a/hotspot/src/share/vm/runtime/vmThread.cpp b/hotspot/src/share/vm/runtime/vmThread.cpp index bdb508208d4..98fb207c887 100644 --- a/hotspot/src/share/vm/runtime/vmThread.cpp +++ b/hotspot/src/share/vm/runtime/vmThread.cpp @@ -40,12 +40,6 @@ #include "utilities/events.hpp" #include "utilities/xmlstream.hpp" -#ifndef USDT2 -HS_DTRACE_PROBE_DECL3(hotspot, vmops__request, char *, uintptr_t, int); -HS_DTRACE_PROBE_DECL3(hotspot, vmops__begin, char *, uintptr_t, int); -HS_DTRACE_PROBE_DECL3(hotspot, vmops__end, char *, uintptr_t, int); -#endif /* !USDT2 */ - // Dummy VM operation to act as first element in our circular double-linked list class VM_Dummy: public VM_Operation { VMOp_Type type() const { return VMOp_Dummy; } @@ -154,14 +148,9 @@ void VMOperationQueue::drain_list_oops_do(OopClosure* f) { // High-level interface bool VMOperationQueue::add(VM_Operation *op) { -#ifndef USDT2 - HS_DTRACE_PROBE3(hotspot, vmops__request, op->name(), strlen(op->name()), - op->evaluation_mode()); -#else /* USDT2 */ HOTSPOT_VMOPS_REQUEST( (char *) op->name(), strlen(op->name()), op->evaluation_mode()); -#endif /* USDT2 */ // Encapsulates VM queue policy. Currently, that // only involves putting them on the right list @@ -358,14 +347,9 @@ void VMThread::evaluate_operation(VM_Operation* op) { { PerfTraceTime vm_op_timer(perf_accumulated_vm_operation_time()); -#ifndef USDT2 - HS_DTRACE_PROBE3(hotspot, vmops__begin, op->name(), strlen(op->name()), - op->evaluation_mode()); -#else /* USDT2 */ HOTSPOT_VMOPS_BEGIN( (char *) op->name(), strlen(op->name()), op->evaluation_mode()); -#endif /* USDT2 */ EventExecuteVMOperation event; @@ -383,14 +367,9 @@ void VMThread::evaluate_operation(VM_Operation* op) { event.commit(); } -#ifndef USDT2 - HS_DTRACE_PROBE3(hotspot, vmops__end, op->name(), strlen(op->name()), - op->evaluation_mode()); -#else /* USDT2 */ HOTSPOT_VMOPS_END( (char *) op->name(), strlen(op->name()), op->evaluation_mode()); -#endif /* USDT2 */ } // Last access of info in _cur_vm_operation! diff --git a/hotspot/src/share/vm/services/classLoadingService.cpp b/hotspot/src/share/vm/services/classLoadingService.cpp index aa2299fca6d..bdc33fdd2bb 100644 --- a/hotspot/src/share/vm/services/classLoadingService.cpp +++ b/hotspot/src/share/vm/services/classLoadingService.cpp @@ -37,26 +37,6 @@ // Only bother with this argument setup if dtrace is available -#ifndef USDT2 - -HS_DTRACE_PROBE_DECL4(hotspot, class__loaded, char*, int, oop, bool); -HS_DTRACE_PROBE_DECL4(hotspot, class__unloaded, char*, int, oop, bool); - -#define DTRACE_CLASSLOAD_PROBE(type, clss, shared) \ - { \ - char* data = NULL; \ - int len = 0; \ - Symbol* name = (clss)->name(); \ - if (name != NULL) { \ - data = (char*)name->bytes(); \ - len = name->utf8_length(); \ - } \ - HS_DTRACE_PROBE4(hotspot, class__##type, \ - data, len, SOLARIS_ONLY((void *))(clss)->class_loader(), (shared)); \ - } - -#else /* USDT2 */ - #define HOTSPOT_CLASS_unloaded HOTSPOT_CLASS_UNLOADED #define HOTSPOT_CLASS_loaded HOTSPOT_CLASS_LOADED #define DTRACE_CLASSLOAD_PROBE(type, clss, shared) \ @@ -72,7 +52,6 @@ HS_DTRACE_PROBE_DECL4(hotspot, class__unloaded, char*, int, oop, bool); data, len, (clss)->class_loader(), (shared)); \ } -#endif /* USDT2 */ #else // ndef DTRACE_ENABLED #define DTRACE_CLASSLOAD_PROBE(type, clss, shared) diff --git a/hotspot/src/share/vm/services/memoryManager.cpp b/hotspot/src/share/vm/services/memoryManager.cpp index 0cfd05b78f5..f6ada6a8244 100644 --- a/hotspot/src/share/vm/services/memoryManager.cpp +++ b/hotspot/src/share/vm/services/memoryManager.cpp @@ -36,13 +36,6 @@ #include "services/gcNotifier.hpp" #include "utilities/dtrace.hpp" -#ifndef USDT2 -HS_DTRACE_PROBE_DECL8(hotspot, mem__pool__gc__begin, char*, int, char*, int, - size_t, size_t, size_t, size_t); -HS_DTRACE_PROBE_DECL8(hotspot, mem__pool__gc__end, char*, int, char*, int, - size_t, size_t, size_t, size_t); -#endif /* !USDT2 */ - MemoryManager::MemoryManager() { _num_pools = 0; (void)const_cast(_memory_mgr_obj = NULL); @@ -242,19 +235,11 @@ void GCMemoryManager::gc_begin(bool recordGCBeginTime, bool recordPreGCUsage, MemoryPool* pool = MemoryService::get_memory_pool(i); MemoryUsage usage = pool->get_memory_usage(); _current_gc_stat->set_before_gc_usage(i, usage); -#ifndef USDT2 - HS_DTRACE_PROBE8(hotspot, mem__pool__gc__begin, - name(), strlen(name()), - pool->name(), strlen(pool->name()), - usage.init_size(), usage.used(), - usage.committed(), usage.max_size()); -#else /* USDT2 */ HOTSPOT_MEM_POOL_GC_BEGIN( (char *) name(), strlen(name()), (char *) pool->name(), strlen(pool->name()), usage.init_size(), usage.used(), usage.committed(), usage.max_size()); -#endif /* USDT2 */ } } } @@ -280,19 +265,11 @@ void GCMemoryManager::gc_end(bool recordPostGCUsage, MemoryPool* pool = MemoryService::get_memory_pool(i); MemoryUsage usage = pool->get_memory_usage(); -#ifndef USDT2 - HS_DTRACE_PROBE8(hotspot, mem__pool__gc__end, - name(), strlen(name()), - pool->name(), strlen(pool->name()), - usage.init_size(), usage.used(), - usage.committed(), usage.max_size()); -#else /* USDT2 */ HOTSPOT_MEM_POOL_GC_END( (char *) name(), strlen(name()), (char *) pool->name(), strlen(pool->name()), usage.init_size(), usage.used(), usage.committed(), usage.max_size()); -#endif /* USDT2 */ _current_gc_stat->set_after_gc_usage(i, usage); } diff --git a/hotspot/src/share/vm/services/runtimeService.cpp b/hotspot/src/share/vm/services/runtimeService.cpp index 379b8f3ff9e..5fdb9705a4d 100644 --- a/hotspot/src/share/vm/services/runtimeService.cpp +++ b/hotspot/src/share/vm/services/runtimeService.cpp @@ -31,11 +31,6 @@ #include "utilities/exceptions.hpp" #include "utilities/macros.hpp" -#ifndef USDT2 -HS_DTRACE_PROBE_DECL(hs_private, safepoint__begin); -HS_DTRACE_PROBE_DECL(hs_private, safepoint__end); -#endif /* !USDT2 */ - #if INCLUDE_MANAGEMENT TimeStamp RuntimeService::_app_timer; TimeStamp RuntimeService::_safepoint_timer; @@ -112,11 +107,7 @@ void RuntimeService::init() { } void RuntimeService::record_safepoint_begin() { -#ifndef USDT2 - HS_DTRACE_PROBE(hs_private, safepoint__begin); -#else /* USDT2 */ HS_PRIVATE_SAFEPOINT_BEGIN(); -#endif /* USDT2 */ // Print the time interval in which the app was executing if (PrintGCApplicationConcurrentTime && _app_timer.is_updated()) { @@ -143,11 +134,7 @@ void RuntimeService::record_safepoint_synchronized() { } void RuntimeService::record_safepoint_end() { -#ifndef USDT2 - HS_DTRACE_PROBE(hs_private, safepoint__end); -#else /* USDT2 */ HS_PRIVATE_SAFEPOINT_END(); -#endif /* USDT2 */ // Print the time interval for which the app was stopped // during the current safepoint operation. diff --git a/hotspot/src/share/vm/utilities/dtrace.hpp b/hotspot/src/share/vm/utilities/dtrace.hpp index 92d99de204a..e3612070354 100644 --- a/hotspot/src/share/vm/utilities/dtrace.hpp +++ b/hotspot/src/share/vm/utilities/dtrace.hpp @@ -37,7 +37,6 @@ // Work around dtrace tail call bug 6672627 until it is fixed in solaris 10. #define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG() \ do { volatile size_t dtrace_workaround_tail_call_bug = 1; } while (0) - #elif defined(LINUX) #define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG() #elif defined(__APPLE__) @@ -47,7 +46,6 @@ #error "dtrace enabled for unknown os" #endif /* defined(SOLARIS) */ -#define USDT2 1 #include "dtracefiles/hotspot.h" #include "dtracefiles/hotspot_jni.h" #include "dtracefiles/hs_private.h" @@ -59,147 +57,8 @@ #define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG() -#ifndef USDT2 - -#define DTRACE_PROBE(a,b) {;} -#define DTRACE_PROBE1(a,b,c) {;} -#define DTRACE_PROBE2(a,b,c,d) {;} -#define DTRACE_PROBE3(a,b,c,d,e) {;} -#define DTRACE_PROBE4(a,b,c,d,e,f) {;} -#define DTRACE_PROBE5(a,b,c,d,e,f,g) {;} -#define DTRACE_PROBE6(a,b,c,d,e,f,g,h) {;} -#define DTRACE_PROBE7(a,b,c,d,e,f,g,h,i) {;} -#define DTRACE_PROBE8(a,b,c,d,e,f,g,h,i,j) {;} -#define DTRACE_PROBE9(a,b,c,d,e,f,g,h,i,j,k) {;} -#define DTRACE_PROBE10(a,b,c,d,e,f,g,h,i,j,k,l) {;} - -#else /* USDT2 */ - -#include "dtrace_usdt2_disabled.hpp" -#endif /* USDT2 */ +#include "dtrace_disabled.hpp" #endif /* defined(DTRACE_ENABLED) */ -#ifndef USDT2 - -#define HS_DTRACE_PROBE_FN(provider,name)\ - __dtrace_##provider##___##name - -#ifdef SOLARIS -// Solaris dtrace needs actual extern function decls. -#define HS_DTRACE_PROBE_DECL_N(provider,name,args) \ - DTRACE_ONLY(extern "C" void HS_DTRACE_PROBE_FN(provider,name) args) -#define HS_DTRACE_PROBE_CDECL_N(provider,name,args) \ - DTRACE_ONLY(extern void HS_DTRACE_PROBE_FN(provider,name) args) -#else -// Systemtap dtrace compatible probes on GNU/Linux don't. -// If dtrace is disabled this macro becomes NULL -#define HS_DTRACE_PROBE_DECL_N(provider,name,args) -#define HS_DTRACE_PROBE_CDECL_N(provider,name,args) -#endif - -/* Dtrace probe declarations */ -#define HS_DTRACE_PROBE_DECL(provider,name) \ - HS_DTRACE_PROBE_DECL0(provider,name) -#define HS_DTRACE_PROBE_DECL0(provider,name)\ - HS_DTRACE_PROBE_DECL_N(provider,name,(void)) -#define HS_DTRACE_PROBE_DECL1(provider,name,t0)\ - HS_DTRACE_PROBE_DECL_N(provider,name,(uintptr_t)) -#define HS_DTRACE_PROBE_DECL2(provider,name,t0,t1)\ - HS_DTRACE_PROBE_DECL_N(provider,name,(uintptr_t,uintptr_t)) -#define HS_DTRACE_PROBE_DECL3(provider,name,t0,t1,t2)\ - HS_DTRACE_PROBE_DECL_N(provider,name,(uintptr_t,uintptr_t,uintptr_t)) -#define HS_DTRACE_PROBE_DECL4(provider,name,t0,t1,t2,t3)\ - HS_DTRACE_PROBE_DECL_N(provider,name,(uintptr_t,uintptr_t,uintptr_t,\ - uintptr_t)) -#define HS_DTRACE_PROBE_DECL5(provider,name,t0,t1,t2,t3,t4)\ - HS_DTRACE_PROBE_DECL_N(provider,name,(\ - uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t)) -#define HS_DTRACE_PROBE_DECL6(provider,name,t0,t1,t2,t3,t4,t5)\ - HS_DTRACE_PROBE_DECL_N(provider,name,(\ - uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t)) -#define HS_DTRACE_PROBE_DECL7(provider,name,t0,t1,t2,t3,t4,t5,t6)\ - HS_DTRACE_PROBE_DECL_N(provider,name,(\ - uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t)) -#define HS_DTRACE_PROBE_DECL8(provider,name,t0,t1,t2,t3,t4,t5,t6,t7)\ - HS_DTRACE_PROBE_DECL_N(provider,name,(\ - uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,\ - uintptr_t)) -#define HS_DTRACE_PROBE_DECL9(provider,name,t0,t1,t2,t3,t4,t5,t6,t7,t8)\ - HS_DTRACE_PROBE_DECL_N(provider,name,(\ - uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,\ - uintptr_t,uintptr_t)) -#define HS_DTRACE_PROBE_DECL10(provider,name,t0,t1,t2,t3,t4,t5,t6,t7,t8,t9)\ - HS_DTRACE_PROBE_DECL_N(provider,name,(\ - uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,\ - uintptr_t,uintptr_t,uintptr_t)) - -/* Dtrace probe definitions */ -#if defined(SOLARIS) -// Solaris dtrace uses actual function calls. -#define HS_DTRACE_PROBE_N(provider,name, args) \ - DTRACE_ONLY(HS_DTRACE_PROBE_FN(provider,name) args) - -#define HS_DTRACE_PROBE(provider,name) HS_DTRACE_PROBE0(provider,name) -#define HS_DTRACE_PROBE0(provider,name)\ - HS_DTRACE_PROBE_N(provider,name,()) -#define HS_DTRACE_PROBE1(provider,name,a0)\ - HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0)) -#define HS_DTRACE_PROBE2(provider,name,a0,a1)\ - HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1)) -#define HS_DTRACE_PROBE3(provider,name,a0,a1,a2)\ - HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2)) -#define HS_DTRACE_PROBE4(provider,name,a0,a1,a2,a3)\ - HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2,\ - (uintptr_t)a3)) -#define HS_DTRACE_PROBE5(provider,name,a0,a1,a2,a3,a4)\ - HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2,\ - (uintptr_t)a3,(uintptr_t)a4)) -#define HS_DTRACE_PROBE6(provider,name,a0,a1,a2,a3,a4,a5)\ - HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2,\ - (uintptr_t)a3,(uintptr_t)a4,(uintptr_t)a5)) -#define HS_DTRACE_PROBE7(provider,name,a0,a1,a2,a3,a4,a5,a6)\ - HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2,\ - (uintptr_t)a3,(uintptr_t)a4,(uintptr_t)a5,(uintptr_t)a6)) -#define HS_DTRACE_PROBE8(provider,name,a0,a1,a2,a3,a4,a5,a6,a7)\ - HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2,\ - (uintptr_t)a3,(uintptr_t)a4,(uintptr_t)a5,(uintptr_t)a6,(uintptr_t)a7)) -#define HS_DTRACE_PROBE9(provider,name,a0,a1,a2,a3,a4,a5,a6,a7,a8)\ - HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2,\ - (uintptr_t)a3,(uintptr_t)a4,(uintptr_t)a5,(uintptr_t)a6,(uintptr_t)a7,\ - (uintptr_t)a8)) -#define HS_DTRACE_PROBE10(provider,name,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9)\ - HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2,\ - (uintptr_t)a3,(uintptr_t)a4,(uintptr_t)a5,(uintptr_t)a6,(uintptr_t)a7,\ - (uintptr_t)a8,(uintptr_t)a9)) -#else -// Systemtap dtrace compatible probes on GNU/Linux use direct macros. -// If dtrace is disabled this macro becomes NULL -#define HS_DTRACE_PROBE(provider,name) HS_DTRACE_PROBE0(provider,name) -#define HS_DTRACE_PROBE0(provider,name)\ - DTRACE_PROBE(provider,name) -#define HS_DTRACE_PROBE1(provider,name,a0)\ - DTRACE_PROBE1(provider,name,a0) -#define HS_DTRACE_PROBE2(provider,name,a0,a1)\ - DTRACE_PROBE2(provider,name,a0,a1) -#define HS_DTRACE_PROBE3(provider,name,a0,a1,a2)\ - DTRACE_PROBE3(provider,name,a0,a1,a2) -#define HS_DTRACE_PROBE4(provider,name,a0,a1,a2,a3)\ - DTRACE_PROBE4(provider,name,a0,a1,a2,a3) -#define HS_DTRACE_PROBE5(provider,name,a0,a1,a2,a3,a4)\ - DTRACE_PROBE5(provider,name,a0,a1,a2,a3,a4) -#define HS_DTRACE_PROBE6(provider,name,a0,a1,a2,a3,a4,a5)\ - DTRACE_PROBE6(provider,name,a0,a1,a2,a3,a4,a5) -#define HS_DTRACE_PROBE7(provider,name,a0,a1,a2,a3,a4,a5,a6)\ - DTRACE_PROBE7(provider,name,a0,a1,a2,a3,a4,a5,a6) -#define HS_DTRACE_PROBE8(provider,name,a0,a1,a2,a3,a4,a5,a6,a7)\ - DTRACE_PROBE8(provider,name,a0,a1,a2,a3,a4,a5,a6,a7) -#define HS_DTRACE_PROBE9(provider,name,a0,a1,a2,a3,a4,a5,a6,a7,a8)\ - DTRACE_PROBE9(provider,name,a0,a1,a2,a3,a4,a5,a6,a7,a8) -#define HS_DTRACE_PROBE10(provider,name,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9)\ - DTRACE_PROBE10(provider,name,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9) -#endif - -#endif /* !USDT2 */ - #endif // SHARE_VM_UTILITIES_DTRACE_HPP diff --git a/hotspot/src/share/vm/utilities/dtrace_usdt2_disabled.hpp b/hotspot/src/share/vm/utilities/dtrace_disabled.hpp similarity index 99% rename from hotspot/src/share/vm/utilities/dtrace_usdt2_disabled.hpp rename to hotspot/src/share/vm/utilities/dtrace_disabled.hpp index 5606bf62926..2906fe22e93 100644 --- a/hotspot/src/share/vm/utilities/dtrace_usdt2_disabled.hpp +++ b/hotspot/src/share/vm/utilities/dtrace_disabled.hpp @@ -32,8 +32,6 @@ */ #if !defined(DTRACE_ENABLED) -#ifdef USDT2 - /* hotspot provider probes */ #define HOTSPOT_CLASS_LOADED(arg0, arg1, arg2, arg3) #define HOTSPOT_CLASS_LOADED_ENABLED() 0 @@ -107,7 +105,7 @@ #define HOTSPOT_THREAD_PARK_BEGIN_ENABLED() 0 #define HOTSPOT_THREAD_PARK_END(arg0) #define HOTSPOT_THREAD_PARK_END_ENABLED() 0 -#define HOTSPOT_THREAD_UNPARK() +#define HOTSPOT_THREAD_UNPARK(arg0) #define HOTSPOT_THREAD_UNPARK_ENABLED() 0 #define HOTSPOT_VM_INIT_BEGIN() #define HOTSPOT_VM_INIT_BEGIN_ENABLED() 0 @@ -1086,12 +1084,8 @@ #define HOTSPOT_JNI_UNREGISTERNATIVES_RETURN(arg0) #define HOTSPOT_JNI_UNREGISTERNATIVES_RETURN_ENABLED() 0 -#else /* USDT2 */ -#error This file should only be included for USDT2 -#endif /* USDT2 */ - #else /* !defined(DTRACE_ENABLED) */ #error This file should only be included when dtrace is not enabled -#end /* !defined(DTRACE_ENABLED) */ +#endif /* !defined(DTRACE_ENABLED) */ #endif // SHARE_VM_UTILITIES_DTRACE_USDT2_DISABLED_HPP diff --git a/hotspot/test/compiler/intrinsics/mathexact/AddExactICondTest.java b/hotspot/test/compiler/intrinsics/mathexact/AddExactICondTest.java index f0835cdb197..8862160d8b4 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/AddExactICondTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/AddExactICondTest.java @@ -26,7 +26,7 @@ * @bug 8024924 * @summary Test non constant addExact * @compile AddExactICondTest.java - * @run main AddExactICondTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main AddExactICondTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/AddExactIConstantTest.java b/hotspot/test/compiler/intrinsics/mathexact/AddExactIConstantTest.java index ed8525483b0..77000a1d958 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/AddExactIConstantTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/AddExactIConstantTest.java @@ -26,7 +26,7 @@ * @bug 8024924 * @summary Test constant addExact * @compile AddExactIConstantTest.java Verify.java - * @run main AddExactIConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main AddExactIConstantTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/AddExactILoadTest.java b/hotspot/test/compiler/intrinsics/mathexact/AddExactILoadTest.java index 4175a8ab5cc..2d96bb8b8a6 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/AddExactILoadTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/AddExactILoadTest.java @@ -26,7 +26,7 @@ * @bug 8024924 * @summary Test non constant addExact * @compile AddExactILoadTest.java Verify.java - * @run main AddExactILoadTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main AddExactILoadTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/AddExactILoopDependentTest.java b/hotspot/test/compiler/intrinsics/mathexact/AddExactILoopDependentTest.java index 56da9f40b7e..99aae0d7b21 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/AddExactILoopDependentTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/AddExactILoopDependentTest.java @@ -26,7 +26,7 @@ * @bug 8024924 * @summary Test non constant addExact * @compile AddExactILoopDependentTest.java Verify.java - * @run main AddExactILoopDependentTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main AddExactILoopDependentTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/AddExactINonConstantTest.java b/hotspot/test/compiler/intrinsics/mathexact/AddExactINonConstantTest.java index 52e208db0e4..b3a24758569 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/AddExactINonConstantTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/AddExactINonConstantTest.java @@ -26,7 +26,7 @@ * @bug 8024924 * @summary Test non constant addExact * @compile AddExactINonConstantTest.java Verify.java - * @run main AddExactINonConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main AddExactINonConstantTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/AddExactIRepeatTest.java b/hotspot/test/compiler/intrinsics/mathexact/AddExactIRepeatTest.java index 7bb1deba007..d111b66ce82 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/AddExactIRepeatTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/AddExactIRepeatTest.java @@ -26,7 +26,7 @@ * @bug 8025657 * @summary Test repeating addExact * @compile AddExactIRepeatTest.java Verify.java - * @run main AddExactIRepeatTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main AddExactIRepeatTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/AddExactLConstantTest.java b/hotspot/test/compiler/intrinsics/mathexact/AddExactLConstantTest.java index 3514ce24ab7..dc751406192 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/AddExactLConstantTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/AddExactLConstantTest.java @@ -26,7 +26,7 @@ * @bug 8026844 * @summary Test constant addExact * @compile AddExactLConstantTest.java Verify.java - * @run main AddExactLConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main AddExactLConstantTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/AddExactLNonConstantTest.java b/hotspot/test/compiler/intrinsics/mathexact/AddExactLNonConstantTest.java index 3e16cb94d95..efd5fd7c92b 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/AddExactLNonConstantTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/AddExactLNonConstantTest.java @@ -26,7 +26,7 @@ * @bug 8026844 * @summary Test non constant addExact * @compile AddExactLNonConstantTest.java Verify.java - * @run main AddExactLNonConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main AddExactLNonConstantTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/CompareTest.java b/hotspot/test/compiler/intrinsics/mathexact/CompareTest.java index c77dd47c184..f6785c07c69 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/CompareTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/CompareTest.java @@ -26,7 +26,7 @@ * @bug 8026722 * @summary Verify that the compare after addExact is a signed compare * @compile CompareTest.java - * @run main CompareTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main CompareTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/DecExactITest.java b/hotspot/test/compiler/intrinsics/mathexact/DecExactITest.java index 2712bed78ab..7e6e1ca3bde 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/DecExactITest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/DecExactITest.java @@ -26,7 +26,7 @@ * @bug 8026844 * @summary Test decrementExact * @compile DecExactITest.java Verify.java - * @run main DecExactITest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main DecExactITest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/DecExactLTest.java b/hotspot/test/compiler/intrinsics/mathexact/DecExactLTest.java index ad83dcad208..53a16596e3c 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/DecExactLTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/DecExactLTest.java @@ -26,7 +26,7 @@ * @bug 8026844 * @summary Test decrementExact * @compile DecExactLTest.java Verify.java - * @run main DecExactLTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main DecExactLTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/GVNTest.java b/hotspot/test/compiler/intrinsics/mathexact/GVNTest.java index 864555e2b3e..23fba15d433 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/GVNTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/GVNTest.java @@ -26,7 +26,7 @@ * @bug 8028207 * @summary Verify that GVN doesn't mess up the two addExacts * @compile GVNTest.java - * @run main GVNTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main GVNTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/IncExactITest.java b/hotspot/test/compiler/intrinsics/mathexact/IncExactITest.java index 41ab825847a..9f7ddbd3211 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/IncExactITest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/IncExactITest.java @@ -26,7 +26,7 @@ * @bug 8026844 * @summary Test incrementExact * @compile IncExactITest.java Verify.java - * @run main IncExactITest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main IncExactITest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/IncExactLTest.java b/hotspot/test/compiler/intrinsics/mathexact/IncExactLTest.java index 6ece9792be7..755d81908ce 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/IncExactLTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/IncExactLTest.java @@ -26,7 +26,7 @@ * @bug 8026844 * @summary Test incrementExact * @compile IncExactLTest.java Verify.java - * @run main IncExactLTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main IncExactLTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/MulExactICondTest.java b/hotspot/test/compiler/intrinsics/mathexact/MulExactICondTest.java index e9bf6b9958e..5f3e1e64568 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/MulExactICondTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/MulExactICondTest.java @@ -26,7 +26,7 @@ * @bug 8026844 * @summary Test multiplyExact as condition * @compile MulExactICondTest.java - * @run main MulExactICondTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main MulExactICondTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/MulExactIConstantTest.java b/hotspot/test/compiler/intrinsics/mathexact/MulExactIConstantTest.java index 6bb74d1f9eb..120bef5e9b9 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/MulExactIConstantTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/MulExactIConstantTest.java @@ -26,7 +26,7 @@ * @bug 8026844 * @summary Test constant multiplyExact * @compile MulExactIConstantTest.java Verify.java - * @run main MulExactIConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main MulExactIConstantTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/MulExactILoadTest.java b/hotspot/test/compiler/intrinsics/mathexact/MulExactILoadTest.java index 8878b6f1c6d..36aa3d46230 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/MulExactILoadTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/MulExactILoadTest.java @@ -26,7 +26,7 @@ * @bug 8026844 * @summary Test multiplyExact * @compile MulExactILoadTest.java Verify.java - * @run main MulExactILoadTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main MulExactILoadTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/MulExactILoopDependentTest.java b/hotspot/test/compiler/intrinsics/mathexact/MulExactILoopDependentTest.java index 7c5c7e7a240..5ba4ad3cfc3 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/MulExactILoopDependentTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/MulExactILoopDependentTest.java @@ -26,7 +26,7 @@ * @bug 8026844 * @summary Test loop dependent multiplyExact * @compile MulExactILoopDependentTest.java Verify.java - * @run main MulExactILoopDependentTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main MulExactILoopDependentTest * */ public class MulExactILoopDependentTest { diff --git a/hotspot/test/compiler/intrinsics/mathexact/MulExactINonConstantTest.java b/hotspot/test/compiler/intrinsics/mathexact/MulExactINonConstantTest.java index e924311aa25..e108059885b 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/MulExactINonConstantTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/MulExactINonConstantTest.java @@ -26,7 +26,7 @@ * @bug 8026844 * @summary Test non constant multiplyExact * @compile MulExactINonConstantTest.java Verify.java - * @run main MulExactINonConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main MulExactINonConstantTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/MulExactIRepeatTest.java b/hotspot/test/compiler/intrinsics/mathexact/MulExactIRepeatTest.java index 5d5a93d05d7..dd14ce21ed6 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/MulExactIRepeatTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/MulExactIRepeatTest.java @@ -26,7 +26,7 @@ * @bug 8026844 * @summary Test repeating multiplyExact * @compile MulExactIRepeatTest.java Verify.java - * @run main MulExactIRepeatTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main MulExactIRepeatTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/MulExactLConstantTest.java b/hotspot/test/compiler/intrinsics/mathexact/MulExactLConstantTest.java index 9668ddfe07e..c687cc276f2 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/MulExactLConstantTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/MulExactLConstantTest.java @@ -26,7 +26,7 @@ * @bug 8026844 * @summary Test constant mulExact * @compile MulExactLConstantTest.java Verify.java - * @run main MulExactLConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main MulExactLConstantTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/MulExactLNonConstantTest.java b/hotspot/test/compiler/intrinsics/mathexact/MulExactLNonConstantTest.java index 3486588c81e..f9d82ed0876 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/MulExactLNonConstantTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/MulExactLNonConstantTest.java @@ -26,7 +26,7 @@ * @bug 8026844 * @summary Test non constant mulExact * @compile MulExactLNonConstantTest.java Verify.java - * @run main MulExactLNonConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main MulExactLNonConstantTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/NegExactIConstantTest.java b/hotspot/test/compiler/intrinsics/mathexact/NegExactIConstantTest.java index 0a5e164ba68..ba49d778762 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/NegExactIConstantTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/NegExactIConstantTest.java @@ -26,7 +26,7 @@ * @bug 8026844 * @summary Test constant negExact * @compile NegExactIConstantTest.java Verify.java - * @run main NegExactIConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main NegExactIConstantTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/NegExactILoadTest.java b/hotspot/test/compiler/intrinsics/mathexact/NegExactILoadTest.java index e7896835ee1..d7e8215600a 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/NegExactILoadTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/NegExactILoadTest.java @@ -26,14 +26,14 @@ * @bug 8026844 * @summary Test negExact * @compile NegExactILoadTest.java Verify.java - * @run main NegExactILoadTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main NegExactILoadTest * */ public class NegExactILoadTest { public static void main(String[] args) { - Verify.LoadTest.init(); - Verify.LoadTest.verify(new Verify.UnaryToBinary(new Verify.NegExactI())); + Verify.LoadTest.init(); + Verify.LoadTest.verify(new Verify.UnaryToBinary(new Verify.NegExactI())); } } diff --git a/hotspot/test/compiler/intrinsics/mathexact/NegExactILoopDependentTest.java b/hotspot/test/compiler/intrinsics/mathexact/NegExactILoopDependentTest.java index a18b0c17eed..882f80b91a1 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/NegExactILoopDependentTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/NegExactILoopDependentTest.java @@ -26,7 +26,7 @@ * @bug 8026844 * @summary Test negExact loop dependent * @compile NegExactILoopDependentTest.java Verify.java - * @run main NegExactILoopDependentTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main NegExactILoopDependentTest * */ public class NegExactILoopDependentTest { diff --git a/hotspot/test/compiler/intrinsics/mathexact/NegExactINonConstantTest.java b/hotspot/test/compiler/intrinsics/mathexact/NegExactINonConstantTest.java index ee87bd82748..6f044f0d969 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/NegExactINonConstantTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/NegExactINonConstantTest.java @@ -26,7 +26,7 @@ * @bug 8026844 * @summary Test non constant negExact * @compile NegExactINonConstantTest.java Verify.java - * @run main NegExactINonConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main NegExactINonConstantTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/NegExactLConstantTest.java b/hotspot/test/compiler/intrinsics/mathexact/NegExactLConstantTest.java index 82e02a960a9..382cd5c5f9e 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/NegExactLConstantTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/NegExactLConstantTest.java @@ -26,7 +26,7 @@ * @bug 8026844 * @summary Test constant negExact * @compile NegExactLConstantTest.java Verify.java - * @run main NegExactLConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main NegExactLConstantTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/NegExactLNonConstantTest.java b/hotspot/test/compiler/intrinsics/mathexact/NegExactLNonConstantTest.java index b7b967dc28e..0bcad8b2b78 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/NegExactLNonConstantTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/NegExactLNonConstantTest.java @@ -26,7 +26,7 @@ * @bug 8026844 * @summary Test constant negExact * @compile NegExactLNonConstantTest.java Verify.java - * @run main NegExactLNonConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main NegExactLNonConstantTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/NestedMathExactTest.java b/hotspot/test/compiler/intrinsics/mathexact/NestedMathExactTest.java index 883fcceacaa..211dc8baff1 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/NestedMathExactTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/NestedMathExactTest.java @@ -26,7 +26,7 @@ * @bug 8027444 * @summary Test nested loops * @compile NestedMathExactTest.java - * @run main NestedMathExactTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main NestedMathExactTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/SplitThruPhiTest.java b/hotspot/test/compiler/intrinsics/mathexact/SplitThruPhiTest.java index 67f3afab007..b3b0c0d7417 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/SplitThruPhiTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/SplitThruPhiTest.java @@ -26,7 +26,7 @@ * @bug 8028198 * @summary Verify that split through phi does the right thing * @compile SplitThruPhiTest.java - * @run main SplitThruPhiTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main SplitThruPhiTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/SubExactICondTest.java b/hotspot/test/compiler/intrinsics/mathexact/SubExactICondTest.java index b4dd4f7daa9..f539bdc7cbe 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/SubExactICondTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/SubExactICondTest.java @@ -26,7 +26,7 @@ * @bug 8026844 * @summary Test subtractExact as condition * @compile SubExactICondTest.java Verify.java - * @run main SubExactICondTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main SubExactICondTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/SubExactIConstantTest.java b/hotspot/test/compiler/intrinsics/mathexact/SubExactIConstantTest.java index 20a27cef161..b450bd90b11 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/SubExactIConstantTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/SubExactIConstantTest.java @@ -26,7 +26,7 @@ * @bug 8026844 * @summary Test constant subtractExact * @compile SubExactIConstantTest.java Verify.java - * @run main SubExactIConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main SubExactIConstantTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/SubExactILoadTest.java b/hotspot/test/compiler/intrinsics/mathexact/SubExactILoadTest.java index 5be582fd03a..af2ed018258 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/SubExactILoadTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/SubExactILoadTest.java @@ -26,7 +26,7 @@ * @bug 8026844 * @summary Test non constant subtractExact * @compile SubExactILoadTest.java Verify.java - * @run main SubExactILoadTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main SubExactILoadTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/SubExactILoopDependentTest.java b/hotspot/test/compiler/intrinsics/mathexact/SubExactILoopDependentTest.java index b4e7b4a30a8..67ebcbca321 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/SubExactILoopDependentTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/SubExactILoopDependentTest.java @@ -26,7 +26,7 @@ * @bug 8026844 * @summary Test non constant subtractExact * @compile SubExactILoopDependentTest.java Verify.java - * @run main SubExactILoopDependentTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main SubExactILoopDependentTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/SubExactINonConstantTest.java b/hotspot/test/compiler/intrinsics/mathexact/SubExactINonConstantTest.java index 82dc81c3d00..b8153810892 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/SubExactINonConstantTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/SubExactINonConstantTest.java @@ -26,7 +26,7 @@ * @bug 8026844 * @summary Test non constant subtractExact * @compile SubExactINonConstantTest.java Verify.java - * @run main SubExactINonConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main SubExactINonConstantTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/SubExactIRepeatTest.java b/hotspot/test/compiler/intrinsics/mathexact/SubExactIRepeatTest.java index 63e4b3d1876..3c57f6f3f76 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/SubExactIRepeatTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/SubExactIRepeatTest.java @@ -26,7 +26,7 @@ * @bug 8026844 * @summary Test repeating subtractExact * @compile SubExactIRepeatTest.java Verify.java - * @run main SubExactIRepeatTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main SubExactIRepeatTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/SubExactLConstantTest.java b/hotspot/test/compiler/intrinsics/mathexact/SubExactLConstantTest.java index 973aa6a3960..ec554d7662b 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/SubExactLConstantTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/SubExactLConstantTest.java @@ -27,7 +27,7 @@ * @bug 8027353 * @summary Test constant subtractExact * @compile SubExactLConstantTest.java Verify.java - * @run main SubExactLConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main SubExactLConstantTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/SubExactLNonConstantTest.java b/hotspot/test/compiler/intrinsics/mathexact/SubExactLNonConstantTest.java index bc0c7331b76..86ecf20f366 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/SubExactLNonConstantTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/SubExactLNonConstantTest.java @@ -27,7 +27,7 @@ * @bug 8027353 * @summary Test non constant subtractExact * @compile SubExactLNonConstantTest.java Verify.java - * @run main SubExactLNonConstantTest -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics + * @run main SubExactLNonConstantTest * */ diff --git a/hotspot/test/compiler/intrinsics/mathexact/Verify.java b/hotspot/test/compiler/intrinsics/mathexact/Verify.java index a4d728bfd6b..3936bf1b4f4 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/Verify.java +++ b/hotspot/test/compiler/intrinsics/mathexact/Verify.java @@ -160,6 +160,7 @@ public class Verify { public static class NonConstantTest { public static java.util.Random rnd = new java.util.Random(); + public static int[] values = new int[] { Integer.MAX_VALUE, Integer.MIN_VALUE }; public static void verify(BinaryMethod method) { for (int i = 0; i < 50000; ++i) { @@ -169,6 +170,10 @@ public class Verify { Verify.verifyBinary(rnd1 + 1, rnd2, method); Verify.verifyBinary(rnd1 - 1, rnd2, method); Verify.verifyBinary(rnd1, rnd2 - 1, method); + Verify.verifyBinary(0, values[0], method); + Verify.verifyBinary(values[0], 0, method); + Verify.verifyBinary(0, values[1], method); + Verify.verifyBinary(values[1], 0, method); } } } diff --git a/hotspot/test/compiler/intrinsics/mathexact/sanity/AddExactIntTest.java b/hotspot/test/compiler/intrinsics/mathexact/sanity/AddExactIntTest.java index c55f847d2a2..a2770dcddf3 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/sanity/AddExactIntTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/AddExactIntTest.java @@ -26,11 +26,11 @@ * @library /testlibrary /testlibrary/whitebox /compiler/whitebox * @build AddExactIntTest * @run main ClassFileInstaller sun.hotspot.WhiteBox - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod * -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics AddExactIntTest - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod * -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics AddExactIntTest diff --git a/hotspot/test/compiler/intrinsics/mathexact/sanity/AddExactLongTest.java b/hotspot/test/compiler/intrinsics/mathexact/sanity/AddExactLongTest.java index 4823f073f5f..c5756440769 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/sanity/AddExactLongTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/AddExactLongTest.java @@ -26,11 +26,11 @@ * @library /testlibrary /testlibrary/whitebox /compiler/whitebox * @build AddExactLongTest * @run main ClassFileInstaller sun.hotspot.WhiteBox - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod * -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics AddExactLongTest - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod * -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics AddExactLongTest diff --git a/hotspot/test/compiler/intrinsics/mathexact/sanity/DecrementExactIntTest.java b/hotspot/test/compiler/intrinsics/mathexact/sanity/DecrementExactIntTest.java index 0b97ab86ae6..19641a1f41a 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/sanity/DecrementExactIntTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/DecrementExactIntTest.java @@ -26,11 +26,11 @@ * @library /testlibrary /testlibrary/whitebox /compiler/whitebox * @build DecrementExactIntTest * @run main ClassFileInstaller sun.hotspot.WhiteBox - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod * -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics DecrementExactIntTest - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod * -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics DecrementExactIntTest diff --git a/hotspot/test/compiler/intrinsics/mathexact/sanity/DecrementExactLongTest.java b/hotspot/test/compiler/intrinsics/mathexact/sanity/DecrementExactLongTest.java index f2429aa9142..a5821698f9d 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/sanity/DecrementExactLongTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/DecrementExactLongTest.java @@ -26,11 +26,11 @@ * @library /testlibrary /testlibrary/whitebox /compiler/whitebox * @build DecrementExactLongTest * @run main ClassFileInstaller sun.hotspot.WhiteBox - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod * -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics DecrementExactLongTest - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod * -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics DecrementExactLongTest @@ -42,4 +42,4 @@ public class DecrementExactLongTest { public static void main(String[] args) throws Exception { new IntrinsicBase.LongTest(MathIntrinsic.LongIntrinsic.Decrement).test(); } -} \ No newline at end of file +} diff --git a/hotspot/test/compiler/intrinsics/mathexact/sanity/IncrementExactIntTest.java b/hotspot/test/compiler/intrinsics/mathexact/sanity/IncrementExactIntTest.java index 714f4e2e04e..bca840ad8f1 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/sanity/IncrementExactIntTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/IncrementExactIntTest.java @@ -26,11 +26,11 @@ * @library /testlibrary /testlibrary/whitebox /compiler/whitebox * @build IncrementExactIntTest * @run main ClassFileInstaller sun.hotspot.WhiteBox - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod * -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics IncrementExactIntTest - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod * -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics IncrementExactIntTest diff --git a/hotspot/test/compiler/intrinsics/mathexact/sanity/IncrementExactLongTest.java b/hotspot/test/compiler/intrinsics/mathexact/sanity/IncrementExactLongTest.java index 19511c49929..5348b774f9b 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/sanity/IncrementExactLongTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/IncrementExactLongTest.java @@ -26,11 +26,11 @@ * @library /testlibrary /testlibrary/whitebox /compiler/whitebox * @build IncrementExactLongTest * @run main ClassFileInstaller sun.hotspot.WhiteBox - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod * -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics IncrementExactLongTest - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod * -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics IncrementExactLongTest diff --git a/hotspot/test/compiler/intrinsics/mathexact/sanity/MultiplyExactIntTest.java b/hotspot/test/compiler/intrinsics/mathexact/sanity/MultiplyExactIntTest.java index bd433500187..a09c1244905 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/sanity/MultiplyExactIntTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/MultiplyExactIntTest.java @@ -26,11 +26,11 @@ * @library /testlibrary /testlibrary/whitebox /compiler/whitebox * @build MultiplyExactIntTest * @run main ClassFileInstaller sun.hotspot.WhiteBox - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod * -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics MultiplyExactIntTest - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod * -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics MultiplyExactIntTest diff --git a/hotspot/test/compiler/intrinsics/mathexact/sanity/MultiplyExactLongTest.java b/hotspot/test/compiler/intrinsics/mathexact/sanity/MultiplyExactLongTest.java index 70651107dae..23154e9ecef 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/sanity/MultiplyExactLongTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/MultiplyExactLongTest.java @@ -26,11 +26,11 @@ * @library /testlibrary /testlibrary/whitebox /compiler/whitebox * @build MultiplyExactLongTest * @run main ClassFileInstaller sun.hotspot.WhiteBox - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod * -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics MultiplyExactLongTest - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod * -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics MultiplyExactLongTest diff --git a/hotspot/test/compiler/intrinsics/mathexact/sanity/NegateExactIntTest.java b/hotspot/test/compiler/intrinsics/mathexact/sanity/NegateExactIntTest.java index 579c2907e91..f41bb7995a9 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/sanity/NegateExactIntTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/NegateExactIntTest.java @@ -26,11 +26,11 @@ * @library /testlibrary /testlibrary/whitebox /compiler/whitebox * @build NegateExactIntTest * @run main ClassFileInstaller sun.hotspot.WhiteBox - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod * -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics NegateExactIntTest - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod * -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics NegateExactIntTest diff --git a/hotspot/test/compiler/intrinsics/mathexact/sanity/NegateExactLongTest.java b/hotspot/test/compiler/intrinsics/mathexact/sanity/NegateExactLongTest.java index 6f114f632ab..27af6553036 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/sanity/NegateExactLongTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/NegateExactLongTest.java @@ -26,11 +26,11 @@ * @library /testlibrary /testlibrary/whitebox /compiler/whitebox * @build NegateExactLongTest * @run main ClassFileInstaller sun.hotspot.WhiteBox - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod * -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics NegateExactLongTest - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod * -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics NegateExactLongTest diff --git a/hotspot/test/compiler/intrinsics/mathexact/sanity/SubtractExactIntTest.java b/hotspot/test/compiler/intrinsics/mathexact/sanity/SubtractExactIntTest.java index d1eaf3919d5..c2cbbc4ef95 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/sanity/SubtractExactIntTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/SubtractExactIntTest.java @@ -26,11 +26,11 @@ * @library /testlibrary /testlibrary/whitebox /compiler/whitebox * @build SubtractExactIntTest * @run main ClassFileInstaller sun.hotspot.WhiteBox - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod * -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics SubtractExactIntTest - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod * -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics SubtractExactIntTest diff --git a/hotspot/test/compiler/intrinsics/mathexact/sanity/SubtractExactLongTest.java b/hotspot/test/compiler/intrinsics/mathexact/sanity/SubtractExactLongTest.java index fbe8eb1e12e..bee6d3bafc4 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/sanity/SubtractExactLongTest.java +++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/SubtractExactLongTest.java @@ -26,11 +26,11 @@ * @library /testlibrary /testlibrary/whitebox /compiler/whitebox * @build SubtractExactLongTest * @run main ClassFileInstaller sun.hotspot.WhiteBox - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod * -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics SubtractExactLongTest - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod * -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics SubtractExactLongTest diff --git a/hotspot/test/compiler/startup/NumCompilerThreadsCheck.java b/hotspot/test/compiler/startup/NumCompilerThreadsCheck.java new file mode 100644 index 00000000000..e7e92d379ac --- /dev/null +++ b/hotspot/test/compiler/startup/NumCompilerThreadsCheck.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2014, 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 8034775 + * @summary Ensures correct minimal number of compiler threads (provided by -XX:CICompilerCount=) + * @library /testlibrary + */ +import com.oracle.java.testlibrary.*; + +public class NumCompilerThreadsCheck { + public static void main(String[] args) throws Exception { + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:CICompilerCount=-1"); + OutputAnalyzer out = new OutputAnalyzer(pb.start()); + + String expectedOutput = "CICompilerCount of -1 is invalid"; + out.shouldContain(expectedOutput); + } +} diff --git a/hotspot/test/compiler/startup/SmallCodeCacheStartup.java b/hotspot/test/compiler/startup/SmallCodeCacheStartup.java index 7a9a11a0836..5db43673fa8 100644 --- a/hotspot/test/compiler/startup/SmallCodeCacheStartup.java +++ b/hotspot/test/compiler/startup/SmallCodeCacheStartup.java @@ -24,19 +24,13 @@ /* * @test * @bug 8023014 - * @summary Test ensures that there is no crash when compiler initialization fails - * @library /testlibrary - * + * @summary Test ensures that there is no crash if there is not enough ReservedCodeacacheSize + * to initialize all compiler threads. The option -Xcomp gives the VM more time to + * to trigger the old bug. + * @run main/othervm -XX:ReservedCodeCacheSize=3m -XX:CICompilerCount=64 -Xcomp SmallCodeCacheStartup */ -import com.oracle.java.testlibrary.*; - public class SmallCodeCacheStartup { public static void main(String[] args) throws Exception { - ProcessBuilder pb; - OutputAnalyzer out; - - pb = ProcessTools.createJavaProcessBuilder("-XX:ReservedCodeCacheSize=3m", "-XX:CICompilerCount=64", "-version"); - out = new OutputAnalyzer(pb.start()); - out.shouldHaveExitValue(0); + System.out.println("TEST PASSED"); } } diff --git a/hotspot/test/compiler/startup/StartupOutput.java b/hotspot/test/compiler/startup/StartupOutput.java index f677853d51c..e4a1b4cd4c5 100644 --- a/hotspot/test/compiler/startup/StartupOutput.java +++ b/hotspot/test/compiler/startup/StartupOutput.java @@ -25,8 +25,7 @@ * @test * @bug 8026949 * @summary Test ensures correct VM output during startup - * @library ../../testlibrary - * + * @library /testlibrary */ import com.oracle.java.testlibrary.*; diff --git a/hotspot/test/compiler/uncommontrap/TestSpecTrapClassUnloading.java b/hotspot/test/compiler/uncommontrap/TestSpecTrapClassUnloading.java new file mode 100644 index 00000000000..11572672afe --- /dev/null +++ b/hotspot/test/compiler/uncommontrap/TestSpecTrapClassUnloading.java @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2014, 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 8031752 + * @summary speculative traps need to be cleaned up at GC + * @run main/othervm -XX:-TieredCompilation -XX:-UseOnStackReplacement -XX:-BackgroundCompilation -XX:+UnlockExperimentalVMOptions -XX:+UseTypeSpeculation -XX:TypeProfileLevel=222 -XX:CompileCommand=exclude,java.lang.reflect.Method::invoke -XX:CompileCommand=exclude,sun.reflect.DelegatingMethodAccessorImpl::invoke -Xmx1M TestSpecTrapClassUnloading + * + */ + +import java.lang.reflect.Method; + +public class TestSpecTrapClassUnloading { + static class B { + final public boolean m(Object o) { + if (o.getClass() == B.class) { + return true; + } + return false; + } + } + + static class MemoryChunk { + MemoryChunk other; + long[] array; + MemoryChunk(MemoryChunk other) { + other = other; + array = new long[1024 * 1024 * 1024]; + } + } + + static void m1(B b, Object o) { + b.m(o); + } + + static void m2(B b, Object o) { + b.m(o); + } + + public static void main(String[] args) throws Exception { + Method m = B.class.getMethod("m", Object.class); + Object o = new Object(); + B b = new B(); + + // add speculative trap in B.m() for m1 + for (int i = 0; i < 20000; i++) { + m1(b, b); + } + m1(b, o); + + // add speculative trap in B.m() for code generated by reflection + for (int i = 0; i < 20000; i++) { + m.invoke(b, b); + } + m.invoke(b, o); + + m = null; + + // add speculative trap in B.m() for m2 + for (int i = 0; i < 20000; i++) { + m2(b, b); + } + m2(b, o); + + // Exhaust memory which causes the code generated by + // reflection to be unloaded but B.m() is not. + MemoryChunk root = null; + try { + while (true) { + root = new MemoryChunk(root); + } + } catch(OutOfMemoryError e) { + root = null; + } + } +} diff --git a/hotspot/test/runtime/7158988/FieldMonitor.java b/hotspot/test/runtime/7158988/FieldMonitor.java index 5421f626278..9b16fc3d798 100644 --- a/hotspot/test/runtime/7158988/FieldMonitor.java +++ b/hotspot/test/runtime/7158988/FieldMonitor.java @@ -34,10 +34,6 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.Reader; -import java.io.Writer; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -56,6 +52,7 @@ import com.sun.jdi.event.EventQueue; import com.sun.jdi.event.EventSet; import com.sun.jdi.event.ModificationWatchpointEvent; import com.sun.jdi.event.VMDeathEvent; +import com.sun.jdi.event.VMStartEvent; import com.sun.jdi.event.VMDisconnectEvent; import com.sun.jdi.request.ClassPrepareRequest; import com.sun.jdi.request.EventRequest; @@ -71,24 +68,10 @@ public class FieldMonitor { public static void main(String[] args) throws IOException, InterruptedException { - StringBuffer sb = new StringBuffer(); - - for (int i=0; i < args.length; i++) { - sb.append(' '); - sb.append(args[i]); - } //VirtualMachine vm = launchTarget(sb.toString()); VirtualMachine vm = launchTarget(CLASS_NAME); System.out.println("Vm launched"); - // set watch field on already loaded classes - List referenceTypes = vm - .classesByName(CLASS_NAME); - for (ReferenceType refType : referenceTypes) { - addFieldWatch(vm, refType); - } - // watch for loaded classes - addClassWatch(vm); // process events EventQueue eventQueue = vm.eventQueue(); @@ -104,13 +87,15 @@ public class FieldMonitor { errThread.start(); outThread.start(); - - vm.resume(); boolean connected = true; + int watched = 0; while (connected) { EventSet eventSet = eventQueue.remove(); for (Event event : eventSet) { - if (event instanceof VMDeathEvent + System.out.println("FieldMonitor-main receives: "+event); + if (event instanceof VMStartEvent) { + addClassWatch(vm); + } else if (event instanceof VMDeathEvent || event instanceof VMDisconnectEvent) { // exit connected = false; @@ -122,17 +107,17 @@ public class FieldMonitor { .referenceType(); addFieldWatch(vm, refType); } else if (event instanceof ModificationWatchpointEvent) { + watched++; System.out.println("sleep for 500 ms"); Thread.sleep(500); - System.out.println("resume..."); ModificationWatchpointEvent modEvent = (ModificationWatchpointEvent) event; System.out.println("old=" + modEvent.valueCurrent()); System.out.println("new=" + modEvent.valueToBe()); - System.out.println(); } } + System.out.println("resume..."); eventSet.resume(); } // Shutdown begins when event thread terminates @@ -142,6 +127,10 @@ public class FieldMonitor { } catch (InterruptedException exc) { // we don't interrupt } + + if (watched != 11) { // init + 10 modifications in TestPostFieldModification class + throw new Error("Expected to receive 11 times ModificationWatchpointEvent, but got "+watched); + } } /** diff --git a/hotspot/test/runtime/lambda-features/InvokespecialInterface.java b/hotspot/test/runtime/lambda-features/InvokespecialInterface.java index 80c26186da2..c33dd56ef64 100644 --- a/hotspot/test/runtime/lambda-features/InvokespecialInterface.java +++ b/hotspot/test/runtime/lambda-features/InvokespecialInterface.java @@ -28,7 +28,7 @@ * @bug 8025937 * @bug 8033528 * @summary [JDK 8] Test invokespecial and invokeinterface with the same JVM_CONSTANT_InterfaceMethodref - * @run main/othervm -XX:+StressRewriter InvokespecialInterface + * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+StressRewriter InvokespecialInterface */ import java.util.function.*; import java.util.*; diff --git a/hotspot/test/testlibrary/com/oracle/java/testlibrary/ProcessTools.java b/hotspot/test/testlibrary/com/oracle/java/testlibrary/ProcessTools.java index 4bc11f8bf5d..04293905824 100644 --- a/hotspot/test/testlibrary/com/oracle/java/testlibrary/ProcessTools.java +++ b/hotspot/test/testlibrary/com/oracle/java/testlibrary/ProcessTools.java @@ -154,7 +154,7 @@ public final class ProcessTools { if (addTestVmOptions) { String vmopts = System.getProperty("test.vm.opts"); - if (vmopts != null) { + if (vmopts != null && vmopts.length() > 0) { Collections.addAll(args, vmopts.split("\\s")); } } diff --git a/jaxp/.hgtags b/jaxp/.hgtags index dc38862e746..bca7de34ab8 100644 --- a/jaxp/.hgtags +++ b/jaxp/.hgtags @@ -244,3 +244,4 @@ e4e5069250e717defcb556e2f6be291460988c51 jdk8-b118 64d8b228a72cf9082b1a9a881c81188ccffde234 jdk8-b120 4045edd35e8ba73bfdc23ce8961b9640d4145fe5 jdk9-b00 e5256f530a9b5f2d677ca245de44a617ffb58f52 jdk9-b01 +02f60a253e15240087c043bad77a106792e4d56a jdk9-b02 diff --git a/jaxp/src/javax/xml/stream/XMLEventFactory.java b/jaxp/src/javax/xml/stream/XMLEventFactory.java index 7d543212860..548feeb272a 100644 --- a/jaxp/src/javax/xml/stream/XMLEventFactory.java +++ b/jaxp/src/javax/xml/stream/XMLEventFactory.java @@ -157,8 +157,9 @@ public abstract class XMLEventFactory { *
  • * If {@code factoryId} is "javax.xml.stream.XMLEventFactory", * use the service-provider loading facilities, defined by the - * {@link java.util.ServiceLoader} class, to attempt to locate and load an - * implementation of the service using the specified {@code ClassLoader}. + * {@link java.util.ServiceLoader} class, to attempt to {@linkplain + * java.util.ServiceLoader#load(java.lang.Class, java.lang.ClassLoader) locate and load} + * an implementation of the service using the specified {@code ClassLoader}. * If {@code classLoader} is null, the {@linkplain * java.util.ServiceLoader#load(java.lang.Class) default loading mechanism} will apply: * That is, the service-provider loading facility will use the {@linkplain diff --git a/jaxp/src/javax/xml/stream/XMLInputFactory.java b/jaxp/src/javax/xml/stream/XMLInputFactory.java index 2275ad7330d..20af7a052b2 100644 --- a/jaxp/src/javax/xml/stream/XMLInputFactory.java +++ b/jaxp/src/javax/xml/stream/XMLInputFactory.java @@ -247,8 +247,9 @@ public abstract class XMLInputFactory { *
  • * If {@code factoryId} is "javax.xml.stream.XMLInputFactory", * use the service-provider loading facilities, defined by the - * {@link java.util.ServiceLoader} class, to attempt to locate and load an - * implementation of the service using the specified {@code ClassLoader}. + * {@link java.util.ServiceLoader} class, to attempt to {@linkplain + * java.util.ServiceLoader#load(java.lang.Class, java.lang.ClassLoader) locate and load} + * an implementation of the service using the specified {@code ClassLoader}. * If {@code classLoader} is null, the {@linkplain * java.util.ServiceLoader#load(java.lang.Class) default loading mechanism} will apply: * That is, the service-provider loading facility will use the {@linkplain diff --git a/jaxp/src/javax/xml/stream/XMLOutputFactory.java b/jaxp/src/javax/xml/stream/XMLOutputFactory.java index df99723f191..e875ac2c277 100644 --- a/jaxp/src/javax/xml/stream/XMLOutputFactory.java +++ b/jaxp/src/javax/xml/stream/XMLOutputFactory.java @@ -221,8 +221,9 @@ public abstract class XMLOutputFactory { *
  • * If {@code factoryId} is "javax.xml.stream.XMLOutputFactory", * use the service-provider loading facilities, defined by the - * {@link java.util.ServiceLoader} class, to attempt to locate and load an - * implementation of the service using the specified {@code ClassLoader}. + * {@link java.util.ServiceLoader} class, to attempt to {@linkplain + * java.util.ServiceLoader#load(java.lang.Class, java.lang.ClassLoader) locate and load} + * an implementation of the service using the specified {@code ClassLoader}. * If {@code classLoader} is null, the {@linkplain * java.util.ServiceLoader#load(java.lang.Class) default loading mechanism} will apply: * That is, the service-provider loading facility will use the {@linkplain diff --git a/jaxws/.hgtags b/jaxws/.hgtags index a3601127a12..a6c41cf6400 100644 --- a/jaxws/.hgtags +++ b/jaxws/.hgtags @@ -247,3 +247,4 @@ bc622ba563f9316f981c11c3a260f4c3fdc5ef07 jdk8-b122 91f5c542ccad330efc0d281362dd6f33f2039746 jdk8-b123 32050ab53c8a8e4cb09f04b88db78258a480fb61 jdk9-b00 9c9fabbcd3d526d7ca29165169155f49a107533a jdk9-b01 +efe2bc258c78af49de9517a4a5699d3a2e630c44 jdk9-b02 diff --git a/jaxws/build.properties b/jaxws/build.properties index 9240acc57f8..f2c977cd749 100644 --- a/jaxws/build.properties +++ b/jaxws/build.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2007, 2012, 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 diff --git a/jaxws/build.xml b/jaxws/build.xml index afea552e3b8..ef0402f3b01 100644 --- a/jaxws/build.xml +++ b/jaxws/build.xml @@ -1,6 +1,6 @@ ' $OUT - - -# Header -# - -$SH ${SCRIPTS}/addNotices.sh "$COPYRIGHT_YEARS" > $OUT - -cat <<__END__ >>$OUT - -// -- This file was mechanically generated: Do not edit! -- // - -package $PKG; - -import java.nio.charset.*; - - -public class $CLASS - extends FastCharsetProvider -{ - -__END__ - - -# Alias tables -# -$NAWK <$SPEC >>$OUT ' - BEGIN { n = 1; m = 1; } - - /^[ \t]*charset / { - csn = $2; cln = $3; - lcsn = tolower(csn); - lcsns[n++] = lcsn; - csns[lcsn] = csn; - classMap[lcsn] = cln; - if (n > 2) - printf " };\n\n"; - printf " static final String[] aliases_%s = new String[] {\n", cln; - } - - /^[ \t]*alias / { - acsns[m++] = tolower($2); - aliasMap[tolower($2)] = lcsn; - printf " \"%s\",\n", $2; - } - - END { - printf " };\n\n"; - } -' - - -# Prehashed alias and class maps -# -$NAWK <$SPEC >$TEMPDIR/aliases ' - /^[ \t]*charset / { - csn = $2; - lcsn = tolower(csn); - } - /^[ \t]*alias / { - an = tolower($2); - printf "%-20s \"%s\"\n", an, lcsn; - } -' - -$NAWK <$SPEC >$TEMPDIR/classes ' - /^[ \t]*charset / { - csn = $2; cln = $3; - lcsn = tolower(csn); - printf "%-20s \"%s\"\n", lcsn, cln; - } -' - -${HASHER} -i Aliases <$TEMPDIR/aliases >>$OUT -${HASHER} -i Classes <$TEMPDIR/classes >>$OUT -${HASHER} -i -e Cache -t Charset <$TEMPDIR/classes >>$OUT - - -# Constructor -# -cat <<__END__ >>$OUT - public $CLASS() { - super("$PKG", new Aliases(), new Classes(), new Cache()); - } - -} -__END__ diff --git a/jdk/make/src/classes/build/tools/hasher/Hasher.java b/jdk/make/src/classes/build/tools/hasher/Hasher.java index bf041976ef2..058655e767c 100644 --- a/jdk/make/src/classes/build/tools/hasher/Hasher.java +++ b/jdk/make/src/classes/build/tools/hasher/Hasher.java @@ -43,9 +43,6 @@ import java.util.*; public class Hasher { - // This class cannot, sadly, make use of 1.5 features since it must be - // compiled and run with the bootstrap JDK, which is 1.4.2. - static final PrintStream out = System.out; static final PrintStream err = System.err; @@ -184,11 +181,13 @@ public class Hasher { if (md <= maxDepth) { // Success out.flush(); - if (cln != null) - err.print(cln + ": "); - err.println("Table size " + (1 << nb) + " (" + nb + " bits)" - + ", shift " + shift - + ", max chain depth " + md); + if (verbose) { + if (cln != null) + err.print(cln + ": "); + err.println("Table size " + (1 << nb) + " (" + nb + " bits)" + + ", shift " + shift + + ", max chain depth " + md); + } return this; } } diff --git a/jdk/src/aix/classes/sun/awt/fontconfigs/aix.fontconfig.properties b/jdk/src/aix/classes/sun/awt/fontconfigs/aix.fontconfig.properties new file mode 100644 index 00000000000..29e7c7d9510 --- /dev/null +++ b/jdk/src/aix/classes/sun/awt/fontconfigs/aix.fontconfig.properties @@ -0,0 +1,77 @@ +# +# +# Copyright 2013 SAP AG. 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. +# + +# Minimal version for AIX using the standard Latin Type1 Fonts from the +# package X11.fnt.iso_T1. These fonts are installed by default into +# "/usr/lpp/X11/lib/X11/fonts/Type1" and sym-linked to "/usr/lib/X11/fonts/Type1" + +# Version + +version=1 + +# Component Font Mappings + +dialog.plain.latin-1=-*-helvetica-medium-r-normal--*-%d-100-100-p-*-iso10646-1 +dialog.bold.latin-1=-*-helvetica-bold-r-normal--*-%d-100-100-p-*-iso10646-1 +dialog.italic.latin-1=-*-helvetica-medium-o-normal--*-%d-100-100-p-*-iso10646-1 +dialog.bolditalic.latin-1=-*-helvetica-bold-o-normal--*-%d-100-100-p-*-iso10646-1 + +dialoginput.plain.latin-1=-*-courier-medium-r-normal--*-%d-100-100-m-*-iso10646-1 +dialoginput.bold.latin-1=-*-courier-bold-r-normal--*-%d-100-100-m-*-iso10646-1 +dialoginput.italic.latin-1=-*-courier-medium-o-normal--*-%d-100-100-m-*-iso10646-1 +dialoginput.bolditalic.latin-1=-*-courier-bold-o-normal--*-%d-100-100-m-*-iso10646-1 + +sansserif.plain.latin-1=-*-helvetica-medium-r-normal--*-%d-100-100-p-*-iso10646-1 +sansserif.bold.latin-1=-*-helvetica-bold-r-normal--*-%d-100-100-p-*-iso10646-1 +sansserif.italic.latin-1=-*-helvetica-medium-o-normal--*-%d-100-100-p-*-iso10646-1 +sansserif.bolditalic.latin-1=-*-helvetica-bold-o-normal--*-%d-100-100-p-*-iso10646-1 + +serif.plain.latin-1=-*-times new roman-medium-r-normal--*-%d-100-100-p-*-iso10646-1 +serif.bold.latin-1=-*-times new roman-bold-r-normal--*-%d-100-100-p-*-iso10646-1 +serif.italic.latin-1=-*-times new roman-medium-i-normal--*-%d-100-100-p-*-iso10646-1 +serif.bolditalic.latin-1=-*-times new roman-bold-i-normal--*-%d-100-100-p-*-iso10646-1 + +monospaced.plain.latin-1=-*-courier-medium-r-normal--*-%d-100-100-m-*-iso10646-1 +monospaced.bold.latin-1=-*-courier-bold-r-normal--*-%d-100-100-m-*-iso10646-1 +monospaced.italic.latin-1=-*-courier-medium-o-normal--*-%d-100-100-m-*-iso10646-1 +monospaced.bolditalic.latin-1=-*-courier-bold-o-normal--*-%d-100-100-m-*-iso10646-1 + +# Search Sequences + +sequence.allfonts=latin-1 + +filename.-*-courier-medium-r-normal--*-%d-100-100-m-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/cour.pfa +filename.-*-courier-bold-r-normal--*-%d-100-100-m-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/courb.pfa +filename.-*-courier-medium-o-normal--*-%d-100-100-m-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/couri.pfa +filename.-*-courier-bold-o-normal--*-%d-100-100-m-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/courbi.pfa +filename.-*-helvetica-medium-r-normal--*-%d-100-100-p-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/helv.pfa +filename.-*-helvetica-bold-r-normal--*-%d-100-100-p-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/helvb.pfa +filename.-*-helvetica-medium-o-normal--*-%d-100-100-p-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/helvi.pfa +filename.-*-helvetica-bold-o-normal--*-%d-100-100-p-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/helvbi.pfa +filename.-*-times_new_roman-medium-r-normal--*-%d-100-100-p-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/tnr.pfa +filename.-*-times_new_roman-bold-r-normal--*-%d-100-100-p-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/tnrb.pfa +filename.-*-times_new_roman-medium-i-normal--*-%d-100-100-p-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/tnri.pfa +filename.-*-times_new_roman-bold-i-normal--*-%d-100-100-p-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/tnrbi.pfa diff --git a/jdk/src/aix/classes/sun/nio/ch/AixAsynchronousChannelProvider.java b/jdk/src/aix/classes/sun/nio/ch/AixAsynchronousChannelProvider.java new file mode 100644 index 00000000000..4c2c3d317bf --- /dev/null +++ b/jdk/src/aix/classes/sun/nio/ch/AixAsynchronousChannelProvider.java @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright 2012 SAP AG. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.nio.ch; + +import java.nio.channels.*; +import java.nio.channels.spi.AsynchronousChannelProvider; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.ThreadFactory; +import java.io.IOException; + +public class AixAsynchronousChannelProvider + extends AsynchronousChannelProvider +{ + private static volatile AixPollPort defaultPort; + + private AixPollPort defaultEventPort() throws IOException { + if (defaultPort == null) { + synchronized (AixAsynchronousChannelProvider.class) { + if (defaultPort == null) { + defaultPort = new AixPollPort(this, ThreadPool.getDefault()).start(); + } + } + } + return defaultPort; + } + + public AixAsynchronousChannelProvider() { + } + + @Override + public AsynchronousChannelGroup openAsynchronousChannelGroup(int nThreads, ThreadFactory factory) + throws IOException + { + return new AixPollPort(this, ThreadPool.create(nThreads, factory)).start(); + } + + @Override + public AsynchronousChannelGroup openAsynchronousChannelGroup(ExecutorService executor, int initialSize) + throws IOException + { + return new AixPollPort(this, ThreadPool.wrap(executor, initialSize)).start(); + } + + private Port toPort(AsynchronousChannelGroup group) throws IOException { + if (group == null) { + return defaultEventPort(); + } else { + if (!(group instanceof AixPollPort)) + throw new IllegalChannelGroupException(); + return (Port)group; + } + } + + @Override + public AsynchronousServerSocketChannel openAsynchronousServerSocketChannel(AsynchronousChannelGroup group) + throws IOException + { + return new UnixAsynchronousServerSocketChannelImpl(toPort(group)); + } + + @Override + public AsynchronousSocketChannel openAsynchronousSocketChannel(AsynchronousChannelGroup group) + throws IOException + { + return new UnixAsynchronousSocketChannelImpl(toPort(group)); + } +} diff --git a/jdk/src/aix/classes/sun/nio/ch/AixPollPort.java b/jdk/src/aix/classes/sun/nio/ch/AixPollPort.java new file mode 100644 index 00000000000..2db99a77b3e --- /dev/null +++ b/jdk/src/aix/classes/sun/nio/ch/AixPollPort.java @@ -0,0 +1,536 @@ +/* + * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright 2012 SAP AG. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.nio.ch; + +import java.nio.channels.spi.AsynchronousChannelProvider; +import java.io.IOException; +import java.util.HashSet; +import java.util.Iterator; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.RejectedExecutionException; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.locks.ReentrantLock; +import sun.misc.Unsafe; + +/** + * AsynchronousChannelGroup implementation based on the AIX pollset framework. + */ +final class AixPollPort + extends Port +{ + private static final Unsafe unsafe = Unsafe.getUnsafe(); + + static { + IOUtil.load(); + init(); + } + + /** + * struct pollfd { + * int fd; + * short events; + * short revents; + * } + */ + private static final int SIZEOF_POLLFD = eventSize(); + private static final int OFFSETOF_EVENTS = eventsOffset(); + private static final int OFFSETOF_REVENTS = reventsOffset(); + private static final int OFFSETOF_FD = fdOffset(); + + // opcodes + private static final int PS_ADD = 0x0; + private static final int PS_MOD = 0x1; + private static final int PS_DELETE = 0x2; + + // maximum number of events to poll at a time + private static final int MAX_POLL_EVENTS = 512; + + // pollset ID + private final int pollset; + + // true if port is closed + private boolean closed; + + // socket pair used for wakeup + private final int sp[]; + + // socket pair used to indicate pending pollsetCtl calls + // Background info: pollsetCtl blocks when another thread is in a pollsetPoll call. + private final int ctlSp[]; + + // number of wakeups pending + private final AtomicInteger wakeupCount = new AtomicInteger(); + + // address of the poll array passed to pollset_poll + private final long address; + + // encapsulates an event for a channel + static class Event { + final PollableChannel channel; + final int events; + + Event(PollableChannel channel, int events) { + this.channel = channel; + this.events = events; + } + + PollableChannel channel() { return channel; } + int events() { return events; } + } + + // queue of events for cases that a polling thread dequeues more than one + // event + private final ArrayBlockingQueue queue; + private final Event NEED_TO_POLL = new Event(null, 0); + private final Event EXECUTE_TASK_OR_SHUTDOWN = new Event(null, 0); + + // encapsulates a pollset control event for a file descriptor + static class ControlEvent { + final int fd; + final int events; + final boolean removeOnly; + int error = 0; + + ControlEvent(int fd, int events, boolean removeOnly) { + this.fd = fd; + this.events = events; + this.removeOnly = removeOnly; + } + + int fd() { return fd; } + int events() { return events; } + boolean removeOnly() { return removeOnly; } + int error() { return error; } + void setError(int error) { this.error = error; } + } + + // queue of control events that need to be processed + // (this object is also used for synchronization) + private final HashSet controlQueue = new HashSet(); + + // lock used to check whether a poll operation is ongoing + private final ReentrantLock controlLock = new ReentrantLock(); + + AixPollPort(AsynchronousChannelProvider provider, ThreadPool pool) + throws IOException + { + super(provider, pool); + + // open pollset + this.pollset = pollsetCreate(); + + // create socket pair for wakeup mechanism + int[] sv = new int[2]; + try { + socketpair(sv); + // register one end with pollset + pollsetCtl(pollset, PS_ADD, sv[0], Net.POLLIN); + } catch (IOException x) { + pollsetDestroy(pollset); + throw x; + } + this.sp = sv; + + // create socket pair for pollset control mechanism + sv = new int[2]; + try { + socketpair(sv); + // register one end with pollset + pollsetCtl(pollset, PS_ADD, sv[0], Net.POLLIN); + } catch (IOException x) { + pollsetDestroy(pollset); + throw x; + } + this.ctlSp = sv; + + // allocate the poll array + this.address = allocatePollArray(MAX_POLL_EVENTS); + + // create the queue and offer the special event to ensure that the first + // threads polls + this.queue = new ArrayBlockingQueue(MAX_POLL_EVENTS); + this.queue.offer(NEED_TO_POLL); + } + + AixPollPort start() { + startThreads(new EventHandlerTask()); + return this; + } + + /** + * Release all resources + */ + private void implClose() { + synchronized (this) { + if (closed) + return; + closed = true; + } + freePollArray(address); + close0(sp[0]); + close0(sp[1]); + close0(ctlSp[0]); + close0(ctlSp[1]); + pollsetDestroy(pollset); + } + + private void wakeup() { + if (wakeupCount.incrementAndGet() == 1) { + // write byte to socketpair to force wakeup + try { + interrupt(sp[1]); + } catch (IOException x) { + throw new AssertionError(x); + } + } + } + + @Override + void executeOnHandlerTask(Runnable task) { + synchronized (this) { + if (closed) + throw new RejectedExecutionException(); + offerTask(task); + wakeup(); + } + } + + @Override + void shutdownHandlerTasks() { + /* + * If no tasks are running then just release resources; otherwise + * write to the one end of the socketpair to wakeup any polling threads. + */ + int nThreads = threadCount(); + if (nThreads == 0) { + implClose(); + } else { + // send interrupt to each thread + while (nThreads-- > 0) { + wakeup(); + } + } + } + + // invoke by clients to register a file descriptor + @Override + void startPoll(int fd, int events) { + queueControlEvent(new ControlEvent(fd, events, false)); + } + + // Callback method for implementations that need special handling when fd is removed + @Override + protected void preUnregister(int fd) { + queueControlEvent(new ControlEvent(fd, 0, true)); + } + + // Add control event into queue and wait for completion. + // In case the control lock is free, this method also tries to apply the control change directly. + private void queueControlEvent(ControlEvent ev) { + // pollsetCtl blocks when a poll call is ongoing. This is very probable. + // Therefore we let the polling thread do the pollsetCtl call. + synchronized (controlQueue) { + controlQueue.add(ev); + // write byte to socketpair to force wakeup + try { + interrupt(ctlSp[1]); + } catch (IOException x) { + throw new AssertionError(x); + } + do { + // Directly empty queue if no poll call is ongoing. + if (controlLock.tryLock()) { + try { + processControlQueue(); + } finally { + controlLock.unlock(); + } + } else { + try { + // Do not starve in case the polling thread returned before + // we could write to ctlSp[1] but the polling thread did not + // release the control lock until we checked. Therefore, use + // a timed wait for the time being. + controlQueue.wait(100); + } catch (InterruptedException e) { + // ignore exception and try again + } + } + } while (controlQueue.contains(ev)); + } + if (ev.error() != 0) { + throw new AssertionError(); + } + } + + // Process all events currently stored in the control queue. + private void processControlQueue() { + synchronized (controlQueue) { + // On Aix it is only possible to set the event + // bits on the first call of pollsetCtl. Later + // calls only add bits, but cannot remove them. + // Therefore, we always remove the file + // descriptor ignoring the error and then add it. + Iterator iter = controlQueue.iterator(); + while (iter.hasNext()) { + ControlEvent ev = iter.next(); + pollsetCtl(pollset, PS_DELETE, ev.fd(), 0); + if (!ev.removeOnly()) { + ev.setError(pollsetCtl(pollset, PS_MOD, ev.fd(), ev.events())); + } + iter.remove(); + } + controlQueue.notifyAll(); + } + } + + /* + * Task to process events from pollset and dispatch to the channel's + * onEvent handler. + * + * Events are retreived from pollset in batch and offered to a BlockingQueue + * where they are consumed by handler threads. A special "NEED_TO_POLL" + * event is used to signal one consumer to re-poll when all events have + * been consumed. + */ + private class EventHandlerTask implements Runnable { + private Event poll() throws IOException { + try { + for (;;) { + int n; + controlLock.lock(); + try { + n = pollsetPoll(pollset, address, MAX_POLL_EVENTS); + } finally { + controlLock.unlock(); + } + /* + * 'n' events have been read. Here we map them to their + * corresponding channel in batch and queue n-1 so that + * they can be handled by other handler threads. The last + * event is handled by this thread (and so is not queued). + */ + fdToChannelLock.readLock().lock(); + try { + while (n-- > 0) { + long eventAddress = getEvent(address, n); + int fd = getDescriptor(eventAddress); + + // To emulate one shot semantic we need to remove + // the file descriptor here. + pollsetCtl(pollset, PS_DELETE, fd, 0); + + // wakeup + if (fd == sp[0]) { + if (wakeupCount.decrementAndGet() == 0) { + // no more wakeups so drain pipe + drain1(sp[0]); + } + + // This is the only file descriptor without + // one shot semantic => register it again. + pollsetCtl(pollset, PS_ADD, sp[0], Net.POLLIN); + + // queue special event if there are more events + // to handle. + if (n > 0) { + queue.offer(EXECUTE_TASK_OR_SHUTDOWN); + continue; + } + return EXECUTE_TASK_OR_SHUTDOWN; + } + + // wakeup to process control event + if (fd == ctlSp[0]) { + synchronized (controlQueue) { + drain1(ctlSp[0]); + // This file descriptor does not have + // one shot semantic => register it again. + pollsetCtl(pollset, PS_ADD, ctlSp[0], Net.POLLIN); + processControlQueue(); + } + continue; + } + + PollableChannel channel = fdToChannel.get(fd); + if (channel != null) { + int events = getRevents(eventAddress); + Event ev = new Event(channel, events); + + // n-1 events are queued; This thread handles + // the last one except for the wakeup + if (n > 0) { + queue.offer(ev); + } else { + return ev; + } + } + } + } finally { + fdToChannelLock.readLock().unlock(); + } + } + } finally { + // to ensure that some thread will poll when all events have + // been consumed + queue.offer(NEED_TO_POLL); + } + } + + public void run() { + Invoker.GroupAndInvokeCount myGroupAndInvokeCount = + Invoker.getGroupAndInvokeCount(); + final boolean isPooledThread = (myGroupAndInvokeCount != null); + boolean replaceMe = false; + Event ev; + try { + for (;;) { + // reset invoke count + if (isPooledThread) + myGroupAndInvokeCount.resetInvokeCount(); + + try { + replaceMe = false; + ev = queue.take(); + + // no events and this thread has been "selected" to + // poll for more. + if (ev == NEED_TO_POLL) { + try { + ev = poll(); + } catch (IOException x) { + x.printStackTrace(); + return; + } + } + } catch (InterruptedException x) { + continue; + } + + // handle wakeup to execute task or shutdown + if (ev == EXECUTE_TASK_OR_SHUTDOWN) { + Runnable task = pollTask(); + if (task == null) { + // shutdown request + return; + } + // run task (may throw error/exception) + replaceMe = true; + task.run(); + continue; + } + + // process event + try { + ev.channel().onEvent(ev.events(), isPooledThread); + } catch (Error x) { + replaceMe = true; throw x; + } catch (RuntimeException x) { + replaceMe = true; throw x; + } + } + } finally { + // last handler to exit when shutdown releases resources + int remaining = threadExit(this, replaceMe); + if (remaining == 0 && isShutdown()) { + implClose(); + } + } + } + } + + /** + * Allocates a poll array to handle up to {@code count} events. + */ + private static long allocatePollArray(int count) { + return unsafe.allocateMemory(count * SIZEOF_POLLFD); + } + + /** + * Free a poll array + */ + private static void freePollArray(long address) { + unsafe.freeMemory(address); + } + + /** + * Returns event[i]; + */ + private static long getEvent(long address, int i) { + return address + (SIZEOF_POLLFD*i); + } + + /** + * Returns event->fd + */ + private static int getDescriptor(long eventAddress) { + return unsafe.getInt(eventAddress + OFFSETOF_FD); + } + + /** + * Returns event->events + */ + private static int getEvents(long eventAddress) { + return unsafe.getChar(eventAddress + OFFSETOF_EVENTS); + } + + /** + * Returns event->revents + */ + private static int getRevents(long eventAddress) { + return unsafe.getChar(eventAddress + OFFSETOF_REVENTS); + } + + // -- Native methods -- + + private static native void init(); + + private static native int eventSize(); + + private static native int eventsOffset(); + + private static native int reventsOffset(); + + private static native int fdOffset(); + + private static native int pollsetCreate() throws IOException; + + private static native int pollsetCtl(int pollset, int opcode, int fd, int events); + + private static native int pollsetPoll(int pollset, long pollAddress, int numfds) + throws IOException; + + private static native void pollsetDestroy(int pollset); + + private static native void socketpair(int[] sv) throws IOException; + + private static native void interrupt(int fd) throws IOException; + + private static native void drain1(int fd) throws IOException; + + private static native void close0(int fd); +} diff --git a/jdk/src/aix/classes/sun/nio/ch/sctp/SctpChannelImpl.java b/jdk/src/aix/classes/sun/nio/ch/sctp/SctpChannelImpl.java new file mode 100644 index 00000000000..8a147203402 --- /dev/null +++ b/jdk/src/aix/classes/sun/nio/ch/sctp/SctpChannelImpl.java @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package sun.nio.ch.sctp; + +import java.net.SocketAddress; +import java.net.InetAddress; +import java.io.IOException; +import java.util.Set; +import java.nio.ByteBuffer; +import java.nio.channels.spi.SelectorProvider; +import com.sun.nio.sctp.Association; +import com.sun.nio.sctp.MessageInfo; +import com.sun.nio.sctp.NotificationHandler; +import com.sun.nio.sctp.SctpChannel; +import com.sun.nio.sctp.SctpSocketOption; + +/** + * Unimplemented. + */ +public class SctpChannelImpl extends SctpChannel +{ + private static final String message = "SCTP not supported on this platform"; + + public SctpChannelImpl(SelectorProvider provider) { + super(provider); + throw new UnsupportedOperationException(message); + } + + @Override + public Association association() { + throw new UnsupportedOperationException(message); + } + + @Override + public SctpChannel bind(SocketAddress local) + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public SctpChannel bindAddress(InetAddress address) + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public SctpChannel unbindAddress(InetAddress address) + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public boolean connect(SocketAddress remote) throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public boolean connect(SocketAddress remote, int maxOutStreams, + int maxInStreams) throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public boolean isConnectionPending() { + throw new UnsupportedOperationException(message); + } + + @Override + public boolean finishConnect() throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public Set getAllLocalAddresses() + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public Set getRemoteAddresses() + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public SctpChannel shutdown() throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public T getOption(SctpSocketOption name) + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public SctpChannel setOption(SctpSocketOption name, T value) + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public Set> supportedOptions() { + throw new UnsupportedOperationException(message); + } + + @Override + public MessageInfo receive(ByteBuffer dst, T attachment, + NotificationHandler handler) throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public int send(ByteBuffer src, MessageInfo messageInfo) + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + protected void implConfigureBlocking(boolean block) throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public void implCloseSelectableChannel() throws IOException { + throw new UnsupportedOperationException(message); + } +} diff --git a/jdk/src/aix/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java b/jdk/src/aix/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java new file mode 100644 index 00000000000..c2c1d968307 --- /dev/null +++ b/jdk/src/aix/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package sun.nio.ch.sctp; + +import java.net.SocketAddress; +import java.net.InetAddress; +import java.io.IOException; +import java.util.Set; +import java.nio.ByteBuffer; +import java.nio.channels.spi.SelectorProvider; +import com.sun.nio.sctp.Association; +import com.sun.nio.sctp.SctpChannel; +import com.sun.nio.sctp.MessageInfo; +import com.sun.nio.sctp.NotificationHandler; +import com.sun.nio.sctp.SctpMultiChannel; +import com.sun.nio.sctp.SctpSocketOption; + +/** + * Unimplemented. + */ +public class SctpMultiChannelImpl extends SctpMultiChannel +{ + private static final String message = "SCTP not supported on this platform"; + + public SctpMultiChannelImpl(SelectorProvider provider) { + super(provider); + throw new UnsupportedOperationException(message); + } + + @Override + public Set associations() { + throw new UnsupportedOperationException(message); + } + + @Override + public SctpMultiChannel bind(SocketAddress local, + int backlog) throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public SctpMultiChannel bindAddress(InetAddress address) + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public SctpMultiChannel unbindAddress(InetAddress address) + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public Set getAllLocalAddresses() + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public Set getRemoteAddresses + (Association association) throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public SctpMultiChannel shutdown(Association association) + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public T getOption(SctpSocketOption name, + Association association) throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public SctpMultiChannel setOption(SctpSocketOption name, + T value, Association association) throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public Set> supportedOptions() { + throw new UnsupportedOperationException(message); + } + + @Override + public MessageInfo receive(ByteBuffer buffer, T attachment, + NotificationHandler handler) throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public int send(ByteBuffer buffer, MessageInfo messageInfo) + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public SctpChannel branch(Association association) + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + protected void implConfigureBlocking(boolean block) throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public void implCloseSelectableChannel() throws IOException { + throw new UnsupportedOperationException(message); + } +} diff --git a/jdk/src/aix/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java b/jdk/src/aix/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java new file mode 100644 index 00000000000..1e224afd13f --- /dev/null +++ b/jdk/src/aix/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package sun.nio.ch.sctp; + +import java.net.SocketAddress; +import java.net.InetAddress; +import java.io.IOException; +import java.util.Set; +import java.nio.channels.spi.SelectorProvider; +import com.sun.nio.sctp.SctpChannel; +import com.sun.nio.sctp.SctpServerChannel; +import com.sun.nio.sctp.SctpSocketOption; + +/** + * Unimplemented. + */ +public class SctpServerChannelImpl extends SctpServerChannel +{ + private static final String message = "SCTP not supported on this platform"; + + public SctpServerChannelImpl(SelectorProvider provider) { + super(provider); + throw new UnsupportedOperationException(message); + } + + @Override + public SctpChannel accept() throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public SctpServerChannel bind(SocketAddress local, + int backlog) throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public SctpServerChannel bindAddress(InetAddress address) + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public SctpServerChannel unbindAddress(InetAddress address) + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public Set getAllLocalAddresses() + throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public T getOption(SctpSocketOption name) throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public SctpServerChannel setOption(SctpSocketOption name, + T value) throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public Set> supportedOptions() { + throw new UnsupportedOperationException(message); + } + + @Override + protected void implConfigureBlocking(boolean block) throws IOException { + throw new UnsupportedOperationException(message); + } + + @Override + public void implCloseSelectableChannel() throws IOException { + throw new UnsupportedOperationException(message); + } +} diff --git a/jdk/src/aix/classes/sun/nio/fs/AixFileStore.java b/jdk/src/aix/classes/sun/nio/fs/AixFileStore.java new file mode 100644 index 00000000000..c38cb46a760 --- /dev/null +++ b/jdk/src/aix/classes/sun/nio/fs/AixFileStore.java @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright 2013 SAP AG. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.nio.fs; + +import java.nio.file.attribute.*; +import java.util.*; +import java.io.IOException; + +/** + * AIX implementation of FileStore + */ + +class AixFileStore + extends UnixFileStore +{ + + AixFileStore(UnixPath file) throws IOException { + super(file); + } + + AixFileStore(UnixFileSystem fs, UnixMountEntry entry) throws IOException { + super(fs, entry); + } + + /** + * Finds, and returns, the mount entry for the file system where the file + * resides. + */ + @Override + UnixMountEntry findMountEntry() throws IOException { + AixFileSystem fs = (AixFileSystem)file().getFileSystem(); + + // step 1: get realpath + UnixPath path = null; + try { + byte[] rp = UnixNativeDispatcher.realpath(file()); + path = new UnixPath(fs, rp); + } catch (UnixException x) { + x.rethrowAsIOException(file()); + } + + // step 2: find mount point + UnixPath parent = path.getParent(); + while (parent != null) { + UnixFileAttributes attrs = null; + try { + attrs = UnixFileAttributes.get(parent, true); + } catch (UnixException x) { + x.rethrowAsIOException(parent); + } + if (attrs.dev() != dev()) + break; + path = parent; + parent = parent.getParent(); + } + + // step 3: lookup mounted file systems + byte[] dir = path.asByteArray(); + for (UnixMountEntry entry: fs.getMountEntries()) { + if (Arrays.equals(dir, entry.dir())) + return entry; + } + + throw new IOException("Mount point not found"); + } + + // returns true if extended attributes enabled on file system where given + // file resides, returns false if disabled or unable to determine. + private boolean isExtendedAttributesEnabled(UnixPath path) { + return false; + } + + @Override + public boolean supportsFileAttributeView(Class type) { + return super.supportsFileAttributeView(type); + } + + @Override + public boolean supportsFileAttributeView(String name) { + return super.supportsFileAttributeView(name); + } +} diff --git a/jdk/src/aix/classes/sun/nio/fs/AixFileSystem.java b/jdk/src/aix/classes/sun/nio/fs/AixFileSystem.java new file mode 100644 index 00000000000..1169dd31606 --- /dev/null +++ b/jdk/src/aix/classes/sun/nio/fs/AixFileSystem.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright 2013 SAP AG. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.nio.fs; + +import java.nio.file.*; +import java.nio.file.attribute.*; +import java.io.IOException; +import java.util.*; +import static sun.nio.fs.AixNativeDispatcher.*; + +/** + * AIX implementation of FileSystem + */ + +class AixFileSystem extends UnixFileSystem { + + AixFileSystem(UnixFileSystemProvider provider, String dir) { + super(provider, dir); + } + + @Override + public WatchService newWatchService() + throws IOException + { + return new PollingWatchService(); + } + + // lazy initialization of the list of supported attribute views + private static class SupportedFileFileAttributeViewsHolder { + static final Set supportedFileAttributeViews = + supportedFileAttributeViews(); + private static Set supportedFileAttributeViews() { + Set result = new HashSet(); + result.addAll(UnixFileSystem.standardFileAttributeViews()); + return Collections.unmodifiableSet(result); + } + } + + @Override + public Set supportedFileAttributeViews() { + return SupportedFileFileAttributeViewsHolder.supportedFileAttributeViews; + } + + @Override + void copyNonPosixAttributes(int ofd, int nfd) { + // TODO: Implement if needed. + } + + /** + * Returns object to iterate over the mount entries returned by mntctl + */ + @Override + Iterable getMountEntries() { + UnixMountEntry[] entries = null; + try { + entries = getmntctl(); + } catch (UnixException x) { + // nothing we can do + } + if (entries == null) { + return Collections.emptyList(); + } + return Arrays.asList(entries); + } + + @Override + FileStore getFileStore(UnixMountEntry entry) throws IOException { + return new AixFileStore(this, entry); + } +} diff --git a/jdk/src/aix/classes/sun/nio/fs/AixFileSystemProvider.java b/jdk/src/aix/classes/sun/nio/fs/AixFileSystemProvider.java new file mode 100644 index 00000000000..5718d87b387 --- /dev/null +++ b/jdk/src/aix/classes/sun/nio/fs/AixFileSystemProvider.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright 2013 SAP AG. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.nio.fs; + +import java.io.IOException; + +/** + * AIX implementation of FileSystemProvider + */ + +public class AixFileSystemProvider extends UnixFileSystemProvider { + public AixFileSystemProvider() { + super(); + } + + @Override + AixFileSystem newFileSystem(String dir) { + return new AixFileSystem(this, dir); + } + + /** + * @see sun.nio.fs.UnixFileSystemProvider#getFileStore(sun.nio.fs.UnixPath) + */ + @Override + AixFileStore getFileStore(UnixPath path) throws IOException { + return new AixFileStore(path); + } +} diff --git a/jdk/src/aix/classes/sun/nio/fs/AixNativeDispatcher.java b/jdk/src/aix/classes/sun/nio/fs/AixNativeDispatcher.java new file mode 100644 index 00000000000..76e833ae19a --- /dev/null +++ b/jdk/src/aix/classes/sun/nio/fs/AixNativeDispatcher.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright 2013 SAP AG. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.nio.fs; + +import java.security.AccessController; +import java.security.PrivilegedAction; + +/** + * AIX specific system calls. + */ + +class AixNativeDispatcher extends UnixNativeDispatcher { + private AixNativeDispatcher() { } + + /** + * Special implementation of 'getextmntent' (see SolarisNativeDispatcher) + * that returns all entries at once. + */ + static native UnixMountEntry[] getmntctl() throws UnixException; + + // initialize + private static native void init(); + + static { + AccessController.doPrivileged(new PrivilegedAction() { + public Void run() { + System.loadLibrary("nio"); + return null; + }}); + init(); + } +} diff --git a/jdk/src/aix/classes/sun/tools/attach/AixAttachProvider.java b/jdk/src/aix/classes/sun/tools/attach/AixAttachProvider.java new file mode 100644 index 00000000000..a78c6609720 --- /dev/null +++ b/jdk/src/aix/classes/sun/tools/attach/AixAttachProvider.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright 2013 SAP AG. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package sun.tools.attach; + +import com.sun.tools.attach.VirtualMachine; +import com.sun.tools.attach.VirtualMachineDescriptor; +import com.sun.tools.attach.AttachNotSupportedException; +import com.sun.tools.attach.spi.AttachProvider; + +import java.io.IOException; + +// Based on 'LinuxAttachProvider.java'. All occurrences of the string +// "Linux" have been textually replaced by "Aix" to avoid confusion. + +/* + * An AttachProvider implementation for Aix that uses a UNIX domain + * socket. + */ +public class AixAttachProvider extends HotSpotAttachProvider { + + // perf counter for the JVM version + private static final String JVM_VERSION = "java.property.java.vm.version"; + + public AixAttachProvider() { + } + + public String name() { + return "sun"; + } + + public String type() { + return "socket"; + } + + public VirtualMachine attachVirtualMachine(String vmid) + throws AttachNotSupportedException, IOException + { + checkAttachPermission(); + + // AttachNotSupportedException will be thrown if the target VM can be determined + // to be not attachable. + testAttachable(vmid); + + return new AixVirtualMachine(this, vmid); + } + + public VirtualMachine attachVirtualMachine(VirtualMachineDescriptor vmd) + throws AttachNotSupportedException, IOException + { + if (vmd.provider() != this) { + throw new AttachNotSupportedException("provider mismatch"); + } + // To avoid re-checking if the VM if attachable, we check if the descriptor + // is for a hotspot VM - these descriptors are created by the listVirtualMachines + // implementation which only returns a list of attachable VMs. + if (vmd instanceof HotSpotVirtualMachineDescriptor) { + assert ((HotSpotVirtualMachineDescriptor)vmd).isAttachable(); + checkAttachPermission(); + return new AixVirtualMachine(this, vmd.id()); + } else { + return attachVirtualMachine(vmd.id()); + } + } + +} diff --git a/jdk/src/aix/classes/sun/tools/attach/AixVirtualMachine.java b/jdk/src/aix/classes/sun/tools/attach/AixVirtualMachine.java new file mode 100644 index 00000000000..714f5c0d570 --- /dev/null +++ b/jdk/src/aix/classes/sun/tools/attach/AixVirtualMachine.java @@ -0,0 +1,317 @@ +/* + * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright 2013 SAP AG. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package sun.tools.attach; + +import com.sun.tools.attach.VirtualMachine; +import com.sun.tools.attach.AgentLoadException; +import com.sun.tools.attach.AttachNotSupportedException; +import com.sun.tools.attach.spi.AttachProvider; +import java.io.InputStream; +import java.io.IOException; +import java.io.File; +import java.util.Properties; + +// Based on 'LinuxVirtualMachine.java'. All occurrences of the string +// "Linux" have been textually replaced by "Aix" to avoid confusion. + +/* + * Aix implementation of HotSpotVirtualMachine + */ +public class AixVirtualMachine extends HotSpotVirtualMachine { + // "/tmp" is used as a global well-known location for the files + // .java_pid. and .attach_pid. It is important that this + // location is the same for all processes, otherwise the tools + // will not be able to find all Hotspot processes. + // Any changes to this needs to be synchronized with HotSpot. + private static final String tmpdir = "/tmp"; + + // The patch to the socket file created by the target VM + String path; + + /** + * Attaches to the target VM + */ + AixVirtualMachine(AttachProvider provider, String vmid) + throws AttachNotSupportedException, IOException + { + super(provider, vmid); + + // This provider only understands pids + int pid; + try { + pid = Integer.parseInt(vmid); + } catch (NumberFormatException x) { + throw new AttachNotSupportedException("Invalid process identifier"); + } + + // Find the socket file. If not found then we attempt to start the + // attach mechanism in the target VM by sending it a QUIT signal. + // Then we attempt to find the socket file again. + path = findSocketFile(pid); + if (path == null) { + File f = createAttachFile(pid); + try { + sendQuitTo(pid); + + // give the target VM time to start the attach mechanism + int i = 0; + long delay = 200; + int retries = (int)(attachTimeout() / delay); + do { + try { + Thread.sleep(delay); + } catch (InterruptedException x) { } + path = findSocketFile(pid); + i++; + } while (i <= retries && path == null); + if (path == null) { + throw new AttachNotSupportedException( + "Unable to open socket file: target process not responding " + + "or HotSpot VM not loaded"); + } + } finally { + f.delete(); + } + } + + // Check that the file owner/permission to avoid attaching to + // bogus process + checkPermissions(path); + + // Check that we can connect to the process + // - this ensures we throw the permission denied error now rather than + // later when we attempt to enqueue a command. + int s = socket(); + try { + connect(s, path); + } finally { + close(s); + } + } + + /** + * Detach from the target VM + */ + public void detach() throws IOException { + synchronized (this) { + if (this.path != null) { + this.path = null; + } + } + } + + // protocol version + private final static String PROTOCOL_VERSION = "1"; + + // known errors + private final static int ATTACH_ERROR_BADVERSION = 101; + + /** + * Execute the given command in the target VM. + */ + InputStream execute(String cmd, Object ... args) throws AgentLoadException, IOException { + assert args.length <= 3; // includes null + + // did we detach? + String p; + synchronized (this) { + if (this.path == null) { + throw new IOException("Detached from target VM"); + } + p = this.path; + } + + // create UNIX socket + int s = socket(); + + // connect to target VM + try { + connect(s, p); + } catch (IOException x) { + close(s); + throw x; + } + + IOException ioe = null; + + // connected - write request + // + try { + writeString(s, PROTOCOL_VERSION); + writeString(s, cmd); + + for (int i=0; i<3; i++) { + if (i < args.length && args[i] != null) { + writeString(s, (String)args[i]); + } else { + writeString(s, ""); + } + } + } catch (IOException x) { + ioe = x; + } + + + // Create an input stream to read reply + SocketInputStream sis = new SocketInputStream(s); + + // Read the command completion status + int completionStatus; + try { + completionStatus = readInt(sis); + } catch (IOException x) { + sis.close(); + if (ioe != null) { + throw ioe; + } else { + throw x; + } + } + + if (completionStatus != 0) { + sis.close(); + + // In the event of a protocol mismatch then the target VM + // returns a known error so that we can throw a reasonable + // error. + if (completionStatus == ATTACH_ERROR_BADVERSION) { + throw new IOException("Protocol mismatch with target VM"); + } + + // Special-case the "load" command so that the right exception is + // thrown. + if (cmd.equals("load")) { + throw new AgentLoadException("Failed to load agent library"); + } else { + throw new IOException("Command failed in target VM"); + } + } + + // Return the input stream so that the command output can be read + return sis; + } + + /* + * InputStream for the socket connection to get target VM + */ + private class SocketInputStream extends InputStream { + int s; + + public SocketInputStream(int s) { + this.s = s; + } + + public synchronized int read() throws IOException { + byte b[] = new byte[1]; + int n = this.read(b, 0, 1); + if (n == 1) { + return b[0] & 0xff; + } else { + return -1; + } + } + + public synchronized int read(byte[] bs, int off, int len) throws IOException { + if ((off < 0) || (off > bs.length) || (len < 0) || + ((off + len) > bs.length) || ((off + len) < 0)) { + throw new IndexOutOfBoundsException(); + } else if (len == 0) + return 0; + + return AixVirtualMachine.read(s, bs, off, len); + } + + public void close() throws IOException { + AixVirtualMachine.close(s); + } + } + + // Return the socket file for the given process. + private String findSocketFile(int pid) { + File f = new File(tmpdir, ".java_pid" + pid); + if (!f.exists()) { + return null; + } + return f.getPath(); + } + + // On Solaris/Linux/Aix a simple handshake is used to start the attach mechanism + // if not already started. The client creates a .attach_pid file in the + // target VM's working directory (or temp directory), and the SIGQUIT handler + // checks for the file. + private File createAttachFile(int pid) throws IOException { + String fn = ".attach_pid" + pid; + String path = "/proc/" + pid + "/cwd/" + fn; + File f = new File(path); + try { + f.createNewFile(); + } catch (IOException x) { + f = new File(tmpdir, fn); + f.createNewFile(); + } + return f; + } + + /* + * Write/sends the given to the target VM. String is transmitted in + * UTF-8 encoding. + */ + private void writeString(int fd, String s) throws IOException { + if (s.length() > 0) { + byte b[]; + try { + b = s.getBytes("UTF-8"); + } catch (java.io.UnsupportedEncodingException x) { + throw new InternalError(x); + } + AixVirtualMachine.write(fd, b, 0, b.length); + } + byte b[] = new byte[1]; + b[0] = 0; + write(fd, b, 0, 1); + } + + + //-- native methods + + static native void sendQuitTo(int pid) throws IOException; + + static native void checkPermissions(String path) throws IOException; + + static native int socket() throws IOException; + + static native void connect(int fd, String path) throws IOException; + + static native void close(int fd) throws IOException; + + static native int read(int fd, byte buf[], int off, int bufLen) throws IOException; + + static native void write(int fd, byte buf[], int off, int bufLen) throws IOException; + + static { + System.loadLibrary("attach"); + } +} diff --git a/jdk/src/aix/native/java/net/aix_close.c b/jdk/src/aix/native/java/net/aix_close.c new file mode 100644 index 00000000000..e6e64ff5e17 --- /dev/null +++ b/jdk/src/aix/native/java/net/aix_close.c @@ -0,0 +1,438 @@ +/* + * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * 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. + */ + +/* + * This file contains implementations of NET_... functions. The NET_.. functions are + * wrappers for common file- and socket functions plus provisions for non-blocking IO. + * + * (basically, the layers remember all file descriptors waiting for a particular fd; + * all threads waiting on a certain fd can be woken up by sending them a signal; this + * is done e.g. when the fd is closed.) + * + * This was originally copied from the linux_close.c implementation. + * + * Side Note: This coding needs initialization. Under Linux this is done + * automatically via __attribute((constructor)), on AIX this is done manually + * (see aix_close_init). + * + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +/* + * Stack allocated by thread when doing blocking operation + */ +typedef struct threadEntry { + pthread_t thr; /* this thread */ + struct threadEntry *next; /* next thread */ + int intr; /* interrupted */ +} threadEntry_t; + +/* + * Heap allocated during initialized - one entry per fd + */ +typedef struct { + pthread_mutex_t lock; /* fd lock */ + threadEntry_t *threads; /* threads blocked on fd */ +} fdEntry_t; + +/* + * Signal to unblock thread + */ +static int sigWakeup = (SIGRTMAX - 1); + +/* + * The fd table and the number of file descriptors + */ +static fdEntry_t *fdTable = NULL; +static int fdCount = 0; + +/* + * Null signal handler + */ +static void sig_wakeup(int sig) { +} + +/* + * Initialization routine (executed when library is loaded) + * Allocate fd tables and sets up signal handler. + * + * On AIX we don't have __attribute((constructor)) so we need to initialize + * manually (from JNI_OnLoad() in 'src/share/native/java/net/net_util.c') + */ +void aix_close_init() { + struct rlimit nbr_files; + sigset_t sigset; + struct sigaction sa; + + /* Check already initialized */ + if (fdCount > 0 && fdTable != NULL) { + return; + } + + /* + * Allocate table based on the maximum number of + * file descriptors. + */ + if (-1 == getrlimit(RLIMIT_NOFILE, &nbr_files)) { + fprintf(stderr, "library initialization failed - " + "unable to get max # of allocated fds\n"); + abort(); + } + fdCount = nbr_files.rlim_max; + /* + * We have a conceptual problem here, when the number of files is + * unlimited. As a kind of workaround, we ensure the table is big + * enough for handle even a large number of files. Since SAP itself + * recommends a limit of 32000 files, we just use 64000 as 'infinity'. + */ + if (nbr_files.rlim_max == RLIM_INFINITY) { + fdCount = 64000; + } + fdTable = (fdEntry_t *)calloc(fdCount, sizeof(fdEntry_t)); + if (fdTable == NULL) { + fprintf(stderr, "library initialization failed - " + "unable to allocate file descriptor table - out of memory"); + abort(); + } + + { + int i; + for (i=0; i < fdCount; i++) { + pthread_mutex_init(&fdTable[i].lock, NULL); + } + } + + /* + * Setup the signal handler + */ + sa.sa_handler = sig_wakeup; + sa.sa_flags = 0; + sigemptyset(&sa.sa_mask); + sigaction(sigWakeup, &sa, NULL); + + sigemptyset(&sigset); + sigaddset(&sigset, sigWakeup); + sigprocmask(SIG_UNBLOCK, &sigset, NULL); +} + +/* + * Return the fd table for this fd or NULL is fd out + * of range. + */ +static inline fdEntry_t *getFdEntry(int fd) +{ + if (fd < 0 || fd >= fdCount) { + return NULL; + } + return &fdTable[fd]; +} + +/* + * Start a blocking operation :- + * Insert thread onto thread list for the fd. + */ +static inline void startOp(fdEntry_t *fdEntry, threadEntry_t *self) +{ + self->thr = pthread_self(); + self->intr = 0; + + pthread_mutex_lock(&(fdEntry->lock)); + { + self->next = fdEntry->threads; + fdEntry->threads = self; + } + pthread_mutex_unlock(&(fdEntry->lock)); +} + +/* + * End a blocking operation :- + * Remove thread from thread list for the fd + * If fd has been interrupted then set errno to EBADF + */ +static inline void endOp + (fdEntry_t *fdEntry, threadEntry_t *self) +{ + int orig_errno = errno; + pthread_mutex_lock(&(fdEntry->lock)); + { + threadEntry_t *curr, *prev=NULL; + curr = fdEntry->threads; + while (curr != NULL) { + if (curr == self) { + if (curr->intr) { + orig_errno = EBADF; + } + if (prev == NULL) { + fdEntry->threads = curr->next; + } else { + prev->next = curr->next; + } + break; + } + prev = curr; + curr = curr->next; + } + } + pthread_mutex_unlock(&(fdEntry->lock)); + errno = orig_errno; +} + +/* + * Close or dup2 a file descriptor ensuring that all threads blocked on + * the file descriptor are notified via a wakeup signal. + * + * fd1 < 0 => close(fd2) + * fd1 >= 0 => dup2(fd1, fd2) + * + * Returns -1 with errno set if operation fails. + */ +static int closefd(int fd1, int fd2) { + int rv, orig_errno; + fdEntry_t *fdEntry = getFdEntry(fd2); + if (fdEntry == NULL) { + errno = EBADF; + return -1; + } + + /* + * Lock the fd to hold-off additional I/O on this fd. + */ + pthread_mutex_lock(&(fdEntry->lock)); + + { + /* On fast machines we see that we enter dup2 before the + * accepting thread had a chance to get and process the signal. + * So in case we woke a thread up, give it some time to cope. + * Also see https://bugs.openjdk.java.net/browse/JDK-8006395 */ + int num_woken = 0; + + /* + * Send a wakeup signal to all threads blocked on this + * file descriptor. + */ + threadEntry_t *curr = fdEntry->threads; + while (curr != NULL) { + curr->intr = 1; + pthread_kill( curr->thr, sigWakeup ); + num_woken ++; + curr = curr->next; + } + + if (num_woken > 0) { + usleep(num_woken * 50); + } + + /* + * And close/dup the file descriptor + * (restart if interrupted by signal) + */ + do { + if (fd1 < 0) { + rv = close(fd2); + } else { + rv = dup2(fd1, fd2); + } + } while (rv == -1 && errno == EINTR); + } + + /* + * Unlock without destroying errno + */ + orig_errno = errno; + pthread_mutex_unlock(&(fdEntry->lock)); + errno = orig_errno; + + return rv; +} + +/* + * Wrapper for dup2 - same semantics as dup2 system call except + * that any threads blocked in an I/O system call on fd2 will be + * preempted and return -1/EBADF; + */ +int NET_Dup2(int fd, int fd2) { + if (fd < 0) { + errno = EBADF; + return -1; + } + return closefd(fd, fd2); +} + +/* + * Wrapper for close - same semantics as close system call + * except that any threads blocked in an I/O on fd will be + * preempted and the I/O system call will return -1/EBADF. + */ +int NET_SocketClose(int fd) { + return closefd(-1, fd); +} + +/************** Basic I/O operations here ***************/ + +/* + * Macro to perform a blocking IO operation. Restarts + * automatically if interrupted by signal (other than + * our wakeup signal) + */ +#define BLOCKING_IO_RETURN_INT(FD, FUNC) { \ + int ret; \ + threadEntry_t self; \ + fdEntry_t *fdEntry = getFdEntry(FD); \ + if (fdEntry == NULL) { \ + errno = EBADF; \ + return -1; \ + } \ + do { \ + startOp(fdEntry, &self); \ + ret = FUNC; \ + endOp(fdEntry, &self); \ + } while (ret == -1 && errno == EINTR); \ + return ret; \ +} + +int NET_Read(int s, void* buf, size_t len) { + BLOCKING_IO_RETURN_INT( s, recv(s, buf, len, 0) ); +} + +int NET_ReadV(int s, const struct iovec * vector, int count) { + BLOCKING_IO_RETURN_INT( s, readv(s, vector, count) ); +} + +int NET_RecvFrom(int s, void *buf, int len, unsigned int flags, + struct sockaddr *from, int *fromlen) { + socklen_t socklen = *fromlen; + BLOCKING_IO_RETURN_INT( s, recvfrom(s, buf, len, flags, from, &socklen) ); + *fromlen = socklen; +} + +int NET_Send(int s, void *msg, int len, unsigned int flags) { + BLOCKING_IO_RETURN_INT( s, send(s, msg, len, flags) ); +} + +int NET_WriteV(int s, const struct iovec * vector, int count) { + BLOCKING_IO_RETURN_INT( s, writev(s, vector, count) ); +} + +int NET_SendTo(int s, const void *msg, int len, unsigned int + flags, const struct sockaddr *to, int tolen) { + BLOCKING_IO_RETURN_INT( s, sendto(s, msg, len, flags, to, tolen) ); +} + +int NET_Accept(int s, struct sockaddr *addr, int *addrlen) { + socklen_t socklen = *addrlen; + BLOCKING_IO_RETURN_INT( s, accept(s, addr, &socklen) ); + *addrlen = socklen; +} + +int NET_Connect(int s, struct sockaddr *addr, int addrlen) { + BLOCKING_IO_RETURN_INT( s, connect(s, addr, addrlen) ); +} + +#ifndef USE_SELECT +int NET_Poll(struct pollfd *ufds, unsigned int nfds, int timeout) { + BLOCKING_IO_RETURN_INT( ufds[0].fd, poll(ufds, nfds, timeout) ); +} +#else +int NET_Select(int s, fd_set *readfds, fd_set *writefds, + fd_set *exceptfds, struct timeval *timeout) { + BLOCKING_IO_RETURN_INT( s-1, + select(s, readfds, writefds, exceptfds, timeout) ); +} +#endif + +/* + * Wrapper for poll(s, timeout). + * Auto restarts with adjusted timeout if interrupted by + * signal other than our wakeup signal. + */ +int NET_Timeout(int s, long timeout) { + long prevtime = 0, newtime; + struct timeval t; + fdEntry_t *fdEntry = getFdEntry(s); + + /* + * Check that fd hasn't been closed. + */ + if (fdEntry == NULL) { + errno = EBADF; + return -1; + } + + /* + * Pick up current time as may need to adjust timeout + */ + if (timeout > 0) { + gettimeofday(&t, NULL); + prevtime = t.tv_sec * 1000 + t.tv_usec / 1000; + } + + for(;;) { + struct pollfd pfd; + int rv; + threadEntry_t self; + + /* + * Poll the fd. If interrupted by our wakeup signal + * errno will be set to EBADF. + */ + pfd.fd = s; + pfd.events = POLLIN | POLLERR; + + startOp(fdEntry, &self); + rv = poll(&pfd, 1, timeout); + endOp(fdEntry, &self); + + /* + * If interrupted then adjust timeout. If timeout + * has expired return 0 (indicating timeout expired). + */ + if (rv < 0 && errno == EINTR) { + if (timeout > 0) { + gettimeofday(&t, NULL); + newtime = t.tv_sec * 1000 + t.tv_usec / 1000; + timeout -= newtime - prevtime; + if (timeout <= 0) { + return 0; + } + prevtime = newtime; + } + } else { + return rv; + } + + } +} diff --git a/jdk/src/aix/native/sun/nio/ch/AixPollPort.c b/jdk/src/aix/native/sun/nio/ch/AixPollPort.c new file mode 100644 index 00000000000..70064b890ef --- /dev/null +++ b/jdk/src/aix/native/sun/nio/ch/AixPollPort.c @@ -0,0 +1,175 @@ +/* + * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright 2012 SAP AG. 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. + */ + +#include "jni.h" +#include "jni_util.h" +#include "jvm.h" +#include "jlong.h" + +#include "sun_nio_ch_AixPollPort.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* Initially copied from src/solaris/native/sun/nio/ch/nio_util.h */ +#define RESTARTABLE(_cmd, _result) do { \ + do { \ + _result = _cmd; \ + } while((_result == -1) && (errno == EINTR)); \ +} while(0) + +typedef pollset_t pollset_create_func(int maxfd); +typedef int pollset_destroy_func(pollset_t ps); +typedef int pollset_ctl_func(pollset_t ps, struct poll_ctl *pollctl_array, int array_length); +typedef int pollset_poll_func(pollset_t ps, struct pollfd *polldata_array, int array_length, int timeout); +static pollset_create_func* _pollset_create = NULL; +static pollset_destroy_func* _pollset_destroy = NULL; +static pollset_ctl_func* _pollset_ctl = NULL; +static pollset_poll_func* _pollset_poll = NULL; + +JNIEXPORT void JNICALL +Java_sun_nio_ch_AixPollPort_init(JNIEnv* env, jclass this) { + _pollset_create = (pollset_create_func*) dlsym(RTLD_DEFAULT, "pollset_create"); + _pollset_destroy = (pollset_destroy_func*) dlsym(RTLD_DEFAULT, "pollset_destroy"); + _pollset_ctl = (pollset_ctl_func*) dlsym(RTLD_DEFAULT, "pollset_ctl"); + _pollset_poll = (pollset_poll_func*) dlsym(RTLD_DEFAULT, "pollset_poll"); + if (_pollset_create == NULL || _pollset_destroy == NULL || + _pollset_ctl == NULL || _pollset_poll == NULL) { + JNU_ThrowInternalError(env, "unable to get address of pollset functions"); + } +} + +JNIEXPORT jint JNICALL +Java_sun_nio_ch_AixPollPort_eventSize(JNIEnv* env, jclass this) { + return sizeof(struct pollfd); +} + +JNIEXPORT jint JNICALL +Java_sun_nio_ch_AixPollPort_eventsOffset(JNIEnv* env, jclass this) { + return offsetof(struct pollfd, events); +} + +JNIEXPORT jint JNICALL +Java_sun_nio_ch_AixPollPort_reventsOffset(JNIEnv* env, jclass this) { + return offsetof(struct pollfd, revents); +} + +JNIEXPORT jint JNICALL +Java_sun_nio_ch_AixPollPort_fdOffset(JNIEnv* env, jclass this) { + return offsetof(struct pollfd, fd); +} + +JNIEXPORT jint JNICALL +Java_sun_nio_ch_AixPollPort_pollsetCreate(JNIEnv *env, jclass c) { + /* pollset_create can take the maximum number of fds, but we + * cannot predict this number so we leave it at OPEN_MAX. */ + pollset_t ps = _pollset_create(-1); + if (ps < 0) { + JNU_ThrowIOExceptionWithLastError(env, "pollset_create failed"); + } + return (int)ps; +} + +JNIEXPORT jint JNICALL +Java_sun_nio_ch_AixPollPort_pollsetCtl(JNIEnv *env, jclass c, jint ps, + jint opcode, jint fd, jint events) { + struct poll_ctl event; + int res; + + event.cmd = opcode; + event.events = events; + event.fd = fd; + + RESTARTABLE(_pollset_ctl((pollset_t)ps, &event, 1 /* length */), res); + + return (res == 0) ? 0 : errno; +} + +JNIEXPORT jint JNICALL +Java_sun_nio_ch_AixPollPort_pollsetPoll(JNIEnv *env, jclass c, + jint ps, jlong address, jint numfds) { + struct pollfd *events = jlong_to_ptr(address); + int res; + + RESTARTABLE(_pollset_poll(ps, events, numfds, -1), res); + if (res < 0) { + JNU_ThrowIOExceptionWithLastError(env, "pollset_poll failed"); + } + return res; +} + +JNIEXPORT void JNICALL +Java_sun_nio_ch_AixPollPort_pollsetDestroy(JNIEnv *env, jclass c, jint ps) { + int res; + RESTARTABLE(_pollset_destroy((pollset_t)ps), res); +} + +JNIEXPORT void JNICALL +Java_sun_nio_ch_AixPollPort_socketpair(JNIEnv* env, jclass clazz, jintArray sv) { + int sp[2]; + if (socketpair(PF_UNIX, SOCK_STREAM, 0, sp) == -1) { + JNU_ThrowIOExceptionWithLastError(env, "socketpair failed"); + } else { + jint res[2]; + res[0] = (jint)sp[0]; + res[1] = (jint)sp[1]; + (*env)->SetIntArrayRegion(env, sv, 0, 2, &res[0]); + } +} + +JNIEXPORT void JNICALL +Java_sun_nio_ch_AixPollPort_interrupt(JNIEnv *env, jclass c, jint fd) { + int res; + int buf[1]; + buf[0] = 1; + RESTARTABLE(write(fd, buf, 1), res); + if (res < 0) { + JNU_ThrowIOExceptionWithLastError(env, "write failed"); + } +} + +JNIEXPORT void JNICALL +Java_sun_nio_ch_AixPollPort_drain1(JNIEnv *env, jclass cl, jint fd) { + int res; + char buf[1]; + RESTARTABLE(read(fd, buf, 1), res); + if (res < 0) { + JNU_ThrowIOExceptionWithLastError(env, "drain1 failed"); + } +} + +JNIEXPORT void JNICALL +Java_sun_nio_ch_AixPollPort_close0(JNIEnv *env, jclass c, jint fd) { + int res; + RESTARTABLE(close(fd), res); +} diff --git a/jdk/src/aix/native/sun/nio/fs/AixNativeDispatcher.c b/jdk/src/aix/native/sun/nio/fs/AixNativeDispatcher.c new file mode 100644 index 00000000000..e7afb205280 --- /dev/null +++ b/jdk/src/aix/native/sun/nio/fs/AixNativeDispatcher.c @@ -0,0 +1,230 @@ +/* + * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright 2013 SAP AG. 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. + */ + +#include +#include +#include +#include + +#include "jni.h" +#include "jni_util.h" + +#include "sun_nio_fs_AixNativeDispatcher.h" + +static jfieldID entry_name; +static jfieldID entry_dir; +static jfieldID entry_fstype; +static jfieldID entry_options; + +static jclass entry_cls; + +/** + * Call this to throw an internal UnixException when a system/library + * call fails + */ +static void throwUnixException(JNIEnv* env, int errnum) { + jobject x = JNU_NewObjectByName(env, "sun/nio/fs/UnixException", + "(I)V", errnum); + if (x != NULL) { + (*env)->Throw(env, x); + } +} + +/** + * Initialization + */ +JNIEXPORT void JNICALL +Java_sun_nio_fs_AixNativeDispatcher_init(JNIEnv* env, jclass this) +{ + jclass clazz; + + clazz = (*env)->FindClass(env, "sun/nio/fs/UnixMountEntry"); + CHECK_NULL(clazz); + entry_name = (*env)->GetFieldID(env, clazz, "name", "[B"); + CHECK_NULL(entry_name); + entry_dir = (*env)->GetFieldID(env, clazz, "dir", "[B"); + CHECK_NULL(entry_dir); + entry_fstype = (*env)->GetFieldID(env, clazz, "fstype", "[B"); + CHECK_NULL(entry_fstype); + entry_options = (*env)->GetFieldID(env, clazz, "opts", "[B"); + CHECK_NULL(entry_options); + entry_cls = (*env)->NewGlobalRef(env, clazz); + if (entry_cls == NULL) { + JNU_ThrowOutOfMemoryError(env, NULL); + return; + } +} + +/** + * Special implementation of getextmntent (see SolarisNativeDispatcher.c) + * that returns all entries at once. + */ +JNIEXPORT jobjectArray JNICALL +Java_sun_nio_fs_AixNativeDispatcher_getmntctl(JNIEnv* env, jclass this) +{ + int must_free_buf = 0; + char stack_buf[1024]; + char* buffer = stack_buf; + size_t buffer_size = 1024; + int num_entries; + int i; + jobjectArray ret; + struct vmount * vm; + + for (i = 0; i < 5; i++) { + num_entries = mntctl(MCTL_QUERY, buffer_size, buffer); + if (num_entries != 0) { + break; + } + if (must_free_buf) { + free(buffer); + } + buffer_size *= 8; + buffer = malloc(buffer_size); + must_free_buf = 1; + } + /* Treat zero entries like errors. */ + if (num_entries <= 0) { + if (must_free_buf) { + free(buffer); + } + throwUnixException(env, errno); + return NULL; + } + ret = (*env)->NewObjectArray(env, num_entries, entry_cls, NULL); + if (ret == NULL) { + if (must_free_buf) { + free(buffer); + } + return NULL; + } + vm = (struct vmount*)buffer; + for (i = 0; i < num_entries; i++) { + jsize len; + jbyteArray bytes; + const char* fstype; + /* We set all relevant attributes so there is no need to call constructor. */ + jobject entry = (*env)->AllocObject(env, entry_cls); + if (entry == NULL) { + if (must_free_buf) { + free(buffer); + } + return NULL; + } + (*env)->SetObjectArrayElement(env, ret, i, entry); + + /* vm->vmt_data[...].vmt_size is 32 bit aligned and also includes NULL byte. */ + /* Since we only need the characters, it is necessary to check string size manually. */ + len = strlen((char*)vm + vm->vmt_data[VMT_OBJECT].vmt_off); + bytes = (*env)->NewByteArray(env, len); + if (bytes == NULL) { + if (must_free_buf) { + free(buffer); + } + return NULL; + } + (*env)->SetByteArrayRegion(env, bytes, 0, len, (jbyte*)((char *)vm + vm->vmt_data[VMT_OBJECT].vmt_off)); + (*env)->SetObjectField(env, entry, entry_name, bytes); + + len = strlen((char*)vm + vm->vmt_data[VMT_STUB].vmt_off); + bytes = (*env)->NewByteArray(env, len); + if (bytes == NULL) { + if (must_free_buf) { + free(buffer); + } + return NULL; + } + (*env)->SetByteArrayRegion(env, bytes, 0, len, (jbyte*)((char *)vm + vm->vmt_data[VMT_STUB].vmt_off)); + (*env)->SetObjectField(env, entry, entry_dir, bytes); + + switch (vm->vmt_gfstype) { + case MNT_J2: + fstype = "jfs2"; + break; + case MNT_NAMEFS: + fstype = "namefs"; + break; + case MNT_NFS: + fstype = "nfs"; + break; + case MNT_JFS: + fstype = "jfs"; + break; + case MNT_CDROM: + fstype = "cdrom"; + break; + case MNT_PROCFS: + fstype = "procfs"; + break; + case MNT_NFS3: + fstype = "nfs3"; + break; + case MNT_AUTOFS: + fstype = "autofs"; + break; + case MNT_UDF: + fstype = "udfs"; + break; + case MNT_NFS4: + fstype = "nfs4"; + break; + case MNT_CIFS: + fstype = "smbfs"; + break; + default: + fstype = "unknown"; + } + len = strlen(fstype); + bytes = (*env)->NewByteArray(env, len); + if (bytes == NULL) { + if (must_free_buf) { + free(buffer); + } + return NULL; + } + (*env)->SetByteArrayRegion(env, bytes, 0, len, (jbyte*)fstype); + (*env)->SetObjectField(env, entry, entry_fstype, bytes); + + len = strlen((char*)vm + vm->vmt_data[VMT_ARGS].vmt_off); + bytes = (*env)->NewByteArray(env, len); + if (bytes == NULL) { + if (must_free_buf) { + free(buffer); + } + return NULL; + } + (*env)->SetByteArrayRegion(env, bytes, 0, len, (jbyte*)((char *)vm + vm->vmt_data[VMT_ARGS].vmt_off)); + (*env)->SetObjectField(env, entry, entry_options, bytes); + + /* goto the next vmount structure: */ + vm = (struct vmount *)((char *)vm + vm->vmt_length); + } + + if (must_free_buf) { + free(buffer); + } + return ret; +} diff --git a/jdk/src/aix/native/sun/tools/attach/AixVirtualMachine.c b/jdk/src/aix/native/sun/tools/attach/AixVirtualMachine.c new file mode 100644 index 00000000000..a5ba1605132 --- /dev/null +++ b/jdk/src/aix/native/sun/tools/attach/AixVirtualMachine.c @@ -0,0 +1,283 @@ +/* + * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright 2013 SAP AG. 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. + */ + +#include "jni.h" +#include "jni_util.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * Based on 'LinuxVirtualMachine.c'. Non-relevant code has been removed and all + * occurrences of the string "Linux" have been replaced by "Aix". + */ + +#include "sun_tools_attach_AixVirtualMachine.h" + +#define RESTARTABLE(_cmd, _result) do { \ + do { \ + _result = _cmd; \ + } while((_result == -1) && (errno == EINTR)); \ +} while(0) + + +/* + * Class: sun_tools_attach_AixVirtualMachine + * Method: socket + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_sun_tools_attach_AixVirtualMachine_socket + (JNIEnv *env, jclass cls) +{ + int fd = socket(PF_UNIX, SOCK_STREAM, 0); + if (fd == -1) { + JNU_ThrowIOExceptionWithLastError(env, "socket"); + } + /* added time out values */ + else { + struct timeval tv; + tv.tv_sec = 2 * 60; + tv.tv_usec = 0; + + setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, (char*)&tv, sizeof(tv)); + setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, (char*)&tv, sizeof(tv)); + } + return (jint)fd; +} + +/* + * Class: sun_tools_attach_AixVirtualMachine + * Method: connect + * Signature: (ILjava/lang/String;)I + */ +JNIEXPORT void JNICALL Java_sun_tools_attach_AixVirtualMachine_connect + (JNIEnv *env, jclass cls, jint fd, jstring path) +{ + jboolean isCopy; + const char* p = GetStringPlatformChars(env, path, &isCopy); + if (p != NULL) { + struct sockaddr_un addr; + int err = 0; + + /* added missing structure initialization */ + memset(&addr,0, sizeof(addr)); + addr.sun_family = AF_UNIX; + strcpy(addr.sun_path, p); + /* We must call bind with the actual socketaddr length. This is obligatory for AS400. */ + if (connect(fd, (struct sockaddr*)&addr, SUN_LEN(&addr)) == -1) { + err = errno; + } + + if (isCopy) { + JNU_ReleaseStringPlatformChars(env, path, p); + } + + /* + * If the connect failed then we throw the appropriate exception + * here (can't throw it before releasing the string as can't call + * JNI with pending exception) + */ + if (err != 0) { + if (err == ENOENT) { + JNU_ThrowByName(env, "java/io/FileNotFoundException", NULL); + } else { + char* msg = strdup(strerror(err)); + JNU_ThrowIOException(env, msg); + if (msg != NULL) { + free(msg); + } + } + } + } +} + + +/* + * Structure and callback function used to send a QUIT signal to all + * children of a given process + */ +typedef struct { + pid_t ppid; +} SendQuitContext; + +static void SendQuitCallback(const pid_t pid, void* user_data) { + SendQuitContext* context = (SendQuitContext*)user_data; + pid_t parent = getParent(pid); + if (parent == context->ppid) { + kill(pid, SIGQUIT); + } +} + +/* + * Class: sun_tools_attach_AixVirtualMachine + * Method: sendQuitTo + * Signature: (I)V + */ +JNIEXPORT void JNICALL Java_sun_tools_attach_AixVirtualMachine_sendQuitTo + (JNIEnv *env, jclass cls, jint pid) +{ + if (kill((pid_t)pid, SIGQUIT)) { + JNU_ThrowIOExceptionWithLastError(env, "kill"); + } +} + +/* + * Class: sun_tools_attach_AixVirtualMachine + * Method: checkPermissions + * Signature: (Ljava/lang/String;)V + */ +JNIEXPORT void JNICALL Java_sun_tools_attach_AixVirtualMachine_checkPermissions + (JNIEnv *env, jclass cls, jstring path) +{ + jboolean isCopy; + const char* p = GetStringPlatformChars(env, path, &isCopy); + if (p != NULL) { + struct stat64 sb; + uid_t uid, gid; + int res; + /* added missing initialization of the stat64 buffer */ + memset(&sb, 0, sizeof(struct stat64)); + + /* + * Check that the path is owned by the effective uid/gid of this + * process. Also check that group/other access is not allowed. + */ + uid = geteuid(); + gid = getegid(); + + res = stat64(p, &sb); + if (res != 0) { + /* save errno */ + res = errno; + } + + /* release p here before we throw an I/O exception */ + if (isCopy) { + JNU_ReleaseStringPlatformChars(env, path, p); + } + + if (res == 0) { + if ( (sb.st_uid != uid) || (sb.st_gid != gid) || + ((sb.st_mode & (S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)) != 0) ) { + JNU_ThrowIOException(env, "well-known file is not secure"); + } + } else { + char* msg = strdup(strerror(res)); + JNU_ThrowIOException(env, msg); + if (msg != NULL) { + free(msg); + } + } + } +} + +/* + * Class: sun_tools_attach_AixVirtualMachine + * Method: close + * Signature: (I)V + */ +JNIEXPORT void JNICALL Java_sun_tools_attach_AixVirtualMachine_close + (JNIEnv *env, jclass cls, jint fd) +{ + int res; + /* Fixed deadlock when this call of close by the client is not seen by the attach server + * which has accepted the (very short) connection already and is waiting for the request. But read don't get a byte, + * because the close is lost without shutdown. + */ + shutdown(fd, 2); + RESTARTABLE(close(fd), res); +} + +/* + * Class: sun_tools_attach_AixVirtualMachine + * Method: read + * Signature: (I[BI)I + */ +JNIEXPORT jint JNICALL Java_sun_tools_attach_AixVirtualMachine_read + (JNIEnv *env, jclass cls, jint fd, jbyteArray ba, jint off, jint baLen) +{ + unsigned char buf[128]; + size_t len = sizeof(buf); + ssize_t n; + + size_t remaining = (size_t)(baLen - off); + if (len > remaining) { + len = remaining; + } + + RESTARTABLE(read(fd, buf+off, len), n); + if (n == -1) { + JNU_ThrowIOExceptionWithLastError(env, "read"); + } else { + if (n == 0) { + n = -1; // EOF + } else { + (*env)->SetByteArrayRegion(env, ba, off, (jint)n, (jbyte *)(buf+off)); + } + } + return n; +} + +/* + * Class: sun_tools_attach_AixVirtualMachine + * Method: write + * Signature: (I[B)V + */ +JNIEXPORT void JNICALL Java_sun_tools_attach_AixVirtualMachine_write + (JNIEnv *env, jclass cls, jint fd, jbyteArray ba, jint off, jint bufLen) +{ + size_t remaining = bufLen; + do { + unsigned char buf[128]; + size_t len = sizeof(buf); + int n; + + if (len > remaining) { + len = remaining; + } + (*env)->GetByteArrayRegion(env, ba, off, len, (jbyte *)buf); + + RESTARTABLE(write(fd, buf, len), n); + if (n > 0) { + off += n; + remaining -= n; + } else { + JNU_ThrowIOExceptionWithLastError(env, "write"); + return; + } + + } while (remaining > 0); +} diff --git a/jdk/src/aix/porting/porting_aix.c b/jdk/src/aix/porting/porting_aix.c new file mode 100644 index 00000000000..659d9c4c06b --- /dev/null +++ b/jdk/src/aix/porting/porting_aix.c @@ -0,0 +1,86 @@ +/* + * Copyright 2012, 2013 SAP AG. 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. + * + */ + +#include +#include +#include + +#include "porting_aix.h" + +static unsigned char dladdr_buffer[0x4000]; + +static void fill_dll_info(void) { + int rc = loadquery(L_GETINFO,dladdr_buffer, sizeof(dladdr_buffer)); + if (rc == -1) { + fprintf(stderr, "loadquery failed (%d %s)", errno, strerror(errno)); + fflush(stderr); + } +} + +static int dladdr_dont_reload(void* addr, Dl_info* info) { + const struct ld_info* p = (struct ld_info*) dladdr_buffer; + info->dli_fbase = 0; info->dli_fname = 0; + info->dli_sname = 0; info->dli_saddr = 0; + for (;;) { + if (addr >= p->ldinfo_textorg && + addr < (((char*)p->ldinfo_textorg) + p->ldinfo_textsize)) { + info->dli_fname = p->ldinfo_filename; + info->dli_fbase = p->ldinfo_textorg; + return 1; /* [sic] */ + } + if (!p->ldinfo_next) { + break; + } + p = (struct ld_info*)(((char*)p) + p->ldinfo_next); + } + return 0; /* [sic] */ +} + +#ifdef __cplusplus +extern "C" +#endif +int dladdr(void *addr, Dl_info *info) { + static int loaded = 0; + if (!loaded) { + fill_dll_info(); + loaded = 1; + } + if (!addr) { + return 0; /* [sic] */ + } + /* Address could be AIX function descriptor? */ + void* const addr0 = *( (void**) addr ); + int rc = dladdr_dont_reload(addr, info); + if (rc == 0) { + rc = dladdr_dont_reload(addr0, info); + if (rc == 0) { /* [sic] */ + fill_dll_info(); /* refill, maybe loadquery info is outdated */ + rc = dladdr_dont_reload(addr, info); + if (rc == 0) { + rc = dladdr_dont_reload(addr0, info); + } + } + } + return rc; +} diff --git a/jdk/src/aix/porting/porting_aix.h b/jdk/src/aix/porting/porting_aix.h new file mode 100644 index 00000000000..79d1062dd67 --- /dev/null +++ b/jdk/src/aix/porting/porting_aix.h @@ -0,0 +1,59 @@ +/* + * Copyright 2012, 2013 SAP AG. 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. + * + */ + +/* + * Header file to contain porting-relevant code which does not have a + * home anywhere else. + * This is intially based on hotspot/src/os/aix/vm/{loadlib,porting}_aix.{hpp,cpp} + */ + +/* + * Aix' own version of dladdr(). + * This function tries to mimick dladdr(3) on Linux + * (see http://linux.die.net/man/3/dladdr) + * dladdr(3) is not POSIX but a GNU extension, and is not available on AIX. + * + * Differences between AIX dladdr and Linux dladdr: + * + * 1) Dl_info.dli_fbase: can never work, is disabled. + * A loaded image on AIX is divided in multiple segments, at least two + * (text and data) but potentially also far more. This is because the loader may + * load each member into an own segment, as for instance happens with the libC.a + * 2) Dl_info.dli_sname: This only works for code symbols (functions); for data, a + * zero-length string is returned (""). + * 3) Dl_info.dli_saddr: For code, this will return the entry point of the function, + * not the function descriptor. + */ + +typedef struct { + const char *dli_fname; /* file path of loaded library */ + void *dli_fbase; /* doesn't make sence on AIX */ + const char *dli_sname; /* symbol name; "" if not known */ + void *dli_saddr; /* address of *entry* of function; not function descriptor; */ +} Dl_info; + +#ifdef __cplusplus +extern "C" +#endif +int dladdr(void *addr, Dl_info *info); diff --git a/jdk/src/macosx/classes/apple/security/KeychainStore.java b/jdk/src/macosx/classes/apple/security/KeychainStore.java index 2016c4811ab..8df45d7bea7 100644 --- a/jdk/src/macosx/classes/apple/security/KeychainStore.java +++ b/jdk/src/macosx/classes/apple/security/KeychainStore.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2014, 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 @@ -248,7 +248,7 @@ public final class KeychainStore extends KeyStoreSpi { if (((KeyEntry)entry).chain == null) { return null; } else { - return (Certificate[])((KeyEntry)entry).chain.clone(); + return ((KeyEntry)entry).chain.clone(); } } else { return null; @@ -365,7 +365,7 @@ public final class KeychainStore extends KeyStoreSpi { throw new KeyStoreException("Certificate chain does not validate"); } - entry.chain = (Certificate[])chain.clone(); + entry.chain = chain.clone(); entry.chainRefs = new long[entry.chain.length]; } @@ -429,7 +429,7 @@ public final class KeychainStore extends KeyStoreSpi { if ((chain != null) && (chain.length != 0)) { - entry.chain = (Certificate[])chain.clone(); + entry.chain = chain.clone(); entry.chainRefs = new long[entry.chain.length]; } @@ -1122,7 +1122,7 @@ public final class KeychainStore extends KeyStoreSpi { throw uke; } - return ((byte[])key); + return key; } diff --git a/jdk/src/macosx/classes/sun/font/CFontManager.java b/jdk/src/macosx/classes/sun/font/CFontManager.java index e3e216e7a33..a5f36154d64 100644 --- a/jdk/src/macosx/classes/sun/font/CFontManager.java +++ b/jdk/src/macosx/classes/sun/font/CFontManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2014, 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 @@ -76,7 +76,7 @@ public class CFontManager extends SunFontManager { // This is a way to register any kind of Font2D, not just files and composites. public static Font2D[] getGenericFonts() { - return (Font2D[])genericFonts.values().toArray(new Font2D[0]); + return genericFonts.values().toArray(new Font2D[0]); } public Font2D registerGenericFont(Font2D f) @@ -117,7 +117,7 @@ public class CFontManager extends SunFontManager { } return f; } else { - return (Font2D)genericFonts.get(fontName); + return genericFonts.get(fontName); } } diff --git a/jdk/src/macosx/classes/sun/java2d/CRenderer.java b/jdk/src/macosx/classes/sun/java2d/CRenderer.java index e26cdce6e69..b5570f6ce93 100644 --- a/jdk/src/macosx/classes/sun/java2d/CRenderer.java +++ b/jdk/src/macosx/classes/sun/java2d/CRenderer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2014, 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 @@ -457,7 +457,7 @@ public class CRenderer implements PixelDrawPipe, PixelFillPipe, ShapeDrawPipe, D protected boolean blitImage(SunGraphics2D sg2d, Image img, boolean fliph, boolean flipv, int sx, int sy, int sw, int sh, int dx, int dy, int dw, int dh, Color bgColor) { CPrinterSurfaceData surfaceData = (CPrinterSurfaceData)sg2d.getSurfaceData(); - OSXOffScreenSurfaceData imgSurfaceData = (OSXOffScreenSurfaceData) OSXOffScreenSurfaceData.createNewSurface((BufferedImage)img); + OSXOffScreenSurfaceData imgSurfaceData = OSXOffScreenSurfaceData.createNewSurface((BufferedImage)img); surfaceData.blitImage(this, sg2d, imgSurfaceData, fliph, flipv, sx, sy, sw, sh, dx, dy, dw, dh, bgColor); return true; } diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CPrinterJob.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CPrinterJob.java index 0743c00ae63..80257a44c6c 100644 --- a/jdk/src/macosx/classes/sun/lwawt/macosx/CPrinterJob.java +++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CPrinterJob.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2014, 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 @@ -640,7 +640,7 @@ public class CPrinterJob extends RasterPrinterJob { if (onEventThread) { try { EventQueue.invokeAndWait(r); } catch (java.lang.reflect.InvocationTargetException ite) { - Throwable te = (Throwable)ite.getTargetException(); + Throwable te = ite.getTargetException(); if (te instanceof PrinterException) throw (PrinterException)te; else te.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } diff --git a/jdk/src/macosx/classes/sun/nio/ch/KQueueArrayWrapper.java b/jdk/src/macosx/classes/sun/nio/ch/KQueueArrayWrapper.java index 5c82006000c..66e16e24ab7 100644 --- a/jdk/src/macosx/classes/sun/nio/ch/KQueueArrayWrapper.java +++ b/jdk/src/macosx/classes/sun/nio/ch/KQueueArrayWrapper.java @@ -53,10 +53,6 @@ import java.util.LinkedList; */ class KQueueArrayWrapper { - // Event masks - static final short POLLIN = AbstractPollArrayWrapper.POLLIN; - static final short POLLOUT = AbstractPollArrayWrapper.POLLOUT; - // kevent filters static short EVFILT_READ; static short EVFILT_WRITE; @@ -129,9 +125,9 @@ class KQueueArrayWrapper { // SinkChannelImpl, SourceChannelImpl, DatagramChannelImpl, // ServerSocketChannelImpl, SocketChannelImpl if (filter == EVFILT_READ) { - result |= POLLIN; + result |= Net.POLLIN; } else if (filter == EVFILT_WRITE) { - result |= POLLOUT; + result |= Net.POLLOUT; } return result; @@ -180,7 +176,7 @@ class KQueueArrayWrapper { if (!ch.isOpen()) continue; - register0(kq, ch.getFDVal(), u.events & POLLIN, u.events & POLLOUT); + register0(kq, ch.getFDVal(), u.events & Net.POLLIN, u.events & Net.POLLOUT); } } } diff --git a/jdk/src/share/bin/jli_util.h b/jdk/src/share/bin/jli_util.h index 388910407ff..d3c9f0ff8f2 100644 --- a/jdk/src/share/bin/jli_util.h +++ b/jdk/src/share/bin/jli_util.h @@ -85,6 +85,9 @@ void JLI_CmdToArgs(char *cmdline); #ifdef MACOSX #define JLI_Lseek lseek #endif +#ifdef _AIX +#define JLI_Lseek lseek +#endif #endif /* _WIN32 */ /* diff --git a/jdk/src/share/classes/com/oracle/net/Sdp.java b/jdk/src/share/classes/com/oracle/net/Sdp.java index 32316073828..d22a95ed120 100644 --- a/jdk/src/share/classes/com/oracle/net/Sdp.java +++ b/jdk/src/share/classes/com/oracle/net/Sdp.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2014, 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 @@ -56,7 +56,7 @@ public final class Sdp { private static final Constructor serverSocketCtor; static { try { - serverSocketCtor = (Constructor) + serverSocketCtor = ServerSocket.class.getDeclaredConstructor(SocketImpl.class); setAccessible(serverSocketCtor); } catch (NoSuchMethodException e) { diff --git a/jdk/src/share/classes/com/sun/beans/TypeResolver.java b/jdk/src/share/classes/com/sun/beans/TypeResolver.java index e4cb0f3fb2e..1cb27bd9dde 100644 --- a/jdk/src/share/classes/com/sun/beans/TypeResolver.java +++ b/jdk/src/share/classes/com/sun/beans/TypeResolver.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -238,7 +238,7 @@ public final class TypeResolver { return (Class) pt.getRawType(); } if (type instanceof TypeVariable) { - TypeVariable tv = (TypeVariable)type; + TypeVariable tv = (TypeVariable)type; Type[] bounds = tv.getBounds(); return (0 < bounds.length) ? erase(bounds[0]) @@ -267,9 +267,9 @@ public final class TypeResolver { * * @see #erase(Type) */ - public static Class[] erase(Type[] types) { + public static Class[] erase(Type[] types) { int length = types.length; - Class[] classes = new Class[length]; + Class[] classes = new Class[length]; for (int i = 0; i < length; i++) { classes[i] = TypeResolver.erase(types[i]); } diff --git a/jdk/src/share/classes/com/sun/beans/editors/EnumEditor.java b/jdk/src/share/classes/com/sun/beans/editors/EnumEditor.java index 6275977d344..b7f5ada0d1f 100644 --- a/jdk/src/share/classes/com/sun/beans/editors/EnumEditor.java +++ b/jdk/src/share/classes/com/sun/beans/editors/EnumEditor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,17 +45,18 @@ import java.util.List; public final class EnumEditor implements PropertyEditor { private final List listeners = new ArrayList(); - private final Class type; + @SuppressWarnings("rawtypes") + private final Class type; private final String[] tags; private Object value; - public EnumEditor( Class type ) { + public EnumEditor(Class type) { Object[] values = type.getEnumConstants(); if ( values == null ) { throw new IllegalArgumentException( "Unsupported " + type ); } - this.type = type; + this.type = type.asSubclass(java.lang.Enum.class); this.tags = new String[values.length]; for ( int i = 0; i < values.length; i++ ) { this.tags[i] = ( ( Enum )values[i] ).name(); @@ -98,9 +99,11 @@ public final class EnumEditor implements PropertyEditor { } public void setAsText( String text ) { - setValue( ( text != null ) - ? Enum.valueOf( this.type, text ) - : null ); + @SuppressWarnings("unchecked") + Object tmp = ( text != null ) + ? Enum.valueOf( (Class)this.type, text ) + : null; + setValue(tmp); } public String[] getTags() { diff --git a/jdk/src/share/classes/com/sun/beans/finder/ConstructorFinder.java b/jdk/src/share/classes/com/sun/beans/finder/ConstructorFinder.java index d21d1a48748..bc2e7529d4f 100644 --- a/jdk/src/share/classes/com/sun/beans/finder/ConstructorFinder.java +++ b/jdk/src/share/classes/com/sun/beans/finder/ConstructorFinder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -44,7 +44,7 @@ import static sun.reflect.misc.ReflectUtil.isPackageAccessible; public final class ConstructorFinder extends AbstractFinder> { private static final Cache> CACHE = new Cache>(SOFT, SOFT) { @Override - public Constructor create(Signature signature) { + public Constructor create(Signature signature) { try { ConstructorFinder finder = new ConstructorFinder(signature.getArgs()); return finder.find(signature.getType().getConstructors()); diff --git a/jdk/src/share/classes/com/sun/beans/finder/InstanceFinder.java b/jdk/src/share/classes/com/sun/beans/finder/InstanceFinder.java index 5842af2bdad..7a46ed70ff9 100644 --- a/jdk/src/share/classes/com/sun/beans/finder/InstanceFinder.java +++ b/jdk/src/share/classes/com/sun/beans/finder/InstanceFinder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2014, 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 @@ -93,7 +93,9 @@ class InstanceFinder { type = ClassFinder.findClass(name, type.getClassLoader()); } if (this.type.isAssignableFrom(type)) { - return (T) type.newInstance(); + @SuppressWarnings("unchecked") + T tmp = (T) type.newInstance(); + return tmp; } } catch (Exception exception) { diff --git a/jdk/src/share/classes/com/sun/beans/finder/SignatureException.java b/jdk/src/share/classes/com/sun/beans/finder/SignatureException.java index 07307d596b0..7e5a35d452d 100644 --- a/jdk/src/share/classes/com/sun/beans/finder/SignatureException.java +++ b/jdk/src/share/classes/com/sun/beans/finder/SignatureException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,8 @@ package com.sun.beans.finder; final class SignatureException extends RuntimeException { + private static final long serialVersionUID = 4536098341586118473L; + SignatureException(Throwable cause) { super(cause); } diff --git a/jdk/src/share/classes/com/sun/beans/util/Cache.java b/jdk/src/share/classes/com/sun/beans/util/Cache.java index 751da65a4f6..4f3f75571b0 100644 --- a/jdk/src/share/classes/com/sun/beans/util/Cache.java +++ b/jdk/src/share/classes/com/sun/beans/util/Cache.java @@ -244,7 +244,7 @@ public abstract class Cache { * @param size requested capacity MUST be a power of two * @return a new array for the cache entries */ - @SuppressWarnings("unchecked") + @SuppressWarnings({"unchecked", "rawtypes"}) private CacheEntry[] newTable(int size) { return (CacheEntry[]) new CacheEntry[size]; } @@ -265,6 +265,7 @@ public abstract class Cache { synchronized (this.queue) { do { if (reference instanceof Ref) { + @SuppressWarnings("rawtypes") Ref ref = (Ref) reference; @SuppressWarnings("unchecked") CacheEntry owner = (CacheEntry) ref.getOwner(); diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/bmp/BMPImageReader.java b/jdk/src/share/classes/com/sun/imageio/plugins/bmp/BMPImageReader.java index b8c9a1e2b36..ae0fedf5b48 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/bmp/BMPImageReader.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/bmp/BMPImageReader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -806,14 +806,11 @@ public class BMPImageReader extends ImageReader implements BMPConstants { // the sampleModel can be null in case of embedded image if (sampleModel != null) { if (sampleModel.getDataType() == DataBuffer.TYPE_BYTE) - bdata = (byte[]) - ((DataBufferByte)raster.getDataBuffer()).getData(); + bdata = ((DataBufferByte)raster.getDataBuffer()).getData(); else if (sampleModel.getDataType() == DataBuffer.TYPE_USHORT) - sdata = (short[]) - ((DataBufferUShort)raster.getDataBuffer()).getData(); + sdata = ((DataBufferUShort)raster.getDataBuffer()).getData(); else if (sampleModel.getDataType() == DataBuffer.TYPE_INT) - idata = (int[]) - ((DataBufferInt)raster.getDataBuffer()).getData(); + idata = ((DataBufferInt)raster.getDataBuffer()).getData(); } // There should only be one tile. diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/bmp/BMPImageWriter.java b/jdk/src/share/classes/com/sun/imageio/plugins/bmp/BMPImageWriter.java index 5d1241ec53f..4eeb01c52e7 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/bmp/BMPImageWriter.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/bmp/BMPImageWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -574,7 +574,7 @@ public class BMPImageWriter extends ImageWriter implements BMPConstants { imageSize = embedded_stream.size(); long endPos = stream.getStreamPosition(); - fileSize = (int)(offset + imageSize); + fileSize = offset + imageSize; stream.seek(headPos); writeSize(fileSize, 2); stream.seek(headPos); diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/common/BogusColorSpace.java b/jdk/src/share/classes/com/sun/imageio/plugins/common/BogusColorSpace.java index ea7fa4f0272..81924044610 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/common/BogusColorSpace.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/common/BogusColorSpace.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,6 +31,7 @@ import java.awt.color.ColorSpace; * A dummy ColorSpace to enable ColorModel * for image data which do not have an innate color representation. */ +@SuppressWarnings("serial") // JDK-implementation class public class BogusColorSpace extends ColorSpace { /** * Return the type given the number of components. diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/common/ImageUtil.java b/jdk/src/share/classes/com/sun/imageio/plugins/common/ImageUtil.java index 2c27e56e637..d3a4ba4a6f9 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/common/ImageUtil.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/common/ImageUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -593,16 +593,15 @@ public class ImageUtil { int i = eltOffset; while(xRemaining > 24) { data[i++] = - (int)(((binaryDataArray[b++] & 0xFF) << 24) | - ((binaryDataArray[b++] & 0xFF) << 16) | - ((binaryDataArray[b++] & 0xFF) << 8) | - (binaryDataArray[b++] & 0xFF)); + (((binaryDataArray[b++] & 0xFF) << 24) | + ((binaryDataArray[b++] & 0xFF) << 16) | + ((binaryDataArray[b++] & 0xFF) << 8) | + (binaryDataArray[b++] & 0xFF)); xRemaining -= 32; } int shift = 24; while(xRemaining > 0) { - data[i] |= - (int)((binaryDataArray[b++] & 0xFF) << shift); + data[i] |= ((binaryDataArray[b++] & 0xFF) << shift); shift -= 8; xRemaining -= 8; } @@ -835,8 +834,7 @@ public class ImageUtil { for(int x = 0; x < rectWidth; x++) { if(bdata[k++] != (byte)0) { data[bOffset/32] |= - (int)(0x00000001 << - (31 - bOffset % 32)); + (0x00000001 << (31 - bOffset % 32)); } bOffset++; } diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/common/LZWStringTable.java b/jdk/src/share/classes/com/sun/imageio/plugins/common/LZWStringTable.java index cfed0f43c0d..7d1714630b9 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/common/LZWStringTable.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/common/LZWStringTable.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, 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 @@ -143,7 +143,7 @@ public class LZWStringTable { } static public int hash(short index, byte lastbyte) { - return ((int)((short)(lastbyte << 8) ^ index) & 0xFFFF) % HASHSIZE; + return (((short)(lastbyte << 8) ^ index) & 0xFFFF) % HASHSIZE; } /* diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFImageMetadata.java b/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFImageMetadata.java index 87a45c3cac4..45db3e64acd 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFImageMetadata.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFImageMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -232,7 +232,7 @@ public class GIFImageMetadata extends GIFMetadata { appExtNode.setAttribute("authenticationCode", toISO8859(authenticationCode)); byte[] appData = (byte[])applicationData.get(i); - appExtNode.setUserObject((byte[])appData.clone()); + appExtNode.setUserObject(appData.clone()); node.appendChild(appExtNode); } diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFImageWriter.java b/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFImageWriter.java index e62db31bfe5..63874ae9b24 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFImageWriter.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFImageWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, 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 @@ -357,7 +357,7 @@ public class GIFImageWriter extends ImageWriter { // Undo change to interlace flag if not MODE_COPY_FROM_METADATA. if (param != null && param.canWriteProgressive() && - param.getProgressiveMode() != param.MODE_COPY_FROM_METADATA) { + param.getProgressiveMode() != ImageWriteParam.MODE_COPY_FROM_METADATA) { im.interlaceFlag = isProgressive; } diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/DHTMarkerSegment.java b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/DHTMarkerSegment.java index f619bb1d4f0..20d18072a06 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/DHTMarkerSegment.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/DHTMarkerSegment.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2014, 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 @@ -211,10 +211,10 @@ class DHTMarkerSegment extends MarkerSegment { newGuy = (Htable) super.clone(); } catch (CloneNotSupportedException e) {} // won't happen if (numCodes != null) { - newGuy.numCodes = (short []) numCodes.clone(); + newGuy.numCodes = numCodes.clone(); } if (values != null) { - newGuy.values = (short []) values.clone(); + newGuy.values = values.clone(); } return newGuy; } diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/DQTMarkerSegment.java b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/DQTMarkerSegment.java index 34fe0d2a811..fb78bc3a015 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/DQTMarkerSegment.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/DQTMarkerSegment.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2014, 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 @@ -274,7 +274,7 @@ class DQTMarkerSegment extends MarkerSegment { newGuy = (Qtable) super.clone(); } catch (CloneNotSupportedException e) {} // won't happen if (data != null) { - newGuy.data = (int []) data.clone(); + newGuy.data = data.clone(); } return newGuy; } diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment.java b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment.java index 5ae93b1b685..393548e5b14 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2014, 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 @@ -558,6 +558,7 @@ class JFIFMarkerSegment extends MarkerSegment { // Could put reason codes in here to be parsed in writeJFXXSegment // in order to provide more meaningful warnings. + @SuppressWarnings("serial") // JDK-implementation class private class IllegalThumbException extends Exception {} /** @@ -1448,7 +1449,7 @@ class JFIFMarkerSegment extends MarkerSegment { protected Object clone () { ICCMarkerSegment newGuy = (ICCMarkerSegment) super.clone(); if (profile != null) { - newGuy.profile = (byte[]) profile.clone(); + newGuy.profile = profile.clone(); } return newGuy; } diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageWriter.java b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageWriter.java index d9723e7ba20..7f190f679d0 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageWriter.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -319,7 +319,7 @@ public class JPEGImageWriter extends ImageWriter { IIOMetadata streamMetadata, IIOMetadata imageMetadata) { if (jfifOK(imageType, param, streamMetadata, imageMetadata)) { - return (Dimension [])preferredThumbSizes.clone(); + return preferredThumbSizes.clone(); } return null; } diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGMetadata.java b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGMetadata.java index c7b8fd3d0e5..cff4f89b649 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGMetadata.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2014, 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 @@ -724,7 +724,7 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable { newGuy = (JPEGMetadata) super.clone(); } catch (CloneNotSupportedException e) {} // won't happen if (markerSequence != null) { - newGuy.markerSequence = (List) cloneSequence(); + newGuy.markerSequence = cloneSequence(); } newGuy.resetSequence = null; return newGuy; @@ -2016,14 +2016,14 @@ public class JPEGMetadata extends IIOMetadata implements Cloneable { // First approximation int y = 1; - int x = (int) Math.round(value); + int x = Math.round(value); float ratio = (float) x; float delta = Math.abs(value - ratio); while (delta > epsilon) { // not close enough // Increment y and compute a new x y++; - x = (int) Math.round(y*value); + x = Math.round(y*value); ratio = (float)x/(float)y; delta = Math.abs(value - ratio); } diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/MarkerSegment.java b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/MarkerSegment.java index f38e30f3ae8..2952635b7f2 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/MarkerSegment.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/MarkerSegment.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2014, 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 @@ -119,7 +119,7 @@ class MarkerSegment implements Cloneable { newGuy = (MarkerSegment) super.clone(); } catch (CloneNotSupportedException e) {} // won't happen if (this.data != null) { - newGuy.data = (byte[]) data.clone(); + newGuy.data = data.clone(); } return newGuy; } diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/SOFMarkerSegment.java b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/SOFMarkerSegment.java index 904fa73777c..ea625209cbd 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/SOFMarkerSegment.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/SOFMarkerSegment.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2014, 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 @@ -98,7 +98,7 @@ class SOFMarkerSegment extends MarkerSegment { protected Object clone() { SOFMarkerSegment newGuy = (SOFMarkerSegment) super.clone(); if (componentSpecs != null) { - newGuy.componentSpecs = (ComponentSpec []) componentSpecs.clone(); + newGuy.componentSpecs = componentSpecs.clone(); for (int i = 0; i < componentSpecs.length; i++) { newGuy.componentSpecs[i] = (ComponentSpec) componentSpecs[i].clone(); diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/SOSMarkerSegment.java b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/SOSMarkerSegment.java index afffa7bd74a..c8f223190fd 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/SOSMarkerSegment.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/SOSMarkerSegment.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2014, 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 @@ -93,8 +93,7 @@ class SOSMarkerSegment extends MarkerSegment { protected Object clone () { SOSMarkerSegment newGuy = (SOSMarkerSegment) super.clone(); if (componentSpecs != null) { - newGuy.componentSpecs = - (ScanComponentSpec []) componentSpecs.clone(); + newGuy.componentSpecs = componentSpecs.clone(); for (int i = 0; i < componentSpecs.length; i++) { newGuy.componentSpecs[i] = (ScanComponentSpec) componentSpecs[i].clone(); diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/png/PNGMetadata.java b/jdk/src/share/classes/com/sun/imageio/plugins/png/PNGMetadata.java index 41392c53a1e..3ad3a8b6420 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/png/PNGMetadata.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/png/PNGMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -344,9 +344,9 @@ public class PNGMetadata extends IIOMetadata implements Cloneable { IHDR_colorType = PNGImageReader.PNG_COLOR_PALETTE; PLTE_present = true; PLTE_order = null; - PLTE_red = (byte[])reds.clone(); - PLTE_green = (byte[])greens.clone(); - PLTE_blue = (byte[])blues.clone(); + PLTE_red = reds.clone(); + PLTE_green = greens.clone(); + PLTE_blue = blues.clone(); if (hasAlpha) { tRNS_present = true; @@ -430,7 +430,7 @@ public class PNGMetadata extends IIOMetadata implements Cloneable { } else { ArrayList list = new ArrayList(in.size()); for (byte[] b: in) { - list.add((b == null) ? null : (byte[])b.clone()); + list.add((b == null) ? null : b.clone()); } return list; } @@ -703,8 +703,8 @@ public class PNGMetadata extends IIOMetadata implements Cloneable { IIOMetadataNode tEXt_parent = new IIOMetadataNode("tEXt"); for (int i = 0; i < tEXt_keyword.size(); i++) { IIOMetadataNode tEXt_node = new IIOMetadataNode("tEXtEntry"); - tEXt_node.setAttribute("keyword" , (String)tEXt_keyword.get(i)); - tEXt_node.setAttribute("value" , (String)tEXt_text.get(i)); + tEXt_node.setAttribute("keyword" , tEXt_keyword.get(i)); + tEXt_node.setAttribute("value" , tEXt_text.get(i)); tEXt_parent.appendChild(tEXt_node); } @@ -759,13 +759,13 @@ public class PNGMetadata extends IIOMetadata implements Cloneable { IIOMetadataNode zTXt_parent = new IIOMetadataNode("zTXt"); for (int i = 0; i < zTXt_keyword.size(); i++) { IIOMetadataNode zTXt_node = new IIOMetadataNode("zTXtEntry"); - zTXt_node.setAttribute("keyword", (String)zTXt_keyword.get(i)); + zTXt_node.setAttribute("keyword", zTXt_keyword.get(i)); - int cm = ((Integer)zTXt_compressionMethod.get(i)).intValue(); + int cm = (zTXt_compressionMethod.get(i)).intValue(); zTXt_node.setAttribute("compressionMethod", zTXt_compressionMethodNames[cm]); - zTXt_node.setAttribute("text", (String)zTXt_text.get(i)); + zTXt_node.setAttribute("text", zTXt_text.get(i)); zTXt_parent.appendChild(zTXt_node); } @@ -781,8 +781,8 @@ public class PNGMetadata extends IIOMetadata implements Cloneable { IIOMetadataNode unknown_node = new IIOMetadataNode("UnknownChunk"); unknown_node.setAttribute("type", - (String)unknownChunkType.get(i)); - unknown_node.setUserObject((byte[])unknownChunkData.get(i)); + unknownChunkType.get(i)); + unknown_node.setUserObject(unknownChunkData.get(i)); unknown_parent.appendChild(unknown_node); } @@ -1016,8 +1016,8 @@ public class PNGMetadata extends IIOMetadata implements Cloneable { for (int i = 0; i < tEXt_keyword.size(); i++) { node = new IIOMetadataNode("TextEntry"); - node.setAttribute("keyword", (String)tEXt_keyword.get(i)); - node.setAttribute("value", (String)tEXt_text.get(i)); + node.setAttribute("keyword", tEXt_keyword.get(i)); + node.setAttribute("value", tEXt_text.get(i)); node.setAttribute("encoding", "ISO-8859-1"); node.setAttribute("compression", "none"); @@ -1041,8 +1041,8 @@ public class PNGMetadata extends IIOMetadata implements Cloneable { for (int i = 0; i < zTXt_keyword.size(); i++) { node = new IIOMetadataNode("TextEntry"); - node.setAttribute("keyword", (String)zTXt_keyword.get(i)); - node.setAttribute("value", (String)zTXt_text.get(i)); + node.setAttribute("keyword", zTXt_keyword.get(i)); + node.setAttribute("value", zTXt_text.get(i)); node.setAttribute("compression", "zip"); text_node.appendChild(node); @@ -1400,8 +1400,7 @@ public class PNGMetadata extends IIOMetadata implements Cloneable { fatal(node, "User object not a byte array!"); } - iCCP_compressedProfile = - (byte[])((byte[])compressedProfile).clone(); + iCCP_compressedProfile = ((byte[])compressedProfile).clone(); iCCP_present = true; } else if (name.equals("iTXt")) { diff --git a/jdk/src/share/classes/com/sun/java/browser/dom/DOMService.java b/jdk/src/share/classes/com/sun/java/browser/dom/DOMService.java index 483fbf8280a..b30d618cd75 100644 --- a/jdk/src/share/classes/com/sun/java/browser/dom/DOMService.java +++ b/jdk/src/share/classes/com/sun/java/browser/dom/DOMService.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -43,10 +43,10 @@ public abstract class DOMService { try { - String provider = (String) java.security.AccessController.doPrivileged( + String provider = java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction("com.sun.java.browser.dom.DOMServiceProvider")); - Class clazz = DOMService.class.forName("sun.plugin.dom.DOMService"); + Class clazz = Class.forName("sun.plugin.dom.DOMService"); return (DOMService) clazz.newInstance(); } diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKFileChooserUI.java b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKFileChooserUI.java index df2b7f7cc23..6bd21545554 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKFileChooserUI.java +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKFileChooserUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -433,7 +433,7 @@ class GTKFileChooserUI extends SynthFileChooserUI { if (objects.length == 1 && ((File)objects[0]).isDirectory() && chooser.isTraversable(((File)objects[0])) - && (chooser.getFileSelectionMode() != chooser.DIRECTORIES_ONLY + && (chooser.getFileSelectionMode() != JFileChooser.DIRECTORIES_ONLY || !chooser.getFileSystemView().isFileSystem(((File)objects[0])))) { setDirectorySelected(true); setDirectory(((File)objects[0])); @@ -458,7 +458,7 @@ class GTKFileChooserUI extends SynthFileChooserUI { if (file != null && file.isDirectory() && chooser.isTraversable(file) - && (chooser.getFileSelectionMode() == chooser.FILES_ONLY + && (chooser.getFileSelectionMode() == JFileChooser.FILES_ONLY || !chooser.getFileSystemView().isFileSystem(file))) { setDirectorySelected(true); diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/PangoFonts.java b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/PangoFonts.java index 4794d83f7a7..fa94a57f2e3 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/PangoFonts.java +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/PangoFonts.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -61,7 +61,7 @@ class PangoFonts { GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); - if (!ge.isHeadless()) { + if (!GraphicsEnvironment.isHeadless()) { GraphicsConfiguration gc = ge.getDefaultScreenDevice().getDefaultConfiguration(); AffineTransform at = gc.getNormalizingTransform(); diff --git a/jdk/src/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java b/jdk/src/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java index 96c70c7ff98..59a183b2582 100644 --- a/jdk/src/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java +++ b/jdk/src/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -283,7 +283,7 @@ public class MBeanServerFileAccessController public synchronized void refresh() throws IOException { Properties props; if (accessFileName == null) - props = (Properties) originalProps; + props = originalProps; else props = propertiesFromFile(accessFileName); parseProperties(props); diff --git a/jdk/src/share/classes/com/sun/media/sound/AbstractMidiDevice.java b/jdk/src/share/classes/com/sun/media/sound/AbstractMidiDevice.java index 874be7ddb05..4323970cafa 100644 --- a/jdk/src/share/classes/com/sun/media/sound/AbstractMidiDevice.java +++ b/jdk/src/share/classes/com/sun/media/sound/AbstractMidiDevice.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -667,7 +667,7 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice } else { if (TRACE_TRANSMITTER) Printer.println("Sending packed message to "+size+" transmitter's receivers"); for (int i = 0; i < size; i++) { - Receiver receiver = ((Transmitter)transmitters.get(i)).getReceiver(); + Receiver receiver = transmitters.get(i).getReceiver(); if (receiver != null) { if (optimizedReceiverCount > 0) { if (receiver instanceof MidiOutDevice.MidiOutReceiver) { @@ -693,7 +693,7 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice int size = transmitters.size(); if (TRACE_TRANSMITTER) Printer.println("Sending long message to "+size+" transmitter's receivers"); for (int i = 0; i < size; i++) { - Receiver receiver = ((Transmitter)transmitters.get(i)).getReceiver(); + Receiver receiver = transmitters.get(i).getReceiver(); if (receiver != null) { //$$fb 2002-04-02: SysexMessages are mutable, so // an application could change the contents of this object, @@ -729,7 +729,7 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice } else { if (TRACE_TRANSMITTER) Printer.println("Sending MIDI message to "+size+" transmitter's receivers"); for (int i = 0; i < size; i++) { - Receiver receiver = ((Transmitter)transmitters.get(i)).getReceiver(); + Receiver receiver = transmitters.get(i).getReceiver(); if (receiver != null) { //$$fb 2002-04-02: ShortMessages are mutable, so // an application could change the contents of this object, diff --git a/jdk/src/share/classes/com/sun/media/sound/AiffFileReader.java b/jdk/src/share/classes/com/sun/media/sound/AiffFileReader.java index 5a96effbbe8..6d91be4bf61 100644 --- a/jdk/src/share/classes/com/sun/media/sound/AiffFileReader.java +++ b/jdk/src/share/classes/com/sun/media/sound/AiffFileReader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -406,7 +406,7 @@ public final class AiffFileReader extends SunFileReader { int expon = 0; long hiMant = 0, loMant = 0; long t1, t2; - double HUGE = ((double)3.40282346638528860e+38); + double HUGE = 3.40282346638528860e+38; expon = dis.readUnsignedShort(); diff --git a/jdk/src/share/classes/com/sun/media/sound/AiffFileWriter.java b/jdk/src/share/classes/com/sun/media/sound/AiffFileWriter.java index 0f79728291e..b31871f3bb5 100644 --- a/jdk/src/share/classes/com/sun/media/sound/AiffFileWriter.java +++ b/jdk/src/share/classes/com/sun/media/sound/AiffFileWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -239,18 +239,18 @@ public final class AiffFileWriter extends SunFileWriter { while( (bytesRead = fileStream.read( buffer )) >= 0 ) { if (maxLength>0) { if( bytesRead < maxLength ) { - out.write( buffer, 0, (int)bytesRead ); + out.write( buffer, 0, bytesRead ); bytesWritten += bytesRead; maxLength -= bytesRead; } else { - out.write( buffer, 0, (int)maxLength ); + out.write( buffer, 0, maxLength ); bytesWritten += maxLength; maxLength = 0; break; } } else { - out.write( buffer, 0, (int)bytesRead ); + out.write( buffer, 0, bytesRead ); bytesWritten += bytesRead; } } diff --git a/jdk/src/share/classes/com/sun/media/sound/AlawCodec.java b/jdk/src/share/classes/com/sun/media/sound/AlawCodec.java index dc868b0b2cb..367f318b06a 100644 --- a/jdk/src/share/classes/com/sun/media/sound/AlawCodec.java +++ b/jdk/src/share/classes/com/sun/media/sound/AlawCodec.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -316,7 +316,7 @@ public final class AlawCodec extends SunCodec { // set the AudioInputStream length in frames if we know it if (stream instanceof AudioInputStream) { - frameLength = ((AudioInputStream)stream).getFrameLength(); + frameLength = stream.getFrameLength(); } // set framePos to zero @@ -346,7 +346,7 @@ public final class AlawCodec extends SunCodec { public int read() throws IOException { byte[] b = new byte[1]; - return (int)read(b, 0, b.length); + return read(b, 0, b.length); } @@ -432,8 +432,8 @@ public final class AlawCodec extends SunCodec { int readCount = super.read(b, readOffset, readLen); for (i = off; i < (off + (readCount*2)); i+=2) { - b[i] = (byte)tabByte1[b[readOffset] & 0xFF]; - b[i+1] = (byte)tabByte2[b[readOffset] & 0xFF]; + b[i] = tabByte1[b[readOffset] & 0xFF]; + b[i+1] = tabByte2[b[readOffset] & 0xFF]; readOffset++; } diff --git a/jdk/src/share/classes/com/sun/media/sound/AuFileWriter.java b/jdk/src/share/classes/com/sun/media/sound/AuFileWriter.java index 15a7a90decf..7a459158a30 100644 --- a/jdk/src/share/classes/com/sun/media/sound/AuFileWriter.java +++ b/jdk/src/share/classes/com/sun/media/sound/AuFileWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -308,17 +308,17 @@ public final class AuFileWriter extends SunFileWriter { while( (bytesRead = fileStream.read( buffer )) >= 0 ) { if (maxLength>0) { if( bytesRead < maxLength ) { - out.write( buffer, 0, (int)bytesRead ); + out.write( buffer, 0, bytesRead ); bytesWritten += bytesRead; maxLength -= bytesRead; } else { - out.write( buffer, 0, (int)maxLength ); + out.write( buffer, 0, maxLength ); bytesWritten += maxLength; maxLength = 0; break; } } else { - out.write( buffer, 0, (int)bytesRead ); + out.write( buffer, 0, bytesRead ); bytesWritten += bytesRead; } } diff --git a/jdk/src/share/classes/com/sun/media/sound/DLSSoundbank.java b/jdk/src/share/classes/com/sun/media/sound/DLSSoundbank.java index 87247ba686a..376521338c2 100644 --- a/jdk/src/share/classes/com/sun/media/sound/DLSSoundbank.java +++ b/jdk/src/share/classes/com/sun/media/sound/DLSSoundbank.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, 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 @@ -531,7 +531,7 @@ public final class DLSSoundbank implements Soundbank { chunk.read(); // Read Reserved byte instrument.bank = bank; - instrument.preset = (int) id; + instrument.preset = id; instrument.druminstrument = (drumins & 128) > 0; //System.out.println("bank="+bank+" drumkit="+drumkit // +" id="+id); diff --git a/jdk/src/share/classes/com/sun/media/sound/DirectAudioDevice.java b/jdk/src/share/classes/com/sun/media/sound/DirectAudioDevice.java index 698bac9f766..7c938bbb1c4 100644 --- a/jdk/src/share/classes/com/sun/media/sound/DirectAudioDevice.java +++ b/jdk/src/share/classes/com/sun/media/sound/DirectAudioDevice.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -495,7 +495,7 @@ final class DirectAudioDevice extends AbstractMixer { } // align buffer to full frames - bufferSize = ((int) bufferSize / format.getFrameSize()) * format.getFrameSize(); + bufferSize = ( bufferSize / format.getFrameSize()) * format.getFrameSize(); id = nOpen(mixerIndex, deviceID, isSource, encoding, @@ -1381,7 +1381,7 @@ final class DirectAudioDevice extends AbstractMixer { if (toWriteBytes > getBufferSize()) { toWriteBytes = Toolkit.align(getBufferSize(), frameSize); } - int written = write(audioData, (int) clipBytePosition, toWriteBytes); // increases bytePosition + int written = write(audioData, clipBytePosition, toWriteBytes); // increases bytePosition clipBytePosition += written; // make sure nobody called setFramePosition, or stop() during the write() call if (doIO && newFramePosition < 0 && written >= 0) { diff --git a/jdk/src/share/classes/com/sun/media/sound/MidiInDeviceProvider.java b/jdk/src/share/classes/com/sun/media/sound/MidiInDeviceProvider.java index e15616f14f0..1f397724e3f 100644 --- a/jdk/src/share/classes/com/sun/media/sound/MidiInDeviceProvider.java +++ b/jdk/src/share/classes/com/sun/media/sound/MidiInDeviceProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -88,9 +88,9 @@ public final class MidiInDeviceProvider extends AbstractMidiDeviceProvider { } MidiDevice[] getDeviceCache() { return devices; } - void setDeviceCache(MidiDevice[] devices) { this.devices = devices; } + void setDeviceCache(MidiDevice[] devices) { MidiInDeviceProvider.devices = devices; } Info[] getInfoCache() { return infos; } - void setInfoCache(Info[] infos) { this.infos = infos; } + void setInfoCache(Info[] infos) { MidiInDeviceProvider.infos = infos; } // INNER CLASSES diff --git a/jdk/src/share/classes/com/sun/media/sound/MidiOutDeviceProvider.java b/jdk/src/share/classes/com/sun/media/sound/MidiOutDeviceProvider.java index ebe2880f026..75583ab1e65 100644 --- a/jdk/src/share/classes/com/sun/media/sound/MidiOutDeviceProvider.java +++ b/jdk/src/share/classes/com/sun/media/sound/MidiOutDeviceProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -86,9 +86,9 @@ public final class MidiOutDeviceProvider extends AbstractMidiDeviceProvider { } MidiDevice[] getDeviceCache() { return devices; } - void setDeviceCache(MidiDevice[] devices) { this.devices = devices; } + void setDeviceCache(MidiDevice[] devices) { MidiOutDeviceProvider.devices = devices; } Info[] getInfoCache() { return infos; } - void setInfoCache(Info[] infos) { this.infos = infos; } + void setInfoCache(Info[] infos) { MidiOutDeviceProvider.infos = infos; } // INNER CLASSES diff --git a/jdk/src/share/classes/com/sun/media/sound/PortMixer.java b/jdk/src/share/classes/com/sun/media/sound/PortMixer.java index 2ef76cbf488..705648004ff 100644 --- a/jdk/src/share/classes/com/sun/media/sound/PortMixer.java +++ b/jdk/src/share/classes/com/sun/media/sound/PortMixer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -212,7 +212,7 @@ final class PortMixer extends AbstractMixer { ports = new PortMixerPort[portInfos.length]; } if (ports[index] == null) { - ports[index] = new PortMixerPort((Port.Info)portInfos[index], this, index); + ports[index] = new PortMixerPort(portInfos[index], this, index); return ports[index]; } // $$fb TODO: return (Port) (ports[index].clone()); diff --git a/jdk/src/share/classes/com/sun/media/sound/RealTimeSequencer.java b/jdk/src/share/classes/com/sun/media/sound/RealTimeSequencer.java index 168b1b3656d..6ea2ec4b3c6 100644 --- a/jdk/src/share/classes/com/sun/media/sound/RealTimeSequencer.java +++ b/jdk/src/share/classes/com/sun/media/sound/RealTimeSequencer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -386,7 +386,7 @@ final class RealTimeSequencer extends AbstractMidiDevice // last resort: return a standard tempo: 120bpm return (float) MidiUtils.DEFAULT_TEMPO_MPQ; } - return (float)getDataPump().getTempoMPQ(); + return getDataPump().getTempoMPQ(); } diff --git a/jdk/src/share/classes/com/sun/media/sound/SF2Soundbank.java b/jdk/src/share/classes/com/sun/media/sound/SF2Soundbank.java index 688ba1dafaa..83c8848b4f9 100644 --- a/jdk/src/share/classes/com/sun/media/sound/SF2Soundbank.java +++ b/jdk/src/share/classes/com/sun/media/sound/SF2Soundbank.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, 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 @@ -617,8 +617,8 @@ public final class SF2Soundbank implements Soundbank { private void writeGenerators(RIFFWriter writer, Map generators) throws IOException { - Short keyrange = (Short) generators.get(SF2Region.GENERATOR_KEYRANGE); - Short velrange = (Short) generators.get(SF2Region.GENERATOR_VELRANGE); + Short keyrange = generators.get(SF2Region.GENERATOR_KEYRANGE); + Short velrange = generators.get(SF2Region.GENERATOR_VELRANGE); if (keyrange != null) { writer.writeUnsignedShort(SF2Region.GENERATOR_KEYRANGE); writer.writeShort(keyrange); @@ -706,7 +706,7 @@ public final class SF2Soundbank implements Soundbank { } for (SF2InstrumentRegion region : preset.getRegions()) { writeGenerators(pgen_chunk, region.getGenerators()); - int ix = (int) layers.indexOf(region.layer); + int ix = layers.indexOf(region.layer); if (ix != -1) { pgen_chunk.writeUnsignedShort(SF2Region.GENERATOR_INSTRUMENT); pgen_chunk.writeShort((short) ix); diff --git a/jdk/src/share/classes/com/sun/media/sound/SoftInstrument.java b/jdk/src/share/classes/com/sun/media/sound/SoftInstrument.java index 0423448743d..009867ca09b 100644 --- a/jdk/src/share/classes/com/sun/media/sound/SoftInstrument.java +++ b/jdk/src/share/classes/com/sun/media/sound/SoftInstrument.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -44,7 +44,7 @@ public final class SoftInstrument extends Instrument { ins.getDataClass()); data = ins.getData(); this.ins = ins; - initPerformers(((ModelInstrument)ins).getPerformers()); + initPerformers(ins.getPerformers()); } public SoftInstrument(ModelInstrument ins, diff --git a/jdk/src/share/classes/com/sun/media/sound/StandardMidiFileWriter.java b/jdk/src/share/classes/com/sun/media/sound/StandardMidiFileWriter.java index 97e0dc2928a..365fd9c6c28 100644 --- a/jdk/src/share/classes/com/sun/media/sound/StandardMidiFileWriter.java +++ b/jdk/src/share/classes/com/sun/media/sound/StandardMidiFileWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -141,7 +141,7 @@ public final class StandardMidiFileWriter extends MidiFileWriter { buffer = new byte[bufferSize]; while( (bytesRead = fileStream.read( buffer )) >= 0 ) { - out.write( buffer, 0, (int)bytesRead ); + out.write( buffer, 0, bytesRead ); bytesWritten += bytesRead; } // Done....return bytesWritten diff --git a/jdk/src/share/classes/com/sun/media/sound/Toolkit.java b/jdk/src/share/classes/com/sun/media/sound/Toolkit.java index 5d52b8fe791..f1d5addce91 100644 --- a/jdk/src/share/classes/com/sun/media/sound/Toolkit.java +++ b/jdk/src/share/classes/com/sun/media/sound/Toolkit.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -74,7 +74,7 @@ public final class Toolkit { */ static float linearToDB(float linear) { - float dB = (float) (Math.log((double)((linear==0.0)?0.0001:linear))/Math.log(10.0) * 20.0); + float dB = (float) (Math.log(((linear==0.0)?0.0001:linear))/Math.log(10.0) * 20.0); return dB; } diff --git a/jdk/src/share/classes/com/sun/media/sound/UlawCodec.java b/jdk/src/share/classes/com/sun/media/sound/UlawCodec.java index 04fa5197b14..7dda283a0da 100644 --- a/jdk/src/share/classes/com/sun/media/sound/UlawCodec.java +++ b/jdk/src/share/classes/com/sun/media/sound/UlawCodec.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -301,7 +301,7 @@ public final class UlawCodec extends SunCodec { // set the AudioInputStream length in frames if we know it if (stream instanceof AudioInputStream) { - frameLength = ((AudioInputStream)stream).getFrameLength(); + frameLength = stream.getFrameLength(); } // set framePos to zero framePos = 0; @@ -406,8 +406,8 @@ public final class UlawCodec extends SunCodec { return readCount; } for (i = off; i < (off + (readCount*2)); i+=2) { - b[i] = (byte)tabByte1[b[readOffset] & 0xFF]; - b[i+1] = (byte)tabByte2[b[readOffset] & 0xFF]; + b[i] = tabByte1[b[readOffset] & 0xFF]; + b[i+1] = tabByte2[b[readOffset] & 0xFF]; readOffset++; } return (i - off); diff --git a/jdk/src/share/classes/com/sun/media/sound/WaveFileWriter.java b/jdk/src/share/classes/com/sun/media/sound/WaveFileWriter.java index c5f17e1bc8d..b9becd23d5a 100644 --- a/jdk/src/share/classes/com/sun/media/sound/WaveFileWriter.java +++ b/jdk/src/share/classes/com/sun/media/sound/WaveFileWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -240,17 +240,17 @@ public final class WaveFileWriter extends SunFileWriter { if (maxLength>0) { if( bytesRead < maxLength ) { - out.write( buffer, 0, (int)bytesRead ); + out.write( buffer, 0, bytesRead ); bytesWritten += bytesRead; maxLength -= bytesRead; } else { - out.write( buffer, 0, (int)maxLength ); + out.write( buffer, 0, maxLength ); bytesWritten += maxLength; maxLength = 0; break; } } else { - out.write( buffer, 0, (int)bytesRead ); + out.write( buffer, 0, bytesRead ); bytesWritten += bytesRead; } } @@ -272,7 +272,7 @@ public final class WaveFileWriter extends SunFileWriter { short channels = (short) audioFormat.getChannels(); short sampleSizeInBits = (short) audioFormat.getSampleSizeInBits(); int sampleRate = (int) audioFormat.getSampleRate(); - int frameSizeInBytes = (int) audioFormat.getFrameSize(); + int frameSizeInBytes = audioFormat.getFrameSize(); int frameRate = (int) audioFormat.getFrameRate(); int avgBytesPerSec = channels * sampleSizeInBits * sampleRate / 8;; short blockAlign = (short) ((sampleSizeInBits / 8) * channels); diff --git a/jdk/src/share/classes/com/sun/tools/example/debug/expr/ExpressionParserTokenManager.java b/jdk/src/share/classes/com/sun/tools/example/debug/expr/ExpressionParserTokenManager.java index b2f16f03e57..98cae0f5a96 100644 --- a/jdk/src/share/classes/com/sun/tools/example/debug/expr/ExpressionParserTokenManager.java +++ b/jdk/src/share/classes/com/sun/tools/example/debug/expr/ExpressionParserTokenManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -1282,7 +1282,7 @@ private int jjMoveNfa_0(int startState, int curPos) } else { - int hiByte = (int)(curChar >> 8); + int hiByte = (curChar >> 8); int i1 = hiByte >> 6; long l1 = 1L << (hiByte & 077); int i2 = (curChar & 0xff) >> 6; diff --git a/jdk/src/share/classes/java/awt/AWTKeyStroke.java b/jdk/src/share/classes/java/awt/AWTKeyStroke.java index 2cf7a332774..c4e07b45530 100644 --- a/jdk/src/share/classes/java/awt/AWTKeyStroke.java +++ b/jdk/src/share/classes/java/awt/AWTKeyStroke.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -243,7 +243,7 @@ public class AWTKeyStroke implements Serializable { return null; } }); - return (Constructor)ctor; + return ctor; } private static synchronized AWTKeyStroke getCachedStroke @@ -275,7 +275,7 @@ public class AWTKeyStroke implements Serializable { cacheKey.modifiers = mapNewModifiers(mapOldModifiers(modifiers)); cacheKey.onKeyRelease = onKeyRelease; - AWTKeyStroke stroke = (AWTKeyStroke)cache.get(cacheKey); + AWTKeyStroke stroke = cache.get(cacheKey); if (stroke == null) { stroke = cacheKey; cache.put(stroke, stroke); @@ -581,7 +581,7 @@ public class AWTKeyStroke implements Serializable { continue; } - Integer tokenMask = (Integer)modifierKeywords.get(token); + Integer tokenMask = modifierKeywords.get(token); if (tokenMask != null) { mask |= tokenMask.intValue(); } else { @@ -879,11 +879,11 @@ class VKCollection { public synchronized Integer findCode(String name) { assert(name != null); - return (Integer)name2code.get(name); + return name2code.get(name); } public synchronized String findName(Integer code) { assert(code != null); - return (String)code2name.get(code); + return code2name.get(code); } } diff --git a/jdk/src/share/classes/java/awt/BasicStroke.java b/jdk/src/share/classes/java/awt/BasicStroke.java index 80b4a3d3eb3..21a4bba8f14 100644 --- a/jdk/src/share/classes/java/awt/BasicStroke.java +++ b/jdk/src/share/classes/java/awt/BasicStroke.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -225,7 +225,7 @@ public class BasicStroke implements Stroke { this.join = join; this.miterlimit = miterlimit; if (dash != null) { - this.dash = (float []) dash.clone(); + this.dash = dash.clone(); } this.dash_phase = dash_phase; } @@ -359,7 +359,7 @@ public class BasicStroke implements Stroke { return null; } - return (float[]) dash.clone(); + return dash.clone(); } /** diff --git a/jdk/src/share/classes/java/awt/CardLayout.java b/jdk/src/share/classes/java/awt/CardLayout.java index 35ee3379267..3ffb19fbee7 100644 --- a/jdk/src/share/classes/java/awt/CardLayout.java +++ b/jdk/src/share/classes/java/awt/CardLayout.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, 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 @@ -223,8 +223,8 @@ public class CardLayout implements LayoutManager2, comp.setVisible(false); } for (int i=0; i < vector.size(); i++) { - if (((Card)vector.get(i)).name.equals(name)) { - ((Card)vector.get(i)).comp = comp; + if ((vector.get(i)).name.equals(name)) { + (vector.get(i)).comp = comp; return; } } @@ -242,7 +242,7 @@ public class CardLayout implements LayoutManager2, public void removeLayoutComponent(Component comp) { synchronized (comp.getTreeLock()) { for (int i = 0; i < vector.size(); i++) { - if (((Card)vector.get(i)).comp == comp) { + if ((vector.get(i)).comp == comp) { // if we remove current component we should show next one if (comp.isVisible() && (comp.getParent() != null)) { next(comp.getParent()); @@ -527,7 +527,7 @@ public class CardLayout implements LayoutManager2, Component next = null; int ncomponents = vector.size(); for (int i = 0; i < ncomponents; i++) { - Card card = (Card)vector.get(i); + Card card = vector.get(i); if (card.name.equals(name)) { next = card.comp; currentCard = i; @@ -574,8 +574,8 @@ public class CardLayout implements LayoutManager2, vector = new Vector<>(); if (tab != null && !tab.isEmpty()) { for (Enumeration e = tab.keys() ; e.hasMoreElements() ; ) { - String key = (String)e.nextElement(); - Component comp = (Component)tab.get(key); + String key = e.nextElement(); + Component comp = tab.get(key); vector.add(new Card(key, comp)); if (comp.isVisible()) { currentCard = vector.size() - 1; @@ -597,7 +597,7 @@ public class CardLayout implements LayoutManager2, Hashtable tab = new Hashtable<>(); int ncomponents = vector.size(); for (int i = 0; i < ncomponents; i++) { - Card card = (Card)vector.get(i); + Card card = vector.get(i); tab.put(card.name, card.comp); } diff --git a/jdk/src/share/classes/java/awt/DefaultKeyboardFocusManager.java b/jdk/src/share/classes/java/awt/DefaultKeyboardFocusManager.java index 040e659289a..94ac5f8225d 100644 --- a/jdk/src/share/classes/java/awt/DefaultKeyboardFocusManager.java +++ b/jdk/src/share/classes/java/awt/DefaultKeyboardFocusManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -578,7 +578,7 @@ public class DefaultKeyboardFocusManager extends KeyboardFocusManager { // newFocusOwner is not focus traversable. dequeueKeyEvents(-1, newFocusOwner); if (KeyboardFocusManager.isAutoFocusTransferEnabled()) { - restoreFocus(fe, (Window)newFocusedWindow); + restoreFocus(fe, newFocusedWindow); } break; } @@ -590,7 +590,7 @@ public class DefaultKeyboardFocusManager extends KeyboardFocusManager { // Focus change was rejected. Unlikely, but possible. dequeueKeyEvents(-1, newFocusOwner); if (KeyboardFocusManager.isAutoFocusTransferEnabled()) { - restoreFocus(fe, (Window)newFocusedWindow); + restoreFocus(fe, newFocusedWindow); } break; } diff --git a/jdk/src/share/classes/java/awt/GradientPaintContext.java b/jdk/src/share/classes/java/awt/GradientPaintContext.java index 2536fa2cf04..12b86e8521a 100644 --- a/jdk/src/share/classes/java/awt/GradientPaintContext.java +++ b/jdk/src/share/classes/java/awt/GradientPaintContext.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -46,7 +46,7 @@ class GradientPaintContext implements PaintContext { static synchronized Raster getCachedRaster(ColorModel cm, int w, int h) { if (cm == cachedModel) { if (cached != null) { - Raster ras = (Raster) cached.get(); + Raster ras = cached.get(); if (ras != null && ras.getWidth() >= w && ras.getHeight() >= h) @@ -61,7 +61,7 @@ class GradientPaintContext implements PaintContext { static synchronized void putCachedRaster(ColorModel cm, Raster ras) { if (cached != null) { - Raster cras = (Raster) cached.get(); + Raster cras = cached.get(); if (cras != null) { int cw = cras.getWidth(); int ch = cras.getHeight(); diff --git a/jdk/src/share/classes/java/awt/KeyboardFocusManager.java b/jdk/src/share/classes/java/awt/KeyboardFocusManager.java index 0184083ec5c..b02bb5b0dba 100644 --- a/jdk/src/share/classes/java/awt/KeyboardFocusManager.java +++ b/jdk/src/share/classes/java/awt/KeyboardFocusManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -1909,7 +1909,7 @@ public abstract class KeyboardFocusManager static synchronized Component getMostRecentFocusOwner(Window window) { WeakReference weakValue = (WeakReference)mostRecentFocusOwners.get(window); - return weakValue == null ? null : (Component)weakValue.get(); + return weakValue == null ? null : weakValue.get(); } /** @@ -2496,9 +2496,9 @@ public abstract class KeyboardFocusManager HeavyweightFocusRequest.CLEAR_GLOBAL_FOCUS_OWNER) { int size = heavyweightRequests.size(); - hwFocusRequest = (HeavyweightFocusRequest)((size >= 2) + hwFocusRequest = (size >= 2) ? heavyweightRequests.get(size - 2) - : null); + : null; } if (focusedWindowChanged(heavyweight, (hwFocusRequest != null) diff --git a/jdk/src/share/classes/java/awt/MultipleGradientPaintContext.java b/jdk/src/share/classes/java/awt/MultipleGradientPaintContext.java index cdff1907d95..f9bfe04c094 100644 --- a/jdk/src/share/classes/java/awt/MultipleGradientPaintContext.java +++ b/jdk/src/share/classes/java/awt/MultipleGradientPaintContext.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2014, 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 @@ -665,7 +665,7 @@ abstract class MultipleGradientPaintContext implements PaintContext { { if (cm == cachedModel) { if (cached != null) { - Raster ras = (Raster) cached.get(); + Raster ras = cached.get(); if (ras != null && ras.getWidth() >= w && ras.getHeight() >= h) @@ -687,7 +687,7 @@ abstract class MultipleGradientPaintContext implements PaintContext { Raster ras) { if (cached != null) { - Raster cras = (Raster) cached.get(); + Raster cras = cached.get(); if (cras != null) { int cw = cras.getWidth(); int ch = cras.getHeight(); diff --git a/jdk/src/share/classes/java/awt/ScrollPaneAdjustable.java b/jdk/src/share/classes/java/awt/ScrollPaneAdjustable.java index be3ad5fec6a..5f388960d8c 100644 --- a/jdk/src/share/classes/java/awt/ScrollPaneAdjustable.java +++ b/jdk/src/share/classes/java/awt/ScrollPaneAdjustable.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -418,9 +418,8 @@ public class ScrollPaneAdjustable implements Adjustable, Serializable { * @since 1.4 */ public synchronized AdjustmentListener[] getAdjustmentListeners() { - return (AdjustmentListener[])(AWTEventMulticaster.getListeners( - adjustmentListener, - AdjustmentListener.class)); + return AWTEventMulticaster.getListeners(adjustmentListener, + AdjustmentListener.class); } /** diff --git a/jdk/src/share/classes/java/awt/SequencedEvent.java b/jdk/src/share/classes/java/awt/SequencedEvent.java index 0ae8dad64db..835c040c85c 100644 --- a/jdk/src/share/classes/java/awt/SequencedEvent.java +++ b/jdk/src/share/classes/java/awt/SequencedEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -160,7 +160,7 @@ class SequencedEvent extends AWTEvent implements ActiveEvent { } private final synchronized static SequencedEvent getFirst() { - return (SequencedEvent)list.getFirst(); + return list.getFirst(); } /* Disposes all events from disposed AppContext @@ -211,7 +211,7 @@ class SequencedEvent extends AWTEvent implements ActiveEvent { list.removeFirst(); if (!list.isEmpty()) { - next = (SequencedEvent)list.getFirst(); + next = list.getFirst(); } } else { list.remove(this); diff --git a/jdk/src/share/classes/java/awt/SystemTray.java b/jdk/src/share/classes/java/awt/SystemTray.java index b8344eeee95..7f3a5c31893 100644 --- a/jdk/src/share/classes/java/awt/SystemTray.java +++ b/jdk/src/share/classes/java/awt/SystemTray.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, 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 @@ -337,7 +337,7 @@ public class SystemTray { public TrayIcon[] getTrayIcons() { Vector icons = (Vector)AppContext.getAppContext().get(TrayIcon.class); if (icons != null) { - return (TrayIcon[])icons.toArray(new TrayIcon[icons.size()]); + return icons.toArray(new TrayIcon[icons.size()]); } return EMPTY_TRAY_ARRAY; } diff --git a/jdk/src/share/classes/java/awt/color/CMMException.java b/jdk/src/share/classes/java/awt/color/CMMException.java index 04497f69cc4..c175bc38ebe 100644 --- a/jdk/src/share/classes/java/awt/color/CMMException.java +++ b/jdk/src/share/classes/java/awt/color/CMMException.java @@ -47,6 +47,7 @@ package java.awt.color; */ public class CMMException extends java.lang.RuntimeException { + private static final long serialVersionUID = 5775558044142994965L; /** * Constructs a CMMException with the specified detail message. diff --git a/jdk/src/share/classes/java/awt/color/ProfileDataException.java b/jdk/src/share/classes/java/awt/color/ProfileDataException.java index 829a92862f8..1a37014b89f 100644 --- a/jdk/src/share/classes/java/awt/color/ProfileDataException.java +++ b/jdk/src/share/classes/java/awt/color/ProfileDataException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2000, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,6 +31,7 @@ package java.awt.color; */ public class ProfileDataException extends java.lang.RuntimeException { + private static final long serialVersionUID = 7286140888240322498L; /** * Constructs a ProfileDataException with the specified detail message. diff --git a/jdk/src/share/classes/java/awt/datatransfer/DataFlavor.java b/jdk/src/share/classes/java/awt/datatransfer/DataFlavor.java index cbf172ba05c..1fb29ddd3b7 100644 --- a/jdk/src/share/classes/java/awt/datatransfer/DataFlavor.java +++ b/jdk/src/share/classes/java/awt/datatransfer/DataFlavor.java @@ -730,9 +730,8 @@ public class DataFlavor implements Externalizable, Cloneable { textFlavorComparator = new TextFlavorComparator(); } - DataFlavor bestFlavor = - (DataFlavor)Collections.max(Arrays.asList(availableFlavors), - textFlavorComparator); + DataFlavor bestFlavor = Collections.max(Arrays.asList(availableFlavors), + textFlavorComparator); if (!bestFlavor.isFlavorTextType()) { return null; diff --git a/jdk/src/share/classes/java/awt/datatransfer/FlavorEvent.java b/jdk/src/share/classes/java/awt/datatransfer/FlavorEvent.java index 036ea9aef10..3e627e69603 100644 --- a/jdk/src/share/classes/java/awt/datatransfer/FlavorEvent.java +++ b/jdk/src/share/classes/java/awt/datatransfer/FlavorEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -38,6 +38,8 @@ import java.util.EventObject; * @since 1.5 */ public class FlavorEvent extends EventObject { + private static final long serialVersionUID = -5842664112252414548L; + /** * Constructs a FlavorEvent object. * diff --git a/jdk/src/share/classes/java/awt/datatransfer/StringSelection.java b/jdk/src/share/classes/java/awt/datatransfer/StringSelection.java index c65f04fbaa7..dfeb3bdfe9a 100644 --- a/jdk/src/share/classes/java/awt/datatransfer/StringSelection.java +++ b/jdk/src/share/classes/java/awt/datatransfer/StringSelection.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2014, 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 @@ -76,7 +76,7 @@ public class StringSelection implements Transferable, ClipboardOwner { public DataFlavor[] getTransferDataFlavors() { // returning flavors itself would allow client code to modify // our internal behavior - return (DataFlavor[])flavors.clone(); + return flavors.clone(); } /** diff --git a/jdk/src/share/classes/java/awt/geom/IllegalPathStateException.java b/jdk/src/share/classes/java/awt/geom/IllegalPathStateException.java index 629a46576ac..b07ea6af2aa 100644 --- a/jdk/src/share/classes/java/awt/geom/IllegalPathStateException.java +++ b/jdk/src/share/classes/java/awt/geom/IllegalPathStateException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 1999, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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,6 +35,8 @@ package java.awt.geom; */ public class IllegalPathStateException extends RuntimeException { + private static final long serialVersionUID = -5158084205220481094L; + /** * Constructs an IllegalPathStateException with no * detail message. diff --git a/jdk/src/share/classes/java/awt/geom/NoninvertibleTransformException.java b/jdk/src/share/classes/java/awt/geom/NoninvertibleTransformException.java index 72c1417ba77..8184f784b2b 100644 --- a/jdk/src/share/classes/java/awt/geom/NoninvertibleTransformException.java +++ b/jdk/src/share/classes/java/awt/geom/NoninvertibleTransformException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 1999, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,6 +33,8 @@ package java.awt.geom; */ public class NoninvertibleTransformException extends java.lang.Exception { + private static final long serialVersionUID = 6137225240503990466L; + /** * Constructs an instance of * NoninvertibleTransformException diff --git a/jdk/src/share/classes/java/awt/im/InputContext.java b/jdk/src/share/classes/java/awt/im/InputContext.java index 615029120dd..9d6122d2781 100644 --- a/jdk/src/share/classes/java/awt/im/InputContext.java +++ b/jdk/src/share/classes/java/awt/im/InputContext.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -87,6 +87,7 @@ public class InputContext { /** * Returns a new InputContext instance. + * @return a new InputContext instance */ public static InputContext getInstance() { return new sun.awt.im.InputMethodContext(); diff --git a/jdk/src/share/classes/java/awt/im/InputMethodHighlight.java b/jdk/src/share/classes/java/awt/im/InputMethodHighlight.java index 55905d97708..df09076410d 100644 --- a/jdk/src/share/classes/java/awt/im/InputMethodHighlight.java +++ b/jdk/src/share/classes/java/awt/im/InputMethodHighlight.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -157,6 +157,7 @@ public class InputMethodHighlight { /** * Returns whether the text range is selected. + * @return whether the text range is selected */ public boolean isSelected() { return selected; @@ -174,6 +175,7 @@ public class InputMethodHighlight { /** * Returns the variation of the text range. + * @return the variation of the text range */ public int getVariation() { return variation; @@ -181,6 +183,7 @@ public class InputMethodHighlight { /** * Returns the rendering style attributes for the text range, or null. + * @return the rendering style attributes for the text range, or null * @since 1.3 */ public Map getStyle() { diff --git a/jdk/src/share/classes/java/awt/im/spi/InputMethodContext.java b/jdk/src/share/classes/java/awt/im/spi/InputMethodContext.java index 8e06c39299b..45517c37b23 100644 --- a/jdk/src/share/classes/java/awt/im/spi/InputMethodContext.java +++ b/jdk/src/share/classes/java/awt/im/spi/InputMethodContext.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -52,6 +52,14 @@ public interface InputMethodContext extends InputMethodRequests { * Creates an input method event from the arguments given * and dispatches it to the client component. For arguments, * see {@link java.awt.event.InputMethodEvent#InputMethodEvent}. + * @param id the event type + * @param text the combined committed and composed text + * @param committedCharacterCount the number of committed characters in the text + * @param caret the caret (a.k.a. insertion point); null if + * there's no caret within current composed text + * @param visiblePosition the position that's most important to be + * visible; null if there's no recommendation for a visible + * position within current composed text */ public void dispatchInputMethodEvent(int id, AttributedCharacterIterator text, int committedCharacterCount, diff --git a/jdk/src/share/classes/java/awt/im/spi/InputMethodDescriptor.java b/jdk/src/share/classes/java/awt/im/spi/InputMethodDescriptor.java index d462095bb8f..885e7ad4e09 100644 --- a/jdk/src/share/classes/java/awt/im/spi/InputMethodDescriptor.java +++ b/jdk/src/share/classes/java/awt/im/spi/InputMethodDescriptor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 1999, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -72,6 +72,8 @@ public interface InputMethodDescriptor { * Returns whether the list of available locales can change * at runtime. This may be the case, for example, for adapters * that access real input methods over the network. + * @return whether the list of available locales can change at + * runtime */ boolean hasDynamicLocaleList(); @@ -92,6 +94,9 @@ public interface InputMethodDescriptor { * * @param inputLocale the locale for which text input is supported, or null * @param displayLanguage the language in which the name will be displayed + * @return the user-visible name of the corresponding input method + * for the given input locale in the language in which the name + * will be displayed */ String getInputMethodDisplayName(Locale inputLocale, Locale displayLanguage); diff --git a/jdk/src/share/classes/java/awt/image/AffineTransformOp.java b/jdk/src/share/classes/java/awt/image/AffineTransformOp.java index 30819ba8897..9e6a66eea5c 100644 --- a/jdk/src/share/classes/java/awt/image/AffineTransformOp.java +++ b/jdk/src/share/classes/java/awt/image/AffineTransformOp.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -110,23 +110,23 @@ public class AffineTransformOp implements BufferedImageOp, RasterOp { this.hints = hints; if (hints != null) { - Object value = hints.get(hints.KEY_INTERPOLATION); + Object value = hints.get(RenderingHints.KEY_INTERPOLATION); if (value == null) { - value = hints.get(hints.KEY_RENDERING); - if (value == hints.VALUE_RENDER_SPEED) { + value = hints.get(RenderingHints.KEY_RENDERING); + if (value == RenderingHints.VALUE_RENDER_SPEED) { interpolationType = TYPE_NEAREST_NEIGHBOR; } - else if (value == hints.VALUE_RENDER_QUALITY) { + else if (value == RenderingHints.VALUE_RENDER_QUALITY) { interpolationType = TYPE_BILINEAR; } } - else if (value == hints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR) { + else if (value == RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR) { interpolationType = TYPE_NEAREST_NEIGHBOR; } - else if (value == hints.VALUE_INTERPOLATION_BILINEAR) { + else if (value == RenderingHints.VALUE_INTERPOLATION_BILINEAR) { interpolationType = TYPE_BILINEAR; } - else if (value == hints.VALUE_INTERPOLATION_BICUBIC) { + else if (value == RenderingHints.VALUE_INTERPOLATION_BICUBIC) { interpolationType = TYPE_BICUBIC; } } @@ -235,10 +235,12 @@ public class AffineTransformOp implements BufferedImageOp, RasterOp { { int type = xform.getType(); boolean needTrans = ((type& - (xform.TYPE_MASK_ROTATION| - xform.TYPE_GENERAL_TRANSFORM)) + (AffineTransform.TYPE_MASK_ROTATION| + AffineTransform.TYPE_GENERAL_TRANSFORM)) != 0); - if (! needTrans && type != xform.TYPE_TRANSLATION && type != xform.TYPE_IDENTITY) + if (! needTrans && + type != AffineTransform.TYPE_TRANSLATION && + type != AffineTransform.TYPE_IDENTITY) { double[] mtx = new double[4]; xform.getMatrix(mtx); diff --git a/jdk/src/share/classes/java/awt/image/ComponentColorModel.java b/jdk/src/share/classes/java/awt/image/ComponentColorModel.java index 28e41a2bc27..e2fe5e13eb4 100644 --- a/jdk/src/share/classes/java/awt/image/ComponentColorModel.java +++ b/jdk/src/share/classes/java/awt/image/ComponentColorModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -1514,13 +1514,13 @@ public class ComponentColorModel extends ColorModel { intpixel[0] = (int) (red * factor * ((1<= 0"); @@ -211,8 +211,8 @@ public class ComponentSampleModel extends SampleModel this.dataType = dataType; this.pixelStride = pixelStride; this.scanlineStride = scanlineStride; - this.bandOffsets = (int[])bandOffsets.clone(); - this.bankIndices = (int[]) bankIndices.clone(); + this.bandOffsets = bandOffsets.clone(); + this.bankIndices = bankIndices.clone(); if (pixelStride < 0) { throw new IllegalArgumentException("Pixel stride must be >= 0"); } @@ -526,14 +526,14 @@ public class ComponentSampleModel extends SampleModel * @return the bank indices for all bands. */ public final int [] getBankIndices() { - return (int[]) bankIndices.clone(); + return bankIndices.clone(); } /** Returns the band offset for all bands. * @return the band offsets for all bands. */ public final int [] getBandOffsets() { - return (int[])bandOffsets.clone(); + return bandOffsets.clone(); } /** Returns the scanline stride of this ComponentSampleModel. diff --git a/jdk/src/share/classes/java/awt/image/DataBuffer.java b/jdk/src/share/classes/java/awt/image/DataBuffer.java index 5bf9652080c..b23813bab4f 100644 --- a/jdk/src/share/classes/java/awt/image/DataBuffer.java +++ b/jdk/src/share/classes/java/awt/image/DataBuffer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -279,7 +279,7 @@ public abstract class DataBuffer { this.banks = numBanks; this.size = size; this.offset = offsets[0]; - this.offsets = (int[])offsets.clone(); + this.offsets = offsets.clone(); } /** Returns the data type of this DataBuffer. @@ -307,7 +307,7 @@ public abstract class DataBuffer { * @return the offsets of all banks. */ public int[] getOffsets() { - return (int[])offsets.clone(); + return offsets.clone(); } /** Returns the number of banks in this DataBuffer. diff --git a/jdk/src/share/classes/java/awt/image/DataBufferByte.java b/jdk/src/share/classes/java/awt/image/DataBufferByte.java index 7d35b47e0a3..f4e40cbc3a9 100644 --- a/jdk/src/share/classes/java/awt/image/DataBufferByte.java +++ b/jdk/src/share/classes/java/awt/image/DataBufferByte.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -156,7 +156,7 @@ public final class DataBufferByte extends DataBuffer */ public DataBufferByte(byte dataArray[][], int size) { super(UNTRACKABLE, TYPE_BYTE, size, dataArray.length); - bankdata = (byte[][]) dataArray.clone(); + bankdata = dataArray.clone(); data = bankdata[0]; } @@ -181,7 +181,7 @@ public final class DataBufferByte extends DataBuffer */ public DataBufferByte(byte dataArray[][], int size, int offsets[]) { super(UNTRACKABLE, TYPE_BYTE, size, dataArray.length, offsets); - bankdata = (byte[][]) dataArray.clone(); + bankdata = dataArray.clone(); data = bankdata[0]; } @@ -228,7 +228,7 @@ public final class DataBufferByte extends DataBuffer */ public byte[][] getBankData() { theTrackable.setUntrackable(); - return (byte[][]) bankdata.clone(); + return bankdata.clone(); } /** diff --git a/jdk/src/share/classes/java/awt/image/DataBufferDouble.java b/jdk/src/share/classes/java/awt/image/DataBufferDouble.java index 92143fa78c4..85c5c37862a 100644 --- a/jdk/src/share/classes/java/awt/image/DataBufferDouble.java +++ b/jdk/src/share/classes/java/awt/image/DataBufferDouble.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -154,7 +154,7 @@ public final class DataBufferDouble extends DataBuffer { */ public DataBufferDouble(double dataArray[][], int size) { super(UNTRACKABLE, TYPE_DOUBLE, size, dataArray.length); - bankdata = (double[][]) dataArray.clone(); + bankdata = dataArray.clone(); data = bankdata[0]; } @@ -178,7 +178,7 @@ public final class DataBufferDouble extends DataBuffer { */ public DataBufferDouble(double dataArray[][], int size, int offsets[]) { super(UNTRACKABLE, TYPE_DOUBLE, size, dataArray.length, offsets); - bankdata = (double[][]) dataArray.clone(); + bankdata = dataArray.clone(); data = bankdata[0]; } @@ -225,7 +225,7 @@ public final class DataBufferDouble extends DataBuffer { */ public double[][] getBankData() { theTrackable.setUntrackable(); - return (double[][]) bankdata.clone(); + return bankdata.clone(); } /** diff --git a/jdk/src/share/classes/java/awt/image/DataBufferFloat.java b/jdk/src/share/classes/java/awt/image/DataBufferFloat.java index c3fa5b2e2aa..12daeafe200 100644 --- a/jdk/src/share/classes/java/awt/image/DataBufferFloat.java +++ b/jdk/src/share/classes/java/awt/image/DataBufferFloat.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -156,7 +156,7 @@ public final class DataBufferFloat extends DataBuffer { */ public DataBufferFloat(float dataArray[][], int size) { super(UNTRACKABLE, TYPE_FLOAT, size, dataArray.length); - bankdata = (float[][]) dataArray.clone(); + bankdata = dataArray.clone(); data = bankdata[0]; } @@ -180,7 +180,7 @@ public final class DataBufferFloat extends DataBuffer { */ public DataBufferFloat(float dataArray[][], int size, int offsets[]) { super(UNTRACKABLE, TYPE_FLOAT, size,dataArray.length, offsets); - bankdata = (float[][]) dataArray.clone(); + bankdata = dataArray.clone(); data = bankdata[0]; } @@ -227,7 +227,7 @@ public final class DataBufferFloat extends DataBuffer { */ public float[][] getBankData() { theTrackable.setUntrackable(); - return (float[][]) bankdata.clone(); + return bankdata.clone(); } /** diff --git a/jdk/src/share/classes/java/awt/image/DataBufferInt.java b/jdk/src/share/classes/java/awt/image/DataBufferInt.java index 2a3cf23a04b..afa60a11ee5 100644 --- a/jdk/src/share/classes/java/awt/image/DataBufferInt.java +++ b/jdk/src/share/classes/java/awt/image/DataBufferInt.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -154,7 +154,7 @@ public final class DataBufferInt extends DataBuffer */ public DataBufferInt(int dataArray[][], int size) { super(UNTRACKABLE, TYPE_INT, size, dataArray.length); - bankdata = (int [][]) dataArray.clone(); + bankdata = dataArray.clone(); data = bankdata[0]; } @@ -179,7 +179,7 @@ public final class DataBufferInt extends DataBuffer */ public DataBufferInt(int dataArray[][], int size, int offsets[]) { super(UNTRACKABLE, TYPE_INT, size, dataArray.length, offsets); - bankdata = (int [][]) dataArray.clone(); + bankdata = dataArray.clone(); data = bankdata[0]; } @@ -226,7 +226,7 @@ public final class DataBufferInt extends DataBuffer */ public int[][] getBankData() { theTrackable.setUntrackable(); - return (int [][]) bankdata.clone(); + return bankdata.clone(); } /** @@ -278,7 +278,7 @@ public final class DataBufferInt extends DataBuffer * @see #getElem(int, int) */ public void setElem(int bank, int i, int val) { - bankdata[bank][i+offsets[bank]] = (int)val; + bankdata[bank][i+offsets[bank]] = val; theTrackable.markDirty(); } } diff --git a/jdk/src/share/classes/java/awt/image/DataBufferShort.java b/jdk/src/share/classes/java/awt/image/DataBufferShort.java index b95f6aae4a1..f8a9da2b3cb 100644 --- a/jdk/src/share/classes/java/awt/image/DataBufferShort.java +++ b/jdk/src/share/classes/java/awt/image/DataBufferShort.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -153,7 +153,7 @@ public final class DataBufferShort extends DataBuffer */ public DataBufferShort(short dataArray[][], int size) { super(UNTRACKABLE, TYPE_SHORT, size, dataArray.length); - bankdata = (short[][]) dataArray.clone(); + bankdata = dataArray.clone(); data = bankdata[0]; } @@ -178,7 +178,7 @@ public final class DataBufferShort extends DataBuffer */ public DataBufferShort(short dataArray[][], int size, int offsets[]) { super(UNTRACKABLE, TYPE_SHORT, size, dataArray.length, offsets); - bankdata = (short[][]) dataArray.clone(); + bankdata = dataArray.clone(); data = bankdata[0]; } @@ -225,7 +225,7 @@ public final class DataBufferShort extends DataBuffer */ public short[][] getBankData() { theTrackable.setUntrackable(); - return (short[][]) bankdata.clone(); + return bankdata.clone(); } /** diff --git a/jdk/src/share/classes/java/awt/image/DataBufferUShort.java b/jdk/src/share/classes/java/awt/image/DataBufferUShort.java index 65919a7f5d5..9020ba78e63 100644 --- a/jdk/src/share/classes/java/awt/image/DataBufferUShort.java +++ b/jdk/src/share/classes/java/awt/image/DataBufferUShort.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -174,7 +174,7 @@ public final class DataBufferUShort extends DataBuffer } } - bankdata = (short[][]) dataArray.clone(); + bankdata = dataArray.clone(); data = bankdata[0]; } @@ -213,7 +213,7 @@ public final class DataBufferUShort extends DataBuffer } } - bankdata = (short[][]) dataArray.clone(); + bankdata = dataArray.clone(); data = bankdata[0]; } @@ -260,7 +260,7 @@ public final class DataBufferUShort extends DataBuffer */ public short[][] getBankData() { theTrackable.setUntrackable(); - return (short[][]) bankdata.clone(); + return bankdata.clone(); } /** @@ -272,7 +272,7 @@ public final class DataBufferUShort extends DataBuffer * @see #setElem(int, int, int) */ public int getElem(int i) { - return (int)(data[i+offset]&0xffff); + return data[i+offset]&0xffff; } /** @@ -285,7 +285,7 @@ public final class DataBufferUShort extends DataBuffer * @see #setElem(int, int, int) */ public int getElem(int bank, int i) { - return (int)(bankdata[bank][i+offsets[bank]]&0xffff); + return bankdata[bank][i+offsets[bank]]&0xffff; } /** diff --git a/jdk/src/share/classes/java/awt/image/ImagingOpException.java b/jdk/src/share/classes/java/awt/image/ImagingOpException.java index c139e47a521..ca12f18f371 100644 --- a/jdk/src/share/classes/java/awt/image/ImagingOpException.java +++ b/jdk/src/share/classes/java/awt/image/ImagingOpException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 1998, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,6 +32,7 @@ package java.awt.image; * process the image. */ public class ImagingOpException extends java.lang.RuntimeException { + private static final long serialVersionUID = 8026288481846276658L; /** * Constructs an ImagingOpException object with the diff --git a/jdk/src/share/classes/java/awt/image/IndexColorModel.java b/jdk/src/share/classes/java/awt/image/IndexColorModel.java index 7e4317cd3ab..16431ebc8af 100644 --- a/jdk/src/share/classes/java/awt/image/IndexColorModel.java +++ b/jdk/src/share/classes/java/awt/image/IndexColorModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, 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 @@ -909,7 +909,7 @@ public class IndexColorModel extends ColorModel { int minDist = 256; int d; - int gray = (int) (red*77 + green*150 + blue*29 + 128)/256; + int gray = (red*77 + green*150 + blue*29 + 128)/256; for (int i = 0; i < map_size; i++) { if (this.rgb[i] == 0x0) { diff --git a/jdk/src/share/classes/java/awt/image/LookupOp.java b/jdk/src/share/classes/java/awt/image/LookupOp.java index 288abaf8645..1b872ed9255 100644 --- a/jdk/src/share/classes/java/awt/image/LookupOp.java +++ b/jdk/src/share/classes/java/awt/image/LookupOp.java @@ -1,5 +1,6 @@ + /* - * Copyright (c) 1997, 2000, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -373,11 +374,11 @@ public class LookupOp implements BufferedImageOp, RasterOp { int trans = cm.getTransparency(); int[] nbits = null; if (ltable instanceof ByteLookupTable) { - if (db.getDataType() == db.TYPE_USHORT) { + if (db.getDataType() == DataBuffer.TYPE_USHORT) { // Dst raster should be of type byte if (hasAlpha) { nbits = new int[2]; - if (trans == cm.BITMASK) { + if (trans == java.awt.Transparency.BITMASK) { nbits[1] = 1; } else { @@ -393,10 +394,10 @@ public class LookupOp implements BufferedImageOp, RasterOp { } else if (ltable instanceof ShortLookupTable) { transferType = DataBuffer.TYPE_USHORT; - if (db.getDataType() == db.TYPE_BYTE) { + if (db.getDataType() == DataBuffer.TYPE_BYTE) { if (hasAlpha) { nbits = new int[2]; - if (trans == cm.BITMASK) { + if (trans == java.awt.Transparency.BITMASK) { nbits[1] = 1; } else { diff --git a/jdk/src/share/classes/java/awt/image/MultiPixelPackedSampleModel.java b/jdk/src/share/classes/java/awt/image/MultiPixelPackedSampleModel.java index ebd41f61b25..c3c2b2a6c3d 100644 --- a/jdk/src/share/classes/java/awt/image/MultiPixelPackedSampleModel.java +++ b/jdk/src/share/classes/java/awt/image/MultiPixelPackedSampleModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -198,7 +198,7 @@ public class MultiPixelPackedSampleModel extends SampleModel public DataBuffer createDataBuffer() { DataBuffer dataBuffer = null; - int size = (int)scanlineStride*height; + int size = scanlineStride*height; switch (dataType) { case DataBuffer.TYPE_BYTE: dataBuffer = new DataBufferByte(size+(dataBitOffset+7)/8); diff --git a/jdk/src/share/classes/java/awt/image/PackedColorModel.java b/jdk/src/share/classes/java/awt/image/PackedColorModel.java index 3c910255aab..1ff6ecd0b10 100644 --- a/jdk/src/share/classes/java/awt/image/PackedColorModel.java +++ b/jdk/src/share/classes/java/awt/image/PackedColorModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -252,7 +252,7 @@ public abstract class PackedColorModel extends ColorModel { * representation contain the color or alpha samples. */ final public int[] getMasks() { - return (int[]) maskArray.clone(); + return maskArray.clone(); } /* diff --git a/jdk/src/share/classes/java/awt/image/RasterFormatException.java b/jdk/src/share/classes/java/awt/image/RasterFormatException.java index 59dd8959936..976eb782201 100644 --- a/jdk/src/share/classes/java/awt/image/RasterFormatException.java +++ b/jdk/src/share/classes/java/awt/image/RasterFormatException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 1998, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,6 +31,7 @@ package java.awt.image; * invalid layout information in the {@link Raster}. */ public class RasterFormatException extends java.lang.RuntimeException { + private static final long serialVersionUID = 96598996116164315L; /** * Constructs a new RasterFormatException with the diff --git a/jdk/src/share/classes/java/awt/image/RescaleOp.java b/jdk/src/share/classes/java/awt/image/RescaleOp.java index c48b98ebb77..e8fa30ee947 100644 --- a/jdk/src/share/classes/java/awt/image/RescaleOp.java +++ b/jdk/src/share/classes/java/awt/image/RescaleOp.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2000, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -144,7 +144,7 @@ public class RescaleOp implements BufferedImageOp, RasterOp { */ final public float[] getScaleFactors (float scaleFactors[]) { if (scaleFactors == null) { - return (float[]) this.scaleFactors.clone(); + return this.scaleFactors.clone(); } System.arraycopy (this.scaleFactors, 0, scaleFactors, 0, Math.min(this.scaleFactors.length, @@ -162,7 +162,7 @@ public class RescaleOp implements BufferedImageOp, RasterOp { */ final public float[] getOffsets(float offsets[]) { if (offsets == null) { - return (float[]) this.offsets.clone(); + return this.offsets.clone(); } System.arraycopy (this.offsets, 0, offsets, 0, diff --git a/jdk/src/share/classes/java/awt/image/SinglePixelPackedSampleModel.java b/jdk/src/share/classes/java/awt/image/SinglePixelPackedSampleModel.java index 58c1db0b726..ab01aef2a2a 100644 --- a/jdk/src/share/classes/java/awt/image/SinglePixelPackedSampleModel.java +++ b/jdk/src/share/classes/java/awt/image/SinglePixelPackedSampleModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -149,7 +149,7 @@ public class SinglePixelPackedSampleModel extends SampleModel dataType); } this.dataType = dataType; - this.bitMasks = (int[]) bitMasks.clone(); + this.bitMasks = bitMasks.clone(); this.scanlineStride = scanlineStride; this.bitOffsets = new int[numBands]; @@ -276,14 +276,14 @@ public class SinglePixelPackedSampleModel extends SampleModel * @return the bit offsets representing a pixel for all bands. */ public int [] getBitOffsets() { - return (int[])bitOffsets.clone(); + return bitOffsets.clone(); } /** Returns the bit masks for all bands. * @return the bit masks for all bands. */ public int [] getBitMasks() { - return (int[])bitMasks.clone(); + return bitMasks.clone(); } /** Returns the scanline stride of this SinglePixelPackedSampleModel. @@ -746,7 +746,7 @@ public class SinglePixelPackedSampleModel extends SampleModel int value = data.getElem(lineOffset+j); value &= ~bitMasks[b]; int sample = iArray[srcOffset++]; - value |= ((int)sample << bitOffsets[b]) & bitMasks[b]; + value |= (sample << bitOffsets[b]) & bitMasks[b]; data.setElem(lineOffset+j,value); } lineOffset += scanlineStride; diff --git a/jdk/src/share/classes/java/awt/image/renderable/ParameterBlock.java b/jdk/src/share/classes/java/awt/image/renderable/ParameterBlock.java index 9726020dd30..ca12bfc4c4b 100644 --- a/jdk/src/share/classes/java/awt/image/renderable/ParameterBlock.java +++ b/jdk/src/share/classes/java/awt/image/renderable/ParameterBlock.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -93,6 +93,8 @@ import java.util.Vector; * * */ public class ParameterBlock implements Cloneable, Serializable { + private static final long serialVersionUID = -7577115551785240750L; + /** A Vector of sources, stored as arbitrary Objects. */ protected Vector sources = new Vector(); diff --git a/jdk/src/share/classes/java/awt/peer/CanvasPeer.java b/jdk/src/share/classes/java/awt/peer/CanvasPeer.java index ba17df0252c..da1c4c0fe5a 100644 --- a/jdk/src/share/classes/java/awt/peer/CanvasPeer.java +++ b/jdk/src/share/classes/java/awt/peer/CanvasPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -42,6 +42,8 @@ public interface CanvasPeer extends ComponentPeer { * from the requested GC passed as the argument to this method. This method * must return a non-null value (given the argument is non-null as well). * + * @param gc the requested graphics configuration + * @return a graphics configuration that best suits this Canvas * @since 1.7 */ GraphicsConfiguration getAppropriateGraphicsConfiguration( diff --git a/jdk/src/share/classes/java/awt/peer/ComponentPeer.java b/jdk/src/share/classes/java/awt/peer/ComponentPeer.java index b34f40f1cdd..8f0366711e5 100644 --- a/jdk/src/share/classes/java/awt/peer/ComponentPeer.java +++ b/jdk/src/share/classes/java/awt/peer/ComponentPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, 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 @@ -516,6 +516,7 @@ public interface ComponentPeer { /** * Applies the shape to the native component window. + * @param shape the shape to apply * @since 1.7 * * @see Component#applyCompoundShape @@ -525,12 +526,13 @@ public interface ComponentPeer { /** * Lowers this component at the bottom of the above HW peer. If the above parameter * is null then the method places this component at the top of the Z-order. + * @param above the peer to lower this component with respect to */ void setZOrder(ComponentPeer above); /** * Updates internal data structures related to the component's GC. - * + * @param gc the reference graphics configuration * @return if the peer needs to be recreated for the changes to take effect * @since 1.7 */ diff --git a/jdk/src/share/classes/java/awt/peer/MouseInfoPeer.java b/jdk/src/share/classes/java/awt/peer/MouseInfoPeer.java index 0594bda78bb..9087810b37d 100644 --- a/jdk/src/share/classes/java/awt/peer/MouseInfoPeer.java +++ b/jdk/src/share/classes/java/awt/peer/MouseInfoPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -55,6 +55,10 @@ public interface MouseInfoPeer { * is located. * See java.awt.GraphicsConfiguration documentation for more * details about virtual screen devices. + * @param point holder for the current coordinates of the mouse + * cursor + * @return the number of the screen device where the pointer is + * located */ int fillPointWithCoords(Point point); @@ -63,6 +67,9 @@ public interface MouseInfoPeer { * pointer. The window is considered to be under the mouse pointer * if it is showing on the screen, and the mouse pointer is above * the part of the window that is not obscured by any other windows. + * @param w the window to check + * @return whether or not the window is located under the mouse + * pointer */ boolean isWindowUnderMouse(Window w); diff --git a/jdk/src/share/classes/java/awt/peer/WindowPeer.java b/jdk/src/share/classes/java/awt/peer/WindowPeer.java index e181b5b3018..65346489990 100644 --- a/jdk/src/share/classes/java/awt/peer/WindowPeer.java +++ b/jdk/src/share/classes/java/awt/peer/WindowPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -94,14 +94,15 @@ public interface WindowPeer extends ContainerPeer { /** * Sets the level of opacity for the window. - * + * @param opacity the level of opacity * @see Window#setOpacity(float) */ void setOpacity(float opacity); /** * Enables the per-pixel alpha support for the window. - * + * @param isOpaque whether or not per-pixel alpha support is + * enabled * @see Window#setBackground(Color) */ void setOpaque(boolean isOpaque); diff --git a/jdk/src/share/classes/java/awt/print/PrinterAbortException.java b/jdk/src/share/classes/java/awt/print/PrinterAbortException.java index d775121dbf1..f421dae9bea 100644 --- a/jdk/src/share/classes/java/awt/print/PrinterAbortException.java +++ b/jdk/src/share/classes/java/awt/print/PrinterAbortException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,6 +33,7 @@ package java.awt.print; */ public class PrinterAbortException extends PrinterException { + private static final long serialVersionUID = 4725169026278854136L; /** * Constructs a new PrinterAbortException with no diff --git a/jdk/src/share/classes/java/awt/print/PrinterException.java b/jdk/src/share/classes/java/awt/print/PrinterException.java index 6304b29c481..5ec275ec5f0 100644 --- a/jdk/src/share/classes/java/awt/print/PrinterException.java +++ b/jdk/src/share/classes/java/awt/print/PrinterException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,6 +32,7 @@ package java.awt.print; */ public class PrinterException extends Exception { + private static final long serialVersionUID = -3757589981158265819L; /** * Constructs a new PrinterException object diff --git a/jdk/src/share/classes/java/lang/Class.java b/jdk/src/share/classes/java/lang/Class.java index ea47cca2fca..a8aee7ffe62 100644 --- a/jdk/src/share/classes/java/lang/Class.java +++ b/jdk/src/share/classes/java/lang/Class.java @@ -1488,10 +1488,9 @@ public final class Class implements java.io.Serializable, List> list = new ArrayList<>(); Class currentClass = Class.this; while (currentClass != null) { - Class[] members = currentClass.getDeclaredClasses(); - for (int i = 0; i < members.length; i++) { - if (Modifier.isPublic(members[i].getModifiers())) { - list.add(members[i]); + for (Class m : currentClass.getDeclaredClasses()) { + if (Modifier.isPublic(m.getModifiers())) { + list.add(m); } } currentClass = currentClass.getSuperclass(); @@ -2626,8 +2625,8 @@ public final class Class implements java.io.Serializable, } private static void addAll(Collection c, Field[] o) { - for (int i = 0; i < o.length; i++) { - c.add(o[i]); + for (Field f : o) { + c.add(f); } } @@ -2713,8 +2712,8 @@ public final class Class implements java.io.Serializable, } void addAll(Method[] ma) { - for (int i = 0; i < ma.length; i++) { - add(ma[i]); + for (Method m : ma) { + add(m); } } @@ -2819,9 +2818,8 @@ public final class Class implements java.io.Serializable, // out concrete implementations inherited from superclasses at // the end. MethodArray inheritedMethods = new MethodArray(); - Class[] interfaces = getInterfaces(); - for (int i = 0; i < interfaces.length; i++) { - inheritedMethods.addAllNonStatic(interfaces[i].privateGetPublicMethods()); + for (Class i : getInterfaces()) { + inheritedMethods.addAllNonStatic(i.privateGetPublicMethods()); } if (!isInterface()) { Class c = getSuperclass(); @@ -2864,9 +2862,9 @@ public final class Class implements java.io.Serializable, private static Field searchFields(Field[] fields, String name) { String internedName = name.intern(); - for (int i = 0; i < fields.length; i++) { - if (fields[i].getName() == internedName) { - return getReflectionFactory().copyField(fields[i]); + for (Field field : fields) { + if (field.getName() == internedName) { + return getReflectionFactory().copyField(field); } } return null; @@ -2887,8 +2885,7 @@ public final class Class implements java.io.Serializable, } // Direct superinterfaces, recursively Class[] interfaces = getInterfaces(); - for (int i = 0; i < interfaces.length; i++) { - Class c = interfaces[i]; + for (Class c : interfaces) { if ((res = c.getField0(name)) != null) { return res; } @@ -2911,8 +2908,7 @@ public final class Class implements java.io.Serializable, { Method res = null; String internedName = name.intern(); - for (int i = 0; i < methods.length; i++) { - Method m = methods[i]; + for (Method m : methods) { if (m.getName() == internedName && arrayContentsEq(parameterTypes, m.getParameterTypes()) && (res == null diff --git a/jdk/src/share/classes/java/lang/ClassLoader.java b/jdk/src/share/classes/java/lang/ClassLoader.java index 875f5ec8e97..078c1502176 100644 --- a/jdk/src/share/classes/java/lang/ClassLoader.java +++ b/jdk/src/share/classes/java/lang/ClassLoader.java @@ -172,6 +172,10 @@ import sun.security.util.SecurityConstants; * "java.net.URLClassLoader$3$1" * * + * {@code Class} objects for array classes are not created by {@code ClassLoader}; + * use the {@link Class#forName} method instead. + * + * @jls 13.1 The Form of a Binary * @see #resolveClass(Class) * @since 1.0 */ @@ -195,8 +199,7 @@ public abstract class ClassLoader { // the set of parallel capable loader types private static final Set> loaderTypes = - Collections.newSetFromMap( - new WeakHashMap, Boolean>()); + Collections.newSetFromMap(new WeakHashMap<>()); static { synchronized (loaderTypes) { loaderTypes.add(ClassLoader.class); } } @@ -281,8 +284,7 @@ public abstract class ClassLoader { if (ParallelLoaders.isRegistered(this.getClass())) { parallelLockMap = new ConcurrentHashMap<>(); package2certs = new ConcurrentHashMap<>(); - domains = - Collections.synchronizedSet(new HashSet()); + domains = Collections.synchronizedSet(new HashSet<>()); assertionLock = new Object(); } else { // no finer-grained lock; lock on the classloader instance @@ -851,9 +853,6 @@ public abstract class ClassLoader { return c; } - private native Class defineClass0(String name, byte[] b, int off, int len, - ProtectionDomain pd); - private native Class defineClass1(String name, byte[] b, int off, int len, ProtectionDomain pd, String source); @@ -865,8 +864,7 @@ public abstract class ClassLoader { private boolean checkName(String name) { if ((name == null) || (name.length() == 0)) return true; - if ((name.indexOf('/') != -1) - || (!VM.allowArraySyntax() && (name.charAt(0) == '['))) + if ((name.indexOf('/') != -1) || (name.charAt(0) == '[')) return false; return true; } @@ -916,10 +914,10 @@ public abstract class ClassLoader { // go through and make sure all the certs in one array // are in the other and vice-versa. boolean match; - for (int i = 0; i < certs.length; i++) { + for (Certificate cert : certs) { match = false; - for (int j = 0; j < pcerts.length; j++) { - if (certs[i].equals(pcerts[j])) { + for (Certificate pcert : pcerts) { + if (cert.equals(pcert)) { match = true; break; } @@ -928,10 +926,10 @@ public abstract class ClassLoader { } // now do the same for pcerts - for (int i = 0; i < pcerts.length; i++) { + for (Certificate pcert : pcerts) { match = false; - for (int j = 0; j < certs.length; j++) { - if (pcerts[i].equals(certs[j])) { + for (Certificate cert : certs) { + if (pcert.equals(cert)) { match = true; break; } @@ -1648,10 +1646,10 @@ public abstract class ClassLoader { pkgs = Package.getSystemPackages(); } if (pkgs != null) { - for (int i = 0; i < pkgs.length; i++) { - String pkgName = pkgs[i].getName(); + for (Package pkg : pkgs) { + String pkgName = pkg.getName(); if (map.get(pkgName) == null) { - map.put(pkgName, pkgs[i]); + map.put(pkgName, pkg); } } } @@ -1830,8 +1828,8 @@ public abstract class ClassLoader { throw new UnsatisfiedLinkError("Can't load " + libfilename); } } - for (int i = 0 ; i < sys_paths.length ; i++) { - File libfile = new File(sys_paths[i], System.mapLibraryName(name)); + for (String sys_path : sys_paths) { + File libfile = new File(sys_path, System.mapLibraryName(name)); if (loadLibrary0(fromClass, libfile)) { return; } @@ -1841,9 +1839,8 @@ public abstract class ClassLoader { } } if (loader != null) { - for (int i = 0 ; i < usr_paths.length ; i++) { - File libfile = new File(usr_paths[i], - System.mapLibraryName(name)); + for (String usr_path : usr_paths) { + File libfile = new File(usr_path, System.mapLibraryName(name)); if (loadLibrary0(fromClass, libfile)) { return; } diff --git a/jdk/src/share/classes/java/lang/ConditionalSpecialCasing.java b/jdk/src/share/classes/java/lang/ConditionalSpecialCasing.java index d2ed9d91b50..bf5c7ae32fc 100644 --- a/jdk/src/share/classes/java/lang/ConditionalSpecialCasing.java +++ b/jdk/src/share/classes/java/lang/ConditionalSpecialCasing.java @@ -91,15 +91,14 @@ final class ConditionalSpecialCasing { static Hashtable> entryTable = new Hashtable<>(); static { // create hashtable from the entry - for (int i = 0; i < entry.length; i ++) { - Entry cur = entry[i]; - Integer cp = new Integer(cur.getCodePoint()); + for (Entry cur : entry) { + Integer cp = cur.getCodePoint(); HashSet set = entryTable.get(cp); if (set == null) { - set = new HashSet(); + set = new HashSet<>(); + entryTable.put(cp, set); } set.add(cur); - entryTable.put(cp, set); } } diff --git a/jdk/src/share/classes/java/lang/Double.java b/jdk/src/share/classes/java/lang/Double.java index 9ba150e7156..d76c934bc62 100644 --- a/jdk/src/share/classes/java/lang/Double.java +++ b/jdk/src/share/classes/java/lang/Double.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,6 @@ package java.lang; import sun.misc.FloatingDecimal; -import sun.misc.FpUtils; import sun.misc.DoubleConsts; /** diff --git a/jdk/src/share/classes/java/lang/Package.java b/jdk/src/share/classes/java/lang/Package.java index e55d72bc038..f59176f558e 100644 --- a/jdk/src/share/classes/java/lang/Package.java +++ b/jdk/src/share/classes/java/lang/Package.java @@ -557,8 +557,8 @@ public class Package implements java.lang.reflect.AnnotatedElement { // First, update the system package map with new package names String[] names = getSystemPackages0(); synchronized (pkgs) { - for (int i = 0; i < names.length; i++) { - defineSystemPackage(names[i], getSystemPackage0(names[i])); + for (String name : names) { + defineSystemPackage(name, getSystemPackage0(name)); } return pkgs.values().toArray(new Package[pkgs.size()]); } diff --git a/jdk/src/share/classes/java/lang/SecurityManager.java b/jdk/src/share/classes/java/lang/SecurityManager.java index 3797b86a1c3..e0aeb32de17 100644 --- a/jdk/src/share/classes/java/lang/SecurityManager.java +++ b/jdk/src/share/classes/java/lang/SecurityManager.java @@ -1476,10 +1476,10 @@ class SecurityManager { /* * Traverse the list of packages, check for any matches. */ - for (int i = 0; i < pkgs.length; i++) { - if (pkg.startsWith(pkgs[i]) || pkgs[i].equals(pkg + ".")) { + for (String restrictedPkg : pkgs) { + if (pkg.startsWith(restrictedPkg) || restrictedPkg.equals(pkg + ".")) { checkPermission( - new RuntimePermission("accessClassInPackage."+pkg)); + new RuntimePermission("accessClassInPackage." + pkg)); break; // No need to continue; only need to check this once } } @@ -1544,10 +1544,10 @@ class SecurityManager { /* * Traverse the list of packages, check for any matches. */ - for (int i = 0; i < pkgs.length; i++) { - if (pkg.startsWith(pkgs[i]) || pkgs[i].equals(pkg + ".")) { + for (String restrictedPkg : pkgs) { + if (pkg.startsWith(restrictedPkg) || restrictedPkg.equals(pkg + ".")) { checkPermission( - new RuntimePermission("defineClassInPackage."+pkg)); + new RuntimePermission("defineClassInPackage." + pkg)); break; // No need to continue; only need to check this once } } diff --git a/jdk/src/share/classes/java/lang/StringCoding.java b/jdk/src/share/classes/java/lang/StringCoding.java index 7a67ce77ab0..24ed0c06bbe 100644 --- a/jdk/src/share/classes/java/lang/StringCoding.java +++ b/jdk/src/share/classes/java/lang/StringCoding.java @@ -67,7 +67,7 @@ class StringCoding { } private static void set(ThreadLocal> tl, T ob) { - tl.set(new SoftReference(ob)); + tl.set(new SoftReference<>(ob)); } // Trim the given byte array to the given length diff --git a/jdk/src/share/classes/java/lang/ThreadLocal.java b/jdk/src/share/classes/java/lang/ThreadLocal.java index 91d3df940d6..f9f78c4ecd9 100644 --- a/jdk/src/share/classes/java/lang/ThreadLocal.java +++ b/jdk/src/share/classes/java/lang/ThreadLocal.java @@ -382,8 +382,7 @@ public class ThreadLocal { setThreshold(len); table = new Entry[len]; - for (int j = 0; j < len; j++) { - Entry e = parentTable[j]; + for (Entry e : parentTable) { if (e != null) { @SuppressWarnings("unchecked") ThreadLocal key = (ThreadLocal) e.get(); @@ -685,8 +684,7 @@ public class ThreadLocal { Entry[] newTab = new Entry[newLen]; int count = 0; - for (int j = 0; j < oldLen; ++j) { - Entry e = oldTab[j]; + for (Entry e : oldTab) { if (e != null) { ThreadLocal k = e.get(); if (k == null) { diff --git a/jdk/src/share/classes/java/lang/Throwable.java b/jdk/src/share/classes/java/lang/Throwable.java index 4b9e2ad0415..abdb3fc5734 100644 --- a/jdk/src/share/classes/java/lang/Throwable.java +++ b/jdk/src/share/classes/java/lang/Throwable.java @@ -646,8 +646,7 @@ public class Throwable implements Serializable { private void printStackTrace(PrintStreamOrWriter s) { // Guard against malicious overrides of Throwable.equals by // using a Set with identity equality semantics. - Set dejaVu = - Collections.newSetFromMap(new IdentityHashMap()); + Set dejaVu = Collections.newSetFromMap(new IdentityHashMap<>()); dejaVu.add(this); synchronized (s.lock()) { diff --git a/jdk/src/share/classes/java/lang/invoke/AbstractValidatingLambdaMetafactory.java b/jdk/src/share/classes/java/lang/invoke/AbstractValidatingLambdaMetafactory.java index e1c82d8f559..e8e36e1f323 100644 --- a/jdk/src/share/classes/java/lang/invoke/AbstractValidatingLambdaMetafactory.java +++ b/jdk/src/share/classes/java/lang/invoke/AbstractValidatingLambdaMetafactory.java @@ -114,6 +114,11 @@ import static sun.invoke.util.Wrapper.isWrapperType; Class[] markerInterfaces, MethodType[] additionalBridges) throws LambdaConversionException { + if ((caller.lookupModes() & MethodHandles.Lookup.PRIVATE) == 0) { + throw new LambdaConversionException(String.format( + "Invalid caller: %s", + caller.lookupClass().getName())); + } this.targetClass = caller.lookupClass(); this.invokedType = invokedType; @@ -221,6 +226,13 @@ import static sun.invoke.util.Wrapper.isWrapperType; String.format("Invalid receiver type %s; not a subtype of implementation type %s", receiverClass, implDefiningClass)); } + + Class implReceiverClass = implMethod.type().parameterType(0); + if (implReceiverClass != implDefiningClass && !implReceiverClass.isAssignableFrom(receiverClass)) { + throw new LambdaConversionException( + String.format("Invalid receiver type %s; not a subtype of implementation receiver type %s", + receiverClass, implReceiverClass)); + } } else { // no receiver capturedStart = 0; @@ -256,11 +268,17 @@ import static sun.invoke.util.Wrapper.isWrapperType; (implKind == MethodHandleInfo.REF_newInvokeSpecial) ? implDefiningClass : implMethodType.returnType(); + Class samReturnType = samMethodType.returnType(); if (!isAdaptableToAsReturn(actualReturnType, expectedType)) { throw new LambdaConversionException( String.format("Type mismatch for lambda return: %s is not convertible to %s", actualReturnType, expectedType)); } + if (!isAdaptableToAsReturn(expectedType, samReturnType)) { + throw new LambdaConversionException( + String.format("Type mismatch for lambda expected return: %s is not convertible to %s", + expectedType, samReturnType)); + } } /** diff --git a/jdk/src/share/classes/java/lang/invoke/MethodHandleProxies.java b/jdk/src/share/classes/java/lang/invoke/MethodHandleProxies.java index 13b1d21acd4..34ec2348099 100644 --- a/jdk/src/share/classes/java/lang/invoke/MethodHandleProxies.java +++ b/jdk/src/share/classes/java/lang/invoke/MethodHandleProxies.java @@ -303,7 +303,7 @@ public class MethodHandleProxies { private static Method[] getSingleNameMethods(Class intfc) { - ArrayList methods = new ArrayList(); + ArrayList methods = new ArrayList<>(); String uniqueName = null; for (Method m : intfc.getMethods()) { if (isObjectMethod(m)) continue; diff --git a/jdk/src/share/classes/java/lang/invoke/MutableCallSite.java b/jdk/src/share/classes/java/lang/invoke/MutableCallSite.java index 746c8d64e5c..68dabe82c33 100644 --- a/jdk/src/share/classes/java/lang/invoke/MutableCallSite.java +++ b/jdk/src/share/classes/java/lang/invoke/MutableCallSite.java @@ -274,8 +274,8 @@ public class MutableCallSite extends CallSite { public static void syncAll(MutableCallSite[] sites) { if (sites.length == 0) return; STORE_BARRIER.lazySet(0); - for (int i = 0; i < sites.length; i++) { - sites[i].getClass(); // trigger NPE on first null + for (MutableCallSite site : sites) { + site.getClass(); // trigger NPE on first null } // FIXME: NYI } diff --git a/jdk/src/share/classes/java/lang/management/MemoryUsage.java b/jdk/src/share/classes/java/lang/management/MemoryUsage.java index 6d11e323f6d..d20a5c78fa1 100644 --- a/jdk/src/share/classes/java/lang/management/MemoryUsage.java +++ b/jdk/src/share/classes/java/lang/management/MemoryUsage.java @@ -237,7 +237,7 @@ public class MemoryUsage { * Returns a descriptive representation of this memory usage. */ public String toString() { - StringBuffer buf = new StringBuffer(); + StringBuilder buf = new StringBuilder(); buf.append("init = " + init + "(" + (init >> 10) + "K) "); buf.append("used = " + used + "(" + (used >> 10) + "K) "); buf.append("committed = " + committed + "(" + diff --git a/jdk/src/share/classes/java/lang/ref/Reference.java b/jdk/src/share/classes/java/lang/ref/Reference.java index 42d2ba97814..49f68d145f4 100644 --- a/jdk/src/share/classes/java/lang/ref/Reference.java +++ b/jdk/src/share/classes/java/lang/ref/Reference.java @@ -111,7 +111,7 @@ public abstract class Reference { * therefore critical that any code holding this lock complete as quickly * as possible, allocate no new objects, and avoid calling user code. */ - static private class Lock { }; + static private class Lock { } private static Lock lock = new Lock(); @@ -126,6 +126,22 @@ public abstract class Reference { */ private static class ReferenceHandler extends Thread { + private static void ensureClassInitialized(Class clazz) { + try { + Class.forName(clazz.getName(), true, clazz.getClassLoader()); + } catch (ClassNotFoundException e) { + throw (Error) new NoClassDefFoundError(e.getMessage()).initCause(e); + } + } + + static { + // pre-load and initialize InterruptedException and Cleaner classes + // so that we don't get into trouble later in the run loop if there's + // memory shortage while loading/initializing them lazily. + ensureClassInitialized(InterruptedException.class); + ensureClassInitialized(Cleaner.class); + } + ReferenceHandler(ThreadGroup g, String name) { super(g, name); } @@ -133,37 +149,40 @@ public abstract class Reference { public void run() { for (;;) { Reference r; - synchronized (lock) { - if (pending != null) { - r = pending; - pending = r.discovered; - r.discovered = null; - } else { - // The waiting on the lock may cause an OOME because it may try to allocate - // exception objects, so also catch OOME here to avoid silent exit of the - // reference handler thread. - // - // Explicitly define the order of the two exceptions we catch here - // when waiting for the lock. - // - // We do not want to try to potentially load the InterruptedException class - // (which would be done if this was its first use, and InterruptedException - // were checked first) in this situation. - // - // This may lead to the VM not ever trying to load the InterruptedException - // class again. - try { - try { - lock.wait(); - } catch (OutOfMemoryError x) { } - } catch (InterruptedException x) { } - continue; + Cleaner c; + try { + synchronized (lock) { + if (pending != null) { + r = pending; + // 'instanceof' might throw OutOfMemoryError sometimes + // so do this before un-linking 'r' from the 'pending' chain... + c = r instanceof Cleaner ? (Cleaner) r : null; + // unlink 'r' from 'pending' chain + pending = r.discovered; + r.discovered = null; + } else { + // The waiting on the lock may cause an OutOfMemoryError + // because it may try to allocate exception objects. + lock.wait(); + continue; + } } + } catch (OutOfMemoryError x) { + // Give other threads CPU time so they hopefully drop some live references + // and GC reclaims some space. + // Also prevent CPU intensive spinning in case 'r instanceof Cleaner' above + // persistently throws OOME for some time... + Thread.yield(); + // retry + continue; + } catch (InterruptedException x) { + // retry + continue; } // Fast path for cleaners - if (r instanceof Cleaner) { - ((Cleaner)r).clean(); + if (c != null) { + c.clean(); continue; } diff --git a/jdk/src/share/classes/java/lang/reflect/AccessibleObject.java b/jdk/src/share/classes/java/lang/reflect/AccessibleObject.java index f98aed5db25..a5931e145a7 100644 --- a/jdk/src/share/classes/java/lang/reflect/AccessibleObject.java +++ b/jdk/src/share/classes/java/lang/reflect/AccessibleObject.java @@ -93,8 +93,8 @@ public class AccessibleObject implements AnnotatedElement { throws SecurityException { SecurityManager sm = System.getSecurityManager(); if (sm != null) sm.checkPermission(ACCESS_PERMISSION); - for (int i = 0; i < array.length; i++) { - setAccessible0(array[i], flag); + for (AccessibleObject ao : array) { + setAccessible0(ao, flag); } } diff --git a/jdk/src/share/classes/java/lang/reflect/Parameter.java b/jdk/src/share/classes/java/lang/reflect/Parameter.java index d8c992c15bd..f035b8e5e73 100644 --- a/jdk/src/share/classes/java/lang/reflect/Parameter.java +++ b/jdk/src/share/classes/java/lang/reflect/Parameter.java @@ -337,11 +337,9 @@ public final class Parameter implements AnnotatedElement { private synchronized Map, Annotation> declaredAnnotations() { if(null == declaredAnnotations) { - declaredAnnotations = - new HashMap, Annotation>(); - Annotation[] ann = getDeclaredAnnotations(); - for(int i = 0; i < ann.length; i++) - declaredAnnotations.put(ann[i].annotationType(), ann[i]); + declaredAnnotations = new HashMap<>(); + for (Annotation a : getDeclaredAnnotations()) + declaredAnnotations.put(a.annotationType(), a); } return declaredAnnotations; } diff --git a/jdk/src/share/classes/java/lang/reflect/Proxy.java b/jdk/src/share/classes/java/lang/reflect/Proxy.java index 20e62b642ca..766bdf30116 100644 --- a/jdk/src/share/classes/java/lang/reflect/Proxy.java +++ b/jdk/src/share/classes/java/lang/reflect/Proxy.java @@ -465,7 +465,7 @@ public class Proxy implements java.io.Serializable { Key2(Class intf1, Class intf2) { super(intf1); hash = 31 * intf1.hashCode() + intf2.hashCode(); - ref2 = new WeakReference>(intf2); + ref2 = new WeakReference<>(intf2); } @Override @@ -725,7 +725,6 @@ public class Proxy implements java.io.Serializable { } final Constructor cons = cl.getConstructor(constructorParams); - final InvocationHandler ih = h; if (!Modifier.isPublic(cl.getModifiers())) { AccessController.doPrivileged(new PrivilegedAction() { public Void run() { @@ -735,7 +734,7 @@ public class Proxy implements java.io.Serializable { }); } return cons.newInstance(new Object[]{h}); - } catch (IllegalAccessException|InstantiationException e) { + } catch (IllegalAccessException | InstantiationException | NoSuchMethodException e) { throw new InternalError(e.toString(), e); } catch (InvocationTargetException e) { Throwable t = e.getCause(); @@ -744,8 +743,6 @@ public class Proxy implements java.io.Serializable { } else { throw new InternalError(t.toString(), t); } - } catch (NoSuchMethodException e) { - throw new InternalError(e.toString(), e); } } diff --git a/jdk/src/share/classes/java/net/SocketPermission.java b/jdk/src/share/classes/java/net/SocketPermission.java index 70b004af3bc..0f720c52283 100644 --- a/jdk/src/share/classes/java/net/SocketPermission.java +++ b/jdk/src/share/classes/java/net/SocketPermission.java @@ -235,13 +235,11 @@ public final class SocketPermission extends Permission private static Debug debug = null; private static boolean debugInit = false; - // ephemeral port range for this system - private static final int ephemeralLow = initEphemeralPorts( - "low", DEF_EPH_LOW - ); - private static final int ephemeralHigh = initEphemeralPorts( - "high", PORT_MAX - ); + // lazy initializer + private static class EphemeralRange { + static final int low = initEphemeralPorts("low", DEF_EPH_LOW); + static final int high = initEphemeralPorts("high", PORT_MAX); + }; static { Boolean tmp = java.security.AccessController.doPrivileged( @@ -1235,6 +1233,9 @@ public final class SocketPermission extends Permission int policyLow, int policyHigh, int targetLow, int targetHigh ) { + final int ephemeralLow = EphemeralRange.low; + final int ephemeralHigh = EphemeralRange.high; + if (targetLow == 0) { // check policy includes ephemeral range if (!inRange(policyLow, policyHigh, ephemeralLow, ephemeralHigh)) { diff --git a/jdk/src/share/classes/java/nio/file/CopyMoveHelper.java b/jdk/src/share/classes/java/nio/file/CopyMoveHelper.java index 54bfe085962..ab9281807fd 100644 --- a/jdk/src/share/classes/java/nio/file/CopyMoveHelper.java +++ b/jdk/src/share/classes/java/nio/file/CopyMoveHelper.java @@ -130,7 +130,7 @@ class CopyMoveHelper { // copy basic attributes to target if (opts.copyAttributes) { BasicFileAttributeView view = - Files.getFileAttributeView(target, BasicFileAttributeView.class, linkOptions); + Files.getFileAttributeView(target, BasicFileAttributeView.class); try { view.setTimes(attrs.lastModifiedTime(), attrs.lastAccessTime(), diff --git a/jdk/src/share/classes/java/time/Clock.java b/jdk/src/share/classes/java/time/Clock.java index cd90822925f..b1127848bed 100644 --- a/jdk/src/share/classes/java/time/Clock.java +++ b/jdk/src/share/classes/java/time/Clock.java @@ -104,7 +104,7 @@ import java.util.TimeZone; * resolution clock if one is available. * * @implSpec - * This abstract class must be implemented with care to ensure other operate correctly. + * This abstract class must be implemented with care to ensure other classes operate correctly. * All implementations that can be instantiated must be final, immutable and thread-safe. *

    * The principal methods are defined to allow the throwing of an exception. diff --git a/jdk/src/share/classes/java/time/Duration.java b/jdk/src/share/classes/java/time/Duration.java index 02b882ca40e..c53afe3ebcb 100644 --- a/jdk/src/share/classes/java/time/Duration.java +++ b/jdk/src/share/classes/java/time/Duration.java @@ -1326,6 +1326,7 @@ public final class Duration /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/Instant.java b/jdk/src/share/classes/java/time/Instant.java index d91e1c86568..1b944a50c3d 100644 --- a/jdk/src/share/classes/java/time/Instant.java +++ b/jdk/src/share/classes/java/time/Instant.java @@ -100,11 +100,6 @@ import java.util.Objects; * This class models a single instantaneous point on the time-line. * This might be used to record event time-stamps in the application. *

    - * For practicality, the instant is stored with some constraints. - * The measurable time-line is restricted to the number of seconds that can be held - * in a {@code long}. This is greater than the current estimated age of the universe. - * The instant is stored to nanosecond resolution. - *

    * The range of an instant requires the storage of a number larger than a {@code long}. * To achieve this, the class stores a {@code long} representing epoch-seconds and an * {@code int} representing nanosecond-of-second, which will always be between 0 and 999,999,999. @@ -1348,6 +1343,7 @@ public final class Instant /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/LocalDate.java b/jdk/src/share/classes/java/time/LocalDate.java index c8ee89c87c5..17b3b24c0ea 100644 --- a/jdk/src/share/classes/java/time/LocalDate.java +++ b/jdk/src/share/classes/java/time/LocalDate.java @@ -2053,6 +2053,7 @@ public final class LocalDate /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/LocalDateTime.java b/jdk/src/share/classes/java/time/LocalDateTime.java index f9975d82329..86633b84165 100644 --- a/jdk/src/share/classes/java/time/LocalDateTime.java +++ b/jdk/src/share/classes/java/time/LocalDateTime.java @@ -1986,6 +1986,7 @@ public final class LocalDateTime /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/LocalTime.java b/jdk/src/share/classes/java/time/LocalTime.java index 08a06317413..4cc12f74dc3 100644 --- a/jdk/src/share/classes/java/time/LocalTime.java +++ b/jdk/src/share/classes/java/time/LocalTime.java @@ -1638,6 +1638,7 @@ public final class LocalTime /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/MonthDay.java b/jdk/src/share/classes/java/time/MonthDay.java index 2339cad5397..5b7844fd468 100644 --- a/jdk/src/share/classes/java/time/MonthDay.java +++ b/jdk/src/share/classes/java/time/MonthDay.java @@ -771,6 +771,7 @@ public final class MonthDay /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/OffsetDateTime.java b/jdk/src/share/classes/java/time/OffsetDateTime.java index caecddca0f4..cd0eff6e567 100644 --- a/jdk/src/share/classes/java/time/OffsetDateTime.java +++ b/jdk/src/share/classes/java/time/OffsetDateTime.java @@ -1925,6 +1925,7 @@ public final class OffsetDateTime /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/OffsetTime.java b/jdk/src/share/classes/java/time/OffsetTime.java index 466cf5ae639..32a7187d0f5 100644 --- a/jdk/src/share/classes/java/time/OffsetTime.java +++ b/jdk/src/share/classes/java/time/OffsetTime.java @@ -1396,6 +1396,7 @@ public final class OffsetTime /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/Period.java b/jdk/src/share/classes/java/time/Period.java index ff6db0885f0..6087618ef9c 100644 --- a/jdk/src/share/classes/java/time/Period.java +++ b/jdk/src/share/classes/java/time/Period.java @@ -1058,6 +1058,7 @@ public final class Period /** * Defend against malicious streams. * + * @param s the stream to read * @throws java.io.InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/Year.java b/jdk/src/share/classes/java/time/Year.java index cc68951351b..ff8528aef8f 100644 --- a/jdk/src/share/classes/java/time/Year.java +++ b/jdk/src/share/classes/java/time/Year.java @@ -1104,6 +1104,7 @@ public final class Year /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/YearMonth.java b/jdk/src/share/classes/java/time/YearMonth.java index e5f42100ac0..97f66de2903 100644 --- a/jdk/src/share/classes/java/time/YearMonth.java +++ b/jdk/src/share/classes/java/time/YearMonth.java @@ -1230,6 +1230,7 @@ public final class YearMonth /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/ZoneId.java b/jdk/src/share/classes/java/time/ZoneId.java index 9b8ebc7267a..16f8bf210c6 100644 --- a/jdk/src/share/classes/java/time/ZoneId.java +++ b/jdk/src/share/classes/java/time/ZoneId.java @@ -624,6 +624,7 @@ public abstract class ZoneId implements Serializable { /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/ZoneOffset.java b/jdk/src/share/classes/java/time/ZoneOffset.java index efbdec9a934..10bd5446e0b 100644 --- a/jdk/src/share/classes/java/time/ZoneOffset.java +++ b/jdk/src/share/classes/java/time/ZoneOffset.java @@ -769,6 +769,7 @@ public final class ZoneOffset /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/ZoneRegion.java b/jdk/src/share/classes/java/time/ZoneRegion.java index 5349b305ac7..83f0b43d775 100644 --- a/jdk/src/share/classes/java/time/ZoneRegion.java +++ b/jdk/src/share/classes/java/time/ZoneRegion.java @@ -196,6 +196,7 @@ final class ZoneRegion extends ZoneId implements Serializable { /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/ZonedDateTime.java b/jdk/src/share/classes/java/time/ZonedDateTime.java index b1342be5e47..752756bb78b 100644 --- a/jdk/src/share/classes/java/time/ZonedDateTime.java +++ b/jdk/src/share/classes/java/time/ZonedDateTime.java @@ -2225,6 +2225,7 @@ public final class ZonedDateTime /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/chrono/AbstractChronology.java b/jdk/src/share/classes/java/time/chrono/AbstractChronology.java index 8b3559135a5..c2e91d7f5f8 100644 --- a/jdk/src/share/classes/java/time/chrono/AbstractChronology.java +++ b/jdk/src/share/classes/java/time/chrono/AbstractChronology.java @@ -766,6 +766,7 @@ public abstract class AbstractChronology implements Chronology { /** * Defend against malicious streams. * + * @param s the stream to read * @throws java.io.InvalidObjectException always */ private void readObject(ObjectInputStream s) throws ObjectStreamException { diff --git a/jdk/src/share/classes/java/time/chrono/ChronoLocalDateTimeImpl.java b/jdk/src/share/classes/java/time/chrono/ChronoLocalDateTimeImpl.java index 21a8548115e..ac5f7b4bfe3 100644 --- a/jdk/src/share/classes/java/time/chrono/ChronoLocalDateTimeImpl.java +++ b/jdk/src/share/classes/java/time/chrono/ChronoLocalDateTimeImpl.java @@ -416,6 +416,7 @@ final class ChronoLocalDateTimeImpl /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/chrono/ChronoPeriodImpl.java b/jdk/src/share/classes/java/time/chrono/ChronoPeriodImpl.java index e0ee43400ed..911144d5b04 100644 --- a/jdk/src/share/classes/java/time/chrono/ChronoPeriodImpl.java +++ b/jdk/src/share/classes/java/time/chrono/ChronoPeriodImpl.java @@ -376,6 +376,7 @@ final class ChronoPeriodImpl /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws ObjectStreamException { diff --git a/jdk/src/share/classes/java/time/chrono/ChronoZonedDateTimeImpl.java b/jdk/src/share/classes/java/time/chrono/ChronoZonedDateTimeImpl.java index 79f3423c5b2..abd21eecaf0 100644 --- a/jdk/src/share/classes/java/time/chrono/ChronoZonedDateTimeImpl.java +++ b/jdk/src/share/classes/java/time/chrono/ChronoZonedDateTimeImpl.java @@ -340,6 +340,7 @@ final class ChronoZonedDateTimeImpl /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/chrono/HijrahChronology.java b/jdk/src/share/classes/java/time/chrono/HijrahChronology.java index 821ff9f5012..3be442cecb7 100644 --- a/jdk/src/share/classes/java/time/chrono/HijrahChronology.java +++ b/jdk/src/share/classes/java/time/chrono/HijrahChronology.java @@ -1096,6 +1096,7 @@ public final class HijrahChronology extends AbstractChronology implements Serial /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/chrono/HijrahDate.java b/jdk/src/share/classes/java/time/chrono/HijrahDate.java index 9ab791ce8e5..9d5059eba20 100644 --- a/jdk/src/share/classes/java/time/chrono/HijrahDate.java +++ b/jdk/src/share/classes/java/time/chrono/HijrahDate.java @@ -654,6 +654,7 @@ public final class HijrahDate /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/chrono/IsoChronology.java b/jdk/src/share/classes/java/time/chrono/IsoChronology.java index c0936b0f292..f84c1c87671 100644 --- a/jdk/src/share/classes/java/time/chrono/IsoChronology.java +++ b/jdk/src/share/classes/java/time/chrono/IsoChronology.java @@ -604,6 +604,7 @@ public final class IsoChronology extends AbstractChronology implements Serializa /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/chrono/JapaneseChronology.java b/jdk/src/share/classes/java/time/chrono/JapaneseChronology.java index b1dbf53de82..7845088eb7e 100644 --- a/jdk/src/share/classes/java/time/chrono/JapaneseChronology.java +++ b/jdk/src/share/classes/java/time/chrono/JapaneseChronology.java @@ -525,6 +525,7 @@ public final class JapaneseChronology extends AbstractChronology implements Seri /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/chrono/JapaneseDate.java b/jdk/src/share/classes/java/time/chrono/JapaneseDate.java index 5c7e545042a..0c1a876eae2 100644 --- a/jdk/src/share/classes/java/time/chrono/JapaneseDate.java +++ b/jdk/src/share/classes/java/time/chrono/JapaneseDate.java @@ -716,6 +716,7 @@ public final class JapaneseDate /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/chrono/JapaneseEra.java b/jdk/src/share/classes/java/time/chrono/JapaneseEra.java index f31597e02f9..0187565869f 100644 --- a/jdk/src/share/classes/java/time/chrono/JapaneseEra.java +++ b/jdk/src/share/classes/java/time/chrono/JapaneseEra.java @@ -357,6 +357,7 @@ public final class JapaneseEra /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/chrono/MinguoChronology.java b/jdk/src/share/classes/java/time/chrono/MinguoChronology.java index f7ee55789fd..1fda0e415d4 100644 --- a/jdk/src/share/classes/java/time/chrono/MinguoChronology.java +++ b/jdk/src/share/classes/java/time/chrono/MinguoChronology.java @@ -355,6 +355,7 @@ public final class MinguoChronology extends AbstractChronology implements Serial /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/chrono/MinguoDate.java b/jdk/src/share/classes/java/time/chrono/MinguoDate.java index 2cb49b6b600..ba25c8da018 100644 --- a/jdk/src/share/classes/java/time/chrono/MinguoDate.java +++ b/jdk/src/share/classes/java/time/chrono/MinguoDate.java @@ -478,6 +478,7 @@ public final class MinguoDate /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/chrono/ThaiBuddhistChronology.java b/jdk/src/share/classes/java/time/chrono/ThaiBuddhistChronology.java index 057c3baaefb..87bc10047ec 100644 --- a/jdk/src/share/classes/java/time/chrono/ThaiBuddhistChronology.java +++ b/jdk/src/share/classes/java/time/chrono/ThaiBuddhistChronology.java @@ -391,6 +391,7 @@ public final class ThaiBuddhistChronology extends AbstractChronology implements /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/chrono/ThaiBuddhistDate.java b/jdk/src/share/classes/java/time/chrono/ThaiBuddhistDate.java index 9e8b88d3465..f403317b11e 100644 --- a/jdk/src/share/classes/java/time/chrono/ThaiBuddhistDate.java +++ b/jdk/src/share/classes/java/time/chrono/ThaiBuddhistDate.java @@ -478,6 +478,7 @@ public final class ThaiBuddhistDate /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/format/DateTimeFormatter.java b/jdk/src/share/classes/java/time/format/DateTimeFormatter.java index 4109d20e590..39d91986f86 100644 --- a/jdk/src/share/classes/java/time/format/DateTimeFormatter.java +++ b/jdk/src/share/classes/java/time/format/DateTimeFormatter.java @@ -344,10 +344,7 @@ import java.util.Set; * Fraction: Outputs the nano-of-second field as a fraction-of-second. * The nano-of-second value has nine digits, thus the count of pattern letters * is from 1 to 9. If it is less than 9, then the nano-of-second value is - * truncated, with only the most significant digits being output. When parsing - * in strict mode, the number of parsed digits must match the count of pattern - * letters. When parsing in lenient mode, the number of parsed digits must be at - * least the count of pattern letters, up to 9 digits. + * truncated, with only the most significant digits being output. *

    * Year: The count of letters determines the minimum field width below * which padding is used. If the count of letters is two, then a diff --git a/jdk/src/share/classes/java/time/temporal/TemporalAccessor.java b/jdk/src/share/classes/java/time/temporal/TemporalAccessor.java index 081bbbaec32..a6133e18837 100644 --- a/jdk/src/share/classes/java/time/temporal/TemporalAccessor.java +++ b/jdk/src/share/classes/java/time/temporal/TemporalAccessor.java @@ -217,7 +217,7 @@ public interface TemporalAccessor { default int get(TemporalField field) { ValueRange range = range(field); if (range.isIntValue() == false) { - throw new UnsupportedTemporalTypeException("Invalid field " + field + " + for get() method, use getLong() instead"); + throw new UnsupportedTemporalTypeException("Invalid field " + field + " for get() method, use getLong() instead"); } long value = getLong(field); if (range.isValidValue(value) == false) { diff --git a/jdk/src/share/classes/java/time/temporal/ValueRange.java b/jdk/src/share/classes/java/time/temporal/ValueRange.java index 980203c6d1d..4e5c2fdb2f6 100644 --- a/jdk/src/share/classes/java/time/temporal/ValueRange.java +++ b/jdk/src/share/classes/java/time/temporal/ValueRange.java @@ -344,10 +344,13 @@ public final class ValueRange implements Serializable { /** * Restore the state of an ValueRange from the stream. * Check that the values are valid. + * + * @param s the stream to read * @throws InvalidObjectException if * the smallest minimum is greater than the smallest maximum, * or the smallest maximum is greater than the largest maximum * or the largest minimum is greater than the largest maximum + * @throws ClassNotFoundException if a class cannot be resolved */ private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException, InvalidObjectException diff --git a/jdk/src/share/classes/java/time/temporal/WeekFields.java b/jdk/src/share/classes/java/time/temporal/WeekFields.java index 7cf985e1a51..3aa362cea60 100644 --- a/jdk/src/share/classes/java/time/temporal/WeekFields.java +++ b/jdk/src/share/classes/java/time/temporal/WeekFields.java @@ -344,8 +344,11 @@ public final class WeekFields implements Serializable { /** * Restore the state of a WeekFields from the stream. * Check that the values are valid. + * + * @param s the stream to read * @throws InvalidObjectException if the serialized object has an invalid * value for firstDayOfWeek or minimalDays. + * @throws ClassNotFoundException if a class cannot be resolved */ private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException, InvalidObjectException diff --git a/jdk/src/share/classes/java/time/zone/ZoneOffsetTransition.java b/jdk/src/share/classes/java/time/zone/ZoneOffsetTransition.java index 263f40155cf..1df7c850b26 100644 --- a/jdk/src/share/classes/java/time/zone/ZoneOffsetTransition.java +++ b/jdk/src/share/classes/java/time/zone/ZoneOffsetTransition.java @@ -173,6 +173,8 @@ public final class ZoneOffsetTransition //----------------------------------------------------------------------- /** * Defend against malicious streams. + * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/zone/ZoneOffsetTransitionRule.java b/jdk/src/share/classes/java/time/zone/ZoneOffsetTransitionRule.java index f52953ca4c1..db1a055a8b0 100644 --- a/jdk/src/share/classes/java/time/zone/ZoneOffsetTransitionRule.java +++ b/jdk/src/share/classes/java/time/zone/ZoneOffsetTransitionRule.java @@ -235,6 +235,7 @@ public final class ZoneOffsetTransitionRule implements Serializable { /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/time/zone/ZoneRules.java b/jdk/src/share/classes/java/time/zone/ZoneRules.java index 179c006fe30..47190984db1 100644 --- a/jdk/src/share/classes/java/time/zone/ZoneRules.java +++ b/jdk/src/share/classes/java/time/zone/ZoneRules.java @@ -319,6 +319,7 @@ public final class ZoneRules implements Serializable { /** * Defend against malicious streams. * + * @param s the stream to read * @throws InvalidObjectException always */ private void readObject(ObjectInputStream s) throws InvalidObjectException { diff --git a/jdk/src/share/classes/java/util/Date.java b/jdk/src/share/classes/java/util/Date.java index 502daaefdbb..f16ea496604 100644 --- a/jdk/src/share/classes/java/util/Date.java +++ b/jdk/src/share/classes/java/util/Date.java @@ -41,20 +41,20 @@ import sun.util.calendar.Gregorian; import sun.util.calendar.ZoneInfo; /** - * The class Date represents a specific instant + * The class {@code Date} represents a specific instant * in time, with millisecond precision. *

    - * Prior to JDK 1.1, the class Date had two additional + * Prior to JDK 1.1, the class {@code Date} had two additional * functions. It allowed the interpretation of dates as year, month, day, hour, * minute, and second values. It also allowed the formatting and parsing * of date strings. Unfortunately, the API for these functions was not * amenable to internationalization. As of JDK 1.1, the - * Calendar class should be used to convert between dates and time - * fields and the DateFormat class should be used to format and + * {@code Calendar} class should be used to convert between dates and time + * fields and the {@code DateFormat} class should be used to format and * parse date strings. - * The corresponding methods in Date are deprecated. + * The corresponding methods in {@code Date} are deprecated. *

    - * Although the Date class is intended to reflect + * Although the {@code Date} class is intended to reflect * coordinated universal time (UTC), it may not do so exactly, * depending on the host environment of the Java Virtual Machine. * Nearly all modern operating systems assume that 1 day = @@ -93,12 +93,12 @@ import sun.util.calendar.ZoneInfo; * http://tycho.usno.navy.mil/systime.html * *

    - * In all methods of class Date that accept or return + * In all methods of class {@code Date} that accept or return * year, month, date, hours, minutes, and seconds values, the * following representations are used: *

      *
    • A year y is represented by the integer - * y - 1900. + * y {@code - 1900}. *
    • A month is represented by an integer from 0 to 11; 0 is January, * 1 is February, and so forth; thus 11 is December. *
    • A date (day of month) is represented by an integer from 1 to 31 @@ -155,7 +155,7 @@ public class Date private static final long serialVersionUID = 7523967970034938905L; /** - * Allocates a Date object and initializes it so that + * Allocates a {@code Date} object and initializes it so that * it represents the time at which it was allocated, measured to the * nearest millisecond. * @@ -166,7 +166,7 @@ public class Date } /** - * Allocates a Date object and initializes it to + * Allocates a {@code Date} object and initializes it to * represent the specified number of milliseconds since the * standard base time known as "the epoch", namely January 1, * 1970, 00:00:00 GMT. @@ -179,18 +179,18 @@ public class Date } /** - * Allocates a Date object and initializes it so that + * Allocates a {@code Date} object and initializes it so that * it represents midnight, local time, at the beginning of the day - * specified by the year, month, and - * date arguments. + * specified by the {@code year}, {@code month}, and + * {@code date} arguments. * * @param year the year minus 1900. * @param month the month between 0-11. * @param date the day of the month between 1-31. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.set(year + 1900, month, date) - * or GregorianCalendar(year + 1900, month, date). + * replaced by {@code Calendar.set(year + 1900, month, date)} + * or {@code GregorianCalendar(year + 1900, month, date)}. */ @Deprecated public Date(int year, int month, int date) { @@ -198,10 +198,10 @@ public class Date } /** - * Allocates a Date object and initializes it so that + * Allocates a {@code Date} object and initializes it so that * it represents the instant at the start of the minute specified by - * the year, month, date, - * hrs, and min arguments, in the local + * the {@code year}, {@code month}, {@code date}, + * {@code hrs}, and {@code min} arguments, in the local * time zone. * * @param year the year minus 1900. @@ -211,9 +211,8 @@ public class Date * @param min the minutes between 0-59. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.set(year + 1900, month, date, - * hrs, min) or GregorianCalendar(year + 1900, - * month, date, hrs, min). + * replaced by {@code Calendar.set(year + 1900, month, date, hrs, min)} + * or {@code GregorianCalendar(year + 1900, month, date, hrs, min)}. */ @Deprecated public Date(int year, int month, int date, int hrs, int min) { @@ -221,10 +220,10 @@ public class Date } /** - * Allocates a Date object and initializes it so that + * Allocates a {@code Date} object and initializes it so that * it represents the instant at the start of the second specified - * by the year, month, date, - * hrs, min, and sec arguments, + * by the {@code year}, {@code month}, {@code date}, + * {@code hrs}, {@code min}, and {@code sec} arguments, * in the local time zone. * * @param year the year minus 1900. @@ -235,9 +234,8 @@ public class Date * @param sec the seconds between 0-59. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.set(year + 1900, month, date, - * hrs, min, sec) or GregorianCalendar(year + 1900, - * month, date, hrs, min, sec). + * replaced by {@code Calendar.set(year + 1900, month, date, hrs, min, sec)} + * or {@code GregorianCalendar(year + 1900, month, date, hrs, min, sec)}. */ @Deprecated public Date(int year, int month, int date, int hrs, int min, int sec) { @@ -258,16 +256,16 @@ public class Date } /** - * Allocates a Date object and initializes it so that + * Allocates a {@code Date} object and initializes it so that * it represents the date and time indicated by the string - * s, which is interpreted as if by the + * {@code s}, which is interpreted as if by the * {@link Date#parse} method. * * @param s a string representation of the date. * @see java.text.DateFormat * @see java.util.Date#parse(java.lang.String) * @deprecated As of JDK version 1.1, - * replaced by DateFormat.parse(String s). + * replaced by {@code DateFormat.parse(String s)}. */ @Deprecated public Date(String s) { @@ -292,7 +290,7 @@ public class Date * Determines the date and time based on the arguments. The * arguments are interpreted as a year, month, day of the month, * hour of the day, minute within the hour, and second within the - * minute, exactly as for the Date constructor with six + * minute, exactly as for the {@code Date} constructor with six * arguments, except that the arguments are interpreted relative * to UTC rather than to the local time zone. The time indicated is * returned represented as the distance, measured in milliseconds, @@ -308,10 +306,9 @@ public class Date * the date and time specified by the arguments. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.set(year + 1900, month, date, - * hrs, min, sec) or GregorianCalendar(year + 1900, - * month, date, hrs, min, sec), using a UTC - * TimeZone, followed by Calendar.getTime().getTime(). + * replaced by {@code Calendar.set(year + 1900, month, date, hrs, min, sec)} + * or {@code GregorianCalendar(year + 1900, month, date, hrs, min, sec)}, using a UTC + * {@code TimeZone}, followed by {@code Calendar.getTime().getTime()}. */ @Deprecated public static long UTC(int year, int month, int date, @@ -338,12 +335,12 @@ public class Date } /** - * Attempts to interpret the string s as a representation + * Attempts to interpret the string {@code s} as a representation * of a date and time. If the attempt is successful, the time * indicated is returned represented as the distance, measured in * milliseconds, of that time from the epoch (00:00:00 GMT on * January 1, 1970). If the attempt fails, an - * IllegalArgumentException is thrown. + * {@code IllegalArgumentException} is thrown. *

      * It accepts many syntaxes; in particular, it recognizes the IETF * standard date syntax: "Sat, 12 Aug 1995 13:30:00 GMT". It also @@ -353,11 +350,11 @@ public class Date * meridian). If no time zone is specified, the local time zone is * assumed. GMT and UTC are considered equivalent. *

      - * The string s is processed from left to right, looking for - * data of interest. Any material in s that is within the - * ASCII parenthesis characters ( and ) is ignored. + * The string {@code s} is processed from left to right, looking for + * data of interest. Any material in {@code s} that is within the + * ASCII parenthesis characters {@code (} and {@code )} is ignored. * Parentheses may be nested. Otherwise, the only characters permitted - * within s are these ASCII characters: + * within {@code s} are these ASCII characters: *

            * abcdefghijklmnopqrstuvwxyz
            * ABCDEFGHIJKLMNOPQRSTUVWXYZ
      @@ -365,18 +362,18 @@ public class Date
            * and whitespace characters.

      * A consecutive sequence of decimal digits is treated as a decimal * number:

        - *
      • If a number is preceded by + or - and a year + *
      • If a number is preceded by {@code +} or {@code -} and a year * has already been recognized, then the number is a time-zone * offset. If the number is less than 24, it is an offset measured * in hours. Otherwise, it is regarded as an offset in minutes, * expressed in 24-hour time format without punctuation. A - * preceding - means a westward offset. Time zone offsets + * preceding {@code -} means a westward offset. Time zone offsets * are always relative to UTC (Greenwich). Thus, for example, - * -5 occurring in the string would mean "five hours west - * of Greenwich" and +0430 would mean "four hours and + * {@code -5} occurring in the string would mean "five hours west + * of Greenwich" and {@code +0430} would mean "four hours and * thirty minutes east of Greenwich." It is permitted for the - * string to specify GMT, UT, or UTC - * redundantly-for example, GMT-5 or utc+0430. + * string to specify {@code GMT}, {@code UT}, or {@code UTC} + * redundantly-for example, {@code GMT-5} or {@code utc+0430}. *
      • The number is regarded as a year number if one of the * following conditions is true: *
          @@ -399,8 +396,8 @@ public class Date * unless an hour has already been recognized, in which case it is * regarded as a minute. *
        • If the number is followed by a slash, it is regarded as a month - * (it is decreased by 1 to produce a number in the range 0 - * to 11), unless a month has already been recognized, in + * (it is decreased by 1 to produce a number in the range {@code 0} + * to {@code 11}), unless a month has already been recognized, in * which case it is regarded as a day of the month. *
        • If the number is followed by whitespace, a comma, a hyphen, or * end of string, then if an hour has been recognized but not a @@ -409,31 +406,31 @@ public class Date * otherwise, it is regarded as a day of the month.

        * A consecutive sequence of letters is regarded as a word and treated * as follows:

          - *
        • A word that matches AM, ignoring case, is ignored (but + *
        • A word that matches {@code AM}, ignoring case, is ignored (but * the parse fails if an hour has not been recognized or is less - * than 1 or greater than 12). - *
        • A word that matches PM, ignoring case, adds 12 + * than {@code 1} or greater than {@code 12}). + *
        • A word that matches {@code PM}, ignoring case, adds {@code 12} * to the hour (but the parse fails if an hour has not been - * recognized or is less than 1 or greater than 12). - *
        • Any word that matches any prefix of SUNDAY, MONDAY, TUESDAY, - * WEDNESDAY, THURSDAY, FRIDAY, or SATURDAY, ignoring - * case, is ignored. For example, sat, Friday, TUE, and - * Thurs are ignored. - *
        • Otherwise, any word that matches any prefix of JANUARY, + * recognized or is less than {@code 1} or greater than {@code 12}). + *
        • Any word that matches any prefix of {@code SUNDAY, MONDAY, TUESDAY, + * WEDNESDAY, THURSDAY, FRIDAY}, or {@code SATURDAY}, ignoring + * case, is ignored. For example, {@code sat, Friday, TUE}, and + * {@code Thurs} are ignored. + *
        • Otherwise, any word that matches any prefix of {@code JANUARY, * FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, - * OCTOBER, NOVEMBER, or DECEMBER, ignoring case, and + * OCTOBER, NOVEMBER}, or {@code DECEMBER}, ignoring case, and * considering them in the order given here, is recognized as - * specifying a month and is converted to a number (0 to - * 11). For example, aug, Sept, april, and - * NOV are recognized as months. So is Ma, which - * is recognized as MARCH, not MAY. - *
        • Any word that matches GMT, UT, or UTC, ignoring + * specifying a month and is converted to a number ({@code 0} to + * {@code 11}). For example, {@code aug, Sept, april}, and + * {@code NOV} are recognized as months. So is {@code Ma}, which + * is recognized as {@code MARCH}, not {@code MAY}. + *
        • Any word that matches {@code GMT, UT}, or {@code UTC}, ignoring * case, is treated as referring to UTC. - *
        • Any word that matches EST, CST, MST, or PST, + *
        • Any word that matches {@code EST, CST, MST}, or {@code PST}, * ignoring case, is recognized as referring to the time zone in * North America that is five, six, seven, or eight hours west of - * Greenwich, respectively. Any word that matches EDT, CDT, - * MDT, or PDT, ignoring case, is recognized as + * Greenwich, respectively. Any word that matches {@code EDT, CDT, + * MDT}, or {@code PDT}, ignoring case, is recognized as * referring to the same time zone, respectively, during daylight * saving time.

        * Once the entire string s has been scanned, it is converted to a time @@ -448,7 +445,7 @@ public class Date * represented by the string argument. * @see java.text.DateFormat * @deprecated As of JDK version 1.1, - * replaced by DateFormat.parse(String s). + * replaced by {@code DateFormat.parse(String s)}. */ @Deprecated public static long parse(String s) { @@ -638,13 +635,13 @@ public class Date /** * Returns a value that is the result of subtracting 1900 from the * year that contains or begins with the instant in time represented - * by this Date object, as interpreted in the local + * by this {@code Date} object, as interpreted in the local * time zone. * * @return the year represented by this date, minus 1900. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.get(Calendar.YEAR) - 1900. + * replaced by {@code Calendar.get(Calendar.YEAR) - 1900}. */ @Deprecated public int getYear() { @@ -652,8 +649,8 @@ public class Date } /** - * Sets the year of this Date object to be the specified - * value plus 1900. This Date object is modified so + * Sets the year of this {@code Date} object to be the specified + * value plus 1900. This {@code Date} object is modified so * that it represents a point in time within the specified year, * with the month, date, hour, minute, and second the same as * before, as interpreted in the local time zone. (Of course, if @@ -664,7 +661,7 @@ public class Date * @param year the year value. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.set(Calendar.YEAR, year + 1900). + * replaced by {@code Calendar.set(Calendar.YEAR, year + 1900)}. */ @Deprecated public void setYear(int year) { @@ -673,14 +670,14 @@ public class Date /** * Returns a number representing the month that contains or begins - * with the instant in time represented by this Date object. - * The value returned is between 0 and 11, - * with the value 0 representing January. + * with the instant in time represented by this {@code Date} object. + * The value returned is between {@code 0} and {@code 11}, + * with the value {@code 0} representing January. * * @return the month represented by this date. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.get(Calendar.MONTH). + * replaced by {@code Calendar.get(Calendar.MONTH)}. */ @Deprecated public int getMonth() { @@ -689,7 +686,7 @@ public class Date /** * Sets the month of this date to the specified value. This - * Date object is modified so that it represents a point + * {@code Date} object is modified so that it represents a point * in time within the specified month, with the year, date, hour, * minute, and second the same as before, as interpreted in the * local time zone. If the date was October 31, for example, and @@ -699,7 +696,7 @@ public class Date * @param month the month value between 0-11. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.set(Calendar.MONTH, int month). + * replaced by {@code Calendar.set(Calendar.MONTH, int month)}. */ @Deprecated public void setMonth(int month) { @@ -719,16 +716,16 @@ public class Date } /** - * Returns the day of the month represented by this Date object. - * The value returned is between 1 and 31 + * Returns the day of the month represented by this {@code Date} object. + * The value returned is between {@code 1} and {@code 31} * representing the day of the month that contains or begins with the - * instant in time represented by this Date object, as + * instant in time represented by this {@code Date} object, as * interpreted in the local time zone. * * @return the day of the month represented by this date. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.get(Calendar.DAY_OF_MONTH). + * replaced by {@code Calendar.get(Calendar.DAY_OF_MONTH)}. * @deprecated */ @Deprecated @@ -737,8 +734,8 @@ public class Date } /** - * Sets the day of the month of this Date object to the - * specified value. This Date object is modified so that + * Sets the day of the month of this {@code Date} object to the + * specified value. This {@code Date} object is modified so that * it represents a point in time within the specified day of the * month, with the year, month, hour, minute, and second the same * as before, as interpreted in the local time zone. If the date @@ -749,7 +746,7 @@ public class Date * @param date the day of the month value between 1-31. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.set(Calendar.DAY_OF_MONTH, int date). + * replaced by {@code Calendar.set(Calendar.DAY_OF_MONTH, int date)}. */ @Deprecated public void setDate(int date) { @@ -758,17 +755,17 @@ public class Date /** * Returns the day of the week represented by this date. The - * returned value (0 = Sunday, 1 = Monday, - * 2 = Tuesday, 3 = Wednesday, 4 = - * Thursday, 5 = Friday, 6 = Saturday) + * returned value ({@code 0} = Sunday, {@code 1} = Monday, + * {@code 2} = Tuesday, {@code 3} = Wednesday, {@code 4} = + * Thursday, {@code 5} = Friday, {@code 6} = Saturday) * represents the day of the week that contains or begins with - * the instant in time represented by this Date object, + * the instant in time represented by this {@code Date} object, * as interpreted in the local time zone. * * @return the day of the week represented by this date. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.get(Calendar.DAY_OF_WEEK). + * replaced by {@code Calendar.get(Calendar.DAY_OF_WEEK)}. */ @Deprecated public int getDay() { @@ -776,16 +773,16 @@ public class Date } /** - * Returns the hour represented by this Date object. The - * returned value is a number (0 through 23) + * Returns the hour represented by this {@code Date} object. The + * returned value is a number ({@code 0} through {@code 23}) * representing the hour within the day that contains or begins - * with the instant in time represented by this Date + * with the instant in time represented by this {@code Date} * object, as interpreted in the local time zone. * * @return the hour represented by this date. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.get(Calendar.HOUR_OF_DAY). + * replaced by {@code Calendar.get(Calendar.HOUR_OF_DAY)}. */ @Deprecated public int getHours() { @@ -793,8 +790,8 @@ public class Date } /** - * Sets the hour of this Date object to the specified value. - * This Date object is modified so that it represents a point + * Sets the hour of this {@code Date} object to the specified value. + * This {@code Date} object is modified so that it represents a point * in time within the specified hour of the day, with the year, month, * date, minute, and second the same as before, as interpreted in the * local time zone. @@ -802,7 +799,7 @@ public class Date * @param hours the hour value. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.set(Calendar.HOUR_OF_DAY, int hours). + * replaced by {@code Calendar.set(Calendar.HOUR_OF_DAY, int hours)}. */ @Deprecated public void setHours(int hours) { @@ -812,12 +809,12 @@ public class Date /** * Returns the number of minutes past the hour represented by this date, * as interpreted in the local time zone. - * The value returned is between 0 and 59. + * The value returned is between {@code 0} and {@code 59}. * * @return the number of minutes past the hour represented by this date. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.get(Calendar.MINUTE). + * replaced by {@code Calendar.get(Calendar.MINUTE)}. */ @Deprecated public int getMinutes() { @@ -825,8 +822,8 @@ public class Date } /** - * Sets the minutes of this Date object to the specified value. - * This Date object is modified so that it represents a point + * Sets the minutes of this {@code Date} object to the specified value. + * This {@code Date} object is modified so that it represents a point * in time within the specified minute of the hour, with the year, month, * date, hour, and second the same as before, as interpreted in the * local time zone. @@ -834,7 +831,7 @@ public class Date * @param minutes the value of the minutes. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.set(Calendar.MINUTE, int minutes). + * replaced by {@code Calendar.set(Calendar.MINUTE, int minutes)}. */ @Deprecated public void setMinutes(int minutes) { @@ -843,14 +840,14 @@ public class Date /** * Returns the number of seconds past the minute represented by this date. - * The value returned is between 0 and 61. The - * values 60 and 61 can only occur on those + * The value returned is between {@code 0} and {@code 61}. The + * values {@code 60} and {@code 61} can only occur on those * Java Virtual Machines that take leap seconds into account. * * @return the number of seconds past the minute represented by this date. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.get(Calendar.SECOND). + * replaced by {@code Calendar.get(Calendar.SECOND)}. */ @Deprecated public int getSeconds() { @@ -858,8 +855,8 @@ public class Date } /** - * Sets the seconds of this Date to the specified value. - * This Date object is modified so that it represents a + * Sets the seconds of this {@code Date} to the specified value. + * This {@code Date} object is modified so that it represents a * point in time within the specified second of the minute, with * the year, month, date, hour, and minute the same as before, as * interpreted in the local time zone. @@ -867,7 +864,7 @@ public class Date * @param seconds the seconds value. * @see java.util.Calendar * @deprecated As of JDK version 1.1, - * replaced by Calendar.set(Calendar.SECOND, int seconds). + * replaced by {@code Calendar.set(Calendar.SECOND, int seconds)}. */ @Deprecated public void setSeconds(int seconds) { @@ -876,7 +873,7 @@ public class Date /** * Returns the number of milliseconds since January 1, 1970, 00:00:00 GMT - * represented by this Date object. + * represented by this {@code Date} object. * * @return the number of milliseconds since January 1, 1970, 00:00:00 GMT * represented by this date. @@ -893,8 +890,8 @@ public class Date } /** - * Sets this Date object to represent a point in time that is - * time milliseconds after January 1, 1970 00:00:00 GMT. + * Sets this {@code Date} object to represent a point in time that is + * {@code time} milliseconds after January 1, 1970 00:00:00 GMT. * * @param time the number of milliseconds. */ @@ -907,11 +904,11 @@ public class Date * Tests if this date is before the specified date. * * @param when a date. - * @return true if and only if the instant of time - * represented by this Date object is strictly - * earlier than the instant represented by when; - * false otherwise. - * @exception NullPointerException if when is null. + * @return {@code true} if and only if the instant of time + * represented by this {@code Date} object is strictly + * earlier than the instant represented by {@code when}; + * {@code false} otherwise. + * @exception NullPointerException if {@code when} is null. */ public boolean before(Date when) { return getMillisOf(this) < getMillisOf(when); @@ -921,11 +918,11 @@ public class Date * Tests if this date is after the specified date. * * @param when a date. - * @return true if and only if the instant represented - * by this Date object is strictly later than the - * instant represented by when; - * false otherwise. - * @exception NullPointerException if when is null. + * @return {@code true} if and only if the instant represented + * by this {@code Date} object is strictly later than the + * instant represented by {@code when}; + * {@code false} otherwise. + * @exception NullPointerException if {@code when} is null. */ public boolean after(Date when) { return getMillisOf(this) > getMillisOf(when); @@ -933,17 +930,17 @@ public class Date /** * Compares two dates for equality. - * The result is true if and only if the argument is - * not null and is a Date object that + * The result is {@code true} if and only if the argument is + * not {@code null} and is a {@code Date} object that * represents the same point in time, to the millisecond, as this object. *

        - * Thus, two Date objects are equal if and only if the - * getTime method returns the same long + * Thus, two {@code Date} objects are equal if and only if the + * {@code getTime} method returns the same {@code long} * value for both. * * @param obj the object to compare with. - * @return true if the objects are the same; - * false otherwise. + * @return {@code true} if the objects are the same; + * {@code false} otherwise. * @see java.util.Date#getTime() */ public boolean equals(Object obj) { @@ -951,7 +948,7 @@ public class Date } /** - * Returns the millisecond value of this Date object + * Returns the millisecond value of this {@code Date} object * without affecting its internal state. */ static final long getMillisOf(Date date) { @@ -965,13 +962,13 @@ public class Date /** * Compares two Dates for ordering. * - * @param anotherDate the Date to be compared. - * @return the value 0 if the argument Date is equal to - * this Date; a value less than 0 if this Date + * @param anotherDate the {@code Date} to be compared. + * @return the value {@code 0} if the argument Date is equal to + * this Date; a value less than {@code 0} if this Date * is before the Date argument; and a value greater than - * 0 if this Date is after the Date argument. + * {@code 0} if this Date is after the Date argument. * @since 1.2 - * @exception NullPointerException if anotherDate is null. + * @exception NullPointerException if {@code anotherDate} is null. */ public int compareTo(Date anotherDate) { long thisTime = getMillisOf(this); @@ -981,7 +978,7 @@ public class Date /** * Returns a hash code value for this object. The result is the - * exclusive OR of the two halves of the primitive long + * exclusive OR of the two halves of the primitive {@code long} * value returned by the {@link Date#getTime} * method. That is, the hash code is the value of the expression: *

        {@code
        @@ -996,29 +993,29 @@ public class Date
             }
         
             /**
        -     * Converts this Date object to a String
        +     * Converts this {@code Date} object to a {@code String}
              * of the form:
              * 
              * dow mon dd hh:mm:ss zzz yyyy
        * where:
          - *
        • dow is the day of the week (Sun, Mon, Tue, Wed, - * Thu, Fri, Sat). - *
        • mon is the month (Jan, Feb, Mar, Apr, May, Jun, - * Jul, Aug, Sep, Oct, Nov, Dec). - *
        • dd is the day of the month (01 through - * 31), as two decimal digits. - *
        • hh is the hour of the day (00 through - * 23), as two decimal digits. - *
        • mm is the minute within the hour (00 through - * 59), as two decimal digits. - *
        • ss is the second within the minute (00 through - * 61, as two decimal digits. - *
        • zzz is the time zone (and may reflect daylight saving + *
        • {@code dow} is the day of the week ({@code Sun, Mon, Tue, Wed, + * Thu, Fri, Sat}). + *
        • {@code mon} is the month ({@code Jan, Feb, Mar, Apr, May, Jun, + * Jul, Aug, Sep, Oct, Nov, Dec}). + *
        • {@code dd} is the day of the month ({@code 01} through + * {@code 31}), as two decimal digits. + *
        • {@code hh} is the hour of the day ({@code 00} through + * {@code 23}), as two decimal digits. + *
        • {@code mm} is the minute within the hour ({@code 00} through + * {@code 59}), as two decimal digits. + *
        • {@code ss} is the second within the minute ({@code 00} through + * {@code 61}, as two decimal digits. + *
        • {@code zzz} is the time zone (and may reflect daylight saving * time). Standard time zone abbreviations include those - * recognized by the method parse. If time zone - * information is not available, then zzz is empty - + * recognized by the method {@code parse}. If time zone + * information is not available, then {@code zzz} is empty - * that is, it consists of no characters at all. - *
        • yyyy is the year, as four decimal digits. + *
        • {@code yyyy} is the year, as four decimal digits. *
        * * @return a string representation of this date. @@ -1053,7 +1050,7 @@ public class Date /** * Converts the given name to its 3-letter abbreviation (e.g., * "monday" -> "Mon") and stored the abbreviation in the given - * StringBuilder. + * {@code StringBuilder}. */ private static final StringBuilder convertToAbbr(StringBuilder sb, String name) { sb.append(Character.toUpperCase(name.charAt(0))); @@ -1062,11 +1059,11 @@ public class Date } /** - * Creates a string representation of this Date object in an + * Creates a string representation of this {@code Date} object in an * implementation-dependent form. The intent is that the form should * be familiar to the user of the Java application, wherever it may * happen to be running. The intent is comparable to that of the - * "%c" format supported by the strftime() + * "{@code %c}" format supported by the {@code strftime()} * function of ISO C. * * @return a string representation of this date, using the locale @@ -1075,7 +1072,7 @@ public class Date * @see java.util.Date#toString() * @see java.util.Date#toGMTString() * @deprecated As of JDK version 1.1, - * replaced by DateFormat.format(Date date). + * replaced by {@code DateFormat.format(Date date)}. */ @Deprecated public String toLocaleString() { @@ -1084,23 +1081,23 @@ public class Date } /** - * Creates a string representation of this Date object of + * Creates a string representation of this {@code Date} object of * the form: *
              * d mon yyyy hh:mm:ss GMT
        * where:
          - *
        • d is the day of the month (1 through 31), + *
        • d is the day of the month ({@code 1} through {@code 31}), * as one or two decimal digits. - *
        • mon is the month (Jan, Feb, Mar, Apr, May, Jun, Jul, - * Aug, Sep, Oct, Nov, Dec). + *
        • mon is the month ({@code Jan, Feb, Mar, Apr, May, Jun, Jul, + * Aug, Sep, Oct, Nov, Dec}). *
        • yyyy is the year, as four decimal digits. - *
        • hh is the hour of the day (00 through 23), + *
        • hh is the hour of the day ({@code 00} through {@code 23}), * as two decimal digits. - *
        • mm is the minute within the hour (00 through - * 59), as two decimal digits. - *
        • ss is the second within the minute (00 through - * 61), as two decimal digits. - *
        • GMT is exactly the ASCII letters "GMT" to indicate + *
        • mm is the minute within the hour ({@code 00} through + * {@code 59}), as two decimal digits. + *
        • ss is the second within the minute ({@code 00} through + * {@code 61}), as two decimal digits. + *
        • GMT is exactly the ASCII letters "{@code GMT}" to indicate * Greenwich Mean Time. *

        * The result does not depend on the local time zone. @@ -1111,8 +1108,8 @@ public class Date * @see java.util.Date#toString() * @see java.util.Date#toLocaleString() * @deprecated As of JDK version 1.1, - * replaced by DateFormat.format(Date date), using a - * GMT TimeZone. + * replaced by {@code DateFormat.format(Date date)}, using a + * GMT {@code TimeZone}. */ @Deprecated public String toGMTString() { @@ -1135,7 +1132,7 @@ public class Date /** * Returns the offset, measured in minutes, for the local time zone * relative to UTC that is appropriate for the time represented by - * this Date object. + * this {@code Date} object. *

        * For example, in Massachusetts, five time zones west of Greenwich: *

        @@ -1161,8 +1158,8 @@ public class Date
              * @see     java.util.Calendar#DST_OFFSET
              * @see     java.util.TimeZone#getDefault
              * @deprecated As of JDK version 1.1,
        -     * replaced by -(Calendar.get(Calendar.ZONE_OFFSET) +
        -     * Calendar.get(Calendar.DST_OFFSET)) / (60 * 1000).
        +     * replaced by {@code -(Calendar.get(Calendar.ZONE_OFFSET) +
        +     * Calendar.get(Calendar.DST_OFFSET)) / (60 * 1000)}.
              */
             @Deprecated
             public int getTimezoneOffset() {
        @@ -1313,7 +1310,7 @@ public class Date
             /**
              * Save the state of this object to a stream (i.e., serialize it).
              *
        -     * @serialData The value returned by getTime()
        +     * @serialData The value returned by {@code getTime()}
              *             is emitted (long).  This represents the offset from
              *             January 1, 1970, 00:00:00 GMT in milliseconds.
              */
        @@ -1336,7 +1333,7 @@ public class Date
              * Obtains an instance of {@code Date} from an {@code Instant} object.
              * 

        * {@code Instant} uses a precision of nanoseconds, whereas {@code Date} - * uses a precision of milliseconds. The conversion will trancate any + * uses a precision of milliseconds. The conversion will truncate any * excess precision information as though the amount in nanoseconds was * subject to integer division by one million. *

        diff --git a/jdk/src/share/classes/java/util/concurrent/CopyOnWriteArrayList.java b/jdk/src/share/classes/java/util/concurrent/CopyOnWriteArrayList.java index fae67b2b2d0..162ad3b51d1 100644 --- a/jdk/src/share/classes/java/util/concurrent/CopyOnWriteArrayList.java +++ b/jdk/src/share/classes/java/util/concurrent/CopyOnWriteArrayList.java @@ -1400,7 +1400,7 @@ public class CopyOnWriteArrayList lock.lock(); try { checkForComodification(); - if (fromIndex < 0 || toIndex > size) + if (fromIndex < 0 || toIndex > size || fromIndex > toIndex) throw new IndexOutOfBoundsException(); return new COWSubList(l, fromIndex + offset, toIndex + offset); diff --git a/jdk/src/share/classes/java/util/jar/JarFile.java b/jdk/src/share/classes/java/util/jar/JarFile.java index 6e917e0ae26..946c4ae2bc2 100644 --- a/jdk/src/share/classes/java/util/jar/JarFile.java +++ b/jdk/src/share/classes/java/util/jar/JarFile.java @@ -40,6 +40,7 @@ import sun.misc.IOUtils; import sun.security.action.GetPropertyAction; import sun.security.util.ManifestEntryVerifier; import sun.misc.SharedSecrets; +import sun.security.util.SignatureFileVerifier; /** * The JarFile class is used to read the contents of a jar file @@ -364,11 +365,13 @@ class JarFile extends ZipFile { String[] names = getMetaInfEntryNames(); if (names != null) { for (String name : names) { - JarEntry e = getJarEntry(name); - if (e == null) { - throw new JarException("corrupted jar file"); - } - if (!e.isDirectory()) { + String uname = name.toUpperCase(Locale.ENGLISH); + if (MANIFEST_NAME.equals(uname) + || SignatureFileVerifier.isBlockOrSF(uname)) { + JarEntry e = getJarEntry(name); + if (e == null) { + throw new JarException("corrupted jar file"); + } if (mev == null) { mev = new ManifestEntryVerifier (getManifestFromReference()); diff --git a/jdk/src/share/classes/javax/accessibility/AccessibleRelationSet.java b/jdk/src/share/classes/javax/accessibility/AccessibleRelationSet.java index e1409089fb9..37f38aa8a40 100644 --- a/jdk/src/share/classes/javax/accessibility/AccessibleRelationSet.java +++ b/jdk/src/share/classes/javax/accessibility/AccessibleRelationSet.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -195,8 +195,7 @@ public class AccessibleRelationSet { } else { int len = relations.size(); for (int i = 0; i < len; i++) { - AccessibleRelation relation = - (AccessibleRelation)relations.elementAt(i); + AccessibleRelation relation = relations.elementAt(i); if (relation != null && relation.getKey().equals(key)) { return relation; } @@ -216,7 +215,7 @@ public class AccessibleRelationSet { AccessibleRelation[] relationArray = new AccessibleRelation[relations.size()]; for (int i = 0; i < relationArray.length; i++) { - relationArray[i] = (AccessibleRelation) relations.elementAt(i); + relationArray[i] = relations.elementAt(i); } return relationArray; } @@ -232,11 +231,10 @@ public class AccessibleRelationSet { public String toString() { String ret = ""; if ((relations != null) && (relations.size() > 0)) { - ret = ((AccessibleRelation) (relations.elementAt(0))).toDisplayString(); + ret = (relations.elementAt(0)).toDisplayString(); for (int i = 1; i < relations.size(); i++) { ret = ret + "," - + ((AccessibleRelation) (relations.elementAt(i))). - toDisplayString(); + + (relations.elementAt(i)).toDisplayString(); } } return ret; diff --git a/jdk/src/share/classes/javax/accessibility/AccessibleStateSet.java b/jdk/src/share/classes/javax/accessibility/AccessibleStateSet.java index 5d667b346e8..5eb4f05e3b9 100644 --- a/jdk/src/share/classes/javax/accessibility/AccessibleStateSet.java +++ b/jdk/src/share/classes/javax/accessibility/AccessibleStateSet.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -171,7 +171,7 @@ public class AccessibleStateSet { } else { AccessibleState[] stateArray = new AccessibleState[states.size()]; for (int i = 0; i < stateArray.length; i++) { - stateArray[i] = (AccessibleState) states.elementAt(i); + stateArray[i] = states.elementAt(i); } return stateArray; } @@ -187,11 +187,10 @@ public class AccessibleStateSet { public String toString() { String ret = null; if ((states != null) && (states.size() > 0)) { - ret = ((AccessibleState) (states.elementAt(0))).toDisplayString(); + ret = states.elementAt(0).toDisplayString(); for (int i = 1; i < states.size(); i++) { ret = ret + "," - + ((AccessibleState) (states.elementAt(i))). - toDisplayString(); + + states.elementAt(i).toDisplayString(); } } return ret; diff --git a/jdk/src/share/classes/javax/imageio/IIOException.java b/jdk/src/share/classes/javax/imageio/IIOException.java index 6a1c4d9ac5f..1b3cb8e6a96 100644 --- a/jdk/src/share/classes/javax/imageio/IIOException.java +++ b/jdk/src/share/classes/javax/imageio/IIOException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -40,6 +40,7 @@ import java.io.IOException; * */ public class IIOException extends IOException { + private static final long serialVersionUID = -3216210718638985251L; /** * Constructs an IIOException with a given message diff --git a/jdk/src/share/classes/javax/imageio/IIOParam.java b/jdk/src/share/classes/javax/imageio/IIOParam.java index 33bede6cdb6..ca73f6acbd9 100644 --- a/jdk/src/share/classes/javax/imageio/IIOParam.java +++ b/jdk/src/share/classes/javax/imageio/IIOParam.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -437,7 +437,7 @@ public abstract class IIOParam { } } - this.sourceBands = (int[])(sourceBands.clone()); + this.sourceBands = (sourceBands.clone()); } } @@ -460,7 +460,7 @@ public abstract class IIOParam { if (sourceBands == null) { return null; } - return (int[])(sourceBands.clone()); + return (sourceBands.clone()); } /** diff --git a/jdk/src/share/classes/javax/imageio/ImageIO.java b/jdk/src/share/classes/javax/imageio/ImageIO.java index e6345322301..1ad84b4a204 100644 --- a/jdk/src/share/classes/javax/imageio/ImageIO.java +++ b/jdk/src/share/classes/javax/imageio/ImageIO.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -169,7 +169,7 @@ public final class ImageIO { */ private static String getTempDir() { GetPropertyAction a = new GetPropertyAction("java.io.tmpdir"); - return (String)AccessController.doPrivileged(a); + return AccessController.doPrivileged(a); } /** diff --git a/jdk/src/share/classes/javax/imageio/ImageReadParam.java b/jdk/src/share/classes/javax/imageio/ImageReadParam.java index 6053348d100..4e9ac1e06a6 100644 --- a/jdk/src/share/classes/javax/imageio/ImageReadParam.java +++ b/jdk/src/share/classes/javax/imageio/ImageReadParam.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -294,7 +294,7 @@ public class ImageReadParam extends IIOParam { } } } - this.destinationBands = (int[])destinationBands.clone(); + this.destinationBands = destinationBands.clone(); } } @@ -312,7 +312,7 @@ public class ImageReadParam extends IIOParam { if (destinationBands == null) { return null; } else { - return (int[])(destinationBands.clone()); + return destinationBands.clone(); } } diff --git a/jdk/src/share/classes/javax/imageio/ImageReader.java b/jdk/src/share/classes/javax/imageio/ImageReader.java index b6b70216902..97dd57d3a13 100644 --- a/jdk/src/share/classes/javax/imageio/ImageReader.java +++ b/jdk/src/share/classes/javax/imageio/ImageReader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -457,7 +457,7 @@ public abstract class ImageReader { if (availableLocales == null) { return null; } else { - return (Locale[])availableLocales.clone(); + return availableLocales.clone(); } } @@ -678,7 +678,7 @@ public abstract class ImageReader { */ public ImageTypeSpecifier getRawImageType(int imageIndex) throws IOException { - return (ImageTypeSpecifier)getImageTypes(imageIndex).next(); + return getImageTypes(imageIndex).next(); } /** @@ -2012,7 +2012,7 @@ public abstract class ImageReader { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadProgressListener listener = - (IIOReadProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.sequenceStarted(this, minIndex); } } @@ -2030,7 +2030,7 @@ public abstract class ImageReader { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadProgressListener listener = - (IIOReadProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.sequenceComplete(this); } } @@ -2050,7 +2050,7 @@ public abstract class ImageReader { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadProgressListener listener = - (IIOReadProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.imageStarted(this, imageIndex); } } @@ -2071,7 +2071,7 @@ public abstract class ImageReader { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadProgressListener listener = - (IIOReadProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.imageProgress(this, percentageDone); } } @@ -2089,7 +2089,7 @@ public abstract class ImageReader { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadProgressListener listener = - (IIOReadProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.imageComplete(this); } } @@ -2112,7 +2112,7 @@ public abstract class ImageReader { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadProgressListener listener = - (IIOReadProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.thumbnailStarted(this, imageIndex, thumbnailIndex); } } @@ -2133,7 +2133,7 @@ public abstract class ImageReader { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadProgressListener listener = - (IIOReadProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.thumbnailProgress(this, percentageDone); } } @@ -2151,7 +2151,7 @@ public abstract class ImageReader { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadProgressListener listener = - (IIOReadProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.thumbnailComplete(this); } } @@ -2169,7 +2169,7 @@ public abstract class ImageReader { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadProgressListener listener = - (IIOReadProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.readAborted(this); } } @@ -2205,7 +2205,7 @@ public abstract class ImageReader { int numListeners = updateListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadUpdateListener listener = - (IIOReadUpdateListener)updateListeners.get(i); + updateListeners.get(i); listener.passStarted(this, theImage, pass, minPass, maxPass, @@ -2246,7 +2246,7 @@ public abstract class ImageReader { int numListeners = updateListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadUpdateListener listener = - (IIOReadUpdateListener)updateListeners.get(i); + updateListeners.get(i); listener.imageUpdate(this, theImage, minX, minY, @@ -2271,7 +2271,7 @@ public abstract class ImageReader { int numListeners = updateListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadUpdateListener listener = - (IIOReadUpdateListener)updateListeners.get(i); + updateListeners.get(i); listener.passComplete(this, theImage); } } @@ -2308,7 +2308,7 @@ public abstract class ImageReader { int numListeners = updateListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadUpdateListener listener = - (IIOReadUpdateListener)updateListeners.get(i); + updateListeners.get(i); listener.thumbnailPassStarted(this, theThumbnail, pass, minPass, maxPass, @@ -2350,7 +2350,7 @@ public abstract class ImageReader { int numListeners = updateListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadUpdateListener listener = - (IIOReadUpdateListener)updateListeners.get(i); + updateListeners.get(i); listener.thumbnailUpdate(this, theThumbnail, minX, minY, @@ -2376,7 +2376,7 @@ public abstract class ImageReader { int numListeners = updateListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadUpdateListener listener = - (IIOReadUpdateListener)updateListeners.get(i); + updateListeners.get(i); listener.thumbnailPassComplete(this, theThumbnail); } } @@ -2402,7 +2402,7 @@ public abstract class ImageReader { int numListeners = warningListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadWarningListener listener = - (IIOReadWarningListener)warningListeners.get(i); + warningListeners.get(i); listener.warningOccurred(this, warning); } @@ -2447,8 +2447,8 @@ public abstract class ImageReader { int numListeners = warningListeners.size(); for (int i = 0; i < numListeners; i++) { IIOReadWarningListener listener = - (IIOReadWarningListener)warningListeners.get(i); - Locale locale = (Locale)warningLocales.get(i); + warningListeners.get(i); + Locale locale = warningLocales.get(i); if (locale == null) { locale = Locale.getDefault(); } @@ -2864,7 +2864,7 @@ public abstract class ImageReader { boolean foundIt = false; while (imageTypes.hasNext()) { ImageTypeSpecifier type = - (ImageTypeSpecifier)imageTypes.next(); + imageTypes.next(); if (type.equals(imageType)) { foundIt = true; break; diff --git a/jdk/src/share/classes/javax/imageio/ImageTypeSpecifier.java b/jdk/src/share/classes/javax/imageio/ImageTypeSpecifier.java index c9c17dfe4c1..4c3295b5a4c 100644 --- a/jdk/src/share/classes/javax/imageio/ImageTypeSpecifier.java +++ b/jdk/src/share/classes/javax/imageio/ImageTypeSpecifier.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -296,7 +296,7 @@ public class ImageTypeSpecifier { ("Bad value for dataType!"); } this.colorSpace = colorSpace; - this.bandOffsets = (int[])bandOffsets.clone(); + this.bandOffsets = bandOffsets.clone(); this.dataType = dataType; this.hasAlpha = hasAlpha; this.isAlphaPremultiplied = isAlphaPremultiplied; @@ -449,8 +449,8 @@ public class ImageTypeSpecifier { } this.colorSpace = colorSpace; - this.bankIndices = (int[])bankIndices.clone(); - this.bandOffsets = (int[])bandOffsets.clone(); + this.bankIndices = bankIndices.clone(); + this.bandOffsets = bandOffsets.clone(); this.dataType = dataType; this.hasAlpha = hasAlpha; this.isAlphaPremultiplied = isAlphaPremultiplied; @@ -769,11 +769,11 @@ public class ImageTypeSpecifier { (alphaLUT != null && alphaLUT.length != len)) { throw new IllegalArgumentException("LUT has improper length!"); } - this.redLUT = (byte[])redLUT.clone(); - this.greenLUT = (byte[])greenLUT.clone(); - this.blueLUT = (byte[])blueLUT.clone(); + this.redLUT = redLUT.clone(); + this.greenLUT = greenLUT.clone(); + this.blueLUT = blueLUT.clone(); if (alphaLUT != null) { - this.alphaLUT = (byte[])alphaLUT.clone(); + this.alphaLUT = alphaLUT.clone(); } this.bits = bits; this.dataType = dataType; diff --git a/jdk/src/share/classes/javax/imageio/ImageWriteParam.java b/jdk/src/share/classes/javax/imageio/ImageWriteParam.java index f903dd6f917..1823b0eb672 100644 --- a/jdk/src/share/classes/javax/imageio/ImageWriteParam.java +++ b/jdk/src/share/classes/javax/imageio/ImageWriteParam.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -976,7 +976,7 @@ public class ImageWriteParam extends IIOParam { if (compressionTypes == null) { return null; } - return (String[])compressionTypes.clone(); + return compressionTypes.clone(); } /** diff --git a/jdk/src/share/classes/javax/imageio/ImageWriter.java b/jdk/src/share/classes/javax/imageio/ImageWriter.java index acb328d4215..78761150507 100644 --- a/jdk/src/share/classes/javax/imageio/ImageWriter.java +++ b/jdk/src/share/classes/javax/imageio/ImageWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -257,7 +257,7 @@ public abstract class ImageWriter implements ImageTranscoder { */ public Locale[] getAvailableLocales() { return (availableLocales == null) ? - null : (Locale[])availableLocales.clone(); + null : availableLocales.clone(); } /** @@ -1754,7 +1754,7 @@ public abstract class ImageWriter implements ImageTranscoder { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOWriteProgressListener listener = - (IIOWriteProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.imageStarted(this, imageIndex); } } @@ -1775,7 +1775,7 @@ public abstract class ImageWriter implements ImageTranscoder { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOWriteProgressListener listener = - (IIOWriteProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.imageProgress(this, percentageDone); } } @@ -1793,7 +1793,7 @@ public abstract class ImageWriter implements ImageTranscoder { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOWriteProgressListener listener = - (IIOWriteProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.imageComplete(this); } } @@ -1816,7 +1816,7 @@ public abstract class ImageWriter implements ImageTranscoder { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOWriteProgressListener listener = - (IIOWriteProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.thumbnailStarted(this, imageIndex, thumbnailIndex); } } @@ -1837,7 +1837,7 @@ public abstract class ImageWriter implements ImageTranscoder { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOWriteProgressListener listener = - (IIOWriteProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.thumbnailProgress(this, percentageDone); } } @@ -1855,7 +1855,7 @@ public abstract class ImageWriter implements ImageTranscoder { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOWriteProgressListener listener = - (IIOWriteProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.thumbnailComplete(this); } } @@ -1873,7 +1873,7 @@ public abstract class ImageWriter implements ImageTranscoder { int numListeners = progressListeners.size(); for (int i = 0; i < numListeners; i++) { IIOWriteProgressListener listener = - (IIOWriteProgressListener)progressListeners.get(i); + progressListeners.get(i); listener.writeAborted(this); } } @@ -1902,7 +1902,7 @@ public abstract class ImageWriter implements ImageTranscoder { int numListeners = warningListeners.size(); for (int i = 0; i < numListeners; i++) { IIOWriteWarningListener listener = - (IIOWriteWarningListener)warningListeners.get(i); + warningListeners.get(i); listener.warningOccurred(this, imageIndex, warning); } @@ -1950,8 +1950,8 @@ public abstract class ImageWriter implements ImageTranscoder { int numListeners = warningListeners.size(); for (int i = 0; i < numListeners; i++) { IIOWriteWarningListener listener = - (IIOWriteWarningListener)warningListeners.get(i); - Locale locale = (Locale)warningLocales.get(i); + warningListeners.get(i); + Locale locale = warningLocales.get(i); if (locale == null) { locale = Locale.getDefault(); } diff --git a/jdk/src/share/classes/javax/imageio/metadata/IIOInvalidTreeException.java b/jdk/src/share/classes/javax/imageio/metadata/IIOInvalidTreeException.java index 7f50cc80a85..9bec7c90eb4 100644 --- a/jdk/src/share/classes/javax/imageio/metadata/IIOInvalidTreeException.java +++ b/jdk/src/share/classes/javax/imageio/metadata/IIOInvalidTreeException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -44,6 +44,7 @@ import org.w3c.dom.Node; * */ public class IIOInvalidTreeException extends IIOException { + private static final long serialVersionUID = -1314083172544132777L; /** * The Node that led to the parsing error, or diff --git a/jdk/src/share/classes/javax/imageio/metadata/IIOMetadata.java b/jdk/src/share/classes/javax/imageio/metadata/IIOMetadata.java index 3040d64f7bd..c5f21249df6 100644 --- a/jdk/src/share/classes/javax/imageio/metadata/IIOMetadata.java +++ b/jdk/src/share/classes/javax/imageio/metadata/IIOMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -191,10 +191,8 @@ public abstract class IIOMetadata { throw new IllegalArgumentException ("extraMetadataFormatClassNames.length != extraMetadataFormatNames.length!"); } - this.extraMetadataFormatNames = - (String[]) extraMetadataFormatNames.clone(); - this.extraMetadataFormatClassNames = - (String[]) extraMetadataFormatClassNames.clone(); + this.extraMetadataFormatNames = extraMetadataFormatNames.clone(); + this.extraMetadataFormatClassNames = extraMetadataFormatClassNames.clone(); } else { if (extraMetadataFormatClassNames != null) { throw new IllegalArgumentException @@ -285,7 +283,7 @@ public abstract class IIOMetadata { if (extraMetadataFormatNames == null) { return null; } - return (String[])extraMetadataFormatNames.clone(); + return extraMetadataFormatNames.clone(); } /** diff --git a/jdk/src/share/classes/javax/imageio/metadata/IIOMetadataFormatImpl.java b/jdk/src/share/classes/javax/imageio/metadata/IIOMetadataFormatImpl.java index ef7caf3313e..a10de18ee94 100644 --- a/jdk/src/share/classes/javax/imageio/metadata/IIOMetadataFormatImpl.java +++ b/jdk/src/share/classes/javax/imageio/metadata/IIOMetadataFormatImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -1181,7 +1181,7 @@ public abstract class IIOMetadataFormatImpl implements IIOMetadataFormat { private ObjectValue getObjectValue(String elementName) { Element element = getElement(elementName); - ObjectValue objv = (ObjectValue)element.objectValue; + ObjectValue objv = element.objectValue; if (objv == null) { throw new IllegalArgumentException("No object within element " + elementName + "!"); @@ -1191,7 +1191,7 @@ public abstract class IIOMetadataFormatImpl implements IIOMetadataFormat { public int getObjectValueType(String elementName) { Element element = getElement(elementName); - ObjectValue objv = (ObjectValue)element.objectValue; + ObjectValue objv = element.objectValue; if (objv == null) { return VALUE_NONE; } diff --git a/jdk/src/share/classes/javax/imageio/metadata/IIOMetadataNode.java b/jdk/src/share/classes/javax/imageio/metadata/IIOMetadataNode.java index bb5833a0a2f..1f3fd25f131 100644 --- a/jdk/src/share/classes/javax/imageio/metadata/IIOMetadataNode.java +++ b/jdk/src/share/classes/javax/imageio/metadata/IIOMetadataNode.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,6 +41,7 @@ import org.w3c.dom.UserDataHandler; class IIODOMException extends DOMException { + private static final long serialVersionUID = -4369510142067447468L; public IIODOMException(short code, String message) { super(code, message); diff --git a/jdk/src/share/classes/javax/imageio/plugins/jpeg/JPEGImageReadParam.java b/jdk/src/share/classes/javax/imageio/plugins/jpeg/JPEGImageReadParam.java index 720aa600129..f12e1e6ec3e 100644 --- a/jdk/src/share/classes/javax/imageio/plugins/jpeg/JPEGImageReadParam.java +++ b/jdk/src/share/classes/javax/imageio/plugins/jpeg/JPEGImageReadParam.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -132,9 +132,9 @@ public class JPEGImageReadParam extends ImageReadParam { throw new IllegalArgumentException ("Invalid JPEG table arrays"); } - this.qTables = (JPEGQTable[])qTables.clone(); - this.DCHuffmanTables = (JPEGHuffmanTable[])DCHuffmanTables.clone(); - this.ACHuffmanTables = (JPEGHuffmanTable[])ACHuffmanTables.clone(); + this.qTables = qTables.clone(); + this.DCHuffmanTables = DCHuffmanTables.clone(); + this.ACHuffmanTables = ACHuffmanTables.clone(); } /** @@ -160,7 +160,7 @@ public class JPEGImageReadParam extends ImageReadParam { * @see #setDecodeTables */ public JPEGQTable[] getQTables() { - return (qTables != null) ? (JPEGQTable[])qTables.clone() : null; + return (qTables != null) ? qTables.clone() : null; } /** @@ -175,7 +175,7 @@ public class JPEGImageReadParam extends ImageReadParam { */ public JPEGHuffmanTable[] getDCHuffmanTables() { return (DCHuffmanTables != null) - ? (JPEGHuffmanTable[])DCHuffmanTables.clone() + ? DCHuffmanTables.clone() : null; } @@ -191,7 +191,7 @@ public class JPEGImageReadParam extends ImageReadParam { */ public JPEGHuffmanTable[] getACHuffmanTables() { return (ACHuffmanTables != null) - ? (JPEGHuffmanTable[])ACHuffmanTables.clone() + ? ACHuffmanTables.clone() : null; } } diff --git a/jdk/src/share/classes/javax/imageio/plugins/jpeg/JPEGImageWriteParam.java b/jdk/src/share/classes/javax/imageio/plugins/jpeg/JPEGImageWriteParam.java index b4df14e99c6..a445bf20a8a 100644 --- a/jdk/src/share/classes/javax/imageio/plugins/jpeg/JPEGImageWriteParam.java +++ b/jdk/src/share/classes/javax/imageio/plugins/jpeg/JPEGImageWriteParam.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -167,7 +167,7 @@ public class JPEGImageWriteParam extends ImageWriteParam { (getCompressionType() == null)) { throw new IllegalStateException("No compression type set!"); } - return (String[])qualityDescs.clone(); + return qualityDescs.clone(); } public float[] getCompressionQualityValues() { @@ -179,7 +179,7 @@ public class JPEGImageWriteParam extends ImageWriteParam { (getCompressionType() == null)) { throw new IllegalStateException("No compression type set!"); } - return (float[])qualityVals.clone(); + return qualityVals.clone(); } /** * Returns true if tables are currently set. @@ -222,9 +222,9 @@ public class JPEGImageWriteParam extends ImageWriteParam { (DCHuffmanTables.length != ACHuffmanTables.length)) { throw new IllegalArgumentException("Invalid JPEG table arrays"); } - this.qTables = (JPEGQTable[])qTables.clone(); - this.DCHuffmanTables = (JPEGHuffmanTable[])DCHuffmanTables.clone(); - this.ACHuffmanTables = (JPEGHuffmanTable[])ACHuffmanTables.clone(); + this.qTables = qTables.clone(); + this.DCHuffmanTables = DCHuffmanTables.clone(); + this.ACHuffmanTables = ACHuffmanTables.clone(); } /** @@ -250,7 +250,7 @@ public class JPEGImageWriteParam extends ImageWriteParam { * @see #setEncodeTables */ public JPEGQTable[] getQTables() { - return (qTables != null) ? (JPEGQTable[])qTables.clone() : null; + return (qTables != null) ? qTables.clone() : null; } /** @@ -265,7 +265,7 @@ public class JPEGImageWriteParam extends ImageWriteParam { */ public JPEGHuffmanTable[] getDCHuffmanTables() { return (DCHuffmanTables != null) - ? (JPEGHuffmanTable[])DCHuffmanTables.clone() + ? DCHuffmanTables.clone() : null; } @@ -281,7 +281,7 @@ public class JPEGImageWriteParam extends ImageWriteParam { */ public JPEGHuffmanTable[] getACHuffmanTables() { return (ACHuffmanTables != null) - ? (JPEGHuffmanTable[])ACHuffmanTables.clone() + ? ACHuffmanTables.clone() : null; } diff --git a/jdk/src/share/classes/javax/imageio/spi/DigraphNode.java b/jdk/src/share/classes/javax/imageio/spi/DigraphNode.java index 9473ced32fc..b133c29db9a 100644 --- a/jdk/src/share/classes/javax/imageio/spi/DigraphNode.java +++ b/jdk/src/share/classes/javax/imageio/spi/DigraphNode.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -40,6 +40,7 @@ import java.util.Set; * */ class DigraphNode implements Cloneable, Serializable { + private static final long serialVersionUID = 5308261378582246841L; /** The data associated with this node. */ protected Object data; diff --git a/jdk/src/share/classes/javax/imageio/spi/ImageReaderSpi.java b/jdk/src/share/classes/javax/imageio/spi/ImageReaderSpi.java index 36d08e6cfdb..9ce6de36c66 100644 --- a/jdk/src/share/classes/javax/imageio/spi/ImageReaderSpi.java +++ b/jdk/src/share/classes/javax/imageio/spi/ImageReaderSpi.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -237,7 +237,7 @@ public abstract class ImageReaderSpi extends ImageReaderWriterSpi { // If length == 0, leave it null if (writerSpiNames != null && writerSpiNames.length > 0) { - this.writerSpiNames = (String[])writerSpiNames.clone(); + this.writerSpiNames = writerSpiNames.clone(); } } @@ -255,7 +255,7 @@ public abstract class ImageReaderSpi extends ImageReaderWriterSpi { * Classobjects of length at least 1. */ public Class[] getInputTypes() { - return (Class[])inputTypes.clone(); + return inputTypes.clone(); } /** @@ -408,6 +408,6 @@ public abstract class ImageReaderSpi extends ImageReaderWriterSpi { */ public String[] getImageWriterSpiNames() { return writerSpiNames == null ? - null : (String[])writerSpiNames.clone(); + null : writerSpiNames.clone(); } } diff --git a/jdk/src/share/classes/javax/imageio/spi/ImageReaderWriterSpi.java b/jdk/src/share/classes/javax/imageio/spi/ImageReaderWriterSpi.java index 60c049d1eb4..4a5dd1416f4 100644 --- a/jdk/src/share/classes/javax/imageio/spi/ImageReaderWriterSpi.java +++ b/jdk/src/share/classes/javax/imageio/spi/ImageReaderWriterSpi.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -239,14 +239,14 @@ public abstract class ImageReaderWriterSpi extends IIOServiceProvider { throw new IllegalArgumentException("pluginClassName == null!"); } - this.names = (String[])names.clone(); + this.names = names.clone(); // If length == 0, leave it null if (suffixes != null && suffixes.length > 0) { - this.suffixes = (String[])suffixes.clone(); + this.suffixes = suffixes.clone(); } // If length == 0, leave it null if (MIMETypes != null && MIMETypes.length > 0) { - this.MIMETypes = (String[])MIMETypes.clone(); + this.MIMETypes = MIMETypes.clone(); } this.pluginClassName = pluginClassName; @@ -259,13 +259,13 @@ public abstract class ImageReaderWriterSpi extends IIOServiceProvider { if (extraStreamMetadataFormatNames != null && extraStreamMetadataFormatNames.length > 0) { this.extraStreamMetadataFormatNames = - (String[])extraStreamMetadataFormatNames.clone(); + extraStreamMetadataFormatNames.clone(); } // If length == 0, leave it null if (extraStreamMetadataFormatClassNames != null && extraStreamMetadataFormatClassNames.length > 0) { this.extraStreamMetadataFormatClassNames = - (String[])extraStreamMetadataFormatClassNames.clone(); + extraStreamMetadataFormatClassNames.clone(); } this.supportsStandardImageMetadataFormat = supportsStandardImageMetadataFormat; @@ -276,13 +276,13 @@ public abstract class ImageReaderWriterSpi extends IIOServiceProvider { if (extraImageMetadataFormatNames != null && extraImageMetadataFormatNames.length > 0) { this.extraImageMetadataFormatNames = - (String[])extraImageMetadataFormatNames.clone(); + extraImageMetadataFormatNames.clone(); } // If length == 0, leave it null if (extraImageMetadataFormatClassNames != null && extraImageMetadataFormatClassNames.length > 0) { this.extraImageMetadataFormatClassNames = - (String[])extraImageMetadataFormatClassNames.clone(); + extraImageMetadataFormatClassNames.clone(); } } @@ -308,7 +308,7 @@ public abstract class ImageReaderWriterSpi extends IIOServiceProvider { * associated with this reader or writer. */ public String[] getFormatNames() { - return (String[])names.clone(); + return names.clone(); } /** @@ -332,7 +332,7 @@ public abstract class ImageReaderWriterSpi extends IIOServiceProvider { * writer, or null. */ public String[] getFileSuffixes() { - return suffixes == null ? null : (String[])suffixes.clone(); + return suffixes == null ? null : suffixes.clone(); } /** @@ -367,7 +367,7 @@ public abstract class ImageReaderWriterSpi extends IIOServiceProvider { * null. */ public String[] getMIMETypes() { - return MIMETypes == null ? null : (String[])MIMETypes.clone(); + return MIMETypes == null ? null : MIMETypes.clone(); } /** @@ -443,7 +443,7 @@ public abstract class ImageReaderWriterSpi extends IIOServiceProvider { */ public String[] getExtraStreamMetadataFormatNames() { return extraStreamMetadataFormatNames == null ? - null : (String[])extraStreamMetadataFormatNames.clone(); + null : extraStreamMetadataFormatNames.clone(); } /** @@ -507,7 +507,7 @@ public abstract class ImageReaderWriterSpi extends IIOServiceProvider { */ public String[] getExtraImageMetadataFormatNames() { return extraImageMetadataFormatNames == null ? - null : (String[])extraImageMetadataFormatNames.clone(); + null : extraImageMetadataFormatNames.clone(); } /** diff --git a/jdk/src/share/classes/javax/imageio/spi/ImageWriterSpi.java b/jdk/src/share/classes/javax/imageio/spi/ImageWriterSpi.java index 7fc1a334a9f..19d17145452 100644 --- a/jdk/src/share/classes/javax/imageio/spi/ImageWriterSpi.java +++ b/jdk/src/share/classes/javax/imageio/spi/ImageWriterSpi.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -238,7 +238,7 @@ public abstract class ImageWriterSpi extends ImageReaderWriterSpi { // If length == 0, leave it null if (readerSpiNames != null && readerSpiNames.length > 0) { - this.readerSpiNames = (String[])readerSpiNames.clone(); + this.readerSpiNames = readerSpiNames.clone(); } } @@ -268,7 +268,7 @@ public abstract class ImageWriterSpi extends ImageReaderWriterSpi { * Classobjects of length at least 1. */ public Class[] getOutputTypes() { - return (Class[])outputTypes.clone(); + return outputTypes.clone(); } /** @@ -435,6 +435,6 @@ public abstract class ImageWriterSpi extends ImageReaderWriterSpi { */ public String[] getImageReaderSpiNames() { return readerSpiNames == null ? - null : (String[])readerSpiNames.clone(); + null : readerSpiNames.clone(); } } diff --git a/jdk/src/share/classes/javax/management/remote/JMXServiceURL.java b/jdk/src/share/classes/javax/management/remote/JMXServiceURL.java index 4b1c376eda1..4f9c36e9509 100644 --- a/jdk/src/share/classes/javax/management/remote/JMXServiceURL.java +++ b/jdk/src/share/classes/javax/management/remote/JMXServiceURL.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -344,7 +344,7 @@ public class JMXServiceURL implements Serializable { private void readObject(ObjectInputStream inputStream) throws IOException, ClassNotFoundException { ObjectInputStream.GetField gf = inputStream.readFields(); String h = (String)gf.get("host", null); - int p = (int)gf.get("port", -1); + int p = gf.get("port", -1); String proto = (String)gf.get("protocol", null); String url = (String)gf.get("urlPath", null); diff --git a/jdk/src/share/classes/javax/print/DocFlavor.java b/jdk/src/share/classes/javax/print/DocFlavor.java index 1d5464edb10..3c94623c222 100644 --- a/jdk/src/share/classes/javax/print/DocFlavor.java +++ b/jdk/src/share/classes/javax/print/DocFlavor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -460,7 +460,7 @@ public class DocFlavor implements Serializable, Cloneable { static { hostEncoding = - (String)java.security.AccessController.doPrivileged( + java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction("file.encoding")); } diff --git a/jdk/src/share/classes/javax/print/attribute/HashAttributeSet.java b/jdk/src/share/classes/javax/print/attribute/HashAttributeSet.java index f8d9aa99298..a1995014525 100644 --- a/jdk/src/share/classes/javax/print/attribute/HashAttributeSet.java +++ b/jdk/src/share/classes/javax/print/attribute/HashAttributeSet.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -382,7 +382,7 @@ public class HashAttributeSet implements AttributeSet, Serializable { return attribute != null && attribute instanceof Attribute && - attribute.equals(attrMap.get(((Attribute)attribute).getCategory())); + attribute.equals(attrMap.get(attribute.getCategory())); } /** diff --git a/jdk/src/share/classes/javax/print/attribute/standard/Compression.java b/jdk/src/share/classes/javax/print/attribute/standard/Compression.java index 5679a73f850..8dbbfaf8aa1 100644 --- a/jdk/src/share/classes/javax/print/attribute/standard/Compression.java +++ b/jdk/src/share/classes/javax/print/attribute/standard/Compression.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -94,7 +94,7 @@ public class Compression extends EnumSyntax implements DocAttribute { * Returns the string table for class Compression. */ protected String[] getStringTable() { - return (String[])myStringTable.clone(); + return myStringTable.clone(); } /** diff --git a/jdk/src/share/classes/javax/print/attribute/standard/Finishings.java b/jdk/src/share/classes/javax/print/attribute/standard/Finishings.java index 413bc7d1f47..cc21389cbaf 100644 --- a/jdk/src/share/classes/javax/print/attribute/standard/Finishings.java +++ b/jdk/src/share/classes/javax/print/attribute/standard/Finishings.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -430,7 +430,7 @@ public class Finishings extends EnumSyntax * Returns the string table for class Finishings. */ protected String[] getStringTable() { - return (String[])myStringTable.clone(); + return myStringTable.clone(); } /** diff --git a/jdk/src/share/classes/javax/print/attribute/standard/JobSheets.java b/jdk/src/share/classes/javax/print/attribute/standard/JobSheets.java index 7919000ad97..a9811135325 100644 --- a/jdk/src/share/classes/javax/print/attribute/standard/JobSheets.java +++ b/jdk/src/share/classes/javax/print/attribute/standard/JobSheets.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -94,7 +94,7 @@ public class JobSheets extends EnumSyntax * Returns the string table for class JobSheets. */ protected String[] getStringTable() { - return (String[])myStringTable.clone(); + return myStringTable.clone(); } /** diff --git a/jdk/src/share/classes/javax/print/attribute/standard/JobStateReason.java b/jdk/src/share/classes/javax/print/attribute/standard/JobStateReason.java index f835666d884..a3de1c5c9ff 100644 --- a/jdk/src/share/classes/javax/print/attribute/standard/JobStateReason.java +++ b/jdk/src/share/classes/javax/print/attribute/standard/JobStateReason.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -420,7 +420,7 @@ public class JobStateReason extends EnumSyntax implements Attribute { * Returns the string table for class JobStateReason. */ protected String[] getStringTable() { - return (String[])myStringTable.clone(); + return myStringTable.clone(); } /** diff --git a/jdk/src/share/classes/javax/print/attribute/standard/JobStateReasons.java b/jdk/src/share/classes/javax/print/attribute/standard/JobStateReasons.java index d9e225f621f..19ea46f2367 100644 --- a/jdk/src/share/classes/javax/print/attribute/standard/JobStateReasons.java +++ b/jdk/src/share/classes/javax/print/attribute/standard/JobStateReasons.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -149,7 +149,7 @@ public final class JobStateReasons if (o == null) { throw new NullPointerException(); } - return super.add ((JobStateReason) o); + return super.add(o); } /** diff --git a/jdk/src/share/classes/javax/print/attribute/standard/MediaName.java b/jdk/src/share/classes/javax/print/attribute/standard/MediaName.java index 78ae6a82d0a..28772c1ae83 100644 --- a/jdk/src/share/classes/javax/print/attribute/standard/MediaName.java +++ b/jdk/src/share/classes/javax/print/attribute/standard/MediaName.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -98,7 +98,7 @@ public class MediaName extends Media implements Attribute { */ protected String[] getStringTable() { - return (String[])myStringTable.clone(); + return myStringTable.clone(); } /** diff --git a/jdk/src/share/classes/javax/print/attribute/standard/MediaSizeName.java b/jdk/src/share/classes/javax/print/attribute/standard/MediaSizeName.java index 8dae36f9783..bbb266ba891 100644 --- a/jdk/src/share/classes/javax/print/attribute/standard/MediaSizeName.java +++ b/jdk/src/share/classes/javax/print/attribute/standard/MediaSizeName.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -550,7 +550,7 @@ public class MediaSizeName extends Media { */ protected String[] getStringTable() { - return (String[])myStringTable.clone(); + return myStringTable.clone(); } /** diff --git a/jdk/src/share/classes/javax/print/attribute/standard/MediaTray.java b/jdk/src/share/classes/javax/print/attribute/standard/MediaTray.java index 318a2e7c778..9a4da0a408e 100644 --- a/jdk/src/share/classes/javax/print/attribute/standard/MediaTray.java +++ b/jdk/src/share/classes/javax/print/attribute/standard/MediaTray.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -124,7 +124,7 @@ public class MediaTray extends Media implements Attribute { */ protected String[] getStringTable() { - return (String[])myStringTable.clone(); + return myStringTable.clone(); } /** diff --git a/jdk/src/share/classes/javax/print/attribute/standard/MultipleDocumentHandling.java b/jdk/src/share/classes/javax/print/attribute/standard/MultipleDocumentHandling.java index 0ddbbe5d296..c7f5f5e7664 100644 --- a/jdk/src/share/classes/javax/print/attribute/standard/MultipleDocumentHandling.java +++ b/jdk/src/share/classes/javax/print/attribute/standard/MultipleDocumentHandling.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -228,7 +228,7 @@ public class MultipleDocumentHandling extends EnumSyntax * Returns the string table for class MultipleDocumentHandling. */ protected String[] getStringTable() { - return (String[])myStringTable.clone(); + return myStringTable.clone(); } /** diff --git a/jdk/src/share/classes/javax/print/attribute/standard/PDLOverrideSupported.java b/jdk/src/share/classes/javax/print/attribute/standard/PDLOverrideSupported.java index a362da86656..8f1ce4eda9a 100644 --- a/jdk/src/share/classes/javax/print/attribute/standard/PDLOverrideSupported.java +++ b/jdk/src/share/classes/javax/print/attribute/standard/PDLOverrideSupported.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -88,7 +88,7 @@ public class PDLOverrideSupported extends EnumSyntax * Returns the string table for class PDLOverrideSupported. */ protected String[] getStringTable() { - return (String[])myStringTable.clone(); + return myStringTable.clone(); } /** diff --git a/jdk/src/share/classes/javax/print/attribute/standard/PrintQuality.java b/jdk/src/share/classes/javax/print/attribute/standard/PrintQuality.java index 3a644cff6c9..1ed3caf8254 100644 --- a/jdk/src/share/classes/javax/print/attribute/standard/PrintQuality.java +++ b/jdk/src/share/classes/javax/print/attribute/standard/PrintQuality.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -88,7 +88,7 @@ public class PrintQuality extends EnumSyntax * Returns the string table for class PrintQuality. */ protected String[] getStringTable() { - return (String[])myStringTable.clone(); + return myStringTable.clone(); } /** diff --git a/jdk/src/share/classes/javax/print/attribute/standard/PrinterStateReason.java b/jdk/src/share/classes/javax/print/attribute/standard/PrinterStateReason.java index b461a5d0dad..5c4f48f8853 100644 --- a/jdk/src/share/classes/javax/print/attribute/standard/PrinterStateReason.java +++ b/jdk/src/share/classes/javax/print/attribute/standard/PrinterStateReason.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -403,7 +403,7 @@ public class PrinterStateReason extends EnumSyntax implements Attribute { * Returns the string table for class PrinterStateReason. */ protected String[] getStringTable() { - return (String[])myStringTable.clone(); + return myStringTable.clone(); } /** diff --git a/jdk/src/share/classes/javax/sound/midi/MidiFileFormat.java b/jdk/src/share/classes/javax/sound/midi/MidiFileFormat.java index 1d4669a2458..0d496490dd0 100644 --- a/jdk/src/share/classes/javax/sound/midi/MidiFileFormat.java +++ b/jdk/src/share/classes/javax/sound/midi/MidiFileFormat.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -273,7 +273,7 @@ public class MidiFileFormat { } else { ret = (Map) (properties.clone()); } - return (Map) Collections.unmodifiableMap(ret); + return Collections.unmodifiableMap(ret); } diff --git a/jdk/src/share/classes/javax/sound/midi/MidiSystem.java b/jdk/src/share/classes/javax/sound/midi/MidiSystem.java index ac13aa58a86..d0eab92865e 100644 --- a/jdk/src/share/classes/javax/sound/midi/MidiSystem.java +++ b/jdk/src/share/classes/javax/sound/midi/MidiSystem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -472,7 +472,7 @@ public class MidiSystem { } catch (MidiUnavailableException e) { // something went wrong with synth if (e instanceof MidiUnavailableException) { - mue = (MidiUnavailableException) e; + mue = e; } } if (rec == null) { diff --git a/jdk/src/share/classes/javax/sound/midi/Sequence.java b/jdk/src/share/classes/javax/sound/midi/Sequence.java index 7fb0778beda..14cb66110ed 100644 --- a/jdk/src/share/classes/javax/sound/midi/Sequence.java +++ b/jdk/src/share/classes/javax/sound/midi/Sequence.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -284,7 +284,7 @@ public class Sequence { */ public Track[] getTracks() { - return (Track[]) tracks.toArray(new Track[tracks.size()]); + return tracks.toArray(new Track[tracks.size()]); } @@ -312,7 +312,7 @@ public class Sequence { synchronized(tracks) { for(int i=0; ilength ) { length = temp; } diff --git a/jdk/src/share/classes/javax/sound/sampled/AudioFileFormat.java b/jdk/src/share/classes/javax/sound/sampled/AudioFileFormat.java index 659399e616f..63f43dcc160 100644 --- a/jdk/src/share/classes/javax/sound/sampled/AudioFileFormat.java +++ b/jdk/src/share/classes/javax/sound/sampled/AudioFileFormat.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -251,7 +251,7 @@ public class AudioFileFormat { } else { ret = (Map) (properties.clone()); } - return (Map) Collections.unmodifiableMap(ret); + return Collections.unmodifiableMap(ret); } diff --git a/jdk/src/share/classes/javax/sound/sampled/AudioFormat.java b/jdk/src/share/classes/javax/sound/sampled/AudioFormat.java index 775331f6ba6..cd084fcd32d 100644 --- a/jdk/src/share/classes/javax/sound/sampled/AudioFormat.java +++ b/jdk/src/share/classes/javax/sound/sampled/AudioFormat.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -403,7 +403,7 @@ public class AudioFormat { } else { ret = (Map) (properties.clone()); } - return (Map) Collections.unmodifiableMap(ret); + return Collections.unmodifiableMap(ret); } diff --git a/jdk/src/share/classes/javax/sound/sampled/AudioSystem.java b/jdk/src/share/classes/javax/sound/sampled/AudioSystem.java index 97e7af39c7e..17c0f26d6fb 100644 --- a/jdk/src/share/classes/javax/sound/sampled/AudioSystem.java +++ b/jdk/src/share/classes/javax/sound/sampled/AudioSystem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -1609,8 +1609,7 @@ public class AudioSystem { Mixer.Info[] allInfos; // for all mixers for(int i = 0; i < providers.size(); i++ ) { - someInfos = (Mixer.Info[]) - ((MixerProvider)providers.get(i)).getMixerInfo(); + someInfos = ((MixerProvider)providers.get(i)).getMixerInfo(); for (int j = 0; j < someInfos.length; j++) { infos.add(someInfos[j]); diff --git a/jdk/src/share/classes/javax/swing/AbstractAction.java b/jdk/src/share/classes/javax/swing/AbstractAction.java index 5b49dd92c91..f8f15f4f992 100644 --- a/jdk/src/share/classes/javax/swing/AbstractAction.java +++ b/jdk/src/share/classes/javax/swing/AbstractAction.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -56,6 +56,7 @@ import sun.security.action.GetPropertyAction; * @author Georges Saab * @see Action */ +@SuppressWarnings("serial") // Same-version serialization only public abstract class AbstractAction implements Action, Cloneable, Serializable { /** diff --git a/jdk/src/share/classes/javax/swing/AbstractButton.java b/jdk/src/share/classes/javax/swing/AbstractButton.java index 6f75be948e9..f7eec138451 100644 --- a/jdk/src/share/classes/javax/swing/AbstractButton.java +++ b/jdk/src/share/classes/javax/swing/AbstractButton.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -72,6 +72,7 @@ import java.util.*; * * @author Jeff Dinkins */ +@SuppressWarnings("serial") // Same-version serialization only public abstract class AbstractButton extends JComponent implements ItemSelectable, SwingConstants { // ********************************* @@ -370,7 +371,7 @@ public abstract class AbstractButton extends JComponent implements ItemSelectabl model.setPressed(true); paintImmediately(new Rectangle(0,0, size.width, size.height)); try { - Thread.currentThread().sleep(pressTime); + Thread.sleep(pressTime); } catch(InterruptedException ie) { } model.setPressed(false); @@ -2384,6 +2385,7 @@ public abstract class AbstractButton extends JComponent implements ItemSelectabl * Please see {@link java.beans.XMLEncoder}. * @since 1.4 */ + @SuppressWarnings("serial") // Same-version serialization only protected abstract class AccessibleAbstractButton extends AccessibleJComponent implements AccessibleAction, AccessibleValue, AccessibleText, AccessibleExtendedComponent { diff --git a/jdk/src/share/classes/javax/swing/AbstractCellEditor.java b/jdk/src/share/classes/javax/swing/AbstractCellEditor.java index f9efea555dc..7523c64e85f 100644 --- a/jdk/src/share/classes/javax/swing/AbstractCellEditor.java +++ b/jdk/src/share/classes/javax/swing/AbstractCellEditor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -50,7 +50,7 @@ import java.io.Serializable; * @author Philip Milne * @since 1.3 */ - +@SuppressWarnings("serial") // Same-version serialization only public abstract class AbstractCellEditor implements CellEditor, Serializable { protected EventListenerList listenerList = new EventListenerList(); diff --git a/jdk/src/share/classes/javax/swing/AbstractListModel.java b/jdk/src/share/classes/javax/swing/AbstractListModel.java index 7270c8f222c..33145a51e8e 100644 --- a/jdk/src/share/classes/javax/swing/AbstractListModel.java +++ b/jdk/src/share/classes/javax/swing/AbstractListModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -46,6 +46,7 @@ import java.util.EventListener; * * @author Hans Muller */ +@SuppressWarnings("serial") // Same-version serialization only public abstract class AbstractListModel implements ListModel, Serializable { protected EventListenerList listenerList = new EventListenerList(); diff --git a/jdk/src/share/classes/javax/swing/CellRendererPane.java b/jdk/src/share/classes/javax/swing/CellRendererPane.java index 3e43b80d9ea..33539284e2d 100644 --- a/jdk/src/share/classes/javax/swing/CellRendererPane.java +++ b/jdk/src/share/classes/javax/swing/CellRendererPane.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -63,6 +63,7 @@ import javax.accessibility.*; * * @author Hans Muller */ +@SuppressWarnings("serial") // Same-version serialization only public class CellRendererPane extends Container implements Accessible { /** diff --git a/jdk/src/share/classes/javax/swing/DefaultBoundedRangeModel.java b/jdk/src/share/classes/javax/swing/DefaultBoundedRangeModel.java index fb250acbcda..8d316ce28ac 100644 --- a/jdk/src/share/classes/javax/swing/DefaultBoundedRangeModel.java +++ b/jdk/src/share/classes/javax/swing/DefaultBoundedRangeModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,6 +45,7 @@ import java.util.EventListener; * @author Hans Muller * @see BoundedRangeModel */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultBoundedRangeModel implements BoundedRangeModel, Serializable { /** diff --git a/jdk/src/share/classes/javax/swing/DefaultButtonModel.java b/jdk/src/share/classes/javax/swing/DefaultButtonModel.java index 7c0fa3d2181..2b0f150e42c 100644 --- a/jdk/src/share/classes/javax/swing/DefaultButtonModel.java +++ b/jdk/src/share/classes/javax/swing/DefaultButtonModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,6 +45,7 @@ import javax.swing.event.*; * * @author Jeff Dinkins */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultButtonModel implements ButtonModel, Serializable { /** The bitmask used to store the state of the button. */ diff --git a/jdk/src/share/classes/javax/swing/DefaultCellEditor.java b/jdk/src/share/classes/javax/swing/DefaultCellEditor.java index 60042a378ef..1eea9e1fb3f 100644 --- a/jdk/src/share/classes/javax/swing/DefaultCellEditor.java +++ b/jdk/src/share/classes/javax/swing/DefaultCellEditor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -50,7 +50,7 @@ import java.io.Serializable; * @author Alan Chung * @author Philip Milne */ - +@SuppressWarnings("serial") // Same-version serialization only public class DefaultCellEditor extends AbstractCellEditor implements TableCellEditor, TreeCellEditor { diff --git a/jdk/src/share/classes/javax/swing/DefaultDesktopManager.java b/jdk/src/share/classes/javax/swing/DefaultDesktopManager.java index 806ec342172..ed62d77b97c 100644 --- a/jdk/src/share/classes/javax/swing/DefaultDesktopManager.java +++ b/jdk/src/share/classes/javax/swing/DefaultDesktopManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -185,8 +185,8 @@ public class DefaultDesktopManager implements DesktopManager, java.io.Serializab if (c instanceof JLayeredPane) { JLayeredPane lp = (JLayeredPane)c; - int layer = lp.getLayer(f); - lp.putLayer(desktopIcon, layer); + int layer = JLayeredPane.getLayer(f); + JLayeredPane.putLayer(desktopIcon, layer); } // If we are maximized we already have the normal bounds recorded diff --git a/jdk/src/share/classes/javax/swing/DefaultListCellRenderer.java b/jdk/src/share/classes/javax/swing/DefaultListCellRenderer.java index 4d7a64909e1..e4968364cc0 100644 --- a/jdk/src/share/classes/javax/swing/DefaultListCellRenderer.java +++ b/jdk/src/share/classes/javax/swing/DefaultListCellRenderer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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,6 +70,7 @@ import sun.swing.DefaultLookup; * @author Philip Milne * @author Hans Muller */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultListCellRenderer extends JLabel implements ListCellRenderer, Serializable { @@ -341,6 +342,7 @@ public class DefaultListCellRenderer extends JLabel * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class UIResource extends DefaultListCellRenderer implements javax.swing.plaf.UIResource { diff --git a/jdk/src/share/classes/javax/swing/DefaultListModel.java b/jdk/src/share/classes/javax/swing/DefaultListModel.java index 33efc4abe32..063c18e2716 100644 --- a/jdk/src/share/classes/javax/swing/DefaultListModel.java +++ b/jdk/src/share/classes/javax/swing/DefaultListModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -52,6 +52,7 @@ import javax.swing.event.*; * * @author Hans Muller */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultListModel extends AbstractListModel { private Vector delegate = new Vector(); diff --git a/jdk/src/share/classes/javax/swing/DefaultListSelectionModel.java b/jdk/src/share/classes/javax/swing/DefaultListSelectionModel.java index 388a5a59a81..f7b00bee086 100644 --- a/jdk/src/share/classes/javax/swing/DefaultListSelectionModel.java +++ b/jdk/src/share/classes/javax/swing/DefaultListSelectionModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -49,7 +49,7 @@ import javax.swing.event.*; * @author Hans Muller * @see ListSelectionModel */ - +@SuppressWarnings("serial") // Same-version serialization only public class DefaultListSelectionModel implements ListSelectionModel, Cloneable, Serializable { private static final int MIN = -1; diff --git a/jdk/src/share/classes/javax/swing/DefaultSingleSelectionModel.java b/jdk/src/share/classes/javax/swing/DefaultSingleSelectionModel.java index 1d5ad7ccac0..d5e5ab81e1d 100644 --- a/jdk/src/share/classes/javax/swing/DefaultSingleSelectionModel.java +++ b/jdk/src/share/classes/javax/swing/DefaultSingleSelectionModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -43,6 +43,7 @@ import java.util.EventListener; * * @author Dave Moore */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultSingleSelectionModel implements SingleSelectionModel, Serializable { /* Only one ModelChangeEvent is needed per model instance since the diff --git a/jdk/src/share/classes/javax/swing/ImageIcon.java b/jdk/src/share/classes/javax/swing/ImageIcon.java index b744d5aa5c5..e286e936f11 100644 --- a/jdk/src/share/classes/javax/swing/ImageIcon.java +++ b/jdk/src/share/classes/javax/swing/ImageIcon.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -66,6 +66,7 @@ import java.security.*; * @author Jeff Dinkins * @author Lynn Monsanto */ +@SuppressWarnings("serial") // Same-version serialization only public class ImageIcon implements Icon, Serializable, Accessible { /* Keep references to the filename and location so that * alternate persistence schemes have the option to archive @@ -572,6 +573,7 @@ public class ImageIcon implements Icon, Serializable, Accessible { * Please see {@link java.beans.XMLEncoder}. * @since 1.3 */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleImageIcon extends AccessibleContext implements AccessibleIcon, Serializable { diff --git a/jdk/src/share/classes/javax/swing/JApplet.java b/jdk/src/share/classes/javax/swing/JApplet.java index a97b3e96d75..539458979d4 100644 --- a/jdk/src/share/classes/javax/swing/JApplet.java +++ b/jdk/src/share/classes/javax/swing/JApplet.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -90,6 +90,7 @@ import javax.accessibility.*; * * @author Arnaud Weber */ +@SuppressWarnings("serial") // Same-version serialization only public class JApplet extends Applet implements Accessible, RootPaneContainer, TransferHandler.HasGetTransferHandler diff --git a/jdk/src/share/classes/javax/swing/JCheckBox.java b/jdk/src/share/classes/javax/swing/JCheckBox.java index 8fdbd17fa04..53502645c72 100644 --- a/jdk/src/share/classes/javax/swing/JCheckBox.java +++ b/jdk/src/share/classes/javax/swing/JCheckBox.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -75,6 +75,7 @@ import java.io.IOException; * * @author Jeff Dinkins */ +@SuppressWarnings("serial") // Same-version serialization only public class JCheckBox extends JToggleButton implements Accessible { /** Identifies a change to the flat property. */ @@ -334,6 +335,7 @@ public class JCheckBox extends JToggleButton implements Accessible { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJCheckBox extends AccessibleJToggleButton { /** diff --git a/jdk/src/share/classes/javax/swing/JCheckBoxMenuItem.java b/jdk/src/share/classes/javax/swing/JCheckBoxMenuItem.java index 3d924d38536..08eb53864c4 100644 --- a/jdk/src/share/classes/javax/swing/JCheckBoxMenuItem.java +++ b/jdk/src/share/classes/javax/swing/JCheckBoxMenuItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -88,6 +88,7 @@ import javax.accessibility.*; * @author Georges Saab * @author David Karlton */ +@SuppressWarnings("serial") // Same-version serialization only public class JCheckBoxMenuItem extends JMenuItem implements SwingConstants, Accessible { @@ -293,6 +294,7 @@ public class JCheckBoxMenuItem extends JMenuItem implements SwingConstants, * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJCheckBoxMenuItem extends AccessibleJMenuItem { /** * Get the role of this object. diff --git a/jdk/src/share/classes/javax/swing/JColorChooser.java b/jdk/src/share/classes/javax/swing/JColorChooser.java index 9fb2a35a778..88f91c00ca7 100644 --- a/jdk/src/share/classes/javax/swing/JColorChooser.java +++ b/jdk/src/share/classes/javax/swing/JColorChooser.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -83,6 +83,7 @@ import sun.swing.SwingUtilities2; * @author Amy Fowler * @author Steve Wilson */ +@SuppressWarnings("serial") // Same-version serialization only public class JColorChooser extends JComponent implements Accessible { /** diff --git a/jdk/src/share/classes/javax/swing/JComboBox.java b/jdk/src/share/classes/javax/swing/JComboBox.java index 11081f959df..6416f5036a8 100644 --- a/jdk/src/share/classes/javax/swing/JComboBox.java +++ b/jdk/src/share/classes/javax/swing/JComboBox.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -78,6 +78,7 @@ import javax.accessibility.*; * @author Arnaud Weber * @author Mark Davidson */ +@SuppressWarnings("serial") // Same-version serialization only public class JComboBox extends JComponent implements ItemSelectable,ListDataListener,ActionListener, Accessible { /** @@ -1612,6 +1613,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJComboBox extends AccessibleJComponent implements AccessibleAction, AccessibleSelection { diff --git a/jdk/src/share/classes/javax/swing/JComponent.java b/jdk/src/share/classes/javax/swing/JComponent.java index d6f35ac3fea..98c4d7fb5dd 100644 --- a/jdk/src/share/classes/javax/swing/JComponent.java +++ b/jdk/src/share/classes/javax/swing/JComponent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -179,6 +179,7 @@ import sun.swing.UIClientPropertyKey; * @author Hans Muller * @author Arnaud Weber */ +@SuppressWarnings("serial") // Same-version serialization only public abstract class JComponent extends Container implements Serializable, TransferHandler.HasGetTransferHandler { @@ -3657,6 +3658,7 @@ public abstract class JComponent extends Container implements Serializable, * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public abstract class AccessibleJComponent extends AccessibleAWTContainer implements AccessibleExtendedComponent { diff --git a/jdk/src/share/classes/javax/swing/JDesktopPane.java b/jdk/src/share/classes/javax/swing/JDesktopPane.java index 6ba0bc82bf2..94f7db248e1 100644 --- a/jdk/src/share/classes/javax/swing/JDesktopPane.java +++ b/jdk/src/share/classes/javax/swing/JDesktopPane.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -86,6 +86,7 @@ import java.util.TreeSet; * * @author David Kloba */ +@SuppressWarnings("serial") // Same-version serialization only public class JDesktopPane extends JLayeredPane implements Accessible { /** @@ -616,6 +617,7 @@ public class JDesktopPane extends JLayeredPane implements Accessible * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJDesktopPane extends AccessibleJComponent { /** diff --git a/jdk/src/share/classes/javax/swing/JDialog.java b/jdk/src/share/classes/javax/swing/JDialog.java index 2d8980e3056..12b978dbf46 100644 --- a/jdk/src/share/classes/javax/swing/JDialog.java +++ b/jdk/src/share/classes/javax/swing/JDialog.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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,6 +95,7 @@ import javax.accessibility.*; * @author James Gosling * @author Scott Violet */ +@SuppressWarnings("serial") // Same-version serialization only public class JDialog extends Dialog implements WindowConstants, Accessible, RootPaneContainer, diff --git a/jdk/src/share/classes/javax/swing/JEditorPane.java b/jdk/src/share/classes/javax/swing/JEditorPane.java index cbb888c3a88..c1382125237 100644 --- a/jdk/src/share/classes/javax/swing/JEditorPane.java +++ b/jdk/src/share/classes/javax/swing/JEditorPane.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -189,6 +189,7 @@ import javax.accessibility.*; * * @author Timothy Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public class JEditorPane extends JTextComponent { /** @@ -1640,6 +1641,7 @@ public class JEditorPane extends JTextComponent { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJEditorPane extends AccessibleJTextComponent { /** @@ -1694,6 +1696,7 @@ public class JEditorPane extends JTextComponent { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJEditorPaneHTML extends AccessibleJEditorPane { private AccessibleContext accessibleContext; diff --git a/jdk/src/share/classes/javax/swing/JFormattedTextField.java b/jdk/src/share/classes/javax/swing/JFormattedTextField.java index 36e637727ea..5be75ff295a 100644 --- a/jdk/src/share/classes/javax/swing/JFormattedTextField.java +++ b/jdk/src/share/classes/javax/swing/JFormattedTextField.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -177,6 +177,7 @@ import javax.swing.text.*; * * @since 1.4 */ +@SuppressWarnings("serial") // Same-version serialization only public class JFormattedTextField extends JTextField { private static final String uiClassID = "FormattedTextFieldUI"; private static final Action[] defaultActions = @@ -651,7 +652,7 @@ public class JFormattedTextField extends JTextField { JFormattedTextField.this.setValue( JFormattedTextField.this.getValue(), true, true); } catch (ParseException pe) { - if (fb == JFormattedTextField.this.COMMIT_OR_REVERT) { + if (fb == JFormattedTextField.COMMIT_OR_REVERT) { JFormattedTextField.this.setValue( JFormattedTextField.this.getValue(), true, true); } diff --git a/jdk/src/share/classes/javax/swing/JFrame.java b/jdk/src/share/classes/javax/swing/JFrame.java index 308320c8ecc..2077eb76249 100644 --- a/jdk/src/share/classes/javax/swing/JFrame.java +++ b/jdk/src/share/classes/javax/swing/JFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -112,6 +112,7 @@ import javax.accessibility.*; * @author Georges Saab * @author David Kloba */ +@SuppressWarnings("serial") // Same-version serialization only public class JFrame extends Frame implements WindowConstants, Accessible, RootPaneContainer, diff --git a/jdk/src/share/classes/javax/swing/JInternalFrame.java b/jdk/src/share/classes/javax/swing/JInternalFrame.java index 3183d5c4e90..e94854f9f12 100644 --- a/jdk/src/share/classes/javax/swing/JInternalFrame.java +++ b/jdk/src/share/classes/javax/swing/JInternalFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -110,6 +110,7 @@ import sun.swing.SwingUtilities2; * description: A frame container which is contained within * another window. */ +@SuppressWarnings("serial") // Same-version serialization only public class JInternalFrame extends JComponent implements Accessible, WindowConstants, RootPaneContainer @@ -2034,6 +2035,7 @@ public class JInternalFrame extends JComponent implements * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJInternalFrame extends AccessibleJComponent implements AccessibleValue { @@ -2151,6 +2153,7 @@ public class JInternalFrame extends JComponent implements * * @author David Kloba */ + @SuppressWarnings("serial") // Same-version serialization only static public class JDesktopIcon extends JComponent implements Accessible { JInternalFrame internalFrame; @@ -2323,6 +2326,7 @@ public class JInternalFrame extends JComponent implements * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJDesktopIcon extends AccessibleJComponent implements AccessibleValue { diff --git a/jdk/src/share/classes/javax/swing/JLabel.java b/jdk/src/share/classes/javax/swing/JLabel.java index c5d527b808d..af080be9564 100644 --- a/jdk/src/share/classes/javax/swing/JLabel.java +++ b/jdk/src/share/classes/javax/swing/JLabel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 diff --git a/jdk/src/share/classes/javax/swing/JList.java b/jdk/src/share/classes/javax/swing/JList.java index 1aae62e861f..6503887247e 100644 --- a/jdk/src/share/classes/javax/swing/JList.java +++ b/jdk/src/share/classes/javax/swing/JList.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -277,6 +277,7 @@ import static sun.swing.SwingUtilities2.Section.*; * * @author Hans Muller */ +@SuppressWarnings("serial") // Same-version serialization only public class JList extends JComponent implements Scrollable, Accessible { /** @@ -2881,6 +2882,7 @@ public class JList extends JComponent implements Scrollable, Accessible * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJList extends AccessibleJComponent implements AccessibleSelection, PropertyChangeListener, ListSelectionListener, ListDataListener { diff --git a/jdk/src/share/classes/javax/swing/JOptionPane.java b/jdk/src/share/classes/javax/swing/JOptionPane.java index dcb991947e1..58d38669e9c 100644 --- a/jdk/src/share/classes/javax/swing/JOptionPane.java +++ b/jdk/src/share/classes/javax/swing/JOptionPane.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -310,6 +310,7 @@ import static javax.swing.ClientPropertyKey.PopupFactory_FORCE_HEAVYWEIGHT_POPUP * @author James Gosling * @author Scott Violet */ +@SuppressWarnings("serial") // Same-version serialization only public class JOptionPane extends JComponent implements Accessible { /** @@ -2576,6 +2577,7 @@ public class JOptionPane extends JComponent implements Accessible * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJOptionPane extends AccessibleJComponent { /** diff --git a/jdk/src/share/classes/javax/swing/JPanel.java b/jdk/src/share/classes/javax/swing/JPanel.java index 8ebfcb1cbfb..6211c8bcd29 100644 --- a/jdk/src/share/classes/javax/swing/JPanel.java +++ b/jdk/src/share/classes/javax/swing/JPanel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -62,6 +62,7 @@ import java.io.IOException; * @author Arnaud Weber * @author Steve Wilson */ +@SuppressWarnings("serial") // Same-version serialization only public class JPanel extends JComponent implements Accessible { /** @@ -233,6 +234,7 @@ public class JPanel extends JComponent implements Accessible * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJPanel extends AccessibleJComponent { /** diff --git a/jdk/src/share/classes/javax/swing/JPasswordField.java b/jdk/src/share/classes/javax/swing/JPasswordField.java index 05a113b2ca4..a869d80c1f0 100644 --- a/jdk/src/share/classes/javax/swing/JPasswordField.java +++ b/jdk/src/share/classes/javax/swing/JPasswordField.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -74,6 +74,7 @@ import java.util.Arrays; * * @author Timothy Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public class JPasswordField extends JTextField { /** diff --git a/jdk/src/share/classes/javax/swing/JProgressBar.java b/jdk/src/share/classes/javax/swing/JProgressBar.java index 606ff13c2ca..b839018b1fd 100644 --- a/jdk/src/share/classes/javax/swing/JProgressBar.java +++ b/jdk/src/share/classes/javax/swing/JProgressBar.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -129,6 +129,7 @@ import javax.swing.plaf.ProgressBarUI; * @author Michael C. Albers * @author Kathy Walrath */ +@SuppressWarnings("serial") // Same-version serialization only public class JProgressBar extends JComponent implements SwingConstants, Accessible { /** @@ -647,6 +648,7 @@ public class JProgressBar extends JComponent implements SwingConstants, Accessib * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only private class ModelListener implements ChangeListener, Serializable { public void stateChanged(ChangeEvent e) { fireStateChanged(); @@ -1035,6 +1037,7 @@ public class JProgressBar extends JComponent implements SwingConstants, Accessib * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJProgressBar extends AccessibleJComponent implements AccessibleValue { diff --git a/jdk/src/share/classes/javax/swing/JRadioButton.java b/jdk/src/share/classes/javax/swing/JRadioButton.java index ad7a3abf8b9..41197072266 100644 --- a/jdk/src/share/classes/javax/swing/JRadioButton.java +++ b/jdk/src/share/classes/javax/swing/JRadioButton.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -86,6 +86,7 @@ import java.io.IOException; * @see JCheckBox * @author Jeff Dinkins */ +@SuppressWarnings("serial") // Same-version serialization only public class JRadioButton extends JToggleButton implements Accessible { /** @@ -284,6 +285,7 @@ public class JRadioButton extends JToggleButton implements Accessible { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJRadioButton extends AccessibleJToggleButton { /** diff --git a/jdk/src/share/classes/javax/swing/JRadioButtonMenuItem.java b/jdk/src/share/classes/javax/swing/JRadioButtonMenuItem.java index 897ba97c760..5d49c6f464f 100644 --- a/jdk/src/share/classes/javax/swing/JRadioButtonMenuItem.java +++ b/jdk/src/share/classes/javax/swing/JRadioButtonMenuItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -83,6 +83,7 @@ import javax.accessibility.*; * @author David Karlton * @see ButtonGroup */ +@SuppressWarnings("serial") // Same-version serialization only public class JRadioButtonMenuItem extends JMenuItem implements Accessible { /** * @see #getUIClassID @@ -266,6 +267,7 @@ public class JRadioButtonMenuItem extends JMenuItem implements Accessible { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJRadioButtonMenuItem extends AccessibleJMenuItem { /** * Get the role of this object. diff --git a/jdk/src/share/classes/javax/swing/JScrollBar.java b/jdk/src/share/classes/javax/swing/JScrollBar.java index 1c0eac1af7f..bdcee342e1f 100644 --- a/jdk/src/share/classes/javax/swing/JScrollBar.java +++ b/jdk/src/share/classes/javax/swing/JScrollBar.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -78,6 +78,7 @@ import java.io.IOException; * * @author David Kloba */ +@SuppressWarnings("serial") // Same-version serialization only public class JScrollBar extends JComponent implements Adjustable, Accessible { /** @@ -842,6 +843,7 @@ public class JScrollBar extends JComponent implements Adjustable, Accessible * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJScrollBar extends AccessibleJComponent implements AccessibleValue { diff --git a/jdk/src/share/classes/javax/swing/JScrollPane.java b/jdk/src/share/classes/javax/swing/JScrollPane.java index ecb3d8f34d9..444a1c22526 100644 --- a/jdk/src/share/classes/javax/swing/JScrollPane.java +++ b/jdk/src/share/classes/javax/swing/JScrollPane.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -168,6 +168,7 @@ import java.beans.Transient; * * @author Hans Muller */ +@SuppressWarnings("serial") // Same-version serialization only public class JScrollPane extends JComponent implements ScrollPaneConstants, Accessible { private Border viewportBorder; @@ -685,6 +686,7 @@ public class JScrollPane extends JComponent implements ScrollPaneConstants, Acce * @see JScrollPane#createVerticalScrollBar * @see JScrollPane#createHorizontalScrollBar */ + @SuppressWarnings("serial") // Same-version serialization only protected class ScrollBar extends JScrollBar implements UIResource { /** @@ -1441,6 +1443,7 @@ public class JScrollPane extends JComponent implements ScrollPaneConstants, Acce * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJScrollPane extends AccessibleJComponent implements ChangeListener, PropertyChangeListener { diff --git a/jdk/src/share/classes/javax/swing/JSlider.java b/jdk/src/share/classes/javax/swing/JSlider.java index 88fe7129b2b..d75e1030634 100644 --- a/jdk/src/share/classes/javax/swing/JSlider.java +++ b/jdk/src/share/classes/javax/swing/JSlider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -78,6 +78,7 @@ import java.beans.*; * * @author David Kloba */ +@SuppressWarnings("serial") // Same-version serialization only public class JSlider extends JComponent implements SwingConstants, Accessible { /** * @see #getUIClassID @@ -1429,6 +1430,7 @@ public class JSlider extends JComponent implements SwingConstants, Accessible { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJSlider extends AccessibleJComponent implements AccessibleValue { diff --git a/jdk/src/share/classes/javax/swing/JSpinner.java b/jdk/src/share/classes/javax/swing/JSpinner.java index d2dac526518..f999fd3f987 100644 --- a/jdk/src/share/classes/javax/swing/JSpinner.java +++ b/jdk/src/share/classes/javax/swing/JSpinner.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -126,6 +126,7 @@ import sun.util.locale.provider.LocaleServiceProviderPool; * @author Lynn Monsanto (accessibility) * @since 1.4 */ +@SuppressWarnings("serial") // Same-version serialization only public class JSpinner extends JComponent implements Accessible { /** diff --git a/jdk/src/share/classes/javax/swing/JSplitPane.java b/jdk/src/share/classes/javax/swing/JSplitPane.java index d403dde928c..533d9a971af 100644 --- a/jdk/src/share/classes/javax/swing/JSplitPane.java +++ b/jdk/src/share/classes/javax/swing/JSplitPane.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -98,6 +98,7 @@ import java.io.IOException; * * @author Scott Violet */ +@SuppressWarnings("serial") // Same-version serialization only public class JSplitPane extends JComponent implements Accessible { /** @@ -1156,6 +1157,7 @@ public class JSplitPane extends JComponent implements Accessible * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJSplitPane extends AccessibleJComponent implements AccessibleValue { /** diff --git a/jdk/src/share/classes/javax/swing/JTabbedPane.java b/jdk/src/share/classes/javax/swing/JTabbedPane.java index e6c0951bdae..e5c303489c6 100644 --- a/jdk/src/share/classes/javax/swing/JTabbedPane.java +++ b/jdk/src/share/classes/javax/swing/JTabbedPane.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -106,6 +106,7 @@ import java.io.IOException; * * @see SingleSelectionModel */ +@SuppressWarnings("serial") // Same-version serialization only public class JTabbedPane extends JComponent implements Serializable, Accessible, SwingConstants { @@ -1889,6 +1890,7 @@ public class JTabbedPane extends JComponent * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJTabbedPane extends AccessibleJComponent implements AccessibleSelection, ChangeListener { diff --git a/jdk/src/share/classes/javax/swing/JTable.java b/jdk/src/share/classes/javax/swing/JTable.java index 526afcf66bf..f16888c8f8b 100644 --- a/jdk/src/share/classes/javax/swing/JTable.java +++ b/jdk/src/share/classes/javax/swing/JTable.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -218,6 +218,7 @@ import sun.swing.SwingLazyValue; /* The first versions of the JTable, contained in Swing-0.1 through * Swing-0.4, were written by Alan Chung. */ +@SuppressWarnings("serial") // Same-version serialization only public class JTable extends JComponent implements TableModelListener, Scrollable, TableColumnModelListener, ListSelectionListener, CellEditorListener, Accessible, RowSorterListener @@ -6583,6 +6584,7 @@ public class JTable extends JComponent implements TableModelListener, Scrollable * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJTable extends AccessibleJComponent implements AccessibleSelection, ListSelectionListener, TableModelListener, TableColumnModelListener, CellEditorListener, PropertyChangeListener, diff --git a/jdk/src/share/classes/javax/swing/JTextArea.java b/jdk/src/share/classes/javax/swing/JTextArea.java index 570819f9df9..a6af9e241fa 100644 --- a/jdk/src/share/classes/javax/swing/JTextArea.java +++ b/jdk/src/share/classes/javax/swing/JTextArea.java @@ -124,6 +124,7 @@ import java.io.IOException; * @see JTextPane * @see JEditorPane */ +@SuppressWarnings("serial") // Same-version serialization only public class JTextArea extends JTextComponent { /** @@ -787,6 +788,7 @@ public class JTextArea extends JTextComponent { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJTextArea extends AccessibleJTextComponent { /** diff --git a/jdk/src/share/classes/javax/swing/JTextField.java b/jdk/src/share/classes/javax/swing/JTextField.java index d4bc1aa0f6b..f50f6aa9be9 100644 --- a/jdk/src/share/classes/javax/swing/JTextField.java +++ b/jdk/src/share/classes/javax/swing/JTextField.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -161,6 +161,7 @@ import java.io.Serializable; * @see JPasswordField * @see #addActionListener */ +@SuppressWarnings("serial") // Same-version serialization only public class JTextField extends JTextComponent implements SwingConstants { /** @@ -943,6 +944,7 @@ public class JTextField extends JTextComponent implements SwingConstants { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJTextField extends AccessibleJTextComponent { /** diff --git a/jdk/src/share/classes/javax/swing/JTextPane.java b/jdk/src/share/classes/javax/swing/JTextPane.java index 0cb9ff8d722..017f897177c 100644 --- a/jdk/src/share/classes/javax/swing/JTextPane.java +++ b/jdk/src/share/classes/javax/swing/JTextPane.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -79,6 +79,7 @@ import javax.swing.plaf.*; * @author Timothy Prinzing * @see javax.swing.text.StyledEditorKit */ +@SuppressWarnings("serial") // Same-version serialization only public class JTextPane extends JEditorPane { /** diff --git a/jdk/src/share/classes/javax/swing/JToggleButton.java b/jdk/src/share/classes/javax/swing/JToggleButton.java index 3489a07e803..f2f9a0601e0 100644 --- a/jdk/src/share/classes/javax/swing/JToggleButton.java +++ b/jdk/src/share/classes/javax/swing/JToggleButton.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -76,6 +76,7 @@ import java.io.IOException; * @see JCheckBox * @author Jeff Dinkins */ +@SuppressWarnings("serial") // Same-version serialization only public class JToggleButton extends AbstractButton implements Accessible { /** @@ -222,6 +223,7 @@ public class JToggleButton extends AbstractButton implements Accessible { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class ToggleButtonModel extends DefaultButtonModel { /** @@ -384,6 +386,7 @@ public class JToggleButton extends AbstractButton implements Accessible { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJToggleButton extends AccessibleAbstractButton implements ItemListener { diff --git a/jdk/src/share/classes/javax/swing/JToolBar.java b/jdk/src/share/classes/javax/swing/JToolBar.java index a47e86127c0..0557e4b93f2 100644 --- a/jdk/src/share/classes/javax/swing/JToolBar.java +++ b/jdk/src/share/classes/javax/swing/JToolBar.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -86,6 +86,7 @@ import java.util.Hashtable; * @author Jeff Shapiro * @see Action */ +@SuppressWarnings("serial") // Same-version serialization only public class JToolBar extends JComponent implements SwingConstants, Accessible { /** diff --git a/jdk/src/share/classes/javax/swing/JViewport.java b/jdk/src/share/classes/javax/swing/JViewport.java index 5df23b9b0ab..5cc25a71ad0 100644 --- a/jdk/src/share/classes/javax/swing/JViewport.java +++ b/jdk/src/share/classes/javax/swing/JViewport.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -102,6 +102,7 @@ import java.io.Serializable; * @author Philip Milne * @see JScrollPane */ +@SuppressWarnings("serial") // Same-version serialization only public class JViewport extends JComponent implements Accessible { /** @@ -1296,6 +1297,7 @@ public class JViewport extends JComponent implements Accessible * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class ViewListener extends ComponentAdapter implements Serializable { public void componentResized(ComponentEvent e) { @@ -1765,6 +1767,7 @@ public class JViewport extends JComponent implements Accessible * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJViewport extends AccessibleJComponent { /** * Get the role of this object. diff --git a/jdk/src/share/classes/javax/swing/KeyStroke.java b/jdk/src/share/classes/javax/swing/KeyStroke.java index 774eeb692f1..e9f846c3d9c 100644 --- a/jdk/src/share/classes/javax/swing/KeyStroke.java +++ b/jdk/src/share/classes/javax/swing/KeyStroke.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -61,6 +61,7 @@ import java.awt.event.KeyEvent; * @author Arnaud Weber * @author David Mendenhall */ +@SuppressWarnings("serial") // Same-version serialization only public class KeyStroke extends AWTKeyStroke { /** diff --git a/jdk/src/share/classes/javax/swing/MenuSelectionManager.java b/jdk/src/share/classes/javax/swing/MenuSelectionManager.java index 4de2ac804ad..8bde555e018 100644 --- a/jdk/src/share/classes/javax/swing/MenuSelectionManager.java +++ b/jdk/src/share/classes/javax/swing/MenuSelectionManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -246,7 +246,7 @@ public class MenuSelectionManager { selectionSize = tmp.size(); boolean success = false; for (i=selectionSize - 1;i >= 0 && success == false; i--) { - menuElement = (MenuElement) tmp.elementAt(i); + menuElement = tmp.elementAt(i); subElements = menuElement.getSubElements(); path = null; @@ -277,7 +277,7 @@ public class MenuSelectionManager { if(path == null) { path = new MenuElement[i+2]; for(k=0;k<=i;k++) - path[k] = (MenuElement)tmp.elementAt(k); + path[k] = tmp.elementAt(k); } path[i+1] = subElements[j]; MenuElement currentSelection[] = getSelectedPath(); @@ -388,7 +388,7 @@ public class MenuSelectionManager { tmp = (Vector)selection.clone(); selectionSize = tmp.size(); for(i=selectionSize - 1 ; i >= 0 ; i--) { - menuElement = (MenuElement) tmp.elementAt(i); + menuElement = tmp.elementAt(i); subElements = menuElement.getSubElements(); for(j = 0, d = subElements.length ; j < d ; j++) { diff --git a/jdk/src/share/classes/javax/swing/OverlayLayout.java b/jdk/src/share/classes/javax/swing/OverlayLayout.java index 6ea88c2e386..6f3735cd50f 100644 --- a/jdk/src/share/classes/javax/swing/OverlayLayout.java +++ b/jdk/src/share/classes/javax/swing/OverlayLayout.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,6 +51,7 @@ import java.io.Serializable; * * @author Timothy Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public class OverlayLayout implements LayoutManager2,Serializable { /** diff --git a/jdk/src/share/classes/javax/swing/ScrollPaneLayout.java b/jdk/src/share/classes/javax/swing/ScrollPaneLayout.java index 9aa581af867..71eda4b9c9a 100644 --- a/jdk/src/share/classes/javax/swing/ScrollPaneLayout.java +++ b/jdk/src/share/classes/javax/swing/ScrollPaneLayout.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -57,6 +57,7 @@ import java.io.Serializable; * * @author Hans Muller */ +@SuppressWarnings("serial") // Same-version serialization only public class ScrollPaneLayout implements LayoutManager, ScrollPaneConstants, Serializable { diff --git a/jdk/src/share/classes/javax/swing/SizeRequirements.java b/jdk/src/share/classes/javax/swing/SizeRequirements.java index aa03f551423..d4a590bfd0f 100644 --- a/jdk/src/share/classes/javax/swing/SizeRequirements.java +++ b/jdk/src/share/classes/javax/swing/SizeRequirements.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -93,6 +93,7 @@ import java.io.Serializable; * * @author Timothy Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public class SizeRequirements implements Serializable { /** diff --git a/jdk/src/share/classes/javax/swing/Spring.java b/jdk/src/share/classes/javax/swing/Spring.java index 40320734219..e0cb0157fdf 100644 --- a/jdk/src/share/classes/javax/swing/Spring.java +++ b/jdk/src/share/classes/javax/swing/Spring.java @@ -127,6 +127,7 @@ import java.awt.Component; * @author Philip Milne * @since 1.4 */ +@SuppressWarnings("serial") // Same-version serialization only public abstract class Spring { /** diff --git a/jdk/src/share/classes/javax/swing/SpringLayout.java b/jdk/src/share/classes/javax/swing/SpringLayout.java index 95444bfed59..fdaa55cf339 100644 --- a/jdk/src/share/classes/javax/swing/SpringLayout.java +++ b/jdk/src/share/classes/javax/swing/SpringLayout.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2014, 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 @@ -184,6 +184,7 @@ import java.util.*; * @author Joe Winchester * @since 1.4 */ +@SuppressWarnings("serial") // Same-version serialization only public class SpringLayout implements LayoutManager2 { private Map componentConstraints = new HashMap(); diff --git a/jdk/src/share/classes/javax/swing/UIDefaults.java b/jdk/src/share/classes/javax/swing/UIDefaults.java index a560b2d03d7..b6797bd232f 100644 --- a/jdk/src/share/classes/javax/swing/UIDefaults.java +++ b/jdk/src/share/classes/javax/swing/UIDefaults.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -72,6 +72,7 @@ import sun.util.CoreResourceBundleControl; * @see UIManager * @author Hans Muller */ +@SuppressWarnings("serial") // Same-version serialization only public class UIDefaults extends Hashtable { private static final Object PENDING = "Pending"; diff --git a/jdk/src/share/classes/javax/swing/UIManager.java b/jdk/src/share/classes/javax/swing/UIManager.java index c7a3c8291bf..026f8a7b80f 100644 --- a/jdk/src/share/classes/javax/swing/UIManager.java +++ b/jdk/src/share/classes/javax/swing/UIManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -174,6 +174,7 @@ import sun.awt.AWTAccessor; * @author Thomas Ball * @author Hans Muller */ +@SuppressWarnings("serial") // Same-version serialization only public class UIManager implements Serializable { /** diff --git a/jdk/src/share/classes/javax/swing/UnsupportedLookAndFeelException.java b/jdk/src/share/classes/javax/swing/UnsupportedLookAndFeelException.java index 0ff32966131..07b8e18c6ff 100644 --- a/jdk/src/share/classes/javax/swing/UnsupportedLookAndFeelException.java +++ b/jdk/src/share/classes/javax/swing/UnsupportedLookAndFeelException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -39,6 +39,7 @@ package javax.swing; * * @author unattributed */ +@SuppressWarnings("serial") // Same-version serialization only public class UnsupportedLookAndFeelException extends Exception { /** diff --git a/jdk/src/share/classes/javax/swing/ViewportLayout.java b/jdk/src/share/classes/javax/swing/ViewportLayout.java index aeac64276d6..2aa83bede3e 100644 --- a/jdk/src/share/classes/javax/swing/ViewportLayout.java +++ b/jdk/src/share/classes/javax/swing/ViewportLayout.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -56,6 +56,7 @@ import java.io.Serializable; * * @author Hans Muller */ +@SuppressWarnings("serial") // Same-version serialization only public class ViewportLayout implements LayoutManager, Serializable { // Single instance used by JViewport. diff --git a/jdk/src/share/classes/javax/swing/border/BevelBorder.java b/jdk/src/share/classes/javax/swing/border/BevelBorder.java index 659bd7f6966..dd18a88245d 100644 --- a/jdk/src/share/classes/javax/swing/border/BevelBorder.java +++ b/jdk/src/share/classes/javax/swing/border/BevelBorder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -44,6 +44,7 @@ import java.beans.ConstructorProperties; * * @author David Kloba */ +@SuppressWarnings("serial") // Same-version serialization only public class BevelBorder extends AbstractBorder { /** Raised bevel type. */ diff --git a/jdk/src/share/classes/javax/swing/border/EtchedBorder.java b/jdk/src/share/classes/javax/swing/border/EtchedBorder.java index 3bb5c7e0686..2850b60db7b 100644 --- a/jdk/src/share/classes/javax/swing/border/EtchedBorder.java +++ b/jdk/src/share/classes/javax/swing/border/EtchedBorder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,6 +51,7 @@ import java.beans.ConstructorProperties; * @author David Kloba * @author Amy Fowler */ +@SuppressWarnings("serial") // Same-version serialization only public class EtchedBorder extends AbstractBorder { /** Raised etched type. */ diff --git a/jdk/src/share/classes/javax/swing/border/LineBorder.java b/jdk/src/share/classes/javax/swing/border/LineBorder.java index 8d7abb99ac9..1e083c1164f 100644 --- a/jdk/src/share/classes/javax/swing/border/LineBorder.java +++ b/jdk/src/share/classes/javax/swing/border/LineBorder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -50,6 +50,7 @@ import java.beans.ConstructorProperties; * * @author David Kloba */ +@SuppressWarnings("serial") // Same-version serialization only public class LineBorder extends AbstractBorder { private static Border blackLine; diff --git a/jdk/src/share/classes/javax/swing/border/SoftBevelBorder.java b/jdk/src/share/classes/javax/swing/border/SoftBevelBorder.java index d11b4202af8..8cd3afdd799 100644 --- a/jdk/src/share/classes/javax/swing/border/SoftBevelBorder.java +++ b/jdk/src/share/classes/javax/swing/border/SoftBevelBorder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,6 +47,7 @@ import java.beans.ConstructorProperties; * @author Amy Fowler * @author Chester Rose */ +@SuppressWarnings("serial") // Same-version serialization only public class SoftBevelBorder extends BevelBorder { diff --git a/jdk/src/share/classes/javax/swing/border/StrokeBorder.java b/jdk/src/share/classes/javax/swing/border/StrokeBorder.java index f09ae254e90..447779ac85c 100644 --- a/jdk/src/share/classes/javax/swing/border/StrokeBorder.java +++ b/jdk/src/share/classes/javax/swing/border/StrokeBorder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2014, 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 @@ -50,6 +50,7 @@ import java.beans.ConstructorProperties; * * @since 1.7 */ +@SuppressWarnings("serial") // Same-version serialization only public class StrokeBorder extends AbstractBorder { private final BasicStroke stroke; private final Paint paint; diff --git a/jdk/src/share/classes/javax/swing/colorchooser/AbstractColorChooserPanel.java b/jdk/src/share/classes/javax/swing/colorchooser/AbstractColorChooserPanel.java index 58b5946aaaa..c75d08b89ff 100644 --- a/jdk/src/share/classes/javax/swing/colorchooser/AbstractColorChooserPanel.java +++ b/jdk/src/share/classes/javax/swing/colorchooser/AbstractColorChooserPanel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,6 +47,7 @@ import javax.swing.*; * @author Tom Santos * @author Steve Wilson */ +@SuppressWarnings("serial") // Same-version serialization only public abstract class AbstractColorChooserPanel extends JPanel { private final PropertyChangeListener enabledListener = new PropertyChangeListener() { diff --git a/jdk/src/share/classes/javax/swing/colorchooser/ColorChooserComponentFactory.java b/jdk/src/share/classes/javax/swing/colorchooser/ColorChooserComponentFactory.java index ef3f4012984..84386433350 100644 --- a/jdk/src/share/classes/javax/swing/colorchooser/ColorChooserComponentFactory.java +++ b/jdk/src/share/classes/javax/swing/colorchooser/ColorChooserComponentFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -43,6 +43,7 @@ import javax.swing.JComponent; * * @author Steve Wilson */ +@SuppressWarnings("serial") // Same-version serialization only public class ColorChooserComponentFactory { private ColorChooserComponentFactory() { } // can't instantiate diff --git a/jdk/src/share/classes/javax/swing/colorchooser/DefaultPreviewPanel.java b/jdk/src/share/classes/javax/swing/colorchooser/DefaultPreviewPanel.java index 55bdf41ee4a..2abba55060b 100644 --- a/jdk/src/share/classes/javax/swing/colorchooser/DefaultPreviewPanel.java +++ b/jdk/src/share/classes/javax/swing/colorchooser/DefaultPreviewPanel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -53,6 +53,7 @@ import sun.swing.SwingUtilities2; * @author Steve Wilson * @see JColorChooser */ +@SuppressWarnings("serial") // Same-version serialization only class DefaultPreviewPanel extends JPanel { private int squareSize = 25; diff --git a/jdk/src/share/classes/javax/swing/colorchooser/DefaultSwatchChooserPanel.java b/jdk/src/share/classes/javax/swing/colorchooser/DefaultSwatchChooserPanel.java index 6fdcf42c827..e56b95f2ddf 100644 --- a/jdk/src/share/classes/javax/swing/colorchooser/DefaultSwatchChooserPanel.java +++ b/jdk/src/share/classes/javax/swing/colorchooser/DefaultSwatchChooserPanel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,6 +51,7 @@ import javax.accessibility.*; * * @author Steve Wilson */ +@SuppressWarnings("serial") // Same-version serialization only class DefaultSwatchChooserPanel extends AbstractColorChooserPanel { SwatchPanel swatchPanel; diff --git a/jdk/src/share/classes/javax/swing/event/CaretEvent.java b/jdk/src/share/classes/javax/swing/event/CaretEvent.java index 049ec5be649..55c50da3809 100644 --- a/jdk/src/share/classes/javax/swing/event/CaretEvent.java +++ b/jdk/src/share/classes/javax/swing/event/CaretEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -42,6 +42,7 @@ import java.util.EventObject; * * @author Timothy Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public abstract class CaretEvent extends EventObject { /** diff --git a/jdk/src/share/classes/javax/swing/event/HyperlinkEvent.java b/jdk/src/share/classes/javax/swing/event/HyperlinkEvent.java index b3262e6f0fd..848910188e9 100644 --- a/jdk/src/share/classes/javax/swing/event/HyperlinkEvent.java +++ b/jdk/src/share/classes/javax/swing/event/HyperlinkEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,6 +45,7 @@ import javax.swing.text.Element; * * @author Timothy Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public class HyperlinkEvent extends EventObject { /** diff --git a/jdk/src/share/classes/javax/swing/event/InternalFrameEvent.java b/jdk/src/share/classes/javax/swing/event/InternalFrameEvent.java index f061581cbb9..29247682f1d 100644 --- a/jdk/src/share/classes/javax/swing/event/InternalFrameEvent.java +++ b/jdk/src/share/classes/javax/swing/event/InternalFrameEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -53,6 +53,7 @@ import javax.swing.JInternalFrame; * * @author Thomas Ball */ +@SuppressWarnings("serial") // Same-version serialization only public class InternalFrameEvent extends AWTEvent { /** diff --git a/jdk/src/share/classes/javax/swing/event/ListSelectionEvent.java b/jdk/src/share/classes/javax/swing/event/ListSelectionEvent.java index adbb2c87ed7..a5128f1e47c 100644 --- a/jdk/src/share/classes/javax/swing/event/ListSelectionEvent.java +++ b/jdk/src/share/classes/javax/swing/event/ListSelectionEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -50,6 +50,7 @@ import javax.swing.*; * @author Ray Ryan * @see ListSelectionModel */ +@SuppressWarnings("serial") // Same-version serialization only public class ListSelectionEvent extends EventObject { private int firstIndex; diff --git a/jdk/src/share/classes/javax/swing/event/TableColumnModelEvent.java b/jdk/src/share/classes/javax/swing/event/TableColumnModelEvent.java index 18f72a0839d..1958ded5e39 100644 --- a/jdk/src/share/classes/javax/swing/event/TableColumnModelEvent.java +++ b/jdk/src/share/classes/javax/swing/event/TableColumnModelEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,6 +45,7 @@ import javax.swing.table.*; * @author Alan Chung * @see TableColumnModelListener */ +@SuppressWarnings("serial") // Same-version serialization only public class TableColumnModelEvent extends java.util.EventObject { // diff --git a/jdk/src/share/classes/javax/swing/event/TableModelEvent.java b/jdk/src/share/classes/javax/swing/event/TableModelEvent.java index ab450cbd72d..0247f992a4d 100644 --- a/jdk/src/share/classes/javax/swing/event/TableModelEvent.java +++ b/jdk/src/share/classes/javax/swing/event/TableModelEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -65,6 +65,7 @@ import javax.swing.table.*; * @author Philip Milne * @see TableModel */ +@SuppressWarnings("serial") // Same-version serialization only public class TableModelEvent extends java.util.EventObject { /** Identifies the addition of new rows or columns. */ diff --git a/jdk/src/share/classes/javax/swing/event/TreeExpansionEvent.java b/jdk/src/share/classes/javax/swing/event/TreeExpansionEvent.java index c91d7cdb106..1e70200b2e7 100644 --- a/jdk/src/share/classes/javax/swing/event/TreeExpansionEvent.java +++ b/jdk/src/share/classes/javax/swing/event/TreeExpansionEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -48,6 +48,7 @@ import javax.swing.tree.TreePath; * * @author Scott Violet */ +@SuppressWarnings("serial") // Same-version serialization only public class TreeExpansionEvent extends EventObject { /** diff --git a/jdk/src/share/classes/javax/swing/event/TreeModelEvent.java b/jdk/src/share/classes/javax/swing/event/TreeModelEvent.java index 9b3bc05f331..8dbdfcb8d3c 100644 --- a/jdk/src/share/classes/javax/swing/event/TreeModelEvent.java +++ b/jdk/src/share/classes/javax/swing/event/TreeModelEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -50,6 +50,7 @@ import javax.swing.tree.TreePath; * @author Ray Ryan * @author Scott Violet */ +@SuppressWarnings("serial") // Same-version serialization only public class TreeModelEvent extends EventObject { /** Path to the parent of the nodes that have changed. */ protected TreePath path; diff --git a/jdk/src/share/classes/javax/swing/event/UndoableEditEvent.java b/jdk/src/share/classes/javax/swing/event/UndoableEditEvent.java index 85d4c28c40c..bc81d9a721c 100644 --- a/jdk/src/share/classes/javax/swing/event/UndoableEditEvent.java +++ b/jdk/src/share/classes/javax/swing/event/UndoableEditEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,6 +41,7 @@ import javax.swing.undo.*; * * @author Ray Ryan */ +@SuppressWarnings("serial") // Same-version serialization only public class UndoableEditEvent extends java.util.EventObject { private UndoableEdit myEdit; diff --git a/jdk/src/share/classes/javax/swing/plaf/BorderUIResource.java b/jdk/src/share/classes/javax/swing/plaf/BorderUIResource.java index 0e549348ef9..18fab84cd05 100644 --- a/jdk/src/share/classes/javax/swing/plaf/BorderUIResource.java +++ b/jdk/src/share/classes/javax/swing/plaf/BorderUIResource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -59,6 +59,7 @@ import javax.swing.plaf.UIResource; * @author Amy Fowler * */ +@SuppressWarnings("serial") // Same-version serialization only public class BorderUIResource implements Border, UIResource, Serializable { static Border etched; diff --git a/jdk/src/share/classes/javax/swing/plaf/ColorUIResource.java b/jdk/src/share/classes/javax/swing/plaf/ColorUIResource.java index 79eba0477a5..11a5e6bccae 100644 --- a/jdk/src/share/classes/javax/swing/plaf/ColorUIResource.java +++ b/jdk/src/share/classes/javax/swing/plaf/ColorUIResource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,6 +45,7 @@ import java.beans.ConstructorProperties; * @author Hans Muller * */ +@SuppressWarnings("serial") // Same-version serialization only public class ColorUIResource extends Color implements UIResource { @ConstructorProperties({"red", "green", "blue"}) diff --git a/jdk/src/share/classes/javax/swing/plaf/DimensionUIResource.java b/jdk/src/share/classes/javax/swing/plaf/DimensionUIResource.java index 49828dc3550..1489352633c 100644 --- a/jdk/src/share/classes/javax/swing/plaf/DimensionUIResource.java +++ b/jdk/src/share/classes/javax/swing/plaf/DimensionUIResource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -48,6 +48,7 @@ import javax.swing.plaf.UIResource; * @author Amy Fowler * */ +@SuppressWarnings("serial") // Same-version serialization only public class DimensionUIResource extends Dimension implements UIResource { public DimensionUIResource(int width, int height) { diff --git a/jdk/src/share/classes/javax/swing/plaf/FontUIResource.java b/jdk/src/share/classes/javax/swing/plaf/FontUIResource.java index f8966e8719a..f39fa8d7afa 100644 --- a/jdk/src/share/classes/javax/swing/plaf/FontUIResource.java +++ b/jdk/src/share/classes/javax/swing/plaf/FontUIResource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,6 +47,7 @@ import javax.swing.plaf.UIResource; * @author Hans Muller * */ +@SuppressWarnings("serial") // Same-version serialization only public class FontUIResource extends Font implements UIResource { public FontUIResource(String name, int style, int size) { diff --git a/jdk/src/share/classes/javax/swing/plaf/IconUIResource.java b/jdk/src/share/classes/javax/swing/plaf/IconUIResource.java index 2fd10327a3f..5a25f5e8c4c 100644 --- a/jdk/src/share/classes/javax/swing/plaf/IconUIResource.java +++ b/jdk/src/share/classes/javax/swing/plaf/IconUIResource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -52,6 +52,7 @@ import javax.swing.plaf.UIResource; * @author Amy Fowler * */ +@SuppressWarnings("serial") // Same-version serialization only public class IconUIResource implements Icon, UIResource, Serializable { private Icon delegate; diff --git a/jdk/src/share/classes/javax/swing/plaf/InsetsUIResource.java b/jdk/src/share/classes/javax/swing/plaf/InsetsUIResource.java index 5da2498b4f5..9cf0ba4afed 100644 --- a/jdk/src/share/classes/javax/swing/plaf/InsetsUIResource.java +++ b/jdk/src/share/classes/javax/swing/plaf/InsetsUIResource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,6 +47,7 @@ import javax.swing.plaf.UIResource; * @author Amy Fowler * */ +@SuppressWarnings("serial") // Same-version serialization only public class InsetsUIResource extends Insets implements UIResource { public InsetsUIResource(int top, int left, int bottom, int right) { diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicArrowButton.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicArrowButton.java index 73b79263129..750fe60c235 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicArrowButton.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicArrowButton.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,6 +45,7 @@ import javax.swing.plaf.UIResource; * * @author David Kloba */ +@SuppressWarnings("serial") // Same-version serialization only public class BasicArrowButton extends JButton implements SwingConstants { /** diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicCheckBoxUI.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicCheckBoxUI.java index 4c1d5c399d8..256a3afbfcf 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicCheckBoxUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicCheckBoxUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -49,6 +49,7 @@ import java.io.Serializable; * * @author Jeff Dinkins */ +@SuppressWarnings("serial") // Same-version serialization only public class BasicCheckBoxUI extends BasicRadioButtonUI { private static final Object BASIC_CHECK_BOX_UI_KEY = new Object(); diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicComboBoxEditor.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicComboBoxEditor.java index 07e0a0f56e8..6aa49dda179 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicComboBoxEditor.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicComboBoxEditor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -164,6 +164,7 @@ public class BasicComboBoxEditor implements ComboBoxEditor,FocusListener { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class UIResource extends BasicComboBoxEditor implements javax.swing.plaf.UIResource { } diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicComboBoxRenderer.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicComboBoxRenderer.java index f98be00b12c..963e180d381 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicComboBoxRenderer.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicComboBoxRenderer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,6 +47,7 @@ import java.io.Serializable; * * @author Arnaud Weber */ +@SuppressWarnings("serial") // Same-version serialization only public class BasicComboBoxRenderer extends JLabel implements ListCellRenderer, Serializable { @@ -139,6 +140,7 @@ implements ListCellRenderer, Serializable { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class UIResource extends BasicComboBoxRenderer implements javax.swing.plaf.UIResource { } } diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicComboPopup.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicComboPopup.java index e3ed947d732..dbc35e980e8 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicComboPopup.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicComboPopup.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -60,6 +60,7 @@ import java.io.Serializable; * @author Tom Santos * @author Mark Davidson */ +@SuppressWarnings("serial") // Same-version serialization only public class BasicComboPopup extends JPopupMenu implements ComboPopup { // An empty ListMode, this is used when the UI changes to allow // the JList to be gc'ed. diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicEditorPaneUI.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicEditorPaneUI.java index 32bace0cc43..7445d79c2dc 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicEditorPaneUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicEditorPaneUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -50,6 +50,7 @@ import javax.swing.border.*; * * @author Timothy Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public class BasicEditorPaneUI extends BasicTextUI { /** diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicIconFactory.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicIconFactory.java index 6ea1cbcccf4..ec27f18dac1 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicIconFactory.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicIconFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -49,6 +49,7 @@ import java.io.Serializable; * @author David Kloba * @author Georges Saab */ +@SuppressWarnings("serial") // Same-version serialization only public class BasicIconFactory implements Serializable { private static Icon frame_icon; diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicInternalFrameTitlePane.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicInternalFrameTitlePane.java index 22eb7951066..33b38623425 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicInternalFrameTitlePane.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicInternalFrameTitlePane.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -57,6 +57,7 @@ import sun.swing.UIAction; * @author David Kloba * @author Steve Wilson */ +@SuppressWarnings("serial") // Same-version serialization only public class BasicInternalFrameTitlePane extends JComponent { protected JMenuBar menuBar; diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicListUI.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicListUI.java index eb8df7bb774..f8a91437dde 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicListUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicListUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -1496,6 +1496,7 @@ public class BasicListUI extends ListUI * @see #installKeyboardActions * @see #installUI */ + @SuppressWarnings("serial") // Same-version serialization only public class MouseInputHandler implements MouseInputListener { public void mouseClicked(MouseEvent e) { @@ -1600,6 +1601,7 @@ public class BasicListUI extends ListUI * @see #getCellBounds * @see #installUI */ + @SuppressWarnings("serial") // Same-version serialization only public class ListSelectionHandler implements ListSelectionListener { public void valueChanged(ListSelectionEvent e) @@ -1659,6 +1661,7 @@ public class BasicListUI extends ListUI * @see #createListDataListener * @see #installUI */ + @SuppressWarnings("serial") // Same-version serialization only public class ListDataHandler implements ListDataListener { public void intervalAdded(ListDataEvent e) { @@ -1725,6 +1728,7 @@ public class BasicListUI extends ListUI * @see #createPropertyChangeListener * @see #installUI */ + @SuppressWarnings("serial") // Same-version serialization only public class PropertyChangeHandler implements PropertyChangeListener { public void propertyChange(PropertyChangeEvent e) diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicLookAndFeel.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicLookAndFeel.java index 4ad134756e9..1bcf5fa93e0 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicLookAndFeel.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicLookAndFeel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -102,6 +102,7 @@ import java.beans.PropertyChangeEvent; * * @author unattributed */ +@SuppressWarnings("serial") // Same-version serialization only public abstract class BasicLookAndFeel extends LookAndFeel implements Serializable { /** diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicSplitPaneDivider.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicSplitPaneDivider.java index 9704705b2f5..36b4129598c 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicSplitPaneDivider.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicSplitPaneDivider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -59,6 +59,7 @@ import sun.swing.DefaultLookup; * * @author Scott Violet */ +@SuppressWarnings("serial") // Same-version serialization only public class BasicSplitPaneDivider extends Container implements PropertyChangeListener { @@ -675,6 +676,7 @@ public class BasicSplitPaneDivider extends Container * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class DragController { /** diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextAreaUI.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextAreaUI.java index 4a34184bdb1..85793b0a590 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextAreaUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextAreaUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -49,6 +49,7 @@ import javax.swing.plaf.*; * * @author Timothy Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public class BasicTextAreaUI extends BasicTextUI { /** diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextFieldUI.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextFieldUI.java index 0083c34b74f..379a2ef9864 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextFieldUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextFieldUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,6 +51,7 @@ import sun.swing.DefaultLookup; * * @author Timothy Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public class BasicTextFieldUI extends BasicTextUI { /** diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextPaneUI.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextPaneUI.java index 1e460c41584..1d94e9c5651 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextPaneUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextPaneUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,6 +47,7 @@ import javax.swing.border.*; * * @author Timothy Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public class BasicTextPaneUI extends BasicEditorPaneUI { /** diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextUI.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextUI.java index e3a2fb66ac3..0965c77789f 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -100,6 +100,7 @@ import javax.swing.plaf.basic.DragRecognitionSupport.BeforeDrag; * @author Timothy Prinzing * @author Shannon Hickey (drag and drop) */ +@SuppressWarnings("serial") // Same-version serialization only public abstract class BasicTextUI extends TextUI implements ViewFactory { /** diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/ComboPopup.java b/jdk/src/share/classes/javax/swing/plaf/basic/ComboPopup.java index c2a4fa25006..75850fe7273 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/ComboPopup.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/ComboPopup.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -46,6 +46,7 @@ import javax.swing.JList; * * @author Tom Santos */ +@SuppressWarnings("serial") // Same-version serialization only public interface ComboPopup { /** * Shows the popup diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/DefaultMetalTheme.java b/jdk/src/share/classes/javax/swing/plaf/metal/DefaultMetalTheme.java index 5527815d5b6..dae37d5e7be 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/DefaultMetalTheme.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/DefaultMetalTheme.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -88,6 +88,7 @@ import sun.swing.SwingUtilities2; * * @author Steve Wilson */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultMetalTheme extends MetalTheme { /** * Whether or not fonts should be plain. This is only used if diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalButtonUI.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalButtonUI.java index 3d02f9c5138..233949e3df1 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalButtonUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalButtonUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -50,6 +50,7 @@ import javax.swing.plaf.*; * * @author Tom Santos */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalButtonUI extends BasicButtonUI { // NOTE: These are not really needed, but at this point we can't pull // them. Their values are updated purely for historical reasons. diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalCheckBoxIcon.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalCheckBoxIcon.java index b32157144ef..0962c8e943a 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalCheckBoxIcon.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalCheckBoxIcon.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -46,6 +46,7 @@ import javax.swing.plaf.*; * * @author Steve Wilson */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalCheckBoxIcon implements Icon, UIResource, Serializable { protected int getControlSize() { return 13; } diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalCheckBoxUI.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalCheckBoxUI.java index 95ef177105c..b80ec636ac2 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalCheckBoxUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalCheckBoxUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,6 +51,7 @@ import java.io.Serializable; * @author Michael C. Albers * */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalCheckBoxUI extends MetalRadioButtonUI { // NOTE: MetalCheckBoxUI inherts from MetalRadioButtonUI instead diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalComboBoxButton.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalComboBoxButton.java index 63a53bf1a6a..6a6d1ed860e 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalComboBoxButton.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalComboBoxButton.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -48,6 +48,7 @@ import java.io.Serializable; * @see MetalComboBoxButton * @author Tom Santos */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalComboBoxButton extends JButton { protected JComboBox comboBox; protected JList listBox; diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalComboBoxEditor.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalComboBoxEditor.java index aa375fbb6be..4c95250013b 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalComboBoxEditor.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalComboBoxEditor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,6 +47,7 @@ import javax.swing.plaf.basic.BasicComboBoxEditor; * * @author Steve Wilson */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalComboBoxEditor extends BasicComboBoxEditor { public MetalComboBoxEditor() { @@ -133,6 +134,7 @@ public class MetalComboBoxEditor extends BasicComboBoxEditor { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class UIResource extends MetalComboBoxEditor implements javax.swing.plaf.UIResource { } diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalComboBoxUI.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalComboBoxUI.java index 74f8830f30c..eb9afb93439 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalComboBoxUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalComboBoxUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,6 +51,7 @@ import java.beans.*; * @see MetalComboBoxButton * @author Tom Santos */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalComboBoxUI extends BasicComboBoxUI { public static ComponentUI createUI(JComponent c) { diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalIconFactory.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalIconFactory.java index 5b81f17624f..e74882523d0 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalIconFactory.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalIconFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -58,6 +58,7 @@ import sun.swing.CachedPainter; * * @author Michael C. Albers */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalIconFactory implements Serializable { // List of code-drawn Icons @@ -1554,6 +1555,7 @@ public class MetalIconFactory implements Serializable { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class FolderIcon16 implements Icon, Serializable { ImageCacher imageCacher; @@ -1636,6 +1638,7 @@ public class MetalIconFactory implements Serializable { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class TreeFolderIcon extends FolderIcon16 { public int getShift() { return -1; } public int getAdditionalHeight() { return 2; } @@ -1655,6 +1658,7 @@ public class MetalIconFactory implements Serializable { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class FileIcon16 implements Icon, Serializable { ImageCacher imageCacher; @@ -1740,6 +1744,7 @@ public class MetalIconFactory implements Serializable { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class TreeControlIcon implements Icon, Serializable { // This data member should not have been exposed. It's called // isLight, but now it really means isCollapsed. Since we can't change diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalLookAndFeel.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalLookAndFeel.java index 7318815e691..a51603608e6 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalLookAndFeel.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalLookAndFeel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -82,6 +82,7 @@ import sun.swing.SwingUtilities2; * * @author Steve Wilson */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalLookAndFeel extends BasicLookAndFeel { diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalProgressBarUI.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalProgressBarUI.java index a2918b0e9b1..aedede36688 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalProgressBarUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalProgressBarUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -44,6 +44,7 @@ import java.awt.*; * * @author Michael C. Albers */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalProgressBarUI extends BasicProgressBarUI { private Rectangle innards; diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalRadioButtonUI.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalRadioButtonUI.java index 274335580c6..9b7beeacf98 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalRadioButtonUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalRadioButtonUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -53,6 +53,7 @@ import javax.swing.text.View; * @author Michael C. Albers (Metal modifications) * @author Jeff Dinkins (original BasicRadioButtonCode) */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalRadioButtonUI extends BasicRadioButtonUI { private static final Object METAL_RADIO_BUTTON_UI_KEY = new Object(); diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalRootPaneUI.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalRootPaneUI.java index e40721dddb5..2d2c4b20ce2 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalRootPaneUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalRootPaneUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -63,6 +63,7 @@ import java.security.*; * @author Terry Kellerman * @since 1.4 */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalRootPaneUI extends BasicRootPaneUI { /** diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalScrollButton.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalScrollButton.java index 61616d47041..edd40950ec4 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalScrollButton.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalScrollButton.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -50,6 +50,7 @@ import javax.swing.plaf.basic.BasicArrowButton; * @author Tom Santos * @author Steve Wilson */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalScrollButton extends BasicArrowButton { private static Color shadowColor; diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalScrollPaneUI.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalScrollPaneUI.java index d1f5b7abb19..ffc5fc4df1c 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalScrollPaneUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalScrollPaneUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -50,6 +50,7 @@ import java.awt.event.*; * * @author Steve Wilson */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalScrollPaneUI extends BasicScrollPaneUI { diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalSeparatorUI.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalSeparatorUI.java index 17ac847c703..9de133b902d 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalSeparatorUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalSeparatorUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -50,7 +50,7 @@ import javax.swing.plaf.basic.BasicSeparatorUI; * * @author Jeff Shapiro */ - +@SuppressWarnings("serial") // Same-version serialization only public class MetalSeparatorUI extends BasicSeparatorUI { public static ComponentUI createUI( JComponent c ) diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalSliderUI.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalSliderUI.java index 3fbfb3fa55f..6e629938a65 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalSliderUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalSliderUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -50,6 +50,7 @@ import javax.swing.plaf.*; * * @author Tom Santos */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalSliderUI extends BasicSliderUI { protected final int TICK_BUFFER = 4; diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalSplitPaneDivider.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalSplitPaneDivider.java index 33ef49d6ad5..8ba134e48f6 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalSplitPaneDivider.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalSplitPaneDivider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -46,6 +46,7 @@ import javax.swing.plaf.basic.*; * @author Steve Wilson * @author Ralph kar */ +@SuppressWarnings("serial") // Same-version serialization only class MetalSplitPaneDivider extends BasicSplitPaneDivider { private MetalBumps bumps = new MetalBumps(10, 10, @@ -391,11 +392,11 @@ class MetalSplitPaneDivider extends BasicSplitPaneDivider */ int getOneTouchSizeFromSuper() { - return super.ONE_TOUCH_SIZE; + return BasicSplitPaneDivider.ONE_TOUCH_SIZE; } int getOneTouchOffsetFromSuper() { - return super.ONE_TOUCH_OFFSET; + return BasicSplitPaneDivider.ONE_TOUCH_OFFSET; } int getOrientationFromSuper() { diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalSplitPaneUI.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalSplitPaneUI.java index 8aaa40942a0..d27ea2e4828 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalSplitPaneUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalSplitPaneUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -43,6 +43,7 @@ import javax.swing.plaf.basic.*; * * @author Steve Wilson */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalSplitPaneUI extends BasicSplitPaneUI { diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalTabbedPaneUI.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalTabbedPaneUI.java index 23ead51d4d9..75dc959ca3d 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalTabbedPaneUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalTabbedPaneUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,7 +47,7 @@ import javax.swing.plaf.basic.BasicTabbedPaneUI; * * @author Tom Santos */ - +@SuppressWarnings("serial") // Same-version serialization only public class MetalTabbedPaneUI extends BasicTabbedPaneUI { protected int minTabWidth = 40; diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalTextFieldUI.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalTextFieldUI.java index 8fe89f3fd33..1eca55ed7d2 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalTextFieldUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalTextFieldUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,6 +47,7 @@ import javax.swing.plaf.basic.*; * * @author Steve Wilson */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalTextFieldUI extends BasicTextFieldUI { public static ComponentUI createUI(JComponent c) { diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalToggleButtonUI.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalToggleButtonUI.java index d207cbbb1d5..d0d902eecee 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalToggleButtonUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalToggleButtonUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -55,6 +55,7 @@ import java.io.Serializable; * * @author Tom Santos */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalToggleButtonUI extends BasicToggleButtonUI { private static final Object METAL_TOGGLE_BUTTON_UI_KEY = new Object(); diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalToolTipUI.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalToolTipUI.java index 38a39a06746..2a7a1b1e571 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalToolTipUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalToolTipUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,6 +51,7 @@ import javax.swing.text.View; * * @author Steve Wilson */ +@SuppressWarnings("serial") // Same-version serialization only public class MetalToolTipUI extends BasicToolTipUI { static MetalToolTipUI sharedInstance = new MetalToolTipUI(); diff --git a/jdk/src/share/classes/javax/swing/plaf/multi/MultiLookAndFeel.java b/jdk/src/share/classes/javax/swing/plaf/multi/MultiLookAndFeel.java index 0e6c8e8de96..65828883fdd 100644 --- a/jdk/src/share/classes/javax/swing/plaf/multi/MultiLookAndFeel.java +++ b/jdk/src/share/classes/javax/swing/plaf/multi/MultiLookAndFeel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -56,6 +56,7 @@ import javax.swing.plaf.*; * * @author Willie Walker */ +@SuppressWarnings("serial") // Same-version serialization only public class MultiLookAndFeel extends LookAndFeel { ////////////////////////////// diff --git a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextAreaUI.java b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextAreaUI.java index 09b33ec95e7..441698ce0a9 100644 --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextAreaUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextAreaUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,6 +51,7 @@ import java.beans.PropertyChangeEvent; * @author Shannon Hickey * @since 1.7 */ +@SuppressWarnings("serial") // Same-version serialization only public class SynthTextAreaUI extends BasicTextAreaUI implements SynthUI { private Handler handler = new Handler(); private SynthStyle style; diff --git a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextFieldUI.java b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextFieldUI.java index 9a1ae3ef6d9..7028a5a5999 100644 --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextFieldUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextFieldUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -50,6 +50,7 @@ import java.beans.PropertyChangeEvent; * @author Shannon Hickey * @since 1.7 */ +@SuppressWarnings("serial") // Same-version serialization only public class SynthTextFieldUI extends BasicTextFieldUI implements SynthUI { private Handler handler = new Handler(); private SynthStyle style; diff --git a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextPaneUI.java b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextPaneUI.java index 8b21b4ba7c6..d4f8aaca373 100644 --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextPaneUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextPaneUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,6 +47,7 @@ import java.awt.*; * @author Shannon Hickey * @since 1.7 */ +@SuppressWarnings("serial") // Same-version serialization only public class SynthTextPaneUI extends SynthEditorPaneUI { /** diff --git a/jdk/src/share/classes/javax/swing/table/AbstractTableModel.java b/jdk/src/share/classes/javax/swing/table/AbstractTableModel.java index c9ea60271dc..d7c63bce05a 100644 --- a/jdk/src/share/classes/javax/swing/table/AbstractTableModel.java +++ b/jdk/src/share/classes/javax/swing/table/AbstractTableModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -57,6 +57,7 @@ import java.util.EventListener; * @author Alan Chung * @author Philip Milne */ +@SuppressWarnings("serial") // Same-version serialization only public abstract class AbstractTableModel implements TableModel, Serializable { // diff --git a/jdk/src/share/classes/javax/swing/table/DefaultTableCellRenderer.java b/jdk/src/share/classes/javax/swing/table/DefaultTableCellRenderer.java index 61c6c9f732e..123ac8d5e64 100644 --- a/jdk/src/share/classes/javax/swing/table/DefaultTableCellRenderer.java +++ b/jdk/src/share/classes/javax/swing/table/DefaultTableCellRenderer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -82,6 +82,7 @@ import sun.swing.DefaultLookup; * @author Philip Milne * @see JTable */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultTableCellRenderer extends JLabel implements TableCellRenderer, Serializable { @@ -391,6 +392,7 @@ public class DefaultTableCellRenderer extends JLabel * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class UIResource extends DefaultTableCellRenderer implements javax.swing.plaf.UIResource { diff --git a/jdk/src/share/classes/javax/swing/table/DefaultTableColumnModel.java b/jdk/src/share/classes/javax/swing/table/DefaultTableColumnModel.java index b5bbd077a2b..96193cb35fd 100644 --- a/jdk/src/share/classes/javax/swing/table/DefaultTableColumnModel.java +++ b/jdk/src/share/classes/javax/swing/table/DefaultTableColumnModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -52,6 +52,7 @@ import sun.swing.SwingUtilities2; * @author Philip Milne * @see JTable */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultTableColumnModel implements TableColumnModel, PropertyChangeListener, ListSelectionListener, Serializable { diff --git a/jdk/src/share/classes/javax/swing/table/DefaultTableModel.java b/jdk/src/share/classes/javax/swing/table/DefaultTableModel.java index 6bf39981d3d..74b88c1160d 100644 --- a/jdk/src/share/classes/javax/swing/table/DefaultTableModel.java +++ b/jdk/src/share/classes/javax/swing/table/DefaultTableModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -59,6 +59,7 @@ import javax.swing.event.TableModelEvent; * @see TableModel * @see #getDataVector */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultTableModel extends AbstractTableModel implements Serializable { // diff --git a/jdk/src/share/classes/javax/swing/table/JTableHeader.java b/jdk/src/share/classes/javax/swing/table/JTableHeader.java index e096e338cc4..3995cccc288 100644 --- a/jdk/src/share/classes/javax/swing/table/JTableHeader.java +++ b/jdk/src/share/classes/javax/swing/table/JTableHeader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -60,6 +60,7 @@ import java.io.IOException; * @author Philip Milne * @see javax.swing.JTable */ +@SuppressWarnings("serial") // Same-version serialization only public class JTableHeader extends JComponent implements TableColumnModelListener, Accessible { /** @@ -780,6 +781,7 @@ public class JTableHeader extends JComponent implements TableColumnModelListener * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class AccessibleJTableHeader extends AccessibleJComponent { /** diff --git a/jdk/src/share/classes/javax/swing/table/TableColumn.java b/jdk/src/share/classes/javax/swing/table/TableColumn.java index 42d722aa958..713bf5483dc 100644 --- a/jdk/src/share/classes/javax/swing/table/TableColumn.java +++ b/jdk/src/share/classes/javax/swing/table/TableColumn.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -82,6 +82,7 @@ import java.beans.PropertyChangeListener; * @see JTable#getCellRenderer(int, int) * @see JTable#getCellEditor(int, int) */ +@SuppressWarnings("serial") // Same-version serialization only public class TableColumn extends Object implements Serializable { /** diff --git a/jdk/src/share/classes/javax/swing/text/AbstractDocument.java b/jdk/src/share/classes/javax/swing/text/AbstractDocument.java index f8a4332a839..6332cb3d3b7 100644 --- a/jdk/src/share/classes/javax/swing/text/AbstractDocument.java +++ b/jdk/src/share/classes/javax/swing/text/AbstractDocument.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -96,6 +96,7 @@ import sun.swing.SwingUtilities2; * * @author Timothy Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public abstract class AbstractDocument implements Document, Serializable { /** @@ -1782,6 +1783,7 @@ public abstract class AbstractDocument implements Document, Serializable { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public abstract class AbstractElement implements Element, MutableAttributeSet, Serializable, TreeNode { /** @@ -2251,6 +2253,7 @@ public abstract class AbstractDocument implements Document, Serializable { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public class BranchElement extends AbstractElement { /** @@ -2507,6 +2510,7 @@ public abstract class AbstractDocument implements Document, Serializable { * * @see Element */ + @SuppressWarnings("serial") // Same-version serialization only public class LeafElement extends AbstractElement { /** diff --git a/jdk/src/share/classes/javax/swing/text/DateFormatter.java b/jdk/src/share/classes/javax/swing/text/DateFormatter.java index b301bf97aaa..e935053bfc8 100644 --- a/jdk/src/share/classes/javax/swing/text/DateFormatter.java +++ b/jdk/src/share/classes/javax/swing/text/DateFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,6 +47,7 @@ import javax.swing.text.*; * * @since 1.4 */ +@SuppressWarnings("serial") // Same-version serialization only public class DateFormatter extends InternationalFormatter { /** * This is shorthand for diff --git a/jdk/src/share/classes/javax/swing/text/DefaultCaret.java b/jdk/src/share/classes/javax/swing/text/DefaultCaret.java index 7b06fb3f1c9..5eb0b2b10fe 100644 --- a/jdk/src/share/classes/javax/swing/text/DefaultCaret.java +++ b/jdk/src/share/classes/javax/swing/text/DefaultCaret.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -105,6 +105,7 @@ import sun.swing.SwingUtilities2; * @author Timothy Prinzing * @see Caret */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultCaret extends Rectangle implements Caret, FocusListener, MouseListener, MouseMotionListener { /** diff --git a/jdk/src/share/classes/javax/swing/text/DefaultEditorKit.java b/jdk/src/share/classes/javax/swing/text/DefaultEditorKit.java index ec5a04f3780..55d75fb7364 100644 --- a/jdk/src/share/classes/javax/swing/text/DefaultEditorKit.java +++ b/jdk/src/share/classes/javax/swing/text/DefaultEditorKit.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -849,6 +849,7 @@ public class DefaultEditorKit extends EditorKit { * @see Keymap#setDefaultAction * @see Keymap#getDefaultAction */ + @SuppressWarnings("serial") // Same-version serialization only public static class DefaultKeyTypedAction extends TextAction { /** @@ -906,6 +907,7 @@ public class DefaultEditorKit extends EditorKit { * @see DefaultEditorKit#insertContentAction * @see DefaultEditorKit#getActions */ + @SuppressWarnings("serial") // Same-version serialization only public static class InsertContentAction extends TextAction { /** @@ -954,6 +956,7 @@ public class DefaultEditorKit extends EditorKit { * @see DefaultEditorKit#insertBreakAction * @see DefaultEditorKit#getActions */ + @SuppressWarnings("serial") // Same-version serialization only public static class InsertBreakAction extends TextAction { /** @@ -996,6 +999,7 @@ public class DefaultEditorKit extends EditorKit { * @see DefaultEditorKit#insertTabAction * @see DefaultEditorKit#getActions */ + @SuppressWarnings("serial") // Same-version serialization only public static class InsertTabAction extends TextAction { /** @@ -1272,6 +1276,7 @@ public class DefaultEditorKit extends EditorKit { * @see DefaultEditorKit#cutAction * @see DefaultEditorKit#getActions */ + @SuppressWarnings("serial") // Same-version serialization only public static class CutAction extends TextAction { /** Create this object with the appropriate identifier. */ @@ -1308,6 +1313,7 @@ public class DefaultEditorKit extends EditorKit { * @see DefaultEditorKit#copyAction * @see DefaultEditorKit#getActions */ + @SuppressWarnings("serial") // Same-version serialization only public static class CopyAction extends TextAction { /** Create this object with the appropriate identifier. */ @@ -1345,6 +1351,7 @@ public class DefaultEditorKit extends EditorKit { * @see DefaultEditorKit#pasteAction * @see DefaultEditorKit#getActions */ + @SuppressWarnings("serial") // Same-version serialization only public static class PasteAction extends TextAction { /** Create this object with the appropriate identifier. */ @@ -1380,6 +1387,7 @@ public class DefaultEditorKit extends EditorKit { * @see DefaultEditorKit#beepAction * @see DefaultEditorKit#getActions */ + @SuppressWarnings("serial") // Same-version serialization only public static class BeepAction extends TextAction { /** Create this object with the appropriate identifier. */ diff --git a/jdk/src/share/classes/javax/swing/text/DefaultFormatter.java b/jdk/src/share/classes/javax/swing/text/DefaultFormatter.java index 5fa3ad9fbbd..0a4df2c0a1d 100644 --- a/jdk/src/share/classes/javax/swing/text/DefaultFormatter.java +++ b/jdk/src/share/classes/javax/swing/text/DefaultFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -59,6 +59,7 @@ import javax.swing.text.*; * * @since 1.4 */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultFormatter extends JFormattedTextField.AbstractFormatter implements Cloneable, Serializable { /** Indicates if the value being edited must match the mask. */ diff --git a/jdk/src/share/classes/javax/swing/text/DefaultFormatterFactory.java b/jdk/src/share/classes/javax/swing/text/DefaultFormatterFactory.java index 7474dcbc205..ff52dde9803 100644 --- a/jdk/src/share/classes/javax/swing/text/DefaultFormatterFactory.java +++ b/jdk/src/share/classes/javax/swing/text/DefaultFormatterFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -72,6 +72,7 @@ import javax.swing.JFormattedTextField; * * @since 1.4 */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultFormatterFactory extends JFormattedTextField.AbstractFormatterFactory implements Serializable { /** * Default AbstractFormatter to use if a more specific one has diff --git a/jdk/src/share/classes/javax/swing/text/DefaultStyledDocument.java b/jdk/src/share/classes/javax/swing/text/DefaultStyledDocument.java index 85c9fe5e308..a5ce0633f74 100644 --- a/jdk/src/share/classes/javax/swing/text/DefaultStyledDocument.java +++ b/jdk/src/share/classes/javax/swing/text/DefaultStyledDocument.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -69,6 +69,7 @@ import static sun.swing.SwingUtilities2.IMPLIED_CR; * @see Document * @see AbstractDocument */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultStyledDocument extends AbstractDocument implements StyledDocument { /** @@ -1128,6 +1129,7 @@ public class DefaultStyledDocument extends AbstractDocument implements StyledDoc * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only protected class SectionElement extends BranchElement { /** @@ -1159,6 +1161,7 @@ public class DefaultStyledDocument extends AbstractDocument implements StyledDoc * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class ElementSpec { /** @@ -1394,6 +1397,7 @@ public class DefaultStyledDocument extends AbstractDocument implements StyledDoc * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public class ElementBuffer implements Serializable { /** diff --git a/jdk/src/share/classes/javax/swing/text/InternationalFormatter.java b/jdk/src/share/classes/javax/swing/text/InternationalFormatter.java index dc3e046b024..8c91658167d 100644 --- a/jdk/src/share/classes/javax/swing/text/InternationalFormatter.java +++ b/jdk/src/share/classes/javax/swing/text/InternationalFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -92,6 +92,7 @@ import javax.swing.*; * * @since 1.4 */ +@SuppressWarnings("serial") // Same-version serialization only public class InternationalFormatter extends DefaultFormatter { /** * Used by getFields. diff --git a/jdk/src/share/classes/javax/swing/text/JTextComponent.java b/jdk/src/share/classes/javax/swing/text/JTextComponent.java index 42c2a2e1764..714b3381619 100644 --- a/jdk/src/share/classes/javax/swing/text/JTextComponent.java +++ b/jdk/src/share/classes/javax/swing/text/JTextComponent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -292,6 +292,7 @@ import sun.swing.SwingAccessor; * @see View * @see ViewFactory */ +@SuppressWarnings("serial") // Same-version serialization only public abstract class JTextComponent extends JComponent implements Scrollable, Accessible { /** @@ -1118,6 +1119,7 @@ public abstract class JTextComponent extends JComponent implements Scrollable, A * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class KeyBinding { /** @@ -2535,6 +2537,7 @@ public abstract class JTextComponent extends JComponent implements Scrollable, A * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public class AccessibleJTextComponent extends AccessibleJComponent implements AccessibleText, CaretListener, DocumentListener, AccessibleAction, AccessibleEditableText, diff --git a/jdk/src/share/classes/javax/swing/text/MaskFormatter.java b/jdk/src/share/classes/javax/swing/text/MaskFormatter.java index 2285e4ef1d1..1c37ed9180f 100644 --- a/jdk/src/share/classes/javax/swing/text/MaskFormatter.java +++ b/jdk/src/share/classes/javax/swing/text/MaskFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -149,6 +149,7 @@ import javax.swing.*; * * @since 1.4 */ +@SuppressWarnings("serial") // Same-version serialization only public class MaskFormatter extends DefaultFormatter { // Potential values in mask. private static final char DIGIT_KEY = '#'; diff --git a/jdk/src/share/classes/javax/swing/text/NumberFormatter.java b/jdk/src/share/classes/javax/swing/text/NumberFormatter.java index f170b9aa967..bcc518ce39e 100644 --- a/jdk/src/share/classes/javax/swing/text/NumberFormatter.java +++ b/jdk/src/share/classes/javax/swing/text/NumberFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -91,6 +91,7 @@ import sun.swing.SwingUtilities2; * * @since 1.4 */ +@SuppressWarnings("serial") // Same-version serialization only public class NumberFormatter extends InternationalFormatter { /** The special characters from the Format instance. */ private String specialChars; diff --git a/jdk/src/share/classes/javax/swing/text/PlainDocument.java b/jdk/src/share/classes/javax/swing/text/PlainDocument.java index 8c731da6f61..e1adc38faf8 100644 --- a/jdk/src/share/classes/javax/swing/text/PlainDocument.java +++ b/jdk/src/share/classes/javax/swing/text/PlainDocument.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -56,6 +56,7 @@ import java.util.Vector; * @see Document * @see AbstractDocument */ +@SuppressWarnings("serial") // Same-version serialization only public class PlainDocument extends AbstractDocument { /** diff --git a/jdk/src/share/classes/javax/swing/text/SimpleAttributeSet.java b/jdk/src/share/classes/javax/swing/text/SimpleAttributeSet.java index f6505b46a9a..e7646368290 100644 --- a/jdk/src/share/classes/javax/swing/text/SimpleAttributeSet.java +++ b/jdk/src/share/classes/javax/swing/text/SimpleAttributeSet.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -48,6 +48,7 @@ import java.util.LinkedHashMap; * * @author Tim Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public class SimpleAttributeSet implements MutableAttributeSet, Serializable, Cloneable { private static final long serialVersionUID = -6631553454711782652L; diff --git a/jdk/src/share/classes/javax/swing/text/StringContent.java b/jdk/src/share/classes/javax/swing/text/StringContent.java index a62fcc4ba84..99b8d5d3eb8 100644 --- a/jdk/src/share/classes/javax/swing/text/StringContent.java +++ b/jdk/src/share/classes/javax/swing/text/StringContent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -50,6 +50,7 @@ import javax.swing.SwingUtilities; * * @author Timothy Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public final class StringContent implements AbstractDocument.Content, Serializable { /** diff --git a/jdk/src/share/classes/javax/swing/text/StyleContext.java b/jdk/src/share/classes/javax/swing/text/StyleContext.java index c7942eaccd0..8d7975b1395 100644 --- a/jdk/src/share/classes/javax/swing/text/StyleContext.java +++ b/jdk/src/share/classes/javax/swing/text/StyleContext.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -62,6 +62,7 @@ import sun.font.FontUtilities; * * @author Timothy Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public class StyleContext implements Serializable, AbstractDocument.AttributeContext { /** @@ -1244,6 +1245,7 @@ public class StyleContext implements Serializable, AbstractDocument.AttributeCon * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public class NamedStyle implements Style, Serializable { /** diff --git a/jdk/src/share/classes/javax/swing/text/StyledEditorKit.java b/jdk/src/share/classes/javax/swing/text/StyledEditorKit.java index 57b8ac00044..b62be0f7ef3 100644 --- a/jdk/src/share/classes/javax/swing/text/StyledEditorKit.java +++ b/jdk/src/share/classes/javax/swing/text/StyledEditorKit.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -90,7 +90,7 @@ public class StyledEditorKit extends DefaultEditorKit { * @return the command list */ public Action[] getActions() { - return TextAction.augmentList(super.getActions(), this.defaultActions); + return TextAction.augmentList(super.getActions(), defaultActions); } /** @@ -375,6 +375,7 @@ public class StyledEditorKit extends DefaultEditorKit { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public abstract static class StyledTextAction extends TextAction { /** @@ -494,6 +495,7 @@ public class StyledEditorKit extends DefaultEditorKit { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class FontFamilyAction extends StyledTextAction { /** @@ -550,6 +552,7 @@ public class StyledEditorKit extends DefaultEditorKit { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class FontSizeAction extends StyledTextAction { /** @@ -617,6 +620,7 @@ public class StyledEditorKit extends DefaultEditorKit { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class ForegroundAction extends StyledTextAction { /** @@ -683,6 +687,7 @@ public class StyledEditorKit extends DefaultEditorKit { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class AlignmentAction extends StyledTextAction { /** @@ -733,6 +738,7 @@ public class StyledEditorKit extends DefaultEditorKit { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class BoldAction extends StyledTextAction { /** @@ -772,6 +778,7 @@ public class StyledEditorKit extends DefaultEditorKit { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class ItalicAction extends StyledTextAction { /** @@ -811,6 +818,7 @@ public class StyledEditorKit extends DefaultEditorKit { * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. */ + @SuppressWarnings("serial") // Same-version serialization only public static class UnderlineAction extends StyledTextAction { /** diff --git a/jdk/src/share/classes/javax/swing/text/TabSet.java b/jdk/src/share/classes/javax/swing/text/TabSet.java index 2a5351607c2..6464125fbab 100644 --- a/jdk/src/share/classes/javax/swing/text/TabSet.java +++ b/jdk/src/share/classes/javax/swing/text/TabSet.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -43,6 +43,7 @@ import java.io.Serializable; * * @author Scott Violet */ +@SuppressWarnings("serial") // Same-version serialization only public class TabSet implements Serializable { /** TabStops this TabSet contains. */ diff --git a/jdk/src/share/classes/javax/swing/text/TabStop.java b/jdk/src/share/classes/javax/swing/text/TabStop.java index a78ea24b0c7..27112103dd2 100644 --- a/jdk/src/share/classes/javax/swing/text/TabStop.java +++ b/jdk/src/share/classes/javax/swing/text/TabStop.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -42,6 +42,7 @@ import java.io.Serializable; * Please see {@link java.beans.XMLEncoder}. * */ +@SuppressWarnings("serial") // Same-version serialization only public class TabStop implements Serializable { /** Character following tab is positioned at location. */ diff --git a/jdk/src/share/classes/javax/swing/text/TextAction.java b/jdk/src/share/classes/javax/swing/text/TextAction.java index bcfa7c39043..9f0c43d861e 100644 --- a/jdk/src/share/classes/javax/swing/text/TextAction.java +++ b/jdk/src/share/classes/javax/swing/text/TextAction.java @@ -58,6 +58,7 @@ import javax.swing.KeyStroke; * * @author Timothy Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public abstract class TextAction extends AbstractAction { /** diff --git a/jdk/src/share/classes/javax/swing/text/html/HTMLDocument.java b/jdk/src/share/classes/javax/swing/text/html/HTMLDocument.java index 254d6156b9f..5aa989411cd 100644 --- a/jdk/src/share/classes/javax/swing/text/html/HTMLDocument.java +++ b/jdk/src/share/classes/javax/swing/text/html/HTMLDocument.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -270,6 +270,7 @@ import static sun.swing.SwingUtilities2.IMPLIED_CR; * @author Scott Violet * @author Sunita Mani */ +@SuppressWarnings("serial") // Same-version serialization only public class HTMLDocument extends DefaultStyledDocument { /** * Constructs an HTML document using the default buffer size diff --git a/jdk/src/share/classes/javax/swing/text/html/HTMLEditorKit.java b/jdk/src/share/classes/javax/swing/text/html/HTMLEditorKit.java index 468f8626d2f..5ec27c0f5c1 100644 --- a/jdk/src/share/classes/javax/swing/text/html/HTMLEditorKit.java +++ b/jdk/src/share/classes/javax/swing/text/html/HTMLEditorKit.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -433,7 +433,7 @@ public class HTMLEditorKit extends StyledEditorKit implements Accessible { * @return the command list */ public Action[] getActions() { - return TextAction.augmentList(super.getActions(), this.defaultActions); + return TextAction.augmentList(super.getActions(), defaultActions); } /** diff --git a/jdk/src/share/classes/javax/swing/text/html/Option.java b/jdk/src/share/classes/javax/swing/text/html/Option.java index 181b87cde5c..011b28a49f4 100644 --- a/jdk/src/share/classes/javax/swing/text/html/Option.java +++ b/jdk/src/share/classes/javax/swing/text/html/Option.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -44,6 +44,7 @@ import javax.swing.text.*; * * @author Timothy Prinzing */ +@SuppressWarnings("serial") // Same-version serialization only public class Option implements Serializable { /** diff --git a/jdk/src/share/classes/javax/swing/text/html/StyleSheet.java b/jdk/src/share/classes/javax/swing/text/html/StyleSheet.java index 2e7998a6670..645327cb809 100644 --- a/jdk/src/share/classes/javax/swing/text/html/StyleSheet.java +++ b/jdk/src/share/classes/javax/swing/text/html/StyleSheet.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -2079,8 +2079,8 @@ public class StyleSheet extends StyleContext { // Parent view. View v = childView.getParent(); HTMLDocument doc = (HTMLDocument)v.getDocument(); - if (doc.matchNameAttribute(v.getElement().getAttributes(), - HTML.Tag.OL)) { + if (HTMLDocument.matchNameAttribute(v.getElement().getAttributes(), + HTML.Tag.OL)) { childtype = CSS.Value.DECIMAL; } else { childtype = CSS.Value.DISC; @@ -2473,13 +2473,13 @@ public class StyleSheet extends StyleContext { flags |= 4; } else if (pos.isHorizontalPositionRelativeToSize()) { - hPosition *= css.getFontSize(a, 12, ss); + hPosition *= CSS.getFontSize(a, 12, ss); } if (pos.isVerticalPositionRelativeToSize()) { flags |= 8; } else if (pos.isVerticalPositionRelativeToFontSize()) { - vPosition *= css.getFontSize(a, 12, ss); + vPosition *= CSS.getFontSize(a, 12, ss); } } // Determine any repeating values. diff --git a/jdk/src/share/classes/javax/swing/text/html/parser/ParserDelegator.java b/jdk/src/share/classes/javax/swing/text/html/parser/ParserDelegator.java index cdea9579fe6..81f7bb2cace 100644 --- a/jdk/src/share/classes/javax/swing/text/html/parser/ParserDelegator.java +++ b/jdk/src/share/classes/javax/swing/text/html/parser/ParserDelegator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -84,7 +84,7 @@ public class ParserDelegator extends HTMLEditorKit.Parser implements Serializabl in = getResourceAsStream(path); if (in != null) { dtd.read(new DataInputStream(new BufferedInputStream(in))); - dtd.putDTDHash(name, dtd); + DTD.putDTDHash(name, dtd); } } catch (Exception e) { System.out.println(e); diff --git a/jdk/src/share/classes/javax/swing/text/rtf/RTFReader.java b/jdk/src/share/classes/javax/swing/text/rtf/RTFReader.java index 5fd48246be8..2e58e6b95b8 100644 --- a/jdk/src/share/classes/javax/swing/text/rtf/RTFReader.java +++ b/jdk/src/share/classes/javax/swing/text/rtf/RTFReader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -599,7 +599,7 @@ static char[] readCharset(InputStream strm) } catch (Exception e) { throw new IOException("Unable to read from character set file (" + e + ")"); } - if (ttype != in.TT_NUMBER) { + if (ttype != StreamTokenizer.TT_NUMBER) { // System.out.println("Bad token: type=" + ttype + " tok=" + in.sval); throw new IOException("Unexpected token in character set file"); // continue; diff --git a/jdk/src/share/classes/javax/swing/tree/AbstractLayoutCache.java b/jdk/src/share/classes/javax/swing/tree/AbstractLayoutCache.java index f44637c9c36..c0e474e26cd 100644 --- a/jdk/src/share/classes/javax/swing/tree/AbstractLayoutCache.java +++ b/jdk/src/share/classes/javax/swing/tree/AbstractLayoutCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -42,7 +42,7 @@ import java.util.Enumeration; * * @author Scott Violet */ - +@SuppressWarnings("serial") // Same-version serialization only public abstract class AbstractLayoutCache implements RowMapper { /** Object responsible for getting the size of a node. */ protected NodeDimensions nodeDimensions; diff --git a/jdk/src/share/classes/javax/swing/tree/DefaultMutableTreeNode.java b/jdk/src/share/classes/javax/swing/tree/DefaultMutableTreeNode.java index 17840426075..c33599064e2 100644 --- a/jdk/src/share/classes/javax/swing/tree/DefaultMutableTreeNode.java +++ b/jdk/src/share/classes/javax/swing/tree/DefaultMutableTreeNode.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -85,6 +85,7 @@ import java.util.*; * * @author Rob Davis */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultMutableTreeNode implements Cloneable, MutableTreeNode, Serializable { diff --git a/jdk/src/share/classes/javax/swing/tree/DefaultTreeCellEditor.java b/jdk/src/share/classes/javax/swing/tree/DefaultTreeCellEditor.java index bc28d5dcfd3..05a6145c598 100644 --- a/jdk/src/share/classes/javax/swing/tree/DefaultTreeCellEditor.java +++ b/jdk/src/share/classes/javax/swing/tree/DefaultTreeCellEditor.java @@ -60,6 +60,7 @@ import java.util.Vector; * * @author Scott Violet */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultTreeCellEditor implements ActionListener, TreeCellEditor, TreeSelectionListener { /** Editor handling the editing. */ diff --git a/jdk/src/share/classes/javax/swing/tree/DefaultTreeCellRenderer.java b/jdk/src/share/classes/javax/swing/tree/DefaultTreeCellRenderer.java index ad2a86bad29..3cc8bd238e5 100644 --- a/jdk/src/share/classes/javax/swing/tree/DefaultTreeCellRenderer.java +++ b/jdk/src/share/classes/javax/swing/tree/DefaultTreeCellRenderer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -103,6 +103,7 @@ import sun.swing.DefaultLookup; * @author Ray Ryan * @author Scott Violet */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultTreeCellRenderer extends JLabel implements TreeCellRenderer { /** Last tree the renderer was painted in. */ diff --git a/jdk/src/share/classes/javax/swing/tree/DefaultTreeModel.java b/jdk/src/share/classes/javax/swing/tree/DefaultTreeModel.java index 5503481a5f7..c3b9de2d698 100644 --- a/jdk/src/share/classes/javax/swing/tree/DefaultTreeModel.java +++ b/jdk/src/share/classes/javax/swing/tree/DefaultTreeModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -49,6 +49,7 @@ import javax.swing.event.*; * @author Ray Ryan * @author Scott Violet */ +@SuppressWarnings("serial") // Same-version serialization only public class DefaultTreeModel implements Serializable, TreeModel { /** Root of the tree. */ protected TreeNode root; diff --git a/jdk/src/share/classes/javax/swing/tree/DefaultTreeSelectionModel.java b/jdk/src/share/classes/javax/swing/tree/DefaultTreeSelectionModel.java index 1f730192455..73054ad0046 100644 --- a/jdk/src/share/classes/javax/swing/tree/DefaultTreeSelectionModel.java +++ b/jdk/src/share/classes/javax/swing/tree/DefaultTreeSelectionModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 diff --git a/jdk/src/share/classes/javax/swing/tree/FixedHeightLayoutCache.java b/jdk/src/share/classes/javax/swing/tree/FixedHeightLayoutCache.java index 0cd55cb843d..fe2ad0b263c 100644 --- a/jdk/src/share/classes/javax/swing/tree/FixedHeightLayoutCache.java +++ b/jdk/src/share/classes/javax/swing/tree/FixedHeightLayoutCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -48,7 +48,7 @@ import sun.swing.SwingUtilities2; * * @author Scott Violet */ - +@SuppressWarnings("serial") // Same-version serialization only public class FixedHeightLayoutCache extends AbstractLayoutCache { /** Root node. */ private FHTreeStateNode root; diff --git a/jdk/src/share/classes/javax/swing/tree/TreePath.java b/jdk/src/share/classes/javax/swing/tree/TreePath.java index 53e285e9538..4ed1dbafd09 100644 --- a/jdk/src/share/classes/javax/swing/tree/TreePath.java +++ b/jdk/src/share/classes/javax/swing/tree/TreePath.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -81,6 +81,7 @@ import java.beans.ConstructorProperties; * @author Scott Violet * @author Philip Milne */ +@SuppressWarnings("serial") // Same-version serialization only public class TreePath extends Object implements Serializable { /** Path representing the parent, null if lastPathComponent represents * the root. */ diff --git a/jdk/src/share/classes/javax/swing/tree/VariableHeightLayoutCache.java b/jdk/src/share/classes/javax/swing/tree/VariableHeightLayoutCache.java index 460f5b77966..770b383b716 100644 --- a/jdk/src/share/classes/javax/swing/tree/VariableHeightLayoutCache.java +++ b/jdk/src/share/classes/javax/swing/tree/VariableHeightLayoutCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,7 +51,7 @@ import sun.swing.SwingUtilities2; * @author Ray Ryan * @author Scott Violet */ - +@SuppressWarnings("serial") // Same-version serialization only public class VariableHeightLayoutCache extends AbstractLayoutCache { /** * The array of nodes that are currently visible, in the order they diff --git a/jdk/src/share/classes/javax/swing/undo/CannotRedoException.java b/jdk/src/share/classes/javax/swing/undo/CannotRedoException.java index e59e3f5eb14..15ed0c1b4b4 100644 --- a/jdk/src/share/classes/javax/swing/undo/CannotRedoException.java +++ b/jdk/src/share/classes/javax/swing/undo/CannotRedoException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -38,5 +38,6 @@ package javax.swing.undo; * * @author Ray Ryan */ +@SuppressWarnings("serial") // Same-version serialization only public class CannotRedoException extends RuntimeException { } diff --git a/jdk/src/share/classes/javax/swing/undo/CannotUndoException.java b/jdk/src/share/classes/javax/swing/undo/CannotUndoException.java index 2779eaa8b54..35606df3f69 100644 --- a/jdk/src/share/classes/javax/swing/undo/CannotUndoException.java +++ b/jdk/src/share/classes/javax/swing/undo/CannotUndoException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -39,5 +39,6 @@ package javax.swing.undo; * * @author Ray Ryan */ +@SuppressWarnings("serial") // Same-version serialization only public class CannotUndoException extends RuntimeException { } diff --git a/jdk/src/share/classes/javax/swing/undo/UndoManager.java b/jdk/src/share/classes/javax/swing/undo/UndoManager.java index 23dc9b5884e..a95ebf25ce8 100644 --- a/jdk/src/share/classes/javax/swing/undo/UndoManager.java +++ b/jdk/src/share/classes/javax/swing/undo/UndoManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -132,6 +132,7 @@ import java.util.*; * * @author Ray Ryan */ +@SuppressWarnings("serial") // Same-version serialization only public class UndoManager extends CompoundEdit implements UndoableEditListener { int indexOfNextAdd; int limit; diff --git a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMPGPData.java b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMPGPData.java index d37cb62880c..bf3109c49d9 100644 --- a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMPGPData.java +++ b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMPGPData.java @@ -85,7 +85,7 @@ public final class DOMPGPData extends DOMStructure implements PGPData { } } } - this.keyPacket = (byte[])keyPacket.clone(); + this.keyPacket = keyPacket.clone(); checkKeyPacket(keyPacket); this.keyId = null; } @@ -132,9 +132,9 @@ public final class DOMPGPData extends DOMStructure implements PGPData { } } } - this.keyId = (byte[])keyId.clone(); + this.keyId = keyId.clone(); this.keyPacket = keyPacket == null ? null - : (byte[])keyPacket.clone(); + : keyPacket.clone(); if (keyPacket != null) { checkKeyPacket(keyPacket); } @@ -177,11 +177,11 @@ public final class DOMPGPData extends DOMStructure implements PGPData { } public byte[] getKeyId() { - return (keyId == null ? null : (byte[])keyId.clone()); + return (keyId == null ? null : keyId.clone()); } public byte[] getKeyPacket() { - return (keyPacket == null ? null : (byte[])keyPacket.clone()); + return (keyPacket == null ? null : keyPacket.clone()); } public List getExternalElements() { diff --git a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java index f80df4dac42..de4f9f833d1 100644 --- a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java +++ b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java @@ -182,7 +182,7 @@ public final class DOMReference extends DOMStructure this.type = type; this.id = id; if (digestValue != null) { - this.digestValue = (byte[])digestValue.clone(); + this.digestValue = digestValue.clone(); this.digested = true; } this.appliedTransformData = result; @@ -298,12 +298,12 @@ public final class DOMReference extends DOMStructure } public byte[] getDigestValue() { - return (digestValue == null ? null : (byte[])digestValue.clone()); + return (digestValue == null ? null : digestValue.clone()); } public byte[] getCalculatedDigestValue() { return (calcDigestValue == null ? null - : (byte[])calcDigestValue.clone()); + : calcDigestValue.clone()); } public void marshal(Node parent, String dsPrefix, DOMCryptoContext context) diff --git a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java index 32c1dcf06c0..e2cbf656993 100644 --- a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java +++ b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java @@ -535,7 +535,7 @@ public final class DOMXMLSignature extends DOMStructure } public byte[] getValue() { - return (value == null) ? null : (byte[])value.clone(); + return (value == null) ? null : value.clone(); } public boolean validate(XMLValidateContext validateContext) diff --git a/jdk/src/share/classes/sun/applet/AppletImageRef.java b/jdk/src/share/classes/sun/applet/AppletImageRef.java index fa9b2d73009..f264e890351 100644 --- a/jdk/src/share/classes/sun/applet/AppletImageRef.java +++ b/jdk/src/share/classes/sun/applet/AppletImageRef.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, 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,12 +27,32 @@ package sun.applet; import java.awt.Toolkit; import java.awt.Image; +import java.lang.ref.SoftReference; import sun.awt.image.URLImageSource; import java.net.URL; -class AppletImageRef extends sun.misc.Ref { +class AppletImageRef { + private SoftReference soft = null; + URL url; + /** + * Returns a pointer to the object referenced by this Ref. If the object + * has been thrown away by the garbage collector, it will be + * reconstituted. This method does everything necessary to ensure that the garbage + * collector throws things away in Least Recently Used(LRU) order. Applications should + * never override this method. The get() method effectively caches calls to + * reconstitute(). + */ + public synchronized Image get() { + Image t = check(); + if (t == null) { + t = reconstitute(); + setThing(t); + } + return t; + } + /** * Create the Ref */ @@ -40,14 +60,38 @@ class AppletImageRef extends sun.misc.Ref { this.url = url; } - public void flush() { - super.flush(); + /** + * Flushes the cached object. Forces the next invocation of get() to + * invoke reconstitute(). + */ + public synchronized void flush() { + SoftReference s = soft; + if (s != null) s.clear(); + soft = null; + } + + /** + * Sets the thing to the specified object. + * @param thing the specified object + */ + public synchronized void setThing(Object thing) { + flush(); + soft = new SoftReference(thing); + } + + /** + * Checks to see what object is being pointed at by this Ref and returns it. + */ + public synchronized Image check() { + SoftReference s = soft; + if (s == null) return null; + return s.get(); } /** * Reconsitute the image. Only called when the ref has been flushed. */ - public Object reconstitute() { + public Image reconstitute() { Image img = Toolkit.getDefaultToolkit().createImage(new URLImageSource(url)); return img; } diff --git a/jdk/src/share/classes/sun/applet/AppletMessageHandler.java b/jdk/src/share/classes/sun/applet/AppletMessageHandler.java index 44e208c626f..d05dc0bfc19 100644 --- a/jdk/src/share/classes/sun/applet/AppletMessageHandler.java +++ b/jdk/src/share/classes/sun/applet/AppletMessageHandler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 1997, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -53,11 +53,11 @@ class AppletMessageHandler { } String getMessage(String key) { - return (String)rb.getString(getQualifiedKey(key)); + return rb.getString(getQualifiedKey(key)); } String getMessage(String key, Object arg){ - String basemsgfmt = (String)rb.getString(getQualifiedKey(key)); + String basemsgfmt = rb.getString(getQualifiedKey(key)); MessageFormat msgfmt = new MessageFormat(basemsgfmt); Object msgobj[] = new Object[1]; if (arg == null) { @@ -68,7 +68,7 @@ class AppletMessageHandler { } String getMessage(String key, Object arg1, Object arg2) { - String basemsgfmt = (String)rb.getString(getQualifiedKey(key)); + String basemsgfmt = rb.getString(getQualifiedKey(key)); MessageFormat msgfmt = new MessageFormat(basemsgfmt); Object msgobj[] = new Object[2]; if (arg1 == null) { @@ -83,7 +83,7 @@ class AppletMessageHandler { } String getMessage(String key, Object arg1, Object arg2, Object arg3) { - String basemsgfmt = (String)rb.getString(getQualifiedKey(key)); + String basemsgfmt = rb.getString(getQualifiedKey(key)); MessageFormat msgfmt = new MessageFormat(basemsgfmt); Object msgobj[] = new Object[3]; if (arg1 == null) { @@ -102,7 +102,7 @@ class AppletMessageHandler { } String getMessage(String key, Object arg[]) { - String basemsgfmt = (String)rb.getString(getQualifiedKey(key)); + String basemsgfmt = rb.getString(getQualifiedKey(key)); MessageFormat msgfmt = new MessageFormat(basemsgfmt); return msgfmt.format(arg); } diff --git a/jdk/src/share/classes/sun/applet/AppletPanel.java b/jdk/src/share/classes/sun/applet/AppletPanel.java index 2d1da2cdac0..52ddab9e5db 100644 --- a/jdk/src/share/classes/sun/applet/AppletPanel.java +++ b/jdk/src/share/classes/sun/applet/AppletPanel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, 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 @@ -1215,8 +1215,8 @@ abstract class AppletPanel extends Panel implements AppletStub, Runnable { synchronized(appletClass) { // Determine if the JDK level of an applet has been // checked before. - Boolean jdk11Target = (Boolean) loader.isJDK11Target(appletClass); - Boolean jdk12Target = (Boolean) loader.isJDK12Target(appletClass); + Boolean jdk11Target = loader.isJDK11Target(appletClass); + Boolean jdk12Target = loader.isJDK12Target(appletClass); // if applet JDK level has been checked before, retrieve // value and return. diff --git a/jdk/src/share/classes/sun/applet/AppletProps.java b/jdk/src/share/classes/sun/applet/AppletProps.java index 429afdcc41c..38a76a4afc2 100644 --- a/jdk/src/share/classes/sun/applet/AppletProps.java +++ b/jdk/src/share/classes/sun/applet/AppletProps.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -75,12 +75,12 @@ class AppletProps extends Frame { if (security != null) security.reset(); - String proxyhost = (String) AccessController.doPrivileged( + String proxyhost = AccessController.doPrivileged( new GetPropertyAction("http.proxyHost")); - String proxyport = (String) AccessController.doPrivileged( + String proxyport = AccessController.doPrivileged( new GetPropertyAction("http.proxyPort")); - Boolean tmp = (Boolean) AccessController.doPrivileged( + Boolean tmp = AccessController.doPrivileged( new GetBooleanAction("package.restrict.access.sun")); boolean packageRestrict = tmp.booleanValue(); diff --git a/jdk/src/share/classes/sun/applet/AppletResourceLoader.java b/jdk/src/share/classes/sun/applet/AppletResourceLoader.java index 3470557cf6b..f0d84671e11 100644 --- a/jdk/src/share/classes/sun/applet/AppletResourceLoader.java +++ b/jdk/src/share/classes/sun/applet/AppletResourceLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 1998, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2014, 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,21 +27,17 @@ package sun.applet; import java.net.URL; import java.awt.Image; -import sun.misc.Ref; /** * Part of this class still remains only to support legacy, 100%-impure * applications such as HotJava 1.0.1. */ +@Deprecated public class AppletResourceLoader { public static Image getImage(URL url) { return AppletViewer.getCachedImage(url); } - public static Ref getImageRef(URL url) { - return AppletViewer.getCachedImageRef(url); - } - public static void flushImages() { AppletViewer.flushImageCache(); } diff --git a/jdk/src/share/classes/sun/applet/AppletViewer.java b/jdk/src/share/classes/sun/applet/AppletViewer.java index 03335e83ab9..a97ac33bbe0 100644 --- a/jdk/src/share/classes/sun/applet/AppletViewer.java +++ b/jdk/src/share/classes/sun/applet/AppletViewer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, 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,7 +35,6 @@ import java.applet.*; import java.net.URL; import java.net.MalformedURLException; import java.net.SocketPermission; -import sun.misc.Ref; import java.security.AccessController; import java.security.PrivilegedAction; import java.lang.reflect.InvocationTargetException; @@ -390,22 +389,18 @@ public class AppletViewer extends Frame implements AppletContext, return getCachedImage(url); } + /** + * Get an image. + */ static Image getCachedImage(URL url) { // System.getSecurityManager().checkConnection(url.getHost(), url.getPort()); - return (Image)getCachedImageRef(url).get(); - } - - /** - * Get an image ref. - */ - static Ref getCachedImageRef(URL url) { synchronized (imageRefs) { AppletImageRef ref = (AppletImageRef)imageRefs.get(url); if (ref == null) { ref = new AppletImageRef(url); imageRefs.put(url, ref); } - return ref; + return ref.get(); } } diff --git a/jdk/src/share/classes/sun/applet/Main.java b/jdk/src/share/classes/sun/applet/Main.java index 23670743740..0ce2c129b75 100644 --- a/jdk/src/share/classes/sun/applet/Main.java +++ b/jdk/src/share/classes/sun/applet/Main.java @@ -369,7 +369,7 @@ public class Main { Properties sysProps = System.getProperties(); for (Enumeration e = sysProps.propertyNames(); e.hasMoreElements(); ) { String key = (String) e.nextElement(); - String val = (String) sysProps.getProperty(key); + String val = sysProps.getProperty(key); String oldVal; if ((oldVal = (String) avProps.setProperty(key, val)) != null) System.err.println(lookup("main.warn.prop.overwrite", key, diff --git a/jdk/src/share/classes/sun/audio/AudioStream.java b/jdk/src/share/classes/sun/audio/AudioStream.java index 7fdf2559b97..266f5eb88ef 100644 --- a/jdk/src/share/classes/sun/audio/AudioStream.java +++ b/jdk/src/share/classes/sun/audio/AudioStream.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -133,7 +133,7 @@ public final class AudioStream extends FilterInputStream { ais.getFormat().getFrameSize() ); } else if ( midiformat != null ) { - return (int) midiformat.getByteLength(); + return midiformat.getByteLength(); } else { return -1; diff --git a/jdk/src/share/classes/sun/awt/CustomCursor.java b/jdk/src/share/classes/sun/awt/CustomCursor.java index a3863e9b6bd..6dad03c8c71 100644 --- a/jdk/src/share/classes/sun/awt/CustomCursor.java +++ b/jdk/src/share/classes/sun/awt/CustomCursor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 1999, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,6 +33,7 @@ import java.awt.image.*; * * @author ThomasBall */ +@SuppressWarnings("serial") // JDK-implementation class public abstract class CustomCursor extends Cursor { protected Image image; diff --git a/jdk/src/share/classes/sun/awt/FontConfiguration.java b/jdk/src/share/classes/sun/awt/FontConfiguration.java index e779316cb91..4cdc3d80c94 100644 --- a/jdk/src/share/classes/sun/awt/FontConfiguration.java +++ b/jdk/src/share/classes/sun/awt/FontConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2014, 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 @@ -1504,10 +1504,10 @@ public abstract class FontConfiguration { printTable(table_elcIDs, 0); System.out.println("\n----sequences-------------"); for (int ii = 0; ii< table_elcIDs.length; ii++) { - System.out.println(" " + ii + "/" + getString((short)table_elcIDs[ii])); + System.out.println(" " + ii + "/" + getString(table_elcIDs[ii])); short[] ss = getShortArray(table_sequences[ii * NUM_FONTS + 0]); for (int jj = 0; jj < ss.length; jj++) { - System.out.println(" " + getString((short)table_scriptIDs[ss[jj]])); + System.out.println(" " + getString(table_scriptIDs[ss[jj]])); } } System.out.println("\n----fontfileNameIDs-------"); @@ -1533,9 +1533,9 @@ public abstract class FontConfiguration { System.out.println("\n----proportionals--------"); for (int ii = 0; ii < table_proportionals.length; ii++) { System.out.println(" " - + getString((short)table_componentFontNameIDs[table_proportionals[ii++]]) + + getString(table_componentFontNameIDs[table_proportionals[ii++]]) + " -> " - + getString((short)table_componentFontNameIDs[table_proportionals[ii]])); + + getString(table_componentFontNameIDs[table_proportionals[ii]])); } int i = 0; System.out.println("\n----alphabeticSuffix----"); @@ -2109,6 +2109,7 @@ public abstract class FontConfiguration { return ret; } + @SuppressWarnings("serial") // JDK-implementation class class FontProperties extends Properties { public synchronized Object put(Object k, Object v) { parseProperty((String)k, (String)v); diff --git a/jdk/src/share/classes/sun/awt/FontDescriptor.java b/jdk/src/share/classes/sun/awt/FontDescriptor.java index fc1df5a2a50..0a4f0045906 100644 --- a/jdk/src/share/classes/sun/awt/FontDescriptor.java +++ b/jdk/src/share/classes/sun/awt/FontDescriptor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2014, 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 @@ -113,7 +113,7 @@ public class FontDescriptor implements Cloneable { } static boolean isLE; static { - String enc = (String) java.security.AccessController.doPrivileged( + String enc = java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction("sun.io.unicode.encoding", "UnicodeBig")); isLE = !"UnicodeBig".equals(enc); diff --git a/jdk/src/share/classes/sun/awt/IconInfo.java b/jdk/src/share/classes/sun/awt/IconInfo.java index 0ae1f733e05..8473fdee764 100644 --- a/jdk/src/share/classes/sun/awt/IconInfo.java +++ b/jdk/src/share/classes/sun/awt/IconInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2014, 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 @@ -182,7 +182,7 @@ public class IconInfo { private static long[] intArrayToLongArray(int[] intData) { long[] longData = new long[intData.length]; for (int i = 0; i < intData.length; i++) { - longData[i] = (int)intData[i]; + longData[i] = intData[i]; } return longData; } diff --git a/jdk/src/share/classes/sun/awt/PlatformFont.java b/jdk/src/share/classes/sun/awt/PlatformFont.java index 74e75ac8496..f88b192715f 100644 --- a/jdk/src/share/classes/sun/awt/PlatformFont.java +++ b/jdk/src/share/classes/sun/awt/PlatformFont.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -270,7 +270,7 @@ public abstract class PlatformFont implements FontPeer { currentDefaultChar = data[stringIndex]; // Note that cache sizes must be a power of two! - cacheIndex = (int)(currentDefaultChar & this.FONTCACHEMASK); + cacheIndex = (currentDefaultChar & PlatformFont.FONTCACHEMASK); theChar = (PlatformFontCache)getFontCache()[cacheIndex]; @@ -280,7 +280,7 @@ public abstract class PlatformFont implements FontPeer { /* find a converter that can convert the current character */ currentFontDescriptor = defaultFont; currentDefaultChar = defaultChar; - char ch = (char)data[stringIndex]; + char ch = data[stringIndex]; int componentCount = componentFonts.length; for (int j = 0; j < componentCount; j++) { @@ -309,7 +309,7 @@ public abstract class PlatformFont implements FontPeer { theChar.bb, true); */ - if (currentFontDescriptor.isLE) { + if (FontDescriptor.isLE) { theChar.bb.put((byte)(input[0] & 0xff)); theChar.bb.put((byte)(input[0] >>8)); } else { @@ -420,7 +420,7 @@ public abstract class PlatformFont implements FontPeer { // twice or return an array which will be dereferenced and gced // right away. if (fontCache == null) { - fontCache = new Object[this.FONTCACHESIZE]; + fontCache = new Object[PlatformFont.FONTCACHESIZE]; } return fontCache; diff --git a/jdk/src/share/classes/sun/awt/TimedWindowEvent.java b/jdk/src/share/classes/sun/awt/TimedWindowEvent.java index 21353f789d7..780b3d572e6 100644 --- a/jdk/src/share/classes/sun/awt/TimedWindowEvent.java +++ b/jdk/src/share/classes/sun/awt/TimedWindowEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,6 +28,7 @@ package sun.awt; import java.awt.event.WindowEvent; import java.awt.Window; +@SuppressWarnings("serial") // JDK-implementation class public class TimedWindowEvent extends WindowEvent { private long time; diff --git a/jdk/src/share/classes/sun/awt/datatransfer/ClipboardTransferable.java b/jdk/src/share/classes/sun/awt/datatransfer/ClipboardTransferable.java index 9439ec569b4..110d7bd532f 100644 --- a/jdk/src/share/classes/sun/awt/datatransfer/ClipboardTransferable.java +++ b/jdk/src/share/classes/sun/awt/datatransfer/ClipboardTransferable.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -97,8 +97,7 @@ public class ClipboardTransferable implements Transferable { fetchOneFlavor(clipboard, flavor, lFormat, cached_data); } - flavors = DataTransferer.getInstance(). - setToSortedDataFlavorArray(flavorsToData.keySet()); + flavors = DataTransferer.setToSortedDataFlavorArray(flavorsToData.keySet()); } } finally { clipboard.closeClipboard(); @@ -145,7 +144,7 @@ public class ClipboardTransferable implements Transferable { } public DataFlavor[] getTransferDataFlavors() { - return (DataFlavor[])flavors.clone(); + return flavors.clone(); } public boolean isDataFlavorSupported(DataFlavor flavor) { diff --git a/jdk/src/share/classes/sun/awt/dnd/SunDragSourceContextPeer.java b/jdk/src/share/classes/sun/awt/dnd/SunDragSourceContextPeer.java index 67c9cb4f516..ae0a642dcb2 100644 --- a/jdk/src/share/classes/sun/awt/dnd/SunDragSourceContextPeer.java +++ b/jdk/src/share/classes/sun/awt/dnd/SunDragSourceContextPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -130,8 +130,7 @@ public abstract class SunDragSourceContextPeer implements DragSourceContextPeer SortedMap formatMap = DataTransferer.getInstance(). getFormatsForTransferable(transferable, DataTransferer.adaptFlavorMap (getTrigger().getDragSource().getFlavorMap())); - long[] formats = DataTransferer.getInstance(). - keysToLongArray(formatMap); + long[] formats = DataTransferer.keysToLongArray(formatMap); startDrag(transferable, formats, formatMap); /* diff --git a/jdk/src/share/classes/sun/awt/dnd/SunDropTargetEvent.java b/jdk/src/share/classes/sun/awt/dnd/SunDropTargetEvent.java index aff7b8a80d6..64685e571a2 100644 --- a/jdk/src/share/classes/sun/awt/dnd/SunDropTargetEvent.java +++ b/jdk/src/share/classes/sun/awt/dnd/SunDropTargetEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,6 +29,7 @@ import java.awt.Component; import java.awt.dnd.InvalidDnDOperationException; import java.awt.event.MouseEvent; +@SuppressWarnings("serial") // JDK-implementation class public class SunDropTargetEvent extends MouseEvent { public static final int MOUSE_DROPPED = MouseEvent.MOUSE_RELEASED; diff --git a/jdk/src/share/classes/sun/awt/event/IgnorePaintEvent.java b/jdk/src/share/classes/sun/awt/event/IgnorePaintEvent.java index c0d38694381..1f59869027d 100644 --- a/jdk/src/share/classes/sun/awt/event/IgnorePaintEvent.java +++ b/jdk/src/share/classes/sun/awt/event/IgnorePaintEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, 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,6 +35,7 @@ import java.awt.event.PaintEvent; * Look at javax.swing.SwingPaintEventDispatcher for more. * */ +@SuppressWarnings("serial") // JDK-implementation class public class IgnorePaintEvent extends PaintEvent { public IgnorePaintEvent(Component source, int id, Rectangle updateRect) { super(source, id, updateRect); diff --git a/jdk/src/share/classes/sun/awt/geom/Crossings.java b/jdk/src/share/classes/sun/awt/geom/Crossings.java index 6275c4dfeba..7ab97bce80c 100644 --- a/jdk/src/share/classes/sun/awt/geom/Crossings.java +++ b/jdk/src/share/classes/sun/awt/geom/Crossings.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -100,7 +100,7 @@ public abstract class Crossings { double xhi, double yhi) { Crossings cross; - if (pi.getWindingRule() == pi.WIND_EVEN_ODD) { + if (pi.getWindingRule() == PathIterator.WIND_EVEN_ODD) { cross = new EvenOdd(xlo, ylo, xhi, yhi); } else { cross = new NonZero(xlo, ylo, xhi, yhi); diff --git a/jdk/src/share/classes/sun/awt/image/BadDepthException.java b/jdk/src/share/classes/sun/awt/image/BadDepthException.java index 19adf69fbe6..f9d264f22fb 100644 --- a/jdk/src/share/classes/sun/awt/image/BadDepthException.java +++ b/jdk/src/share/classes/sun/awt/image/BadDepthException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ package sun.awt.image; +@SuppressWarnings("serial") // JDK-implementation class public class BadDepthException extends Exception { public BadDepthException() { } diff --git a/jdk/src/share/classes/sun/awt/image/ByteBandedRaster.java b/jdk/src/share/classes/sun/awt/image/ByteBandedRaster.java index e3277160b70..78903979d6f 100644 --- a/jdk/src/share/classes/sun/awt/image/ByteBandedRaster.java +++ b/jdk/src/share/classes/sun/awt/image/ByteBandedRaster.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -169,7 +169,7 @@ public class ByteBandedRaster extends SunWritableRaster { * of the band. */ public int[] getDataOffsets() { - return (int[])dataOffsets.clone(); + return dataOffsets.clone(); } /** diff --git a/jdk/src/share/classes/sun/awt/image/ByteComponentRaster.java b/jdk/src/share/classes/sun/awt/image/ByteComponentRaster.java index 13954f3a364..9695d3a0df8 100644 --- a/jdk/src/share/classes/sun/awt/image/ByteComponentRaster.java +++ b/jdk/src/share/classes/sun/awt/image/ByteComponentRaster.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -207,7 +207,7 @@ public class ByteComponentRaster extends SunWritableRaster { * band. */ public int[] getDataOffsets() { - return (int[]) dataOffsets.clone(); + return dataOffsets.clone(); } /** diff --git a/jdk/src/share/classes/sun/awt/image/ByteInterleavedRaster.java b/jdk/src/share/classes/sun/awt/image/ByteInterleavedRaster.java index 4279ce1f90a..ec0fef12623 100644 --- a/jdk/src/share/classes/sun/awt/image/ByteInterleavedRaster.java +++ b/jdk/src/share/classes/sun/awt/image/ByteInterleavedRaster.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -259,7 +259,7 @@ public class ByteInterleavedRaster extends ByteComponentRaster { * band. */ public int[] getDataOffsets() { - return (int[]) dataOffsets.clone(); + return dataOffsets.clone(); } /** diff --git a/jdk/src/share/classes/sun/awt/image/ImageAccessException.java b/jdk/src/share/classes/sun/awt/image/ImageAccessException.java index 43602f64b66..402e2a26caa 100644 --- a/jdk/src/share/classes/sun/awt/image/ImageAccessException.java +++ b/jdk/src/share/classes/sun/awt/image/ImageAccessException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ package sun.awt.image; +@SuppressWarnings("serial") // JDK-implementation class public class ImageAccessException extends Exception { public ImageAccessException(String s) { super(s); diff --git a/jdk/src/share/classes/sun/awt/image/ImageFetcher.java b/jdk/src/share/classes/sun/awt/image/ImageFetcher.java index 6f9501301cf..a5af63512c7 100644 --- a/jdk/src/share/classes/sun/awt/image/ImageFetcher.java +++ b/jdk/src/share/classes/sun/awt/image/ImageFetcher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, 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 @@ -195,7 +195,7 @@ class ImageFetcher extends Thread { // the fetcher was interrupted, as we used to, // because there may be other images waiting // to be fetched (see 4789067) - me.interrupted(); + Thread.interrupted(); me.setPriority(HIGH_PRIORITY); ImageFetchable src = nextImage(); if (src == null) { diff --git a/jdk/src/share/classes/sun/awt/image/ImageFormatException.java b/jdk/src/share/classes/sun/awt/image/ImageFormatException.java index 4812efe37c2..6a70d728f8f 100644 --- a/jdk/src/share/classes/sun/awt/image/ImageFormatException.java +++ b/jdk/src/share/classes/sun/awt/image/ImageFormatException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ package sun.awt.image; +@SuppressWarnings("serial") // JDK-implementation class public class ImageFormatException extends Exception { public ImageFormatException(String s) { super(s); diff --git a/jdk/src/share/classes/sun/awt/image/ImageRepresentation.java b/jdk/src/share/classes/sun/awt/image/ImageRepresentation.java index 18fb13ed69b..77ee7339a59 100644 --- a/jdk/src/share/classes/sun/awt/image/ImageRepresentation.java +++ b/jdk/src/share/classes/sun/awt/image/ImageRepresentation.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, 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 @@ -209,7 +209,7 @@ public class ImageRepresentation extends ImageWatched implements ImageConsumer // Check to see if model is INT_RGB if (model instanceof IndexColorModel) { - if (model.getTransparency() == model.TRANSLUCENT) { + if (model.getTransparency() == Transparency.TRANSLUCENT) { // REMIND: // Probably need to composite anyway so force ARGB cmodel = ColorModel.getRGBdefault(); @@ -586,8 +586,8 @@ public class ImageRepresentation extends ImageWatched implements ImageConsumer } } else { - if (model.getTransparency() != model.OPAQUE && - cmodel.getTransparency() == cmodel.OPAQUE) { + if (model.getTransparency() != Transparency.OPAQUE && + cmodel.getTransparency() == Transparency.OPAQUE) { convertToRGB(); } diff --git a/jdk/src/share/classes/sun/awt/image/IntegerComponentRaster.java b/jdk/src/share/classes/sun/awt/image/IntegerComponentRaster.java index 2f495971cf4..a95ce0d015d 100644 --- a/jdk/src/share/classes/sun/awt/image/IntegerComponentRaster.java +++ b/jdk/src/share/classes/sun/awt/image/IntegerComponentRaster.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -218,7 +218,7 @@ public class IntegerComponentRaster extends SunWritableRaster { * band. */ public int[] getDataOffsets() { - return (int[]) dataOffsets.clone(); + return dataOffsets.clone(); } /** diff --git a/jdk/src/share/classes/sun/awt/image/IntegerInterleavedRaster.java b/jdk/src/share/classes/sun/awt/image/IntegerInterleavedRaster.java index 2d0d22ec59c..b226f07efcb 100644 --- a/jdk/src/share/classes/sun/awt/image/IntegerInterleavedRaster.java +++ b/jdk/src/share/classes/sun/awt/image/IntegerInterleavedRaster.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -161,7 +161,7 @@ public class IntegerInterleavedRaster extends IntegerComponentRaster { * band. */ public int[] getDataOffsets() { - return (int[]) dataOffsets.clone(); + return dataOffsets.clone(); } /** diff --git a/jdk/src/share/classes/sun/awt/image/PNGImageDecoder.java b/jdk/src/share/classes/sun/awt/image/PNGImageDecoder.java index 69bb984c514..adbdb766da1 100644 --- a/jdk/src/share/classes/sun/awt/image/PNGImageDecoder.java +++ b/jdk/src/share/classes/sun/awt/image/PNGImageDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -231,6 +231,7 @@ public class PNGImageDecoder extends ImageDecoder } return true; } + @SuppressWarnings("serial") // JDK-implementation class public class PNGException extends IOException { PNGException(String s) { super(s); } } diff --git a/jdk/src/share/classes/sun/awt/image/ShortBandedRaster.java b/jdk/src/share/classes/sun/awt/image/ShortBandedRaster.java index 058a2573c09..45ef9eb21f3 100644 --- a/jdk/src/share/classes/sun/awt/image/ShortBandedRaster.java +++ b/jdk/src/share/classes/sun/awt/image/ShortBandedRaster.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -165,7 +165,7 @@ public class ShortBandedRaster extends SunWritableRaster { * band. */ public int[] getDataOffsets() { - return (int[]) dataOffsets.clone(); + return dataOffsets.clone(); } /** diff --git a/jdk/src/share/classes/sun/awt/image/ShortComponentRaster.java b/jdk/src/share/classes/sun/awt/image/ShortComponentRaster.java index a84da635599..53f3ff3e3e6 100644 --- a/jdk/src/share/classes/sun/awt/image/ShortComponentRaster.java +++ b/jdk/src/share/classes/sun/awt/image/ShortComponentRaster.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -207,7 +207,7 @@ public class ShortComponentRaster extends SunWritableRaster { * band. */ public int[] getDataOffsets() { - return (int[]) dataOffsets.clone(); + return dataOffsets.clone(); } /** @@ -470,7 +470,7 @@ public class ShortComponentRaster extends SunWritableRaster { int off = (y-minY)*scanlineStride + (x-minX)*pixelStride; for (int i = 0; i < numDataElements; i++) { - data[dataOffsets[i] + off] = (short) inData[i]; + data[dataOffsets[i] + off] = inData[i]; } markDirty(); @@ -576,7 +576,7 @@ public class ShortComponentRaster extends SunWritableRaster { xoff = yoff; for (xstart=0; xstart < w; xstart++, xoff += pixelStride) { for (int c = 0; c < numDataElements; c++) { - data[dataOffsets[c] + xoff] = (short) inData[off++]; + data[dataOffsets[c] + xoff] = inData[off++]; } } } diff --git a/jdk/src/share/classes/sun/awt/image/ShortInterleavedRaster.java b/jdk/src/share/classes/sun/awt/image/ShortInterleavedRaster.java index c55d111d7fd..4602c19aab0 100644 --- a/jdk/src/share/classes/sun/awt/image/ShortInterleavedRaster.java +++ b/jdk/src/share/classes/sun/awt/image/ShortInterleavedRaster.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -180,7 +180,7 @@ public class ShortInterleavedRaster extends ShortComponentRaster { * band. */ public int[] getDataOffsets() { - return (int[]) dataOffsets.clone(); + return dataOffsets.clone(); } /** @@ -443,7 +443,7 @@ public class ShortInterleavedRaster extends ShortComponentRaster { int off = (y-minY)*scanlineStride + (x-minX)*pixelStride; for (int i = 0; i < numDataElements; i++) { - data[dataOffsets[i] + off] = (short) inData[i]; + data[dataOffsets[i] + off] = inData[i]; } markDirty(); } @@ -548,7 +548,7 @@ public class ShortInterleavedRaster extends ShortComponentRaster { xoff = yoff; for (xstart=0; xstart < w; xstart++, xoff += pixelStride) { for (int c = 0; c < numDataElements; c++) { - data[dataOffsets[c] + xoff] = (short) inData[off++]; + data[dataOffsets[c] + xoff] = inData[off++]; } } } diff --git a/jdk/src/share/classes/sun/awt/image/VSyncedBSManager.java b/jdk/src/share/classes/sun/awt/image/VSyncedBSManager.java index 91cb0684244..1445795abe7 100644 --- a/jdk/src/share/classes/sun/awt/image/VSyncedBSManager.java +++ b/jdk/src/share/classes/sun/awt/image/VSyncedBSManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, 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 @@ -36,7 +36,7 @@ public abstract class VSyncedBSManager { private static VSyncedBSManager theInstance; private static final boolean vSyncLimit = - Boolean.valueOf((String)java.security.AccessController.doPrivileged( + Boolean.valueOf(java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction( "sun.java2d.vsynclimit", "true"))); diff --git a/jdk/src/share/classes/sun/awt/shell/DefaultShellFolder.java b/jdk/src/share/classes/sun/awt/shell/DefaultShellFolder.java index 860c980d6aa..b44776228d8 100644 --- a/jdk/src/share/classes/sun/awt/shell/DefaultShellFolder.java +++ b/jdk/src/share/classes/sun/awt/shell/DefaultShellFolder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -34,7 +34,7 @@ import sun.security.action.GetPropertyAction; * @author Michael Martak * @since 1.4 */ - +@SuppressWarnings("serial") // JDK-implementation class class DefaultShellFolder extends ShellFolder { /** diff --git a/jdk/src/share/classes/sun/awt/shell/ShellFolder.java b/jdk/src/share/classes/sun/awt/shell/ShellFolder.java index 630d4faa9cd..cb9459f1d41 100644 --- a/jdk/src/share/classes/sun/awt/shell/ShellFolder.java +++ b/jdk/src/share/classes/sun/awt/shell/ShellFolder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,7 +37,7 @@ import java.util.concurrent.Callable; * @author Michael Martak * @since 1.4 */ - +@SuppressWarnings("serial") // JDK-implementation class public abstract class ShellFolder extends File { private static final String COLUMN_NAME = "FileChooser.fileNameHeaderText"; private static final String COLUMN_SIZE = "FileChooser.fileSizeHeaderText"; diff --git a/jdk/src/share/classes/sun/font/CompositeFont.java b/jdk/src/share/classes/sun/font/CompositeFont.java index 43b392b5ff2..54329695d49 100644 --- a/jdk/src/share/classes/sun/font/CompositeFont.java +++ b/jdk/src/share/classes/sun/font/CompositeFont.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -447,7 +447,7 @@ public final class CompositeFont extends Font2D { } public String toString() { - String ls = (String)java.security.AccessController.doPrivileged( + String ls = java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction("line.separator")); String componentsStr = ""; for (int i=0; i result.x) { result.x += 1; result.width -=1; @@ -912,7 +912,7 @@ public class FileFontStrike extends PhysicalStrike { if (outlineMapRef != null) { outlineMap = outlineMapRef.get(); if (outlineMap != null) { - gp = (GeneralPath)outlineMap.get(glyphCode); + gp = outlineMap.get(glyphCode); } } diff --git a/jdk/src/share/classes/sun/font/FontLineMetrics.java b/jdk/src/share/classes/sun/font/FontLineMetrics.java index 57e1ffa279b..9053ff07265 100644 --- a/jdk/src/share/classes/sun/font/FontLineMetrics.java +++ b/jdk/src/share/classes/sun/font/FontLineMetrics.java @@ -75,7 +75,7 @@ public final class FontLineMetrics extends LineMetrics implements Cloneable { } public final float[] getBaselineOffsets() { - return (float[])cm.baselineOffsets.clone(); + return cm.baselineOffsets.clone(); } public final float getStrikethroughOffset() { diff --git a/jdk/src/share/classes/sun/font/FontScalerException.java b/jdk/src/share/classes/sun/font/FontScalerException.java index 32db6d80679..b88aed62773 100644 --- a/jdk/src/share/classes/sun/font/FontScalerException.java +++ b/jdk/src/share/classes/sun/font/FontScalerException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ package sun.font; +@SuppressWarnings("serial") // JDK-implementation class public class FontScalerException extends Exception { public FontScalerException() { super("Font scaler encountered runtime problem."); diff --git a/jdk/src/share/classes/sun/font/StandardGlyphVector.java b/jdk/src/share/classes/sun/font/StandardGlyphVector.java index 66001682dff..75951ac451e 100644 --- a/jdk/src/share/classes/sun/font/StandardGlyphVector.java +++ b/jdk/src/share/classes/sun/font/StandardGlyphVector.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -727,7 +727,7 @@ public class StandardGlyphVector extends GlyphVector { result.clearCaches(); if (positions != null) { - result.positions = (float[])positions.clone(); + result.positions = positions.clone(); } if (gti != null) { @@ -775,7 +775,7 @@ public class StandardGlyphVector extends GlyphVector { throw new IllegalArgumentException("srcPositions.length != " + requiredLength); } - positions = (float[])srcPositions.clone(); + positions = srcPositions.clone(); clearCaches(); addFlags(FLAG_HAS_POSITION_ADJUSTMENTS); @@ -1391,8 +1391,8 @@ public class StandardGlyphVector extends GlyphVector { GlyphTransformInfo(StandardGlyphVector sgv, GlyphTransformInfo rhs) { this.sgv = sgv; - this.indices = rhs.indices == null ? null : (int[])rhs.indices.clone(); - this.transforms = rhs.transforms == null ? null : (double[])rhs.transforms.clone(); + this.indices = rhs.indices == null ? null : rhs.indices.clone(); + this.transforms = rhs.transforms == null ? null : rhs.transforms.clone(); this.strikesRef = null; // can't share cache, so rather than clone, we just null out } diff --git a/jdk/src/share/classes/sun/font/StrikeCache.java b/jdk/src/share/classes/sun/font/StrikeCache.java index 2651a7fef94..eeda70c7132 100644 --- a/jdk/src/share/classes/sun/font/StrikeCache.java +++ b/jdk/src/share/classes/sun/font/StrikeCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -280,7 +280,7 @@ public final class StrikeCache { RenderQueue rq = null; GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); - if (!ge.isHeadless()) { + if (!GraphicsEnvironment.isHeadless()) { GraphicsConfiguration gc = ge.getDefaultScreenDevice().getDefaultConfiguration(); if (gc instanceof AccelGraphicsConfig) { @@ -351,7 +351,7 @@ public final class StrikeCache { if (gids == null) { gids = new ArrayList(); } - gids.add((long) glyphPtrs[i]); + gids.add(glyphPtrs[i]); } } diff --git a/jdk/src/share/classes/sun/font/SunFontManager.java b/jdk/src/share/classes/sun/font/SunFontManager.java index d9f073345e9..cd366f0c96d 100644 --- a/jdk/src/share/classes/sun/font/SunFontManager.java +++ b/jdk/src/share/classes/sun/font/SunFontManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2014, 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 @@ -683,8 +683,7 @@ public abstract class SunFontManager implements FontSupport, FontManagerForSGE { * no effect - this is typically the case only when using the Windows * L&F where these APIs would conflict with that L&F anyway. */ - Font2D oldFont = (Font2D) - altNameCache.get(compositeName.toLowerCase(Locale.ENGLISH)); + Font2D oldFont =altNameCache.get(compositeName.toLowerCase(Locale.ENGLISH)); if (oldFont instanceof CompositeFont) { oldFont.handle.font2D = cf; } @@ -1992,7 +1991,7 @@ public abstract class SunFontManager implements FontSupport, FontManagerForSGE { if (family == null || familyName == null) { return null; } - String [] fontList = (String[])family.toArray(STR_ARRAY); + String [] fontList = family.toArray(STR_ARRAY); if (fontList.length == 0) { return null; } @@ -2085,7 +2084,7 @@ public abstract class SunFontManager implements FontSupport, FontManagerForSGE { (ConcurrentHashMap) AppContext.getAppContext().get(CompositeFont.class); if (altNameCache != null) { - font = (Font2D)altNameCache.get(mapName); + font = altNameCache.get(mapName); } else { font = null; } @@ -2628,8 +2627,7 @@ public abstract class SunFontManager implements FontSupport, FontManagerForSGE { fullNameToFont.remove(oldFont.fullName.toLowerCase(Locale.ENGLISH)); FontFamily.remove(oldFont); if (localeFullNamesToFont != null) { - Map.Entry[] mapEntries = - (Map.Entry[])localeFullNamesToFont.entrySet(). + Map.Entry[] mapEntries = localeFullNamesToFont.entrySet(). toArray(new Map.Entry[0]); /* Should I be replacing these, or just I just remove * the names from the map? @@ -3100,7 +3098,7 @@ public abstract class SunFontManager implements FontSupport, FontManagerForSGE { if (font == null) { return; } - String[] keys = (String[])(fontNameCache.keySet().toArray(STR_ARRAY)); + String[] keys = fontNameCache.keySet().toArray(STR_ARRAY); for (int k=0; k value; + + public CacheEntry() { + value = null; + } + + public CacheEntry(Object o) { + value = new SoftReference<>(o); + } + + public Object get() { + return value.get(); + } + + public void setThing(Object thing) { + value = new SoftReference<>(thing); } } @@ -72,7 +87,6 @@ class CacheEntry extends Ref { * * @see java.lang.Object#hashCode * @see java.lang.Object#equals - * @see sun.misc.Ref * @deprecated Consider {@link java.util.LinkedHashMap} for LRU caches. */ @Deprecated @@ -192,7 +206,7 @@ public int index = (hash & 0x7FFFFFFF) % tab.length; for (CacheEntry e = tab[index]; e != null; e = e.next) { if ((e.hash == hash) && e.key.equals(key)) { - return e.check(); + return e.get(); } } return null; @@ -220,7 +234,7 @@ public for (CacheEntry old = oldTable[i]; old != null;) { CacheEntry e = old; old = old.next; - if (e.check() != null) { + if (e.get() != null) { int index = (e.hash & 0x7FFFFFFF) % newCapacity; e.next = newTable[index]; newTable[index] = e; @@ -253,10 +267,10 @@ public CacheEntry ne = null; for (CacheEntry e = tab[index]; e != null; e = e.next) { if ((e.hash == hash) && e.key.equals(key)) { - Object old = e.check(); + Object old = e.get(); e.setThing(value); return old; - } else if (e.check() == null) + } else if (e.get() == null) ne = e; /* reuse old flushed value */ } @@ -296,7 +310,7 @@ public tab[index] = e.next; } count--; - return e.check(); + return e.get(); } } return null; @@ -322,7 +336,7 @@ class CacheEnumerator implements Enumeration { public boolean hasMoreElements() { while (index >= 0) { while (entry != null) - if (entry.check() != null) + if (entry.get() != null) return true; else entry = entry.next; @@ -338,8 +352,8 @@ class CacheEnumerator implements Enumeration { if (entry != null) { CacheEntry e = entry; entry = e.next; - if (e.check() != null) - return keys ? e.key : e.check(); + if (e.get() != null) + return keys ? e.key : e.get(); } } throw new NoSuchElementException("CacheEnumerator"); diff --git a/jdk/src/share/classes/sun/misc/DoubleConsts.java b/jdk/src/share/classes/sun/misc/DoubleConsts.java index 2c5964b7885..6ee80490102 100644 --- a/jdk/src/share/classes/sun/misc/DoubleConsts.java +++ b/jdk/src/share/classes/sun/misc/DoubleConsts.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -77,9 +77,7 @@ public class DoubleConsts { /** * The exponent the smallest positive double - * subnormal value would have if it could be normalized. It is - * equal to the value returned by - * FpUtils.ilogb(Double.MIN_VALUE). + * subnormal value would have if it could be normalized.. */ public static final int MIN_SUB_EXPONENT = MIN_EXPONENT - (SIGNIFICAND_WIDTH - 1); diff --git a/jdk/src/share/classes/sun/misc/FloatConsts.java b/jdk/src/share/classes/sun/misc/FloatConsts.java index 4345c19fcf3..07396f8bca9 100644 --- a/jdk/src/share/classes/sun/misc/FloatConsts.java +++ b/jdk/src/share/classes/sun/misc/FloatConsts.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -73,8 +73,7 @@ public class FloatConsts { /** * The exponent the smallest positive float subnormal - * value would have if it could be normalized. It is equal to the - * value returned by FpUtils.ilogb(Float.MIN_VALUE). + * value would have if it could be normalized. */ public static final int MIN_SUB_EXPONENT = MIN_EXPONENT - (SIGNIFICAND_WIDTH - 1); diff --git a/jdk/src/share/classes/sun/misc/FpUtils.java b/jdk/src/share/classes/sun/misc/FpUtils.java deleted file mode 100644 index a874c80f628..00000000000 --- a/jdk/src/share/classes/sun/misc/FpUtils.java +++ /dev/null @@ -1,931 +0,0 @@ -/* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package sun.misc; - -import sun.misc.FloatConsts; -import sun.misc.DoubleConsts; - -/** - * The class {@code FpUtils} contains static utility methods for - * manipulating and inspecting {@code float} and - * {@code double} floating-point numbers. These methods include - * functionality recommended or required by the IEEE 754 - * floating-point standard. - * - * @author Joseph D. Darcy - */ - -public class FpUtils { - /* - * The methods in this class are reasonably implemented using - * direct or indirect bit-level manipulation of floating-point - * values. However, having access to the IEEE 754 recommended - * functions would obviate the need for most programmers to engage - * in floating-point bit-twiddling. - * - * An IEEE 754 number has three fields, from most significant bit - * to to least significant, sign, exponent, and significand. - * - * msb lsb - * [sign|exponent| fractional_significand] - * - * Using some encoding cleverness, explained below, the high order - * bit of the logical significand does not need to be explicitly - * stored, thus "fractional_significand" instead of simply - * "significand" in the figure above. - * - * For finite normal numbers, the numerical value encoded is - * - * (-1)^sign * 2^(exponent)*(1.fractional_significand) - * - * Most finite floating-point numbers are normalized; the exponent - * value is reduced until the leading significand bit is 1. - * Therefore, the leading 1 is redundant and is not explicitly - * stored. If a numerical value is so small it cannot be - * normalized, it has a subnormal representation. Subnormal - * numbers don't have a leading 1 in their significand; subnormals - * are encoding using a special exponent value. In other words, - * the high-order bit of the logical significand can be elided in - * from the representation in either case since the bit's value is - * implicit from the exponent value. - * - * The exponent field uses a biased representation; if the bits of - * the exponent are interpreted as a unsigned integer E, the - * exponent represented is E - E_bias where E_bias depends on the - * floating-point format. E can range between E_min and E_max, - * constants which depend on the floating-point format. E_min and - * E_max are -126 and +127 for float, -1022 and +1023 for double. - * - * The 32-bit float format has 1 sign bit, 8 exponent bits, and 23 - * bits for the significand (which is logically 24 bits wide - * because of the implicit bit). The 64-bit double format has 1 - * sign bit, 11 exponent bits, and 52 bits for the significand - * (logically 53 bits). - * - * Subnormal numbers and zero have the special exponent value - * E_min -1; the numerical value represented by a subnormal is: - * - * (-1)^sign * 2^(E_min)*(0.fractional_significand) - * - * Zero is represented by all zero bits in the exponent and all - * zero bits in the significand; zero can have either sign. - * - * Infinity and NaN are encoded using the exponent value E_max + - * 1. Signed infinities have all significand bits zero; NaNs have - * at least one non-zero significand bit. - * - * The details of IEEE 754 floating-point encoding will be used in - * the methods below without further comment. For further - * exposition on IEEE 754 numbers, see "IEEE Standard for Binary - * Floating-Point Arithmetic" ANSI/IEEE Std 754-1985 or William - * Kahan's "Lecture Notes on the Status of IEEE Standard 754 for - * Binary Floating-Point Arithmetic", - * http://www.cs.berkeley.edu/~wkahan/ieee754status/ieee754.ps. - * - * Many of this class's methods are members of the set of IEEE 754 - * recommended functions or similar functions recommended or - * required by IEEE 754R. Discussion of various implementation - * techniques for these functions have occurred in: - * - * W.J. Cody and Jerome T. Coonen, "Algorithm 772 Functions to - * Support the IEEE Standard for Binary Floating-Point - * Arithmetic," ACM Transactions on Mathematical Software, - * vol. 19, no. 4, December 1993, pp. 443-451. - * - * Joseph D. Darcy, "Writing robust IEEE recommended functions in - * ``100% Pure Java''(TM)," University of California, Berkeley - * technical report UCB//CSD-98-1009. - */ - - /** - * Don't let anyone instantiate this class. - */ - private FpUtils() {} - - // Helper Methods - - // The following helper methods are used in the implementation of - // the public recommended functions; they generally omit certain - // tests for exception cases. - - /** - * Returns unbiased exponent of a {@code double}. - * @deprecated Use Math.getExponent. - */ - @Deprecated - public static int getExponent(double d){ - return Math.getExponent(d); - } - - /** - * Returns unbiased exponent of a {@code float}. - * @deprecated Use Math.getExponent. - */ - @Deprecated - public static int getExponent(float f){ - return Math.getExponent(f); - } - - - /** - * Returns the first floating-point argument with the sign of the - * second floating-point argument. Note that unlike the {@link - * FpUtils#copySign(double, double) copySign} method, this method - * does not require NaN {@code sign} arguments to be treated - * as positive values; implementations are permitted to treat some - * NaN arguments as positive and other NaN arguments as negative - * to allow greater performance. - * - * @param magnitude the parameter providing the magnitude of the result - * @param sign the parameter providing the sign of the result - * @return a value with the magnitude of {@code magnitude} - * and the sign of {@code sign}. - * @author Joseph D. Darcy - * @deprecated Use Math.copySign. - */ - @Deprecated - public static double rawCopySign(double magnitude, double sign) { - return Math.copySign(magnitude, sign); - } - - /** - * Returns the first floating-point argument with the sign of the - * second floating-point argument. Note that unlike the {@link - * FpUtils#copySign(float, float) copySign} method, this method - * does not require NaN {@code sign} arguments to be treated - * as positive values; implementations are permitted to treat some - * NaN arguments as positive and other NaN arguments as negative - * to allow greater performance. - * - * @param magnitude the parameter providing the magnitude of the result - * @param sign the parameter providing the sign of the result - * @return a value with the magnitude of {@code magnitude} - * and the sign of {@code sign}. - * @author Joseph D. Darcy - * @deprecated Use Math.copySign. - */ - @Deprecated - public static float rawCopySign(float magnitude, float sign) { - return Math.copySign(magnitude, sign); - } - - /* ***************************************************************** */ - - /** - * Returns {@code true} if the argument is a finite - * floating-point value; returns {@code false} otherwise (for - * NaN and infinity arguments). - * - * @param d the {@code double} value to be tested - * @return {@code true} if the argument is a finite - * floating-point value, {@code false} otherwise. - * @deprecated Use Double.isFinite. - */ - @Deprecated - public static boolean isFinite(double d) { - return Double.isFinite(d); - } - - /** - * Returns {@code true} if the argument is a finite - * floating-point value; returns {@code false} otherwise (for - * NaN and infinity arguments). - * - * @param f the {@code float} value to be tested - * @return {@code true} if the argument is a finite - * floating-point value, {@code false} otherwise. - * @deprecated Use Float.isFinite. - */ - @Deprecated - public static boolean isFinite(float f) { - return Float.isFinite(f); - } - - /** - * Returns {@code true} if the specified number is infinitely - * large in magnitude, {@code false} otherwise. - * - *

        Note that this method is equivalent to the {@link - * Double#isInfinite(double) Double.isInfinite} method; the - * functionality is included in this class for convenience. - * - * @param d the value to be tested. - * @return {@code true} if the value of the argument is positive - * infinity or negative infinity; {@code false} otherwise. - */ - public static boolean isInfinite(double d) { - return Double.isInfinite(d); - } - - /** - * Returns {@code true} if the specified number is infinitely - * large in magnitude, {@code false} otherwise. - * - *

        Note that this method is equivalent to the {@link - * Float#isInfinite(float) Float.isInfinite} method; the - * functionality is included in this class for convenience. - * - * @param f the value to be tested. - * @return {@code true} if the argument is positive infinity or - * negative infinity; {@code false} otherwise. - */ - public static boolean isInfinite(float f) { - return Float.isInfinite(f); - } - - /** - * Returns {@code true} if the specified number is a - * Not-a-Number (NaN) value, {@code false} otherwise. - * - *

        Note that this method is equivalent to the {@link - * Double#isNaN(double) Double.isNaN} method; the functionality is - * included in this class for convenience. - * - * @param d the value to be tested. - * @return {@code true} if the value of the argument is NaN; - * {@code false} otherwise. - */ - public static boolean isNaN(double d) { - return Double.isNaN(d); - } - - /** - * Returns {@code true} if the specified number is a - * Not-a-Number (NaN) value, {@code false} otherwise. - * - *

        Note that this method is equivalent to the {@link - * Float#isNaN(float) Float.isNaN} method; the functionality is - * included in this class for convenience. - * - * @param f the value to be tested. - * @return {@code true} if the argument is NaN; - * {@code false} otherwise. - */ - public static boolean isNaN(float f) { - return Float.isNaN(f); - } - - /** - * Returns {@code true} if the unordered relation holds - * between the two arguments. When two floating-point values are - * unordered, one value is neither less than, equal to, nor - * greater than the other. For the unordered relation to be true, - * at least one argument must be a {@code NaN}. - * - * @param arg1 the first argument - * @param arg2 the second argument - * @return {@code true} if at least one argument is a NaN, - * {@code false} otherwise. - */ - public static boolean isUnordered(double arg1, double arg2) { - return isNaN(arg1) || isNaN(arg2); - } - - /** - * Returns {@code true} if the unordered relation holds - * between the two arguments. When two floating-point values are - * unordered, one value is neither less than, equal to, nor - * greater than the other. For the unordered relation to be true, - * at least one argument must be a {@code NaN}. - * - * @param arg1 the first argument - * @param arg2 the second argument - * @return {@code true} if at least one argument is a NaN, - * {@code false} otherwise. - */ - public static boolean isUnordered(float arg1, float arg2) { - return isNaN(arg1) || isNaN(arg2); - } - - /** - * Returns unbiased exponent of a {@code double}; for - * subnormal values, the number is treated as if it were - * normalized. That is for all finite, non-zero, positive numbers - * x, scalb(x, -ilogb(x)) is - * always in the range [1, 2). - *

        - * Special cases: - *

          - *
        • If the argument is NaN, then the result is 230. - *
        • If the argument is infinite, then the result is 228. - *
        • If the argument is zero, then the result is -(228). - *
        - * - * @param d floating-point number whose exponent is to be extracted - * @return unbiased exponent of the argument. - * @author Joseph D. Darcy - */ - public static int ilogb(double d) { - int exponent = getExponent(d); - - switch (exponent) { - case DoubleConsts.MAX_EXPONENT+1: // NaN or infinity - if( isNaN(d) ) - return (1<<30); // 2^30 - else // infinite value - return (1<<28); // 2^28 - - case DoubleConsts.MIN_EXPONENT-1: // zero or subnormal - if(d == 0.0) { - return -(1<<28); // -(2^28) - } - else { - long transducer = Double.doubleToRawLongBits(d); - - /* - * To avoid causing slow arithmetic on subnormals, - * the scaling to determine when d's significand - * is normalized is done in integer arithmetic. - * (there must be at least one "1" bit in the - * significand since zero has been screened out. - */ - - // isolate significand bits - transducer &= DoubleConsts.SIGNIF_BIT_MASK; - assert(transducer != 0L); - - // This loop is simple and functional. We might be - // able to do something more clever that was faster; - // e.g. number of leading zero detection on - // (transducer << (# exponent and sign bits). - while (transducer < - (1L << (DoubleConsts.SIGNIFICAND_WIDTH - 1))) { - transducer *= 2; - exponent--; - } - exponent++; - assert( exponent >= - DoubleConsts.MIN_EXPONENT - (DoubleConsts.SIGNIFICAND_WIDTH-1) && - exponent < DoubleConsts.MIN_EXPONENT); - return exponent; - } - - default: - assert( exponent >= DoubleConsts.MIN_EXPONENT && - exponent <= DoubleConsts.MAX_EXPONENT); - return exponent; - } - } - - /** - * Returns unbiased exponent of a {@code float}; for - * subnormal values, the number is treated as if it were - * normalized. That is for all finite, non-zero, positive numbers - * x, scalb(x, -ilogb(x)) is - * always in the range [1, 2). - *

        - * Special cases: - *

          - *
        • If the argument is NaN, then the result is 230. - *
        • If the argument is infinite, then the result is 228. - *
        • If the argument is zero, then the result is -(228). - *
        - * - * @param f floating-point number whose exponent is to be extracted - * @return unbiased exponent of the argument. - * @author Joseph D. Darcy - */ - public static int ilogb(float f) { - int exponent = getExponent(f); - - switch (exponent) { - case FloatConsts.MAX_EXPONENT+1: // NaN or infinity - if( isNaN(f) ) - return (1<<30); // 2^30 - else // infinite value - return (1<<28); // 2^28 - - case FloatConsts.MIN_EXPONENT-1: // zero or subnormal - if(f == 0.0f) { - return -(1<<28); // -(2^28) - } - else { - int transducer = Float.floatToRawIntBits(f); - - /* - * To avoid causing slow arithmetic on subnormals, - * the scaling to determine when f's significand - * is normalized is done in integer arithmetic. - * (there must be at least one "1" bit in the - * significand since zero has been screened out. - */ - - // isolate significand bits - transducer &= FloatConsts.SIGNIF_BIT_MASK; - assert(transducer != 0); - - // This loop is simple and functional. We might be - // able to do something more clever that was faster; - // e.g. number of leading zero detection on - // (transducer << (# exponent and sign bits). - while (transducer < - (1 << (FloatConsts.SIGNIFICAND_WIDTH - 1))) { - transducer *= 2; - exponent--; - } - exponent++; - assert( exponent >= - FloatConsts.MIN_EXPONENT - (FloatConsts.SIGNIFICAND_WIDTH-1) && - exponent < FloatConsts.MIN_EXPONENT); - return exponent; - } - - default: - assert( exponent >= FloatConsts.MIN_EXPONENT && - exponent <= FloatConsts.MAX_EXPONENT); - return exponent; - } - } - - - /* - * The scalb operation should be reasonably fast; however, there - * are tradeoffs in writing a method to minimize the worst case - * performance and writing a method to minimize the time for - * expected common inputs. Some processors operate very slowly on - * subnormal operands, taking hundreds or thousands of cycles for - * one floating-point add or multiply as opposed to, say, four - * cycles for normal operands. For processors with very slow - * subnormal execution, scalb would be fastest if written entirely - * with integer operations; in other words, scalb would need to - * include the logic of performing correct rounding of subnormal - * values. This could be reasonably done in at most a few hundred - * cycles. However, this approach may penalize normal operations - * since at least the exponent of the floating-point argument must - * be examined. - * - * The approach taken in this implementation is a compromise. - * Floating-point multiplication is used to do most of the work; - * but knowingly multiplying by a subnormal scaling factor is - * avoided. However, the floating-point argument is not examined - * to see whether or not it is subnormal since subnormal inputs - * are assumed to be rare. At most three multiplies are needed to - * scale from the largest to smallest exponent ranges (scaling - * down, at most two multiplies are needed if subnormal scaling - * factors are allowed). However, in this implementation an - * expensive integer remainder operation is avoided at the cost of - * requiring five floating-point multiplies in the worst case, - * which should still be a performance win. - * - * If scaling of entire arrays is a concern, it would probably be - * more efficient to provide a double[] scalb(double[], int) - * version of scalb to avoid having to recompute the needed - * scaling factors for each floating-point value. - */ - - /** - * Return {@code d} × - * 2{@code scale_factor} rounded as if performed - * by a single correctly rounded floating-point multiply to a - * member of the double value set. See section 4.2.3 of - * The Java™ Language Specification - * for a discussion of floating-point - * value sets. If the exponent of the result is between the - * {@code double}'s minimum exponent and maximum exponent, - * the answer is calculated exactly. If the exponent of the - * result would be larger than {@code doubles}'s maximum - * exponent, an infinity is returned. Note that if the result is - * subnormal, precision may be lost; that is, when {@code scalb(x, - * n)} is subnormal, {@code scalb(scalb(x, n), -n)} may - * not equal x. When the result is non-NaN, the result has - * the same sign as {@code d}. - * - *

        - * Special cases: - *

          - *
        • If the first argument is NaN, NaN is returned. - *
        • If the first argument is infinite, then an infinity of the - * same sign is returned. - *
        • If the first argument is zero, then a zero of the same - * sign is returned. - *
        - * - * @param d number to be scaled by a power of two. - * @param scale_factor power of 2 used to scale {@code d} - * @return {@code d * }2{@code scale_factor} - * @author Joseph D. Darcy - * @deprecated Use Math.scalb. - */ - @Deprecated - public static double scalb(double d, int scale_factor) { - return Math.scalb(d, scale_factor); - } - - /** - * Return {@code f} × - * 2{@code scale_factor} rounded as if performed - * by a single correctly rounded floating-point multiply to a - * member of the float value set. See section 4.2.3 of - * The Java™ Language Specification - * for a discussion of floating-point - * value sets. If the exponent of the result is between the - * {@code float}'s minimum exponent and maximum exponent, the - * answer is calculated exactly. If the exponent of the result - * would be larger than {@code float}'s maximum exponent, an - * infinity is returned. Note that if the result is subnormal, - * precision may be lost; that is, when {@code scalb(x, n)} - * is subnormal, {@code scalb(scalb(x, n), -n)} may not equal - * x. When the result is non-NaN, the result has the same - * sign as {@code f}. - * - *

        - * Special cases: - *

          - *
        • If the first argument is NaN, NaN is returned. - *
        • If the first argument is infinite, then an infinity of the - * same sign is returned. - *
        • If the first argument is zero, then a zero of the same - * sign is returned. - *
        - * - * @param f number to be scaled by a power of two. - * @param scale_factor power of 2 used to scale {@code f} - * @return {@code f * }2{@code scale_factor} - * @author Joseph D. Darcy - * @deprecated Use Math.scalb. - */ - @Deprecated - public static float scalb(float f, int scale_factor) { - return Math.scalb(f, scale_factor); - } - - /** - * Returns the floating-point number adjacent to the first - * argument in the direction of the second argument. If both - * arguments compare as equal the second argument is returned. - * - *

        - * Special cases: - *

          - *
        • If either argument is a NaN, then NaN is returned. - * - *
        • If both arguments are signed zeros, {@code direction} - * is returned unchanged (as implied by the requirement of - * returning the second argument if the arguments compare as - * equal). - * - *
        • If {@code start} is - * ±{@code Double.MIN_VALUE} and {@code direction} - * has a value such that the result should have a smaller - * magnitude, then a zero with the same sign as {@code start} - * is returned. - * - *
        • If {@code start} is infinite and - * {@code direction} has a value such that the result should - * have a smaller magnitude, {@code Double.MAX_VALUE} with the - * same sign as {@code start} is returned. - * - *
        • If {@code start} is equal to ± - * {@code Double.MAX_VALUE} and {@code direction} has a - * value such that the result should have a larger magnitude, an - * infinity with same sign as {@code start} is returned. - *
        - * - * @param start starting floating-point value - * @param direction value indicating which of - * {@code start}'s neighbors or {@code start} should - * be returned - * @return The floating-point number adjacent to {@code start} in the - * direction of {@code direction}. - * @author Joseph D. Darcy - * @deprecated Use Math.nextAfter - */ - @Deprecated - public static double nextAfter(double start, double direction) { - return Math.nextAfter(start, direction); - } - - /** - * Returns the floating-point number adjacent to the first - * argument in the direction of the second argument. If both - * arguments compare as equal, the second argument is returned. - * - *

        - * Special cases: - *

          - *
        • If either argument is a NaN, then NaN is returned. - * - *
        • If both arguments are signed zeros, a {@code float} - * zero with the same sign as {@code direction} is returned - * (as implied by the requirement of returning the second argument - * if the arguments compare as equal). - * - *
        • If {@code start} is - * ±{@code Float.MIN_VALUE} and {@code direction} - * has a value such that the result should have a smaller - * magnitude, then a zero with the same sign as {@code start} - * is returned. - * - *
        • If {@code start} is infinite and - * {@code direction} has a value such that the result should - * have a smaller magnitude, {@code Float.MAX_VALUE} with the - * same sign as {@code start} is returned. - * - *
        • If {@code start} is equal to ± - * {@code Float.MAX_VALUE} and {@code direction} has a - * value such that the result should have a larger magnitude, an - * infinity with same sign as {@code start} is returned. - *
        - * - * @param start starting floating-point value - * @param direction value indicating which of - * {@code start}'s neighbors or {@code start} should - * be returned - * @return The floating-point number adjacent to {@code start} in the - * direction of {@code direction}. - * @author Joseph D. Darcy - * @deprecated Use Math.nextAfter. - */ - @Deprecated - public static float nextAfter(float start, double direction) { - return Math.nextAfter(start, direction); - } - - /** - * Returns the floating-point value adjacent to {@code d} in - * the direction of positive infinity. This method is - * semantically equivalent to {@code nextAfter(d, - * Double.POSITIVE_INFINITY)}; however, a {@code nextUp} - * implementation may run faster than its equivalent - * {@code nextAfter} call. - * - *

        Special Cases: - *

          - *
        • If the argument is NaN, the result is NaN. - * - *
        • If the argument is positive infinity, the result is - * positive infinity. - * - *
        • If the argument is zero, the result is - * {@code Double.MIN_VALUE} - * - *
        - * - * @param d starting floating-point value - * @return The adjacent floating-point value closer to positive - * infinity. - * @author Joseph D. Darcy - * @deprecated use Math.nextUp. - */ - @Deprecated - public static double nextUp(double d) { - return Math.nextUp(d); - } - - /** - * Returns the floating-point value adjacent to {@code f} in - * the direction of positive infinity. This method is - * semantically equivalent to {@code nextAfter(f, - * Double.POSITIVE_INFINITY)}; however, a {@code nextUp} - * implementation may run faster than its equivalent - * {@code nextAfter} call. - * - *

        Special Cases: - *

          - *
        • If the argument is NaN, the result is NaN. - * - *
        • If the argument is positive infinity, the result is - * positive infinity. - * - *
        • If the argument is zero, the result is - * {@code Float.MIN_VALUE} - * - *
        - * - * @param f starting floating-point value - * @return The adjacent floating-point value closer to positive - * infinity. - * @author Joseph D. Darcy - * @deprecated Use Math.nextUp. - */ - @Deprecated - public static float nextUp(float f) { - return Math.nextUp(f); - } - - /** - * Returns the floating-point value adjacent to {@code d} in - * the direction of negative infinity. This method is - * semantically equivalent to {@code nextAfter(d, - * Double.NEGATIVE_INFINITY)}; however, a - * {@code nextDown} implementation may run faster than its - * equivalent {@code nextAfter} call. - * - *

        Special Cases: - *

          - *
        • If the argument is NaN, the result is NaN. - * - *
        • If the argument is negative infinity, the result is - * negative infinity. - * - *
        • If the argument is zero, the result is - * {@code -Double.MIN_VALUE} - * - *
        - * - * @param d starting floating-point value - * @return The adjacent floating-point value closer to negative - * infinity. - * @author Joseph D. Darcy - * @deprecated Use Math.nextDown. - */ - @Deprecated - public static double nextDown(double d) { - return Math.nextDown(d); - } - - /** - * Returns the floating-point value adjacent to {@code f} in - * the direction of negative infinity. This method is - * semantically equivalent to {@code nextAfter(f, - * Float.NEGATIVE_INFINITY)}; however, a - * {@code nextDown} implementation may run faster than its - * equivalent {@code nextAfter} call. - * - *

        Special Cases: - *

          - *
        • If the argument is NaN, the result is NaN. - * - *
        • If the argument is negative infinity, the result is - * negative infinity. - * - *
        • If the argument is zero, the result is - * {@code -Float.MIN_VALUE} - * - *
        - * - * @param f starting floating-point value - * @return The adjacent floating-point value closer to negative - * infinity. - * @author Joseph D. Darcy - * @deprecated Use Math.nextDown. - */ - @Deprecated - public static double nextDown(float f) { - return Math.nextDown(f); - } - - /** - * Returns the first floating-point argument with the sign of the - * second floating-point argument. For this method, a NaN - * {@code sign} argument is always treated as if it were - * positive. - * - * @param magnitude the parameter providing the magnitude of the result - * @param sign the parameter providing the sign of the result - * @return a value with the magnitude of {@code magnitude} - * and the sign of {@code sign}. - * @author Joseph D. Darcy - * @since 1.5 - * @deprecated Use StrictMath.copySign. - */ - @Deprecated - public static double copySign(double magnitude, double sign) { - return StrictMath.copySign(magnitude, sign); - } - - /** - * Returns the first floating-point argument with the sign of the - * second floating-point argument. For this method, a NaN - * {@code sign} argument is always treated as if it were - * positive. - * - * @param magnitude the parameter providing the magnitude of the result - * @param sign the parameter providing the sign of the result - * @return a value with the magnitude of {@code magnitude} - * and the sign of {@code sign}. - * @author Joseph D. Darcy - * @deprecated Use StrictMath.copySign. - */ - @Deprecated - public static float copySign(float magnitude, float sign) { - return StrictMath.copySign(magnitude, sign); - } - - /** - * Returns the size of an ulp of the argument. An ulp of a - * {@code double} value is the positive distance between this - * floating-point value and the {@code double} value next - * larger in magnitude. Note that for non-NaN x, - * ulp(-x) == ulp(x). - * - *

        Special Cases: - *

          - *
        • If the argument is NaN, then the result is NaN. - *
        • If the argument is positive or negative infinity, then the - * result is positive infinity. - *
        • If the argument is positive or negative zero, then the result is - * {@code Double.MIN_VALUE}. - *
        • If the argument is ±{@code Double.MAX_VALUE}, then - * the result is equal to 2971. - *
        - * - * @param d the floating-point value whose ulp is to be returned - * @return the size of an ulp of the argument - * @author Joseph D. Darcy - * @since 1.5 - * @deprecated Use Math.ulp. - */ - @Deprecated - public static double ulp(double d) { - return Math.ulp(d); - } - - /** - * Returns the size of an ulp of the argument. An ulp of a - * {@code float} value is the positive distance between this - * floating-point value and the {@code float} value next - * larger in magnitude. Note that for non-NaN x, - * ulp(-x) == ulp(x). - * - *

        Special Cases: - *

          - *
        • If the argument is NaN, then the result is NaN. - *
        • If the argument is positive or negative infinity, then the - * result is positive infinity. - *
        • If the argument is positive or negative zero, then the result is - * {@code Float.MIN_VALUE}. - *
        • If the argument is ±{@code Float.MAX_VALUE}, then - * the result is equal to 2104. - *
        - * - * @param f the floating-point value whose ulp is to be returned - * @return the size of an ulp of the argument - * @author Joseph D. Darcy - * @since 1.5 - * @deprecated Use Math.ulp. - */ - @Deprecated - public static float ulp(float f) { - return Math.ulp(f); - } - - /** - * Returns the signum function of the argument; zero if the argument - * is zero, 1.0 if the argument is greater than zero, -1.0 if the - * argument is less than zero. - * - *

        Special Cases: - *

          - *
        • If the argument is NaN, then the result is NaN. - *
        • If the argument is positive zero or negative zero, then the - * result is the same as the argument. - *
        - * - * @param d the floating-point value whose signum is to be returned - * @return the signum function of the argument - * @author Joseph D. Darcy - * @since 1.5 - * @deprecated Use Math.signum. - */ - @Deprecated - public static double signum(double d) { - return Math.signum(d); - } - - /** - * Returns the signum function of the argument; zero if the argument - * is zero, 1.0f if the argument is greater than zero, -1.0f if the - * argument is less than zero. - * - *

        Special Cases: - *

          - *
        • If the argument is NaN, then the result is NaN. - *
        • If the argument is positive zero or negative zero, then the - * result is the same as the argument. - *
        - * - * @param f the floating-point value whose signum is to be returned - * @return the signum function of the argument - * @author Joseph D. Darcy - * @since 1.5 - * @deprecated Use Math.signum. - */ - @Deprecated - public static float signum(float f) { - return Math.signum(f); - } -} diff --git a/jdk/src/share/classes/sun/misc/Launcher.java b/jdk/src/share/classes/sun/misc/Launcher.java index 71b3d3bbce8..89557f711b4 100644 --- a/jdk/src/share/classes/sun/misc/Launcher.java +++ b/jdk/src/share/classes/sun/misc/Launcher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -266,7 +266,7 @@ public class Launcher { throws IOException { final String s = System.getProperty("java.class.path"); - final File[] path = (s == null) ? new File[0] : getClassPath(s); + final File[] path = (s == null) ? new File[0] : getClassPath(s, true); // Note: on bugid 4256530 // Prior implementations of this doPrivileged() block supplied @@ -322,7 +322,7 @@ public class Launcher { * This class loader supports dynamic additions to the class path * at runtime. * - * @see java.lang.instrument.Instrumentation#appendToSystemClassPathSearch + * @see java.lang.instrument.Instrumentation#appendToSystemClassLoaderSearch */ private void appendToClassPathForInstrumentation(String path) { assert(Thread.holdsLock(this)); @@ -364,7 +364,8 @@ public class Launcher { urls = AccessController.doPrivileged( new PrivilegedAction() { public URL[] run() { - File[] classPath = getClassPath(bootClassPath); + // Skip empty path in boot class path i.e. not default to use CWD + File[] classPath = getClassPath(bootClassPath, false); int len = classPath.length; Set seenDirs = new HashSet(); for (int i = 0; i < len; i++) { @@ -405,7 +406,7 @@ public class Launcher { return urls; } - private static File[] getClassPath(String cp) { + private static File[] getClassPath(String cp, boolean defaultToCwd) { File[] path; if (cp != null) { int count = 0, maxCount = 1; @@ -419,9 +420,9 @@ public class Launcher { lastPos = pos = 0; // Now scan for each path component while ((pos = cp.indexOf(File.pathSeparator, lastPos)) != -1) { - if (pos - lastPos > 0) { + if (pos > lastPos) { path[count++] = new File(cp.substring(lastPos, pos)); - } else { + } else if (defaultToCwd) { // empty path component translates to "." path[count++] = new File("."); } @@ -430,7 +431,7 @@ public class Launcher { // Make sure we include the last path component if (lastPos < cp.length()) { path[count++] = new File(cp.substring(lastPos)); - } else { + } else if (defaultToCwd) { path[count++] = new File("."); } // Trim array to correct size diff --git a/jdk/src/share/classes/sun/misc/Ref.java b/jdk/src/share/classes/sun/misc/Ref.java deleted file mode 100644 index 770cb3d42b8..00000000000 --- a/jdk/src/share/classes/sun/misc/Ref.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (c) 1995, 2004, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package sun.misc; -import java.lang.ref.SoftReference; - - -/** - * A "Ref" is an indirect reference to an object that the garbage collector - * knows about. An application should override the reconstitute() method with one - * that will construct the object based on information in the Ref, often by - * reading from a file. The get() method retains a cache of the result of the last call to - * reconstitute() in the Ref. When space gets tight, the garbage collector - * will clear old Ref cache entries when there are no other pointers to the - * object. In normal usage, Ref will always be subclassed. The subclass will add the - * instance variables necessary for the reconstitute() method to work. It will also add a - * constructor to set them up, and write a version of reconstitute(). - * - * @deprecated This class has been replaced by - * java.util.SoftReference. - * - * @see java.util.SoftReference - * - */ -@Deprecated - -public abstract class Ref { - - private SoftReference soft = null; - - /** - * Returns a pointer to the object referenced by this Ref. If the object - * has been thrown away by the garbage collector, it will be - * reconstituted. This method does everything necessary to ensure that the garbage - * collector throws things away in Least Recently Used(LRU) order. Applications should - * never override this method. The get() method effectively caches calls to - * reconstitute(). - */ - public synchronized Object get() { - Object t = check(); - if (t == null) { - t = reconstitute(); - setThing(t); - } - return t; - } - - /** - * Returns a pointer to the object referenced by this Ref by - * reconstituting it from some external source (such as a file). This method should not - * bother with caching since the method get() will deal with that. - *

        - * In normal usage, Ref will always be subclassed. The subclass will add - * the instance variables necessary for reconstitute() to work. It will - * also add a constructor to set them up, and write a version of - * reconstitute(). - */ - public abstract Object reconstitute(); - - /** - * Flushes the cached object. Forces the next invocation of get() to - * invoke reconstitute(). - */ - public synchronized void flush() { - SoftReference s = soft; - if (s != null) s.clear(); - soft = null; - } - - /** - * Sets the thing to the specified object. - * @param thing the specified object - */ - public synchronized void setThing(Object thing) { - flush(); - soft = new SoftReference(thing); - } - - /** - * Checks to see what object is being pointed at by this Ref and returns it. - */ - public synchronized Object check() { - SoftReference s = soft; - if (s == null) return null; - return s.get(); - } - - /** - * Constructs a new Ref. - */ - public Ref() { } - - /** - * Constructs a new Ref that initially points to thing. - */ - public Ref(Object thing) { - setThing(thing); - } - -} diff --git a/jdk/src/share/classes/sun/misc/VM.java b/jdk/src/share/classes/sun/misc/VM.java index a464305a201..8b77e2297fa 100644 --- a/jdk/src/share/classes/sun/misc/VM.java +++ b/jdk/src/share/classes/sun/misc/VM.java @@ -206,32 +206,6 @@ public class VM { return pageAlignDirectMemory; } - // A user-settable boolean to determine whether ClassLoader.loadClass should - // accept array syntax. This value may be changed during VM initialization - // via the system property "sun.lang.ClassLoader.allowArraySyntax". - // - // The default for 1.5 is "true", array syntax is allowed. In 1.6, the - // default will be "false". The presence of this system property to - // control array syntax allows applications the ability to preview this new - // behaviour. - // - private static boolean defaultAllowArraySyntax = false; - private static boolean allowArraySyntax = defaultAllowArraySyntax; - - // The allowArraySyntax boolean is initialized during system initialization - // in the saveAndRemoveProperties method. - // - // It is initialized based on the value of the system property - // "sun.lang.ClassLoader.allowArraySyntax". If the system property is not - // provided, the default for 1.5 is "true". In 1.6, the default will be - // "false". If the system property is provided, then the value of - // allowArraySyntax will be equal to "true" if Boolean.parseBoolean() - // returns "true". Otherwise, the field will be set to "false". - // - public static boolean allowArraySyntax() { - return allowArraySyntax; - } - /** * Returns true if the given class loader is in the system domain * in which all permissions are granted. @@ -296,14 +270,6 @@ public class VM { if ("true".equals(s)) pageAlignDirectMemory = true; - // Set a boolean to determine whether ClassLoader.loadClass accepts - // array syntax. This value is controlled by the system property - // "sun.lang.ClassLoader.allowArraySyntax". - s = props.getProperty("sun.lang.ClassLoader.allowArraySyntax"); - allowArraySyntax = (s == null - ? defaultAllowArraySyntax - : Boolean.parseBoolean(s)); - // Remove other private system properties // used by java.lang.Integer.IntegerCache props.remove("java.lang.Integer.IntegerCache.high"); diff --git a/jdk/src/share/classes/sun/nio/ch/AbstractPollArrayWrapper.java b/jdk/src/share/classes/sun/nio/ch/AbstractPollArrayWrapper.java index 32a8a8b93b5..0f1c594fd7f 100644 --- a/jdk/src/share/classes/sun/nio/ch/AbstractPollArrayWrapper.java +++ b/jdk/src/share/classes/sun/nio/ch/AbstractPollArrayWrapper.java @@ -37,14 +37,6 @@ import sun.misc.*; public abstract class AbstractPollArrayWrapper { - // Event masks - public static final short POLLIN = 0x0001; - public static final short POLLOUT = 0x0004; - public static final short POLLERR = 0x0008; - public static final short POLLHUP = 0x0010; - public static final short POLLNVAL = 0x0020; - public static final short POLLREMOVE = 0x0800; - // Miscellaneous constants static final short SIZE_POLLFD = 8; static final short FD_OFFSET = 0; diff --git a/jdk/src/share/classes/sun/nio/ch/DatagramChannelImpl.java b/jdk/src/share/classes/sun/nio/ch/DatagramChannelImpl.java index 2cda6fa1527..c151afe570b 100644 --- a/jdk/src/share/classes/sun/nio/ch/DatagramChannelImpl.java +++ b/jdk/src/share/classes/sun/nio/ch/DatagramChannelImpl.java @@ -1042,25 +1042,24 @@ class DatagramChannelImpl int oldOps = sk.nioReadyOps(); int newOps = initialOps; - if ((ops & PollArrayWrapper.POLLNVAL) != 0) { + if ((ops & Net.POLLNVAL) != 0) { // This should only happen if this channel is pre-closed while a // selection operation is in progress // ## Throw an error if this channel has not been pre-closed return false; } - if ((ops & (PollArrayWrapper.POLLERR - | PollArrayWrapper.POLLHUP)) != 0) { + if ((ops & (Net.POLLERR | Net.POLLHUP)) != 0) { newOps = intOps; sk.nioReadyOps(newOps); return (newOps & ~oldOps) != 0; } - if (((ops & PollArrayWrapper.POLLIN) != 0) && + if (((ops & Net.POLLIN) != 0) && ((intOps & SelectionKey.OP_READ) != 0)) newOps |= SelectionKey.OP_READ; - if (((ops & PollArrayWrapper.POLLOUT) != 0) && + if (((ops & Net.POLLOUT) != 0) && ((intOps & SelectionKey.OP_WRITE) != 0)) newOps |= SelectionKey.OP_WRITE; @@ -1105,11 +1104,11 @@ class DatagramChannelImpl int newOps = 0; if ((ops & SelectionKey.OP_READ) != 0) - newOps |= PollArrayWrapper.POLLIN; + newOps |= Net.POLLIN; if ((ops & SelectionKey.OP_WRITE) != 0) - newOps |= PollArrayWrapper.POLLOUT; + newOps |= Net.POLLOUT; if ((ops & SelectionKey.OP_CONNECT) != 0) - newOps |= PollArrayWrapper.POLLIN; + newOps |= Net.POLLIN; sk.selector.putEventOps(sk, newOps); } diff --git a/jdk/src/share/classes/sun/nio/ch/DatagramSocketAdaptor.java b/jdk/src/share/classes/sun/nio/ch/DatagramSocketAdaptor.java index 15e1a0ebde9..fe2ed230002 100644 --- a/jdk/src/share/classes/sun/nio/ch/DatagramSocketAdaptor.java +++ b/jdk/src/share/classes/sun/nio/ch/DatagramSocketAdaptor.java @@ -187,9 +187,9 @@ public class DatagramSocketAdaptor if (!dc.isOpen()) throw new ClosedChannelException(); long st = System.currentTimeMillis(); - int result = dc.poll(PollArrayWrapper.POLLIN, to); + int result = dc.poll(Net.POLLIN, to); if (result > 0 && - ((result & PollArrayWrapper.POLLIN) != 0)) { + ((result & Net.POLLIN) != 0)) { if ((sender = dc.receive(bb)) != null) return sender; } diff --git a/jdk/src/share/classes/sun/nio/ch/FileChannelImpl.java b/jdk/src/share/classes/sun/nio/ch/FileChannelImpl.java index 3c4ddaacd6d..2fcd0c89fe0 100644 --- a/jdk/src/share/classes/sun/nio/ch/FileChannelImpl.java +++ b/jdk/src/share/classes/sun/nio/ch/FileChannelImpl.java @@ -110,7 +110,7 @@ public class FileChannelImpl } } - nd.preClose(fd); + // signal any threads blocked on this channel threads.signalAndWait(); if (parent != null) { diff --git a/jdk/src/share/classes/sun/nio/ch/NativeThreadSet.java b/jdk/src/share/classes/sun/nio/ch/NativeThreadSet.java index d6d4c5c9aef..5eb90af879e 100644 --- a/jdk/src/share/classes/sun/nio/ch/NativeThreadSet.java +++ b/jdk/src/share/classes/sun/nio/ch/NativeThreadSet.java @@ -82,8 +82,9 @@ class NativeThreadSet { // Signals all threads in this set. // - void signalAndWait() { - synchronized (this) { + synchronized void signalAndWait() { + boolean interrupted = false; + while (used > 0) { int u = used; int n = elts.length; for (int i = 0; i < n; i++) { @@ -96,16 +97,15 @@ class NativeThreadSet { break; } waitingToEmpty = true; - boolean interrupted = false; - while (used > 0) { - try { - wait(); - } catch (InterruptedException e) { - interrupted = true; - } + try { + wait(50); + } catch (InterruptedException e) { + interrupted = true; + } finally { + waitingToEmpty = false; } - if (interrupted) - Thread.currentThread().interrupt(); } + if (interrupted) + Thread.currentThread().interrupt(); } } diff --git a/jdk/src/share/classes/sun/nio/ch/Net.java b/jdk/src/share/classes/sun/nio/ch/Net.java index 2e2640290c6..a25111c056e 100644 --- a/jdk/src/share/classes/sun/nio/ch/Net.java +++ b/jdk/src/share/classes/sun/nio/ch/Net.java @@ -581,9 +581,34 @@ public class Net { private static native void initIDs(); + /** + * Event masks for the various poll system calls. + * They will be set platform dependant in the static initializer below. + */ + public static final short POLLIN; + public static final short POLLOUT; + public static final short POLLERR; + public static final short POLLHUP; + public static final short POLLNVAL; + public static final short POLLCONN; + + static native short pollinValue(); + static native short polloutValue(); + static native short pollerrValue(); + static native short pollhupValue(); + static native short pollnvalValue(); + static native short pollconnValue(); + static { IOUtil.load(); initIDs(); + + POLLIN = pollinValue(); + POLLOUT = polloutValue(); + POLLERR = pollerrValue(); + POLLHUP = pollhupValue(); + POLLNVAL = pollnvalValue(); + POLLCONN = pollconnValue(); } } diff --git a/jdk/src/share/classes/sun/nio/ch/Reflect.java b/jdk/src/share/classes/sun/nio/ch/Reflect.java index 3ef3d9309f0..fc5276c53c4 100644 --- a/jdk/src/share/classes/sun/nio/ch/Reflect.java +++ b/jdk/src/share/classes/sun/nio/ch/Reflect.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -75,7 +75,7 @@ class Reflect { // package-private static Method lookupMethod(String className, String methodName, - Class... paramTypes) + Class... paramTypes) { try { Class cl = Class.forName(className); diff --git a/jdk/src/share/classes/sun/nio/ch/ServerSocketAdaptor.java b/jdk/src/share/classes/sun/nio/ch/ServerSocketAdaptor.java index 776592db412..d6f2bcd5bd6 100644 --- a/jdk/src/share/classes/sun/nio/ch/ServerSocketAdaptor.java +++ b/jdk/src/share/classes/sun/nio/ch/ServerSocketAdaptor.java @@ -113,7 +113,7 @@ public class ServerSocketAdaptor // package-private if (!ssc.isOpen()) throw new ClosedChannelException(); long st = System.currentTimeMillis(); - int result = ssc.poll(PollArrayWrapper.POLLIN, to); + int result = ssc.poll(Net.POLLIN, to); if (result > 0 && ((sc = ssc.accept()) != null)) return sc.socket(); to -= System.currentTimeMillis() - st; diff --git a/jdk/src/share/classes/sun/nio/ch/ServerSocketChannelImpl.java b/jdk/src/share/classes/sun/nio/ch/ServerSocketChannelImpl.java index 8429442356a..dc15547a225 100644 --- a/jdk/src/share/classes/sun/nio/ch/ServerSocketChannelImpl.java +++ b/jdk/src/share/classes/sun/nio/ch/ServerSocketChannelImpl.java @@ -309,21 +309,20 @@ class ServerSocketChannelImpl int oldOps = sk.nioReadyOps(); int newOps = initialOps; - if ((ops & PollArrayWrapper.POLLNVAL) != 0) { + if ((ops & Net.POLLNVAL) != 0) { // This should only happen if this channel is pre-closed while a // selection operation is in progress // ## Throw an error if this channel has not been pre-closed return false; } - if ((ops & (PollArrayWrapper.POLLERR - | PollArrayWrapper.POLLHUP)) != 0) { + if ((ops & (Net.POLLERR | Net.POLLHUP)) != 0) { newOps = intOps; sk.nioReadyOps(newOps); return (newOps & ~oldOps) != 0; } - if (((ops & PollArrayWrapper.POLLIN) != 0) && + if (((ops & Net.POLLIN) != 0) && ((intOps & SelectionKey.OP_ACCEPT) != 0)) newOps |= SelectionKey.OP_ACCEPT; @@ -369,7 +368,7 @@ class ServerSocketChannelImpl // Translate ops if ((ops & SelectionKey.OP_ACCEPT) != 0) - newOps |= PollArrayWrapper.POLLIN; + newOps |= Net.POLLIN; // Place ops into pollfd array sk.selector.putEventOps(sk, newOps); } diff --git a/jdk/src/share/classes/sun/nio/ch/SimpleAsynchronousFileChannelImpl.java b/jdk/src/share/classes/sun/nio/ch/SimpleAsynchronousFileChannelImpl.java index 741abf733fd..8d891b6ec34 100644 --- a/jdk/src/share/classes/sun/nio/ch/SimpleAsynchronousFileChannelImpl.java +++ b/jdk/src/share/classes/sun/nio/ch/SimpleAsynchronousFileChannelImpl.java @@ -88,7 +88,6 @@ public class SimpleAsynchronousFileChannelImpl invalidateAllLocks(); // signal any threads blocked on this channel - nd.preClose(fdObj); threads.signalAndWait(); // wait until all async I/O operations have completely gracefully diff --git a/jdk/src/share/classes/sun/nio/ch/SocketAdaptor.java b/jdk/src/share/classes/sun/nio/ch/SocketAdaptor.java index 2fd00ca2222..9ca284e54e8 100644 --- a/jdk/src/share/classes/sun/nio/ch/SocketAdaptor.java +++ b/jdk/src/share/classes/sun/nio/ch/SocketAdaptor.java @@ -107,7 +107,7 @@ public class SocketAdaptor throw new ClosedChannelException(); long st = System.currentTimeMillis(); - int result = sc.poll(PollArrayWrapper.POLLCONN, to); + int result = sc.poll(Net.POLLCONN, to); if (result > 0 && sc.finishConnect()) break; to -= System.currentTimeMillis() - st; @@ -201,7 +201,7 @@ public class SocketAdaptor if (!sc.isOpen()) throw new ClosedChannelException(); long st = System.currentTimeMillis(); - int result = sc.poll(PollArrayWrapper.POLLIN, to); + int result = sc.poll(Net.POLLIN, to); if (result > 0) { if ((n = sc.read(bb)) != 0) return n; diff --git a/jdk/src/share/classes/sun/nio/ch/SocketChannelImpl.java b/jdk/src/share/classes/sun/nio/ch/SocketChannelImpl.java index 28f3fc0c3be..535e73cf47e 100644 --- a/jdk/src/share/classes/sun/nio/ch/SocketChannelImpl.java +++ b/jdk/src/share/classes/sun/nio/ch/SocketChannelImpl.java @@ -888,15 +888,14 @@ class SocketChannelImpl int oldOps = sk.nioReadyOps(); int newOps = initialOps; - if ((ops & PollArrayWrapper.POLLNVAL) != 0) { + if ((ops & Net.POLLNVAL) != 0) { // This should only happen if this channel is pre-closed while a // selection operation is in progress // ## Throw an error if this channel has not been pre-closed return false; } - if ((ops & (PollArrayWrapper.POLLERR - | PollArrayWrapper.POLLHUP)) != 0) { + if ((ops & (Net.POLLERR | Net.POLLHUP)) != 0) { newOps = intOps; sk.nioReadyOps(newOps); // No need to poll again in checkConnect, @@ -905,19 +904,19 @@ class SocketChannelImpl return (newOps & ~oldOps) != 0; } - if (((ops & PollArrayWrapper.POLLIN) != 0) && + if (((ops & Net.POLLIN) != 0) && ((intOps & SelectionKey.OP_READ) != 0) && (state == ST_CONNECTED)) newOps |= SelectionKey.OP_READ; - if (((ops & PollArrayWrapper.POLLCONN) != 0) && + if (((ops & Net.POLLCONN) != 0) && ((intOps & SelectionKey.OP_CONNECT) != 0) && ((state == ST_UNCONNECTED) || (state == ST_PENDING))) { newOps |= SelectionKey.OP_CONNECT; readyToConnect = true; } - if (((ops & PollArrayWrapper.POLLOUT) != 0) && + if (((ops & Net.POLLOUT) != 0) && ((intOps & SelectionKey.OP_WRITE) != 0) && (state == ST_CONNECTED)) newOps |= SelectionKey.OP_WRITE; @@ -962,11 +961,11 @@ class SocketChannelImpl public void translateAndSetInterestOps(int ops, SelectionKeyImpl sk) { int newOps = 0; if ((ops & SelectionKey.OP_READ) != 0) - newOps |= PollArrayWrapper.POLLIN; + newOps |= Net.POLLIN; if ((ops & SelectionKey.OP_WRITE) != 0) - newOps |= PollArrayWrapper.POLLOUT; + newOps |= Net.POLLOUT; if ((ops & SelectionKey.OP_CONNECT) != 0) - newOps |= PollArrayWrapper.POLLCONN; + newOps |= Net.POLLCONN; sk.selector.putEventOps(sk, newOps); } diff --git a/jdk/src/share/classes/sun/nio/cs/StandardCharsets.java.template b/jdk/src/share/classes/sun/nio/cs/StandardCharsets.java.template new file mode 100644 index 00000000000..468934b017a --- /dev/null +++ b/jdk/src/share/classes/sun/nio/cs/StandardCharsets.java.template @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2000, 2014, 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. + * + */ + +// -- This file was mechanically generated: Do not edit! -- // + +package sun.nio.cs; + +import java.nio.charset.*; + + +public class StandardCharsets + extends FastCharsetProvider +{ + + _INCLUDE_ALIASES_TABLES_ + _INCLUDE_ALIASES_MAP_ + _INCLUDE_CLASSES_MAP_ + _INCLUDE_CACHE_MAP_ + + public StandardCharsets() { + super("sun.nio.cs", new Aliases(), new Classes(), new Cache()); + } + +} diff --git a/jdk/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java b/jdk/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java index d1c07e2e07c..98ec88166ef 100644 --- a/jdk/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java +++ b/jdk/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java @@ -1297,7 +1297,7 @@ public class ExtendedCharsets } String osName = AccessController.doPrivileged( new GetPropertyAction("os.name")); - if ("SunOS".equals(osName) || "Linux".equals(osName) + if ("SunOS".equals(osName) || "Linux".equals(osName) || "AIX".equals(osName) || osName.contains("OS X")) { charset("x-COMPOUND_TEXT", "COMPOUND_TEXT", new String[] { diff --git a/jdk/src/share/classes/sun/print/PSPrinterJob.java b/jdk/src/share/classes/sun/print/PSPrinterJob.java index b074b7f1604..fdaeb349992 100644 --- a/jdk/src/share/classes/sun/print/PSPrinterJob.java +++ b/jdk/src/share/classes/sun/print/PSPrinterJob.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -900,7 +900,7 @@ public class PSPrinterJob extends RasterPrinterJob { /* Create a PS string big enough to hold a row of pixels. */ - int psBytesPerRow = 3 * (int) intSrcWidth; + int psBytesPerRow = 3 * intSrcWidth; while (psBytesPerRow > MAX_PSSTR) { psBytesPerRow /= 2; } diff --git a/jdk/src/share/classes/sun/print/RasterPrinterJob.java b/jdk/src/share/classes/sun/print/RasterPrinterJob.java index 0f81a4ff13b..dae42e789d9 100644 --- a/jdk/src/share/classes/sun/print/RasterPrinterJob.java +++ b/jdk/src/share/classes/sun/print/RasterPrinterJob.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -181,8 +181,7 @@ public abstract class RasterPrinterJob extends PrinterJob { * use a particular pipeline. Either the raster * pipeline or the pdl pipeline can be forced. */ - String forceStr = - (String)java.security.AccessController.doPrivileged( + String forceStr = java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction(FORCE_PIPE_PROP)); if (forceStr != null) { @@ -193,8 +192,7 @@ public abstract class RasterPrinterJob extends PrinterJob { } } - String shapeTextStr = - (String)java.security.AccessController.doPrivileged( + String shapeTextStr =java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction(SHAPE_TEXT_PROP)); if (shapeTextStr != null) { @@ -512,12 +510,10 @@ public abstract class RasterPrinterJob extends PrinterJob { } else { // Check the list of services. This service may have been // deleted already - PrinterState prnState = (PrinterState)service.getAttribute( - PrinterState.class); + PrinterState prnState = service.getAttribute(PrinterState.class); if (prnState == PrinterState.STOPPED) { PrinterStateReasons prnStateReasons = - (PrinterStateReasons)service.getAttribute( - PrinterStateReasons.class); + service.getAttribute(PrinterStateReasons.class); if ((prnStateReasons != null) && (prnStateReasons.containsKey(PrinterStateReason.SHUTDOWN))) { @@ -1353,12 +1349,10 @@ public abstract class RasterPrinterJob extends PrinterJob { // Check the list of services. This service may have been // deleted already - PrinterState prnState = (PrinterState)psvc.getAttribute( - PrinterState.class); + PrinterState prnState = psvc.getAttribute(PrinterState.class); if (prnState == PrinterState.STOPPED) { PrinterStateReasons prnStateReasons = - (PrinterStateReasons)psvc.getAttribute( - PrinterStateReasons.class); + psvc.getAttribute(PrinterStateReasons.class); if ((prnStateReasons != null) && (prnStateReasons.containsKey(PrinterStateReason.SHUTDOWN))) { @@ -1366,8 +1360,7 @@ public abstract class RasterPrinterJob extends PrinterJob { } } - if ((PrinterIsAcceptingJobs)(psvc.getAttribute( - PrinterIsAcceptingJobs.class)) == + if ((psvc.getAttribute(PrinterIsAcceptingJobs.class)) == PrinterIsAcceptingJobs.NOT_ACCEPTING_JOBS) { throw new PrinterException("Printer is not accepting job."); } @@ -2035,7 +2028,7 @@ public abstract class RasterPrinterJob extends PrinterJob { * fact that we can only create 24 bit per pixel 3 byte BGR * BufferedImages. FIX. */ - int bandHeight = (int)(MAX_BAND_SIZE / bandWidth / 3); + int bandHeight = (MAX_BAND_SIZE / bandWidth / 3); int deviceLeft = (int)Math.rint(paper.getImageableX() * xScale); int deviceTop = (int)Math.rint(paper.getImageableY() * yScale); diff --git a/jdk/src/share/classes/sun/rmi/server/Activation.java b/jdk/src/share/classes/sun/rmi/server/Activation.java index 3098bb0562c..1cd509f2c0e 100644 --- a/jdk/src/share/classes/sun/rmi/server/Activation.java +++ b/jdk/src/share/classes/sun/rmi/server/Activation.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -299,7 +299,7 @@ public class Activation implements Serializable { private static final String NAME = ActivationSystem.class.getName(); private static final long serialVersionUID = 4877330021609408794L; - private final ActivationSystem systemStub; + private ActivationSystem systemStub = null; SystemRegistryImpl(int port, RMIClientSocketFactory csf, @@ -308,7 +308,39 @@ public class Activation implements Serializable { throws RemoteException { super(port, csf, ssf); - this.systemStub = systemStub; + assert systemStub != null; + synchronized (this) { + this.systemStub = systemStub; + notifyAll(); + } + } + + /** + * Waits for systemStub to be initialized and returns its + * initialized value. Any remote call that uses systemStub must + * call this method to get it instead of using direct field + * access. This is necessary because the super() call in the + * constructor exports this object before systemStub is initialized + * (see JDK-8023541), allowing remote calls to come in during this + * time. We can't use checkShutdown() like other nested classes + * because this is a static class. + */ + private synchronized ActivationSystem getSystemStub() { + boolean interrupted = false; + + while (systemStub == null) { + try { + wait(); + } catch (InterruptedException ie) { + interrupted = true; + } + } + + if (interrupted) { + Thread.currentThread().interrupt(); + } + + return systemStub; } /** @@ -321,7 +353,7 @@ public class Activation implements Serializable { throws RemoteException, NotBoundException { if (name.equals(NAME)) { - return systemStub; + return getSystemStub(); } else { return super.lookup(name); } diff --git a/jdk/src/share/classes/sun/security/util/DerValue.java b/jdk/src/share/classes/sun/security/util/DerValue.java index beb51c19ae3..abb45cc6558 100644 --- a/jdk/src/share/classes/sun/security/util/DerValue.java +++ b/jdk/src/share/classes/sun/security/util/DerValue.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -745,19 +745,6 @@ public class DerValue { return buffer.getGeneralizedTime(data.available()); } - /** - * Returns true iff the other object is a DER value which - * is bitwise equal to this one. - * - * @param other the object being compared with this one - */ - public boolean equals(Object other) { - if (other instanceof DerValue) - return equals((DerValue)other); - else - return false; - } - /** * Bitwise equality comparison. DER encoded values have a single * encoding, so that bitwise equality of the encoded values is an @@ -765,10 +752,15 @@ public class DerValue { * * @param other the object being compared with this one */ - public boolean equals(DerValue other) { - if (this == other) { + @Override + public boolean equals(Object o) { + if (this == o) { return true; } + if (!(o instanceof DerValue)) { + return false; + } + DerValue other = (DerValue) o; if (tag != other.tag) { return false; } @@ -801,6 +793,7 @@ public class DerValue { * * @return printable representation of the value */ + @Override public String toString() { try { @@ -928,6 +921,7 @@ public class DerValue { * * @return a hashcode for this DerValue. */ + @Override public int hashCode() { return toString().hashCode(); } diff --git a/jdk/src/share/classes/sun/swing/AbstractFilterComboBoxModel.java b/jdk/src/share/classes/sun/swing/AbstractFilterComboBoxModel.java index 355d3ca89db..fb7c9d100b2 100644 --- a/jdk/src/share/classes/sun/swing/AbstractFilterComboBoxModel.java +++ b/jdk/src/share/classes/sun/swing/AbstractFilterComboBoxModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, 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 @@ -34,6 +34,7 @@ import java.beans.PropertyChangeListener; /** * Data model for a type-face selection combo-box. */ +@SuppressWarnings("serial") // JDK-implementation class public abstract class AbstractFilterComboBoxModel extends AbstractListModel implements ComboBoxModel, PropertyChangeListener { diff --git a/jdk/src/share/classes/sun/swing/BakedArrayList.java b/jdk/src/share/classes/sun/swing/BakedArrayList.java index f689104b716..8f9377b81fe 100644 --- a/jdk/src/share/classes/sun/swing/BakedArrayList.java +++ b/jdk/src/share/classes/sun/swing/BakedArrayList.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -43,7 +43,8 @@ import java.util.*; * * @author Scott Violet */ -public class BakedArrayList extends ArrayList { +@SuppressWarnings("serial") // JDK-implementation class +public class BakedArrayList extends ArrayList { /** * The cached hashCode. */ @@ -53,7 +54,7 @@ public class BakedArrayList extends ArrayList { super(size); } - public BakedArrayList(java.util.List data) { + public BakedArrayList(java.util.List data) { this(data.size()); for (int counter = 0, max = data.size(); counter < max; counter++){ add(data.get(counter)); diff --git a/jdk/src/share/classes/sun/swing/FilePane.java b/jdk/src/share/classes/sun/swing/FilePane.java index 44aedab3d28..763c027a2ab 100644 --- a/jdk/src/share/classes/sun/swing/FilePane.java +++ b/jdk/src/share/classes/sun/swing/FilePane.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -58,6 +58,7 @@ import sun.awt.shell.*; * * @author Leif Samuelsson */ +@SuppressWarnings("serial") // JDK-implementation class public class FilePane extends JPanel implements PropertyChangeListener { // Constants for actions. These are used for the actions' ACTION_COMMAND_KEY // and as keys in the action maps for FilePane and the corresponding UI classes @@ -239,7 +240,7 @@ public class FilePane extends JPanel implements PropertyChangeListener { } } - private void repaintListSelection(JList list) { + private void repaintListSelection(JList list) { int[] indices = list.getSelectedIndices(); for (int i : indices) { Rectangle bounds = list.getCellBounds(i, i); @@ -271,7 +272,7 @@ public class FilePane extends JPanel implements PropertyChangeListener { private boolean fullRowSelection = false; private ListSelectionModel listSelectionModel; - private JList list; + private JList list; private JTable detailsTable; private static final int COLUMN_FILENAME = 0; @@ -331,7 +332,7 @@ public class FilePane extends JPanel implements PropertyChangeListener { createdViewPanel = createList(); } - list = (JList) findChildComponent(createdViewPanel, JList.class); + list = findChildComponent(createdViewPanel, JList.class); if (listSelectionModel == null) { listSelectionModel = list.getSelectionModel(); if (detailsTable != null) { @@ -352,7 +353,7 @@ public class FilePane extends JPanel implements PropertyChangeListener { createdViewPanel = createDetailsView(); } - detailsTable = (JTable) findChildComponent(createdViewPanel, JTable.class); + detailsTable = findChildComponent(createdViewPanel, JTable.class); detailsTable.setRowHeight(Math.max(detailsTable.getFont().getSize() + 4, 16 + 1)); if (listSelectionModel != null) { detailsTable.setSelectionModel(listSelectionModel); @@ -391,6 +392,7 @@ public class FilePane extends JPanel implements PropertyChangeListener { firePropertyChange("viewType", oldValue, viewType); } + @SuppressWarnings("serial") // JDK-implementation class class ViewTypeAction extends AbstractAction { private int viewType; @@ -470,6 +472,7 @@ public class FilePane extends JPanel implements PropertyChangeListener { */ public Action[] getActions() { if (actions == null) { + @SuppressWarnings("serial") // JDK-implementation class class FilePaneAction extends AbstractAction { FilePaneAction(String name) { this(name, name); @@ -566,7 +569,7 @@ public class FilePane extends JPanel implements PropertyChangeListener { } - private void updateListRowCount(JList list) { + private void updateListRowCount(JList list) { if (smallIconsView) { list.setVisibleRowCount(getModel().getSize() / 3); } else { @@ -577,9 +580,11 @@ public class FilePane extends JPanel implements PropertyChangeListener { public JPanel createList() { JPanel p = new JPanel(new BorderLayout()); final JFileChooser fileChooser = getFileChooser(); + + @SuppressWarnings("serial") // anonymous class final JList list = new JList() { public int getNextMatch(String prefix, int startIndex, Position.Bias bias) { - ListModel model = getModel(); + ListModel model = getModel(); int max = model.getSize(); if (prefix == null || startIndex < 0 || startIndex >= max) { throw new IllegalArgumentException(); @@ -651,6 +656,7 @@ public class FilePane extends JPanel implements PropertyChangeListener { /** * This model allows for sorting JList */ + @SuppressWarnings("serial") // JDK-implementation class private class SortableListModel extends AbstractListModel implements TableModelListener, RowSorterListener { @@ -684,6 +690,7 @@ public class FilePane extends JPanel implements PropertyChangeListener { return detailsTableModel; } + @SuppressWarnings("serial") // JDK-implementation class class DetailsTableModel extends AbstractTableModel implements ListDataListener { JFileChooser chooser; BasicDirectoryModel directoryModel; @@ -911,7 +918,7 @@ public class FilePane extends JPanel implements PropertyChangeListener { public void updateComparators(ShellFolderColumnInfo [] columns) { for (int i = 0; i < columns.length; i++) { - Comparator c = columns[i].getComparator(); + Comparator c = columns[i].getComparator(); if (c != null) { c = new DirectoriesFirstComparatorWrapper(i, c); } @@ -962,12 +969,13 @@ public class FilePane extends JPanel implements PropertyChangeListener { * directory and file to file using the wrapped comparator. */ private class DirectoriesFirstComparatorWrapper implements Comparator { - private Comparator comparator; + private Comparator comparator; private int column; - public DirectoriesFirstComparatorWrapper(int column, Comparator comparator) { + @SuppressWarnings("unchecked") + public DirectoriesFirstComparatorWrapper(int column, Comparator comparator) { this.column = column; - this.comparator = comparator; + this.comparator = (Comparator)comparator; } public int compare(File f1, File f2) { @@ -1003,6 +1011,7 @@ public class FilePane extends JPanel implements PropertyChangeListener { return tableCellEditor; } + @SuppressWarnings("serial") // JDK-implementation class private class DetailsTableCellEditor extends DefaultCellEditor { private final JTextField tf; @@ -1025,7 +1034,7 @@ public class FilePane extends JPanel implements PropertyChangeListener { } } - + @SuppressWarnings("serial") // JDK-implementation class class DetailsTableCellRenderer extends DefaultTableCellRenderer { JFileChooser chooser; DateFormat df; @@ -1129,6 +1138,7 @@ public class FilePane extends JPanel implements PropertyChangeListener { JPanel p = new JPanel(new BorderLayout()); + @SuppressWarnings("serial") // anonymous class final JTable detailsTable = new JTable(getDetailsTableModel()) { // Handle Escape key events here protected boolean processKeyBinding(KeyStroke ks, KeyEvent e, int condition, boolean pressed) { @@ -1447,6 +1457,7 @@ public class FilePane extends JPanel implements PropertyChangeListener { protected Action newFolderAction; + @SuppressWarnings("serial") // anonymous class inside public Action getNewFolderAction() { if (!readOnly && newFolderAction == null) { newFolderAction = new AbstractAction(newFolderActionLabelText) { @@ -1479,9 +1490,10 @@ public class FilePane extends JPanel implements PropertyChangeListener { return newFolderAction; } + @SuppressWarnings("serial") // JDK-implementation class protected class FileRenderer extends DefaultListCellRenderer { - public Component getListCellRendererComponent(JList list, Object value, + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { @@ -1957,14 +1969,14 @@ public class FilePane extends JPanel implements PropertyChangeListener { return fileChooserUIAccessor.getDirectory(); } - private Component findChildComponent(Container container, Class cls) { + private T findChildComponent(Container container, Class cls) { int n = container.getComponentCount(); for (int i = 0; i < n; i++) { Component comp = container.getComponent(i); if (cls.isInstance(comp)) { - return comp; + return cls.cast(comp); } else if (comp instanceof Container) { - Component c = findChildComponent((Container)comp, cls); + T c = findChildComponent((Container)comp, cls); if (c != null) { return c; } @@ -2018,7 +2030,7 @@ public class FilePane extends JPanel implements PropertyChangeListener { public Action getApproveSelectionAction(); public Action getChangeToParentDirectoryAction(); public Action getNewFolderAction(); - public MouseListener createDoubleClickListener(JList list); + public MouseListener createDoubleClickListener(JList list); public ListSelectionListener createListSelectionListener(); } } diff --git a/jdk/src/share/classes/sun/swing/ImageIconUIResource.java b/jdk/src/share/classes/sun/swing/ImageIconUIResource.java index 75906cac6a6..6ecf32379eb 100644 --- a/jdk/src/share/classes/sun/swing/ImageIconUIResource.java +++ b/jdk/src/share/classes/sun/swing/ImageIconUIResource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2014, 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,6 +35,7 @@ import java.awt.Image; * @author Shannon Hickey * */ +@SuppressWarnings("serial") // JDK-implementation class public class ImageIconUIResource extends ImageIcon implements UIResource { /** diff --git a/jdk/src/share/classes/sun/swing/JLightweightFrame.java b/jdk/src/share/classes/sun/swing/JLightweightFrame.java index dfba20fae2c..f94cdbc46ca 100644 --- a/jdk/src/share/classes/sun/swing/JLightweightFrame.java +++ b/jdk/src/share/classes/sun/swing/JLightweightFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, 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 @@ -64,6 +64,7 @@ import sun.security.action.GetPropertyAction; * @author Artem Ananiev * @author Anton Tarasov */ +@SuppressWarnings("serial") // JDK-implementation class public final class JLightweightFrame extends LightweightFrame implements RootPaneContainer { private final JRootPane rootPane = new JRootPane(); @@ -209,6 +210,7 @@ public final class JLightweightFrame extends LightweightFrame implements RootPan } } + @SuppressWarnings("serial") // anonymous class inside private void initInterior() { contentPane = new JPanel() { @Override diff --git a/jdk/src/share/classes/sun/swing/PrintColorUIResource.java b/jdk/src/share/classes/sun/swing/PrintColorUIResource.java index 93d6d18fc7e..9669be85465 100644 --- a/jdk/src/share/classes/sun/swing/PrintColorUIResource.java +++ b/jdk/src/share/classes/sun/swing/PrintColorUIResource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2014, 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 @@ -36,6 +36,7 @@ import javax.swing.plaf.ColorUIResource; * @author Shannon Hickey * */ +@SuppressWarnings("serial") // JDK-implementation class public class PrintColorUIResource extends ColorUIResource { /** The color to use during printing */ diff --git a/jdk/src/share/classes/sun/swing/PrintingStatus.java b/jdk/src/share/classes/sun/swing/PrintingStatus.java index d5b7aee900c..0dd01a4593b 100644 --- a/jdk/src/share/classes/sun/swing/PrintingStatus.java +++ b/jdk/src/share/classes/sun/swing/PrintingStatus.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -62,6 +62,7 @@ public class PrintingStatus { private final AtomicBoolean isAborted = new AtomicBoolean(false); // the action that will abort printing + @SuppressWarnings("serial") // anonymous class private final Action abortAction = new AbstractAction() { public void actionPerformed(ActionEvent ae) { if (!isAborted.get()) { diff --git a/jdk/src/share/classes/sun/swing/SwingLazyValue.java b/jdk/src/share/classes/sun/swing/SwingLazyValue.java index a9e6f2c1bc8..87205f3398c 100644 --- a/jdk/src/share/classes/sun/swing/SwingLazyValue.java +++ b/jdk/src/share/classes/sun/swing/SwingLazyValue.java @@ -67,13 +67,13 @@ public class SwingLazyValue implements UIDefaults.LazyValue { ReflectUtil.checkPackageAccess(className); Class c = Class.forName(className, true, null); if (methodName != null) { - Class[] types = getClassArray(args); + Class[] types = getClassArray(args); Method m = c.getMethod(methodName, types); makeAccessible(m); return m.invoke(c, args); } else { - Class[] types = getClassArray(args); - Constructor constructor = c.getConstructor(types); + Class[] types = getClassArray(args); + Constructor constructor = c.getConstructor(types); makeAccessible(constructor); return constructor.newInstance(args); } @@ -96,10 +96,10 @@ public class SwingLazyValue implements UIDefaults.LazyValue { }); } - private Class[] getClassArray(Object[] args) { - Class[] types = null; + private Class[] getClassArray(Object[] args) { + Class[] types = null; if (args!=null) { - types = new Class[args.length]; + types = new Class[args.length]; for (int i = 0; i< args.length; i++) { /* PENDING(ges): At present only the primitive types used are handled correctly; this should eventually diff --git a/jdk/src/share/classes/sun/swing/SwingUtilities2.java b/jdk/src/share/classes/sun/swing/SwingUtilities2.java index 9e410ed3977..75a0a4f9b72 100644 --- a/jdk/src/share/classes/sun/swing/SwingUtilities2.java +++ b/jdk/src/share/classes/sun/swing/SwingUtilities2.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -127,7 +127,7 @@ public class SwingUtilities2 { */ public static class AATextInfo { - private static AATextInfo getAATextInfoFromMap(Map hints) { + private static AATextInfo getAATextInfoFromMap(Map hints) { Object aaHint = hints.get(KEY_TEXT_ANTIALIASING); Object contHint = hints.get(KEY_TEXT_LCD_CONTRAST); @@ -141,12 +141,13 @@ public class SwingUtilities2 { } } + @SuppressWarnings("unchecked") public static AATextInfo getAATextInfo(boolean lafCondition) { SunToolkit.setAAFontSettingsCondition(lafCondition); Toolkit tk = Toolkit.getDefaultToolkit(); Object map = tk.getDesktopProperty(SunToolkit.DESKTOPFONTHINTS); if (map instanceof Map) { - return getAATextInfoFromMap((Map)map); + return getAATextInfoFromMap((Map)map); } else { return null; } @@ -663,7 +664,7 @@ public class SwingUtilities2 { * Otherwise, this method returns -1. * This is used to make WindowsL&F JFileChooser act like native dialogs. */ - public static int loc2IndexFileList(JList list, Point point) { + public static int loc2IndexFileList(JList list, Point point) { int index = list.locationToIndex(point); if (index != -1) { Object bySize = list.getClientProperty("List.isFileList"); @@ -680,11 +681,10 @@ public class SwingUtilities2 { * Returns true if the given point is within the actual bounds of the * JList item at index (not just inside the cell). */ - private static boolean pointIsInActualBounds(JList list, int index, + private static boolean pointIsInActualBounds(JList list, int index, Point point) { - ListCellRenderer renderer = list.getCellRenderer(); - ListModel dataModel = list.getModel(); - Object value = dataModel.getElementAt(index); + ListCellRenderer renderer = list.getCellRenderer(); + T value = list.getModel().getElementAt(index); Component item = renderer.getListCellRendererComponent(list, value, index, false, false); Dimension itemSize = item.getPreferredSize(); diff --git a/jdk/src/share/classes/sun/swing/WindowsPlacesBar.java b/jdk/src/share/classes/sun/swing/WindowsPlacesBar.java index 8b033ca3e7f..994f70029ec 100644 --- a/jdk/src/share/classes/sun/swing/WindowsPlacesBar.java +++ b/jdk/src/share/classes/sun/swing/WindowsPlacesBar.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,6 +47,7 @@ import sun.awt.OSInfo; * * @author Leif Samuelsson */ +@SuppressWarnings("serial") // JDK-implementation class public class WindowsPlacesBar extends JToolBar implements ActionListener, PropertyChangeListener { JFileChooser fc; diff --git a/jdk/src/share/classes/sun/swing/icon/SortArrowIcon.java b/jdk/src/share/classes/sun/swing/icon/SortArrowIcon.java index 7aac1159910..54a0238640c 100644 --- a/jdk/src/share/classes/sun/swing/icon/SortArrowIcon.java +++ b/jdk/src/share/classes/sun/swing/icon/SortArrowIcon.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, 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 @@ -36,6 +36,7 @@ import javax.swing.plaf.UIResource; * Sorting icon. * */ +@SuppressWarnings("serial") // JDK-implementation class public class SortArrowIcon implements Icon, UIResource, Serializable { // Height of the arrow, the width is ARROW_HEIGHT private static final int ARROW_HEIGHT = 5; diff --git a/jdk/src/share/classes/sun/swing/plaf/synth/DefaultSynthStyle.java b/jdk/src/share/classes/sun/swing/plaf/synth/DefaultSynthStyle.java index 3da946bcb2f..1297bcd26a5 100644 --- a/jdk/src/share/classes/sun/swing/plaf/synth/DefaultSynthStyle.java +++ b/jdk/src/share/classes/sun/swing/plaf/synth/DefaultSynthStyle.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -61,7 +61,7 @@ public class DefaultSynthStyle extends SynthStyle implements Cloneable { /** * User specific data. */ - private Map data; + private Map data; /** * Font to use if there is no matching StateInfo, or the StateInfo doesn't @@ -106,7 +106,7 @@ public class DefaultSynthStyle extends SynthStyle implements Cloneable { } } if (style.data != null) { - data = new HashMap(); + data = new HashMap<>(); data.putAll(style.data); } font = style.font; @@ -124,7 +124,7 @@ public class DefaultSynthStyle extends SynthStyle implements Cloneable { * @param data Style specific data. */ public DefaultSynthStyle(Insets insets, boolean opaque, - StateInfo[] states, Map data) { + StateInfo[] states, Map data) { this.insets = insets; this.opaque = opaque; this.states = states; @@ -366,7 +366,7 @@ public class DefaultSynthStyle extends SynthStyle implements Cloneable { * * @param data Style specific values */ - public void setData(Map data) { + public void setData(Map data) { this.data = data; } @@ -375,7 +375,7 @@ public class DefaultSynthStyle extends SynthStyle implements Cloneable { * * @return Style specific data. */ - public Map getData() { + public Map getData() { return data; } @@ -402,7 +402,7 @@ public class DefaultSynthStyle extends SynthStyle implements Cloneable { } - private Object getKeyFromData(Map stateData, Object key) { + private Object getKeyFromData(Map stateData, Object key) { Object value = null; if (stateData != null) { @@ -462,7 +462,7 @@ public class DefaultSynthStyle extends SynthStyle implements Cloneable { } } if (data != null) { - style.data = new HashMap(); + style.data = new HashMap<>(); style.data.putAll(data); } return style; @@ -570,7 +570,7 @@ public class DefaultSynthStyle extends SynthStyle implements Cloneable { } if (data != null) { if (style.data == null) { - style.data = new HashMap(); + style.data = new HashMap<>(); } style.data.putAll(data); } @@ -708,7 +708,7 @@ public class DefaultSynthStyle extends SynthStyle implements Cloneable { * a component. */ public static class StateInfo { - private Map data; + private Map data; private Font font; private Color[] colors; private int state; @@ -746,7 +746,7 @@ public class DefaultSynthStyle extends SynthStyle implements Cloneable { this.font = info.font; if(info.data != null) { if(data == null) { - data = new HashMap(); + data = new HashMap<>(); } data.putAll(info.data); } @@ -756,11 +756,11 @@ public class DefaultSynthStyle extends SynthStyle implements Cloneable { } } - public Map getData() { + public Map getData() { return data; } - public void setData(Map data) { + public void setData(Map data) { this.data = data; } @@ -836,7 +836,7 @@ public class DefaultSynthStyle extends SynthStyle implements Cloneable { } if(data != null) { if(info.data == null) { - info.data = new HashMap(); + info.data = new HashMap<>(); } info.data.putAll(data); } diff --git a/jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUI.java b/jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUI.java index 085a9999dc3..1f93fa7fc24 100644 --- a/jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUI.java +++ b/jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -303,6 +303,7 @@ public abstract class SynthFileChooserUI extends BasicFileChooserUI implements /** * Responds to a File Name completion request (e.g. Tab) */ + @SuppressWarnings("serial") // JDK-implementation class private class FileNameCompletionAction extends AbstractAction { protected FileNameCompletionAction() { super("fileNameCompletion"); @@ -538,6 +539,7 @@ public abstract class SynthFileChooserUI extends BasicFileChooserUI implements public void clearIconCache() { } // Copied as SynthBorder is package private in synth + @SuppressWarnings("serial") // JDK-implementation clas private class UIBorder extends AbstractBorder implements UIResource { private Insets _insets; UIBorder(Insets insets) { diff --git a/jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java b/jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java index bd7c9b4371e..f0d0ac31c14 100644 --- a/jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java +++ b/jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -175,7 +175,7 @@ public class SynthFileChooserUIImpl extends SynthFileChooserUI { return SynthFileChooserUIImpl.this.getNewFolderAction(); } - public MouseListener createDoubleClickListener(JList list) { + public MouseListener createDoubleClickListener(JList list) { return SynthFileChooserUIImpl.this.createDoubleClickListener(getFileChooser(), list); } @@ -190,6 +190,7 @@ public class SynthFileChooserUIImpl extends SynthFileChooserUI { readOnly = UIManager.getBoolean("FileChooser.readOnly"); } + @SuppressWarnings("serial") // anonymous classes inside public void installComponents(JFileChooser fc) { super.installComponents(fc); @@ -562,7 +563,7 @@ public class SynthFileChooserUIImpl extends SynthFileChooserUI { if (currentDirectory != null) { JComponent cb = getDirectoryComboBox(); if (cb instanceof JComboBox) { - ComboBoxModel model = ((JComboBox)cb).getModel(); + ComboBoxModel model = ((JComboBox)cb).getModel(); if (model instanceof DirectoryComboBoxModel) { ((DirectoryComboBoxModel)model).addItem(currentDirectory); } @@ -734,6 +735,7 @@ public class SynthFileChooserUIImpl extends SynthFileChooserUI { /** * Data model for a type-face selection combo-box. */ + @SuppressWarnings("serial") // JDK-implementation class protected class DirectoryComboBoxModel extends AbstractListModel implements ComboBoxModel { Vector directories = new Vector(); int[] depths = null; @@ -863,6 +865,7 @@ public class SynthFileChooserUIImpl extends SynthFileChooserUI { /** * Acts when DirectoryComboBox has changed the selected item. */ + @SuppressWarnings("serial") // JDK-implementation class protected class DirectoryComboBoxAction extends AbstractAction { protected DirectoryComboBoxAction() { super("DirectoryComboBoxAction"); @@ -923,6 +926,7 @@ public class SynthFileChooserUIImpl extends SynthFileChooserUI { /** * Data model for a type-face selection combo-box. */ + @SuppressWarnings("serial") // JDK-implementation class protected class FilterComboBoxModel extends AbstractFilterComboBoxModel { protected JFileChooser getFileChooser() { return SynthFileChooserUIImpl.this.getFileChooser(); @@ -1012,6 +1016,7 @@ public class SynthFileChooserUIImpl extends SynthFileChooserUI { } } + @SuppressWarnings("serial") // JDK-implementation class private class AlignedLabel extends JLabel { private AlignedLabel[] group; private int maxWidth = 0; diff --git a/jdk/src/share/classes/sun/swing/plaf/windows/ClassicSortArrowIcon.java b/jdk/src/share/classes/sun/swing/plaf/windows/ClassicSortArrowIcon.java index 3931ef8135c..6430a71f06e 100644 --- a/jdk/src/share/classes/sun/swing/plaf/windows/ClassicSortArrowIcon.java +++ b/jdk/src/share/classes/sun/swing/plaf/windows/ClassicSortArrowIcon.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, 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 @@ -36,6 +36,7 @@ import javax.swing.plaf.UIResource; * Classic sort icons. * */ +@SuppressWarnings("serial") // JDK-implementation class public class ClassicSortArrowIcon implements Icon, UIResource, Serializable{ private static final int X_OFFSET = 9; private boolean ascending; diff --git a/jdk/src/share/classes/sun/swing/table/DefaultTableCellHeaderRenderer.java b/jdk/src/share/classes/sun/swing/table/DefaultTableCellHeaderRenderer.java index 68aada7d758..8aa945d166e 100644 --- a/jdk/src/share/classes/sun/swing/table/DefaultTableCellHeaderRenderer.java +++ b/jdk/src/share/classes/sun/swing/table/DefaultTableCellHeaderRenderer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -39,6 +39,7 @@ import javax.swing.plaf.UIResource; import javax.swing.border.Border; import javax.swing.table.*; +@SuppressWarnings("serial") // JDK-implementation class public class DefaultTableCellHeaderRenderer extends DefaultTableCellRenderer implements UIResource { private boolean horizontalTextPositionSet; @@ -187,6 +188,7 @@ public class DefaultTableCellHeaderRenderer extends DefaultTableCellRenderer return new Point(x, y); } + @SuppressWarnings("serial") // JDK-implementation class private class EmptyIcon implements Icon, Serializable { int width = 0; int height = 0; diff --git a/jdk/src/share/classes/sun/swing/text/TextComponentPrintable.java b/jdk/src/share/classes/sun/swing/text/TextComponentPrintable.java index bf4d3f59b31..63d3c5890dd 100644 --- a/jdk/src/share/classes/sun/swing/text/TextComponentPrintable.java +++ b/jdk/src/share/classes/sun/swing/text/TextComponentPrintable.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, 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 @@ -324,6 +324,7 @@ public class TextComponentPrintable implements CountingPrintable { } } } + @SuppressWarnings("serial") // anonymous class inside private JTextComponent createPrintShellOnEDT(final JTextComponent textComponent) { assert SwingUtilities.isEventDispatchThread(); diff --git a/jdk/src/share/classes/sun/tools/attach/META-INF/services/com.sun.tools.attach.spi.AttachProvider b/jdk/src/share/classes/sun/tools/attach/META-INF/services/com.sun.tools.attach.spi.AttachProvider index debc75277f3..4cb7f1d2c73 100644 --- a/jdk/src/share/classes/sun/tools/attach/META-INF/services/com.sun.tools.attach.spi.AttachProvider +++ b/jdk/src/share/classes/sun/tools/attach/META-INF/services/com.sun.tools.attach.spi.AttachProvider @@ -31,3 +31,4 @@ #[windows]sun.tools.attach.WindowsAttachProvider #[linux]sun.tools.attach.LinuxAttachProvider #[macosx]sun.tools.attach.BsdAttachProvider +#[aix]sun.tools.attach.AixAttachProvider diff --git a/jdk/src/share/classes/sun/tools/javac/SourceClass.java b/jdk/src/share/classes/sun/tools/javac/SourceClass.java index 0a1741d7b31..d1744baf3c6 100644 --- a/jdk/src/share/classes/sun/tools/javac/SourceClass.java +++ b/jdk/src/share/classes/sun/tools/javac/SourceClass.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 2014, 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 @@ -154,7 +154,7 @@ class SourceClass extends ClassDefinition { // maybe define an uplevel "A.this" current instance field if (!isTopLevel() && !isLocal()) { - LocalMember outerArg = ((SourceClass)outerClass).getThisArgument(); + LocalMember outerArg = outerClass.getThisArgument(); UplevelReference r = getReference(outerArg); setOuterMember(r.getLocalField(env)); } diff --git a/jdk/src/share/classes/sun/tools/jconsole/ProxyClient.java b/jdk/src/share/classes/sun/tools/jconsole/ProxyClient.java index 301eae167c9..05c827608d0 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/ProxyClient.java +++ b/jdk/src/share/classes/sun/tools/jconsole/ProxyClient.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2014, 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 @@ -711,7 +711,7 @@ public class ProxyClient implements JConsoleContext { memoryPoolProxies = new ArrayList(); Iterator iterator = mbeans.iterator(); while (iterator.hasNext()) { - ObjectName objName = (ObjectName) iterator.next(); + ObjectName objName = iterator.next(); MemoryPoolProxy p = new MemoryPoolProxy(this, objName); memoryPoolProxies.add(p); } @@ -737,7 +737,7 @@ public class ProxyClient implements JConsoleContext { garbageCollectorMBeans = new ArrayList(); Iterator iterator = mbeans.iterator(); while (iterator.hasNext()) { - ObjectName on = (ObjectName) iterator.next(); + ObjectName on = iterator.next(); String name = GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE + ",name=" + on.getKeyProperty("name"); diff --git a/jdk/src/share/classes/sun/tools/jconsole/ThreadTab.java b/jdk/src/share/classes/sun/tools/jconsole/ThreadTab.java index b43a7c57edd..a38b9d68408 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/ThreadTab.java +++ b/jdk/src/share/classes/sun/tools/jconsole/ThreadTab.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2014, 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 @@ -311,7 +311,7 @@ class ThreadTab extends Tab implements ActionListener, DocumentListener, ListSel ThreadJList list = (ThreadJList)ev.getSource(); final JTextArea textArea = list.textArea; - Long selected = (Long)list.getSelectedValue(); + Long selected = list.getSelectedValue(); if (selected == null) { if (lastSelected != -1) { selected = lastSelected; diff --git a/jdk/src/share/classes/sun/tools/jconsole/inspector/XOpenTypeViewer.java b/jdk/src/share/classes/sun/tools/jconsole/inspector/XOpenTypeViewer.java index e5f0b11df14..456ffce1408 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/inspector/XOpenTypeViewer.java +++ b/jdk/src/share/classes/sun/tools/jconsole/inspector/XOpenTypeViewer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2014, 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 @@ -389,7 +389,7 @@ public class XOpenTypeViewer extends JPanel implements ActionListener { Iterator it = keys.iterator(); Object[] rowData = new Object[2]; while (it.hasNext()) { - String key = (String) it.next(); + String key = it.next(); Object val = data.get(key); rowData[0] = formatKey(key); if (val == null) { diff --git a/jdk/src/share/classes/sun/tools/jconsole/inspector/XPlottingViewer.java b/jdk/src/share/classes/sun/tools/jconsole/inspector/XPlottingViewer.java index e6c2d17f411..10ec71e823b 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/inspector/XPlottingViewer.java +++ b/jdk/src/share/classes/sun/tools/jconsole/inspector/XPlottingViewer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2014, 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 @@ -76,7 +76,7 @@ public class XPlottingViewer extends PlotterPanel implements ActionListener { //plotterCache.clear(); it = timerCache.keySet().iterator(); while(it.hasNext()) { - String key = (String) it.next(); + String key = it.next(); if(key.startsWith(String.valueOf(tab.hashCode()))) { Timer t = timerCache.get(key); t.cancel(); diff --git a/jdk/src/share/classes/sun/tools/tree/ConvertExpression.java b/jdk/src/share/classes/sun/tools/tree/ConvertExpression.java index 760d78b4536..13fdb2f89bb 100644 --- a/jdk/src/share/classes/sun/tools/tree/ConvertExpression.java +++ b/jdk/src/share/classes/sun/tools/tree/ConvertExpression.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -65,7 +65,7 @@ class ConvertExpression extends UnaryExpression { case TC_BYTE: return new ByteExpression(right.where, (byte)value); case TC_CHAR: return new CharExpression(right.where, (char)value); case TC_SHORT: return new ShortExpression(right.where, (short)value); - case TC_INT: return new IntExpression(right.where, (int)value); + case TC_INT: return new IntExpression(right.where, value); case TC_LONG: return new LongExpression(right.where, (long)value); case TC_FLOAT: return new FloatExpression(right.where, (float)value); case TC_DOUBLE: return new DoubleExpression(right.where, (double)value); diff --git a/jdk/src/share/classes/sun/tools/tree/FinallyStatement.java b/jdk/src/share/classes/sun/tools/tree/FinallyStatement.java index d0b688fdcd5..aa85218e83f 100644 --- a/jdk/src/share/classes/sun/tools/tree/FinallyStatement.java +++ b/jdk/src/share/classes/sun/tools/tree/FinallyStatement.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -281,7 +281,7 @@ class FinallyStatement extends Statement { returnType, idFinallyReturnValue); ctx.declare(env, localfield); - env.debugOutput("Assigning return slot to " + localfield.number); + Environment.debugOutput("Assigning return slot to " + localfield.number); } // allocate space for the exception and return address diff --git a/jdk/src/share/classes/sun/tools/tree/SynchronizedStatement.java b/jdk/src/share/classes/sun/tools/tree/SynchronizedStatement.java index 58db7462718..2c2daa85f41 100644 --- a/jdk/src/share/classes/sun/tools/tree/SynchronizedStatement.java +++ b/jdk/src/share/classes/sun/tools/tree/SynchronizedStatement.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -120,7 +120,7 @@ class SynchronizedStatement extends Statement { LocalMember localfield = new LocalMember(0, clazz, 0, returnType, idFinallyReturnValue); ctx.declare(env, localfield); - env.debugOutput("Assigning return slot to " + localfield.number); + Environment.debugOutput("Assigning return slot to " + localfield.number); } LocalMember f1 = new LocalMember(where, clazz, 0, Type.tObject, null); diff --git a/jdk/src/share/classes/sun/tools/util/CommandLine.java b/jdk/src/share/classes/sun/tools/util/CommandLine.java index 4dd3b4c302a..4bf9582583c 100644 --- a/jdk/src/share/classes/sun/tools/util/CommandLine.java +++ b/jdk/src/share/classes/sun/tools/util/CommandLine.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, 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 @@ -82,7 +82,7 @@ public class CommandLine { st.commentChar('#'); st.quoteChar('"'); st.quoteChar('\''); - while (st.nextToken() != st.TT_EOF) { + while (st.nextToken() != StreamTokenizer.TT_EOF) { args.add(st.sval); } r.close(); diff --git a/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java b/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java index f275a716b79..2aaa1e76dc4 100644 --- a/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java +++ b/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2014, 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 @@ -578,7 +578,7 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { {"Asia/Almaty", new String[] {"Alma-Ata Time", "ALMT", "Alma-Ata Summer Time", "ALMST", "Alma-Ata Time", "ALMT"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"Anadyr Time", "ANAT", "Anadyr Summer Time", "ANAST", "Anadyr Time", "ANAT"}}, diff --git a/jdk/src/share/classes/sun/util/resources/de/TimeZoneNames_de.java b/jdk/src/share/classes/sun/util/resources/de/TimeZoneNames_de.java index ef7dec8570f..4d25bce3586 100644 --- a/jdk/src/share/classes/sun/util/resources/de/TimeZoneNames_de.java +++ b/jdk/src/share/classes/sun/util/resources/de/TimeZoneNames_de.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -578,7 +578,7 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle { {"Asia/Almaty", new String[] {"Alma Ata Zeit", "ALMT", "Alma-Ata Sommerzeit", "ALMST", "Alma Ata Zeit", "ALMT"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"Anadyr Zeit", "ANAT", "Anadyr Sommerzeit", "ANAST", "Anadyr Zeit", "ANAT"}}, diff --git a/jdk/src/share/classes/sun/util/resources/es/TimeZoneNames_es.java b/jdk/src/share/classes/sun/util/resources/es/TimeZoneNames_es.java index aa1a8903817..07d77325a47 100644 --- a/jdk/src/share/classes/sun/util/resources/es/TimeZoneNames_es.java +++ b/jdk/src/share/classes/sun/util/resources/es/TimeZoneNames_es.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -578,7 +578,7 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { {"Asia/Almaty", new String[] {"Hora de Alma-Ata", "ALMT", "Hora de verano de Alma-Ata", "ALMST", "Hora de Alma-Ata", "ALMT"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"Hora de Anadyr", "ANAT", "Hora de verano de Anadyr", "ANAST", "Hora de Anadyr", "ANAT"}}, diff --git a/jdk/src/share/classes/sun/util/resources/fr/TimeZoneNames_fr.java b/jdk/src/share/classes/sun/util/resources/fr/TimeZoneNames_fr.java index a28983b85db..d15b9056057 100644 --- a/jdk/src/share/classes/sun/util/resources/fr/TimeZoneNames_fr.java +++ b/jdk/src/share/classes/sun/util/resources/fr/TimeZoneNames_fr.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -578,7 +578,7 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle { {"Asia/Almaty", new String[] {"Heure d'Alma-Ata", "ALMT", "Heure d'\u00e9t\u00e9 d'Alma-Ata", "ALMST", "Heure d'Alma-Ata", "ALMT"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"Heure d'Anadyr", "ANAT", "Heure d'\u00e9t\u00e9 d'Anadyr", "ANAST", "Heure d'Anadyr", "ANAT"}}, diff --git a/jdk/src/share/classes/sun/util/resources/it/TimeZoneNames_it.java b/jdk/src/share/classes/sun/util/resources/it/TimeZoneNames_it.java index 4b2209d8e27..a07be9af4a6 100644 --- a/jdk/src/share/classes/sun/util/resources/it/TimeZoneNames_it.java +++ b/jdk/src/share/classes/sun/util/resources/it/TimeZoneNames_it.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -578,7 +578,7 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle { {"Asia/Almaty", new String[] {"Ora di Alma-Ata", "ALMT", "Ora estiva di Alma-Ata", "ALMST", "Ora di Alma-Ata", "ALMT"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"Ora di Anadyr", "ANAT", "Ora estiva di Anadyr", "ANAST", "Ora di Anadyr", "ANAT"}}, diff --git a/jdk/src/share/classes/sun/util/resources/ja/TimeZoneNames_ja.java b/jdk/src/share/classes/sun/util/resources/ja/TimeZoneNames_ja.java index 4b655c0b0d8..5a0f5e7012a 100644 --- a/jdk/src/share/classes/sun/util/resources/ja/TimeZoneNames_ja.java +++ b/jdk/src/share/classes/sun/util/resources/ja/TimeZoneNames_ja.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -578,7 +578,7 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle { {"Asia/Almaty", new String[] {"\u30a2\u30eb\u30de\u30a2\u30bf\u6642\u9593", "ALMT", "\u30a2\u30eb\u30de\u30a2\u30bf\u590f\u6642\u9593", "ALMST", "\u30A2\u30EB\u30DE\u30A2\u30BF\u6642\u9593", "ALMT"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"\u30a2\u30ca\u30c9\u30a5\u30a4\u30ea\u6642\u9593", "ANAT", "\u30a2\u30ca\u30c9\u30a5\u30a4\u30ea\u590f\u6642\u9593", "ANAST", "\u30A2\u30CA\u30C7\u30A3\u30EA\u6642\u9593", "ANAT"}}, diff --git a/jdk/src/share/classes/sun/util/resources/ko/TimeZoneNames_ko.java b/jdk/src/share/classes/sun/util/resources/ko/TimeZoneNames_ko.java index b32bf1334ca..4d9f395fd55 100644 --- a/jdk/src/share/classes/sun/util/resources/ko/TimeZoneNames_ko.java +++ b/jdk/src/share/classes/sun/util/resources/ko/TimeZoneNames_ko.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -578,7 +578,7 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle { {"Asia/Almaty", new String[] {"\uc54c\ub9c8\uc544\ud0c0 \uc2dc\uac04", "ALMT", "\uc54c\ub9c8\uc544\ud0c0 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ALMST", "\uC54C\uB9C8\uC544\uD0C0 \uD45C\uC900\uC2DC", "ALMT"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"\uc544\ub098\ub514\ub974 \uc2dc\uac04", "ANAT", "\uc544\ub098\ub514\ub974 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ANAST", "\uC544\uB098\uB514\uB9AC \uD45C\uC900\uC2DC", "ANAT"}}, diff --git a/jdk/src/share/classes/sun/util/resources/no/LocaleNames_no.properties b/jdk/src/share/classes/sun/util/resources/no/LocaleNames_no.properties index 3a43b04dcc9..f39dfb66568 100644 --- a/jdk/src/share/classes/sun/util/resources/no/LocaleNames_no.properties +++ b/jdk/src/share/classes/sun/util/resources/no/LocaleNames_no.properties @@ -38,6 +38,8 @@ # language names # key is ISO 639 language code +nb=bokm\u00e5l +nn=nynorsk no=norsk # country names diff --git a/jdk/src/share/classes/sun/util/resources/no/LocaleNames_no_NO_NY.properties b/jdk/src/share/classes/sun/util/resources/no/LocaleNames_no_NO_NY.properties index 3a43b04dcc9..e56e415a512 100644 --- a/jdk/src/share/classes/sun/util/resources/no/LocaleNames_no_NO_NY.properties +++ b/jdk/src/share/classes/sun/util/resources/no/LocaleNames_no_NO_NY.properties @@ -38,12 +38,14 @@ # language names # key is ISO 639 language code +nb=bokm\u00e5l +nn=nynorsk no=norsk # country names # key is ISO 3166 country code -NO=Norge +NO=Noreg # variant names diff --git a/jdk/src/share/classes/sun/util/resources/pt/TimeZoneNames_pt_BR.java b/jdk/src/share/classes/sun/util/resources/pt/TimeZoneNames_pt_BR.java index 265fba0b813..07b13ae48ec 100644 --- a/jdk/src/share/classes/sun/util/resources/pt/TimeZoneNames_pt_BR.java +++ b/jdk/src/share/classes/sun/util/resources/pt/TimeZoneNames_pt_BR.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -578,7 +578,7 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle { {"Asia/Almaty", new String[] {"Fuso hor\u00e1rio de Alma-Ata", "ALMT", "Fuso hor\u00e1rio de ver\u00e3o de Alma-Ata", "ALMST", "Hor\u00E1rio de Alma-Ata", "ALMT"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"Fuso hor\u00e1rio de Anadyr", "ANAT", "Fuso hor\u00e1rio de ver\u00e3o de Anadyr", "ANAST", "Hor\u00E1rio de Anadyr", "ANAT"}}, diff --git a/jdk/src/share/classes/sun/util/resources/sv/TimeZoneNames_sv.java b/jdk/src/share/classes/sun/util/resources/sv/TimeZoneNames_sv.java index c0ec6e9e1c7..5dfb716c627 100644 --- a/jdk/src/share/classes/sun/util/resources/sv/TimeZoneNames_sv.java +++ b/jdk/src/share/classes/sun/util/resources/sv/TimeZoneNames_sv.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -578,7 +578,7 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle { {"Asia/Almaty", new String[] {"Alma-Ata, normaltid", "ALMT", "Alma-Ata, sommartid", "ALMST", "Alma-Ata-tid", "ALMT"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"Anadyr, normaltid", "ANAT", "Anadyr, sommartid", "ANAST", "Anadyr-tid", "ANAT"}}, diff --git a/jdk/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_CN.java b/jdk/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_CN.java index 7f79e9612bd..62a946ba437 100644 --- a/jdk/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_CN.java +++ b/jdk/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_CN.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -578,7 +578,7 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle { {"Asia/Almaty", new String[] {"Alma-Ata \u65f6\u95f4", "ALMT", "Alma-Ata \u590f\u4ee4\u65f6", "ALMST", "Alma-Ata \u65F6\u95F4", "ALMT"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"\u963f\u90a3\u5e95\u6cb3\u65f6\u95f4", "ANAT", "\u963f\u90a3\u5e95\u6cb3\u590f\u4ee4\u65f6", "ANAST", "\u963F\u90A3\u5E95\u6CB3\u65F6\u95F4", "ANAT"}}, diff --git a/jdk/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_TW.java b/jdk/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_TW.java index 8cccc2f01ba..f91da7afb3d 100644 --- a/jdk/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_TW.java +++ b/jdk/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_TW.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -578,7 +578,7 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle { {"Asia/Almaty", new String[] {"Alma-Ata \u6642\u9593", "ALMT", "Alma-Ata \u590f\u4ee4\u6642\u9593", "ALMST", "\u963F\u62C9\u6728\u5716\u6642\u9593", "ALMT"}}, - {"Asia/Amman", ARAST}, + {"Asia/Amman", EET}, {"Asia/Anadyr", new String[] {"\u963f\u90a3\u5e95\u6cb3\u6642\u9593", "ANAT", "\u963f\u90a3\u5e95\u6cb3\u590f\u4ee4\u6642\u9593", "ANAST", "\u963F\u90A3\u5E95\u6CB3\u6642\u9593", "ANAT"}}, diff --git a/jdk/src/share/instrument/Reentrancy.c b/jdk/src/share/instrument/Reentrancy.c index 58cbfdd1b53..0b526c10a45 100644 --- a/jdk/src/share/instrument/Reentrancy.c +++ b/jdk/src/share/instrument/Reentrancy.c @@ -130,6 +130,7 @@ tryToAcquireReentrancyToken( jvmtiEnv * jvmtienv, error = confirmingTLSSet ( jvmtienv, thread, JPLIS_CURRENTLY_INSIDE_TOKEN); + check_phase_ret_false(error); jplis_assert(error == JVMTI_ERROR_NONE); if ( error != JVMTI_ERROR_NONE ) { result = JNI_FALSE; @@ -158,6 +159,7 @@ releaseReentrancyToken( jvmtiEnv * jvmtienv, error = confirmingTLSSet( jvmtienv, thread, JPLIS_CURRENTLY_OUTSIDE_TOKEN); + check_phase_ret(error); jplis_assert(error == JVMTI_ERROR_NONE); } diff --git a/jdk/src/share/lib/security/java.security-aix b/jdk/src/share/lib/security/java.security-aix new file mode 100644 index 00000000000..fd49537f609 --- /dev/null +++ b/jdk/src/share/lib/security/java.security-aix @@ -0,0 +1,497 @@ +# +# This is the "master security properties file". +# +# An alternate java.security properties file may be specified +# from the command line via the system property +# +# -Djava.security.properties= +# +# This properties file appends to the master security properties file. +# If both properties files specify values for the same key, the value +# from the command-line properties file is selected, as it is the last +# one loaded. +# +# Also, if you specify +# +# -Djava.security.properties== (2 equals), +# +# then that properties file completely overrides the master security +# properties file. +# +# To disable the ability to specify an additional properties file from +# the command line, set the key security.overridePropertiesFile +# to false in the master security properties file. It is set to true +# by default. + +# In this file, various security properties are set for use by +# java.security classes. This is where users can statically register +# Cryptography Package Providers ("providers" for short). The term +# "provider" refers to a package or set of packages that supply a +# concrete implementation of a subset of the cryptography aspects of +# the Java Security API. A provider may, for example, implement one or +# more digital signature algorithms or message digest algorithms. +# +# Each provider must implement a subclass of the Provider class. +# To register a provider in this master security properties file, +# specify the Provider subclass name and priority in the format +# +# security.provider.= +# +# This declares a provider, and specifies its preference +# order n. The preference order is the order in which providers are +# searched for requested algorithms (when no specific provider is +# requested). The order is 1-based; 1 is the most preferred, followed +# by 2, and so on. +# +# must specify the subclass of the Provider class whose +# constructor sets the values of various properties that are required +# for the Java Security API to look up the algorithms or other +# facilities implemented by the provider. +# +# There must be at least one provider specification in java.security. +# There is a default provider that comes standard with the JDK. It +# is called the "SUN" provider, and its Provider subclass +# named Sun appears in the sun.security.provider package. Thus, the +# "SUN" provider is registered via the following: +# +# security.provider.1=sun.security.provider.Sun +# +# (The number 1 is used for the default provider.) +# +# Note: Providers can be dynamically registered instead by calls to +# either the addProvider or insertProviderAt method in the Security +# class. + +# +# List of providers and their preference orders (see above): +# +security.provider.1=sun.security.provider.Sun +security.provider.2=sun.security.rsa.SunRsaSign +security.provider.3=sun.security.ec.SunEC +security.provider.4=com.sun.net.ssl.internal.ssl.Provider +security.provider.5=com.sun.crypto.provider.SunJCE +security.provider.6=sun.security.jgss.SunProvider +security.provider.7=com.sun.security.sasl.Provider +security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI +security.provider.9=sun.security.smartcardio.SunPCSC + +# +# Sun Provider SecureRandom seed source. +# +# Select the primary source of seed data for the "SHA1PRNG" and +# "NativePRNG" SecureRandom implementations in the "Sun" provider. +# (Other SecureRandom implementations might also use this property.) +# +# On Unix-like systems (for example, Solaris/Linux/MacOS), the +# "NativePRNG" and "SHA1PRNG" implementations obtains seed data from +# special device files such as file:/dev/random. +# +# On Windows systems, specifying the URLs "file:/dev/random" or +# "file:/dev/urandom" will enable the native Microsoft CryptoAPI seeding +# mechanism for SHA1PRNG. +# +# By default, an attempt is made to use the entropy gathering device +# specified by the "securerandom.source" Security property. If an +# exception occurs while accessing the specified URL: +# +# SHA1PRNG: +# the traditional system/thread activity algorithm will be used. +# +# NativePRNG: +# a default value of /dev/random will be used. If neither +# are available, the implementation will be disabled. +# "file" is the only currently supported protocol type. +# +# The entropy gathering device can also be specified with the System +# property "java.security.egd". For example: +# +# % java -Djava.security.egd=file:/dev/random MainClass +# +# Specifying this System property will override the +# "securerandom.source" Security property. +# +# In addition, if "file:/dev/random" or "file:/dev/urandom" is +# specified, the "NativePRNG" implementation will be more preferred than +# SHA1PRNG in the Sun provider. +# +securerandom.source=file:/dev/random + +# +# A list of known strong SecureRandom implementations. +# +# To help guide applications in selecting a suitable strong +# java.security.SecureRandom implementation, Java distributions should +# indicate a list of known strong implementations using the property. +# +# This is a comma-separated list of algorithm and/or algorithm:provider +# entries. +# +securerandom.strongAlgorithms=NativePRNGBlocking:SUN + +# +# Class to instantiate as the javax.security.auth.login.Configuration +# provider. +# +login.configuration.provider=sun.security.provider.ConfigFile + +# +# Default login configuration file +# +#login.config.url.1=file:${user.home}/.java.login.config + +# +# Class to instantiate as the system Policy. This is the name of the class +# that will be used as the Policy object. +# +policy.provider=sun.security.provider.PolicyFile + +# The default is to have a single system-wide policy file, +# and a policy file in the user's home directory. +policy.url.1=file:${java.home}/lib/security/java.policy +policy.url.2=file:${user.home}/.java.policy + +# whether or not we expand properties in the policy file +# if this is set to false, properties (${...}) will not be expanded in policy +# files. +policy.expandProperties=true + +# whether or not we allow an extra policy to be passed on the command line +# with -Djava.security.policy=somefile. Comment out this line to disable +# this feature. +policy.allowSystemProperty=true + +# whether or not we look into the IdentityScope for trusted Identities +# when encountering a 1.1 signed JAR file. If the identity is found +# and is trusted, we grant it AllPermission. +policy.ignoreIdentityScope=false + +# +# Default keystore type. +# +keystore.type=jks + +# +# List of comma-separated packages that start with or equal this string +# will cause a security exception to be thrown when +# passed to checkPackageAccess unless the +# corresponding RuntimePermission ("accessClassInPackage."+package) has +# been granted. +package.access=sun.,\ + com.sun.xml.internal.,\ + com.sun.imageio.,\ + com.sun.istack.internal.,\ + com.sun.jmx.,\ + com.sun.media.sound.,\ + com.sun.proxy.,\ + com.sun.corba.se.,\ + com.sun.org.apache.bcel.internal.,\ + com.sun.org.apache.regexp.internal.,\ + com.sun.org.apache.xerces.internal.,\ + com.sun.org.apache.xpath.internal.,\ + com.sun.org.apache.xalan.internal.extensions.,\ + com.sun.org.apache.xalan.internal.lib.,\ + com.sun.org.apache.xalan.internal.res.,\ + com.sun.org.apache.xalan.internal.templates.,\ + com.sun.org.apache.xalan.internal.utils.,\ + com.sun.org.apache.xalan.internal.xslt.,\ + com.sun.org.apache.xalan.internal.xsltc.cmdline.,\ + com.sun.org.apache.xalan.internal.xsltc.compiler.,\ + com.sun.org.apache.xalan.internal.xsltc.trax.,\ + com.sun.org.apache.xalan.internal.xsltc.util.,\ + com.sun.org.apache.xml.internal.res.,\ + com.sun.org.apache.xml.internal.security.,\ + com.sun.org.apache.xml.internal.serializer.utils.,\ + com.sun.org.apache.xml.internal.utils.,\ + com.sun.org.glassfish.,\ + com.oracle.xmlns.internal.,\ + com.oracle.webservices.internal.,\ + oracle.jrockit.jfr.,\ + org.jcp.xml.dsig.internal.,\ + jdk.internal.,\ + jdk.nashorn.internal.,\ + jdk.nashorn.tools. + + +# +# List of comma-separated packages that start with or equal this string +# will cause a security exception to be thrown when +# passed to checkPackageDefinition unless the +# corresponding RuntimePermission ("defineClassInPackage."+package) has +# been granted. +# +# by default, none of the class loaders supplied with the JDK call +# checkPackageDefinition. +# +package.definition=sun.,\ + com.sun.xml.internal.,\ + com.sun.imageio.,\ + com.sun.istack.internal.,\ + com.sun.jmx.,\ + com.sun.media.sound.,\ + com.sun.proxy.,\ + com.sun.corba.se.,\ + com.sun.org.apache.bcel.internal.,\ + com.sun.org.apache.regexp.internal.,\ + com.sun.org.apache.xerces.internal.,\ + com.sun.org.apache.xpath.internal.,\ + com.sun.org.apache.xalan.internal.extensions.,\ + com.sun.org.apache.xalan.internal.lib.,\ + com.sun.org.apache.xalan.internal.res.,\ + com.sun.org.apache.xalan.internal.templates.,\ + com.sun.org.apache.xalan.internal.utils.,\ + com.sun.org.apache.xalan.internal.xslt.,\ + com.sun.org.apache.xalan.internal.xsltc.cmdline.,\ + com.sun.org.apache.xalan.internal.xsltc.compiler.,\ + com.sun.org.apache.xalan.internal.xsltc.trax.,\ + com.sun.org.apache.xalan.internal.xsltc.util.,\ + com.sun.org.apache.xml.internal.res.,\ + com.sun.org.apache.xml.internal.security.,\ + com.sun.org.apache.xml.internal.serializer.utils.,\ + com.sun.org.apache.xml.internal.utils.,\ + com.sun.org.glassfish.,\ + com.oracle.xmlns.internal.,\ + com.oracle.webservices.internal.,\ + oracle.jrockit.jfr.,\ + org.jcp.xml.dsig.internal.,\ + jdk.internal.,\ + jdk.nashorn.internal.,\ + jdk.nashorn.tools. + + +# +# Determines whether this properties file can be appended to +# or overridden on the command line via -Djava.security.properties +# +security.overridePropertiesFile=true + +# +# Determines the default key and trust manager factory algorithms for +# the javax.net.ssl package. +# +ssl.KeyManagerFactory.algorithm=SunX509 +ssl.TrustManagerFactory.algorithm=PKIX + +# +# The Java-level namelookup cache policy for successful lookups: +# +# any negative value: caching forever +# any positive value: the number of seconds to cache an address for +# zero: do not cache +# +# default value is forever (FOREVER). For security reasons, this +# caching is made forever when a security manager is set. When a security +# manager is not set, the default behavior in this implementation +# is to cache for 30 seconds. +# +# NOTE: setting this to anything other than the default value can have +# serious security implications. Do not set it unless +# you are sure you are not exposed to DNS spoofing attack. +# +#networkaddress.cache.ttl=-1 + +# The Java-level namelookup cache policy for failed lookups: +# +# any negative value: cache forever +# any positive value: the number of seconds to cache negative lookup results +# zero: do not cache +# +# In some Microsoft Windows networking environments that employ +# the WINS name service in addition to DNS, name service lookups +# that fail may take a noticeably long time to return (approx. 5 seconds). +# For this reason the default caching policy is to maintain these +# results for 10 seconds. +# +# +networkaddress.cache.negative.ttl=10 + +# +# Properties to configure OCSP for certificate revocation checking +# + +# Enable OCSP +# +# By default, OCSP is not used for certificate revocation checking. +# This property enables the use of OCSP when set to the value "true". +# +# NOTE: SocketPermission is required to connect to an OCSP responder. +# +# Example, +# ocsp.enable=true + +# +# Location of the OCSP responder +# +# By default, the location of the OCSP responder is determined implicitly +# from the certificate being validated. This property explicitly specifies +# the location of the OCSP responder. The property is used when the +# Authority Information Access extension (defined in RFC 3280) is absent +# from the certificate or when it requires overriding. +# +# Example, +# ocsp.responderURL=http://ocsp.example.net:80 + +# +# Subject name of the OCSP responder's certificate +# +# By default, the certificate of the OCSP responder is that of the issuer +# of the certificate being validated. This property identifies the certificate +# of the OCSP responder when the default does not apply. Its value is a string +# distinguished name (defined in RFC 2253) which identifies a certificate in +# the set of certificates supplied during cert path validation. In cases where +# the subject name alone is not sufficient to uniquely identify the certificate +# then both the "ocsp.responderCertIssuerName" and +# "ocsp.responderCertSerialNumber" properties must be used instead. When this +# property is set then those two properties are ignored. +# +# Example, +# ocsp.responderCertSubjectName="CN=OCSP Responder, O=XYZ Corp" + +# +# Issuer name of the OCSP responder's certificate +# +# By default, the certificate of the OCSP responder is that of the issuer +# of the certificate being validated. This property identifies the certificate +# of the OCSP responder when the default does not apply. Its value is a string +# distinguished name (defined in RFC 2253) which identifies a certificate in +# the set of certificates supplied during cert path validation. When this +# property is set then the "ocsp.responderCertSerialNumber" property must also +# be set. When the "ocsp.responderCertSubjectName" property is set then this +# property is ignored. +# +# Example, +# ocsp.responderCertIssuerName="CN=Enterprise CA, O=XYZ Corp" + +# +# Serial number of the OCSP responder's certificate +# +# By default, the certificate of the OCSP responder is that of the issuer +# of the certificate being validated. This property identifies the certificate +# of the OCSP responder when the default does not apply. Its value is a string +# of hexadecimal digits (colon or space separators may be present) which +# identifies a certificate in the set of certificates supplied during cert path +# validation. When this property is set then the "ocsp.responderCertIssuerName" +# property must also be set. When the "ocsp.responderCertSubjectName" property +# is set then this property is ignored. +# +# Example, +# ocsp.responderCertSerialNumber=2A:FF:00 + +# +# Policy for failed Kerberos KDC lookups: +# +# When a KDC is unavailable (network error, service failure, etc), it is +# put inside a blacklist and accessed less often for future requests. The +# value (case-insensitive) for this policy can be: +# +# tryLast +# KDCs in the blacklist are always tried after those not on the list. +# +# tryLess[:max_retries,timeout] +# KDCs in the blacklist are still tried by their order in the configuration, +# but with smaller max_retries and timeout values. max_retries and timeout +# are optional numerical parameters (default 1 and 5000, which means once +# and 5 seconds). Please notes that if any of the values defined here is +# more than what is defined in krb5.conf, it will be ignored. +# +# Whenever a KDC is detected as available, it is removed from the blacklist. +# The blacklist is reset when krb5.conf is reloaded. You can add +# refreshKrb5Config=true to a JAAS configuration file so that krb5.conf is +# reloaded whenever a JAAS authentication is attempted. +# +# Example, +# krb5.kdc.bad.policy = tryLast +# krb5.kdc.bad.policy = tryLess:2,2000 +krb5.kdc.bad.policy = tryLast + +# Algorithm restrictions for certification path (CertPath) processing +# +# In some environments, certain algorithms or key lengths may be undesirable +# for certification path building and validation. For example, "MD2" is +# generally no longer considered to be a secure hash algorithm. This section +# describes the mechanism for disabling algorithms based on algorithm name +# and/or key length. This includes algorithms used in certificates, as well +# as revocation information such as CRLs and signed OCSP Responses. +# +# The syntax of the disabled algorithm string is described as this Java +# BNF-style: +# DisabledAlgorithms: +# " DisabledAlgorithm { , DisabledAlgorithm } " +# +# DisabledAlgorithm: +# AlgorithmName [Constraint] +# +# AlgorithmName: +# (see below) +# +# Constraint: +# KeySizeConstraint +# +# KeySizeConstraint: +# keySize Operator DecimalInteger +# +# Operator: +# <= | < | == | != | >= | > +# +# DecimalInteger: +# DecimalDigits +# +# DecimalDigits: +# DecimalDigit {DecimalDigit} +# +# DecimalDigit: one of +# 1 2 3 4 5 6 7 8 9 0 +# +# The "AlgorithmName" is the standard algorithm name of the disabled +# algorithm. See "Java Cryptography Architecture Standard Algorithm Name +# Documentation" for information about Standard Algorithm Names. Matching +# is performed using a case-insensitive sub-element matching rule. (For +# example, in "SHA1withECDSA" the sub-elements are "SHA1" for hashing and +# "ECDSA" for signatures.) If the assertion "AlgorithmName" is a +# sub-element of the certificate algorithm name, the algorithm will be +# rejected during certification path building and validation. For example, +# the assertion algorithm name "DSA" will disable all certificate algorithms +# that rely on DSA, such as NONEwithDSA, SHA1withDSA. However, the assertion +# will not disable algorithms related to "ECDSA". +# +# A "Constraint" provides further guidance for the algorithm being specified. +# The "KeySizeConstraint" requires a key of a valid size range if the +# "AlgorithmName" is of a key algorithm. The "DecimalInteger" indicates the +# key size specified in number of bits. For example, "RSA keySize <= 1024" +# indicates that any RSA key with key size less than or equal to 1024 bits +# should be disabled, and "RSA keySize < 1024, RSA keySize > 2048" indicates +# that any RSA key with key size less than 1024 or greater than 2048 should +# be disabled. Note that the "KeySizeConstraint" only makes sense to key +# algorithms. +# +# Note: This property is currently used by Oracle's PKIX implementation. It +# is not guaranteed to be examined and used by other implementations. +# +# Example: +# jdk.certpath.disabledAlgorithms=MD2, DSA, RSA keySize < 2048 +# +# +jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024 + +# Algorithm restrictions for Secure Socket Layer/Transport Layer Security +# (SSL/TLS) processing +# +# In some environments, certain algorithms or key lengths may be undesirable +# when using SSL/TLS. This section describes the mechanism for disabling +# algorithms during SSL/TLS security parameters negotiation, including cipher +# suites selection, peer authentication and key exchange mechanisms. +# +# For PKI-based peer authentication and key exchange mechanisms, this list +# of disabled algorithms will also be checked during certification path +# building and validation, including algorithms used in certificates, as +# well as revocation information such as CRLs and signed OCSP Responses. +# This is in addition to the jdk.certpath.disabledAlgorithms property above. +# +# See the specification of "jdk.certpath.disabledAlgorithms" for the +# syntax of the disabled algorithm string. +# +# Note: This property is currently used by Oracle's JSSE implementation. +# It is not guaranteed to be examined and used by other implementations. +# +# Example: +# jdk.tls.disabledAlgorithms=MD5, SHA1, DSA, RSA keySize < 2048 + diff --git a/jdk/src/share/native/com/sun/java/util/jar/pack/zip.cpp b/jdk/src/share/native/com/sun/java/util/jar/pack/zip.cpp index 2544091768f..786a83228bb 100644 --- a/jdk/src/share/native/com/sun/java/util/jar/pack/zip.cpp +++ b/jdk/src/share/native/com/sun/java/util/jar/pack/zip.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2014, 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 @@ -73,8 +73,9 @@ inline uint jar::get_crc32(uint c, uchar *ptr, uint len) { return crc32(c, ptr, SWAP_BYTES(a & 0xFFFF) #define GET_INT_HI(a) \ - SWAP_BYTES((a >> 16) & 0xFFFF); + SWAP_BYTES((a >> 16) & 0xFFFF) +static const ushort jarmagic[2] = { SWAP_BYTES(0xCAFE), 0 }; void jar::init(unpacker* u_) { BYTES_OF(*this).clear(); @@ -105,13 +106,14 @@ void jar::add_to_jar_directory(const char* fname, bool store, int modtime, header[0] = (ushort)SWAP_BYTES(0x4B50); header[1] = (ushort)SWAP_BYTES(0x0201); - header[2] = (ushort)SWAP_BYTES(0xA); + header[2] = (ushort)SWAP_BYTES(( store ) ? 0x0A : 0x14); // required version - header[3] = (ushort)SWAP_BYTES(0xA); + header[3] = (ushort)SWAP_BYTES(( store ) ? 0x0A : 0x14); - // flags 02 = maximum sub-compression flag - header[4] = ( store ) ? 0x0 : SWAP_BYTES(0x2); + // Flags - UTF-8 compression and separating crc and sizes + // into separate headers for deflated file + header[4] = ( store ) ? SWAP_BYTES(0x0800) : 0x0808; // Compression method 8=deflate. header[5] = ( store ) ? 0x0 : SWAP_BYTES(0x08); @@ -135,7 +137,8 @@ void jar::add_to_jar_directory(const char* fname, bool store, int modtime, // Filename length header[14] = (ushort)SWAP_BYTES(fname_length); // So called "extra field" length. - header[15] = 0; + // If it's the first record we must add JAR magic sequence + header[15] = ( central_directory_count ) ? 0 : (ushort)SWAP_BYTES(4); // So called "comment" length. header[16] = 0; // Disk number start @@ -155,6 +158,11 @@ void jar::add_to_jar_directory(const char* fname, bool store, int modtime, // Copy the fname to the header. central_directory.append(fname, fname_length); + // Add jar magic for the first record + if (central_directory_count == 0) { + central_directory.append((void *)jarmagic, sizeof(jarmagic)); + } + central_directory_count++; } @@ -170,10 +178,10 @@ void jar::write_jar_header(const char* fname, bool store, int modtime, header[1] = (ushort)SWAP_BYTES(0x0403); // Version - header[2] = (ushort)SWAP_BYTES(0xA); + header[2] = (ushort)SWAP_BYTES(( store ) ? 0x0A : 0x14); - // flags 02 = maximum sub-compression flag - header[3] = ( store ) ? 0x0 : SWAP_BYTES(0x2); + // General purpose flags - same as in the Central Directory + header[3] = ( store ) ? SWAP_BYTES(0x0800) : 0x0808; // Compression method = deflate header[4] = ( store ) ? 0x0 : SWAP_BYTES(0x08); @@ -182,28 +190,51 @@ void jar::write_jar_header(const char* fname, bool store, int modtime, header[5] = (ushort)GET_INT_LO(dostime); header[6] = (ushort)GET_INT_HI(dostime); - // CRC - header[7] = (ushort)GET_INT_LO(crc); - header[8] = (ushort)GET_INT_HI(crc); + // CRC, 0 if deflated, will come separately in extra header + header[7] = ( store ) ? (ushort)GET_INT_LO(crc) : 0; + header[8] = ( store ) ? (ushort)GET_INT_HI(crc) : 0; - // Compressed length: - header[9] = (ushort)GET_INT_LO(clen); - header[10] = (ushort)GET_INT_HI(clen); + // Compressed length, 0 if deflated + header[9] = ( store ) ? (ushort)GET_INT_LO(clen) : 0; + header[10] = ( store ) ? (ushort)GET_INT_HI(clen) : 0; - // Uncompressed length. - header[11] = (ushort)GET_INT_LO(len); - header[12] = (ushort)GET_INT_HI(len); + // Uncompressed length, 0 if deflated + header[11] = ( store ) ? (ushort)GET_INT_LO(len) : 0; + header[12] = ( store ) ? (ushort)GET_INT_HI(len) : 0; // Filename length header[13] = (ushort)SWAP_BYTES(fname_length); // So called "extra field" length. - header[14] = 0; + header[14] = ( central_directory_count - 1 ) ? 0 : (ushort)SWAP_BYTES(4); // Write the LOC header to the output file. write_data(header, (int)sizeof(header)); // Copy the fname to the header. write_data((char*)fname, (int)fname_length); + + if (central_directory_count == 1) { + // Write JAR magic sequence + write_data((void *)jarmagic, (int)sizeof(jarmagic)); + } +} + +void jar::write_jar_extra(int len, int clen, uint crc) { + ushort header[8]; + // Extra field signature + header[0] = (ushort)SWAP_BYTES(0x4B50); + header[1] = (ushort)SWAP_BYTES(0x0807); + // CRC + header[2] = (ushort)GET_INT_LO(crc); + header[3] = (ushort)GET_INT_HI(crc); + // Compressed length + header[4] = (ushort)GET_INT_LO(clen); + header[5] = (ushort)GET_INT_HI(clen); + // Uncompressed length + header[6] = (ushort)GET_INT_LO(len); + header[7] = (ushort)GET_INT_HI(len); + + write_data(header, sizeof(header)); } static const char marker_comment[] = ZIP_ARCHIVE_MARKER_COMMENT; @@ -212,6 +243,7 @@ void jar::write_central_directory() { bytes mc; mc.set(marker_comment); ushort header[11]; + ushort header64[38]; // Create the End of Central Directory structure. header[0] = (ushort)SWAP_BYTES(0x4B50); @@ -220,8 +252,8 @@ void jar::write_central_directory() { header[2] = 0; header[3] = 0; // Number of entries in central directory. - header[4] = (ushort)SWAP_BYTES(central_directory_count); - header[5] = (ushort)SWAP_BYTES(central_directory_count); + header[4] = ( central_directory_count >= 0xffff ) ? 0xffff : (ushort)SWAP_BYTES(central_directory_count); + header[5] = ( central_directory_count >= 0xffff ) ? 0xffff : (ushort)SWAP_BYTES(central_directory_count); // Size of the central directory} header[6] = (ushort)GET_INT_LO((int)central_directory.size()); header[7] = (ushort)GET_INT_HI((int)central_directory.size()); @@ -229,12 +261,71 @@ void jar::write_central_directory() { header[8] = (ushort)GET_INT_LO(output_file_offset); header[9] = (ushort)GET_INT_HI(output_file_offset); // zipfile comment length; - header [10] = (ushort)SWAP_BYTES((int)mc.len); + header[10] = (ushort)SWAP_BYTES((int)mc.len); // Write the central directory. PRINTCR((2, "Central directory at %d\n", output_file_offset)); write_data(central_directory.b); + // If number of records exceeds the 0xFFFF we need to prepend extended + // Zip64 End of Central Directory record and its locator to the old + // style ECD record + if (central_directory_count > 0xFFFF) { + // Zip64 END signature + header64[0] = (ushort)SWAP_BYTES(0x4B50); + header64[1] = (ushort)0x0606; + // Size of header (long) + header64[2] = (ushort)SWAP_BYTES(44);; + header64[3] = 0; + header64[4] = 0; + header64[5] = 0; + // Version produced and required (short) + header64[6] = (ushort)SWAP_BYTES(45); + header64[7] = (ushort)SWAP_BYTES(45); + // Current disk number (int) + header64[8] = 0; + header64[9] = 0; + // Central directory start disk (int) + header64[10] = 0; + header64[11] = 0; + // Count of records on disk (long) + header64[12] = (ushort)GET_INT_LO(central_directory_count); + header64[13] = (ushort)GET_INT_HI(central_directory_count); + header64[14] = 0; + header64[15] = 0; + // Count of records totally (long) + header64[16] = (ushort)GET_INT_LO(central_directory_count); + header64[17] = (ushort)GET_INT_HI(central_directory_count); + header64[18] = 0; + header64[19] = 0; + // Length of the central directory (long) + header64[20] = header[6]; + header64[21] = header[7]; + header64[22] = 0; + header64[23] = 0; + // Offset of central directory (long) + header64[24] = header[8]; + header64[25] = header[9]; + header64[26] = 0; + header64[27] = 0; + // Zip64 end of central directory locator + // Locator signature + header64[28] = (ushort)SWAP_BYTES(0x4B50); + header64[29] = (ushort)SWAP_BYTES(0x0706); + // Start disk number (int) + header64[30] = 0; + header64[31] = 0; + // Offset of zip64 END record (long) + header64[32] = (ushort)GET_INT_LO(output_file_offset); + header64[33] = (ushort)GET_INT_HI(output_file_offset); + header64[34] = 0; + header64[35] = 0; + // Total number of disks (int) + header64[36] = (ushort)SWAP_BYTES(1); + header64[37] = 0; + write_data(header64, (int)sizeof(header64)); + } + // Write the End of Central Directory structure. PRINTCR((2, "end-of-directory at %d\n", output_file_offset)); write_data(header, (int)sizeof(header)); @@ -286,6 +377,8 @@ void jar::addJarEntry(const char* fname, if (deflate) { write_data(deflated.b); + // Write deflated information in extra header + write_jar_extra(len, clen, crc); } else { write_data(head); write_data(tail); @@ -368,7 +461,7 @@ bool jar::deflate_bytes(bytes& head, bytes& tail) { // NOTE: the window size should always be -MAX_WBITS normally -15. // unzip/zipup.c and java/Deflater.c - int error = deflateInit2(&zs, Z_BEST_COMPRESSION, Z_DEFLATED, + int error = deflateInit2(&zs, Z_DEFAULT_COMPRESSION, Z_DEFLATED, -MAX_WBITS, 8, Z_DEFAULT_STRATEGY); if (error != Z_OK) { switch (error) { @@ -414,7 +507,8 @@ bool jar::deflate_bytes(bytes& head, bytes& tail) { error = deflate(&zs, Z_FINISH); } if (error == Z_STREAM_END) { - if (len > (int)zs.total_out ) { + if ((int)zs.total_out > 0) { + // Even if compressed size is bigger than uncompressed, write it PRINTCR((2, "deflate compressed data %d -> %d\n", len, zs.total_out)); deflated.b.len = zs.total_out; deflateEnd(&zs); diff --git a/jdk/src/share/native/com/sun/java/util/jar/pack/zip.h b/jdk/src/share/native/com/sun/java/util/jar/pack/zip.h index d7c6b34ffd8..14ffc9d65bd 100644 --- a/jdk/src/share/native/com/sun/java/util/jar/pack/zip.h +++ b/jdk/src/share/native/com/sun/java/util/jar/pack/zip.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -40,7 +40,7 @@ struct jar { // Private members fillbytes central_directory; - ushort central_directory_count; + uint central_directory_count; uint output_file_offset; fillbytes deflated; // temporary buffer @@ -74,6 +74,7 @@ struct jar { int len, int clen, uLong crc); void write_jar_header(const char* fname, bool store, int modtime, int len, int clen, unsigned int crc); + void write_jar_extra(int len, int clen, unsigned int crc); void write_central_directory(); uLong dostime(int y, int n, int d, int h, int m, int s); uLong get_dostime(int modtime); diff --git a/jdk/src/share/native/common/check_code.c b/jdk/src/share/native/common/check_code.c index 6a114f1f02b..92d96b19675 100644 --- a/jdk/src/share/native/common/check_code.c +++ b/jdk/src/share/native/common/check_code.c @@ -90,6 +90,41 @@ #include "classfile_constants.h" #include "opcodes.in_out" +/* On AIX malloc(0) and calloc(0, ...) return a NULL pointer, which is legal, + * but the code here does not handles it. So we wrap the methods and return non-NULL + * pointers even if we allocate 0 bytes. + */ +#ifdef _AIX +static int aix_dummy; +static void* aix_malloc(size_t len) { + if (len == 0) { + return &aix_dummy; + } + return malloc(len); +} + +static void* aix_calloc(size_t n, size_t size) { + if (n == 0) { + return &aix_dummy; + } + return calloc(n, size); +} + +static void aix_free(void* p) { + if (p == &aix_dummy) { + return; + } + free(p); +} + +#undef malloc +#undef calloc +#undef free +#define malloc aix_malloc +#define calloc aix_calloc +#define free aix_free +#endif + #ifdef __APPLE__ /* use setjmp/longjmp versions that do not save/restore the signal mask */ #define setjmp _setjmp diff --git a/jdk/src/share/native/common/jni_util.c b/jdk/src/share/native/common/jni_util.c index 3ef707f6079..de3509b7a59 100644 --- a/jdk/src/share/native/common/jni_util.c +++ b/jdk/src/share/native/common/jni_util.c @@ -626,10 +626,14 @@ initializeEncoding(JNIEnv *env) { jstring propname = 0; jstring enc = 0; + jclass strClazz = NULL; if ((*env)->EnsureLocalCapacity(env, 3) < 0) return; + strClazz = JNU_ClassString(env); + CHECK_NULL(strClazz); + propname = (*env)->NewStringUTF(env, "sun.jnu.encoding"); if (propname) { jboolean exc; @@ -683,9 +687,10 @@ initializeEncoding(JNIEnv *env) (*env)->DeleteLocalRef(env, enc); /* Initialize method-id cache */ - String_getBytes_ID = (*env)->GetMethodID(env, JNU_ClassString(env), + String_getBytes_ID = (*env)->GetMethodID(env, strClazz, "getBytes", "(Ljava/lang/String;)[B"); - String_init_ID = (*env)->GetMethodID(env, JNU_ClassString(env), + CHECK_NULL(String_getBytes_ID); + String_init_ID = (*env)->GetMethodID(env, strClazz, "", "([BLjava/lang/String;)V"); } @@ -720,8 +725,10 @@ JNU_NewStringPlatform(JNIEnv *env, const char *str) jbyteArray hab = 0; int len; - if (fastEncoding == NO_ENCODING_YET) + if (fastEncoding == NO_ENCODING_YET) { initializeEncoding(env); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); + } if ((fastEncoding == FAST_8859_1) || (fastEncoding == NO_ENCODING_YET)) return newString8859_1(env, str); @@ -736,9 +743,11 @@ JNU_NewStringPlatform(JNIEnv *env, const char *str) len = (int)strlen(str); hab = (*env)->NewByteArray(env, len); if (hab != 0) { + jclass strClazz = JNU_ClassString(env); + CHECK_NULL_RETURN(strClazz, 0); (*env)->SetByteArrayRegion(env, hab, 0, len, (jbyte *)str); if (jnuEncodingSupported(env)) { - result = (*env)->NewObject(env, JNU_ClassString(env), + result = (*env)->NewObject(env, strClazz, String_init_ID, hab, jnuEncoding); } else { /*If the encoding specified in sun.jnu.encoding is not endorsed @@ -747,9 +756,11 @@ JNU_NewStringPlatform(JNIEnv *env, const char *str) StringCoding class will pickup the iso-8859-1 as the fallback converter for us. */ - jmethodID mid = (*env)->GetMethodID(env, JNU_ClassString(env), + jmethodID mid = (*env)->GetMethodID(env, strClazz, "", "([B)V"); - result = (*env)->NewObject(env, JNU_ClassString(env), mid, hab); + if (mid != NULL) { + result = (*env)->NewObject(env, strClazz, mid, hab); + } } (*env)->DeleteLocalRef(env, hab); return result; @@ -775,8 +786,10 @@ JNU_GetStringPlatformChars(JNIEnv *env, jstring jstr, jboolean *isCopy) if (isCopy) *isCopy = JNI_TRUE; - if (fastEncoding == NO_ENCODING_YET) + if (fastEncoding == NO_ENCODING_YET) { initializeEncoding(env); + JNU_CHECK_EXCEPTION_RETURN(env, 0); + } if ((fastEncoding == FAST_8859_1) || (fastEncoding == NO_ENCODING_YET)) return getString8859_1Chars(env, jstr); @@ -791,9 +804,14 @@ JNU_GetStringPlatformChars(JNIEnv *env, jstring jstr, jboolean *isCopy) if (jnuEncodingSupported(env)) { hab = (*env)->CallObjectMethod(env, jstr, String_getBytes_ID, jnuEncoding); } else { - jmethodID mid = (*env)->GetMethodID(env, JNU_ClassString(env), - "getBytes", "()[B"); - hab = (*env)->CallObjectMethod(env, jstr, mid); + jmethodID mid; + jclass strClazz = JNU_ClassString(env); + CHECK_NULL_RETURN(strClazz, 0); + mid = (*env)->GetMethodID(env, strClazz, + "getBytes", "()[B"); + if (mid != NULL) { + hab = (*env)->CallObjectMethod(env, jstr, mid); + } } if (!(*env)->ExceptionCheck(env)) { @@ -842,6 +860,7 @@ JNU_ClassString(JNIEnv *env) if ((*env)->EnsureLocalCapacity(env, 1) < 0) return 0; c = (*env)->FindClass(env, "java/lang/String"); + CHECK_NULL_RETURN(c, NULL); cls = (*env)->NewGlobalRef(env, c); (*env)->DeleteLocalRef(env, c); } @@ -857,6 +876,7 @@ JNU_ClassClass(JNIEnv *env) if ((*env)->EnsureLocalCapacity(env, 1) < 0) return 0; c = (*env)->FindClass(env, "java/lang/Class"); + CHECK_NULL_RETURN(c, NULL); cls = (*env)->NewGlobalRef(env, c); (*env)->DeleteLocalRef(env, c); } @@ -872,6 +892,7 @@ JNU_ClassObject(JNIEnv *env) if ((*env)->EnsureLocalCapacity(env, 1) < 0) return 0; c = (*env)->FindClass(env, "java/lang/Object"); + CHECK_NULL_RETURN(c, NULL); cls = (*env)->NewGlobalRef(env, c); (*env)->DeleteLocalRef(env, c); } @@ -887,6 +908,7 @@ JNU_ClassThrowable(JNIEnv *env) if ((*env)->EnsureLocalCapacity(env, 1) < 0) return 0; c = (*env)->FindClass(env, "java/lang/Throwable"); + CHECK_NULL_RETURN(c, NULL); cls = (*env)->NewGlobalRef(env, c); (*env)->DeleteLocalRef(env, c); } @@ -936,8 +958,11 @@ JNU_Equals(JNIEnv *env, jobject object1, jobject object2) { static jmethodID mid = NULL; if (mid == NULL) { - mid = (*env)->GetMethodID(env, JNU_ClassObject(env), "equals", + jclass objClazz = JNU_ClassObject(env); + CHECK_NULL_RETURN(objClazz, JNI_FALSE); + mid = (*env)->GetMethodID(env, objClazz, "equals", "(Ljava/lang/Object;)Z"); + CHECK_NULL_RETURN(mid, JNI_FALSE); } return (*env)->CallBooleanMethod(env, object1, mid, object2); } @@ -1039,7 +1064,9 @@ JNU_PrintClass(JNIEnv *env, char* hdr, jobject object) } else { jclass cls = (*env)->GetObjectClass(env, object); jstring clsName = JNU_ToString(env, cls); - JNU_PrintString(env, hdr, clsName); + if (clsName == NULL) { + JNU_PrintString(env, hdr, clsName); + } (*env)->DeleteLocalRef(env, cls); (*env)->DeleteLocalRef(env, clsName); } diff --git a/jdk/src/share/native/common/jni_util.h b/jdk/src/share/native/common/jni_util.h index 0dab24c3392..b8d23cd1c21 100644 --- a/jdk/src/share/native/common/jni_util.h +++ b/jdk/src/share/native/common/jni_util.h @@ -279,14 +279,37 @@ JNU_NotifyAll(JNIEnv *env, jobject object); #define JNU_IsNull(env,obj) ((obj) == NULL) /************************************************************************ - * Miscellaneous utilities used by the class libraries to check for exceptions + * Miscellaneous utilities used by the class libraries to return from + * a function if a value is NULL or an exception is pending. */ -#define CHECK_NULL(x) if ((x) == NULL) return; -#define CHECK_NULL_RETURN(x, y) if ((x) == NULL) return (y); +#define CHECK_NULL(x) \ + do { \ + if ((x) == NULL) { \ + return; \ + } \ + } while (0) \ -#define CHECK_EXCEPTION(env) if ((*env)->ExceptionCheck(env)) return; -#define CHECK_EXCEPTION_RETURN(env, y) if ((*env)->ExceptionCheck(env)) return (y); +#define CHECK_NULL_RETURN(x, y) \ + do { \ + if ((x) == NULL) { \ + return (y); \ + } \ + } while (0) \ + +#define JNU_CHECK_EXCEPTION(env) \ + do { \ + if ((*env)->ExceptionCheck(env)) { \ + return; \ + } \ + } while (0) \ + +#define JNU_CHECK_EXCEPTION_RETURN(env, y) \ + do { \ + if ((*env)->ExceptionCheck(env)) { \ + return (y); \ + } \ + } while (0) /************************************************************************ * Debugging utilities diff --git a/jdk/src/share/native/java/io/io_util.c b/jdk/src/share/native/java/io/io_util.c index 5dd822382f0..f256af4074b 100644 --- a/jdk/src/share/native/java/io/io_util.c +++ b/jdk/src/share/native/java/io/io_util.c @@ -216,6 +216,7 @@ throwFileNotFoundException(JNIEnv *env, jstring path) #else why = JNU_NewStringPlatform(env, buf); #endif + CHECK_NULL(why); } x = JNU_NewObjectByName(env, "java/io/FileNotFoundException", diff --git a/jdk/src/share/native/java/lang/ClassLoader.c b/jdk/src/share/native/java/lang/ClassLoader.c index f6d0583990c..8e0b950406a 100644 --- a/jdk/src/share/native/java/lang/ClassLoader.c +++ b/jdk/src/share/native/java/lang/ClassLoader.c @@ -132,7 +132,6 @@ Java_java_lang_ClassLoader_defineClass1(JNIEnv *env, if (name != NULL) { utfName = getUTF(env, name, buf, sizeof(buf)); if (utfName == NULL) { - JNU_ThrowOutOfMemoryError(env, NULL); goto free_body; } VerifyFixClassname(utfName); @@ -143,7 +142,6 @@ Java_java_lang_ClassLoader_defineClass1(JNIEnv *env, if (source != NULL) { utfSource = getUTF(env, source, sourceBuf, sizeof(sourceBuf)); if (utfSource == NULL) { - JNU_ThrowOutOfMemoryError(env, NULL); goto free_utfName; } } else { @@ -519,7 +517,6 @@ Java_java_lang_ClassLoader_00024NativeLibrary_findBuiltinLib procHandle = getProcessHandle(); cname = JNU_GetStringPlatformChars(env, name, 0); if (cname == NULL) { - JNU_ThrowOutOfMemoryError(env, NULL); return NULL; } // Copy name Skipping PREFIX diff --git a/jdk/src/share/native/java/lang/System.c b/jdk/src/share/native/java/lang/System.c index 660b21e68e1..9c2f591fab4 100644 --- a/jdk/src/share/native/java/lang/System.c +++ b/jdk/src/share/native/java/lang/System.c @@ -56,44 +56,56 @@ Java_java_lang_System_identityHashCode(JNIEnv *env, jobject this, jobject x) return JVM_IHashCode(env, x); } -#define PUTPROP(props, key, val) \ - if (1) { \ - jstring jkey = (*env)->NewStringUTF(env, key); \ - jstring jval = (*env)->NewStringUTF(env, val); \ - jobject r = (*env)->CallObjectMethod(env, props, putID, jkey, jval); \ - if ((*env)->ExceptionOccurred(env)) return NULL; \ - (*env)->DeleteLocalRef(env, jkey); \ - (*env)->DeleteLocalRef(env, jval); \ - (*env)->DeleteLocalRef(env, r); \ +#define PUTPROP(props, key, val) \ + if (1) { \ + jstring jkey, jval; \ + jobject r; \ + jkey = (*env)->NewStringUTF(env, key); \ + if (jkey == NULL) return NULL; \ + jval = (*env)->NewStringUTF(env, val); \ + if (jval == NULL) return NULL; \ + r = (*env)->CallObjectMethod(env, props, putID, jkey, jval); \ + if ((*env)->ExceptionOccurred(env)) return NULL; \ + (*env)->DeleteLocalRef(env, jkey); \ + (*env)->DeleteLocalRef(env, jval); \ + (*env)->DeleteLocalRef(env, r); \ } else ((void) 0) /* "key" is a char type string with only ASCII character in it. "val" is a nchar (typedefed in java_props.h) type string */ -#define PUTPROP_ForPlatformNString(props, key, val) \ - if (1) { \ - jstring jkey = (*env)->NewStringUTF(env, key); \ - jstring jval = GetStringPlatform(env, val); \ - jobject r = (*env)->CallObjectMethod(env, props, putID, jkey, jval); \ - if ((*env)->ExceptionOccurred(env)) return NULL; \ - (*env)->DeleteLocalRef(env, jkey); \ - (*env)->DeleteLocalRef(env, jval); \ - (*env)->DeleteLocalRef(env, r); \ +#define PUTPROP_ForPlatformNString(props, key, val) \ + if (1) { \ + jstring jkey, jval; \ + jobject r; \ + jkey = (*env)->NewStringUTF(env, key); \ + if (jkey == NULL) return NULL; \ + jval = GetStringPlatform(env, val); \ + if (jval == NULL) return NULL; \ + r = (*env)->CallObjectMethod(env, props, putID, jkey, jval); \ + if ((*env)->ExceptionOccurred(env)) return NULL; \ + (*env)->DeleteLocalRef(env, jkey); \ + (*env)->DeleteLocalRef(env, jval); \ + (*env)->DeleteLocalRef(env, r); \ } else ((void) 0) -#define REMOVEPROP(props, key) \ - if (1) { \ - jstring jkey = JNU_NewStringPlatform(env, key); \ - jobject r = (*env)->CallObjectMethod(env, props, removeID, jkey); \ - if ((*env)->ExceptionOccurred(env)) return NULL; \ - (*env)->DeleteLocalRef(env, jkey); \ - (*env)->DeleteLocalRef(env, r); \ +#define REMOVEPROP(props, key) \ + if (1) { \ + jstring jkey; \ + jobject r; \ + jkey = JNU_NewStringPlatform(env, key); \ + if (jkey == NULL) return NULL; \ + r = (*env)->CallObjectMethod(env, props, removeID, jkey); \ + if ((*env)->ExceptionOccurred(env)) return NULL; \ + (*env)->DeleteLocalRef(env, jkey); \ + (*env)->DeleteLocalRef(env, r); \ } else ((void) 0) -#define GETPROP(props, key, jret) \ - if (1) { \ - jstring jkey = JNU_NewStringPlatform(env, key); \ +#define GETPROP(props, key, jret) \ + if (1) { \ + jstring jkey = JNU_NewStringPlatform(env, key); \ + if (jkey == NULL) return NULL; \ jret = (*env)->CallObjectMethod(env, props, getPropID, jkey); \ - if ((*env)->ExceptionOccurred(env)) return NULL; \ - (*env)->DeleteLocalRef(env, jkey); \ + if ((*env)->ExceptionOccurred(env)) return NULL; \ + (*env)->DeleteLocalRef(env, jkey); \ } else ((void) 0) #ifndef VENDOR /* Third party may overwrite this. */ @@ -169,23 +181,31 @@ JNIEXPORT jobject JNICALL Java_java_lang_System_initProperties(JNIEnv *env, jclass cla, jobject props) { char buf[128]; - java_props_t *sprops = GetJavaProperties(env); - jmethodID putID = (*env)->GetMethodID(env, - (*env)->GetObjectClass(env, props), - "put", - "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); - jmethodID removeID = (*env)->GetMethodID(env, - (*env)->GetObjectClass(env, props), - "remove", - "(Ljava/lang/Object;)Ljava/lang/Object;"); - jmethodID getPropID = (*env)->GetMethodID(env, - (*env)->GetObjectClass(env, props), - "getProperty", - "(Ljava/lang/String;)Ljava/lang/String;"); + java_props_t *sprops; + jmethodID putID, removeID, getPropID; jobject ret = NULL; jstring jVMVal = NULL; - if (sprops == NULL || putID == NULL ) return NULL; + sprops = GetJavaProperties(env); + CHECK_NULL_RETURN(sprops, NULL); + + putID = (*env)->GetMethodID(env, + (*env)->GetObjectClass(env, props), + "put", + "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); + CHECK_NULL_RETURN(putID, NULL); + + removeID = (*env)->GetMethodID(env, + (*env)->GetObjectClass(env, props), + "remove", + "(Ljava/lang/Object;)Ljava/lang/Object;"); + CHECK_NULL_RETURN(removeID, NULL); + + getPropID = (*env)->GetMethodID(env, + (*env)->GetObjectClass(env, props), + "getProperty", + "(Ljava/lang/String;)Ljava/lang/String;"); + CHECK_NULL_RETURN(getPropID, NULL); PUTPROP(props, "java.specification.version", JDK_MAJOR_VERSION "." JDK_MINOR_VERSION); @@ -382,6 +402,7 @@ Java_java_lang_System_initProperties(JNIEnv *env, jclass cla, jobject props) GETPROP(props, "sun.locale.formatasdefault", jVMVal); if (jVMVal) { const char * val = (*env)->GetStringUTFChars(env, jVMVal, 0); + CHECK_NULL_RETURN(val, NULL); fmtdefault = !strcmp(val, "true"); (*env)->ReleaseStringUTFChars(env, jVMVal, val); (*env)->DeleteLocalRef(env, jVMVal); diff --git a/jdk/src/share/native/java/net/Inet4Address.c b/jdk/src/share/native/java/net/Inet4Address.c index b2f25416133..9fb0f342c00 100644 --- a/jdk/src/share/native/java/net/Inet4Address.c +++ b/jdk/src/share/native/java/net/Inet4Address.c @@ -34,6 +34,8 @@ jclass ia4_class; jmethodID ia4_ctrID; +static int ia4_initialized = 0; + /* * Class: java_net_Inet4Address * Method: init @@ -41,9 +43,13 @@ jmethodID ia4_ctrID; */ JNIEXPORT void JNICALL Java_java_net_Inet4Address_init(JNIEnv *env, jclass cls) { - jclass c = (*env)->FindClass(env, "java/net/Inet4Address"); - CHECK_NULL(c); - ia4_class = (*env)->NewGlobalRef(env, c); - CHECK_NULL(ia4_class); - ia4_ctrID = (*env)->GetMethodID(env, ia4_class, "", "()V"); + if (!ia4_initialized) { + jclass c = (*env)->FindClass(env, "java/net/Inet4Address"); + CHECK_NULL(c); + ia4_class = (*env)->NewGlobalRef(env, c); + CHECK_NULL(ia4_class); + ia4_ctrID = (*env)->GetMethodID(env, ia4_class, "", "()V"); + CHECK_NULL(ia4_ctrID); + ia4_initialized = 1; + } } diff --git a/jdk/src/share/native/java/net/Inet6Address.c b/jdk/src/share/native/java/net/Inet6Address.c index 729fe78281d..8d34918386d 100644 --- a/jdk/src/share/native/java/net/Inet6Address.c +++ b/jdk/src/share/native/java/net/Inet6Address.c @@ -42,6 +42,8 @@ jfieldID ia6_scopeidsetID; jfieldID ia6_scopeifnameID; jmethodID ia6_ctrID; +static int ia6_initialized = 0; + /* * Class: java_net_Inet6Address * Method: init @@ -49,24 +51,28 @@ jmethodID ia6_ctrID; */ JNIEXPORT void JNICALL Java_java_net_Inet6Address_init(JNIEnv *env, jclass cls) { - jclass ia6h_class; - jclass c = (*env)->FindClass(env, "java/net/Inet6Address"); - CHECK_NULL(c); - ia6_class = (*env)->NewGlobalRef(env, c); - CHECK_NULL(ia6_class); - ia6h_class = (*env)->FindClass(env, "java/net/Inet6Address$Inet6AddressHolder"); - CHECK_NULL(ia6h_class); - ia6_holder6ID = (*env)->GetFieldID(env, ia6_class, "holder6", "Ljava/net/Inet6Address$Inet6AddressHolder;"); - CHECK_NULL(ia6_holder6ID); - ia6_ipaddressID = (*env)->GetFieldID(env, ia6h_class, "ipaddress", "[B"); - CHECK_NULL(ia6_ipaddressID); - ia6_scopeidID = (*env)->GetFieldID(env, ia6h_class, "scope_id", "I"); - CHECK_NULL(ia6_scopeidID); - ia6_cachedscopeidID = (*env)->GetFieldID(env, ia6_class, "cached_scope_id", "I"); - CHECK_NULL(ia6_cachedscopeidID); - ia6_scopeidsetID = (*env)->GetFieldID(env, ia6h_class, "scope_id_set", "Z"); - CHECK_NULL(ia6_scopeidsetID); - ia6_scopeifnameID = (*env)->GetFieldID(env, ia6h_class, "scope_ifname", "Ljava/net/NetworkInterface;"); - CHECK_NULL(ia6_scopeifnameID); - ia6_ctrID = (*env)->GetMethodID(env, ia6_class, "", "()V"); + if (!ia6_initialized) { + jclass ia6h_class; + jclass c = (*env)->FindClass(env, "java/net/Inet6Address"); + CHECK_NULL(c); + ia6_class = (*env)->NewGlobalRef(env, c); + CHECK_NULL(ia6_class); + ia6h_class = (*env)->FindClass(env, "java/net/Inet6Address$Inet6AddressHolder"); + CHECK_NULL(ia6h_class); + ia6_holder6ID = (*env)->GetFieldID(env, ia6_class, "holder6", "Ljava/net/Inet6Address$Inet6AddressHolder;"); + CHECK_NULL(ia6_holder6ID); + ia6_ipaddressID = (*env)->GetFieldID(env, ia6h_class, "ipaddress", "[B"); + CHECK_NULL(ia6_ipaddressID); + ia6_scopeidID = (*env)->GetFieldID(env, ia6h_class, "scope_id", "I"); + CHECK_NULL(ia6_scopeidID); + ia6_cachedscopeidID = (*env)->GetFieldID(env, ia6_class, "cached_scope_id", "I"); + CHECK_NULL(ia6_cachedscopeidID); + ia6_scopeidsetID = (*env)->GetFieldID(env, ia6h_class, "scope_id_set", "Z"); + CHECK_NULL(ia6_scopeidsetID); + ia6_scopeifnameID = (*env)->GetFieldID(env, ia6h_class, "scope_ifname", "Ljava/net/NetworkInterface;"); + CHECK_NULL(ia6_scopeifnameID); + ia6_ctrID = (*env)->GetMethodID(env, ia6_class, "", "()V"); + CHECK_NULL(ia6_ctrID); + ia6_initialized = 1; + } } diff --git a/jdk/src/share/native/java/net/InetAddress.c b/jdk/src/share/native/java/net/InetAddress.c index e9fd0979cb8..a712dd9b1d1 100644 --- a/jdk/src/share/native/java/net/InetAddress.c +++ b/jdk/src/share/native/java/net/InetAddress.c @@ -40,6 +40,8 @@ jfieldID iac_familyID; jfieldID iac_hostNameID; jfieldID ia_preferIPv6AddressID; +static int ia_initialized = 0; + /* * Class: java_net_InetAddress * Method: init @@ -47,21 +49,25 @@ jfieldID ia_preferIPv6AddressID; */ JNIEXPORT void JNICALL Java_java_net_InetAddress_init(JNIEnv *env, jclass cls) { - jclass c = (*env)->FindClass(env,"java/net/InetAddress"); - CHECK_NULL(c); - ia_class = (*env)->NewGlobalRef(env, c); - CHECK_NULL(ia_class); - c = (*env)->FindClass(env,"java/net/InetAddress$InetAddressHolder"); - CHECK_NULL(c); - iac_class = (*env)->NewGlobalRef(env, c); - ia_holderID = (*env)->GetFieldID(env, ia_class, "holder", "Ljava/net/InetAddress$InetAddressHolder;"); - CHECK_NULL(ia_holderID); - ia_preferIPv6AddressID = (*env)->GetStaticFieldID(env, ia_class, "preferIPv6Address", "Z"); - CHECK_NULL(ia_preferIPv6AddressID); + if (!ia_initialized) { + jclass c = (*env)->FindClass(env,"java/net/InetAddress"); + CHECK_NULL(c); + ia_class = (*env)->NewGlobalRef(env, c); + CHECK_NULL(ia_class); + c = (*env)->FindClass(env,"java/net/InetAddress$InetAddressHolder"); + CHECK_NULL(c); + iac_class = (*env)->NewGlobalRef(env, c); + ia_holderID = (*env)->GetFieldID(env, ia_class, "holder", "Ljava/net/InetAddress$InetAddressHolder;"); + CHECK_NULL(ia_holderID); + ia_preferIPv6AddressID = (*env)->GetStaticFieldID(env, ia_class, "preferIPv6Address", "Z"); + CHECK_NULL(ia_preferIPv6AddressID); - iac_addressID = (*env)->GetFieldID(env, iac_class, "address", "I"); - CHECK_NULL(iac_addressID); - iac_familyID = (*env)->GetFieldID(env, iac_class, "family", "I"); - CHECK_NULL(iac_familyID); - iac_hostNameID = (*env)->GetFieldID(env, iac_class, "hostName", "Ljava/lang/String;"); + iac_addressID = (*env)->GetFieldID(env, iac_class, "address", "I"); + CHECK_NULL(iac_addressID); + iac_familyID = (*env)->GetFieldID(env, iac_class, "family", "I"); + CHECK_NULL(iac_familyID); + iac_hostNameID = (*env)->GetFieldID(env, iac_class, "hostName", "Ljava/lang/String;"); + CHECK_NULL(iac_hostNameID); + ia_initialized = 1; + } } diff --git a/jdk/src/share/native/java/net/net_util.c b/jdk/src/share/native/java/net/net_util.c index 54aef661bc2..dd93b1375bc 100644 --- a/jdk/src/share/native/java/net/net_util.c +++ b/jdk/src/share/native/java/net/net_util.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -67,7 +67,7 @@ JNI_OnLoad(JavaVM *vm, void *reserved) supporting socket APIs are available */ IPv6_available = IPv6_supported() & (!preferIPv4Stack); - initLocalAddrTable (); + platformInit(); parseExclusiveBindProperty(env); return JNI_VERSION_1_2; @@ -75,11 +75,14 @@ JNI_OnLoad(JavaVM *vm, void *reserved) static int initialized = 0; -static void initInetAddrs(JNIEnv *env) { +JNIEXPORT void JNICALL initInetAddressIDs(JNIEnv *env) { if (!initialized) { Java_java_net_InetAddress_init(env, 0); + JNU_CHECK_EXCEPTION(env); Java_java_net_Inet4Address_init(env, 0); + JNU_CHECK_EXCEPTION(env); Java_java_net_Inet6Address_init(env, 0); + JNU_CHECK_EXCEPTION(env); initialized = 1; } } @@ -100,47 +103,32 @@ extern jfieldID iac_familyID; * get_ methods that return objects return NULL on error. */ jobject getInet6Address_scopeifname(JNIEnv *env, jobject iaObj) { - jobject holder; - - initInetAddrs(env); - holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); + jobject holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); CHECK_NULL_RETURN(holder, NULL); return (*env)->GetObjectField(env, holder, ia6_scopeifnameID); } int setInet6Address_scopeifname(JNIEnv *env, jobject iaObj, jobject scopeifname) { - jobject holder; - - initInetAddrs(env); - holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); + jobject holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); CHECK_NULL_RETURN(holder, JNI_FALSE); (*env)->SetObjectField(env, holder, ia6_scopeifnameID, scopeifname); return JNI_TRUE; } int getInet6Address_scopeid_set(JNIEnv *env, jobject iaObj) { - jobject holder; - - initInetAddrs(env); - holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); + jobject holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); CHECK_NULL_RETURN(holder, -1); return (*env)->GetBooleanField(env, holder, ia6_scopeidsetID); } int getInet6Address_scopeid(JNIEnv *env, jobject iaObj) { - jobject holder; - - initInetAddrs(env); - holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); + jobject holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); CHECK_NULL_RETURN(holder, -1); return (*env)->GetIntField(env, holder, ia6_scopeidID); } int setInet6Address_scopeid(JNIEnv *env, jobject iaObj, int scopeid) { - jobject holder; - - initInetAddrs(env); - holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); + jobject holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); CHECK_NULL_RETURN(holder, JNI_FALSE); (*env)->SetIntField(env, holder, ia6_scopeidID, scopeid); if (scopeid > 0) { @@ -154,7 +142,6 @@ int getInet6Address_ipaddress(JNIEnv *env, jobject iaObj, char *dest) { jobject holder, addr; jbyteArray barr; - initInetAddrs(env); holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); CHECK_NULL_RETURN(holder, JNI_FALSE); addr = (*env)->GetObjectField(env, holder, ia6_ipaddressID); @@ -167,7 +154,6 @@ int setInet6Address_ipaddress(JNIEnv *env, jobject iaObj, char *address) { jobject holder; jbyteArray addr; - initInetAddrs(env); holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); CHECK_NULL_RETURN(holder, JNI_FALSE); addr = (jbyteArray)(*env)->GetObjectField(env, holder, ia6_ipaddressID); @@ -181,52 +167,38 @@ int setInet6Address_ipaddress(JNIEnv *env, jobject iaObj, char *address) { } void setInetAddress_addr(JNIEnv *env, jobject iaObj, int address) { - jobject holder; - initInetAddrs(env); - holder = (*env)->GetObjectField(env, iaObj, ia_holderID); + jobject holder = (*env)->GetObjectField(env, iaObj, ia_holderID); (*env)->SetIntField(env, holder, iac_addressID, address); } void setInetAddress_family(JNIEnv *env, jobject iaObj, int family) { - jobject holder; - initInetAddrs(env); - holder = (*env)->GetObjectField(env, iaObj, ia_holderID); + jobject holder = (*env)->GetObjectField(env, iaObj, ia_holderID); (*env)->SetIntField(env, holder, iac_familyID, family); } void setInetAddress_hostName(JNIEnv *env, jobject iaObj, jobject host) { - jobject holder; - initInetAddrs(env); - holder = (*env)->GetObjectField(env, iaObj, ia_holderID); + jobject holder = (*env)->GetObjectField(env, iaObj, ia_holderID); (*env)->SetObjectField(env, holder, iac_hostNameID, host); } int getInetAddress_addr(JNIEnv *env, jobject iaObj) { - jobject holder; - initInetAddrs(env); - holder = (*env)->GetObjectField(env, iaObj, ia_holderID); + jobject holder = (*env)->GetObjectField(env, iaObj, ia_holderID); return (*env)->GetIntField(env, holder, iac_addressID); } int getInetAddress_family(JNIEnv *env, jobject iaObj) { - jobject holder; - - initInetAddrs(env); - holder = (*env)->GetObjectField(env, iaObj, ia_holderID); + jobject holder = (*env)->GetObjectField(env, iaObj, ia_holderID); return (*env)->GetIntField(env, holder, iac_familyID); } jobject getInetAddress_hostName(JNIEnv *env, jobject iaObj) { - jobject holder; - initInetAddrs(env); - holder = (*env)->GetObjectField(env, iaObj, ia_holderID); + jobject holder = (*env)->GetObjectField(env, iaObj, ia_holderID); return (*env)->GetObjectField(env, holder, iac_hostNameID); } JNIEXPORT jobject JNICALL NET_SockaddrToInetAddress(JNIEnv *env, struct sockaddr *him, int *port) { jobject iaObj; - initInetAddrs(env); #ifdef AF_INET6 if (him->sa_family == AF_INET6) { jbyteArray ipaddress; @@ -238,31 +210,15 @@ NET_SockaddrToInetAddress(JNIEnv *env, struct sockaddr *him, int *port) { jbyte *caddr = (jbyte *)&(him6->sin6_addr); if (NET_IsIPv4Mapped(caddr)) { int address; - static jclass inet4Cls = 0; - if (inet4Cls == 0) { - jclass c = (*env)->FindClass(env, "java/net/Inet4Address"); - CHECK_NULL_RETURN(c, NULL); - inet4Cls = (*env)->NewGlobalRef(env, c); - CHECK_NULL_RETURN(inet4Cls, NULL); - (*env)->DeleteLocalRef(env, c); - } - iaObj = (*env)->NewObject(env, inet4Cls, ia4_ctrID); + iaObj = (*env)->NewObject(env, ia4_class, ia4_ctrID); CHECK_NULL_RETURN(iaObj, NULL); address = NET_IPv4MappedToIPv4(caddr); setInetAddress_addr(env, iaObj, address); setInetAddress_family(env, iaObj, IPv4); } else { - static jclass inet6Cls = 0; jint scope; int ret; - if (inet6Cls == 0) { - jclass c = (*env)->FindClass(env, "java/net/Inet6Address"); - CHECK_NULL_RETURN(c, NULL); - inet6Cls = (*env)->NewGlobalRef(env, c); - CHECK_NULL_RETURN(inet6Cls, NULL); - (*env)->DeleteLocalRef(env, c); - } - iaObj = (*env)->NewObject(env, inet6Cls, ia6_ctrID); + iaObj = (*env)->NewObject(env, ia6_class, ia6_ctrID); CHECK_NULL_RETURN(iaObj, NULL); ret = setInet6Address_ipaddress(env, iaObj, (char *)&(him6->sin6_addr)); CHECK_NULL_RETURN(ret, NULL); @@ -275,16 +231,7 @@ NET_SockaddrToInetAddress(JNIEnv *env, struct sockaddr *him, int *port) { #endif /* AF_INET6 */ { struct sockaddr_in *him4 = (struct sockaddr_in *)him; - static jclass inet4Cls = 0; - - if (inet4Cls == 0) { - jclass c = (*env)->FindClass(env, "java/net/Inet4Address"); - CHECK_NULL_RETURN(c, NULL); - inet4Cls = (*env)->NewGlobalRef(env, c); - CHECK_NULL_RETURN(inet4Cls, NULL); - (*env)->DeleteLocalRef(env, c); - } - iaObj = (*env)->NewObject(env, inet4Cls, ia4_ctrID); + iaObj = (*env)->NewObject(env, ia4_class, ia4_ctrID); CHECK_NULL_RETURN(iaObj, NULL); setInetAddress_family(env, iaObj, IPv4); setInetAddress_addr(env, iaObj, ntohl(him4->sin_addr.s_addr)); diff --git a/jdk/src/share/native/java/net/net_util.h b/jdk/src/share/native/java/net/net_util.h index 97351488877..b77d02b2fad 100644 --- a/jdk/src/share/native/java/net/net_util.h +++ b/jdk/src/share/native/java/net/net_util.h @@ -55,6 +55,8 @@ extern jfieldID iac_familyID; extern jfieldID iac_hostNameID; extern jfieldID ia_preferIPv6AddressID; +JNIEXPORT void JNICALL initInetAddressIDs(JNIEnv *env); + /** (Inet6Address accessors) * set_ methods return JNI_TRUE on success JNI_FALSE on error * get_ methods that return int/boolean, return -1 on error @@ -137,7 +139,7 @@ NET_InetAddressToSockaddr(JNIEnv *env, jobject iaObj, int port, struct sockaddr JNIEXPORT jobject JNICALL NET_SockaddrToInetAddress(JNIEnv *env, struct sockaddr *him, int *port); -void initLocalAddrTable (); +void platformInit(); void parseExclusiveBindProperty(JNIEnv *env); void diff --git a/jdk/src/share/native/java/util/zip/Deflater.c b/jdk/src/share/native/java/util/zip/Deflater.c index a9f403db172..d7f751d37a9 100644 --- a/jdk/src/share/native/java/util/zip/Deflater.c +++ b/jdk/src/share/native/java/util/zip/Deflater.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -49,13 +49,21 @@ JNIEXPORT void JNICALL Java_java_util_zip_Deflater_initIDs(JNIEnv *env, jclass cls) { levelID = (*env)->GetFieldID(env, cls, "level", "I"); + CHECK_NULL(levelID); strategyID = (*env)->GetFieldID(env, cls, "strategy", "I"); + CHECK_NULL(strategyID); setParamsID = (*env)->GetFieldID(env, cls, "setParams", "Z"); + CHECK_NULL(setParamsID); finishID = (*env)->GetFieldID(env, cls, "finish", "Z"); + CHECK_NULL(finishID); finishedID = (*env)->GetFieldID(env, cls, "finished", "Z"); + CHECK_NULL(finishedID); bufID = (*env)->GetFieldID(env, cls, "buf", "[B"); + CHECK_NULL(bufID); offID = (*env)->GetFieldID(env, cls, "off", "I"); + CHECK_NULL(offID); lenID = (*env)->GetFieldID(env, cls, "len", "I"); + CHECK_NULL(lenID); } JNIEXPORT jlong JNICALL @@ -132,14 +140,14 @@ Java_java_util_zip_Deflater_deflateBytes(JNIEnv *env, jobject this, jlong addr, in_buf = (*env)->GetPrimitiveArrayCritical(env, this_buf, 0); if (in_buf == NULL) { // Throw OOME only when length is not zero - if (this_len != 0) + if (this_len != 0 && (*env)->ExceptionOccurred(env) == NULL) JNU_ThrowOutOfMemoryError(env, 0); return 0; } out_buf = (*env)->GetPrimitiveArrayCritical(env, b, 0); if (out_buf == NULL) { (*env)->ReleasePrimitiveArrayCritical(env, this_buf, in_buf, 0); - if (len != 0) + if (len != 0 && (*env)->ExceptionOccurred(env) == NULL) JNU_ThrowOutOfMemoryError(env, 0); return 0; } @@ -158,7 +166,7 @@ Java_java_util_zip_Deflater_deflateBytes(JNIEnv *env, jobject this, jlong addr, this_off += this_len - strm->avail_in; (*env)->SetIntField(env, this, offID, this_off); (*env)->SetIntField(env, this, lenID, strm->avail_in); - return len - strm->avail_out; + return (jint) (len - strm->avail_out); case Z_BUF_ERROR: (*env)->SetBooleanField(env, this, setParamsID, JNI_FALSE); return 0; diff --git a/jdk/src/share/native/java/util/zip/Inflater.c b/jdk/src/share/native/java/util/zip/Inflater.c index 3778ff4e40c..2e21d084b39 100644 --- a/jdk/src/share/native/java/util/zip/Inflater.c +++ b/jdk/src/share/native/java/util/zip/Inflater.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -50,10 +50,15 @@ JNIEXPORT void JNICALL Java_java_util_zip_Inflater_initIDs(JNIEnv *env, jclass cls) { needDictID = (*env)->GetFieldID(env, cls, "needDict", "Z"); + CHECK_NULL(needDictID); finishedID = (*env)->GetFieldID(env, cls, "finished", "Z"); + CHECK_NULL(finishedID); bufID = (*env)->GetFieldID(env, cls, "buf", "[B"); + CHECK_NULL(bufID); offID = (*env)->GetFieldID(env, cls, "off", "I"); + CHECK_NULL(offID); lenID = (*env)->GetFieldID(env, cls, "len", "I"); + CHECK_NULL(lenID); } JNIEXPORT jlong JNICALL @@ -127,14 +132,14 @@ Java_java_util_zip_Inflater_inflateBytes(JNIEnv *env, jobject this, jlong addr, in_buf = (*env)->GetPrimitiveArrayCritical(env, this_buf, 0); if (in_buf == NULL) { - if (this_len != 0) + if (this_len != 0 && (*env)->ExceptionOccurred(env) == NULL) JNU_ThrowOutOfMemoryError(env, 0); return 0; } out_buf = (*env)->GetPrimitiveArrayCritical(env, b, 0); if (out_buf == NULL) { (*env)->ReleasePrimitiveArrayCritical(env, this_buf, in_buf, 0); - if (len != 0) + if (len != 0 && (*env)->ExceptionOccurred(env) == NULL) JNU_ThrowOutOfMemoryError(env, 0); return 0; } @@ -154,7 +159,7 @@ Java_java_util_zip_Inflater_inflateBytes(JNIEnv *env, jobject this, jlong addr, this_off += this_len - strm->avail_in; (*env)->SetIntField(env, this, offID, this_off); (*env)->SetIntField(env, this, lenID, strm->avail_in); - return len - strm->avail_out; + return (jint) (len - strm->avail_out); case Z_NEED_DICT: (*env)->SetBooleanField(env, this, needDictID, JNI_TRUE); /* Might have consumed some input here! */ diff --git a/jdk/src/share/native/java/util/zip/ZipFile.c b/jdk/src/share/native/java/util/zip/ZipFile.c index d66cccb747a..5fd4936a803 100644 --- a/jdk/src/share/native/java/util/zip/ZipFile.c +++ b/jdk/src/share/native/java/util/zip/ZipFile.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -71,11 +71,13 @@ ThrowZipException(JNIEnv *env, const char *msg) if (msg != NULL) { s = JNU_NewStringPlatform(env, msg); } - x = JNU_NewObjectByName(env, + if (s != NULL) { + x = JNU_NewObjectByName(env, "java/util/zip/ZipException", "(Ljava/lang/String;)V", s); - if (x != NULL) { - (*env)->Throw(env, x); + if (x != NULL) { + (*env)->Throw(env, x); + } } } @@ -367,8 +369,10 @@ Java_java_util_jar_JarFile_getMetaInfEntryNames(JNIEnv *env, jobject obj) /* If some names were found then build array of java strings */ if (count > 0) { - jclass cls = (*env)->FindClass(env, "java/lang/String"); + jclass cls = JNU_ClassString(env); + CHECK_NULL_RETURN(cls, NULL); result = (*env)->NewObjectArray(env, count, cls, 0); + CHECK_NULL_RETURN(result, NULL); if (result != 0) { for (i = 0; i < count; i++) { jstring str = (*env)->NewStringUTF(env, zip->metanames[i]); diff --git a/jdk/src/share/native/java/util/zip/zip_util.c b/jdk/src/share/native/java/util/zip/zip_util.c index b2fb8209f41..27882480ea6 100644 --- a/jdk/src/share/native/java/util/zip/zip_util.c +++ b/jdk/src/share/native/java/util/zip/zip_util.c @@ -659,7 +659,10 @@ readCEN(jzfile *zip, jint knownTotal) entries = zip->entries = calloc(total, sizeof(entries[0])); tablelen = zip->tablelen = ((total/2) | 1); // Odd -> fewer collisions table = zip->table = malloc(tablelen * sizeof(table[0])); - if (entries == NULL || table == NULL) goto Catch; + /* According to ISO C it is perfectly legal for malloc to return zero + * if called with a zero argument. We check this for 'entries' but not + * for 'table' because 'tablelen' can't be zero (see computation above). */ + if ((entries == NULL && total != 0) || table == NULL) goto Catch; for (j = 0; j < tablelen; j++) table[j] = ZIP_ENDCHAIN; diff --git a/jdk/src/share/native/sun/awt/medialib/mlib_sys.c b/jdk/src/share/native/sun/awt/medialib/mlib_sys.c index 70d052051fd..2c07527cd0b 100644 --- a/jdk/src/share/native/sun/awt/medialib/mlib_sys.c +++ b/jdk/src/share/native/sun/awt/medialib/mlib_sys.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -86,10 +86,13 @@ __typeof__ ( __mlib_sincosf) mlib_sincosf void *__mlib_malloc(mlib_u32 size) { -#ifdef _MSC_VER +#if defined(_MSC_VER) || defined(AIX) /* * Currently, all MS C compilers for Win32 platforms default to 8 byte * alignment. -- from stdlib.h of MS VC++5.0. + * + * On AIX, the malloc subroutine returns a pointer to space suitably + * aligned for the storage of any type of object (see 'man malloc'). */ return (void *) malloc(size); #elif defined(MACOSX) diff --git a/jdk/src/share/native/sun/awt/medialib/mlib_types.h b/jdk/src/share/native/sun/awt/medialib/mlib_types.h index 10c3cd3039e..aba0394ffd4 100644 --- a/jdk/src/share/native/sun/awt/medialib/mlib_types.h +++ b/jdk/src/share/native/sun/awt/medialib/mlib_types.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -57,7 +57,7 @@ typedef unsigned int mlib_u32; typedef float mlib_f32; typedef double mlib_d64; -#if defined(__SUNPRO_C) || defined(__SUNPRO_CC) || defined(__GNUC__) +#if defined(__SUNPRO_C) || defined(__SUNPRO_CC) || defined(__GNUC__) || defined(_AIX) #include #include diff --git a/jdk/src/share/native/sun/management/DiagnosticCommandImpl.c b/jdk/src/share/native/sun/management/DiagnosticCommandImpl.c index 4ca0315abc3..59f3f7db971 100644 --- a/jdk/src/share/native/sun/management/DiagnosticCommandImpl.c +++ b/jdk/src/share/native/sun/management/DiagnosticCommandImpl.c @@ -23,18 +23,19 @@ * questions. */ +#include #include #include "management.h" #include "sun_management_DiagnosticCommandImpl.h" JNIEXPORT void JNICALL Java_sun_management_DiagnosticCommandImpl_setNotificationEnabled (JNIEnv *env, jobject dummy, jboolean enabled) { - if(jmm_version > JMM_VERSION_1_2_2) { - jmm_interface->SetDiagnosticFrameworkNotificationEnabled(env, enabled); - } else { + if (jmm_version <= JMM_VERSION_1_2_2) { JNU_ThrowByName(env, "java/lang/UnsupportedOperationException", "JMX interface to diagnostic framework notifications is not supported by this VM"); + return; } + jmm_interface->SetDiagnosticFrameworkNotificationEnabled(env, enabled); } JNIEXPORT jobjectArray JNICALL @@ -56,7 +57,8 @@ jobject getDiagnosticCommandArgumentInfoArray(JNIEnv *env, jstring command, jobject resultList; dcmd_arg_info_array = (dcmdArgInfo*) malloc(num_arg * sizeof(dcmdArgInfo)); - if (dcmd_arg_info_array == NULL) { + /* According to ISO C it is perfectly legal for malloc to return zero if called with a zero argument */ + if (dcmd_arg_info_array == NULL && num_arg != 0) { return NULL; } jmm_interface->GetDiagnosticCommandArgumentsInfo(env, command, @@ -117,19 +119,24 @@ Java_sun_management_DiagnosticCommandImpl_getDiagnosticCommandInfo return NULL; } num_commands = (*env)->GetArrayLength(env, commands); - dcmd_info_array = (dcmdInfo*) malloc(num_commands * - sizeof(dcmdInfo)); - if (dcmd_info_array == NULL) { - JNU_ThrowOutOfMemoryError(env, NULL); - } - jmm_interface->GetDiagnosticCommandInfo(env, commands, dcmd_info_array); dcmdInfoCls = (*env)->FindClass(env, "sun/management/DiagnosticCommandInfo"); result = (*env)->NewObjectArray(env, num_commands, dcmdInfoCls, NULL); if (result == NULL) { - free(dcmd_info_array); JNU_ThrowOutOfMemoryError(env, 0); + return NULL; } + if (num_commands == 0) { + /* Handle the 'zero commands' case specially to avoid calling 'malloc()' */ + /* with a zero argument because that may legally return a NULL pointer. */ + return result; + } + dcmd_info_array = (dcmdInfo*) malloc(num_commands * sizeof(dcmdInfo)); + if (dcmd_info_array == NULL) { + JNU_ThrowOutOfMemoryError(env, NULL); + return NULL; + } + jmm_interface->GetDiagnosticCommandInfo(env, commands, dcmd_info_array); for (i=0; iGetObjectArrayElement(env,commands,i), @@ -137,6 +144,7 @@ Java_sun_management_DiagnosticCommandImpl_getDiagnosticCommandInfo if (args == NULL) { free(dcmd_info_array); JNU_ThrowOutOfMemoryError(env, 0); + return NULL; } obj = JNU_NewObjectByName(env, "sun/management/DiagnosticCommandInfo", @@ -152,6 +160,7 @@ Java_sun_management_DiagnosticCommandImpl_getDiagnosticCommandInfo if (obj == NULL) { free(dcmd_info_array); JNU_ThrowOutOfMemoryError(env, 0); + return NULL; } (*env)->SetObjectArrayElement(env, result, i, obj); } diff --git a/jdk/src/share/native/sun/misc/Version.c b/jdk/src/share/native/sun/misc/Version.c index d37010e15d5..4dbcf1c8089 100644 --- a/jdk/src/share/native/sun/misc/Version.c +++ b/jdk/src/share/native/sun/misc/Version.c @@ -60,15 +60,15 @@ Java_sun_misc_Version_getJvmVersionInfo(JNIEnv *env, jclass cls) (*func_p)(env, &info, sizeof(info)); setStaticIntField(env, cls, "jvm_major_version", JVM_VERSION_MAJOR(info.jvm_version)); - CHECK_EXCEPTION_RETURN(env, JNI_FALSE); + JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE); setStaticIntField(env, cls, "jvm_minor_version", JVM_VERSION_MINOR(info.jvm_version)); - CHECK_EXCEPTION_RETURN(env, JNI_FALSE); + JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE); setStaticIntField(env, cls, "jvm_micro_version", JVM_VERSION_MICRO(info.jvm_version)); - CHECK_EXCEPTION_RETURN(env, JNI_FALSE); + JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE); setStaticIntField(env, cls, "jvm_build_number", JVM_VERSION_BUILD(info.jvm_version)); - CHECK_EXCEPTION_RETURN(env, JNI_FALSE); + JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE); setStaticIntField(env, cls, "jvm_update_version", info.update_version); - CHECK_EXCEPTION_RETURN(env, JNI_FALSE); + JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE); jvm_special_version = info.special_update_version; return JNI_TRUE; @@ -91,15 +91,15 @@ Java_sun_misc_Version_getJdkVersionInfo(JNIEnv *env, jclass cls) JDK_GetVersionInfo0(&info, sizeof(info)); setStaticIntField(env, cls, "jdk_major_version", JDK_VERSION_MAJOR(info.jdk_version)); - CHECK_EXCEPTION(env); + JNU_CHECK_EXCEPTION(env); setStaticIntField(env, cls, "jdk_minor_version", JDK_VERSION_MINOR(info.jdk_version)); - CHECK_EXCEPTION(env); + JNU_CHECK_EXCEPTION(env); setStaticIntField(env, cls, "jdk_micro_version", JDK_VERSION_MICRO(info.jdk_version)); - CHECK_EXCEPTION(env); + JNU_CHECK_EXCEPTION(env); setStaticIntField(env, cls, "jdk_build_number", JDK_VERSION_BUILD(info.jdk_version)); - CHECK_EXCEPTION(env); + JNU_CHECK_EXCEPTION(env); setStaticIntField(env, cls, "jdk_update_version", info.update_version); - CHECK_EXCEPTION(env); + JNU_CHECK_EXCEPTION(env); jdk_special_version = info.special_update_version; } diff --git a/jdk/src/share/native/sun/security/ec/ECC_JNI.cpp b/jdk/src/share/native/sun/security/ec/ECC_JNI.cpp index dff675f9500..8273e7f8dbb 100644 --- a/jdk/src/share/native/sun/security/ec/ECC_JNI.cpp +++ b/jdk/src/share/native/sun/security/ec/ECC_JNI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,7 +41,9 @@ extern "C" { void ThrowException(JNIEnv *env, const char *exceptionName) { jclass exceptionClazz = env->FindClass(exceptionName); - env->ThrowNew(exceptionClazz, NULL); + if (exceptionClazz != NULL) { + env->ThrowNew(exceptionClazz, NULL); + } } /* @@ -73,7 +75,7 @@ JNIEXPORT jlongArray JNICALL Java_sun_security_ec_ECKeyPairGenerator_generateECKeyPair (JNIEnv *env, jclass clazz, jint keySize, jbyteArray encodedParams, jbyteArray seed) { - ECPrivateKey *privKey; /* contains both public and private values */ + ECPrivateKey *privKey = NULL; /* contains both public and private values */ ECParams *ecparams = NULL; SECKEYECParams params_item; jint jSeedLength; @@ -85,6 +87,9 @@ JNICALL Java_sun_security_ec_ECKeyPairGenerator_generateECKeyPair params_item.len = env->GetArrayLength(encodedParams); params_item.data = (unsigned char *) env->GetByteArrayElements(encodedParams, 0); + if (params_item.data == NULL) { + goto cleanup; + } // Fill a new ECParams using the supplied OID if (EC_DecodeParams(¶ms_item, &ecparams, 0) != SECSuccess) { @@ -107,7 +112,14 @@ JNICALL Java_sun_security_ec_ECKeyPairGenerator_generateECKeyPair jboolean isCopy; result = env->NewLongArray(2); + if (result == NULL) { + goto cleanup; + } + resultElements = env->GetLongArrayElements(result, &isCopy); + if (resultElements == NULL) { + goto cleanup; + } resultElements[0] = (jlong) &(privKey->privateValue); // private big integer resultElements[1] = (jlong) &(privKey->publicValue); // encoded ec point @@ -150,6 +162,9 @@ JNICALL Java_sun_security_ec_ECKeyPairGenerator_getEncodedBytes { SECItem *s = (SECItem *)hSECItem; jbyteArray jEncodedBytes = env->NewByteArray(s->len); + if (jEncodedBytes == NULL) { + return NULL; + } // Copy bytes from a native SECItem buffer to Java byte array env->SetByteArrayRegion(jEncodedBytes, 0, s->len, (jbyte *)s->data); @@ -195,6 +210,9 @@ JNICALL Java_sun_security_ec_ECDSASignature_signDigest params_item.len = env->GetArrayLength(encodedParams); params_item.data = (unsigned char *) env->GetByteArrayElements(encodedParams, 0); + if (params_item.data == NULL) { + goto cleanup; + } // Fill a new ECParams using the supplied OID if (EC_DecodeParams(¶ms_item, &ecparams, 0) != SECSuccess) { @@ -208,6 +226,9 @@ JNICALL Java_sun_security_ec_ECDSASignature_signDigest privKey.privateValue.len = env->GetArrayLength(privateKey); privKey.privateValue.data = (unsigned char *) env->GetByteArrayElements(privateKey, 0); + if (privKey.privateValue.data == NULL) { + goto cleanup; + } // Prepare a buffer for the signature (twice the key length) pSignedDigestBuffer = new jbyte[ecparams->order.len * 2]; @@ -227,6 +248,9 @@ JNICALL Java_sun_security_ec_ECDSASignature_signDigest // Create new byte array temp = env->NewByteArray(signature_item.len); + if (temp == NULL) { + goto cleanup; + } // Copy data from native buffer env->SetByteArrayRegion(temp, 0, signature_item.len, pSignedDigestBuffer); @@ -294,6 +318,9 @@ JNICALL Java_sun_security_ec_ECDSASignature_verifySignedDigest params_item.len = env->GetArrayLength(encodedParams); params_item.data = (unsigned char *) env->GetByteArrayElements(encodedParams, 0); + if (params_item.data == NULL) { + goto cleanup; + } // Fill a new ECParams using the supplied OID if (EC_DecodeParams(¶ms_item, &ecparams, 0) != SECSuccess) { @@ -346,25 +373,34 @@ JNICALL Java_sun_security_ec_ECDHKeyAgreement_deriveKey (JNIEnv *env, jclass clazz, jbyteArray privateKey, jbyteArray publicKey, jbyteArray encodedParams) { jbyteArray jSecret = NULL; + ECParams *ecparams = NULL; // Extract private key value SECItem privateValue_item; privateValue_item.len = env->GetArrayLength(privateKey); privateValue_item.data = (unsigned char *) env->GetByteArrayElements(privateKey, 0); + if (privateValue_item.data == NULL) { + goto cleanup; + } // Extract public key value SECItem publicValue_item; publicValue_item.len = env->GetArrayLength(publicKey); publicValue_item.data = (unsigned char *) env->GetByteArrayElements(publicKey, 0); + if (publicValue_item.data == NULL) { + goto cleanup; + } // Initialize the ECParams struct - ECParams *ecparams = NULL; SECKEYECParams params_item; params_item.len = env->GetArrayLength(encodedParams); params_item.data = (unsigned char *) env->GetByteArrayElements(encodedParams, 0); + if (params_item.data == NULL) { + goto cleanup; + } // Fill a new ECParams using the supplied OID if (EC_DecodeParams(¶ms_item, &ecparams, 0) != SECSuccess) { @@ -386,6 +422,9 @@ JNICALL Java_sun_security_ec_ECDHKeyAgreement_deriveKey // Create new byte array jSecret = env->NewByteArray(secret_item.len); + if (jSecret == NULL) { + goto cleanup; + } // Copy bytes from the SECItem buffer to a Java byte array env->SetByteArrayRegion(jSecret, 0, secret_item.len, diff --git a/jdk/src/share/native/sun/security/ec/impl/ecc_impl.h b/jdk/src/share/native/sun/security/ec/impl/ecc_impl.h index 8a8acfc688e..40d2e335514 100644 --- a/jdk/src/share/native/sun/security/ec/impl/ecc_impl.h +++ b/jdk/src/share/native/sun/security/ec/impl/ecc_impl.h @@ -65,6 +65,13 @@ typedef unsigned long ulong_t; typedef enum boolean { B_FALSE, B_TRUE } boolean_t; #endif /* _ALLBSD_SOURCE */ +#ifdef AIX +#define B_FALSE FALSE +#define B_TRUE TRUE +typedef unsigned char uint8_t; +typedef unsigned long ulong_t; +#endif /* AIX */ + #ifdef _WIN32 typedef unsigned char uint8_t; typedef unsigned long ulong_t; diff --git a/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/Device.java b/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/Device.java new file mode 100644 index 00000000000..f4fd2c50a05 --- /dev/null +++ b/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/Device.java @@ -0,0 +1,66 @@ +package checker; + +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation and proper error handling, might not be present in + * this sample code. + */ + + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import java.util.Collections; +import java.util.EnumMap; +import java.util.Map; + +/** + * Represents the device configuration. The values are loaded from an XML file by JAXB. + */ +@XmlRootElement +public class Device { + + @XmlElement() + private Map supportedModules = new EnumMap<>(Module.class); + + /** + * Returns map of supported modules. The map key is module. The map value is version. + * + * @return map of supported modules. + */ + public Map getSupportedModules() { + return Collections.unmodifiableMap(supportedModules); + } +} diff --git a/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/Kettle.xml b/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/Kettle.xml new file mode 100644 index 00000000000..2e0357d2f46 --- /dev/null +++ b/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/Kettle.xml @@ -0,0 +1,57 @@ + + + + + + + DISPLAY + 2 + + + THERMOMETER + 1 + + + CLOCK + 4 + + + \ No newline at end of file diff --git a/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/Module.java b/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/Module.java new file mode 100644 index 00000000000..2b97b4e832d --- /dev/null +++ b/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/Module.java @@ -0,0 +1,49 @@ +package checker; + +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation and proper error handling, might not be present in + * this sample code. + */ + + +/** + * Represents available modules. + */ +public enum Module { + + DISPLAY, CLOCK, THERMOMETER, HEATER, SPEAKER, GSM, LED; +} diff --git a/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/PluginChecker.java b/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/PluginChecker.java new file mode 100644 index 00000000000..6db5bae4141 --- /dev/null +++ b/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/PluginChecker.java @@ -0,0 +1,145 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation and proper error handling, might not be present in + * this sample code. + */ +package checker; + +import javax.annotation.processing.ProcessingEnvironment; +import javax.annotation.processing.RoundEnvironment; +import javax.annotation.processing.SupportedAnnotationTypes; +import javax.annotation.processing.SupportedSourceVersion; +import javax.lang.model.SourceVersion; +import javax.lang.model.element.Element; +import javax.lang.model.element.TypeElement; +import javax.tools.Diagnostic; +import javax.xml.bind.JAXBContext; +import java.io.File; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +import javax.xml.bind.JAXBException; + +/** + * Reads the device configuration from the XML file specified by -Adevice=device.xml. + * For each class in a project, checks required modules. If the device doesn't have + * the required module, then a compilation error will be shown. + */ +@SupportedAnnotationTypes("checker.RequireContainer") +@SupportedSourceVersion(SourceVersion.RELEASE_8) +public class PluginChecker extends javax.annotation.processing.AbstractProcessor { + + /** + * Name of the option to get the path to the xml with device configuration. + */ + public static final String DEVICE_OPTION = "device"; + private Device device; + + /** + * Only the device option is supported. + * + * {@inheritDoc} + */ + @Override + public Set getSupportedOptions() { + return new HashSet<>(Arrays.asList(DEVICE_OPTION)); + } + + /** + * Initializes the processor by loading the device configuration. + * + * {@inheritDoc} + */ + @Override + public synchronized void init(ProcessingEnvironment processingEnv) { + super.init(processingEnv); + try { + String deviceOption = processingEnv.getOptions().get(DEVICE_OPTION); + device = (Device) JAXBContext.newInstance(Device.class) + .createUnmarshaller().unmarshal(new File(deviceOption)); + } catch (JAXBException e) { + throw new RuntimeException( + "Please specify device by -Adevice=device.xml\n" + + e.toString(), e); + } + } + + /** + * Processes @Require annotations and checks that Device meets requirements. + * + * {@inheritDoc} + */ + @Override + public boolean process(Set annotations, + RoundEnvironment roundEnv) { + for (Element el : roundEnv.getElementsAnnotatedWith(RequireContainer.class)) { + for (Require req : el.getAnnotationsByType(Require.class)) { + //for every Require annotation checks if device has module of required version. + Integer version = device.getSupportedModules().get(req.value()); + + if (version == null + || version < req.minVersion() + || version > req.maxVersion()) { + //if module is optional then show only warning not error + if (req.optional()) { + processingEnv.getMessager() + .printMessage(Diagnostic.Kind.WARNING, + "Plugin [" + el + "] requires " + req + + "\n but device " + (version == null + ? "doesn't have such module." + + " This module is optional." + + " So plugin will work but miss" + + " some functionality" + : "has " + version + + " version of that module")); + } else { + processingEnv.getMessager() + .printMessage(Diagnostic.Kind.ERROR, + "Plugin [" + el + "] requires " + req + + "\n but device " + + (version == null + ? "doesn't have such module" + : "has " + version + + " version of that module")); + } + } + } + return true; + } + return false; + } +} diff --git a/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/Require.java b/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/Require.java new file mode 100644 index 00000000000..6681c2810e2 --- /dev/null +++ b/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/Require.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation and proper error handling, might not be present in + * this sample code. + */ +package checker; + +import java.lang.annotation.Repeatable; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** + * Indicates that a plug-in depends on a module. + */ +@Retention(RetentionPolicy.CLASS) +@Repeatable(RequireContainer.class) +public @interface Require { + + /** + * Returns the required module. + * + * @return required module. + */ + Module value(); + + /** + * Returns the minimum supported version of a module. + * + * @return minimum supported version of a module. + */ + int minVersion() default 1; + + /** + * Returns the maximum supported version of a module. + * + * @return maximum supported version of a module. + */ + int maxVersion() default Integer.MAX_VALUE; + + /** + * Returns true if a module is optional. A module is optional if a system + * works without that module but is missing some functionality. Returns false if a system + * won't work without the specified module. + * + * @return true if module is optional. False otherwise. + */ + boolean optional() default false; +} diff --git a/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/RequireContainer.java b/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/RequireContainer.java new file mode 100644 index 00000000000..d18e0d523c0 --- /dev/null +++ b/jdk/src/share/sample/annotations/DependencyChecker/PluginChecker/src/checker/RequireContainer.java @@ -0,0 +1,51 @@ +package checker; + +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation and proper error handling, might not be present in + * this sample code. + */ +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** + * A container for the repeatable @Require annotation. + */ +@Retention(RetentionPolicy.CLASS) +public @interface RequireContainer { + + Require[] value(); +} diff --git a/jdk/src/share/sample/annotations/DependencyChecker/Plugins/src/plugins/BoilerPlugin.java b/jdk/src/share/sample/annotations/DependencyChecker/Plugins/src/plugins/BoilerPlugin.java new file mode 100644 index 00000000000..3a9d842e5b0 --- /dev/null +++ b/jdk/src/share/sample/annotations/DependencyChecker/Plugins/src/plugins/BoilerPlugin.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation and proper error handling, might not be present in + * this sample code. + */ +package plugins; + +import checker.Module; +import checker.Require; + +/** + * BoilerPlugin provides support for boiling water and keeping water warm. + */ +@Require(value = Module.CLOCK, maxVersion = 3) +@Require(value = Module.THERMOMETER) +@Require(value = Module.HEATER) +@Require(value = Module.LED, optional = true) //will use if present +public class BoilerPlugin { + + /** + * Heats water up to 100 degrees Celsius. + */ + public void boil() { + boil(100); + } + + /** + * Heats water up to temperature. + * + * @param temperature - desired temperature of the water in the boiler + */ + public void boil(int temperature) { + /* + * Turn on heater and wait while temperature reaches desired temperature + * in Celsius. Finally, turn off heater. + * If present, the LED light changes color according to the temperature. + */ + } + + /** + * Keeps desired temperature. + * + * @param temperature - desired temperature of the water in the boiler + * @param seconds - period of time for checking temperature in seconds + */ + public void keepWarm(int temperature, int seconds) { + //Every n seconds check temperature and warm up, if necessary. + } + +} diff --git a/jdk/src/share/sample/annotations/DependencyChecker/Plugins/src/plugins/ExtendedBoilerPlugin.java b/jdk/src/share/sample/annotations/DependencyChecker/Plugins/src/plugins/ExtendedBoilerPlugin.java new file mode 100644 index 00000000000..b7be61025a0 --- /dev/null +++ b/jdk/src/share/sample/annotations/DependencyChecker/Plugins/src/plugins/ExtendedBoilerPlugin.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation and proper error handling, might not be present in + * this sample code. + */ +package plugins; + +import checker.Module; +import checker.Require; +import java.util.Calendar; + +/** + * Introduces new features for BoilerPlugin. Features are boiling water by an + * SMS and boiling water by date with notification by a phone call. + */ +@Require(value = Module.SPEAKER) +@Require(value = Module.GSM, minVersion = 3) +@Require(value = Module.DISPLAY) +public class ExtendedBoilerPlugin extends BoilerPlugin { + + /** + * Boils water at the appointed time and wakes you up by a ring and phone + * call. Shows "Good morning" and a quote of the day from the Internet on the + * display. + * + * @param calendar - date and time when water should be boiled + * @param phoneNumber - phone number to call + */ + public void boilAndWakeUp(Calendar calendar, int phoneNumber) { + //implementation + } + + /** + * Boils water at the appointed time by getting an SMS of fixed format. + * Sends an SMS on finish. + * + * @param sms - text of SMS + */ + public void boilBySMS(String sms) { + //implementation + } +} diff --git a/jdk/src/share/sample/annotations/DependencyChecker/Plugins/src/plugins/TimerPlugin.java b/jdk/src/share/sample/annotations/DependencyChecker/Plugins/src/plugins/TimerPlugin.java new file mode 100644 index 00000000000..678785c5cf4 --- /dev/null +++ b/jdk/src/share/sample/annotations/DependencyChecker/Plugins/src/plugins/TimerPlugin.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation and proper error handling, might not be present in + * this sample code. + */ +package plugins; + +import checker.Module; +import checker.Require; + +/** + * Timer plug-in is used to support an alarm and a timer. It depends on Display and + * Clock modules. + */ +@Require(Module.DISPLAY) +@Require(value = Module.CLOCK, maxVersion = 3) +public class TimerPlugin { + + /** + * Sets timer. + * + * @param time - the remaining time. + */ + public void timer(long time) { + //start timer + //show the remaining time on display + } + + /** + * Sets alarm. + * + * @param time - the alarm time. + */ + public void alarm(long time) { + //start alarm + //show current time and alarm time on display + } +} diff --git a/jdk/src/share/sample/annotations/Validator/src/PositiveIntegerSupplier.java b/jdk/src/share/sample/annotations/Validator/src/PositiveIntegerSupplier.java new file mode 100644 index 00000000000..0a149139b53 --- /dev/null +++ b/jdk/src/share/sample/annotations/Validator/src/PositiveIntegerSupplier.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation and proper error handling, might not be present in + * this sample code. + */ +import java.util.function.Supplier; + +/** + * Supplies a positive number. + */ +@Validate(value = Validator.INTEGER_NUMBER, + description = "It's not an Integer ") +@Validate(value = Validator.POSITIVE_NUMBER, + description = "It's not a positive Number") +public class PositiveIntegerSupplier implements Supplier { + + /** + * Returns a string representation of a positive integer. + * + * @return string representation of a positive integer. + */ + @Override + public String get() { + return "20005"; //random number + } +} diff --git a/jdk/src/share/sample/annotations/Validator/src/SupplierValidator.java b/jdk/src/share/sample/annotations/Validator/src/SupplierValidator.java new file mode 100644 index 00000000000..479ac8643e1 --- /dev/null +++ b/jdk/src/share/sample/annotations/Validator/src/SupplierValidator.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation and proper error handling, might not be present in + * this sample code. + */ +import javax.xml.bind.ValidationException; +import java.util.function.Supplier; + +/** + * Validates the supplier. + */ +public class SupplierValidator { + + /** + * Validates the supplier. + * + * @param supplier - Supplier that needs to be validated. + * @return true if supplier has passed validation check. False otherwise. + */ + public static boolean validate(Supplier supplier) { + for (Validate annotation + : supplier.getClass().getAnnotationsByType(Validate.class)) { + try { + annotation.value().validate(supplier); + } catch (ValidationException e) { + System.out.println(annotation.description()); + e.printStackTrace(); + return false; + } + } + return true; + } +} diff --git a/jdk/src/share/sample/annotations/Validator/src/Validate.java b/jdk/src/share/sample/annotations/Validator/src/Validate.java new file mode 100644 index 00000000000..e0404ea9471 --- /dev/null +++ b/jdk/src/share/sample/annotations/Validator/src/Validate.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation and proper error handling, might not be present in + * this sample code. + */ +import java.lang.annotation.Repeatable; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** + * Indicates that the class should be validated by the specified validator. + */ +@Retention(RetentionPolicy.RUNTIME) +@Repeatable(ValidateContainer.class) +public @interface Validate { + + /** + * Returns the validator that should validate the annotated class. + * + * @return Validator that should validate annotated class. + */ + Validator value(); + + /** + * Returns text to describe the failure of the validation check. + * + * @return text to describe the failure of the validation check. + */ + String description() default ""; +} + +/** + * A container for the repeatable @Validate annotation. + * + * @author Andrey Nazarov + */ +@Retention(RetentionPolicy.RUNTIME) +@interface ValidateContainer { + + Validate[] value(); +} diff --git a/jdk/src/share/sample/annotations/Validator/src/Validator.java b/jdk/src/share/sample/annotations/Validator/src/Validator.java new file mode 100644 index 00000000000..9e074f5a8e5 --- /dev/null +++ b/jdk/src/share/sample/annotations/Validator/src/Validator.java @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation and proper error handling, might not be present in + * this sample code. + */ +import javax.xml.bind.ValidationException; +import java.util.function.Supplier; + +/** + * Enum of Validator implementations. + */ +public enum Validator { + + /** + * This validator checks that the string represents an integer. + */ + INTEGER_NUMBER { + /** + * Checks that the string represents an integer. + * + * @param string - a string supplier + * @throws ValidationException if the validation check fails + */ + @Override + void validate(Supplier string) throws ValidationException { + try { + Integer.parseInt((String) string.get()); + } catch (NumberFormatException ex) { + throw new ValidationException("Error while validating " + + string.get()); + } + } + }, + /** + * This validator checks that the string represents a positive number. + */ + POSITIVE_NUMBER { + /** + * Checks that the string represents a positive number. + * + * @param string - an string supplier + * @throws ValidationException if the validation check fails + */ + @Override + void validate(Supplier string) throws ValidationException { + try { + if (Double.compare(0.0, Double.parseDouble( + (String) string.get())) > 0) { + throw new Exception(); + } + } catch (Exception ex) { + throw new ValidationException("Error while validating " + + string.get()); + } + } + }; + + /** + * Checks that the supplier is valid. + * + * @param string - a string supplier + * @throws ValidationException if validation check fails + */ + abstract void validate(Supplier string) throws ValidationException; + +} diff --git a/jdk/src/share/sample/annotations/index.html b/jdk/src/share/sample/annotations/index.html new file mode 100644 index 00000000000..804c83df441 --- /dev/null +++ b/jdk/src/share/sample/annotations/index.html @@ -0,0 +1,67 @@ + + + + Repeating Annotations Demo + + +

        Repeating Annotations Demo

        + +

        + This demo shows how to use repeating annotations at runtime and at compile time. +

        + +
          +
        • Dependency checker.

          + +

          + Shows how to define repeating annotations and process them at compile time. + The problem domain is some code that performs useful operations on hardware devices. + The code relies on "modules" to be present on the devices. Applicability of the code to a particular + device is checked while compiling the code for a particular device. + A set of modules provided by a device is listed in an xml file that turns red during the compilation + phase and is compared with the required module set specified by annotations. + For instance, there is kettle with hardware modules: thermometer, display, and clock. + There is also a boiler plug-in that requires clock, thermometer, heater, and optionally an LED light. + + Build the PluginChecker annotation processor first. + Then, run javac with the annotation processor against plug-in sources using the following command:

          + + javac -cp "PluginChecker.jar" -processor checker.PluginChecker -Adevice=Kettle.xml -proc:only <source + files> + +

          + where PluginChecker.jar - path to jar file that contains PluginChecker annotation processor + class.
          + Kettle.xml - path to device descriptor Kettle.xml
          + <source files> - source files in Plugins/src +

          + For more information, see the source files. +

          + + +
        • Validator.

          + +

          + Shows how to define repeating annotations and process them at runtime. + A problem domain is code that needs to validate provided Suppliers for conformance to some criteria. + The criteria are implemented by the Validator class which is applied by using annotations that are placed in + the code whenever validation is needed. For more information, see the + source files. +

          + +

          +

          +

          + Sources: Validator/src/ +
        + + \ No newline at end of file diff --git a/jdk/src/share/sample/lambda/BulkDataOperations/index.html b/jdk/src/share/sample/lambda/BulkDataOperations/index.html new file mode 100644 index 00000000000..5a16695f21d --- /dev/null +++ b/jdk/src/share/sample/lambda/BulkDataOperations/index.html @@ -0,0 +1,49 @@ + + + + Bulk Data Operations Demo + + +

        Bulk Data Operations Demo

        + +

        + This demo shows how to use bulk data operations with the new JDK8 + Collections API. + The demo also demonstrates new features of JDK8 such as lambda expressions + and method/constructor references. +

        + +
          +
        • CSV Processor

          + +

          + Analyzes a CSV file, finds and collects useful information, computes + different statistics. For more information, see the source file. +

          + Source: src/CSVProcessor.java +
        • Grep

          + +

          + Behaves like the standard Linux tool Grep. For more information, see + the source file. +

          + Source: src/Grep.java +
        • PasswordGenerator

          + +

          + Produces a password of desired length. For more information see + source file. +

          + Source: src/PasswordGenerator.java +
        • WC

          + +

          + Counts newlines, words, characters, and the maximum line length of a + text file. For more information, see the source + file. +

          + Source: src/WC.java +
        + + \ No newline at end of file diff --git a/jdk/src/share/sample/lambda/BulkDataOperations/src/CSVProcessor.java b/jdk/src/share/sample/lambda/BulkDataOperations/src/CSVProcessor.java new file mode 100644 index 00000000000..ded9030209d --- /dev/null +++ b/jdk/src/share/sample/lambda/BulkDataOperations/src/CSVProcessor.java @@ -0,0 +1,368 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation, and proper error handling, might not be present in + * this sample code. + */ + +import java.io.BufferedReader; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.*; +import java.util.function.*; +import java.util.regex.Pattern; +import java.util.stream.Collector; +import java.util.stream.Collectors; + +import static java.lang.Double.parseDouble; +import static java.util.stream.Collectors.*; + +/** + * CSVProcessor is a tool for processing CSV files. There are several + * command-line options. Consult the {@link #printUsageAndExit} method for + * instructions and command line parameters. This sample shows examples of the + * following features: + *
          + *
        • Lambda and bulk operations. Working with streams: map(...), filter(...), + * sorted(...) methods. The collect(...) method with different collectors: + * Collectors.maxBy(...), Collectors.minBy(...), Collectors.toList(), + * Collectors.toCollection(...), Collectors.groupingBy(...), + * Collectors.toDoubleSummaryStatistics(...), and a custom Collector.
        • + *
        • Static method reference for printing values.
        • + *
        • Try-with-resources feature for closing files.
        • + *
        • Switch by String feature.
        • + *
        • Other new APIs: Pattern.asPredicate(), BinaryOperator + * BufferedReader.lines(), Collection.forEach(...), Comparator.comparing(...), + * Comparator.reversed(), Arrays.stream(...).
        • + *
        + * + */ +public class CSVProcessor { + + //Number of characters that may be read + private static final int READ_AHEAD_LIMIT = 100_000_000; + + /** + * The main method for the CSVProcessor program. Run the program with an + * empty argument list to see possible arguments. + * + * @param args the argument list for CSVProcessor. + */ + public static void main(String[] args) { + if (args.length < 2) { + printUsageAndExit(); + } + try (BufferedReader br = new BufferedReader( + Files.newBufferedReader(Paths.get(args[args.length - 1])))) { + //Assume that the first line contains column names. + List header = Arrays.stream(br.readLine().split(",")) + .map(String::trim).collect(toList()); + //Calculate an index of the column in question. + int column = getColumnNumber(header, args[1]); + switch (args[0]) { + case "sort": + verifyArgumentNumber(args, 4); + //Define the sort order. + boolean isAsc; + switch (args[2].toUpperCase()) { + case "ASC": + isAsc = true; + break; + case "DESC": + isAsc = false; + break; + default: + printUsageAndExit("Illegal argument" + args[2]); + return;//Should not be reached. + } + /* + * Create a comparator that compares lines by comparing + * values in the specified column. + */ + Comparator cmp + = Comparator.comparing(str -> getCell(str, column), + String.CASE_INSENSITIVE_ORDER); + /* + * sorted(...) is used to sort records. + * forEach(...) is used to output sorted records. + */ + br.lines().sorted(isAsc ? cmp : cmp.reversed()) + .forEach(System.out::println); + break; + case "search": + verifyArgumentNumber(args, 4); + /* + * Records are filtered by a regex. + * forEach(...) is used to output filtered records. + */ + Predicate pattern + = Pattern.compile(args[2]).asPredicate(); + br.lines().filter(str -> pattern.test(getCell(str, column))) + .forEach(System.out::println); + break; + case "groupby": + verifyArgumentNumber(args, 3); + /* + * Group lines by values in the column with collect(...), and + * print with forEach(...) for every distinct value within + * the column. + */ + br.lines().collect( + Collectors.groupingBy(str -> getCell(str, column), + toCollection(TreeSet::new))) + .forEach((str, set) -> { + System.out.println(str + ":"); + set.forEach(System.out::println); + }); + break; + case "stat": + verifyArgumentNumber(args, 3); + + /* + * BufferedReader will be read several times. + * Mark this point to return here after each pass. + * BufferedReader will be read right after the headers line + * because it is already read. + */ + br.mark(READ_AHEAD_LIMIT); + + /* + * Statistics can be collected by a custom collector in one + * pass. One pass is preferable. + */ + System.out.println( + br.lines().collect(new Statistics(column))); + + /* + * Alternatively, statistics can be collected + * by a built-in API in several passes. + * This method demonstrates how separate operations can be + * implemented using a built-in API. + */ + br.reset(); + statInSeveralPasses(br, column); + break; + default: + printUsageAndExit("Illegal argument" + args[0]); + } + } catch (IOException e) { + printUsageAndExit(e.toString()); + } + } + + private static void statInSeveralPasses(BufferedReader br, int column) + throws IOException { + System.out.println("#-----Statistics in several passes-------#"); + //Create a comparator to compare records by the column. + Comparator comparator + = Comparator.comparing( + (String str) -> parseDouble(getCell(str, column))); + //Find max record by using Collectors.maxBy(...) + System.out.println( + "Max: " + br.lines().collect(maxBy(comparator)).get()); + br.reset(); + //Find min record by using Collectors.minBy(...) + System.out.println( + "Min: " + br.lines().collect(minBy(comparator)).get()); + br.reset(); + //Compute the average value and sum with + //Collectors.toDoubleSummaryStatistics(...) + DoubleSummaryStatistics doubleSummaryStatistics + = br.lines().collect(summarizingDouble( + str -> parseDouble(getCell(str, column)))); + System.out.println("Average: " + doubleSummaryStatistics.getAverage()); + System.out.println("Sum: " + doubleSummaryStatistics.getSum()); + } + + private static void verifyArgumentNumber(String[] args, int n) { + if (args.length != n) { + printUsageAndExit("Expected " + n + " arguments but was " + + args.length); + } + } + + private static int getColumnNumber(List header, String name) { + int column = header.indexOf(name); + if (column == -1) { + printUsageAndExit("There is no column with name " + name); + } + return column; + } + + private static String getCell(String record, int column) { + return record.split(",")[column].trim(); + } + + private static void printUsageAndExit(String... str) { + System.out.println("Usages:"); + + System.out.println("CSVProcessor sort COLUMN_NAME ASC|DESC FILE"); + System.out.println("Sort lines by column COLUMN_NAME in CSV FILE\n"); + + System.out.println("CSVProcessor search COLUMN_NAME REGEX FILE"); + System.out.println("Search for REGEX in column COLUMN_NAME in CSV FILE\n"); + + System.out.println("CSVProcessor groupby COLUMN_NAME FILE"); + System.out.println("Split lines into different groups according to column " + + "COLUMN_NAME value\n"); + + System.out.println("CSVProcessor stat COLUMN_NAME FILE"); + System.out.println("Compute max/min/average/sum statistics by column " + + "COLUMN_NAME\n"); + + Arrays.asList(str).forEach(System.err::println); + System.exit(1); + } + + /* + * This is a custom implementation of the Collector interface. + * Statistics are objects gather max,min,sum,average statistics. + */ + private static class Statistics + implements Collector { + + + /* + * This implementation does not need to be thread safe because + * the parallel implementation of + * {@link java.util.stream.Stream#collect Stream.collect()} + * provides the necessary partitioning and isolation for safe parallel + * execution. + */ + private String maxRecord; + private String minRecord; + + private double sum; + private int lineCount; + private final BinaryOperator maxOperator; + private final BinaryOperator minOperator; + private final int column; + + public Statistics(int column) { + this.column = column; + Comparator cmp = Comparator.comparing( + (String str) -> parseDouble(getCell(str, column))); + maxOperator = BinaryOperator.maxBy(cmp); + minOperator = BinaryOperator.minBy(cmp); + } + + /* + * Process line. + */ + public Statistics accept(String line) { + maxRecord = maxRecord == null + ? line : maxOperator.apply(maxRecord, line); + minRecord = minRecord == null + ? line : minOperator.apply(minRecord, line); + + sum += parseDouble(getCell(line, column)); + lineCount++; + return this; + } + + + /* + * Merge two Statistics. + */ + public Statistics combine(Statistics stat) { + maxRecord = maxOperator.apply(maxRecord, stat.getMaxRecord()); + minRecord = minOperator.apply(minRecord, stat.getMinRecord()); + sum += stat.getSum(); + lineCount += stat.getLineCount(); + return this; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("#------Statistics------#\n"); + sb.append("Max: ").append(getMaxRecord()).append("\n"); + sb.append("Min: ").append(getMinRecord()).append("\n"); + sb.append("Sum = ").append(getSum()).append("\n"); + sb.append("Average = ").append(average()).append("\n"); + sb.append("#------Statistics------#\n"); + return sb.toString(); + } + + @Override + public Supplier supplier() { + return () -> new Statistics(column); + } + + @Override + public BiConsumer accumulator() { + return Statistics::accept; + } + + @Override + public BinaryOperator combiner() { + return Statistics::combine; + + } + + @Override + public Function finisher() { + return stat -> stat; + } + + @Override + public Set characteristics() { + return EnumSet.of(Characteristics.IDENTITY_FINISH); + } + + private String getMaxRecord() { + return maxRecord; + } + + private String getMinRecord() { + return minRecord; + } + + private double getSum() { + return sum; + } + + private double average() { + return sum / lineCount; + } + + private int getLineCount() { + return lineCount; + } + + } + +} diff --git a/jdk/src/share/sample/lambda/BulkDataOperations/src/Grep.java b/jdk/src/share/sample/lambda/BulkDataOperations/src/Grep.java new file mode 100644 index 00000000000..cb4bdf765cb --- /dev/null +++ b/jdk/src/share/sample/lambda/BulkDataOperations/src/Grep.java @@ -0,0 +1,185 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation, and proper error handling, might not be present in + * this sample code. + */ + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Arrays; +import java.util.List; +import java.util.regex.Pattern; +import java.util.stream.Stream; + +import static java.util.stream.Collectors.toList; + +/** + * Grep prints lines matching a regex. See {@link #printUsageAndExit(String...)} + * method for instructions and command line parameters. This sample shows + * examples of using next features: + *
          + *
        • Lambda and bulk operations. Working with streams: + * map(...),filter(...),flatMap(...),limit(...) methods.
        • + *
        • Static method reference for printing values.
        • + *
        • New Collections API forEach(...) method.
        • + *
        • Try-with-resources feature.
        • + *
        • new Files.walk(...), Files.lines(...) API.
        • + *
        • Streams that need to be closed.
        • + *
        + * + */ +public class Grep { + + private static void printUsageAndExit(String... str) { + System.out.println("Usage: " + Grep.class.getSimpleName() + + " [OPTION]... PATTERN FILE..."); + System.out.println("Search for PATTERN in each FILE. " + + "If FILE is a directory then whole file tree of the directory" + + " will be processed."); + System.out.println("Example: grep -m 100 'hello world' menu.h main.c"); + System.out.println("Options:"); + System.out.println(" -m NUM: stop analysis after NUM matches"); + Arrays.asList(str).forEach(System.err::println); + System.exit(1); + } + + /** + * The main method for the Grep program. Run program with empty argument + * list to see possible arguments. + * + * @param args the argument list for Grep. + * @throws java.io.IOException If an I/O error occurs. + */ + public static void main(String[] args) throws IOException { + long maxCount = Long.MAX_VALUE; + if (args.length < 2) { + printUsageAndExit(); + } + int i = 0; + //parse OPTIONS + while (args[i].startsWith("-")) { + switch (args[i]) { + case "-m": + try { + maxCount = Long.parseLong(args[++i]); + } catch (NumberFormatException ex) { + printUsageAndExit(ex.toString()); + } + break; + default: + printUsageAndExit("Unexpected option " + args[i]); + } + i++; + } + //parse PATTERN + Pattern pattern = Pattern.compile(args[i++]); + if (i == args.length) { + printUsageAndExit("There are no files for input"); + } + + try { + /* + * First obtain the list of all paths. + * For a small number of arguments there is little to be gained + * by producing this list in parallel. For one argument + * there will be no parallelism. + * + * File names are converted to paths. If a path is a directory then + * Stream is populated with whole file tree of the directory by + * flatMap() method. Files are filtered from directories. + */ + List files = Arrays.stream(args, i, args.length) + .map(Paths::get) + // flatMap will ensure each I/O-based stream will be closed + .flatMap(Grep::getPathStream) + .filter(Files::isRegularFile) + .collect(toList()); + /* + * Then operate on that list in parallel. + * This is likely to give a more even distribution of work for + * parallel execution. + * + * Lines are extracted from files. Lines are filtered by pattern. + * Stream is limited by number of matches. Each remaining string is + * displayed in std output by method reference System.out::println. + */ + files.parallelStream() + // flatMap will ensure each I/O-based stream will be closed + .flatMap(Grep::path2Lines) + .filter(pattern.asPredicate()) + .limit(maxCount) + .forEachOrdered(System.out::println); + } catch (UncheckedIOException ioe) { + printUsageAndExit(ioe.toString()); + } + } + + /** + * Flattens file system hierarchy into a stream. This code is not inlined + * for the reason of Files.walk() throwing a checked IOException that must + * be caught. + * + * @param path - the file or directory + * @return Whole file tree starting from path, a stream with one element - + * the path itself - if it is a file. + */ + private static Stream getPathStream(Path path) { + try { + return Files.walk(path); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + + /** + * Produces a stream of lines from a file. The result is a stream in order + * to close it later. This code is not inlined for the reason of + * Files.lines() throwing a checked IOException that must be caught. + * + * @param path - the file to read + * @return stream of lines from the file + */ + private static Stream path2Lines(Path path) { + try { + return Files.lines(path); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } +} diff --git a/jdk/src/share/sample/lambda/BulkDataOperations/src/PasswordGenerator.java b/jdk/src/share/sample/lambda/BulkDataOperations/src/PasswordGenerator.java new file mode 100644 index 00000000000..e4677985929 --- /dev/null +++ b/jdk/src/share/sample/lambda/BulkDataOperations/src/PasswordGenerator.java @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation, and proper error handling, might not be present in + * this sample code. + */ + +import java.security.SecureRandom; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.IntStream; + +/** + * Generates password of desired length. See {@link #usage} method + * for instructions and command line parameters. This sample shows usages of: + *
          + *
        • Method references.
        • + *
        • Lambda and bulk operations. A stream of random integers is mapped to + * chars, limited by desired length and printed in standard output as password + * string.
        • + *
        + * + */ +public class PasswordGenerator { + + private static void usage() { + System.out.println("Usage: PasswordGenerator LENGTH"); + System.out.println( + "Password Generator produces password of desired LENGTH."); + } + + private static final List PASSWORD_CHARS = new ArrayList<>(); + + //Valid symbols. + static { + IntStream.rangeClosed('0', '9').forEach(PASSWORD_CHARS::add); // 0-9 + IntStream.rangeClosed('A', 'Z').forEach(PASSWORD_CHARS::add); // A-Z + IntStream.rangeClosed('a', 'z').forEach(PASSWORD_CHARS::add); // a-z + } + + /** + * The main method for the PasswordGenerator program. Run program with empty + * argument list to see possible arguments. + * + * @param args the argument list for PasswordGenerator. + */ + public static void main(String[] args) { + + if (args.length != 1) { + usage(); + return; + } + + long passwordLength; + try { + passwordLength = Long.parseLong(args[0]); + if (passwordLength < 1) { + printMessageAndUsage("Length has to be positive"); + return; + } + } catch (NumberFormatException ex) { + printMessageAndUsage("Unexpected number format" + args[0]); + return; + } + /* + * Stream of random integers is created containing Integer values + * in range from 0 to PASSWORD_CHARS.size(). + * The stream is limited by passwordLength. + * Valid chars are selected by generated index. + */ + new SecureRandom().ints(passwordLength, 0, PASSWORD_CHARS.size()) + .map(PASSWORD_CHARS::get) + .forEach(i -> System.out.print((char) i)); + } + + private static void printMessageAndUsage(String message) { + System.err.println(message); + usage(); + } + +} diff --git a/jdk/src/share/sample/lambda/BulkDataOperations/src/WC.java b/jdk/src/share/sample/lambda/BulkDataOperations/src/WC.java new file mode 100644 index 00000000000..c724f159a19 --- /dev/null +++ b/jdk/src/share/sample/lambda/BulkDataOperations/src/WC.java @@ -0,0 +1,217 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation, and proper error handling, might not be present in + * this sample code. + */ + +import java.io.BufferedReader; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.util.function.Consumer; +import java.util.regex.Pattern; + +/** + * WC - Prints newline, word, and character counts for each file. See + * the {@link #usage} method for instructions and command line parameters. This + * sample shows usages of: + *
          + *
        • Lambda and bulk operations. Shows how to create a custom collector to + * gather custom statistics. Implements the collection of statistics using a + * built-in API.
        • + *
        • Constructor reference.
        • + *
        • Try-with-resources feature.
        • + *
        + * + */ +public class WC { + + //The number of characters that may be read. + private static final int READ_AHEAD_LIMIT = 100_000_000; + + //The pattern for splitting strings by non word characters to get words. + private static final Pattern nonWordPattern = Pattern.compile("\\W"); + + /** + * The main method for the WC program. Run the program with an empty + * argument list to see possible arguments. + * + * @param args the argument list for WC + * @throws java.io.IOException If an input exception occurred. + */ + public static void main(String[] args) throws IOException { + + if (args.length != 1) { + usage(); + return; + } + + try (BufferedReader reader = new BufferedReader( + new FileReader(args[0]))) { + reader.mark(READ_AHEAD_LIMIT); + /* + * Statistics can be gathered in four passes using a built-in API. + * The method demonstrates how separate operations can be + * implemented using a built-in API. + */ + collectInFourPasses(reader); + /* + * Usage of several passes to collect data is not the best way. + * Statistics can be gathered by a custom collector in one pass. + */ + reader.reset(); + collectInOnePass(reader); + } catch (FileNotFoundException e) { + usage(); + System.err.println(e); + } + } + + private static void collectInFourPasses(BufferedReader reader) + throws IOException { + /* + * Input is read as a stream of lines by lines(). + * Every line is turned into a stream of chars by the flatMapToInt(...) + * method. + * Length of the stream is counted by count(). + */ + System.out.println("Character count = " + + reader.lines().flatMapToInt(String::chars).count()); + /* + * Input is read as a stream of lines by lines(). + * Every line is split by nonWordPattern into words by flatMap(...) + * method. + * Empty lines are removed by the filter(...) method. + * Length of the stream is counted by count(). + */ + reader.reset(); + System.out.println("Word count = " + + reader.lines() + .flatMap(nonWordPattern::splitAsStream) + .filter(str -> !str.isEmpty()).count()); + + reader.reset(); + System.out.println("Newline count = " + reader.lines().count()); + /* + * Input is read as a stream of lines by lines(). + * Every line is mapped to its length. + * Maximum of the lengths is calculated. + */ + reader.reset(); + System.out.println("Max line length = " + + reader.lines().mapToInt(String::length).max().getAsInt()); + } + + private static void collectInOnePass(BufferedReader reader) { + /* + * The collect() method has three parameters: + * The first parameter is the {@code WCStatistic} constructor reference. + * collect() will create {@code WCStatistics} instances, where + * statistics will be aggregated. + * The second parameter shows how {@code WCStatistics} will process + * String. + * The third parameter shows how to merge two {@code WCStatistic} + * instances. + * + * Also {@code Collector} can be used, which would be more reusable + * solution. See {@code CSVProcessor} example for how {@code Collector} + * can be implemented. + * + * Note that the any performance increase when going parallel will + * depend on the size of the input (lines) and the cost per-element. + */ + WCStatistics wc = reader.lines().parallel() + .collect(WCStatistics::new, + WCStatistics::accept, + WCStatistics::combine); + System.out.println(wc); + } + + private static void usage() { + System.out.println("Usage: " + WC.class.getSimpleName() + " FILE"); + System.out.println("Print newline, word," + + " character counts and max line length for FILE."); + } + + private static class WCStatistics implements Consumer { + /* + * @implNote This implementation does not need to be thread safe because + * the parallel implementation of + * {@link java.util.stream.Stream#collect Stream.collect()} + * provides the necessary partitioning and isolation for safe parallel + * execution. + */ + + private long characterCount; + private long lineCount; + private long wordCount; + private long maxLineLength; + + + /* + * Processes line. + */ + @Override + public void accept(String line) { + characterCount += line.length(); + lineCount++; + wordCount += nonWordPattern.splitAsStream(line) + .filter(str -> !str.isEmpty()).count(); + maxLineLength = Math.max(maxLineLength, line.length()); + } + + /* + * Merges two WCStatistics. + */ + public void combine(WCStatistics stat) { + wordCount += stat.wordCount; + lineCount += stat.lineCount; + characterCount += stat.characterCount; + maxLineLength = Math.max(maxLineLength, stat.maxLineLength); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("#------WCStatistic------#\n"); + sb.append("Character count = ").append(characterCount).append('\n'); + sb.append("Word count = ").append(wordCount).append('\n'); + sb.append("Newline count = ").append(lineCount).append('\n'); + sb.append("Max line length = ").append(maxLineLength).append('\n'); + return sb.toString(); + } + } +} diff --git a/jdk/src/share/sample/lambda/DefaultMethods/ArrayIterator.java b/jdk/src/share/sample/lambda/DefaultMethods/ArrayIterator.java new file mode 100644 index 00000000000..2eca80149b8 --- /dev/null +++ b/jdk/src/share/sample/lambda/DefaultMethods/ArrayIterator.java @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import java.util.Iterator; +import java.util.NoSuchElementException; + +/** + * The code sample illustrates the usage of default methods in the JDK 8. Most + * implementations of {@link Iterator} don't provide a useful + * {@link Iterator#remove()} method, however, + * they still have to implement this method to throw + * an UnsupportedOperationException. With the default method, the same + * default behavior in interface Iterator itself can be provided. + */ +public class ArrayIterator { + + /** Close the constructor because ArrayIterator is part of the utility + * class. + */ + protected ArrayIterator() { + throw new UnsupportedOperationException(); + } + + /** + * Returns an iterator that goes over the elements in the array. + * + * @param type of an array element + * @param array source array to iterate over it + * @return an iterator that goes over the elements in the array + */ + public static Iterator iterator(final E[] array) { + return new Iterator() { + /** + * Index of the current position + * + */ + private int index = 0; + + /** + * Returns the next element in the iteration + * + * @return the next element in the iteration + * @throws NoSuchElementException if the iteration has no more + * elements + */ + @Override + public boolean hasNext() { + return (index < array.length); + } + + /** + * Returns {@code true} if the iteration has more elements. (In + * other words, returns {@code true} if {@link #next} returns + * an element, rather than throwing an exception.) + * + * @return {@code true} if the iteration has more elements + */ + @Override + public E next() { + if (!hasNext()) { + throw new NoSuchElementException(); + } + return array[index++]; + } + + /** + * This method does not need to be overwritten in JDK 8. + */ + //@Override + //public void remove() { + // throw UnsupportedOperationException( + // "Arrays don't support remove.") + //} + }; + } + + /** + * Sample usage of the ArrayIterator + * + * @param args command-line arguments + */ + public static void main(final String[] args) { + Iterator it = ArrayIterator.iterator( + new String[]{"one", "two", "three"}); + + while (it.hasNext()) { + System.out.println(it.next()); + } + } +} diff --git a/jdk/src/share/sample/lambda/DefaultMethods/DiamondInheritance.java b/jdk/src/share/sample/lambda/DefaultMethods/DiamondInheritance.java new file mode 100644 index 00000000000..9214d58a788 --- /dev/null +++ b/jdk/src/share/sample/lambda/DefaultMethods/DiamondInheritance.java @@ -0,0 +1,145 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * This sample diamond interface inheritance with default methods. + * If there's not already a unique method implementation to inherit, + * you must provide it. The inheritance diagram is similar to the following: + *
        + *                   Animal
        + *                    /   \
        + *                 Horse   Bird
        + *                    \   /
        + *                   Pegasus
        + * 
        + * + * Both {@link Horse} and {@link Bird} interfaces implements the go + * method. The {@link Pegasus} class have to overrides the + * go method. + * + * The new syntax of super-call is used here: + *
        + *     <interface_name>.super.<method>(...);
        + *     For example:  Horse.super.go();
        + * 
        So, Pegasus moves like a horse. + */ +public class DiamondInheritance { + + /** + * Base interface to illustrate the diamond inheritance. + * + * @see DiamondInheritance + */ + public interface Animal { + + /** + * Return string representation of the "go" action for concrete animal + * + * @return string representation of the "go" action for concrete animal + */ + String go(); + } + + /** + * Interface to illustrate the diamond inheritance. + * + * @see DiamondInheritance + */ + public interface Horse extends Animal { + + /** + * Return string representation of the "go" action for horse + * + * @return string representation of the "go" action for horse + */ + @Override + default String go() { + return this.getClass().getSimpleName() + " walks on four legs"; + } + } + + /** + * Interface to illustrate the diamond inheritance. + * + * @see DiamondInheritance + */ + public interface Bird extends Animal { + + /** + * Return string representation of the "go" action for bird + * + * @return string representation of the "go" action for bird + */ + @Override + default String go() { + return this.getClass().getSimpleName() + " walks on two legs"; + } + + /** + * Return string representation of the "fly" action for bird + * + * @return string representation of the "fly" action for bird + */ + default String fly() { + return "I can fly"; + } + } + + /** + * Class to illustrate the diamond inheritance. Pegasus must mix horse and + * bird behavior. + * + * @see DiamondInheritance + */ + public static class Pegasus implements Horse, Bird { + + /** + * Return string representation of the "go" action for the fictitious + * creature Pegasus + * + * @return string representation of the "go" action for the fictitious + * creature Pegasus + */ + @Override + public String go() { + return Horse.super.go(); + } + } + + /** + * Illustrate the behavior of the {@link Pegasus} class + * + * @param args command line arguments + */ + public static void main(final String[] args) { + System.out.println(new Pegasus().go()); + } +} diff --git a/jdk/src/share/sample/lambda/DefaultMethods/Inheritance.java b/jdk/src/share/sample/lambda/DefaultMethods/Inheritance.java new file mode 100644 index 00000000000..961de2c24d5 --- /dev/null +++ b/jdk/src/share/sample/lambda/DefaultMethods/Inheritance.java @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * The sample illustrates rules to resolve conflicts between inheritance + * candidates with default methods. There are two simple rules: + *
          + *
        • Class wins. If the superclass has a concrete or abstract declaration of + * this method, then it is preferred over all defaults.
        • + *
        • Subtype wins. If an interface extends another interface, and both provide + * a default, then the more specific interface wins.
        • + *
        + */ +public class Inheritance { + + /** + * The behavior of an creature that can swim + */ + public interface Swimable { + + /** + * Return string representation of the swim action for a creature that + * can swim + * + * @return string representation of the swim action for a creature + * that can swim + */ + default String swim() { + return "I can swim."; + } + } + + /** + * The abstract class that overrides {@link #swim} method + */ + public abstract static class Fish implements Swimable { + + /** + * Return string representation of the swim action for a fish + * + * @return string representation of the swim action for a fish + */ + @Override + public String swim() { + return this.getClass().getSimpleName() + " swims under water"; + } + } + + /** + * This class is used for the illustration rule of 1. See the source code + * of the {@link #main} method. + *
        +     *      System.out.println(new Tuna().swim()); //"Tuna swims under water" output is suspected here
        +     * 
        + */ + public static class Tuna extends Fish implements Swimable { + } + + /** + * The behavior of an creature that can dive: the interface that overrides + * {@link #swim} method (subtype of {@link Swimable}) + */ + public interface Diveable extends Swimable { + + /** + * Return string representation of the swim action for a creature that + * can dive + * + * @return string representation of the swim action for a creature + * that can dive + */ + @Override + default String swim() { + return "I can swim on the surface of the water."; + } + + /** + * Return string representation of the dive action for a creature that + * can dive + * + * @return string representation of the dive action for a creature + * that can dive + */ + default String dive() { + return "I can dive."; + } + } + + /** + * This class is used for the illustration of rule 2. See the source code + * of the {@link #main} method + *
        +     *      //"I can swim on the surface of the water." output is suspected here
        +     *      System.out.println(new Duck().swim());
        +     * 
        + */ + public static class Duck implements Swimable, Diveable { + } + + /** + * Illustrate behavior of the classes: {@link Tuna} and {@link Duck} + * + * @param args command line arguments + */ + public static void main(final String[] args) { + // Illustrates rule 1. The Fish.swim() implementation wins + //"Tuna swims under water" is output + System.out.println(new Tuna().swim()); + + // Illustrates rule 2. The Diveable.swim() implementation wins + //"I can swim on the surface of the water." is output + System.out.println(new Duck().swim()); + } +} diff --git a/jdk/src/share/sample/lambda/DefaultMethods/MixIn.java b/jdk/src/share/sample/lambda/DefaultMethods/MixIn.java new file mode 100644 index 00000000000..d9ed81dee27 --- /dev/null +++ b/jdk/src/share/sample/lambda/DefaultMethods/MixIn.java @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import java.io.IOException; +import java.lang.reflect.Field; + +/** + * The example illustrates how to use the default method for mixin. + * @see BuildType + * @see Debuggable + */ +public class MixIn { + + /** + * Implement this interface for a class that must be in debug print + */ + public interface Debuggable { + + /** + * Print the class name and all fields to a string. Uses reflection to + * obtain and access fields of this object. + * + * @return the string formatted like the following:
        +         * State of the: <Class Name>
        +         * <member name> : <value>
        +         * ...
        +         * 
        + */ + default String toDebugString() { + StringBuilder sb = new StringBuilder(); + sb.append("State of the: ").append( + this.getClass().getSimpleName()).append("\n"); + for (Class cls = this.getClass(); + cls != null; + cls = cls.getSuperclass()) { + for (Field f : cls.getDeclaredFields()) { + try { + f.setAccessible(true); + sb.append(f.getName()).append(" : "). + append(f.get(this)).append("\n"); + } catch (IllegalAccessException e) { + } + } + } + return sb.toString(); + } + } + + /** + * Sample exception class to demonstrate mixin. This enum inherits the + * behavior of the {@link Debuggable} + */ + public static enum BuildType implements Debuggable { + + BUILD(0, "-build"), + PLAN(0, "-plan"), + EXCLUDE(1, "-exclude"), + TOTAL(2, "-total"); + + private final int compareOrder; + private final String pathSuffix; + + private BuildType(int compareOrder, String pathSuffix) { + this.compareOrder = compareOrder; + this.pathSuffix = pathSuffix; + } + + public int getCompareOrder() { + return compareOrder; + } + + public String getPathSuffix() { + return pathSuffix; + } + } + + /** + * Illustrate the behavior of the MixClass + * + * @param args command-line arguments + * @throws java.io.IOException internal demo error + */ + public static void main(final String[] args) throws IOException { + System.out.println(BuildType.BUILD.toDebugString()); + } +} diff --git a/jdk/src/share/sample/lambda/DefaultMethods/Reflection.java b/jdk/src/share/sample/lambda/DefaultMethods/Reflection.java new file mode 100644 index 00000000000..78424a240e8 --- /dev/null +++ b/jdk/src/share/sample/lambda/DefaultMethods/Reflection.java @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.stream.Stream; + +/** + * The code sample illustrates changes in the reflection API linked + * default methods. Since Java SE 8, a new method is added into the class + * java.lang.reflect.Method, with which you can reflectively + * determine whether or not a default method provided by an interface + * (Method.isDefault()). + */ +public class Reflection { + + /** + * Base interface to illustrate the new reflection API. + * + * @see Dog + */ + public interface Animal { + + /** + * Return string representation of the eat action for Animal + * + * @return string representation of the eat action for Animal + */ + default String eat() { + return this.getClass().getSimpleName() + + " eats like an ordinary animal"; + } + + /** + * Return string representation of the sleep action for Animal + * + * @return string representation of the sleep action for Animal + */ + default String sleep() { + return this.getClass().getSimpleName() + + " sleeps like an ordinary animal"; + } + + /** + * Return string representation of the go action for Animal + * + * @return string representation of the go action for Animal + */ + String go(); + } + + /** + * Dog class to illustrate the new reflection API. You can see that: + *
          + *
        • the {@link #go} and {@link #sleep} methods are not default. + * {@link #go} is not the default implementation and the {@link #sleep} + * method implementation wins as subtype (according with {@link Inheritance} + * rule. 2)
        • + *
        • the {@link #eat} is a simple default method that is not overridden + * in this class. + *
        • + *
        + */ + public static class Dog implements Animal { + + /** + * Return string representation of the go action for Dog + * + * @return string representation of the go action for Dog + */ + @Override + public String go() { + return "Dog walks on four legs"; + } + + /** + * Return string representation of the sleep action for Dog + * + * @return string representation of the sleep action for Dog + */ + @Override + public String sleep() { + return "Dog sleeps"; + } + } + + /** + * Illustrate the usage of the method java.lang.reflect.Method.isDefault() + * + * @param args command-line arguments + * @throws NoSuchMethodException internal demo error + */ + public static void main(final String[] args) throws NoSuchMethodException { + Dog dog = new Dog(); + Stream.of(Dog.class.getMethod("eat"), Dog.class.getMethod("go"), Dog.class.getMethod("sleep")) + .forEach((m) -> { + System.out.println("Method name: " + m.getName()); + System.out.println(" isDefault: " + m.isDefault()); + System.out.print(" invoke: "); + try { + m.invoke(dog); + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) { + } + System.out.println(); + }); + } +} diff --git a/jdk/src/share/sample/lambda/DefaultMethods/SimplestUsage.java b/jdk/src/share/sample/lambda/DefaultMethods/SimplestUsage.java new file mode 100644 index 00000000000..a971858f589 --- /dev/null +++ b/jdk/src/share/sample/lambda/DefaultMethods/SimplestUsage.java @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * The sample illustrates the simplest use case of the default methods. + */ +public class SimplestUsage { + + /** + * The Animal interface provides the default implementation + * of the {@link #eat} method. + */ + public interface Animal { + + /** + * Return string representation of the eat action for Animal + * + * @return string representation of the eat action for Animal + */ + default String eat() { + return this.getClass().getSimpleName() + + " eats like an ordinary animal"; + } + } + + /** + * The Dog class doesn't have its own implementation of the {@link #eat} + * method and uses the default implementation. + */ + public static class Dog implements Animal { + } + + /** + * The Mosquito class implements {@link #eat} method, its own implementation + * overrides the default implementation. + * + */ + public static class Mosquito implements Animal { + + /** + * Return string representation of the eat action for Mosquito + * + * @return string representation of the eat action for Mosquito + */ + @Override + public String eat() { + return "Mosquito consumes blood"; + } + } + + /** + * Illustrate behavior of the classes: {@link Dog} and {@link Mosquito} + * + * @param args command-line arguments + */ + public static void main(String[] args) { + // "Dog eats like an ordinary animal" is output + System.out.println(new Dog().eat()); + + // "Mosquito consumes blood" is output + System.out.println(new Mosquito().eat()); + } +} diff --git a/jdk/src/share/sample/try-with-resources/index.html b/jdk/src/share/sample/try-with-resources/index.html new file mode 100644 index 00000000000..ff237d89ce6 --- /dev/null +++ b/jdk/src/share/sample/try-with-resources/index.html @@ -0,0 +1,36 @@ + + + + + Try-with-Resources Feature Demo + + +

        Try-with-Resources Feature Demo

        + +

        + This demo shows how to use the try-with-resources feature introduced in JDK7. +

        + +
          +
        • Custom AutoCloseable.

          + +

          + Shows how to use a custom resource with the try-with-resources construct. + For more information, see the source file. +

          + Source: src/CustomAutoCloseableSample.java + +
        • Unzip

          + +

          + Extracts archived files. For more information, see the source file. +

          + Source: src/Unzip.java +
        • ZipCat

          + +

          Prints data about a specified file from an archive. For more information, see the source file.

          + Source: src/ZipCat.java + +
        + + \ No newline at end of file diff --git a/jdk/src/share/sample/try-with-resources/src/CustomAutoCloseableSample.java b/jdk/src/share/sample/try-with-resources/src/CustomAutoCloseableSample.java new file mode 100644 index 00000000000..9bbe09aa1ed --- /dev/null +++ b/jdk/src/share/sample/try-with-resources/src/CustomAutoCloseableSample.java @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation, and proper error handling, might not be present in + * this sample code. + */ + +import java.io.BufferedOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.io.PrintStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +/** + * This sample demonstrates the ability to create custom resource that + * implements the {@code AutoCloseable} interface. This resource can be used in + * the try-with-resources construct. + */ +public class CustomAutoCloseableSample { + + /** + * The main method for the CustomAutoCloseableSample program. + * + * @param args is not used. + */ + public static void main(String[] args) { + /* + * TeeStream will be closed automatically after the try block. + */ + try (TeeStream teeStream = new TeeStream(System.out, Paths.get("out.txt")); + PrintStream out = new PrintStream(teeStream)) { + out.print("Hello, world"); + } catch (Exception e) { + e.printStackTrace(); + System.exit(1); + } + } + + /** + * Passes the output through to the specified output stream while copying it into a file. + * The TeeStream functionality is similar to the Unix tee utility. + * TeeStream implements AutoCloseable interface. See OutputStream for details. + */ + public static class TeeStream extends OutputStream { + + private final OutputStream fileStream; + private final OutputStream outputStream; + + /** + * Creates a TeeStream. + * + * @param outputStream an output stream. + * @param outputFile an path to file. + * @throws IOException If an I/O error occurs. + */ + public TeeStream(OutputStream outputStream, Path outputFile) throws IOException { + this.fileStream = new BufferedOutputStream(Files.newOutputStream(outputFile)); + this.outputStream = outputStream; + } + + /** + * Writes the specified byte to the specified output stream + * and copies it to the file. + * + * @param b the byte to be written. + * @throws IOException If an I/O error occurs. + */ + @Override + public void write(int b) throws IOException { + fileStream.write(b); + outputStream.write(b); + } + + /** + * Flushes this output stream and forces any buffered output bytes + * to be written out. + * The flush method of TeeStream flushes + * the specified output stream and the file output stream. + * + * @throws IOException if an I/O error occurs. + */ + @Override + public void flush() throws IOException { + outputStream.flush(); + fileStream.flush(); + } + + /** + * Closes underlying streams and resources. + * The external output stream won't be closed. + * This method is the member of AutoCloseable interface and + * it will be invoked automatically after the try-with-resources block. + * + * @throws IOException If an I/O error occurs. + */ + @Override + public void close() throws IOException { + try (OutputStream file = fileStream) { + flush(); + } + } + } +} diff --git a/jdk/src/share/sample/try-with-resources/src/Unzip.java b/jdk/src/share/sample/try-with-resources/src/Unzip.java new file mode 100644 index 00000000000..d75eba52c78 --- /dev/null +++ b/jdk/src/share/sample/try-with-resources/src/Unzip.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation, and proper error handling, might not be present in + * this sample code. + */ + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.nio.file.*; + +import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; + +/** + * Extract (unzip) a file to the current directory. + */ +public class Unzip { + + /** + * The main method for the Unzip program. Run the program with an empty + * argument list to see possible arguments. + * + * @param args the argument list for {@code Unzip}. + */ + public static void main(String[] args) { + if (args.length != 1) { + System.out.println("Usage: Unzip zipfile"); + } + final Path destDir = Paths.get("."); + /* + * Create AutoCloseable FileSystem. It will be closed automatically + * after the try block. + */ + try (FileSystem zipFileSystem = FileSystems.newFileSystem(Paths.get(args[0]), null)) { + + Path top = zipFileSystem.getPath("/"); + Files.walk(top).skip(1).forEach(file -> { + Path target = destDir.resolve(top.relativize(file).toString()); + System.out.println("Extracting " + target); + try { + Files.copy(file, target, REPLACE_EXISTING); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + }); + } catch (UncheckedIOException | IOException e) { + e.printStackTrace(); + System.exit(1); + } + } +} diff --git a/jdk/src/share/sample/try-with-resources/src/ZipCat.java b/jdk/src/share/sample/try-with-resources/src/ZipCat.java new file mode 100644 index 00000000000..4bbf513a538 --- /dev/null +++ b/jdk/src/share/sample/try-with-resources/src/ZipCat.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This source code is provided to illustrate the usage of a given feature + * or technique and has been deliberately simplified. Additional steps + * required for a production-quality application, such as security checks, + * input validation, and proper error handling, might not be present in + * this sample code. + */ + +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.FileSystem; +import java.nio.file.FileSystems; +import java.nio.file.Files; +import java.nio.file.Paths; + +/** + * Prints data of the specified file to standard output from a zip archive. + */ +public class ZipCat { + + /** + * The main method for the ZipCat program. Run the program with an empty + * argument list to see possible arguments. + * + * @param args the argument list for ZipCat + */ + public static void main(String[] args) { + if (args.length != 2) { + System.out.println("Usage: ZipCat zipfile fileToPrint"); + } + /* + * Creates AutoCloseable FileSystem and BufferedReader. + * They will be closed automatically after the try block. + * If reader initialization fails, then zipFileSystem will be closed + * automatically. + */ + try (FileSystem zipFileSystem + = FileSystems.newFileSystem(Paths.get(args[0]),null); + InputStream input + = Files.newInputStream(zipFileSystem.getPath(args[1]))) { + byte[] buffer = new byte[1024]; + int len; + while ((len = input.read(buffer)) != -1) { + System.out.write(buffer, 0, len); + } + + } catch (IOException e) { + e.printStackTrace(); + System.exit(1); + } + } +} diff --git a/jdk/src/share/transport/socket/socketTransport.c b/jdk/src/share/transport/socket/socketTransport.c index 666ce2d6d6b..dfb3426de80 100644 --- a/jdk/src/share/transport/socket/socketTransport.c +++ b/jdk/src/share/transport/socket/socketTransport.c @@ -506,6 +506,19 @@ socketTransport_close(jdwpTransportEnv* env) if (fd < 0) { return JDWPTRANSPORT_ERROR_NONE; } +#ifdef _AIX + /* + AIX needs a workaround for I/O cancellation, see: + http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.basetechref/doc/basetrf1/close.htm + ... + The close subroutine is blocked until all subroutines which use the file + descriptor return to usr space. For example, when a thread is calling close + and another thread is calling select with the same file descriptor, the + close subroutine does not return until the select call returns. + ... + */ + shutdown(fd, 2); +#endif if (dbgsysSocketClose(fd) < 0) { /* * close failed - it's pointless to restore socketFD here because diff --git a/jdk/src/solaris/back/exec_md.c b/jdk/src/solaris/back/exec_md.c index eebfae1f7e7..b756be3297a 100644 --- a/jdk/src/solaris/back/exec_md.c +++ b/jdk/src/solaris/back/exec_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,8 +30,8 @@ #include "sys.h" #include "util.h" -#if defined(LINUX) || defined(_ALLBSD_SOURCE) - /* Linux */ +#if defined(LINUX) || defined(_ALLBSD_SOURCE) || defined(AIX) + /* Linux, BSD, AIX */ #define FORK() fork() #else /* Solaris (make sure we always get the POSIX-specified behavior) */ diff --git a/jdk/src/solaris/bin/java_md_solinux.c b/jdk/src/solaris/bin/java_md_solinux.c index f561649af16..05f7a4d8112 100644 --- a/jdk/src/solaris/bin/java_md_solinux.c +++ b/jdk/src/solaris/bin/java_md_solinux.c @@ -41,7 +41,11 @@ #define JVM_DLL "libjvm.so" #define JAVA_DLL "libjava.so" +#ifdef AIX +#define LD_LIBRARY_PATH "LIBPATH" +#else #define LD_LIBRARY_PATH "LD_LIBRARY_PATH" +#endif /* help jettison the LD_LIBRARY_PATH settings in the future */ #ifndef SETENV_REQUIRED @@ -248,6 +252,11 @@ RequiresSetenv(const char *jvmpath) { char *dmllp = NULL; char *p; /* a utility pointer */ +#ifdef AIX + /* We always have to set the LIBPATH on AIX because ld doesn't support $ORIGIN. */ + return JNI_TRUE; +#endif + llp = getenv("LD_LIBRARY_PATH"); #ifdef __solaris__ dmllp = getenv("LD_LIBRARY_PATH_64"); @@ -506,7 +515,7 @@ CreateExecutionEnvironment(int *pargc, char ***pargv, * If not on Solaris, assume only a single LD_LIBRARY_PATH * variable. */ - runpath = getenv("LD_LIBRARY_PATH"); + runpath = getenv(LD_LIBRARY_PATH); #endif /* __solaris__ */ /* runpath contains current effective LD_LIBRARY_PATH setting */ @@ -514,8 +523,12 @@ CreateExecutionEnvironment(int *pargc, char ***pargv, jvmpath = JLI_StringDup(jvmpath); new_runpath = JLI_MemAlloc(((runpath != NULL) ? JLI_StrLen(runpath) : 0) + 2 * JLI_StrLen(jrepath) + 2 * JLI_StrLen(arch) + +#ifdef AIX + /* On AIX we additionally need 'jli' in the path because ld doesn't support $ORIGIN. */ + JLI_StrLen(jrepath) + JLI_StrLen(arch) + JLI_StrLen("/lib//jli:") + +#endif JLI_StrLen(jvmpath) + 52); - newpath = new_runpath + JLI_StrLen("LD_LIBRARY_PATH="); + newpath = new_runpath + JLI_StrLen(LD_LIBRARY_PATH "="); /* @@ -527,12 +540,18 @@ CreateExecutionEnvironment(int *pargc, char ***pargv, if (lastslash) *lastslash = '\0'; - sprintf(new_runpath, "LD_LIBRARY_PATH=" + sprintf(new_runpath, LD_LIBRARY_PATH "=" "%s:" "%s/lib/%s:" +#ifdef AIX + "%s/lib/%s/jli:" /* Needed on AIX because ld doesn't support $ORIGIN. */ +#endif "%s/../lib/%s", jvmpath, jrepath, arch, +#ifdef AIX + jrepath, arch, +#endif jrepath, arch ); @@ -861,7 +880,7 @@ void SplashFreeLibrary() { int ContinueInNewThread0(int (JNICALL *continuation)(void *), jlong stack_size, void * args) { int rslt; -#ifdef __linux__ +#ifndef __solaris__ pthread_t tid; pthread_attr_t attr; pthread_attr_init(&attr); @@ -886,7 +905,7 @@ ContinueInNewThread0(int (JNICALL *continuation)(void *), jlong stack_size, void } pthread_attr_destroy(&attr); -#else /* ! __linux__ */ +#else /* __solaris__ */ thread_t tid; long flags = 0; if (thr_create(NULL, stack_size, (void *(*)(void *))continuation, args, flags, &tid) == 0) { @@ -897,7 +916,7 @@ ContinueInNewThread0(int (JNICALL *continuation)(void *), jlong stack_size, void /* See above. Continue in current thread if thr_create() failed */ rslt = continuation(args); } -#endif /* __linux__ */ +#endif /* !__solaris__ */ return rslt; } diff --git a/jdk/src/solaris/bin/java_md_solinux.h b/jdk/src/solaris/bin/java_md_solinux.h index a9e4438a5e2..3f1dc115b4d 100644 --- a/jdk/src/solaris/bin/java_md_solinux.h +++ b/jdk/src/solaris/bin/java_md_solinux.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,23 +45,19 @@ extern char **environ; * A collection of useful strings. One should think of these as #define * entries, but actual strings can be more efficient (with many compilers). */ -#ifdef __linux__ -static const char *system_dir = "/usr/java"; -static const char *user_dir = "/java"; -#else /* Solaris */ +#ifdef __solaris__ static const char *system_dir = "/usr/jdk"; static const char *user_dir = "/jdk"; +#else /* !__solaris__, i.e. Linux, AIX,.. */ +static const char *system_dir = "/usr/java"; +static const char *user_dir = "/java"; #endif #include -#ifdef __linux__ -#include -#else +#ifdef __solaris__ #include +#else +#include #endif -#define JVM_DLL "libjvm.so" -#define JAVA_DLL "libjava.so" -#define LD_LIBRARY_PATH "LD_LIBRARY_PATH" - #endif /* JAVA_MD_SOLINUX_H */ diff --git a/jdk/src/solaris/bin/ppc64/jvm.cfg b/jdk/src/solaris/bin/ppc64/jvm.cfg new file mode 100644 index 00000000000..2fc1214175b --- /dev/null +++ b/jdk/src/solaris/bin/ppc64/jvm.cfg @@ -0,0 +1,33 @@ +# Copyright (c) 2011, 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. +# +# List of JVMs that can be used as an option to java, javac, etc. +# Order is important -- first in this list is the default JVM. +# NOTE that this both this file and its format are UNSUPPORTED and +# WILL GO AWAY in a future release. +# +# You may also select a JVM in an arbitrary location with the +# "-XXaltjvm=" option, but that too is unsupported +# and may not be available in a future release. +# +-server KNOWN diff --git a/jdk/src/solaris/classes/java/lang/UNIXProcess.java.aix b/jdk/src/solaris/classes/java/lang/UNIXProcess.java.aix new file mode 100644 index 00000000000..24216461657 --- /dev/null +++ b/jdk/src/solaris/classes/java/lang/UNIXProcess.java.aix @@ -0,0 +1,504 @@ +/* + * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package java.lang; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.ByteArrayInputStream; +import java.io.FileDescriptor; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.Arrays; +import java.util.concurrent.Executors; +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.TimeUnit; +import java.security.AccessController; +import static java.security.AccessController.doPrivileged; +import java.security.PrivilegedAction; +import java.security.PrivilegedActionException; +import java.security.PrivilegedExceptionAction; + +/** + * java.lang.Process subclass in the UNIX environment. + * + * @author Mario Wolczko and Ross Knippel. + * @author Konstantin Kladko (ported to Linux) + * @author Martin Buchholz + * @author Volker Simonis (ported to AIX) + */ +final class UNIXProcess extends Process { + private static final sun.misc.JavaIOFileDescriptorAccess fdAccess + = sun.misc.SharedSecrets.getJavaIOFileDescriptorAccess(); + + private final int pid; + private int exitcode; + private boolean hasExited; + + private /* final */ OutputStream stdin; + private /* final */ InputStream stdout; + private /* final */ InputStream stderr; + + private static enum LaunchMechanism { + FORK(1), + POSIX_SPAWN(2); + + private int value; + LaunchMechanism(int x) {value = x;} + }; + + /* On AIX, the default is to spawn */ + private static final LaunchMechanism launchMechanism; + private static byte[] helperpath; + + private static byte[] toCString(String s) { + if (s == null) + return null; + byte[] bytes = s.getBytes(); + byte[] result = new byte[bytes.length + 1]; + System.arraycopy(bytes, 0, + result, 0, + bytes.length); + result[result.length-1] = (byte)0; + return result; + } + + static { + launchMechanism = AccessController.doPrivileged( + new PrivilegedAction() + { + public LaunchMechanism run() { + String javahome = System.getProperty("java.home"); + String osArch = System.getProperty("os.arch"); + + helperpath = toCString(javahome + "/lib/" + osArch + "/jspawnhelper"); + String s = System.getProperty( + "jdk.lang.Process.launchMechanism", "posix_spawn"); + + try { + return LaunchMechanism.valueOf(s.toUpperCase()); + } catch (IllegalArgumentException e) { + throw new Error(s + " is not a supported " + + "process launch mechanism on this platform."); + } + } + }); + } + + /* this is for the reaping thread */ + private native int waitForProcessExit(int pid); + + /** + * Create a process. Depending on the mode flag, this is done by + * one of the following mechanisms. + * - fork(2) and exec(2) + * - clone(2) and exec(2) + * - vfork(2) and exec(2) + * + * @param fds an array of three file descriptors. + * Indexes 0, 1, and 2 correspond to standard input, + * standard output and standard error, respectively. On + * input, a value of -1 means to create a pipe to connect + * child and parent processes. On output, a value which + * is not -1 is the parent pipe fd corresponding to the + * pipe which has been created. An element of this array + * is -1 on input if and only if it is not -1 on + * output. + * @return the pid of the subprocess + */ + private native int forkAndExec(int mode, byte[] helperpath, + byte[] prog, + byte[] argBlock, int argc, + byte[] envBlock, int envc, + byte[] dir, + int[] fds, + boolean redirectErrorStream) + throws IOException; + + /** + * The thread factory used to create "process reaper" daemon threads. + */ + private static class ProcessReaperThreadFactory implements ThreadFactory { + private final static ThreadGroup group = getRootThreadGroup(); + + private static ThreadGroup getRootThreadGroup() { + return doPrivileged(new PrivilegedAction () { + public ThreadGroup run() { + ThreadGroup root = Thread.currentThread().getThreadGroup(); + while (root.getParent() != null) + root = root.getParent(); + return root; + }}); + } + + public Thread newThread(Runnable grimReaper) { + // Our thread stack requirement is quite modest. + Thread t = new Thread(group, grimReaper, "process reaper", 32768); + t.setDaemon(true); + // A small attempt (probably futile) to avoid priority inversion + t.setPriority(Thread.MAX_PRIORITY); + return t; + } + } + + /** + * The thread pool of "process reaper" daemon threads. + */ + private static final Executor processReaperExecutor = + doPrivileged(new PrivilegedAction() { + public Executor run() { + return Executors.newCachedThreadPool + (new ProcessReaperThreadFactory()); + }}); + + UNIXProcess(final byte[] prog, + final byte[] argBlock, final int argc, + final byte[] envBlock, final int envc, + final byte[] dir, + final int[] fds, + final boolean redirectErrorStream) + throws IOException { + + pid = forkAndExec(launchMechanism.value, + helperpath, + prog, + argBlock, argc, + envBlock, envc, + dir, + fds, + redirectErrorStream); + + try { + doPrivileged(new PrivilegedExceptionAction() { + public Void run() throws IOException { + initStreams(fds); + return null; + }}); + } catch (PrivilegedActionException ex) { + throw (IOException) ex.getException(); + } + } + + static FileDescriptor newFileDescriptor(int fd) { + FileDescriptor fileDescriptor = new FileDescriptor(); + fdAccess.set(fileDescriptor, fd); + return fileDescriptor; + } + + void initStreams(int[] fds) throws IOException { + stdin = (fds[0] == -1) ? + ProcessBuilder.NullOutputStream.INSTANCE : + new ProcessPipeOutputStream(fds[0]); + + stdout = (fds[1] == -1) ? + ProcessBuilder.NullInputStream.INSTANCE : + new ProcessPipeInputStream(fds[1]); + + stderr = (fds[2] == -1) ? + ProcessBuilder.NullInputStream.INSTANCE : + new ProcessPipeInputStream(fds[2]); + + processReaperExecutor.execute(new Runnable() { + public void run() { + int exitcode = waitForProcessExit(pid); + UNIXProcess.this.processExited(exitcode); + }}); + } + + void processExited(int exitcode) { + synchronized (this) { + this.exitcode = exitcode; + hasExited = true; + notifyAll(); + } + + if (stdout instanceof ProcessPipeInputStream) + ((ProcessPipeInputStream) stdout).processExited(); + + if (stderr instanceof ProcessPipeInputStream) + ((ProcessPipeInputStream) stderr).processExited(); + + if (stdin instanceof ProcessPipeOutputStream) + ((ProcessPipeOutputStream) stdin).processExited(); + } + + public OutputStream getOutputStream() { + return stdin; + } + + public InputStream getInputStream() { + return stdout; + } + + public InputStream getErrorStream() { + return stderr; + } + + public synchronized int waitFor() throws InterruptedException { + while (!hasExited) { + wait(); + } + return exitcode; + } + + @Override + public synchronized boolean waitFor(long timeout, TimeUnit unit) + throws InterruptedException + { + if (hasExited) return true; + if (timeout <= 0) return false; + + long timeoutAsNanos = unit.toNanos(timeout); + long startTime = System.nanoTime(); + long rem = timeoutAsNanos; + + while (!hasExited && (rem > 0)) { + wait(Math.max(TimeUnit.NANOSECONDS.toMillis(rem), 1)); + rem = timeoutAsNanos - (System.nanoTime() - startTime); + } + return hasExited; + } + + public synchronized int exitValue() { + if (!hasExited) { + throw new IllegalThreadStateException("process hasn't exited"); + } + return exitcode; + } + + private static native void destroyProcess(int pid, boolean force); + private void destroy(boolean force) { + // There is a risk that pid will be recycled, causing us to + // kill the wrong process! So we only terminate processes + // that appear to still be running. Even with this check, + // there is an unavoidable race condition here, but the window + // is very small, and OSes try hard to not recycle pids too + // soon, so this is quite safe. + synchronized (this) { + if (!hasExited) + destroyProcess(pid, force); + } + try { stdin.close(); } catch (IOException ignored) {} + try { stdout.close(); } catch (IOException ignored) {} + try { stderr.close(); } catch (IOException ignored) {} + } + + public void destroy() { + destroy(false); + } + + @Override + public Process destroyForcibly() { + destroy(true); + return this; + } + + @Override + public synchronized boolean isAlive() { + return !hasExited; + } + + private static native void init(); + + static { + init(); + } + + /** + * A buffered input stream for a subprocess pipe file descriptor + * that allows the underlying file descriptor to be reclaimed when + * the process exits, via the processExited hook. + * + * This is tricky because we do not want the user-level InputStream to be + * closed until the user invokes close(), and we need to continue to be + * able to read any buffered data lingering in the OS pipe buffer. + * + * On AIX this is especially tricky, because the 'close()' system call + * will block if another thread is at the same time blocked in a file + * operation (e.g. 'read()') on the same file descriptor. We therefore + * combine this 'ProcessPipeInputStream' with the DeferredCloseInputStream + * approach used on Solaris (see "UNIXProcess.java.solaris"). This means + * that every potentially blocking operation on the file descriptor + * increments a counter before it is executed and decrements it once it + * finishes. The 'close()' operation will only be executed if there are + * no pending operations. Otherwise it is deferred after the last pending + * operation has finished. + * + */ + static class ProcessPipeInputStream extends BufferedInputStream { + private final Object closeLock = new Object(); + private int useCount = 0; + private boolean closePending = false; + + ProcessPipeInputStream(int fd) { + super(new FileInputStream(newFileDescriptor(fd))); + } + + private InputStream drainInputStream(InputStream in) + throws IOException { + int n = 0; + int j; + byte[] a = null; + synchronized (closeLock) { + if (buf == null) // asynchronous close()? + return null; // discard + j = in.available(); + } + while (j > 0) { + a = (a == null) ? new byte[j] : Arrays.copyOf(a, n + j); + synchronized (closeLock) { + if (buf == null) // asynchronous close()? + return null; // discard + n += in.read(a, n, j); + j = in.available(); + } + } + return (a == null) ? + ProcessBuilder.NullInputStream.INSTANCE : + new ByteArrayInputStream(n == a.length ? a : Arrays.copyOf(a, n)); + } + + /** Called by the process reaper thread when the process exits. */ + synchronized void processExited() { + try { + InputStream in = this.in; + if (in != null) { + InputStream stragglers = drainInputStream(in); + in.close(); + this.in = stragglers; + } + } catch (IOException ignored) { } + } + + private void raise() { + synchronized (closeLock) { + useCount++; + } + } + + private void lower() throws IOException { + synchronized (closeLock) { + useCount--; + if (useCount == 0 && closePending) { + closePending = false; + super.close(); + } + } + } + + @Override + public int read() throws IOException { + raise(); + try { + return super.read(); + } finally { + lower(); + } + } + + @Override + public int read(byte[] b) throws IOException { + raise(); + try { + return super.read(b); + } finally { + lower(); + } + } + + @Override + public int read(byte[] b, int off, int len) throws IOException { + raise(); + try { + return super.read(b, off, len); + } finally { + lower(); + } + } + + @Override + public long skip(long n) throws IOException { + raise(); + try { + return super.skip(n); + } finally { + lower(); + } + } + + @Override + public int available() throws IOException { + raise(); + try { + return super.available(); + } finally { + lower(); + } + } + + @Override + public void close() throws IOException { + // BufferedInputStream#close() is not synchronized unlike most other methods. + // Synchronizing helps avoid racing with drainInputStream(). + synchronized (closeLock) { + if (useCount == 0) { + super.close(); + } + else { + closePending = true; + } + } + } + } + + /** + * A buffered output stream for a subprocess pipe file descriptor + * that allows the underlying file descriptor to be reclaimed when + * the process exits, via the processExited hook. + */ + static class ProcessPipeOutputStream extends BufferedOutputStream { + ProcessPipeOutputStream(int fd) { + super(new FileOutputStream(newFileDescriptor(fd))); + } + + /** Called by the process reaper thread when the process exits. */ + synchronized void processExited() { + OutputStream out = this.out; + if (out != null) { + try { + out.close(); + } catch (IOException ignored) { + // We know of no reason to get an IOException, but if + // we do, there's nothing else to do but carry on. + } + this.out = ProcessBuilder.NullOutputStream.INSTANCE; + } + } + } +} diff --git a/jdk/src/solaris/classes/java/lang/UNIXProcess.java.bsd b/jdk/src/solaris/classes/java/lang/UNIXProcess.java.bsd index df22bd2f3b9..7f0c3b12bf0 100644 --- a/jdk/src/solaris/classes/java/lang/UNIXProcess.java.bsd +++ b/jdk/src/solaris/classes/java/lang/UNIXProcess.java.bsd @@ -342,47 +342,39 @@ final class UNIXProcess extends Process { ProcessPipeInputStream(int fd) { super(new FileInputStream(newFileDescriptor(fd))); } - - private InputStream drainInputStream(InputStream in) + private static byte[] drainInputStream(InputStream in) throws IOException { int n = 0; int j; byte[] a = null; - synchronized (closeLock) { - if (buf == null) // asynchronous close()? - return null; // discard - j = in.available(); - } - while (j > 0) { + while ((j = in.available()) > 0) { a = (a == null) ? new byte[j] : Arrays.copyOf(a, n + j); - synchronized (closeLock) { - if (buf == null) // asynchronous close()? - return null; // discard - n += in.read(a, n, j); - j = in.available(); - } + n += in.read(a, n, j); } - return (a == null) ? - ProcessBuilder.NullInputStream.INSTANCE : - new ByteArrayInputStream(n == a.length ? a : Arrays.copyOf(a, n)); + return (a == null || n == a.length) ? a : Arrays.copyOf(a, n); } /** Called by the process reaper thread when the process exits. */ synchronized void processExited() { - try { - InputStream in = this.in; - if (in != null) { - InputStream stragglers = drainInputStream(in); - in.close(); - this.in = stragglers; - } - } catch (IOException ignored) { } + synchronized (closeLock) { + try { + InputStream in = this.in; + // this stream is closed if and only if: in == null + if (in != null) { + byte[] stragglers = drainInputStream(in); + in.close(); + this.in = (stragglers == null) ? + ProcessBuilder.NullInputStream.INSTANCE : + new ByteArrayInputStream(stragglers); + } + } catch (IOException ignored) {} + } } @Override public void close() throws IOException { // BufferedInputStream#close() is not synchronized unlike most other methods. - // Synchronizing helps avoid racing with drainInputStream(). + // Synchronizing helps avoid race with processExited(). synchronized (closeLock) { super.close(); } diff --git a/jdk/src/solaris/classes/java/lang/UNIXProcess.java.linux b/jdk/src/solaris/classes/java/lang/UNIXProcess.java.linux index 5ce8a61682a..be267d3ef0c 100644 --- a/jdk/src/solaris/classes/java/lang/UNIXProcess.java.linux +++ b/jdk/src/solaris/classes/java/lang/UNIXProcess.java.linux @@ -344,47 +344,39 @@ final class UNIXProcess extends Process { ProcessPipeInputStream(int fd) { super(new FileInputStream(newFileDescriptor(fd))); } - - private InputStream drainInputStream(InputStream in) + private static byte[] drainInputStream(InputStream in) throws IOException { int n = 0; int j; byte[] a = null; - synchronized (closeLock) { - if (buf == null) // asynchronous close()? - return null; // discard - j = in.available(); - } - while (j > 0) { + while ((j = in.available()) > 0) { a = (a == null) ? new byte[j] : Arrays.copyOf(a, n + j); - synchronized (closeLock) { - if (buf == null) // asynchronous close()? - return null; // discard - n += in.read(a, n, j); - j = in.available(); - } + n += in.read(a, n, j); } - return (a == null) ? - ProcessBuilder.NullInputStream.INSTANCE : - new ByteArrayInputStream(n == a.length ? a : Arrays.copyOf(a, n)); + return (a == null || n == a.length) ? a : Arrays.copyOf(a, n); } /** Called by the process reaper thread when the process exits. */ synchronized void processExited() { - try { - InputStream in = this.in; - if (in != null) { - InputStream stragglers = drainInputStream(in); - in.close(); - this.in = stragglers; - } - } catch (IOException ignored) { } + synchronized (closeLock) { + try { + InputStream in = this.in; + // this stream is closed if and only if: in == null + if (in != null) { + byte[] stragglers = drainInputStream(in); + in.close(); + this.in = (stragglers == null) ? + ProcessBuilder.NullInputStream.INSTANCE : + new ByteArrayInputStream(stragglers); + } + } catch (IOException ignored) {} + } } @Override public void close() throws IOException { // BufferedInputStream#close() is not synchronized unlike most other methods. - // Synchronizing helps avoid racing with drainInputStream(). + // Synchronizing helps avoid race with processExited(). synchronized (closeLock) { super.close(); } diff --git a/jdk/src/solaris/classes/sun/awt/UNIXToolkit.java b/jdk/src/solaris/classes/sun/awt/UNIXToolkit.java index 50a913c5438..2fad1b6b4a7 100644 --- a/jdk/src/solaris/classes/sun/awt/UNIXToolkit.java +++ b/jdk/src/solaris/classes/sun/awt/UNIXToolkit.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -49,7 +49,7 @@ public abstract class UNIXToolkit extends SunToolkit private BufferedImage tmpImage = null; public static int getDatatransferTimeout() { - Integer dt = (Integer)AccessController.doPrivileged( + Integer dt = AccessController.doPrivileged( new GetIntegerAction("sun.awt.datatransfer.timeout")); if (dt == null || dt <= 0) { return DEFAULT_DATATRANSFER_TIMEOUT; diff --git a/jdk/src/solaris/classes/sun/awt/X11/InfoWindow.java b/jdk/src/solaris/classes/sun/awt/X11/InfoWindow.java index 20c6174c2ee..48a5b946c81 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/InfoWindow.java +++ b/jdk/src/solaris/classes/sun/awt/X11/InfoWindow.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2014, 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 @@ -451,7 +451,7 @@ public abstract class InfoWindow extends Window { while (true) { Message msg = null; try { - msg = (Message)messageQueue.take(); + msg = messageQueue.take(); } catch (InterruptedException e) { return; } diff --git a/jdk/src/solaris/classes/sun/awt/X11/MotifDnDConstants.java b/jdk/src/solaris/classes/sun/awt/X11/MotifDnDConstants.java index f35ba1c7e43..26e2cdbbba3 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/MotifDnDConstants.java +++ b/jdk/src/solaris/classes/sun/awt/X11/MotifDnDConstants.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -163,7 +163,7 @@ class MotifDnDConstants { XlibWrapper.XGrabServer(newDisplay); try { - XlibWrapper.XSetCloseDownMode(newDisplay, (int)XConstants.RetainPermanent); + XlibWrapper.XSetCloseDownMode(newDisplay, XConstants.RetainPermanent); XSetWindowAttributes xwa = new XSetWindowAttributes(); @@ -435,7 +435,7 @@ class MotifDnDConstants { if (formats.length > 0) { // Make a defensive copy. - formats = (long[])formats.clone(); + formats = formats.clone(); Arrays.sort(formats); } diff --git a/jdk/src/solaris/classes/sun/awt/X11/MotifDnDDragSourceProtocol.java b/jdk/src/solaris/classes/sun/awt/X11/MotifDnDDragSourceProtocol.java index 85cd5448fd5..35109ebac70 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/MotifDnDDragSourceProtocol.java +++ b/jdk/src/solaris/classes/sun/awt/X11/MotifDnDDragSourceProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -201,7 +201,7 @@ class MotifDnDDragSourceProtocol extends XDragSourceProtocol * CARD32 heap_offset B32; * } xmDragReceiverInfoStruct; */ - if (status == (int)XConstants.Success && wpg.getData() != 0 && + if (status == XConstants.Success && wpg.getData() != 0 && wpg.getActualType() != 0 && wpg.getActualFormat() == 8 && wpg.getNumberOfItems() >= MotifDnDConstants.MOTIF_RECEIVER_INFO_SIZE) { diff --git a/jdk/src/solaris/classes/sun/awt/X11/MotifDnDDropTargetProtocol.java b/jdk/src/solaris/classes/sun/awt/X11/MotifDnDDropTargetProtocol.java index 652b9e9e3af..735bf144df2 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/MotifDnDDropTargetProtocol.java +++ b/jdk/src/solaris/classes/sun/awt/X11/MotifDnDDropTargetProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -118,7 +118,7 @@ class MotifDnDDropTargetProtocol extends XDropTargetProtocol { * CARD32 heap_offset B32; * } xmDragReceiverInfoStruct; */ - if (status == (int)XConstants.Success && wpg.getData() != 0 && + if (status == XConstants.Success && wpg.getData() != 0 && wpg.getActualType() != 0 && wpg.getActualFormat() == 8 && wpg.getNumberOfItems() >= MotifDnDConstants.MOTIF_RECEIVER_INFO_SIZE) { @@ -220,7 +220,7 @@ class MotifDnDDropTargetProtocol extends XDropTargetProtocol { * CARD32 heap_offset B32; * } xmDragReceiverInfoStruct; */ - if (status == (int)XConstants.Success && wpg.getData() != 0 && + if (status == XConstants.Success && wpg.getData() != 0 && wpg.getActualType() != 0 && wpg.getActualFormat() == 8 && wpg.getNumberOfItems() >= MotifDnDConstants.MOTIF_RECEIVER_INFO_SIZE) { @@ -292,7 +292,7 @@ class MotifDnDDropTargetProtocol extends XDropTargetProtocol { * CARD32 heap_offset B32; * } xmDragReceiverInfoStruct; */ - if (status == (int)XConstants.Success && wpg.getData() != 0 && + if (status == XConstants.Success && wpg.getData() != 0 && wpg.getActualType() != 0 && wpg.getActualFormat() == 8 && wpg.getNumberOfItems() >= MotifDnDConstants.MOTIF_RECEIVER_INFO_SIZE) { @@ -327,7 +327,7 @@ class MotifDnDDropTargetProtocol extends XDropTargetProtocol { try { int status = wpg.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance()); - if (status == (int)XConstants.Success && wpg.getData() != 0 && + if (status == XConstants.Success && wpg.getData() != 0 && wpg.getActualType() != 0 && wpg.getActualFormat() == 8 && wpg.getNumberOfItems() >= MotifDnDConstants.MOTIF_RECEIVER_INFO_SIZE) { diff --git a/jdk/src/solaris/classes/sun/awt/X11/XAWTFormatter.java b/jdk/src/solaris/classes/sun/awt/X11/XAWTFormatter.java index 20117bc47ad..a2145dcc3c2 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XAWTFormatter.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XAWTFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -43,7 +43,7 @@ public class XAWTFormatter extends java.util.logging.Formatter { // Line separator string. This is the value of the line.separator // property at the moment that the SimpleFormatter was created. - private String lineSeparator = (String) java.security.AccessController.doPrivileged( + private String lineSeparator = java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction("line.separator")); boolean displayFullRecord = false; diff --git a/jdk/src/solaris/classes/sun/awt/X11/XAtom.java b/jdk/src/solaris/classes/sun/awt/X11/XAtom.java index 56ebd11b5dd..2d37879e057 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XAtom.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XAtom.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -681,7 +681,7 @@ public final class XAtom { return emptyList; } - int count = (int)getter.getNumberOfItems(); + int count = getter.getNumberOfItems(); if (count == 0) { return emptyList; } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XBaseMenuWindow.java b/jdk/src/solaris/classes/sun/awt/X11/XBaseMenuWindow.java index 2ccfcd083a5..1d82f04a78c 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XBaseMenuWindow.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XBaseMenuWindow.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, 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 @@ -292,7 +292,7 @@ abstract public class XBaseMenuWindow extends XWindow { */ XMenuItemPeer[] copyItems() { synchronized(getMenuTreeLock()) { - return (XMenuItemPeer[])items.toArray(new XMenuItemPeer[] {}); + return items.toArray(new XMenuItemPeer[] {}); } } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XBaseWindow.java b/jdk/src/solaris/classes/sun/awt/X11/XBaseWindow.java index 28db82f8a99..1d8804ec9c6 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XBaseWindow.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XBaseWindow.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -285,7 +285,7 @@ public class XBaseWindow { params.putIfNull(BOUNDS, new Rectangle(DEF_LOCATION, DEF_LOCATION, MIN_SIZE, MIN_SIZE)); params.putIfNull(DEPTH, Integer.valueOf((int)XConstants.CopyFromParent)); params.putIfNull(VISUAL, Long.valueOf(XConstants.CopyFromParent)); - params.putIfNull(VISUAL_CLASS, Integer.valueOf((int)XConstants.InputOnly)); + params.putIfNull(VISUAL_CLASS, Integer.valueOf(XConstants.InputOnly)); params.putIfNull(VALUE_MASK, Long.valueOf(XConstants.CWEventMask)); Rectangle bounds = (Rectangle)params.get(BOUNDS); bounds.width = Math.max(MIN_SIZE, bounds.width); @@ -544,7 +544,7 @@ public class XBaseWindow { } flags |= XUtilConstants.PWinGravity; hints.set_flags(flags); - hints.set_win_gravity((int)XConstants.NorthWestGravity); + hints.set_win_gravity(XConstants.NorthWestGravity); if (insLog.isLoggable(PlatformLogger.Level.FINER)) { insLog.finer("Setting hints, resulted flags " + XlibWrapper.hintsToString(flags) + ", values " + hints); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XComponentPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XComponentPeer.java index c3cb2649c17..6bdff13fdc9 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XComponentPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XComponentPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -184,7 +184,7 @@ public class XComponentPeer extends XWindow implements ComponentPeer, DropTarget XWindowPeer wpeer = (XWindowPeer)(container.getPeer()); if (wpeer != null) { return (wpeer.winAttr.visibilityState != - wpeer.winAttr.AWT_UNOBSCURED); + XWindowAttributesData.AWT_UNOBSCURED); } } return true; @@ -335,7 +335,7 @@ public class XComponentPeer extends XWindow implements ComponentPeer, DropTarget return rejectFocusRequestHelper("Waiting for asynchronous processing of the request"); } return XKeyboardFocusManagerPeer.deliverFocus(lightweightChild, - (Component)target, + target, temporary, focusedWindowChangeAllowed, time, cause); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XContentWindow.java b/jdk/src/solaris/classes/sun/awt/X11/XContentWindow.java index fcdd6d09f6c..85e578b4052 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XContentWindow.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XContentWindow.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -137,7 +137,7 @@ public final class XContentWindow extends XWindow { // NOTE: This method may be called by privileged threads. // DO NOT INVOKE CLIENT CODE ON THIS THREAD! public void handleResize(Rectangle bounds) { - AWTAccessor.getComponentAccessor().setSize((Component)target, bounds.width, bounds.height); + AWTAccessor.getComponentAccessor().setSize(target, bounds.width, bounds.height); postEvent(new ComponentEvent(target, ComponentEvent.COMPONENT_RESIZED)); } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java index fa5c884020a..f37cfbc22e9 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -318,7 +318,7 @@ abstract class XDecoratedPeer extends XWindowPeer { insets_corrected = true; return; } - Component t = (Component)target; + Component t = target; if (getDecorations() == XWindowAttributesData.AWT_DECOR_NONE) { setReparented(true); insets_corrected = true; @@ -428,7 +428,7 @@ abstract class XDecoratedPeer extends XWindowPeer { public void handleMoved(WindowDimensions dims) { Point loc = dims.getLocation(); - AWTAccessor.getComponentAccessor().setLocation((Component)target, loc.x, loc.y); + AWTAccessor.getComponentAccessor().setLocation(target, loc.x, loc.y); postEvent(new ComponentEvent(target, ComponentEvent.COMPONENT_MOVED)); } @@ -536,8 +536,8 @@ abstract class XDecoratedPeer extends XWindowPeer { // its location changes. Point oldLocation = getLocation(); - Point newLocation = new Point(AWTAccessor.getComponentAccessor().getX((Component)target), - AWTAccessor.getComponentAccessor().getY((Component)target)); + Point newLocation = new Point(AWTAccessor.getComponentAccessor().getX(target), + AWTAccessor.getComponentAccessor().getY(target)); if (!newLocation.equals(oldLocation)) { handleMoved(newDimensions); @@ -738,7 +738,7 @@ abstract class XDecoratedPeer extends XWindowPeer { updateChildrenSizes(); // Bounds of the window - Rectangle targetBounds = AWTAccessor.getComponentAccessor().getBounds((Component)target); + Rectangle targetBounds = AWTAccessor.getComponentAccessor().getBounds(target); Point newLocation = getNewLocation(xe, currentInsets.left, currentInsets.top); @@ -1052,10 +1052,10 @@ abstract class XDecoratedPeer extends XWindowPeer { final void dumpTarget() { AWTAccessor.ComponentAccessor compAccessor = AWTAccessor.getComponentAccessor(); - int getWidth = compAccessor.getWidth((Component)target); - int getHeight = compAccessor.getHeight((Component)target); - int getTargetX = compAccessor.getX((Component)target); - int getTargetY = compAccessor.getY((Component)target); + int getWidth = compAccessor.getWidth(target); + int getHeight = compAccessor.getHeight(target); + int getTargetX = compAccessor.getX(target); + int getTargetY = compAccessor.getY(target); System.err.println(">>> Target: " + getTargetX + ", " + getTargetY + ", " + getWidth + ", " + getHeight); } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XDialogPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XDialogPeer.java index fc0a0b7d44f..c2e451785f7 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XDialogPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XDialogPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,9 +47,9 @@ class XDialogPeer extends XDecoratedPeer implements DialogPeer { undecorated = Boolean.valueOf(target.isUndecorated()); winAttr.nativeDecor = !target.isUndecorated(); if (winAttr.nativeDecor) { - winAttr.decorations = winAttr.AWT_DECOR_ALL; + winAttr.decorations = XWindowAttributesData.AWT_DECOR_ALL; } else { - winAttr.decorations = winAttr.AWT_DECOR_NONE; + winAttr.decorations = XWindowAttributesData.AWT_DECOR_NONE; } winAttr.functions = MWMConstants.MWM_FUNC_ALL; winAttr.isResizable = true; //target.isResizable(); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XDnDDragSourceProtocol.java b/jdk/src/solaris/classes/sun/awt/X11/XDnDDragSourceProtocol.java index 8a22f65eba1..b1e6f2ad041 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XDnDDragSourceProtocol.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XDnDDragSourceProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -283,7 +283,7 @@ class XDnDDragSourceProtocol extends XDragSourceProtocol { XClientMessageEvent msg = new XClientMessageEvent(); try { - msg.set_type((int)XConstants.ClientMessage); + msg.set_type(XConstants.ClientMessage); msg.set_window(getTargetWindow()); msg.set_format(32); msg.set_message_type(XDnDConstants.XA_XdndEnter.getAtom()); @@ -311,7 +311,7 @@ class XDnDDragSourceProtocol extends XDragSourceProtocol { XClientMessageEvent msg = new XClientMessageEvent(); try { - msg.set_type((int)XConstants.ClientMessage); + msg.set_type(XConstants.ClientMessage); msg.set_window(getTargetWindow()); msg.set_format(32); msg.set_message_type(XDnDConstants.XA_XdndPosition.getAtom()); @@ -335,7 +335,7 @@ class XDnDDragSourceProtocol extends XDragSourceProtocol { XClientMessageEvent msg = new XClientMessageEvent(); try { - msg.set_type((int)XConstants.ClientMessage); + msg.set_type(XConstants.ClientMessage); msg.set_window(getTargetWindow()); msg.set_format(32); msg.set_message_type(XDnDConstants.XA_XdndLeave.getAtom()); @@ -361,7 +361,7 @@ class XDnDDragSourceProtocol extends XDragSourceProtocol { XClientMessageEvent msg = new XClientMessageEvent(); try { - msg.set_type((int)XConstants.ClientMessage); + msg.set_type(XConstants.ClientMessage); msg.set_window(getTargetWindow()); msg.set_format(32); msg.set_message_type(XDnDConstants.XA_XdndDrop.getAtom()); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XDnDDropTargetProtocol.java b/jdk/src/solaris/classes/sun/awt/X11/XDnDDropTargetProtocol.java index f0a6622c4bd..074f37dd753 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XDnDDropTargetProtocol.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XDnDDropTargetProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -742,7 +742,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { long data3, long data4) { XClientMessageEvent enter = new XClientMessageEvent(); try { - enter.set_type((int)XConstants.ClientMessage); + enter.set_type(XConstants.ClientMessage); enter.set_window(toplevel); enter.set_format(32); enter.set_message_type(XDnDConstants.XA_XdndEnter.getAtom()); @@ -768,7 +768,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { long sourceWindow) { XClientMessageEvent leave = new XClientMessageEvent(); try { - leave.set_type((int)XConstants.ClientMessage); + leave.set_type(XConstants.ClientMessage); leave.set_window(toplevel); leave.set_format(32); leave.set_message_type(XDnDConstants.XA_XdndLeave.getAtom()); @@ -798,7 +798,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { XClientMessageEvent msg = new XClientMessageEvent(); try { - msg.set_type((int)XConstants.ClientMessage); + msg.set_type(XConstants.ClientMessage); msg.set_window(xclient.get_data(0)); msg.set_format(32); msg.set_message_type(XDnDConstants.XA_XdndStatus.getAtom()); @@ -886,7 +886,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { XClientMessageEvent msg = new XClientMessageEvent(); try { - msg.set_type((int)XConstants.ClientMessage); + msg.set_type(XConstants.ClientMessage); msg.set_window(xclient.get_data(0)); msg.set_format(32); msg.set_message_type(XDnDConstants.XA_XdndFinished.getAtom()); @@ -1005,6 +1005,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { } } + @SuppressWarnings("static") private void notifyProtocolListener(XWindow xwindow, int x, int y, int dropAction, XClientMessageEvent xclient, @@ -1147,7 +1148,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { event while it still can be referenced from other Java events. */ { XClientMessageEvent copy = new XClientMessageEvent(); - unsafe.copyMemory(xclient.pData, copy.pData, copy.getSize()); + unsafe.copyMemory(xclient.pData, copy.pData, XClientMessageEvent.getSize()); copy.set_data(0, xclient.get_window()); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XDragSourceContextPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XDragSourceContextPeer.java index e762ae0118e..f376b395823 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XDragSourceContextPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XDragSourceContextPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -538,7 +538,7 @@ public final class XDragSourceContextPeer return false; } - if (ev.get_type() != (int)XConstants.ClientMessage) { + if (ev.get_type() != XConstants.ClientMessage) { return false; } @@ -612,7 +612,7 @@ public final class XDragSourceContextPeer xkey.get_keycode(), 0); switch ((int)keysym) { case (int)XKeySymConstants.XK_Escape: { - if (ev.get_type() == (int)XConstants.KeyRelease) { + if (ev.get_type() == XConstants.KeyRelease) { cleanup(xkey.get_time()); } break; diff --git a/jdk/src/solaris/classes/sun/awt/X11/XDropTargetEventProcessor.java b/jdk/src/solaris/classes/sun/awt/X11/XDropTargetEventProcessor.java index 65d0b11c6c4..26a4941788d 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XDropTargetEventProcessor.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XDropTargetEventProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -43,7 +43,7 @@ final class XDropTargetEventProcessor { private XDropTargetEventProcessor() {} private boolean doProcessEvent(XEvent ev) { - if (ev.get_type() == (int)XConstants.DestroyNotify && + if (ev.get_type() == XConstants.DestroyNotify && protocol != null && ev.get_xany().get_window() == protocol.getSourceWindow()) { protocol.cleanup(); @@ -51,7 +51,7 @@ final class XDropTargetEventProcessor { return false; } - if (ev.get_type() == (int)XConstants.PropertyNotify) { + if (ev.get_type() == XConstants.PropertyNotify) { XPropertyEvent xproperty = ev.get_xproperty(); if (xproperty.get_atom() == MotifDnDConstants.XA_MOTIF_DRAG_RECEIVER_INFO.getAtom()) { @@ -60,7 +60,7 @@ final class XDropTargetEventProcessor { } } - if (ev.get_type() != (int)XConstants.ClientMessage) { + if (ev.get_type() != XConstants.ClientMessage) { return false; } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XDropTargetRegistry.java b/jdk/src/solaris/classes/sun/awt/X11/XDropTargetRegistry.java index e983eccc807..b8a8441379e 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XDropTargetRegistry.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XDropTargetRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -328,8 +328,7 @@ final class XDropTargetRegistry { Long lToplevel = Long.valueOf(embedder); boolean isXEmbedServer = false; synchronized (this) { - EmbeddedDropSiteEntry entry = - (EmbeddedDropSiteEntry)embeddedDropSiteRegistry.get(lToplevel); + EmbeddedDropSiteEntry entry = embeddedDropSiteRegistry.get(lToplevel); if (entry == null) { return; } @@ -430,8 +429,7 @@ final class XDropTargetRegistry { Long lToplevel = Long.valueOf(toplevel); EmbeddedDropSiteEntry entry = null; synchronized (this) { - entry = - (EmbeddedDropSiteEntry)embeddedDropSiteRegistry.get(lToplevel); + entry = embeddedDropSiteRegistry.get(lToplevel); if (entry == null) { if (peer != null) { // Toplevel is an XEmbed server within this VM. @@ -495,8 +493,7 @@ final class XDropTargetRegistry { Long lToplevel = Long.valueOf(toplevel); EmbeddedDropSiteEntry entry = null; synchronized (this) { - entry = - (EmbeddedDropSiteEntry)embeddedDropSiteRegistry.get(lToplevel); + entry = embeddedDropSiteRegistry.get(lToplevel); if (entry == null) { return; } @@ -526,8 +523,7 @@ final class XDropTargetRegistry { */ public long getEmbeddedDropSite(long embedder, int x, int y) { Long lToplevel = Long.valueOf(embedder); - EmbeddedDropSiteEntry entry = - (EmbeddedDropSiteEntry)embeddedDropSiteRegistry.get(lToplevel); + EmbeddedDropSiteEntry entry = embeddedDropSiteRegistry.get(lToplevel); if (entry == null) { return 0; } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XEmbedCanvasPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XEmbedCanvasPeer.java index 167c3fe3209..cdce154834e 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XEmbedCanvasPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XEmbedCanvasPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -654,9 +654,9 @@ public class XEmbedCanvasPeer extends XCanvasPeer implements WindowFocusListener if (xembedLog.isLoggable(PlatformLogger.Level.FINER)) { xembedLog.finer("Client message to embedder: " + msg); } - if (msg.get_message_type() == xembed.XEmbed.getAtom()) { + if (msg.get_message_type() == XEmbedHelper.XEmbed.getAtom()) { if (xembedLog.isLoggable(PlatformLogger.Level.FINE)) { - xembedLog.fine(xembed.XEmbedMessageToString(msg)); + xembedLog.fine(XEmbedHelper.XEmbedMessageToString(msg)); } } if (isXEmbedActive()) { diff --git a/jdk/src/solaris/classes/sun/awt/X11/XEmbedHelper.java b/jdk/src/solaris/classes/sun/awt/X11/XEmbedHelper.java index 49c7a5dcf04..947a3cb543c 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XEmbedHelper.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XEmbedHelper.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -99,7 +99,7 @@ public class XEmbedHelper { } void sendMessage(long window, int message, long detail, long data1, long data2) { XClientMessageEvent msg = new XClientMessageEvent(); - msg.set_type((int)XConstants.ClientMessage); + msg.set_type(XConstants.ClientMessage); msg.set_window(window); msg.set_message_type(XEmbed.getAtom()); msg.set_format(32); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XEmbedServerTester.java b/jdk/src/solaris/classes/sun/awt/X11/XEmbedServerTester.java index e21d1d255f4..9b37a429125 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XEmbedServerTester.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XEmbedServerTester.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -647,7 +647,7 @@ public class XEmbedServerTester implements XEventDispatcher { public void dispatchEvent(XEvent ev) { if (ev.get_type() == ClientMessage) { XClientMessageEvent msg = ev.get_xclient(); - if (msg.get_message_type() == xembed.XEmbed.getAtom()) { + if (msg.get_message_type() == XEmbedHelper.XEmbed.getAtom()) { if (xembedLog.isLoggable(PlatformLogger.Level.FINE)) { xembedLog.fine("Embedded message: " + XEmbedHelper.msgidToString((int)msg.get_data(1))); } @@ -689,7 +689,7 @@ public class XEmbedServerTester implements XEventDispatcher { } } else { synchronized(EVENT_LOCK) { - int eventID = (int)ev.get_type() | SYSTEM_EVENT_MASK; + int eventID = ev.get_type() | SYSTEM_EVENT_MASK; events.add(eventID); if (xembedLog.isLoggable(PlatformLogger.Level.FINER)) { diff --git a/jdk/src/solaris/classes/sun/awt/X11/XFileDialogPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XFileDialogPeer.java index b1c2b0ed845..5da53e88634 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XFileDialogPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XFileDialogPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -775,7 +775,7 @@ class XFileDialogPeer extends XDialogPeer implements FileDialogPeer, ActionListe // 03/02/2005 b5097243 Pressing 'ESC' on a file dlg does not dispose the dlg on Xtoolkit public void setVisible(boolean b){ if (fileDialog == null) { - init((FileDialog)target); + init(target); } if (savedDir != null || userDir != null) { diff --git a/jdk/src/solaris/classes/sun/awt/X11/XFramePeer.java b/jdk/src/solaris/classes/sun/awt/X11/XFramePeer.java index 050e0f20171..ac93ae6501e 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XFramePeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XFramePeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -67,9 +67,9 @@ class XFramePeer extends XDecoratedPeer implements FramePeer { undecorated = Boolean.valueOf(target.isUndecorated()); winAttr.nativeDecor = !target.isUndecorated(); if (winAttr.nativeDecor) { - winAttr.decorations = winAttr.AWT_DECOR_ALL; + winAttr.decorations = XWindowAttributesData.AWT_DECOR_ALL; } else { - winAttr.decorations = winAttr.AWT_DECOR_NONE; + winAttr.decorations = XWindowAttributesData.AWT_DECOR_NONE; } winAttr.functions = MWMConstants.MWM_FUNC_ALL; winAttr.isResizable = true; // target.isResizable(); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XGlobalCursorManager.java b/jdk/src/solaris/classes/sun/awt/X11/XGlobalCursorManager.java index c309d310e0a..bcef8c85315 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XGlobalCursorManager.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XGlobalCursorManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -133,8 +133,8 @@ public final class XGlobalCursorManager extends GlobalCursorManager { XlibWrapper.larg6, XlibWrapper.larg7); - p.x = (int) XlibWrapper.unsafe.getInt(XlibWrapper.larg3); - p.y = (int) XlibWrapper.unsafe.getInt(XlibWrapper.larg4); + p.x = XlibWrapper.unsafe.getInt(XlibWrapper.larg3); + p.y = XlibWrapper.unsafe.getInt(XlibWrapper.larg4); } finally { XToolkit.awtUnlock(); } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XIconWindow.java b/jdk/src/solaris/classes/sun/awt/X11/XIconWindow.java index 7c6684bfddc..07899ef8de4 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XIconWindow.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XIconWindow.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -301,8 +301,8 @@ public class XIconWindow extends XBaseWindow { } long dst = XlibWrapper.XCreateImage(XToolkit.getDisplay(), visInfo.get_visual(), - (int)awtImage.get_Depth(), - (int)XConstants.ZPixmap, + awtImage.get_Depth(), + XConstants.ZPixmap, 0, bytes, iconWidth, @@ -483,7 +483,7 @@ public class XIconWindow extends XBaseWindow { params.add(BACKGROUND_PIXMAP, iconPixmap); params.add(COLORMAP, adata.get_awt_cmap()); params.add(DEPTH, awtImage.get_Depth()); - params.add(VISUAL_CLASS, (int)XConstants.InputOutput); + params.add(VISUAL_CLASS, XConstants.InputOutput); params.add(VISUAL, visInfo.get_visual()); params.add(VALUE_MASK, XConstants.CWBorderPixel | XConstants.CWColormap | XConstants.CWBackPixmap); params.add(PARENT_WINDOW, XlibWrapper.RootWindow(XToolkit.getDisplay(), visInfo.get_screen())); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XInputMethod.java b/jdk/src/solaris/classes/sun/awt/X11/XInputMethod.java index 6392f2cbf8a..67e729b440c 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XInputMethod.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XInputMethod.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -138,7 +138,7 @@ public class XInputMethod extends X11InputMethod { } long getCurrentParentWindow() { - return (long)((XWindow)clientComponentWindow.getPeer()).getContentWindow(); + return ((XWindow)clientComponentWindow.getPeer()).getContentWindow(); } /* diff --git a/jdk/src/solaris/classes/sun/awt/X11/XMenuBarPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XMenuBarPeer.java index 7cf0cd73123..c1b568bc0fb 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XMenuBarPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XMenuBarPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -525,7 +525,7 @@ public class XMenuBarPeer extends XBaseMenuWindow implements MenuBarPeer { if (isEventDisabled(xev)) { return; } - final Component currentSource = (Component)getEventSource(); + final Component currentSource = getEventSource(); //This is the only difference from XWindow.handleKeyPress //Ancestor's function can invoke handleF10KeyPress here handleKeyPress(xkey); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XMenuWindow.java b/jdk/src/solaris/classes/sun/awt/X11/XMenuWindow.java index a524f0d6e38..9863c983873 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XMenuWindow.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XMenuWindow.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -250,7 +250,7 @@ public class XMenuWindow extends XBaseMenuWindow { } //Item rectangles for (int i = 0; i < itemCnt; i++) { - XMenuItemPeer item = (XMenuItemPeer)itemVector[i]; + XMenuItemPeer item = itemVector[i]; XMenuItemPeer.TextMetrics metrics = itemMetrics[i]; Dimension dim = metrics.getTextDimension(); if (dim != null) { diff --git a/jdk/src/solaris/classes/sun/awt/X11/XNETProtocol.java b/jdk/src/solaris/classes/sun/awt/X11/XNETProtocol.java index dfd372edabf..722261113d1 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XNETProtocol.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XNETProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -108,7 +108,7 @@ final class XNETProtocol extends XProtocol implements XStateProtocol, XLayerProt if (log.isLoggable(PlatformLogger.Level.FINE)) { log.fine("Requesting state on " + window + " for " + state); } - req.set_type((int)XConstants.ClientMessage); + req.set_type(XConstants.ClientMessage); req.set_window(window.getWindow()); req.set_message_type(XA_NET_WM_STATE.getAtom()); req.set_format(32); @@ -181,7 +181,7 @@ final class XNETProtocol extends XProtocol implements XStateProtocol, XLayerProt public void requestState(XWindow window, XAtom state, boolean isAdd) { XClientMessageEvent req = new XClientMessageEvent(); try { - req.set_type((int)XConstants.ClientMessage); + req.set_type(XConstants.ClientMessage); req.set_window(window.getWindow()); req.set_message_type(XA_NET_WM_STATE.getAtom()); req.set_format(32); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XPopupMenuPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XPopupMenuPeer.java index cbb71925b50..81c60dd55b2 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XPopupMenuPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XPopupMenuPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -349,7 +349,7 @@ public class XPopupMenuPeer extends XMenuWindow implements PopupMenuPeer { if (isEventDisabled(xev)) { return; } - final Component currentSource = (Component)getEventSource(); + final Component currentSource = getEventSource(); handleKeyPress(xkey); } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XTextAreaPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XTextAreaPeer.java index 7c7b2d1936a..f4bf1ec2062 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XTextAreaPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XTextAreaPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -342,7 +342,7 @@ final class XTextAreaPeer extends XComponentPeer implements TextAreaPeer { @Override void handleJavaInputMethodEvent(InputMethodEvent e) { if (jtext != null) - jtext.processInputMethodEventPublic((InputMethodEvent)e); + jtext.processInputMethodEventPublic(e); } /** diff --git a/jdk/src/solaris/classes/sun/awt/X11/XToolkit.java b/jdk/src/solaris/classes/sun/awt/X11/XToolkit.java index 475ea7848b3..ba9ef8c77ab 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XToolkit.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XToolkit.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -655,8 +655,8 @@ public final class XToolkit extends UNIXToolkit implements Runnable { XWindowAttributes pattr = new XWindowAttributes(); try { XlibWrapper.XGetWindowAttributes(XToolkit.getDisplay(), XToolkit.getDefaultRootWindow(), pattr.pData); - screenWidth = (int) pattr.get_width(); - screenHeight = (int) pattr.get_height(); + screenWidth = pattr.get_width(); + screenHeight = pattr.get_height(); } finally { pattr.dispose(); } @@ -1542,7 +1542,7 @@ public final class XToolkit extends UNIXToolkit implements Runnable { */ if (desktopProperties.get(SunToolkit.DESKTOPFONTHINTS) == null) { if (XWM.isKDE2()) { - Object hint = fcManager.getFontConfigAAHint(); + Object hint = FontConfigManager.getFontConfigAAHint(); if (hint != null) { /* set the fontconfig/KDE property so that * getDesktopHints() below will see it @@ -2074,7 +2074,7 @@ public final class XToolkit extends UNIXToolkit implements Runnable { } private static void setBackingStoreType() { - String prop = (String)AccessController.doPrivileged( + String prop = AccessController.doPrivileged( new sun.security.action.GetPropertyAction("sun.awt.backingStore")); if (prop == null) { diff --git a/jdk/src/solaris/classes/sun/awt/X11/XWindow.java b/jdk/src/solaris/classes/sun/awt/X11/XWindow.java index 6791ce78ae3..8df6e569bb7 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XWindow.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XWindow.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -200,7 +200,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { getColorModel(); // fix 4948833: this call forces the color map to be initialized params.putIfNull(COLORMAP, gData.get_awt_cmap()); params.putIfNull(DEPTH, gData.get_awt_depth()); - params.putIfNull(VISUAL_CLASS, Integer.valueOf((int)XConstants.InputOutput)); + params.putIfNull(VISUAL_CLASS, Integer.valueOf(XConstants.InputOutput)); params.putIfNull(VISUAL, visInfo.get_visual()); params.putIfNull(VALUE_MASK, XConstants.CWBorderPixel | XConstants.CWEventMask | XConstants.CWColormap); Long parentWindow = (Long)params.get(PARENT_WINDOW); @@ -350,7 +350,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { Graphics getGraphics(SurfaceData surfData, Color afore, Color aback, Font afont) { if (surfData == null) return null; - Component target = (Component) this.target; + Component target = this.target; /* Fix for bug 4746122. Color and Font shouldn't be null */ Color bgColor = aback; @@ -548,7 +548,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { int w = xe.get_width(); int h = xe.get_height(); - Component target = (Component)getEventSource(); + Component target = getEventSource(); AWTAccessor.ComponentAccessor compAccessor = AWTAccessor.getComponentAccessor(); if (!compAccessor.getIgnoreRepaint(target) @@ -740,7 +740,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { modifiers = getModifiers(xbe.get_state(),button,0, type, wheel_mouse); if (!wheel_mouse) { - MouseEvent me = new MouseEvent((Component)getEventSource(), + MouseEvent me = new MouseEvent(getEventSource(), type == XConstants.ButtonPress ? MouseEvent.MOUSE_PRESSED : MouseEvent.MOUSE_RELEASED, jWhen,modifiers, x, y, xbe.get_x_root(), @@ -752,7 +752,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { if ((type == XConstants.ButtonRelease) && ((mouseButtonClickAllowed & XlibUtil.getButtonMask(lbutton)) != 0) ) // No up-button in the drag-state { - postEventToEventQueue(me = new MouseEvent((Component)getEventSource(), + postEventToEventQueue(me = new MouseEvent(getEventSource(), MouseEvent.MOUSE_CLICKED, jWhen, modifiers, @@ -766,7 +766,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { } else { if (xev.get_type() == XConstants.ButtonPress) { - MouseWheelEvent mwe = new MouseWheelEvent((Component)getEventSource(),MouseEvent.MOUSE_WHEEL, jWhen, + MouseWheelEvent mwe = new MouseWheelEvent(getEventSource(),MouseEvent.MOUSE_WHEEL, jWhen, modifiers, x, y, xbe.get_x_root(), @@ -837,7 +837,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { int modifiers = getModifiers(xme.get_state(), 0, 0); boolean popupTrigger = false; - Component source = (Component)getEventSource(); + Component source = getEventSource(); if (xme.get_window() != window) { Point localXY = toLocal(xme.get_x_root(), xme.get_y_root()); @@ -1111,7 +1111,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { unicodeKey = keysymToUnicode( keysym[0], ev.get_state() ); if (keyEventLog.isLoggable(PlatformLogger.Level.FINE)) { keyEventLog.fine("--XWindow.java XIM did NOT process event, hex keysym:"+Long.toHexString(keysym[0])+"\n"+ - " unicode key:"+Integer.toHexString((int)unicodeKey)); + " unicode key:"+Integer.toHexString(unicodeKey)); } } }else { @@ -1121,7 +1121,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { unicodeKey = keysymToUnicode( keysym[0], ev.get_state() ); if (keyEventLog.isLoggable(PlatformLogger.Level.FINE)) { keyEventLog.fine("--XWindow.java XIM is absent; hex keysym:"+Long.toHexString(keysym[0])+"\n"+ - " unicode key:"+Integer.toHexString((int)unicodeKey)); + " unicode key:"+Integer.toHexString(unicodeKey)); } } // Keysym should be converted to Unicode, if possible and necessary, @@ -1466,7 +1466,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { long jWhen = XToolkit.nowMillisUTC_offset(when); int modifiers = getModifiers(state, 0, keyCode); - KeyEvent ke = new KeyEvent((Component)getEventSource(), id, jWhen, + KeyEvent ke = new KeyEvent(getEventSource(), id, jWhen, modifiers, keyCode, (char)keyChar, keyLocation); if (event != 0) { byte[] data = Native.toBytes(event, eventSize); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java index 8dcd15bc975..521bbc145b3 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, 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 @@ -291,7 +291,7 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, public void updateIconImages() { Window target = (Window)this.target; - java.util.List iconImages = ((Window)target).getIconImages(); + java.util.List iconImages = target.getIconImages(); XWindowPeer ownerPeer = getOwnerPeer(); winAttr.icons = new ArrayList(); if (iconImages.size() != 0) { @@ -463,8 +463,8 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, public void updateMinimumSize() { //This function only saves minimumSize value in XWindowPeer //Setting WMSizeHints is implemented in XDecoratedPeer - targetMinimumSize = (((Component)target).isMinimumSizeSet()) ? - ((Component)target).getMinimumSize() : null; + targetMinimumSize = (target.isMinimumSizeSet()) ? + target.getMinimumSize() : null; } public Dimension getTargetMinimumSize() { @@ -719,10 +719,10 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, Runnable dc = new Runnable() { public void run() { AWTAccessor.getComponentAccessor(). - setGraphicsConfiguration((Component)target, gc); + setGraphicsConfiguration(target, gc); } }; - SunToolkit.executeOnEventHandlerThread((Component)target, dc); + SunToolkit.executeOnEventHandlerThread(target, dc); } /** @@ -750,7 +750,7 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, protected Point getNewLocation(XConfigureEvent xe, int leftInset, int topInset) { // Bounds of the window - Rectangle targetBounds = AWTAccessor.getComponentAccessor().getBounds((Component)target); + Rectangle targetBounds = AWTAccessor.getComponentAccessor().getBounds(target); int runningWM = XWM.getWMID(); Point newLocation = targetBounds.getLocation(); @@ -1108,7 +1108,7 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, XUnmapEvent unmap = new XUnmapEvent(); unmap.set_window(window); unmap.set_event(XToolkit.getDefaultRootWindow()); - unmap.set_type((int)XConstants.UnmapNotify); + unmap.set_type(XConstants.UnmapNotify); unmap.set_from_configure(false); XlibWrapper.XSendEvent(XToolkit.getDisplay(), XToolkit.getDefaultRootWindow(), false, XConstants.SubstructureNotifyMask | XConstants.SubstructureRedirectMask, diff --git a/jdk/src/solaris/classes/sun/awt/X11FontManager.java b/jdk/src/solaris/classes/sun/awt/X11FontManager.java index 573d250acba..c9d2ebc9ba4 100644 --- a/jdk/src/solaris/classes/sun/awt/X11FontManager.java +++ b/jdk/src/solaris/classes/sun/awt/X11FontManager.java @@ -715,7 +715,7 @@ public class X11FontManager extends SunFontManager { if (FontUtilities.isLinux) { fontConfigDirs.add(jreLibDirName+File.separator+"oblique-fonts"); } - fontdirs = (String[])fontConfigDirs.toArray(new String[0]); + fontdirs = fontConfigDirs.toArray(new String[0]); } // Implements SunGraphicsEnvironment.createFontConfiguration. diff --git a/jdk/src/solaris/classes/sun/awt/X11GraphicsEnvironment.java b/jdk/src/solaris/classes/sun/awt/X11GraphicsEnvironment.java index 60846b69c18..547af9c3bed 100644 --- a/jdk/src/solaris/classes/sun/awt/X11GraphicsEnvironment.java +++ b/jdk/src/solaris/classes/sun/awt/X11GraphicsEnvironment.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -232,7 +232,7 @@ public class X11GraphicsEnvironment return true; } - String isRemote = (String)java.security.AccessController.doPrivileged( + String isRemote = java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction("sun.java2d.remote")); if (isRemote != null) { return isRemote.equals("false"); diff --git a/jdk/src/solaris/classes/sun/font/FcFontConfiguration.java b/jdk/src/solaris/classes/sun/font/FcFontConfiguration.java index e33e08a867b..23cf93624a6 100644 --- a/jdk/src/solaris/classes/sun/font/FcFontConfiguration.java +++ b/jdk/src/solaris/classes/sun/font/FcFontConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2014, 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 @@ -441,7 +441,7 @@ public class FcFontConfiguration extends FontConfiguration { try { fcVersion = Integer.parseInt(fcVersionStr); if (fcVersion != 0 && - fcVersion != fcm.getFontConfigVersion()) { + fcVersion != FontConfigManager.getFontConfigVersion()) { return; } } catch (Exception e) { diff --git a/jdk/src/solaris/classes/sun/font/NativeFont.java b/jdk/src/solaris/classes/sun/font/NativeFont.java index 9fa469fce3c..bc39f743a91 100644 --- a/jdk/src/solaris/classes/sun/font/NativeFont.java +++ b/jdk/src/solaris/classes/sun/font/NativeFont.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -331,6 +331,7 @@ public class NativeFont extends PhysicalFont { * ie to request 12 pt Times New Roman italic font, use an XLFD like : * -monotype-times new roman-regular-i---*-120-72-72-p-*-iso8859-1 */ + @SuppressWarnings("cast") byte[] getPlatformNameBytes(int ptSize) { int[] hPos = new int[14]; int hyphenCnt = 1; diff --git a/jdk/src/solaris/classes/sun/font/X11TextRenderer.java b/jdk/src/solaris/classes/sun/font/X11TextRenderer.java index a408168a5cc..3afb0ccd5a4 100644 --- a/jdk/src/solaris/classes/sun/font/X11TextRenderer.java +++ b/jdk/src/solaris/classes/sun/font/X11TextRenderer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -57,11 +57,11 @@ public class X11TextRenderer extends GlyphListPipe { super.drawGlyphVector(sg2d, g, x, y); return; case SunHints.INTVAL_TEXT_ANTIALIAS_ON: - sg2d.surfaceData.aaTextRenderer.drawGlyphVector(sg2d, g, x, y); + SurfaceData.aaTextRenderer.drawGlyphVector(sg2d, g, x, y); return; case SunHints.INTVAL_TEXT_ANTIALIAS_LCD_HRGB: case SunHints.INTVAL_TEXT_ANTIALIAS_LCD_VRGB: - sg2d.surfaceData.lcdTextRenderer.drawGlyphVector(sg2d, g, x, y); + SurfaceData.lcdTextRenderer.drawGlyphVector(sg2d, g, x, y); return; default: } diff --git a/jdk/src/solaris/classes/sun/font/XRGlyphCacheEntry.java b/jdk/src/solaris/classes/sun/font/XRGlyphCacheEntry.java index 18ece2b813b..b1dd7c150fc 100644 --- a/jdk/src/solaris/classes/sun/font/XRGlyphCacheEntry.java +++ b/jdk/src/solaris/classes/sun/font/XRGlyphCacheEntry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -48,8 +48,8 @@ public class XRGlyphCacheEntry { this.glyphInfoPtr = glyphInfoPtr; /* TODO: Does it make sence to cache results? */ - xOff = (int) Math.round(getXAdvance()); - yOff = (int) Math.round(getYAdvance()); + xOff = Math.round(getXAdvance()); + yOff = Math.round(getYAdvance()); } public int getXOff() { diff --git a/jdk/src/solaris/classes/sun/java2d/x11/X11SurfaceData.java b/jdk/src/solaris/classes/sun/java2d/x11/X11SurfaceData.java index d9d883a0e52..af65891495f 100644 --- a/jdk/src/solaris/classes/sun/java2d/x11/X11SurfaceData.java +++ b/jdk/src/solaris/classes/sun/java2d/x11/X11SurfaceData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -214,13 +214,13 @@ public abstract class X11SurfaceData extends XSurfaceData { if (!isX11SurfaceDataInitialized() && !GraphicsEnvironment.isHeadless()) { // If a screen magnifier is present, don't attempt to use DGA - String magPresent = (String) java.security.AccessController.doPrivileged + String magPresent = java.security.AccessController.doPrivileged (new sun.security.action.GetPropertyAction("javax.accessibility.screen_magnifier_present")); boolean tryDGA = magPresent == null || !"true".equals(magPresent); initIDs(XORComposite.class, tryDGA); - String xtextpipe = (String) java.security.AccessController.doPrivileged + String xtextpipe = java.security.AccessController.doPrivileged (new sun.security.action.GetPropertyAction("sun.java2d.xtextpipe")); if (xtextpipe == null || "true".startsWith(xtextpipe)) { if ("true".equals(xtextpipe)) { @@ -264,8 +264,7 @@ public abstract class X11SurfaceData extends XSurfaceData { if (GraphicsEnvironment.isHeadless()) { accelerationEnabled = Boolean.FALSE; } else { - String prop = - (String) java.security.AccessController.doPrivileged( + String prop = java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction("sun.java2d.pmoffscreen")); if (prop != null) { // true iff prop==true, false otherwise diff --git a/jdk/src/solaris/classes/sun/java2d/xr/XRDrawLine.java b/jdk/src/solaris/classes/sun/java2d/xr/XRDrawLine.java index 66b595e9455..a3c46ae26da 100644 --- a/jdk/src/solaris/classes/sun/java2d/xr/XRDrawLine.java +++ b/jdk/src/solaris/classes/sun/java2d/xr/XRDrawLine.java @@ -1,7 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. - - + * Copyright (c) 2013, 2014, 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 @@ -249,7 +247,7 @@ public class XRDrawLine { if (dx < 0) { xsteps = -xsteps; } - x1 = ucX1 + (int) xsteps; + x1 = ucX1 + xsteps; } else if ((outcode1 & (OUTCODE_LEFT | OUTCODE_RIGHT)) != 0) { if ((outcode1 & OUTCODE_LEFT) != 0) { x1 = cxmin; @@ -268,7 +266,7 @@ public class XRDrawLine { if (dy < 0) { ysteps = -ysteps; } - y1 = ucY1 + (int) ysteps; + y1 = ucY1 + ysteps; } outcode1 = outcode(x1, y1, cxmin, cymin, cxmax, cymax); } else { @@ -292,7 +290,7 @@ public class XRDrawLine { if (dx > 0) { xsteps = -xsteps; } - x2 = ucX2 + (int) xsteps; + x2 = ucX2 + xsteps; } else if ((outcode2 & (OUTCODE_LEFT | OUTCODE_RIGHT)) != 0) { if ((outcode2 & OUTCODE_LEFT) != 0) { x2 = cxmin; @@ -313,7 +311,7 @@ public class XRDrawLine { if (dy > 0) { ysteps = -ysteps; } - y2 = ucY2 + (int) ysteps; + y2 = ucY2 + ysteps; } outcode2 = outcode(x2, y2, cxmin, cymin, cxmax, cymax); } diff --git a/jdk/src/solaris/classes/sun/java2d/xr/XRPMBlitLoops.java b/jdk/src/solaris/classes/sun/java2d/xr/XRPMBlitLoops.java index 981629d1e06..58ebf7193b7 100644 --- a/jdk/src/solaris/classes/sun/java2d/xr/XRPMBlitLoops.java +++ b/jdk/src/solaris/classes/sun/java2d/xr/XRPMBlitLoops.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -178,6 +178,7 @@ class XRPMScaledBlit extends ScaledBlit { super(srcType, CompositeType.AnyAlpha, dstType); } + @SuppressWarnings("cast") public void Scale(SurfaceData src, SurfaceData dst, Composite comp, Region clip, int sx1, int sy1, int sx2, int sy2, double dx1, double dy1, double dx2, double dy2) { try { diff --git a/jdk/src/solaris/classes/sun/java2d/xr/XRPaints.java b/jdk/src/solaris/classes/sun/java2d/xr/XRPaints.java index 05136dabaf2..07cba15ec3f 100644 --- a/jdk/src/solaris/classes/sun/java2d/xr/XRPaints.java +++ b/jdk/src/solaris/classes/sun/java2d/xr/XRPaints.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2014, 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 @@ -231,7 +231,7 @@ abstract class XRPaints { Rectangle2D anchor = paint.getAnchorRect(); XRSurfaceData dstData = (XRSurfaceData) sg2d.surfaceData; - XRSurfaceData srcData = (XRSurfaceData) getAccSrcSurface(dstData, bi); + XRSurfaceData srcData = getAccSrcSurface(dstData, bi); AffineTransform at = new AffineTransform(); at.translate(anchor.getX(), anchor.getY()); @@ -259,7 +259,7 @@ abstract class XRPaints { public int colorToIntArgbPixel(Color c) { int rgb = c.getRGB(); - int a = (int) Math.round(xrCompMan.getExtraAlpha() * (rgb >>> 24)); + int a = Math.round(xrCompMan.getExtraAlpha() * (rgb >>> 24)); return ((a << 24) | (rgb & 0x00FFFFFF)); } } diff --git a/jdk/src/solaris/classes/sun/management/OperatingSystemImpl.java b/jdk/src/solaris/classes/sun/management/OperatingSystemImpl.java index 666840f247d..5e2f8dca3b7 100644 --- a/jdk/src/solaris/classes/sun/management/OperatingSystemImpl.java +++ b/jdk/src/solaris/classes/sun/management/OperatingSystemImpl.java @@ -39,19 +39,61 @@ class OperatingSystemImpl extends BaseOperatingSystemImpl super(vm); } - public native long getCommittedVirtualMemorySize(); - public native long getTotalSwapSpaceSize(); - public native long getFreeSwapSpaceSize(); - public native long getProcessCpuTime(); - public native long getFreePhysicalMemorySize(); - public native long getTotalPhysicalMemorySize(); - public native long getOpenFileDescriptorCount(); - public native long getMaxFileDescriptorCount(); - public native double getSystemCpuLoad(); - public native double getProcessCpuLoad(); + public long getCommittedVirtualMemorySize() { + return getCommittedVirtualMemorySize0(); + } + + public long getTotalSwapSpaceSize() { + return getTotalSwapSpaceSize0(); + } + + public long getFreeSwapSpaceSize() { + return getFreeSwapSpaceSize0(); + } + + public long getProcessCpuTime() { + return getProcessCpuTime0(); + } + + public long getFreePhysicalMemorySize() { + return getFreePhysicalMemorySize0(); + } + + public long getTotalPhysicalMemorySize() { + return getTotalPhysicalMemorySize0(); + } + + public long getOpenFileDescriptorCount() { + return getOpenFileDescriptorCount0(); + } + + public long getMaxFileDescriptorCount() { + return getMaxFileDescriptorCount0(); + } + + public double getSystemCpuLoad() { + return getSystemCpuLoad0(); + } + + public double getProcessCpuLoad() { + return getProcessCpuLoad0(); + } + + /* native methods */ + private native long getCommittedVirtualMemorySize0(); + private native long getFreePhysicalMemorySize0(); + private native long getFreeSwapSpaceSize0(); + private native long getMaxFileDescriptorCount0(); + private native long getOpenFileDescriptorCount0(); + private native long getProcessCpuTime0(); + private native double getProcessCpuLoad0(); + private native double getSystemCpuLoad0(); + private native long getTotalPhysicalMemorySize0(); + private native long getTotalSwapSpaceSize0(); static { - initialize(); + initialize0(); } - private static native void initialize(); + + private static native void initialize0(); } diff --git a/jdk/src/solaris/classes/sun/nio/ch/DefaultAsynchronousChannelProvider.java b/jdk/src/solaris/classes/sun/nio/ch/DefaultAsynchronousChannelProvider.java index 667c51ab59f..7a0ce392299 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/DefaultAsynchronousChannelProvider.java +++ b/jdk/src/solaris/classes/sun/nio/ch/DefaultAsynchronousChannelProvider.java @@ -68,6 +68,8 @@ public class DefaultAsynchronousChannelProvider { return createProvider("sun.nio.ch.LinuxAsynchronousChannelProvider"); if (osname.contains("OS X")) return createProvider("sun.nio.ch.BsdAsynchronousChannelProvider"); + if (osname.equals("AIX")) + return createProvider("sun.nio.ch.AixAsynchronousChannelProvider"); throw new InternalError("platform not recognized"); } } diff --git a/jdk/src/solaris/classes/sun/nio/ch/EPollPort.java b/jdk/src/solaris/classes/sun/nio/ch/EPollPort.java index 17cd171bc80..4238984c8d2 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/EPollPort.java +++ b/jdk/src/solaris/classes/sun/nio/ch/EPollPort.java @@ -93,7 +93,7 @@ final class EPollPort try { socketpair(sv); // register one end with epoll - epollCtl(epfd, EPOLL_CTL_ADD, sv[0], POLLIN); + epollCtl(epfd, EPOLL_CTL_ADD, sv[0], Net.POLLIN); } catch (IOException x) { close0(epfd); throw x; diff --git a/jdk/src/solaris/classes/sun/nio/ch/KQueuePort.java b/jdk/src/solaris/classes/sun/nio/ch/KQueuePort.java index c323f076fb2..5a1066444eb 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/KQueuePort.java +++ b/jdk/src/solaris/classes/sun/nio/ch/KQueuePort.java @@ -172,9 +172,9 @@ final class KQueuePort // TBD: Measure cost of EV_ONESHOT vs. EV_CLEAR, either will do here. int err = 0; int flags = (EV_ADD|EV_ONESHOT); - if ((events & Port.POLLIN) > 0) + if ((events & Net.POLLIN) > 0) err = keventRegister(kqfd, fd, EVFILT_READ, flags); - if (err == 0 && (events & Port.POLLOUT) > 0) + if (err == 0 && (events & Net.POLLOUT) > 0) err = keventRegister(kqfd, fd, EVFILT_WRITE, flags); if (err != 0) throw new InternalError("kevent failed: " + err); // should not happen @@ -227,9 +227,9 @@ final class KQueuePort int filter = getFilter(keventAddress); int events = 0; if (filter == EVFILT_READ) - events = Port.POLLIN; + events = Net.POLLIN; else if (filter == EVFILT_WRITE) - events = Port.POLLOUT; + events = Net.POLLOUT; Event ev = new Event(channel, events); diff --git a/jdk/src/solaris/classes/sun/nio/ch/PollArrayWrapper.java b/jdk/src/solaris/classes/sun/nio/ch/PollArrayWrapper.java index 3a57bfc4ba2..50fd67c5a83 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/PollArrayWrapper.java +++ b/jdk/src/solaris/classes/sun/nio/ch/PollArrayWrapper.java @@ -43,8 +43,6 @@ import sun.misc.*; public class PollArrayWrapper extends AbstractPollArrayWrapper { - public static final short POLLCONN = POLLOUT; - // File descriptor to write for interrupt int interruptFD; @@ -58,7 +56,7 @@ public class PollArrayWrapper extends AbstractPollArrayWrapper { void initInterrupt(int fd0, int fd1) { interruptFD = fd1; putDescriptor(0, fd0); - putEventOps(0, POLLIN); + putEventOps(0, Net.POLLIN); putReventOps(0, 0); } diff --git a/jdk/src/solaris/classes/sun/nio/ch/Port.java b/jdk/src/solaris/classes/sun/nio/ch/Port.java index 94025089933..81e1ed87615 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/Port.java +++ b/jdk/src/solaris/classes/sun/nio/ch/Port.java @@ -40,10 +40,6 @@ import java.util.concurrent.locks.ReentrantReadWriteLock; */ abstract class Port extends AsynchronousChannelGroupImpl { - static final short POLLIN = 0x0001; - static final short POLLOUT = 0x0004; - static final short POLLERR = 0x0008; - static final short POLLHUP = 0x0010; /** * Implemented by clients registered with this port. @@ -76,12 +72,22 @@ abstract class Port extends AsynchronousChannelGroupImpl { } } + /** + * Callback method for implementations that need special handling when fd is + * removed (currently only needed in the AIX-Port - see AixPollPort.java). + */ + protected void preUnregister(int fd) { + // Do nothing by default. + } + /** * Unregister channel identified by its file descriptor */ final void unregister(int fd) { boolean checkForShutdown = false; + preUnregister(fd); + fdToChannelLock.writeLock().lock(); try { fdToChannel.remove(Integer.valueOf(fd)); diff --git a/jdk/src/solaris/classes/sun/nio/ch/SinkChannelImpl.java b/jdk/src/solaris/classes/sun/nio/ch/SinkChannelImpl.java index a0645221ed0..bdc6c687070 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/SinkChannelImpl.java +++ b/jdk/src/solaris/classes/sun/nio/ch/SinkChannelImpl.java @@ -118,17 +118,16 @@ class SinkChannelImpl int oldOps = sk.nioReadyOps(); int newOps = initialOps; - if ((ops & PollArrayWrapper.POLLNVAL) != 0) + if ((ops & Net.POLLNVAL) != 0) throw new Error("POLLNVAL detected"); - if ((ops & (PollArrayWrapper.POLLERR - | PollArrayWrapper.POLLHUP)) != 0) { + if ((ops & (Net.POLLERR | Net.POLLHUP)) != 0) { newOps = intOps; sk.nioReadyOps(newOps); return (newOps & ~oldOps) != 0; } - if (((ops & PollArrayWrapper.POLLOUT) != 0) && + if (((ops & Net.POLLOUT) != 0) && ((intOps & SelectionKey.OP_WRITE) != 0)) newOps |= SelectionKey.OP_WRITE; @@ -146,7 +145,7 @@ class SinkChannelImpl public void translateAndSetInterestOps(int ops, SelectionKeyImpl sk) { if (ops == SelectionKey.OP_WRITE) - ops = PollArrayWrapper.POLLOUT; + ops = Net.POLLOUT; sk.selector.putEventOps(sk, ops); } diff --git a/jdk/src/solaris/classes/sun/nio/ch/SourceChannelImpl.java b/jdk/src/solaris/classes/sun/nio/ch/SourceChannelImpl.java index d632b74259f..398b169cc84 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/SourceChannelImpl.java +++ b/jdk/src/solaris/classes/sun/nio/ch/SourceChannelImpl.java @@ -118,17 +118,16 @@ class SourceChannelImpl int oldOps = sk.nioReadyOps(); int newOps = initialOps; - if ((ops & PollArrayWrapper.POLLNVAL) != 0) + if ((ops & Net.POLLNVAL) != 0) throw new Error("POLLNVAL detected"); - if ((ops & (PollArrayWrapper.POLLERR - | PollArrayWrapper.POLLHUP)) != 0) { + if ((ops & (Net.POLLERR | Net.POLLHUP)) != 0) { newOps = intOps; sk.nioReadyOps(newOps); return (newOps & ~oldOps) != 0; } - if (((ops & PollArrayWrapper.POLLIN) != 0) && + if (((ops & Net.POLLIN) != 0) && ((intOps & SelectionKey.OP_READ) != 0)) newOps |= SelectionKey.OP_READ; @@ -146,7 +145,7 @@ class SourceChannelImpl public void translateAndSetInterestOps(int ops, SelectionKeyImpl sk) { if (ops == SelectionKey.OP_READ) - ops = PollArrayWrapper.POLLIN; + ops = Net.POLLIN; sk.selector.putEventOps(sk, ops); } diff --git a/jdk/src/solaris/classes/sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java b/jdk/src/solaris/classes/sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java index 752b70ee4f0..294dc014236 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java +++ b/jdk/src/solaris/classes/sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java @@ -148,7 +148,7 @@ class UnixAsynchronousServerSocketChannelImpl synchronized (updateLock) { acceptPending = true; } - port.startPoll(fdVal, Port.POLLIN); + port.startPoll(fdVal, Net.POLLIN); return; } @@ -299,7 +299,7 @@ class UnixAsynchronousServerSocketChannelImpl } // register for connections - port.startPoll(fdVal, Port.POLLIN); + port.startPoll(fdVal, Net.POLLIN); return result; } } catch (Throwable x) { diff --git a/jdk/src/solaris/classes/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java b/jdk/src/solaris/classes/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java index c718057f060..d7f11dc6ffd 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java +++ b/jdk/src/solaris/classes/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java @@ -142,9 +142,9 @@ class UnixAsynchronousSocketChannelImpl assert Thread.holdsLock(updateLock); int events = 0; if (readPending) - events |= Port.POLLIN; + events |= Net.POLLIN; if (connectPending || writePending) - events |= Port.POLLOUT; + events |= Net.POLLOUT; if (events != 0) port.startPoll(fdVal, events); } @@ -204,9 +204,9 @@ class UnixAsynchronousSocketChannelImpl */ @Override public void onEvent(int events, boolean mayInvokeDirect) { - boolean readable = (events & Port.POLLIN) > 0; - boolean writable = (events & Port.POLLOUT) > 0; - if ((events & (Port.POLLERR | Port.POLLHUP)) > 0) { + boolean readable = (events & Net.POLLIN) > 0; + boolean writable = (events & Net.POLLOUT) > 0; + if ((events & (Net.POLLERR | Net.POLLHUP)) > 0) { readable = true; writable = true; } diff --git a/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpChannelImpl.java b/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpChannelImpl.java index 3b375686335..84a9944aa20 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpChannelImpl.java +++ b/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpChannelImpl.java @@ -593,15 +593,14 @@ public class SctpChannelImpl extends SctpChannel int oldOps = sk.nioReadyOps(); int newOps = initialOps; - if ((ops & PollArrayWrapper.POLLNVAL) != 0) { + if ((ops & Net.POLLNVAL) != 0) { /* This should only happen if this channel is pre-closed while a * selection operation is in progress * ## Throw an error if this channel has not been pre-closed */ return false; } - if ((ops & (PollArrayWrapper.POLLERR - | PollArrayWrapper.POLLHUP)) != 0) { + if ((ops & (Net.POLLERR | Net.POLLHUP)) != 0) { newOps = intOps; sk.nioReadyOps(newOps); /* No need to poll again in checkConnect, @@ -610,19 +609,19 @@ public class SctpChannelImpl extends SctpChannel return (newOps & ~oldOps) != 0; } - if (((ops & PollArrayWrapper.POLLIN) != 0) && + if (((ops & Net.POLLIN) != 0) && ((intOps & SelectionKey.OP_READ) != 0) && isConnected()) newOps |= SelectionKey.OP_READ; - if (((ops & PollArrayWrapper.POLLCONN) != 0) && + if (((ops & Net.POLLCONN) != 0) && ((intOps & SelectionKey.OP_CONNECT) != 0) && ((state == ChannelState.UNCONNECTED) || (state == ChannelState.PENDING))) { newOps |= SelectionKey.OP_CONNECT; readyToConnect = true; } - if (((ops & PollArrayWrapper.POLLOUT) != 0) && + if (((ops & Net.POLLOUT) != 0) && ((intOps & SelectionKey.OP_WRITE) != 0) && isConnected()) newOps |= SelectionKey.OP_WRITE; @@ -646,11 +645,11 @@ public class SctpChannelImpl extends SctpChannel public void translateAndSetInterestOps(int ops, SelectionKeyImpl sk) { int newOps = 0; if ((ops & SelectionKey.OP_READ) != 0) - newOps |= PollArrayWrapper.POLLIN; + newOps |= Net.POLLIN; if ((ops & SelectionKey.OP_WRITE) != 0) - newOps |= PollArrayWrapper.POLLOUT; + newOps |= Net.POLLOUT; if ((ops & SelectionKey.OP_CONNECT) != 0) - newOps |= PollArrayWrapper.POLLCONN; + newOps |= Net.POLLCONN; sk.selector.putEventOps(sk, newOps); } diff --git a/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java b/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java index 424c1d1642d..0a00bd4162e 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java +++ b/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java @@ -321,25 +321,24 @@ public class SctpMultiChannelImpl extends SctpMultiChannel int oldOps = sk.nioReadyOps(); int newOps = initialOps; - if ((ops & PollArrayWrapper.POLLNVAL) != 0) { + if ((ops & Net.POLLNVAL) != 0) { /* This should only happen if this channel is pre-closed while a * selection operation is in progress * ## Throw an error if this channel has not been pre-closed */ return false; } - if ((ops & (PollArrayWrapper.POLLERR - | PollArrayWrapper.POLLHUP)) != 0) { + if ((ops & (Net.POLLERR | Net.POLLHUP)) != 0) { newOps = intOps; sk.nioReadyOps(newOps); return (newOps & ~oldOps) != 0; } - if (((ops & PollArrayWrapper.POLLIN) != 0) && + if (((ops & Net.POLLIN) != 0) && ((intOps & SelectionKey.OP_READ) != 0)) newOps |= SelectionKey.OP_READ; - if (((ops & PollArrayWrapper.POLLOUT) != 0) && + if (((ops & Net.POLLOUT) != 0) && ((intOps & SelectionKey.OP_WRITE) != 0)) newOps |= SelectionKey.OP_WRITE; @@ -361,9 +360,9 @@ public class SctpMultiChannelImpl extends SctpMultiChannel public void translateAndSetInterestOps(int ops, SelectionKeyImpl sk) { int newOps = 0; if ((ops & SelectionKey.OP_READ) != 0) - newOps |= PollArrayWrapper.POLLIN; + newOps |= Net.POLLIN; if ((ops & SelectionKey.OP_WRITE) != 0) - newOps |= PollArrayWrapper.POLLOUT; + newOps |= Net.POLLOUT; sk.selector.putEventOps(sk, newOps); } diff --git a/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java b/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java index d22af25f1d1..c32fb9ebc0f 100644 --- a/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java +++ b/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java @@ -314,21 +314,20 @@ public class SctpServerChannelImpl extends SctpServerChannel int oldOps = sk.nioReadyOps(); int newOps = initialOps; - if ((ops & PollArrayWrapper.POLLNVAL) != 0) { + if ((ops & Net.POLLNVAL) != 0) { /* This should only happen if this channel is pre-closed while a * selection operation is in progress * ## Throw an error if this channel has not been pre-closed */ return false; } - if ((ops & (PollArrayWrapper.POLLERR - | PollArrayWrapper.POLLHUP)) != 0) { + if ((ops & (Net.POLLERR | Net.POLLHUP)) != 0) { newOps = intOps; sk.nioReadyOps(newOps); return (newOps & ~oldOps) != 0; } - if (((ops & PollArrayWrapper.POLLIN) != 0) && + if (((ops & Net.POLLIN) != 0) && ((intOps & SelectionKey.OP_ACCEPT) != 0)) newOps |= SelectionKey.OP_ACCEPT; @@ -352,7 +351,7 @@ public class SctpServerChannelImpl extends SctpServerChannel /* Translate ops */ if ((ops & SelectionKey.OP_ACCEPT) != 0) - newOps |= PollArrayWrapper.POLLIN; + newOps |= Net.POLLIN; /* Place ops into pollfd array */ sk.selector.putEventOps(sk, newOps); diff --git a/jdk/src/solaris/classes/sun/nio/fs/DefaultFileSystemProvider.java b/jdk/src/solaris/classes/sun/nio/fs/DefaultFileSystemProvider.java index d909916450e..595f3c6d187 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/DefaultFileSystemProvider.java +++ b/jdk/src/solaris/classes/sun/nio/fs/DefaultFileSystemProvider.java @@ -63,6 +63,8 @@ public class DefaultFileSystemProvider { return createProvider("sun.nio.fs.LinuxFileSystemProvider"); if (osname.contains("OS X")) return createProvider("sun.nio.fs.MacOSXFileSystemProvider"); + if (osname.equals("AIX")) + return createProvider("sun.nio.fs.AixFileSystemProvider"); throw new AssertionError("Platform not recognized"); } } diff --git a/jdk/src/solaris/classes/sun/print/AttributeClass.java b/jdk/src/solaris/classes/sun/print/AttributeClass.java index f9018dce19f..76a652b2a93 100644 --- a/jdk/src/solaris/classes/sun/print/AttributeClass.java +++ b/jdk/src/solaris/classes/sun/print/AttributeClass.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -274,7 +274,7 @@ public class AttributeClass { } private int unsignedByteToInt(byte b) { - return (int) (b & 0xff); + return (b & 0xff); } private int convertToInt(byte[] buf) { diff --git a/jdk/src/solaris/classes/sun/print/CUPSPrinter.java b/jdk/src/solaris/classes/sun/print/CUPSPrinter.java index a4c1082e78c..ddfb6e1e742 100644 --- a/jdk/src/solaris/classes/sun/print/CUPSPrinter.java +++ b/jdk/src/solaris/classes/sun/print/CUPSPrinter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -298,7 +298,7 @@ public class CUPSPrinter { printerInfo[0] = UnixPrintServiceLookup. getDefaultPrinterNameSysV(); printerInfo[1] = null; - return (String[])printerInfo.clone(); + return printerInfo.clone(); } else { return null; } @@ -318,7 +318,7 @@ public class CUPSPrinter { } os.close(); urlConnection.disconnect(); - return (String [])printerInfo.clone(); + return printerInfo.clone(); } } os.close(); diff --git a/jdk/src/solaris/classes/sun/print/IPPPrintService.java b/jdk/src/solaris/classes/sun/print/IPPPrintService.java index f48dd5ba38e..689288126b9 100644 --- a/jdk/src/solaris/classes/sun/print/IPPPrintService.java +++ b/jdk/src/solaris/classes/sun/print/IPPPrintService.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -74,8 +74,7 @@ public class IPPPrintService implements PrintService, SunPrinterJobService { private static final String FORCE_PIPE_PROP = "sun.print.ippdebug"; static { - String debugStr = - (String)java.security.AccessController.doPrivileged( + String debugStr = java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction(FORCE_PIPE_PROP)); debugPrint = "true".equalsIgnoreCase(debugStr); @@ -424,7 +423,7 @@ public class IPPPrintService implements PrintService, SunPrinterJobService { } // use IPP to get all media, - Media[] allMedia = (Media[])getSupportedMedia(); + Media[] allMedia = getSupportedMedia(); ArrayList sizeList = new ArrayList(); ArrayList trayList = new ArrayList(); for (int i=0; i= 1 && !splitPart[0].trim().endsWith(":")) { + printers.add(posPrinters[i]); + } + } + + return (String[])printers.toArray(new String[printers.size()]); + } + + private PrinterIsAcceptingJobs getPrinterIsAcceptingJobsAIX() { + // On AIX there should not be a blank after '-a'. + String command = "/usr/bin/lpstat -a" + printer; + String results[]= UnixPrintServiceLookup.execCmd(command); + + // Remove headers and bogus entries added by remote printers. + results = filterPrinterNamesAIX(results); + + if (results != null && results.length > 0) { + for (int i = 0; i < results.length; i++) { + if (results[i].contains("READY") || + results[i].contains("RUNNING")) { + return PrinterIsAcceptingJobs.ACCEPTING_JOBS; + } + } + } + + return PrinterIsAcceptingJobs.NOT_ACCEPTING_JOBS; + + } + private PrinterIsAcceptingJobs getPrinterIsAcceptingJobs() { if (UnixPrintServiceLookup.isSysV()) { return getPrinterIsAcceptingJobsSysV(); } else if (UnixPrintServiceLookup.isBSD()) { return getPrinterIsAcceptingJobsBSD(); + } else if (UnixPrintServiceLookup.isAIX()) { + return getPrinterIsAcceptingJobsAIX(); } else { return PrinterIsAcceptingJobs.ACCEPTING_JOBS; } @@ -345,11 +393,32 @@ public class UnixPrintService implements PrintService, AttributeUpdater, return new QueuedJobCount(qlen); } + private QueuedJobCount getQueuedJobCountAIX() { + // On AIX there should not be a blank after '-a'. + String command = "/usr/bin/lpstat -a" + printer; + String results[]= UnixPrintServiceLookup.execCmd(command); + + // Remove headers and bogus entries added by remote printers. + results = filterPrinterNamesAIX(results); + + int qlen = 0; + if (results != null && results.length > 0){ + for (int i = 0; i < results.length; i++) { + if (results[i].contains("QUEUED")){ + qlen ++; + } + } + } + return new QueuedJobCount(qlen); + } + private QueuedJobCount getQueuedJobCount() { if (UnixPrintServiceLookup.isSysV()) { return getQueuedJobCountSysV(); } else if (UnixPrintServiceLookup.isBSD()) { return getQueuedJobCountBSD(); + } else if (UnixPrintServiceLookup.isAIX()) { + return getQueuedJobCountAIX(); } else { return new QueuedJobCount(0); } @@ -369,6 +438,13 @@ public class UnixPrintService implements PrintService, AttributeUpdater, return attrs; } + private PrintServiceAttributeSet getAIXServiceAttributes() { + PrintServiceAttributeSet attrs = new HashPrintServiceAttributeSet(); + attrs.add(getQueuedJobCountAIX()); + attrs.add(getPrinterIsAcceptingJobsAIX()); + return attrs; + } + private boolean isSupportedCopies(Copies copies) { int numCopies = copies.getValue(); return (numCopies > 0 && numCopies < MAXCOPIES); @@ -394,6 +470,8 @@ public class UnixPrintService implements PrintService, AttributeUpdater, private PrintServiceAttributeSet getDynamicAttributes() { if (UnixPrintServiceLookup.isSysV()) { return getSysVServiceAttributes(); + } else if (UnixPrintServiceLookup.isAIX()) { + return getAIXServiceAttributes(); } else { return getBSDServiceAttributes(); } diff --git a/jdk/src/solaris/classes/sun/print/UnixPrintServiceLookup.java b/jdk/src/solaris/classes/sun/print/UnixPrintServiceLookup.java index fb6950b7d0d..9a7be7f9971 100644 --- a/jdk/src/solaris/classes/sun/print/UnixPrintServiceLookup.java +++ b/jdk/src/solaris/classes/sun/print/UnixPrintServiceLookup.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -78,6 +78,19 @@ public class UnixPrintServiceLookup extends PrintServiceLookup static String osname; + // List of commands used to deal with the printer queues on AIX + String[] lpNameComAix = { + "/usr/bin/lsallq", + "/usr/bin/lpstat -W -p|/usr/bin/expand|/usr/bin/cut -f1 -d' '", + "/usr/bin/lpstat -W -d|/usr/bin/expand|/usr/bin/cut -f1 -d' '", + "/usr/bin/lpstat -W -v" + }; + private static final int aix_lsallq = 0; + private static final int aix_lpstat_p = 1; + private static final int aix_lpstat_d = 2; + private static final int aix_lpstat_v = 3; + private static int aix_defaultPrinterEnumeration = aix_lsallq; + static { /* The system property "sun.java2d.print.polling" * can be used to force the printing code to poll or not poll @@ -114,6 +127,24 @@ public class UnixPrintServiceLookup extends PrintServiceLookup osname = java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction("os.name")); + + /* The system property "sun.java2d.print.aix.lpstat" + * can be used to force the usage of 'lpstat -p' to enumerate all + * printer queues. By default we use 'lsallq', because 'lpstat -p' can + * take lots of time if thousands of printers are attached to a server. + */ + if (isAIX()) { + String aixPrinterEnumerator = java.security.AccessController.doPrivileged( + new sun.security.action.GetPropertyAction("sun.java2d.print.aix.lpstat")); + + if (aixPrinterEnumerator != null) { + if (aixPrinterEnumerator.equalsIgnoreCase("lpstat")) { + aix_defaultPrinterEnumeration = aix_lpstat_p; + } else if (aixPrinterEnumerator.equalsIgnoreCase("lsallq")) { + aix_defaultPrinterEnumeration = aix_lsallq; + } + } + } } static boolean isMac() { @@ -133,6 +164,10 @@ public class UnixPrintServiceLookup extends PrintServiceLookup osname.contains("OS X")); } + static boolean isAIX() { + return osname.equals("AIX"); + } + static final int UNINITIALIZED = -1; static final int BSD_LPD = 0; static final int BSD_LPD_NG = 1; @@ -200,7 +235,7 @@ public class UnixPrintServiceLookup extends PrintServiceLookup if (printServices == null) { return new PrintService[0]; } else { - return (PrintService[])printServices.clone(); + return printServices.clone(); } } @@ -213,13 +248,13 @@ public class UnixPrintServiceLookup extends PrintServiceLookup // information when queried using IPP. Workaround is to remove it. // Even CUPS ignores these entries as shown in lpstat or using // their web configuration. - PrinterURI uri = (PrinterURI)ps.getAttribute(PrinterURI.class); + PrinterURI uri = ps.getAttribute(PrinterURI.class); if (uri.getURI().getHost().equals("localhost")) { IPPPrintService.debug_println(debugPrefix+"duplicate PrintService, ignoring the new local printer: "+ps); return index; // Do not add this. } PrintService oldPS = (PrintService)(printerList.get(index)); - uri = (PrinterURI)oldPS.getAttribute(PrinterURI.class); + uri = oldPS.getAttribute(PrinterURI.class); if (uri.getURI().getHost().equals("localhost")) { IPPPrintService.debug_println(debugPrefix+"duplicate PrintService, removing existing local printer: "+oldPS); printerList.remove(oldPS); @@ -251,6 +286,8 @@ public class UnixPrintServiceLookup extends PrintServiceLookup } else { if (isMac() || isSysV()) { printers = getAllPrinterNamesSysV(); + } else if (isAIX()) { + printers = getAllPrinterNamesAIX(); } else { //BSD printers = getAllPrinterNamesBSD(); } @@ -410,8 +447,7 @@ public class UnixPrintServiceLookup extends PrintServiceLookup /* check if all printers are already available */ if (printServices != null) { for (PrintService printService : printServices) { - PrinterName printerName = - (PrinterName)printService.getAttribute(PrinterName.class); + PrinterName printerName = printService.getAttribute(PrinterName.class); if (printerName.getValue().equals(name)) { return printService; } @@ -435,6 +471,8 @@ public class UnixPrintServiceLookup extends PrintServiceLookup PrintService printer = null; if (isMac() || isSysV()) { printer = getNamedPrinterNameSysV(name); + } else if (isAIX()) { + printer = getNamedPrinterNameAIX(name); } else { printer = getNamedPrinterNameBSD(name); } @@ -464,8 +502,7 @@ public class UnixPrintServiceLookup extends PrintServiceLookup * initialised. */ - PrinterName defName = - (PrinterName)defService.getAttribute(PrinterName.class); + PrinterName defName = defService.getAttribute(PrinterName.class); if (defName != null && name.equals(defName)) { if (matchesAttributes(defService, serviceSet)) { @@ -600,6 +637,8 @@ public class UnixPrintServiceLookup extends PrintServiceLookup } else { if (isMac() || isSysV()) { defaultPrinter = getDefaultPrinterNameSysV(); + } else if (isAIX()) { + defaultPrinter = getDefaultPrinterNameAIX(); } else { defaultPrinter = getDefaultPrinterNameBSD(); } @@ -774,11 +813,49 @@ public class UnixPrintServiceLookup extends PrintServiceLookup return (String[])printerNames.toArray(new String[printerNames.size()]); } + private String getDefaultPrinterNameAIX() { + String[] names = execCmd(lpNameComAix[aix_lpstat_d]); + // Remove headers and bogus entries added by remote printers. + names = UnixPrintService.filterPrinterNamesAIX(names); + if (names == null || names.length != 1) { + // No default printer found + return null; + } else { + return names[0]; + } + } + + private PrintService getNamedPrinterNameAIX(String name) { + // On AIX there should be no blank after '-v'. + String[] result = execCmd(lpNameComAix[aix_lpstat_v] + name); + // Remove headers and bogus entries added by remote printers. + result = UnixPrintService.filterPrinterNamesAIX(result); + if (result == null || result.length != 1) { + return null; + } else { + return new UnixPrintService(name); + } + } + + private String[] getAllPrinterNamesAIX() { + // Determine all printers of the system. + String [] names = execCmd(lpNameComAix[aix_defaultPrinterEnumeration]); + + // Remove headers and bogus entries added by remote printers. + names = UnixPrintService.filterPrinterNamesAIX(names); + + ArrayList printerNames = new ArrayList(); + for ( int i=0; i < names.length; i++) { + printerNames.add(names[i]); + } + return printerNames.toArray(new String[printerNames.size()]); + } + static String[] execCmd(final String command) { ArrayList results = null; try { final String[] cmd = new String[3]; - if (isSysV()) { + if (isSysV() || isAIX()) { cmd[0] = "/usr/bin/sh"; cmd[1] = "-c"; cmd[2] = "env LC_ALL=C " + command; diff --git a/jdk/src/solaris/demo/jvmti/hprof/hprof_md.c b/jdk/src/solaris/demo/jvmti/hprof/hprof_md.c index 9cfcc592c3a..78a4f606735 100644 --- a/jdk/src/solaris/demo/jvmti/hprof/hprof_md.c +++ b/jdk/src/solaris/demo/jvmti/hprof/hprof_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -42,7 +42,7 @@ #include #include -#if !defined(LINUX) && !defined(_ALLBSD_SOURCE) +#if !defined(LINUX) && !defined(_ALLBSD_SOURCE) && !defined(AIX) #include #endif @@ -65,6 +65,10 @@ #include "jvm_md.h" #include "hprof.h" +#ifdef AIX +#include "porting_aix.h" /* For the 'dladdr' function. */ +#endif + int md_getpid(void) { @@ -86,7 +90,7 @@ md_sleep(unsigned seconds) void md_init(void) { -#if defined(LINUX) || defined(_ALLBSD_SOURCE) +#if defined(LINUX) || defined(_ALLBSD_SOURCE) || defined(AIX) /* No Hi-Res timer option? */ #else if ( gdata->micro_state_accounting ) { @@ -253,7 +257,7 @@ md_timeofday(void) jlong md_get_microsecs(void) { -#if defined(LINUX) || defined(_ALLBSD_SOURCE) +#if defined(LINUX) || defined(_ALLBSD_SOURCE) || defined(AIX) return (jlong)(md_timeofday() * (jlong)1000); /* Milli to micro */ #else return (jlong)(gethrtime()/(hrtime_t)1000); /* Nano seconds to micro seconds */ @@ -271,7 +275,7 @@ md_get_timemillis(void) jlong md_get_thread_cpu_timemillis(void) { -#if defined(LINUX) || defined(_ALLBSD_SOURCE) +#if defined(LINUX) || defined(_ALLBSD_SOURCE) || defined(AIX) return md_timeofday(); #else return (jlong)(gethrvtime()/1000); /* Nano seconds to milli seconds */ @@ -286,7 +290,7 @@ md_get_prelude_path(char *path, int path_len, char *filename) Dl_info dlinfo; libdir[0] = 0; -#if defined(LINUX) || defined(_ALLBSD_SOURCE) +#if defined(LINUX) || defined(_ALLBSD_SOURCE) || defined(AIX) addr = (void*)&Agent_OnLoad; #else /* Just using &Agent_OnLoad will get the first external symbol with @@ -457,3 +461,5 @@ md_find_library_entry(void *handle, const char *name) sym = dlsym(handle, name); return sym; } + + diff --git a/jdk/src/solaris/native/com/sun/security/auth/module/Solaris.c b/jdk/src/solaris/native/com/sun/security/auth/module/Solaris.c index 3e31e7ff125..dd989f735f7 100644 --- a/jdk/src/solaris/native/com/sun/security/auth/module/Solaris.c +++ b/jdk/src/solaris/native/com/sun/security/auth/module/Solaris.c @@ -32,6 +32,12 @@ #include #include +static void throwIllegalArgumentException(JNIEnv *env, const char *msg) { + jclass clazz = (*env)->FindClass(env, "java/lang/IllegalArgumentException"); + if (clazz != NULL) + (*env)->ThrowNew(env, clazz, msg); +} + JNIEXPORT void JNICALL Java_com_sun_security_auth_module_SolarisSystem_getSolarisInfo (JNIEnv *env, jobject obj) { @@ -51,7 +57,7 @@ Java_com_sun_security_auth_module_SolarisSystem_getSolarisInfo if (groups == NULL) { jclass cls = (*env)->FindClass(env,"java/lang/OutOfMemoryError"); - if(cls != 0) + if (cls != NULL) (*env)->ThrowNew(env, cls, NULL); return; } @@ -67,15 +73,14 @@ Java_com_sun_security_auth_module_SolarisSystem_getSolarisInfo */ fid = (*env)->GetFieldID(env, cls, "username", "Ljava/lang/String;"); if (fid == 0) { - jclass newExcCls = - (*env)->FindClass(env, "java/lang/IllegalArgumentException"); - if (newExcCls == 0) { - /* Unable to find the new exception class, give up. */ - return; - } - (*env)->ThrowNew(env, newExcCls, "invalid field: username"); + (*env)->ExceptionClear(env); + throwIllegalArgumentException(env, "invalid field: username"); + goto cleanupAndReturn; } jstr = (*env)->NewStringUTF(env, pwd.pw_name); + if (jstr == NULL) { + goto cleanupAndReturn; + } (*env)->SetObjectField(env, obj, fid, jstr); /* @@ -83,13 +88,9 @@ Java_com_sun_security_auth_module_SolarisSystem_getSolarisInfo */ fid = (*env)->GetFieldID(env, cls, "uid", "J"); if (fid == 0) { - jclass newExcCls = - (*env)->FindClass(env, "java/lang/IllegalArgumentException"); - if (newExcCls == 0) { - /* Unable to find the new exception class, give up. */ - return; - } - (*env)->ThrowNew(env, newExcCls, "invalid field: username"); + (*env)->ExceptionClear(env); + throwIllegalArgumentException(env, "invalid field: uid"); + goto cleanupAndReturn; } (*env)->SetLongField(env, obj, fid, pwd.pw_uid); @@ -98,13 +99,9 @@ Java_com_sun_security_auth_module_SolarisSystem_getSolarisInfo */ fid = (*env)->GetFieldID(env, cls, "gid", "J"); if (fid == 0) { - jclass newExcCls = - (*env)->FindClass(env, "java/lang/IllegalArgumentException"); - if (newExcCls == 0) { - /* Unable to find the new exception class, give up. */ - return; - } - (*env)->ThrowNew(env, newExcCls, "invalid field: username"); + (*env)->ExceptionClear(env); + throwIllegalArgumentException(env, "invalid field: gid"); + goto cleanupAndReturn; } (*env)->SetLongField(env, obj, fid, pwd.pw_gid); @@ -113,21 +110,26 @@ Java_com_sun_security_auth_module_SolarisSystem_getSolarisInfo */ fid = (*env)->GetFieldID(env, cls, "groups", "[J"); if (fid == 0) { - jclass newExcCls = - (*env)->FindClass(env, "java/lang/IllegalArgumentException"); - if (newExcCls == 0) { - /* Unable to find the new exception class, give up. */ - return; - } - (*env)->ThrowNew(env, newExcCls, "invalid field: username"); + (*env)->ExceptionClear(env); + throwIllegalArgumentException(env, "invalid field: groups"); + goto cleanupAndReturn; } jgroups = (*env)->NewLongArray(env, numSuppGroups); + if (jgroups == NULL) { + goto cleanupAndReturn; + } jgroupsAsArray = (*env)->GetLongArrayElements(env, jgroups, 0); + if (jgroupsAsArray == NULL) { + goto cleanupAndReturn; + } for (i = 0; i < numSuppGroups; i++) jgroupsAsArray[i] = groups[i]; (*env)->ReleaseLongArrayElements(env, jgroups, jgroupsAsArray, 0); (*env)->SetObjectField(env, obj, fid, jgroups); } +cleanupAndReturn: + free(groups); + return; } diff --git a/jdk/src/solaris/native/com/sun/security/auth/module/Unix.c b/jdk/src/solaris/native/com/sun/security/auth/module/Unix.c index 620e19bb236..188a389d666 100644 --- a/jdk/src/solaris/native/com/sun/security/auth/module/Unix.c +++ b/jdk/src/solaris/native/com/sun/security/auth/module/Unix.c @@ -60,7 +60,7 @@ Java_com_sun_security_auth_module_UnixSystem_getUnixInfo groups = (gid_t *)calloc(numSuppGroups, sizeof(gid_t)); if (groups == NULL) { jclass cls = (*env)->FindClass(env,"java/lang/OutOfMemoryError"); - if(cls != 0) + if (cls != NULL) (*env)->ThrowNew(env, cls, NULL); return; } @@ -90,6 +90,8 @@ Java_com_sun_security_auth_module_UnixSystem_getUnixInfo goto cleanUpAndReturn; jstr = (*env)->NewStringUTF(env, pwd->pw_name); + if (jstr == NULL) + goto cleanUpAndReturn; (*env)->SetObjectField(env, obj, userNameID, jstr); (*env)->SetLongField(env, obj, userID, pwd->pw_uid); @@ -97,7 +99,11 @@ Java_com_sun_security_auth_module_UnixSystem_getUnixInfo (*env)->SetLongField(env, obj, groupID, pwd->pw_gid); jgroups = (*env)->NewLongArray(env, numSuppGroups); + if (jgroups == NULL) + goto cleanUpAndReturn; jgroupsAsArray = (*env)->GetLongArrayElements(env, jgroups, 0); + if (jgroupsAsArray == NULL) + goto cleanUpAndReturn; for (i = 0; i < numSuppGroups; i++) jgroupsAsArray[i] = groups[i]; (*env)->ReleaseLongArrayElements(env, jgroups, jgroupsAsArray, 0); diff --git a/jdk/src/solaris/native/common/jdk_util_md.h b/jdk/src/solaris/native/common/jdk_util_md.h index d9fd2a2557f..c13bb7794e4 100644 --- a/jdk/src/solaris/native/common/jdk_util_md.h +++ b/jdk/src/solaris/native/common/jdk_util_md.h @@ -39,6 +39,10 @@ #include #define ISNANF(f) isnanf(f) #define ISNAND(d) isnan(d) +#elif defined(_AIX) +#include +#define ISNANF(f) _isnanf(f) +#define ISNAND(d) _isnan(d) #else #error "missing platform-specific definition here" #endif diff --git a/jdk/src/solaris/native/common/jni_util_md.c b/jdk/src/solaris/native/common/jni_util_md.c index e9e0f4e0f3f..42ab2de0037 100644 --- a/jdk/src/solaris/native/common/jni_util_md.c +++ b/jdk/src/solaris/native/common/jni_util_md.c @@ -23,6 +23,8 @@ * questions. */ +#include + #include "jni.h" #include "jni_util.h" #include "dlfcn.h" @@ -40,7 +42,11 @@ void* getProcessHandle() { if (procHandle != NULL) { return procHandle; } +#ifdef __APPLE__ + procHandle = (void*)dlopen(NULL, RTLD_FIRST); +#else procHandle = (void*)dlopen(NULL, RTLD_LAZY); +#endif return procHandle; } diff --git a/jdk/src/solaris/native/java/io/UnixFileSystem_md.c b/jdk/src/solaris/native/java/io/UnixFileSystem_md.c index 5f95cd998c8..487e8a2bac3 100644 --- a/jdk/src/solaris/native/java/io/UnixFileSystem_md.c +++ b/jdk/src/solaris/native/java/io/UnixFileSystem_md.c @@ -283,6 +283,10 @@ Java_java_io_UnixFileSystem_list(JNIEnv *env, jobject this, struct dirent64 *result; int len, maxlen; jobjectArray rv, old; + jclass str_class; + + str_class = JNU_ClassString(env); + CHECK_NULL_RETURN(str_class, NULL); WITH_FIELD_PLATFORM_STRING(env, file, ids.path, path) { dir = opendir(path); @@ -299,7 +303,7 @@ Java_java_io_UnixFileSystem_list(JNIEnv *env, jobject this, /* Allocate an initial String array */ len = 0; maxlen = 16; - rv = (*env)->NewObjectArray(env, maxlen, JNU_ClassString(env), NULL); + rv = (*env)->NewObjectArray(env, maxlen, str_class, NULL); if (rv == NULL) goto error; /* Scan the directory */ @@ -309,8 +313,7 @@ Java_java_io_UnixFileSystem_list(JNIEnv *env, jobject this, continue; if (len == maxlen) { old = rv; - rv = (*env)->NewObjectArray(env, maxlen <<= 1, - JNU_ClassString(env), NULL); + rv = (*env)->NewObjectArray(env, maxlen <<= 1, str_class, NULL); if (rv == NULL) goto error; if (JNU_CopyObjectArray(env, rv, old, len) < 0) goto error; (*env)->DeleteLocalRef(env, old); @@ -329,7 +332,7 @@ Java_java_io_UnixFileSystem_list(JNIEnv *env, jobject this, /* Copy the final results into an appropriately-sized array */ old = rv; - rv = (*env)->NewObjectArray(env, len, JNU_ClassString(env), NULL); + rv = (*env)->NewObjectArray(env, len, str_class, NULL); if (rv == NULL) { return NULL; } diff --git a/jdk/src/solaris/native/java/io/io_util_md.c b/jdk/src/solaris/native/java/io/io_util_md.c index e74bc127102..5899a410347 100644 --- a/jdk/src/solaris/native/java/io/io_util_md.c +++ b/jdk/src/solaris/native/java/io/io_util_md.c @@ -35,7 +35,7 @@ #include #endif -#if defined(__linux__) || defined(_ALLBSD_SOURCE) +#if defined(__linux__) || defined(_ALLBSD_SOURCE) || defined(_AIX) #include #endif diff --git a/jdk/src/solaris/native/java/lang/ProcessEnvironment_md.c b/jdk/src/solaris/native/java/lang/ProcessEnvironment_md.c index f597bff742d..54aa7142a36 100644 --- a/jdk/src/solaris/native/java/lang/ProcessEnvironment_md.c +++ b/jdk/src/solaris/native/java/lang/ProcessEnvironment_md.c @@ -53,6 +53,7 @@ Java_java_lang_ProcessEnvironment_environ(JNIEnv *env, jclass ign) jsize i, j; jobjectArray result; jclass byteArrCls = (*env)->FindClass(env, "[B"); + CHECK_NULL_RETURN(byteArrCls, NULL); for (i = 0; environ[i]; i++) { /* Ignore corrupted environment variables */ @@ -61,7 +62,7 @@ Java_java_lang_ProcessEnvironment_environ(JNIEnv *env, jclass ign) } result = (*env)->NewObjectArray(env, 2*count, byteArrCls, 0); - if (result == NULL) return NULL; + CHECK_NULL_RETURN(result, NULL); for (i = 0, j = 0; environ[i]; i++) { const char * varEnd = strchr(environ[i], '='); @@ -72,9 +73,9 @@ Java_java_lang_ProcessEnvironment_environ(JNIEnv *env, jclass ign) jsize varLength = varEnd - environ[i]; jsize valLength = strlen(valBeg); var = (*env)->NewByteArray(env, varLength); - if (var == NULL) return NULL; + CHECK_NULL_RETURN(var, NULL); val = (*env)->NewByteArray(env, valLength); - if (val == NULL) return NULL; + CHECK_NULL_RETURN(val, NULL); (*env)->SetByteArrayRegion(env, var, 0, varLength, (jbyte*) environ[i]); (*env)->SetByteArrayRegion(env, val, 0, valLength, diff --git a/jdk/src/solaris/native/java/lang/UNIXProcess_md.c b/jdk/src/solaris/native/java/lang/UNIXProcess_md.c index 177031e5c74..da5be2257d0 100644 --- a/jdk/src/solaris/native/java/lang/UNIXProcess_md.c +++ b/jdk/src/solaris/native/java/lang/UNIXProcess_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -44,7 +44,7 @@ #include #include -#if defined(__solaris__) || defined(_ALLBSD_SOURCE) +#if defined(__solaris__) || defined(_ALLBSD_SOURCE) || defined(_AIX) #include #endif @@ -206,6 +206,7 @@ JNIEXPORT void JNICALL Java_java_lang_UNIXProcess_init(JNIEnv *env, jclass clazz) { parentPathv = effectivePathv(env); + CHECK_NULL(parentPathv); setSIGCHLDHandler(env); } @@ -455,7 +456,7 @@ forkChild(ChildStuff *c) { return resultPid; } -#if defined(__solaris__) || defined(_ALLBSD_SOURCE) +#if defined(__solaris__) || defined(_ALLBSD_SOURCE) || defined(_AIX) static pid_t spawnChild(JNIEnv *env, jobject process, ChildStuff *c, const char *helperpath) { pid_t resultPid; @@ -551,7 +552,7 @@ startChild(JNIEnv *env, jobject process, ChildStuff *c, const char *helperpath) return vforkChild(c); case MODE_FORK: return forkChild(c); -#if defined(__solaris__) || defined(_ALLBSD_SOURCE) +#if defined(__solaris__) || defined(_ALLBSD_SOURCE) || defined(_AIX) case MODE_POSIX_SPAWN: return spawnChild(env, process, c, helperpath); #endif diff --git a/jdk/src/solaris/native/java/lang/childproc.c b/jdk/src/solaris/native/java/lang/childproc.c index 0cfcf6fe9a8..1d183cf1fb2 100644 --- a/jdk/src/solaris/native/java/lang/childproc.c +++ b/jdk/src/solaris/native/java/lang/childproc.c @@ -66,6 +66,9 @@ isAsciiDigit(char c) #define FD_DIR "/dev/fd" #define dirent64 dirent #define readdir64 readdir +#elif defined(_AIX) +/* AIX does not understand '/proc/self' - it requires the real process ID */ +#define FD_DIR aix_fd_dir #else #define FD_DIR "/proc/self/fd" #endif @@ -87,6 +90,12 @@ closeDescriptors(void) close(from_fd); /* for possible use by opendir() */ close(from_fd + 1); /* another one for good luck */ +#if defined(_AIX) + /* AIX does not understand '/proc/self' - it requires the real process ID */ + char aix_fd_dir[32]; /* the pid has at most 19 digits */ + snprintf(aix_fd_dir, 32, "/proc/%d/fd", getpid()); +#endif + if ((dp = opendir(FD_DIR)) == NULL) return 0; diff --git a/jdk/src/solaris/native/java/lang/java_props_md.c b/jdk/src/solaris/native/java/lang/java_props_md.c index 1830b20fd0c..df55fd32b5b 100644 --- a/jdk/src/solaris/native/java/lang/java_props_md.c +++ b/jdk/src/solaris/native/java/lang/java_props_md.c @@ -546,6 +546,9 @@ GetJavaProperties(JNIEnv *env) sprops.display_country = sprops.country; sprops.display_variant = sprops.variant; + /* ParseLocale failed with OOME */ + JNU_CHECK_EXCEPTION_RETURN(env, NULL); + #ifdef MACOSX sprops.sun_jnu_encoding = "UTF-8"; #else diff --git a/jdk/src/solaris/native/java/net/Inet4AddressImpl.c b/jdk/src/solaris/native/java/net/Inet4AddressImpl.c index ea67245f0fe..9d79d3eb80a 100644 --- a/jdk/src/solaris/native/java/net/Inet4AddressImpl.c +++ b/jdk/src/solaris/native/java/net/Inet4AddressImpl.c @@ -51,29 +51,6 @@ #define HAS_GLIBC_GETHOSTBY_R 1 #endif -static jclass ni_iacls; -static jclass ni_ia4cls; -static jmethodID ni_ia4ctrID; - -static jboolean initializeInetClasses(JNIEnv *env) -{ - static int initialized = 0; - if (!initialized) { - ni_iacls = (*env)->FindClass(env, "java/net/InetAddress"); - CHECK_NULL_RETURN(ni_iacls, JNI_FALSE); - ni_iacls = (*env)->NewGlobalRef(env, ni_iacls); - CHECK_NULL_RETURN(ni_iacls, JNI_FALSE); - ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address"); - CHECK_NULL_RETURN(ni_ia4cls, JNI_FALSE); - ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); - CHECK_NULL_RETURN(ni_ia4cls, JNI_FALSE); - ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "", "()V"); - CHECK_NULL_RETURN(ni_ia4ctrID, JNI_FALSE); - initialized = 1; - } - return JNI_TRUE; -} - #if defined(_ALLBSD_SOURCE) && !defined(HAS_GLIBC_GETHOSTBY_R) extern jobjectArray lookupIfLocalhost(JNIEnv *env, const char *hostname, jboolean includeV6); @@ -147,8 +124,8 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, int error=0; struct addrinfo hints, *res, *resNew = NULL; - if (!initializeInetClasses(env)) - return NULL; + initInetAddressIDs(env); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); if (IS_NULL(host)) { JNU_ThrowNullPointerException(env, "host is null"); @@ -241,7 +218,7 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, goto cleanupAndReturn; } - ret = (*env)->NewObjectArray(env, retLen, ni_iacls, NULL); + ret = (*env)->NewObjectArray(env, retLen, ia_class, NULL); if (IS_NULL(ret)) { /* we may have memory to free at the end of this */ goto cleanupAndReturn; @@ -251,7 +228,7 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, /* We need 4 bytes to store ipv4 address; */ int len = 4; - jobject iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID); + jobject iaObj = (*env)->NewObject(env, ia4_class, ia4_ctrID); if (IS_NULL(iaObj)) { /* we may have memory to free at the end of this */ ret = NULL; @@ -407,8 +384,8 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, int error = 0; struct addrinfo hints, *res, *resNew = NULL; - if (!initializeInetClasses(env)) - return NULL; + initInetAddressIDs(env); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); if (IS_NULL(host)) { JNU_ThrowNullPointerException(env, "host is null"); @@ -486,7 +463,7 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, retLen = i; iterator = resNew; - ret = (*env)->NewObjectArray(env, retLen, ni_iacls, NULL); + ret = (*env)->NewObjectArray(env, retLen, ia_class, NULL); if (IS_NULL(ret)) { /* we may have memory to free at the end of this */ @@ -495,7 +472,7 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, i = 0; while (iterator != NULL) { - jobject iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID); + jobject iaObj = (*env)->NewObject(env, ia4_class, ia4_ctrID); if (IS_NULL(iaObj)) { ret = NULL; goto cleanupAndReturn; diff --git a/jdk/src/solaris/native/java/net/Inet6AddressImpl.c b/jdk/src/solaris/native/java/net/Inet6AddressImpl.c index 7ac26c0cbb6..8de5a9bea1b 100644 --- a/jdk/src/solaris/native/java/net/Inet6AddressImpl.c +++ b/jdk/src/solaris/native/java/net/Inet6AddressImpl.c @@ -117,44 +117,6 @@ Java_java_net_Inet6AddressImpl_getLocalHostName(JNIEnv *env, jobject this) { return (*env)->NewStringUTF(env, hostname); } -static jclass ni_iacls; -static jclass ni_ia4cls; -static jclass ni_ia6cls; -static jmethodID ni_ia4ctrID; -static jmethodID ni_ia6ctrID; -static jboolean preferIPv6Address; - -static jboolean initializeInetClasses(JNIEnv *env) -{ - jfieldID ni_preferIPv6AddressID; - static int initialized = 0; - if (!initialized) { - ni_iacls = (*env)->FindClass(env, "java/net/InetAddress"); - CHECK_NULL_RETURN(ni_iacls, JNI_FALSE); - ni_iacls = (*env)->NewGlobalRef(env, ni_iacls); - CHECK_NULL_RETURN(ni_iacls, JNI_FALSE); - ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address"); - CHECK_NULL_RETURN(ni_ia4cls, JNI_FALSE); - ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); - CHECK_NULL_RETURN(ni_ia4cls, JNI_FALSE); - ni_ia6cls = (*env)->FindClass(env, "java/net/Inet6Address"); - CHECK_NULL_RETURN(ni_ia6cls, JNI_FALSE); - ni_ia6cls = (*env)->NewGlobalRef(env, ni_ia6cls); - CHECK_NULL_RETURN(ni_ia6cls, JNI_FALSE); - ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "", "()V"); - CHECK_NULL_RETURN(ni_ia4ctrID, JNI_FALSE); - ni_ia6ctrID = (*env)->GetMethodID(env, ni_ia6cls, "", "()V"); - CHECK_NULL_RETURN(ni_ia6ctrID, JNI_FALSE); - ni_preferIPv6AddressID = - (*env)->GetStaticFieldID(env, ni_iacls, "preferIPv6Address", "Z"); - CHECK_NULL_RETURN(ni_preferIPv6AddressID, JNI_FALSE); - preferIPv6Address = - (*env)->GetStaticBooleanField(env, ia_class, ia_preferIPv6AddressID); - initialized = 1; - } - return JNI_TRUE; -} - #ifdef MACOSX /* also called from Inet4AddressImpl.c */ __private_extern__ jobjectArray @@ -169,9 +131,8 @@ lookupIfLocalhost(JNIEnv *env, const char *hostname, jboolean includeV6) jboolean includeLoopback = JNI_FALSE; jobject name; - // Make sure static variables we need are set. - if (!initializeInetClasses(env)) - return NULL; + initInetAddressIDs(env); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); /* If the requested name matches this host's hostname, return IP addresses * from all attached interfaces. (#2844683 et al) This prevents undesired @@ -196,6 +157,7 @@ lookupIfLocalhost(JNIEnv *env, const char *hostname, jboolean includeV6) } name = (*env)->NewStringUTF(env, hostname); + CHECK_NULL_RETURN(name, NULL); /* Iterate over the interfaces, and total up the number of IPv4 and IPv6 * addresses we have. Also keep a count of loopback addresses. We need to @@ -230,10 +192,10 @@ lookupIfLocalhost(JNIEnv *env, const char *hostname, jboolean includeV6) /* Create and fill the Java array. */ int arraySize = addrs4 + addrs6 - (includeLoopback ? 0 : (numV4Loopbacks + numV6Loopbacks)); - result = (*env)->NewObjectArray(env, arraySize, ni_iacls, NULL); + result = (*env)->NewObjectArray(env, arraySize, ia_class, NULL); if (!result) goto done; - if (preferIPv6Address) { + if ((*env)->GetStaticBooleanField(env, ia_class, ia_preferIPv6AddressID)) { i = includeLoopback ? addrs6 : (addrs6 - numV6Loopbacks); j = 0; } else { @@ -297,8 +259,8 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, struct addrinfo hints, *res, *resNew = NULL; #endif /* AF_INET6 */ - if (!initializeInetClasses(env)) - return NULL; + initInetAddressIDs(env); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); if (IS_NULL(host)) { JNU_ThrowNullPointerException(env, "host is null"); @@ -422,14 +384,14 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, retLen = i; iterator = resNew; - ret = (*env)->NewObjectArray(env, retLen, ni_iacls, NULL); + ret = (*env)->NewObjectArray(env, retLen, ia_class, NULL); if (IS_NULL(ret)) { /* we may have memory to free at the end of this */ goto cleanupAndReturn; } - if (preferIPv6Address) { + if ((*env)->GetStaticBooleanField(env, ia_class, ia_preferIPv6AddressID)) { /* AF_INET addresses will be offset by inet6Count */ inetIndex = inet6Count; inet6Index = 0; @@ -442,7 +404,7 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, while (iterator != NULL) { int ret1; if (iterator->ai_family == AF_INET) { - jobject iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID); + jobject iaObj = (*env)->NewObject(env, ia4_class, ia4_ctrID); if (IS_NULL(iaObj)) { ret = NULL; goto cleanupAndReturn; @@ -454,7 +416,7 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, } else if (iterator->ai_family == AF_INET6) { jint scope = 0; - jobject iaObj = (*env)->NewObject(env, ni_ia6cls, ni_ia6ctrID); + jobject iaObj = (*env)->NewObject(env, ia6_class, ia6_ctrID); if (IS_NULL(iaObj)) { ret = NULL; goto cleanupAndReturn; @@ -548,6 +510,7 @@ Java_java_net_Inet6AddressImpl_getHostByAddr(JNIEnv *env, jobject this, if (!error) { ret = (*env)->NewStringUTF(env, host); + CHECK_NULL_RETURN(ret, NULL); } #endif /* AF_INET6 */ diff --git a/jdk/src/solaris/native/java/net/NetworkInterface.c b/jdk/src/solaris/native/java/net/NetworkInterface.c index b2ebd8e222b..380dff19cc8 100644 --- a/jdk/src/solaris/native/java/net/NetworkInterface.c +++ b/jdk/src/solaris/native/java/net/NetworkInterface.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -52,6 +52,13 @@ #include #endif +#if defined(_AIX) +#include +#include +#include +#include +#endif + #ifdef __linux__ #define _PATH_PROCNET_IFINET6 "/proc/net/if_inet6" #endif @@ -111,12 +118,7 @@ jfieldID ni_parentID; jfieldID ni_defaultIndexID; jmethodID ni_ctrID; -static jclass ni_iacls; -static jclass ni_ia4cls; -static jclass ni_ia6cls; static jclass ni_ibcls; -static jmethodID ni_ia4ctrID; -static jmethodID ni_ia6ctrID; static jmethodID ni_ibctrID; static jfieldID ni_ibaddressID; static jfieldID ni_ib4broadcastID; @@ -191,27 +193,10 @@ Java_java_net_NetworkInterface_init(JNIEnv *env, jclass cls) { CHECK_NULL(ni_parentID); ni_ctrID = (*env)->GetMethodID(env, ni_class, "", "()V"); CHECK_NULL(ni_ctrID); - - ni_iacls = (*env)->FindClass(env, "java/net/InetAddress"); - CHECK_NULL(ni_iacls); - ni_iacls = (*env)->NewGlobalRef(env, ni_iacls); - CHECK_NULL(ni_iacls); - ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address"); - CHECK_NULL(ni_ia4cls); - ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); - CHECK_NULL(ni_ia4cls); - ni_ia6cls = (*env)->FindClass(env, "java/net/Inet6Address"); - CHECK_NULL(ni_ia6cls); - ni_ia6cls = (*env)->NewGlobalRef(env, ni_ia6cls); - CHECK_NULL(ni_ia6cls); ni_ibcls = (*env)->FindClass(env, "java/net/InterfaceAddress"); CHECK_NULL(ni_ibcls); ni_ibcls = (*env)->NewGlobalRef(env, ni_ibcls); CHECK_NULL(ni_ibcls); - ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "", "()V"); - CHECK_NULL(ni_ia4ctrID); - ni_ia6ctrID = (*env)->GetMethodID(env, ni_ia6cls, "", "()V"); - CHECK_NULL(ni_ia6ctrID); ni_ibctrID = (*env)->GetMethodID(env, ni_ibcls, "", "()V"); CHECK_NULL(ni_ibctrID); ni_ibaddressID = (*env)->GetFieldID(env, ni_ibcls, "address", "Ljava/net/InetAddress;"); @@ -221,6 +206,9 @@ Java_java_net_NetworkInterface_init(JNIEnv *env, jclass cls) { ni_ib4maskID = (*env)->GetFieldID(env, ni_ibcls, "maskLength", "S"); CHECK_NULL(ni_ib4maskID); ni_defaultIndexID = (*env)->GetStaticFieldID(env, ni_class, "defaultIndex", "I"); + CHECK_NULL(ni_defaultIndexID); + + initInetAddressIDs(env); } @@ -647,7 +635,7 @@ jobject createNetworkInterface(JNIEnv *env, netif *ifs) { /* * Create the array of InetAddresses */ - addrArr = (*env)->NewObjectArray(env, addr_count, ni_iacls, NULL); + addrArr = (*env)->NewObjectArray(env, addr_count, ia_class, NULL); if (addrArr == NULL) { return NULL; } @@ -664,7 +652,7 @@ jobject createNetworkInterface(JNIEnv *env, netif *ifs) { jobject ibObj = NULL; if (addrP->family == AF_INET) { - iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID); + iaObj = (*env)->NewObject(env, ia4_class, ia4_ctrID); if (iaObj) { setInetAddress_addr(env, iaObj, htonl(((struct sockaddr_in*)addrP->addr)->sin_addr.s_addr)); } @@ -673,7 +661,7 @@ jobject createNetworkInterface(JNIEnv *env, netif *ifs) { (*env)->SetObjectField(env, ibObj, ni_ibaddressID, iaObj); if (addrP->brdcast) { jobject ia2Obj = NULL; - ia2Obj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID); + ia2Obj = (*env)->NewObject(env, ia4_class, ia4_ctrID); if (ia2Obj) { setInetAddress_addr(env, ia2Obj, htonl(((struct sockaddr_in*)addrP->brdcast)->sin_addr.s_addr)); (*env)->SetObjectField(env, ibObj, ni_ib4broadcastID, ia2Obj); @@ -687,7 +675,7 @@ jobject createNetworkInterface(JNIEnv *env, netif *ifs) { #ifdef AF_INET6 if (addrP->family == AF_INET6) { int scope=0; - iaObj = (*env)->NewObject(env, ni_ia6cls, ni_ia6ctrID); + iaObj = (*env)->NewObject(env, ia6_class, ia6_ctrID); if (iaObj) { int ret = setInet6Address_ipaddress(env, iaObj, (char *)&(((struct sockaddr_in6*)addrP->addr)->sin6_addr)); if (ret == JNI_FALSE) { @@ -1041,8 +1029,8 @@ static int openSocket(JNIEnv *env, int proto){ } -/** Linux **/ -#ifdef __linux__ +/** Linux, AIX **/ +#if defined(__linux__) || defined(_AIX) /* Open socket for further ioct calls, try v4 socket first and * if it falls return v6 socket */ @@ -1080,11 +1068,13 @@ static int openSocketWithFallback(JNIEnv *env, const char *ifname){ static netif *enumIPv4Interfaces(JNIEnv *env, int sock, netif *ifs) { struct ifconf ifc; struct ifreq *ifreqP; - char *buf; + char *buf = NULL; int numifs; unsigned i; + int siocgifconfRequest = SIOCGIFCONF; +#if defined(__linux__) /* need to do a dummy SIOCGIFCONF to determine the buffer size. * SIOCGIFCOUNT doesn't work */ @@ -1093,11 +1083,21 @@ static netif *enumIPv4Interfaces(JNIEnv *env, int sock, netif *ifs) { NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "ioctl SIOCGIFCONF failed"); return ifs; } +#elif defined(_AIX) + ifc.ifc_buf = NULL; + if (ioctl(sock, SIOCGSIZIFCONF, &(ifc.ifc_len)) < 0) { + NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "ioctl SIOCGSIZIFCONF failed"); + return ifs; + } +#endif /* __linux__ */ CHECKED_MALLOC3(buf,char *, ifc.ifc_len); ifc.ifc_buf = buf; - if (ioctl(sock, SIOCGIFCONF, (char *)&ifc) < 0) { +#if defined(_AIX) + siocgifconfRequest = CSIOCGIFCONF; +#endif + if (ioctl(sock, siocgifconfRequest, (char *)&ifc) < 0) { NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "ioctl SIOCGIFCONF failed"); (void) free(buf); return ifs; @@ -1108,6 +1108,9 @@ static netif *enumIPv4Interfaces(JNIEnv *env, int sock, netif *ifs) { */ ifreqP = ifc.ifc_req; for (i=0; iifr_addr.sa_family != AF_INET) continue; +#endif /* * Add to the list */ @@ -1135,7 +1138,7 @@ static netif *enumIPv4Interfaces(JNIEnv *env, int sock, netif *ifs) { * Enumerates and returns all IPv6 interfaces on Linux */ -#ifdef AF_INET6 +#if defined(AF_INET6) && defined(__linux__) static netif *enumIPv6Interfaces(JNIEnv *env, int sock, netif *ifs) { FILE *f; char addr6[40], devname[21]; @@ -1179,11 +1182,108 @@ static netif *enumIPv6Interfaces(JNIEnv *env, int sock, netif *ifs) { #endif +/* + * Enumerates and returns all IPv6 interfaces on AIX + */ + +#if defined(AF_INET6) && defined(_AIX) +static netif *enumIPv6Interfaces(JNIEnv *env, int sock, netif *ifs) { + struct ifconf ifc; + struct ifreq *ifreqP; + char *buf; + int numifs; + unsigned i; + unsigned bufsize; + char *cp, *cplimit; + + /* use SIOCGSIZIFCONF to get size for SIOCGIFCONF */ + + ifc.ifc_buf = NULL; + if (ioctl(sock, SIOCGSIZIFCONF, &(ifc.ifc_len)) < 0) { + NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", + "ioctl SIOCGSIZIFCONF failed"); + return ifs; + } + bufsize = ifc.ifc_len; + + buf = (char *)malloc(bufsize); + if (!buf) { + JNU_ThrowOutOfMemoryError(env, "Network interface native buffer allocation failed"); + return ifs; + } + ifc.ifc_len = bufsize; + ifc.ifc_buf = buf; + if (ioctl(sock, SIOCGIFCONF, (char *)&ifc) < 0) { + NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", + "ioctl CSIOCGIFCONF failed"); + free(buf); + return ifs; + } + + /* + * Iterate through each interface + */ + ifreqP = ifc.ifc_req; + cp = (char *)ifc.ifc_req; + cplimit = cp + ifc.ifc_len; + + for ( ; cp < cplimit; cp += (sizeof(ifreqP->ifr_name) + MAX((ifreqP->ifr_addr).sa_len, sizeof(ifreqP->ifr_addr)))) { + ifreqP = (struct ifreq *)cp; + struct ifreq if2; + + memset((char *)&if2, 0, sizeof(if2)); + strcpy(if2.ifr_name, ifreqP->ifr_name); + + /* + * Skip interface that aren't UP + */ + if (ioctl(sock, SIOCGIFFLAGS, (char *)&if2) >= 0) { + if (!(if2.ifr_flags & IFF_UP)) { + continue; + } + } + + if (ifreqP->ifr_addr.sa_family != AF_INET6) + continue; + + if (ioctl(sock, SIOCGIFSITE6, (char *)&if2) >= 0) { + struct sockaddr_in6 *s6= (struct sockaddr_in6 *)&(ifreqP->ifr_addr); + s6->sin6_scope_id = if2.ifr_site6; + } + + /* + * Add to the list + */ + ifs = addif(env, sock, ifreqP->ifr_name, ifs, + (struct sockaddr *)&(ifreqP->ifr_addr), + AF_INET6, 0); + + /* + * If an exception occurred then free the list + */ + if ((*env)->ExceptionOccurred(env)) { + free(buf); + freeif(ifs); + return NULL; + } + } + + /* + * Free socket and buffer + */ + free(buf); + return ifs; +} +#endif + + static int getIndex(int sock, const char *name){ /* * Try to get the interface index - * (Not supported on Solaris 2.6 or 7) */ +#if defined(_AIX) + return if_nametoindex(name); +#else struct ifreq if2; strcpy(if2.ifr_name, name); @@ -1192,6 +1292,7 @@ static int getIndex(int sock, const char *name){ } return if2.ifr_ifindex; +#endif } /** @@ -1258,6 +1359,46 @@ static short getSubnet(JNIEnv *env, int sock, const char *ifname) { * MAC address. Returns -1 if there is no hardware address on that interface. */ static int getMacAddress(JNIEnv *env, int sock, const char* ifname, const struct in_addr* addr, unsigned char *buf) { +#if defined (_AIX) + int size; + struct kinfo_ndd *nddp; + void *end; + + size = getkerninfo(KINFO_NDD, 0, 0, 0); + if (size == 0) { + return -1; + } + + if (size < 0) { + perror("getkerninfo 1"); + return -1; + } + + nddp = (struct kinfo_ndd *)malloc(size); + + if (!nddp) { + return -1; + } + + if (getkerninfo(KINFO_NDD, nddp, &size, 0) < 0) { + perror("getkerninfo 2"); + return -1; + } + + end = (void *)nddp + size; + while ((void *)nddp < end) { + if (!strcmp(nddp->ndd_alias, ifname) || + !strcmp(nddp->ndd_name, ifname)) { + bcopy(nddp->ndd_addr, buf, 6); + return 6; + } else { + nddp++; + } + } + + return -1; + +#elif defined(__linux__) static struct ifreq ifr; int i; @@ -1279,6 +1420,7 @@ static int getMacAddress(JNIEnv *env, int sock, const char* ifname, const struct } return -1; +#endif } static int getMTU(JNIEnv *env, int sock, const char *ifname) { diff --git a/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c b/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c index 53d8fae2751..ac4a8385e9a 100644 --- a/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c +++ b/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c @@ -166,9 +166,8 @@ Java_java_net_PlainDatagramSocketImpl_init(JNIEnv *env, jclass cls) { IO_fd_fdID = NET_GetFileDescriptorID(env); CHECK_NULL(IO_fd_fdID); - Java_java_net_InetAddress_init(env, 0); - Java_java_net_Inet4Address_init(env, 0); - Java_java_net_Inet6Address_init(env, 0); + initInetAddressIDs(env); + JNU_CHECK_EXCEPTION(env); Java_java_net_NetworkInterface_init(env, 0); } @@ -507,6 +506,7 @@ Java_java_net_PlainDatagramSocketImpl_peek(JNIEnv *env, jobject this, } if (IS_NULL(addressObj)) { JNU_ThrowNullPointerException(env, "Null address in peek()"); + return -1; } if (timeout) { int ret = NET_Timeout(fd, timeout); @@ -1420,7 +1420,7 @@ Java_java_net_PlainDatagramSocketImpl_socketSetOption(JNIEnv *env, default : JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket option not supported by PlainDatagramSocketImp"); - break; + return; } @@ -1834,6 +1834,7 @@ Java_java_net_PlainDatagramSocketImpl_setTimeToLive(JNIEnv *env, jobject this, #ifdef AF_INET6 #ifdef __linux__ setTTL(env, fd, ttl); + JNU_CHECK_EXCEPTION(env); if (ipv6_available()) { setHopLimit(env, fd, ttl); } @@ -2121,6 +2122,7 @@ static void mcast_join_leave(JNIEnv *env, jobject this, else NET_ThrowCurrent(env, "setsockopt IP_DROP_MEMBERSHIP failed"); } + return; } } diff --git a/jdk/src/solaris/native/java/net/PlainSocketImpl.c b/jdk/src/solaris/native/java/net/PlainSocketImpl.c index b6f78b9c158..ef6421397af 100644 --- a/jdk/src/solaris/native/java/net/PlainSocketImpl.c +++ b/jdk/src/solaris/native/java/net/PlainSocketImpl.c @@ -162,6 +162,9 @@ Java_java_net_PlainSocketImpl_initProto(JNIEnv *env, jclass cls) { IO_fd_fdID = NET_GetFileDescriptorID(env); CHECK_NULL(IO_fd_fdID); + initInetAddressIDs(env); + JNU_CHECK_EXCEPTION(env); + /* Create the marker fd used for dup2 */ marker_fd = getMarkerFD(); } @@ -963,7 +966,7 @@ Java_java_net_PlainSocketImpl_socketSetOption(JNIEnv *env, jobject this, } if (NET_SetSockOpt(fd, level, optname, (const void *)&optval, optlen) < 0) { -#ifdef __solaris__ +#if defined(__solaris__) || defined(_AIX) if (errno == EINVAL) { // On Solaris setsockopt will set errno to EINVAL if the socket // is closed. The default error message is then confusing diff --git a/jdk/src/solaris/native/java/net/net_util_md.c b/jdk/src/solaris/native/java/net/net_util_md.c index 2ea6fd11932..209af3f04e3 100644 --- a/jdk/src/solaris/native/java/net/net_util_md.c +++ b/jdk/src/solaris/native/java/net/net_util_md.c @@ -737,14 +737,23 @@ static int getLocalScopeID (char *addr) { return 0; } -void initLocalAddrTable () { +void platformInit () { initLoopbackRoutes(); initLocalIfs(); } +#elif defined(_AIX) + +/* Initialize stubs for blocking I/O workarounds (see src/solaris/native/java/net/linux_close.c) */ +extern void aix_close_init(); + +void platformInit () { + aix_close_init(); +} + #else -void initLocalAddrTable () {} +void platformInit () {} #endif @@ -1271,6 +1280,7 @@ int NET_SetSockOpt(int fd, int level, int opt, const void *arg, int len) { + #ifndef IPTOS_TOS_MASK #define IPTOS_TOS_MASK 0x1e #endif @@ -1291,9 +1301,6 @@ NET_SetSockOpt(int fd, int level, int opt, const void *arg, #else static long maxsockbuf = -1; #endif - - int addopt; - struct linger *ling; #endif /* @@ -1386,6 +1393,29 @@ NET_SetSockOpt(int fd, int level, int opt, const void *arg, } #endif +#ifdef _AIX + if (level == SOL_SOCKET) { + if (opt == SO_SNDBUF || opt == SO_RCVBUF) { + /* + * Just try to set the requested size. If it fails we will leave the + * socket option as is. Setting the buffer size means only a hint in + * the jse2/java software layer, see javadoc. In the previous + * solution the buffer has always been truncated to a length of + * 0x100000 Byte, even if the technical limit has not been reached. + * This kind of absolute truncation was unexpected in the jck tests. + */ + int ret = setsockopt(fd, level, opt, arg, len); + if ((ret == 0) || (ret == -1 && errno == ENOBUFS)) { + // Accept failure because of insufficient buffer memory resources. + return 0; + } else { + // Deliver all other kinds of errors. + return ret; + } + } + } +#endif + /* * On Linux the receive buffer is used for both socket * structures and the the packet payload. The implication @@ -1442,10 +1472,12 @@ NET_SetSockOpt(int fd, int level, int opt, const void *arg, } } +#endif +#if defined(_ALLBSD_SOURCE) || defined(_AIX) /* * On Solaris, SO_REUSEADDR will allow multiple datagram - * sockets to bind to the same port. The network jck tests + * sockets to bind to the same port. The network jck tests check * for this "feature", so we need to emulate it by turning on * SO_REUSEPORT as well for that combination. */ @@ -1459,11 +1491,9 @@ NET_SetSockOpt(int fd, int level, int opt, const void *arg, } if (sotype == SOCK_DGRAM) { - addopt = SO_REUSEPORT; - setsockopt(fd, level, addopt, arg, len); + setsockopt(fd, level, SO_REUSEPORT, arg, len); } } - #endif return setsockopt(fd, level, opt, arg, len); @@ -1633,7 +1663,7 @@ NET_Wait(JNIEnv *env, jint fd, jint flags, jint timeout) if (timeout <= 0) { return read_rv > 0 ? 0 : -1; } - newTime = prevTime; + prevTime = newTime; if (read_rv > 0) { break; diff --git a/jdk/src/solaris/native/java/net/net_util_md.h b/jdk/src/solaris/native/java/net/net_util_md.h index f7bec897c7d..c602753b950 100644 --- a/jdk/src/solaris/native/java/net/net_util_md.h +++ b/jdk/src/solaris/native/java/net/net_util_md.h @@ -37,7 +37,17 @@ #endif -#if defined(__linux__) || defined(MACOSX) +/* + AIX needs a workaround for I/O cancellation, see: + http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.basetechref/doc/basetrf1/close.htm + ... + The close subroutine is blocked until all subroutines which use the file + descriptor return to usr space. For example, when a thread is calling close + and another thread is calling select with the same file descriptor, the + close subroutine does not return until the select call returns. + ... +*/ +#if defined(__linux__) || defined(MACOSX) || defined (_AIX) extern int NET_Timeout(int s, long timeout); extern int NET_Read(int s, void* buf, size_t len); extern int NET_RecvFrom(int s, void *buf, int len, unsigned int flags, diff --git a/jdk/src/solaris/native/java/util/TimeZone_md.c b/jdk/src/solaris/native/java/util/TimeZone_md.c index ce2fa5aca8c..e1af8f92556 100644 --- a/jdk/src/solaris/native/java/util/TimeZone_md.c +++ b/jdk/src/solaris/native/java/util/TimeZone_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -123,7 +123,7 @@ findZoneinfoFile(char *buf, size_t size, const char *dir) return NULL; } -#if defined(__linux__) || defined(MACOSX) || (defined(__solaris__) \ +#if defined(_AIX) || defined(__linux__) || defined(MACOSX) || (defined(__solaris__) \ && (defined(_POSIX_PTHREAD_SEMANTICS) || defined(_LP64))) while (readdir_r(dirp, entry, &dp) == 0 && dp != NULL) { #else @@ -615,6 +615,14 @@ getSolarisDefaultZoneID() { #endif /*__solaris__*/ #endif /*__linux__*/ +#ifdef _AIX +static char * +getPlatformTimeZoneID() +{ + return NULL; +} +#endif + /* * findJavaTZ_md() maps platform time zone ID to Java time zone ID * using /lib/tzmappings. If the TZ value is not found, it @@ -635,7 +643,7 @@ findJavaTZ_md(const char *java_home_dir, const char *country) #if defined(__linux__) || defined(_ALLBSD_SOURCE) if (tz == NULL) { #else -#ifdef __solaris__ +#if defined (__solaris__) || defined(_AIX) if (tz == NULL || *tz == '\0') { #endif #endif diff --git a/jdk/src/solaris/native/sun/awt/awt_LoadLibrary.c b/jdk/src/solaris/native/sun/awt/awt_LoadLibrary.c index c056e8eac87..f7ac70df393 100644 --- a/jdk/src/solaris/native/sun/awt/awt_LoadLibrary.c +++ b/jdk/src/solaris/native/sun/awt/awt_LoadLibrary.c @@ -37,6 +37,10 @@ #include "awt_Plugin.h" +#ifdef AIX +#include "porting_aix.h" /* For the 'dladdr' function. */ +#endif + #ifdef DEBUG #define VERBOSE_AWT_DEBUG #endif diff --git a/jdk/src/solaris/native/sun/awt/fontpath.c b/jdk/src/solaris/native/sun/awt/fontpath.c index 12c8405beae..19e5d9bf8d8 100644 --- a/jdk/src/solaris/native/sun/awt/fontpath.c +++ b/jdk/src/solaris/native/sun/awt/fontpath.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -64,7 +64,7 @@ extern Display *awt_display; #define MAXFDIRS 512 /* Max number of directories that contain fonts */ -#if !defined(__linux__) +#if defined(__solaris__) /* * This can be set in the makefile to "/usr/X11" if so desired. */ @@ -114,7 +114,7 @@ static char *fullSolarisFontPath[] = { NULL, /* terminates the list */ }; -#else /* __linux */ +#elif defined( __linux__) /* All the known interesting locations we have discovered on * various flavors of Linux */ @@ -134,6 +134,12 @@ static char *fullLinuxFontPath[] = { "/usr/share/fonts/default/Type1", /* RH 9.0 */ NULL, /* terminates the list */ }; +#elif defined(_AIX) +static char *fullAixFontPath[] = { + "/usr/lpp/X11/lib/X11/fonts/Type1", /* from X11.fnt.iso_T1 */ + "/usr/lpp/X11/lib/X11/fonts/TrueType", /* from X11.fnt.ucs.ttf */ + NULL, /* terminates the list */ +}; #endif static char **getFontConfigLocations(); @@ -497,10 +503,11 @@ static char *getPlatformFontPathChars(JNIEnv *env, jboolean noType1) { #if defined(__linux__) knowndirs = fullLinuxFontPath; -#else /* IF SOLARIS */ +#elif defined(__solaris__) knowndirs = fullSolarisFontPath; +#elif defined(_AIX) + knowndirs = fullAixFontPath; #endif - /* REMIND: this code requires to be executed when the GraphicsEnvironment * is already initialised. That is always true, but if it were not so, * this code could throw an exception and the fontpath would fail to @@ -592,6 +599,25 @@ static void* openFontConfig() { } } #endif + +#if defined(_AIX) + /* On AIX, fontconfig is not a standard package supported by IBM. + * instead it has to be installed from the "AIX Toolbox for Linux Applications" + * site http://www-03.ibm.com/systems/power/software/aix/linux/toolbox/alpha.html + * and will be installed under /opt/freeware/lib/libfontconfig.a. + * Notice that the archive contains the real 32- and 64-bit shared libraries. + * We first try to load 'libfontconfig.so' from the default library path in the + * case the user has installed a private version of the library and if that + * doesn't succeed, we try the version from /opt/freeware/lib/libfontconfig.a + */ + libfontconfig = dlopen("libfontconfig.so", RTLD_LOCAL|RTLD_LAZY); + if (libfontconfig == NULL) { + libfontconfig = dlopen("/opt/freeware/lib/libfontconfig.a(libfontconfig.so.1)", RTLD_MEMBER|RTLD_LOCAL|RTLD_LAZY); + if (libfontconfig == NULL) { + return NULL; + } + } +#else /* 64 bit sparc should pick up the right version from the lib path. * New features may be added to libfontconfig, this is expected to * be compatible with old features, but we may need to start @@ -606,6 +632,7 @@ static void* openFontConfig() { return NULL; } } +#endif /* Version 1.0 of libfontconfig crashes if HOME isn't defined in * the environment. This should generally never happen, but we can't @@ -1203,7 +1230,7 @@ Java_sun_font_FontConfigManager_getFontConfig */ if (fontformat != NULL && (strcmp((char*)fontformat, "TrueType") != 0) -#ifdef __linux__ +#if defined(__linux__) || defined(_AIX) && (strcmp((char*)fontformat, "Type 1") != 0) #endif ) { diff --git a/jdk/src/solaris/native/sun/java2d/x11/X11SurfaceData.c b/jdk/src/solaris/native/sun/java2d/x11/X11SurfaceData.c index 79e3be488a6..fd48e42cf1e 100644 --- a/jdk/src/solaris/native/sun/java2d/x11/X11SurfaceData.c +++ b/jdk/src/solaris/native/sun/java2d/x11/X11SurfaceData.c @@ -56,8 +56,8 @@ typedef struct _X11RIPrivate { int x, y; } X11RIPrivate; -#define MAX(a,b) ((a) > (b) ? (a) : (b)) -#define MIN(a,b) ((a) < (b) ? (a) : (b)) +#define XSD_MAX(a,b) ((a) > (b) ? (a) : (b)) +#define XSD_MIN(a,b) ((a) < (b) ? (a) : (b)) static LockFunc X11SD_Lock; static GetRasInfoFunc X11SD_GetRasInfo; @@ -1090,10 +1090,10 @@ X11SD_ClipToRoot(SurfaceDataBounds *b, SurfaceDataBounds *bounds, x2 = x1 + DisplayWidth(awt_display, xsdo->configData->awt_visInfo.screen); y2 = y1 + DisplayHeight(awt_display, xsdo->configData->awt_visInfo.screen); - x1 = MAX(bounds->x1, x1); - y1 = MAX(bounds->y1, y1); - x2 = MIN(bounds->x2, x2); - y2 = MIN(bounds->y2, y2); + x1 = XSD_MAX(bounds->x1, x1); + y1 = XSD_MAX(bounds->y1, y1); + x2 = XSD_MIN(bounds->x2, x2); + y2 = XSD_MIN(bounds->y2, y2); if ((x1 >= x2) || (y1 >= y2)) { return FALSE; } diff --git a/jdk/src/solaris/native/sun/java2d/x11/XRBackendNative.c b/jdk/src/solaris/native/sun/java2d/x11/XRBackendNative.c index e2554b3209e..733606ec444 100644 --- a/jdk/src/solaris/native/sun/java2d/x11/XRBackendNative.c +++ b/jdk/src/solaris/native/sun/java2d/x11/XRBackendNative.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -72,8 +72,8 @@ typedef struct _XRadialGradient { #include -#ifdef __solaris__ -/* Solaris 10 will not have these symbols at runtime */ +#if defined(__solaris__) || defined(_AIX) +/* Solaris 10 and AIX will not have these symbols at runtime */ typedef Picture (*XRenderCreateLinearGradientFuncType) (Display *dpy, @@ -147,7 +147,7 @@ static jboolean IsXRenderAvailable(jboolean verbose, jboolean ignoreLinuxVersion return JNI_FALSE; } -#ifdef __solaris__ +#if defined(__solaris__) || defined(_AIX) xrenderlib = dlopen("libXrender.so",RTLD_GLOBAL|RTLD_LAZY); if (xrenderlib != NULL) { diff --git a/jdk/src/solaris/native/sun/management/LinuxOperatingSystem.c b/jdk/src/solaris/native/sun/management/LinuxOperatingSystem.c index c8bd739ebef..1d6c89ed754 100644 --- a/jdk/src/solaris/native/sun/management/LinuxOperatingSystem.c +++ b/jdk/src/solaris/native/sun/management/LinuxOperatingSystem.c @@ -310,7 +310,7 @@ double get_process_load() { } JNIEXPORT jdouble JNICALL -Java_sun_management_OperatingSystemImpl_getSystemCpuLoad +Java_sun_management_OperatingSystemImpl_getSystemCpuLoad0 (JNIEnv *env, jobject dummy) { if(perfInit() == 0) { @@ -321,7 +321,7 @@ Java_sun_management_OperatingSystemImpl_getSystemCpuLoad } JNIEXPORT jdouble JNICALL -Java_sun_management_OperatingSystemImpl_getProcessCpuLoad +Java_sun_management_OperatingSystemImpl_getProcessCpuLoad0 (JNIEnv *env, jobject dummy) { if(perfInit() == 0) { diff --git a/jdk/src/solaris/native/sun/management/MacosxOperatingSystem.c b/jdk/src/solaris/native/sun/management/MacosxOperatingSystem.c index 8fb39786fe1..24c8669ba47 100644 --- a/jdk/src/solaris/native/sun/management/MacosxOperatingSystem.c +++ b/jdk/src/solaris/native/sun/management/MacosxOperatingSystem.c @@ -31,7 +31,7 @@ JNIEXPORT jdouble JNICALL -Java_sun_management_OperatingSystemImpl_getSystemCpuLoad +Java_sun_management_OperatingSystemImpl_getSystemCpuLoad0 (JNIEnv *env, jobject dummy) { // This code is influenced by the darwin top source @@ -83,7 +83,7 @@ Java_sun_management_OperatingSystemImpl_getSystemCpuLoad JNIEXPORT jdouble JNICALL -Java_sun_management_OperatingSystemImpl_getProcessCpuLoad +Java_sun_management_OperatingSystemImpl_getProcessCpuLoad0 (JNIEnv *env, jobject dummy) { // This code is influenced by the darwin top source diff --git a/jdk/src/solaris/native/sun/management/OperatingSystemImpl.c b/jdk/src/solaris/native/sun/management/OperatingSystemImpl.c index f1322ebd90b..898a0f9e58a 100644 --- a/jdk/src/solaris/native/sun/management/OperatingSystemImpl.c +++ b/jdk/src/solaris/native/sun/management/OperatingSystemImpl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,7 +41,7 @@ #include #include #endif -#else +#elif !defined(_AIX) #include #endif #include @@ -57,9 +57,13 @@ #include #include +#if defined(_AIX) +#include +#endif + static jlong page_size = 0; -#if defined(_ALLBSD_SOURCE) +#if defined(_ALLBSD_SOURCE) || defined(_AIX) #define MB (1024UL * 1024UL) #else @@ -175,14 +179,14 @@ static jlong get_total_or_available_swap_space_size(JNIEnv* env, jboolean availa } JNIEXPORT void JNICALL -Java_sun_management_OperatingSystemImpl_initialize +Java_sun_management_OperatingSystemImpl_initialize0 (JNIEnv *env, jclass cls) { page_size = sysconf(_SC_PAGESIZE); } JNIEXPORT jlong JNICALL -Java_sun_management_OperatingSystemImpl_getCommittedVirtualMemorySize +Java_sun_management_OperatingSystemImpl_getCommittedVirtualMemorySize0 (JNIEnv *env, jobject mbean) { #ifdef __solaris__ @@ -249,21 +253,21 @@ Java_sun_management_OperatingSystemImpl_getCommittedVirtualMemorySize } JNIEXPORT jlong JNICALL -Java_sun_management_OperatingSystemImpl_getTotalSwapSpaceSize +Java_sun_management_OperatingSystemImpl_getTotalSwapSpaceSize0 (JNIEnv *env, jobject mbean) { return get_total_or_available_swap_space_size(env, JNI_FALSE); } JNIEXPORT jlong JNICALL -Java_sun_management_OperatingSystemImpl_getFreeSwapSpaceSize +Java_sun_management_OperatingSystemImpl_getFreeSwapSpaceSize0 (JNIEnv *env, jobject mbean) { return get_total_or_available_swap_space_size(env, JNI_TRUE); } JNIEXPORT jlong JNICALL -Java_sun_management_OperatingSystemImpl_getProcessCpuTime +Java_sun_management_OperatingSystemImpl_getProcessCpuTime0 (JNIEnv *env, jobject mbean) { #ifdef __APPLE__ @@ -305,7 +309,7 @@ Java_sun_management_OperatingSystemImpl_getProcessCpuTime } JNIEXPORT jlong JNICALL -Java_sun_management_OperatingSystemImpl_getFreePhysicalMemorySize +Java_sun_management_OperatingSystemImpl_getFreePhysicalMemorySize0 (JNIEnv *env, jobject mbean) { #ifdef __APPLE__ @@ -326,6 +330,12 @@ Java_sun_management_OperatingSystemImpl_getFreePhysicalMemorySize */ // throw_internal_error(env, "unimplemented in FreeBSD") return (128 * MB); +#elif defined(_AIX) + perfstat_memory_total_t memory_info; + if (-1 != perfstat_memory_total(NULL, &memory_info, sizeof(perfstat_memory_total_t), 1)) { + return (jlong)(memory_info.real_free * 4L * 1024L); + } + return -1; #else // solaris / linux jlong num_avail_physical_pages = sysconf(_SC_AVPHYS_PAGES); return (num_avail_physical_pages * page_size); @@ -333,7 +343,7 @@ Java_sun_management_OperatingSystemImpl_getFreePhysicalMemorySize } JNIEXPORT jlong JNICALL -Java_sun_management_OperatingSystemImpl_getTotalPhysicalMemorySize +Java_sun_management_OperatingSystemImpl_getTotalPhysicalMemorySize0 (JNIEnv *env, jobject mbean) { #ifdef _ALLBSD_SOURCE @@ -349,6 +359,12 @@ Java_sun_management_OperatingSystemImpl_getTotalPhysicalMemorySize return -1; } return result; +#elif defined(_AIX) + perfstat_memory_total_t memory_info; + if (-1 != perfstat_memory_total(NULL, &memory_info, sizeof(perfstat_memory_total_t), 1)) { + return (jlong)(memory_info.real_total * 4L * 1024L); + } + return -1; #else // solaris / linux jlong num_physical_pages = sysconf(_SC_PHYS_PAGES); return (num_physical_pages * page_size); @@ -358,7 +374,7 @@ Java_sun_management_OperatingSystemImpl_getTotalPhysicalMemorySize JNIEXPORT jlong JNICALL -Java_sun_management_OperatingSystemImpl_getOpenFileDescriptorCount +Java_sun_management_OperatingSystemImpl_getOpenFileDescriptorCount0 (JNIEnv *env, jobject mbean) { #ifdef __APPLE__ @@ -417,7 +433,16 @@ Java_sun_management_OperatingSystemImpl_getOpenFileDescriptorCount struct dirent* dentp; jlong fds = 0; - dirp = opendir("/proc/self/fd"); +#if defined(_AIX) +/* AIX does not understand '/proc/self' - it requires the real process ID */ +#define FD_DIR aix_fd_dir + char aix_fd_dir[32]; /* the pid has at most 19 digits */ + snprintf(aix_fd_dir, 32, "/proc/%d/fd", getpid()); +#else +#define FD_DIR "/proc/self/fd" +#endif + + dirp = opendir(FD_DIR); if (dirp == NULL) { throw_internal_error(env, "Unable to open directory /proc/self/fd"); return -1; @@ -438,7 +463,7 @@ Java_sun_management_OperatingSystemImpl_getOpenFileDescriptorCount } JNIEXPORT jlong JNICALL -Java_sun_management_OperatingSystemImpl_getMaxFileDescriptorCount +Java_sun_management_OperatingSystemImpl_getMaxFileDescriptorCount0 (JNIEnv *env, jobject mbean) { struct rlimit rlp; diff --git a/jdk/src/solaris/native/sun/management/SolarisOperatingSystem.c b/jdk/src/solaris/native/sun/management/SolarisOperatingSystem.c index a8136f1ac63..f89da99aa39 100644 --- a/jdk/src/solaris/native/sun/management/SolarisOperatingSystem.c +++ b/jdk/src/solaris/native/sun/management/SolarisOperatingSystem.c @@ -226,14 +226,14 @@ double get_process_load(void) { } JNIEXPORT jdouble JNICALL -Java_sun_management_OperatingSystemImpl_getSystemCpuLoad +Java_sun_management_OperatingSystemImpl_getSystemCpuLoad0 (JNIEnv *env, jobject dummy) { return get_cpu_load(-1); } JNIEXPORT jdouble JNICALL -Java_sun_management_OperatingSystemImpl_getProcessCpuLoad +Java_sun_management_OperatingSystemImpl_getProcessCpuLoad0 (JNIEnv *env, jobject dummy) { return get_process_load(); diff --git a/jdk/src/solaris/native/sun/nio/ch/DatagramChannelImpl.c b/jdk/src/solaris/native/sun/nio/ch/DatagramChannelImpl.c index cd2f4927bdb..f5dd361c4fc 100644 --- a/jdk/src/solaris/native/sun/nio/ch/DatagramChannelImpl.c +++ b/jdk/src/solaris/native/sun/nio/ch/DatagramChannelImpl.c @@ -56,18 +56,28 @@ JNIEXPORT void JNICALL Java_sun_nio_ch_DatagramChannelImpl_initIDs(JNIEnv *env, jclass clazz) { clazz = (*env)->FindClass(env, "java/net/InetSocketAddress"); + CHECK_NULL(clazz); isa_class = (*env)->NewGlobalRef(env, clazz); + if (isa_class == NULL) { + JNU_ThrowOutOfMemoryError(env, NULL); + return; + } isa_ctorID = (*env)->GetMethodID(env, clazz, "", "(Ljava/net/InetAddress;I)V"); + CHECK_NULL(isa_ctorID); clazz = (*env)->FindClass(env, "sun/nio/ch/DatagramChannelImpl"); + CHECK_NULL(clazz); dci_senderID = (*env)->GetFieldID(env, clazz, "sender", "Ljava/net/SocketAddress;"); + CHECK_NULL(dci_senderID); dci_senderAddrID = (*env)->GetFieldID(env, clazz, "cachedSenderInetAddress", "Ljava/net/InetAddress;"); + CHECK_NULL(dci_senderAddrID); dci_senderPortID = (*env)->GetFieldID(env, clazz, "cachedSenderPort", "I"); + CHECK_NULL(dci_senderPortID); } JNIEXPORT void JNICALL @@ -81,7 +91,7 @@ Java_sun_nio_ch_DatagramChannelImpl_disconnect0(JNIEnv *env, jobject this, rv = connect(fd, 0, 0); #endif -#if defined(__linux__) || defined(_ALLBSD_SOURCE) +#if defined(__linux__) || defined(_ALLBSD_SOURCE) || defined(_AIX) { int len; SOCKADDR sa; @@ -114,6 +124,14 @@ Java_sun_nio_ch_DatagramChannelImpl_disconnect0(JNIEnv *env, jobject this, #if defined(_ALLBSD_SOURCE) if (rv < 0 && errno == EADDRNOTAVAIL) rv = errno = 0; +#endif +#if defined(_AIX) + /* See W. Richard Stevens, "UNIX Network Programming, Volume 1", p. 254: + * 'Setting the address family to AF_UNSPEC might return EAFNOSUPPORT + * but that is acceptable. + */ + if (rv < 0 && errno == EAFNOSUPPORT) + rv = errno = 0; #endif } #endif @@ -184,17 +202,11 @@ Java_sun_nio_ch_DatagramChannelImpl_receive0(JNIEnv *env, jobject this, if (senderAddr == NULL) { jobject isa = NULL; int port; - jobject ia = NET_SockaddrToInetAddress(env, (struct sockaddr *)&sa, - &port); - + jobject ia = NET_SockaddrToInetAddress(env, (struct sockaddr *)&sa, &port); if (ia != NULL) { isa = (*env)->NewObject(env, isa_class, isa_ctorID, ia, port); } - - if (isa == NULL) { - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); - return IOS_THROWN; - } + CHECK_NULL_RETURN(isa, IOS_THROWN); (*env)->SetObjectField(env, this, dci_senderAddrID, ia); (*env)->SetIntField(env, this, dci_senderPortID, diff --git a/jdk/src/solaris/native/sun/nio/ch/FileDispatcherImpl.c b/jdk/src/solaris/native/sun/nio/ch/FileDispatcherImpl.c index 25beacc3d5d..c9d20112479 100644 --- a/jdk/src/solaris/native/sun/nio/ch/FileDispatcherImpl.c +++ b/jdk/src/solaris/native/sun/nio/ch/FileDispatcherImpl.c @@ -147,6 +147,19 @@ Java_sun_nio_ch_FileDispatcherImpl_force0(JNIEnv *env, jobject this, if (md == JNI_FALSE) { result = fdatasync(fd); } else { +#ifdef _AIX + /* On AIX, calling fsync on a file descriptor that is opened only for + * reading results in an error ("EBADF: The FileDescriptor parameter is + * not a valid file descriptor open for writing."). + * However, at this point it is not possibly anymore to read the + * 'writable' attribute of the corresponding file channel so we have to + * use 'fcntl'. + */ + int getfl = fcntl(fd, F_GETFL); + if (getfl >= 0 && (getfl & O_ACCMODE) == O_RDONLY) { + return 0; + } +#endif result = fsync(fd); } return handle(env, result, "Force failed"); diff --git a/jdk/src/solaris/native/sun/nio/ch/FileKey.c b/jdk/src/solaris/native/sun/nio/ch/FileKey.c index ddb88329eca..bdb42a6324b 100644 --- a/jdk/src/solaris/native/sun/nio/ch/FileKey.c +++ b/jdk/src/solaris/native/sun/nio/ch/FileKey.c @@ -43,8 +43,8 @@ static jfieldID key_st_ino; /* id for FileKey.st_ino */ JNIEXPORT void JNICALL Java_sun_nio_ch_FileKey_initIDs(JNIEnv *env, jclass clazz) { - key_st_dev = (*env)->GetFieldID(env, clazz, "st_dev", "J"); - key_st_ino = (*env)->GetFieldID(env, clazz, "st_ino", "J"); + CHECK_NULL(key_st_dev = (*env)->GetFieldID(env, clazz, "st_dev", "J")); + CHECK_NULL(key_st_ino = (*env)->GetFieldID(env, clazz, "st_ino", "J")); } diff --git a/jdk/src/solaris/native/sun/nio/ch/IOUtil.c b/jdk/src/solaris/native/sun/nio/ch/IOUtil.c index 58ef02014b5..d8bbe849252 100644 --- a/jdk/src/solaris/native/sun/nio/ch/IOUtil.c +++ b/jdk/src/solaris/native/sun/nio/ch/IOUtil.c @@ -35,6 +35,7 @@ #include "java_lang_Integer.h" #include "nio.h" #include "nio_util.h" +#include "net_util.h" static jfieldID fd_fdID; /* for jint 'fd' in java.io.FileDescriptor */ @@ -42,8 +43,9 @@ static jfieldID fd_fdID; /* for jint 'fd' in java.io.FileDescriptor */ JNIEXPORT void JNICALL Java_sun_nio_ch_IOUtil_initIDs(JNIEnv *env, jclass clazz) { - clazz = (*env)->FindClass(env, "java/io/FileDescriptor"); - fd_fdID = (*env)->GetFieldID(env, clazz, "fd", "I"); + CHECK_NULL(clazz = (*env)->FindClass(env, "java/io/FileDescriptor")); + CHECK_NULL(fd_fdID = (*env)->GetFieldID(env, clazz, "fd", "I")); + initInetAddressIDs(env); } JNIEXPORT jboolean JNICALL @@ -145,7 +147,6 @@ Java_sun_nio_ch_IOUtil_iovMax(JNIEnv *env, jclass this) return (jint)iov_max; } - /* Declared in nio_util.h for use elsewhere in NIO */ jint diff --git a/jdk/src/solaris/native/sun/nio/ch/NativeThread.c b/jdk/src/solaris/native/sun/nio/ch/NativeThread.c index 79a91a068ac..5e2a78b7af3 100644 --- a/jdk/src/solaris/native/sun/nio/ch/NativeThread.c +++ b/jdk/src/solaris/native/sun/nio/ch/NativeThread.c @@ -32,27 +32,32 @@ #include "sun_nio_ch_NativeThread.h" #include "nio_util.h" - #ifdef __linux__ -#include -#include - -/* Also defined in src/solaris/native/java/net/linux_close.c */ -#define INTERRUPT_SIGNAL (__SIGRTMAX - 2) + #include + #include + /* Also defined in net/linux_close.c */ + #define INTERRUPT_SIGNAL (__SIGRTMAX - 2) +#elif __solaris__ + #include + #include + #define INTERRUPT_SIGNAL (SIGRTMAX - 2) +#elif _ALLBSD_SOURCE + #include + #include + /* Also defined in net/bsd_close.c */ + #define INTERRUPT_SIGNAL SIGIO +#else + #error "missing platform-specific definition here" +#endif static void nullHandler(int sig) { } -#endif - - JNIEXPORT void JNICALL Java_sun_nio_ch_NativeThread_init(JNIEnv *env, jclass cl) { -#ifdef __linux__ - /* Install the null handler for INTERRUPT_SIGNAL. This might overwrite the * handler previously installed by java/net/linux_close.c, but that's okay * since neither handler actually does anything. We install our own @@ -67,25 +72,27 @@ Java_sun_nio_ch_NativeThread_init(JNIEnv *env, jclass cl) sigemptyset(&sa.sa_mask); if (sigaction(INTERRUPT_SIGNAL, &sa, &osa) < 0) JNU_ThrowIOExceptionWithLastError(env, "sigaction"); - -#endif } JNIEXPORT jlong JNICALL Java_sun_nio_ch_NativeThread_current(JNIEnv *env, jclass cl) { -#ifdef __linux__ - return (long)pthread_self(); +#ifdef __solaris__ + return (jlong)thr_self(); #else - return -1; + return (jlong)pthread_self(); #endif } JNIEXPORT void JNICALL Java_sun_nio_ch_NativeThread_signal(JNIEnv *env, jclass cl, jlong thread) { -#ifdef __linux__ - if (pthread_kill((pthread_t)thread, INTERRUPT_SIGNAL)) - JNU_ThrowIOExceptionWithLastError(env, "Thread signal failed"); + int ret; +#ifdef __solaris__ + ret = thr_kill((thread_t)thread, INTERRUPT_SIGNAL); +#else + ret = pthread_kill((pthread_t)thread, INTERRUPT_SIGNAL); #endif + if (ret != 0) + JNU_ThrowIOExceptionWithLastError(env, "Thread signal failed"); } diff --git a/jdk/src/solaris/native/sun/nio/ch/Net.c b/jdk/src/solaris/native/sun/nio/ch/Net.c index 679a9d8d0da..4bb21396036 100644 --- a/jdk/src/solaris/native/sun/nio/ch/Net.c +++ b/jdk/src/solaris/native/sun/nio/ch/Net.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,6 +23,7 @@ * questions. */ +#include #include #include #include @@ -40,6 +41,9 @@ #include "nio.h" #include "sun_nio_ch_PollArrayWrapper.h" +#ifdef _AIX +#include +#endif /** * IP_MULTICAST_ALL supported since 2.6.31 but may not be available at @@ -47,56 +51,35 @@ */ #ifdef __linux__ #ifndef IP_MULTICAST_ALL - #define IP_MULTICAST_ALL 49 + #define IP_MULTICAST_ALL 49 #endif #endif -#ifdef _ALLBSD_SOURCE - -#ifndef IP_BLOCK_SOURCE - -#define IP_ADD_SOURCE_MEMBERSHIP 70 /* join a source-specific group */ -#define IP_DROP_SOURCE_MEMBERSHIP 71 /* drop a single source */ -#define IP_BLOCK_SOURCE 72 /* block a source */ -#define IP_UNBLOCK_SOURCE 73 /* unblock a source */ - -#endif /* IP_BLOCK_SOURCE */ - -#ifndef MCAST_BLOCK_SOURCE - -#define MCAST_JOIN_SOURCE_GROUP 82 /* join a source-specific group */ -#define MCAST_LEAVE_SOURCE_GROUP 83 /* leave a single source */ -#define MCAST_BLOCK_SOURCE 84 /* block a source */ -#define MCAST_UNBLOCK_SOURCE 85 /* unblock a source */ - -#endif /* MCAST_BLOCK_SOURCE */ - -#ifndef IPV6_ADD_MEMBERSHIP - -#define IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP -#define IPV6_DROP_MEMBERSHIP IPV6_LEAVE_GROUP - -#endif /* IPV6_ADD_MEMBERSHIP */ - -struct my_ip_mreq_source { - struct in_addr imr_multiaddr; - struct in_addr imr_interface; - struct in_addr imr_sourceaddr; -}; - -struct my_group_source_req { - uint32_t gsr_interface; /* interface index */ - struct sockaddr_storage gsr_group; /* group address */ - struct sockaddr_storage gsr_source; /* source address */ -}; - -#else /* _ALLBSD_SOURCE */ - -#define my_ip_mreq_source ip_mreq_source -#define my_group_source_req group_source_req - +/** + * IPV6_ADD_MEMBERSHIP/IPV6_DROP_MEMBERSHIP may not be defined on OSX and AIX + */ +#if defined(__APPLE__) || defined(_AIX) + #ifndef IPV6_ADD_MEMBERSHIP + #define IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP + #define IPV6_DROP_MEMBERSHIP IPV6_LEAVE_GROUP + #endif #endif +#if defined(_AIX) + #ifndef IP_BLOCK_SOURCE + #define IP_BLOCK_SOURCE 58 /* Block data from a given source to a given group */ + #define IP_UNBLOCK_SOURCE 59 /* Unblock data from a given source to a given group */ + #define IP_ADD_SOURCE_MEMBERSHIP 60 /* Join a source-specific group */ + #define IP_DROP_SOURCE_MEMBERSHIP 61 /* Leave a source-specific group */ + #endif + + #ifndef MCAST_BLOCK_SOURCE + #define MCAST_BLOCK_SOURCE 64 + #define MCAST_UNBLOCK_SOURCE 65 + #define MCAST_JOIN_SOURCE_GROUP 66 + #define MCAST_LEAVE_SOURCE_GROUP 67 + #endif +#endif /* _AIX */ #define COPY_INET6_ADDRESS(env, source, target) \ (*env)->GetByteArrayRegion(env, source, 0, 16, target) @@ -107,7 +90,7 @@ struct my_group_source_req { */ #ifdef AF_INET6 static void initGroupSourceReq(JNIEnv* env, jbyteArray group, jint index, - jbyteArray source, struct my_group_source_req* req) + jbyteArray source, struct group_source_req* req) { struct sockaddr_in6* sin6; @@ -123,6 +106,36 @@ static void initGroupSourceReq(JNIEnv* env, jbyteArray group, jint index, } #endif +#ifdef _AIX + +/* + * Checks whether or not "socket extensions for multicast source filters" is supported. + * Returns JNI_TRUE if it is supported, JNI_FALSE otherwise + */ +static jboolean isSourceFilterSupported(){ + static jboolean alreadyChecked = JNI_FALSE; + static jboolean result = JNI_TRUE; + if (alreadyChecked != JNI_TRUE){ + struct utsname uts; + memset(&uts, 0, sizeof(uts)); + strcpy(uts.sysname, "?"); + const int utsRes = uname(&uts); + int major = -1; + int minor = -1; + major = atoi(uts.version); + minor = atoi(uts.release); + if (strcmp(uts.sysname, "AIX") == 0) { + if (major < 6 || (major == 6 && minor < 1)) {// unsupported on aix < 6.1 + result = JNI_FALSE; + } + } + alreadyChecked = JNI_TRUE; + } + return result; +} + +#endif /* _AIX */ + JNIEXPORT void JNICALL Java_sun_nio_ch_Net_initIDs(JNIEnv *env, jclass clazz) { @@ -143,7 +156,7 @@ Java_sun_nio_ch_Net_isExclusiveBindAvailable(JNIEnv *env, jclass clazz) { JNIEXPORT jboolean JNICALL Java_sun_nio_ch_Net_canIPv6SocketJoinIPv4Group0(JNIEnv* env, jclass cl) { -#ifdef MACOSX +#if defined(__APPLE__) || defined(_AIX) /* for now IPv6 sockets cannot join IPv4 multicast groups */ return JNI_FALSE; #else @@ -460,7 +473,7 @@ Java_sun_nio_ch_Net_joinOrDrop4(JNIEnv *env, jobject this, jboolean join, jobjec jint group, jint interf, jint source) { struct ip_mreq mreq; - struct my_ip_mreq_source mreq_source; + struct ip_mreq_source mreq_source; int opt, n, optlen; void* optval; @@ -471,22 +484,25 @@ Java_sun_nio_ch_Net_joinOrDrop4(JNIEnv *env, jobject this, jboolean join, jobjec optval = (void*)&mreq; optlen = sizeof(mreq); } else { -#ifdef MACOSX - /* no IPv4 include-mode filtering for now */ - return IOS_UNAVAILABLE; -#else + +#ifdef _AIX + /* check AIX for support of source filtering */ + if (isSourceFilterSupported() != JNI_TRUE){ + return IOS_UNAVAILABLE; + } +#endif + mreq_source.imr_multiaddr.s_addr = htonl(group); mreq_source.imr_sourceaddr.s_addr = htonl(source); mreq_source.imr_interface.s_addr = htonl(interf); opt = (join) ? IP_ADD_SOURCE_MEMBERSHIP : IP_DROP_SOURCE_MEMBERSHIP; optval = (void*)&mreq_source; optlen = sizeof(mreq_source); -#endif } n = setsockopt(fdval(env,fdo), IPPROTO_IP, opt, optval, optlen); if (n < 0) { - if (join && (errno == ENOPROTOOPT)) + if (join && (errno == ENOPROTOOPT || errno == EOPNOTSUPP)) return IOS_UNAVAILABLE; handleSocketError(env, errno); } @@ -497,14 +513,21 @@ JNIEXPORT jint JNICALL Java_sun_nio_ch_Net_blockOrUnblock4(JNIEnv *env, jobject this, jboolean block, jobject fdo, jint group, jint interf, jint source) { -#ifdef MACOSX +#ifdef __APPLE__ /* no IPv4 exclude-mode filtering for now */ return IOS_UNAVAILABLE; #else - struct my_ip_mreq_source mreq_source; + struct ip_mreq_source mreq_source; int n; int opt = (block) ? IP_BLOCK_SOURCE : IP_UNBLOCK_SOURCE; +#ifdef _AIX + /* check AIX for support of source filtering */ + if (isSourceFilterSupported() != JNI_TRUE){ + return IOS_UNAVAILABLE; + } +#endif + mreq_source.imr_multiaddr.s_addr = htonl(group); mreq_source.imr_sourceaddr.s_addr = htonl(source); mreq_source.imr_interface.s_addr = htonl(interf); @@ -512,7 +535,7 @@ Java_sun_nio_ch_Net_blockOrUnblock4(JNIEnv *env, jobject this, jboolean block, j n = setsockopt(fdval(env,fdo), IPPROTO_IP, opt, (void*)&mreq_source, sizeof(mreq_source)); if (n < 0) { - if (block && (errno == ENOPROTOOPT)) + if (block && (errno == ENOPROTOOPT || errno == EOPNOTSUPP)) return IOS_UNAVAILABLE; handleSocketError(env, errno); } @@ -526,7 +549,7 @@ Java_sun_nio_ch_Net_joinOrDrop6(JNIEnv *env, jobject this, jboolean join, jobjec { #ifdef AF_INET6 struct ipv6_mreq mreq6; - struct my_group_source_req req; + struct group_source_req req; int opt, n, optlen; void* optval; @@ -537,7 +560,7 @@ Java_sun_nio_ch_Net_joinOrDrop6(JNIEnv *env, jobject this, jboolean join, jobjec optval = (void*)&mreq6; optlen = sizeof(mreq6); } else { -#ifdef MACOSX +#ifdef __APPLE__ /* no IPv6 include-mode filtering for now */ return IOS_UNAVAILABLE; #else @@ -550,7 +573,7 @@ Java_sun_nio_ch_Net_joinOrDrop6(JNIEnv *env, jobject this, jboolean join, jobjec n = setsockopt(fdval(env,fdo), IPPROTO_IPV6, opt, optval, optlen); if (n < 0) { - if (join && (errno == ENOPROTOOPT)) + if (join && (errno == ENOPROTOOPT || errno == EOPNOTSUPP)) return IOS_UNAVAILABLE; handleSocketError(env, errno); } @@ -566,11 +589,11 @@ Java_sun_nio_ch_Net_blockOrUnblock6(JNIEnv *env, jobject this, jboolean block, j jbyteArray group, jint index, jbyteArray source) { #ifdef AF_INET6 - #ifdef MACOSX + #ifdef __APPLE__ /* no IPv6 exclude-mode filtering for now */ return IOS_UNAVAILABLE; #else - struct my_group_source_req req; + struct group_source_req req; int n; int opt = (block) ? MCAST_BLOCK_SOURCE : MCAST_UNBLOCK_SOURCE; @@ -579,7 +602,7 @@ Java_sun_nio_ch_Net_blockOrUnblock6(JNIEnv *env, jobject this, jboolean block, j n = setsockopt(fdval(env,fdo), IPPROTO_IPV6, opt, (void*)&req, sizeof(req)); if (n < 0) { - if (block && (errno == ENOPROTOOPT)) + if (block && (errno == ENOPROTOOPT || errno == EOPNOTSUPP)) return IOS_UNAVAILABLE; handleSocketError(env, errno); } @@ -679,6 +702,42 @@ Java_sun_nio_ch_Net_poll(JNIEnv* env, jclass this, jobject fdo, jint events, jlo } } +JNIEXPORT jshort JNICALL +Java_sun_nio_ch_Net_pollinValue(JNIEnv *env, jclass this) +{ + return (jshort)POLLIN; +} + +JNIEXPORT jshort JNICALL +Java_sun_nio_ch_Net_polloutValue(JNIEnv *env, jclass this) +{ + return (jshort)POLLOUT; +} + +JNIEXPORT jshort JNICALL +Java_sun_nio_ch_Net_pollerrValue(JNIEnv *env, jclass this) +{ + return (jshort)POLLERR; +} + +JNIEXPORT jshort JNICALL +Java_sun_nio_ch_Net_pollhupValue(JNIEnv *env, jclass this) +{ + return (jshort)POLLHUP; +} + +JNIEXPORT jshort JNICALL +Java_sun_nio_ch_Net_pollnvalValue(JNIEnv *env, jclass this) +{ + return (jshort)POLLNVAL; +} + +JNIEXPORT jshort JNICALL +Java_sun_nio_ch_Net_pollconnValue(JNIEnv *env, jclass this) +{ + return (jshort)POLLOUT; +} + /* Declared in nio_util.h */ diff --git a/jdk/src/solaris/native/sun/nio/ch/ServerSocketChannelImpl.c b/jdk/src/solaris/native/sun/nio/ch/ServerSocketChannelImpl.c index 7a730cc0b25..e96c9b0cc0a 100644 --- a/jdk/src/solaris/native/sun/nio/ch/ServerSocketChannelImpl.c +++ b/jdk/src/solaris/native/sun/nio/ch/ServerSocketChannelImpl.c @@ -57,12 +57,20 @@ Java_sun_nio_ch_ServerSocketChannelImpl_initIDs(JNIEnv *env, jclass c) jclass cls; cls = (*env)->FindClass(env, "java/io/FileDescriptor"); + CHECK_NULL(cls); fd_fdID = (*env)->GetFieldID(env, cls, "fd", "I"); + CHECK_NULL(fd_fdID); cls = (*env)->FindClass(env, "java/net/InetSocketAddress"); + CHECK_NULL(cls); isa_class = (*env)->NewGlobalRef(env, cls); + if (isa_class == NULL) { + JNU_ThrowOutOfMemoryError(env, NULL); + return; + } isa_ctorID = (*env)->GetMethodID(env, cls, "", "(Ljava/net/InetAddress;I)V"); + CHECK_NULL(isa_ctorID); } JNIEXPORT jint JNICALL @@ -79,6 +87,10 @@ Java_sun_nio_ch_ServerSocketChannelImpl_accept0(JNIEnv *env, jobject this, jint remote_port; NET_AllocSockaddr(&sa, &alloc_len); + if (sa == NULL) { + JNU_ThrowOutOfMemoryError(env, NULL); + return IOS_THROWN; + } /* * accept connection but ignore ECONNABORTED indicating that @@ -110,8 +122,9 @@ Java_sun_nio_ch_ServerSocketChannelImpl_accept0(JNIEnv *env, jobject this, (*env)->SetIntField(env, newfdo, fd_fdID, newfd); remote_ia = NET_SockaddrToInetAddress(env, sa, (int *)&remote_port); free((void *)sa); - isa = (*env)->NewObject(env, isa_class, isa_ctorID, - remote_ia, remote_port); + CHECK_NULL_RETURN(remote_ia, IOS_THROWN); + isa = (*env)->NewObject(env, isa_class, isa_ctorID, remote_ia, remote_port); + CHECK_NULL_RETURN(isa, IOS_THROWN); (*env)->SetObjectArrayElement(env, isaa, 0, isa); return 1; } diff --git a/jdk/src/solaris/native/sun/nio/ch/sctp/SctpChannelImpl.c b/jdk/src/solaris/native/sun/nio/ch/sctp/SctpChannelImpl.c index 225556b4d9f..54e16af7f6b 100644 --- a/jdk/src/solaris/native/sun/nio/ch/sctp/SctpChannelImpl.c +++ b/jdk/src/solaris/native/sun/nio/ch/sctp/SctpChannelImpl.c @@ -214,6 +214,7 @@ void handleSendFailed /* retrieved address from sockaddr */ isaObj = SockAddrToInetSocketAddress(env, sap); + CHECK_NULL(isaObj); /* data retrieved from sff_data */ if (dataLength > 0) { @@ -338,6 +339,7 @@ void handlePeerAddrChange } addressObj = SockAddrToInetSocketAddress(env, (struct sockaddr*)&spc->spc_aaddr); + CHECK_NULL(addressObj); /* create PeerAddressChanged */ resultObj = (*env)->NewObject(env, spc_class, spc_ctrID, spc->spc_assoc_id, @@ -394,6 +396,7 @@ void handleMessage } isa = SockAddrToInetSocketAddress(env, sap); + CHECK_NULL(isa); getControlData(msg, cdata); /* create MessageInfoImpl */ @@ -580,4 +583,3 @@ JNIEXPORT jint JNICALL Java_sun_nio_ch_sctp_SctpChannelImpl_checkConnect return Java_sun_nio_ch_SocketChannelImpl_checkConnect(env, this, fdo, block, ready); } - diff --git a/jdk/src/solaris/native/sun/nio/ch/sctp/SctpNet.c b/jdk/src/solaris/native/sun/nio/ch/sctp/SctpNet.c index 57c4fae4fa5..db97c948ee6 100644 --- a/jdk/src/solaris/native/sun/nio/ch/sctp/SctpNet.c +++ b/jdk/src/solaris/native/sun/nio/ch/sctp/SctpNet.c @@ -157,6 +157,7 @@ Java_sun_nio_ch_sctp_SctpNet_init } preCloseFD = sp[0]; close(sp[1]); + initInetAddressIDs(env); } /* @@ -382,8 +383,9 @@ JNIEXPORT jobjectArray JNICALL Java_sun_nio_ch_sctp_SctpNet_getLocalAddresses0 ia = NET_SockaddrToInetAddress(env, sap, &port); if (ia != NULL) isa = (*env)->NewObject(env, isaCls, isaCtrID, ia, port); - if (isa != NULL) - (*env)->SetObjectArrayElement(env, isaa, i, isa); + if (isa == NULL) + break; + (*env)->SetObjectArrayElement(env, isaa, i, isa); if (sap->sa_family == AF_INET) addr_buf = ((struct sockaddr_in*)addr_buf) + 1; @@ -433,8 +435,9 @@ jobjectArray getRemoteAddresses ia = NET_SockaddrToInetAddress(env, sap, &port); if (ia != NULL) isa = (*env)->NewObject(env, isaCls, isaCtrID, ia, port); - if (isa != NULL) - (*env)->SetObjectArrayElement(env, isaa, i, isa); + if (isa == NULL) + break; + (*env)->SetObjectArrayElement(env, isaa, i, isa); if (sap->sa_family == AF_INET) addr_buf = ((struct sockaddr_in*)addr_buf) + 1; diff --git a/jdk/src/solaris/native/sun/nio/fs/BsdNativeDispatcher.c b/jdk/src/solaris/native/sun/nio/fs/BsdNativeDispatcher.c index 0b4f2a74dff..9453f75d3de 100644 --- a/jdk/src/solaris/native/sun/nio/fs/BsdNativeDispatcher.c +++ b/jdk/src/solaris/native/sun/nio/fs/BsdNativeDispatcher.c @@ -72,13 +72,15 @@ Java_sun_nio_fs_BsdNativeDispatcher_initIDs(JNIEnv* env, jclass this) jclass clazz; clazz = (*env)->FindClass(env, "sun/nio/fs/UnixMountEntry"); - if (clazz == NULL) { - return; - } + CHECK_NULL(clazz); entry_name = (*env)->GetFieldID(env, clazz, "name", "[B"); + CHECK_NULL(entry_name); entry_dir = (*env)->GetFieldID(env, clazz, "dir", "[B"); + CHECK_NULL(entry_dir); entry_fstype = (*env)->GetFieldID(env, clazz, "fstype", "[B"); + CHECK_NULL(entry_fstype); entry_options = (*env)->GetFieldID(env, clazz, "opts", "[B"); + CHECK_NULL(entry_options); } JNIEXPORT jlong JNICALL @@ -201,4 +203,3 @@ Java_sun_nio_fs_BsdNativeDispatcher_endfsstat(JNIEnv* env, jclass this, jlong va free(iter); } } - diff --git a/jdk/src/solaris/native/sun/nio/fs/LinuxNativeDispatcher.c b/jdk/src/solaris/native/sun/nio/fs/LinuxNativeDispatcher.c index 1de7d5b3c98..c8500db5c87 100644 --- a/jdk/src/solaris/native/sun/nio/fs/LinuxNativeDispatcher.c +++ b/jdk/src/solaris/native/sun/nio/fs/LinuxNativeDispatcher.c @@ -68,13 +68,15 @@ Java_sun_nio_fs_LinuxNativeDispatcher_init(JNIEnv *env, jclass clazz) my_flistxattr_func = (flistxattr_func*)dlsym(RTLD_DEFAULT, "flistxattr"); clazz = (*env)->FindClass(env, "sun/nio/fs/UnixMountEntry"); - if (clazz == NULL) - return; - + CHECK_NULL(clazz); entry_name = (*env)->GetFieldID(env, clazz, "name", "[B"); + CHECK_NULL(entry_name); entry_dir = (*env)->GetFieldID(env, clazz, "dir", "[B"); + CHECK_NULL(entry_dir); entry_fstype = (*env)->GetFieldID(env, clazz, "fstype", "[B"); + CHECK_NULL(entry_fstype); entry_options = (*env)->GetFieldID(env, clazz, "opts", "[B"); + CHECK_NULL(entry_options); } JNIEXPORT jint JNICALL diff --git a/jdk/src/solaris/native/sun/nio/fs/SolarisNativeDispatcher.c b/jdk/src/solaris/native/sun/nio/fs/SolarisNativeDispatcher.c index 1480ea9046b..de04bbddc7c 100644 --- a/jdk/src/solaris/native/sun/nio/fs/SolarisNativeDispatcher.c +++ b/jdk/src/solaris/native/sun/nio/fs/SolarisNativeDispatcher.c @@ -55,14 +55,17 @@ static void throwUnixException(JNIEnv* env, int errnum) { JNIEXPORT void JNICALL Java_sun_nio_fs_SolarisNativeDispatcher_init(JNIEnv *env, jclass clazz) { clazz = (*env)->FindClass(env, "sun/nio/fs/UnixMountEntry"); - if (clazz == NULL) - return; - + CHECK_NULL(clazz); entry_name = (*env)->GetFieldID(env, clazz, "name", "[B"); + CHECK_NULL(entry_name); entry_dir = (*env)->GetFieldID(env, clazz, "dir", "[B"); + CHECK_NULL(entry_dir); entry_fstype = (*env)->GetFieldID(env, clazz, "fstype", "[B"); + CHECK_NULL(entry_fstype); entry_options = (*env)->GetFieldID(env, clazz, "opts", "[B"); + CHECK_NULL(entry_options); entry_dev = (*env)->GetFieldID(env, clazz, "dev", "J"); + CHECK_NULL(entry_dev); } JNIEXPORT jint JNICALL diff --git a/jdk/src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c b/jdk/src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c index 8f408951e77..8901376361d 100644 --- a/jdk/src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c +++ b/jdk/src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c @@ -42,7 +42,7 @@ #include #endif -#ifdef __linux__ +#if defined(__linux__) || defined(_AIX) #include #endif @@ -179,46 +179,64 @@ Java_sun_nio_fs_UnixNativeDispatcher_init(JNIEnv* env, jclass this) jclass clazz; clazz = (*env)->FindClass(env, "sun/nio/fs/UnixFileAttributes"); - if (clazz == NULL) { - return 0; - } + CHECK_NULL_RETURN(clazz, 0); attrs_st_mode = (*env)->GetFieldID(env, clazz, "st_mode", "I"); + CHECK_NULL_RETURN(attrs_st_mode, 0); attrs_st_ino = (*env)->GetFieldID(env, clazz, "st_ino", "J"); + CHECK_NULL_RETURN(attrs_st_ino, 0); attrs_st_dev = (*env)->GetFieldID(env, clazz, "st_dev", "J"); + CHECK_NULL_RETURN(attrs_st_dev, 0); attrs_st_rdev = (*env)->GetFieldID(env, clazz, "st_rdev", "J"); + CHECK_NULL_RETURN(attrs_st_rdev, 0); attrs_st_nlink = (*env)->GetFieldID(env, clazz, "st_nlink", "I"); + CHECK_NULL_RETURN(attrs_st_nlink, 0); attrs_st_uid = (*env)->GetFieldID(env, clazz, "st_uid", "I"); + CHECK_NULL_RETURN(attrs_st_uid, 0); attrs_st_gid = (*env)->GetFieldID(env, clazz, "st_gid", "I"); + CHECK_NULL_RETURN(attrs_st_gid, 0); attrs_st_size = (*env)->GetFieldID(env, clazz, "st_size", "J"); + CHECK_NULL_RETURN(attrs_st_size, 0); attrs_st_atime_sec = (*env)->GetFieldID(env, clazz, "st_atime_sec", "J"); + CHECK_NULL_RETURN(attrs_st_atime_sec, 0); attrs_st_atime_nsec = (*env)->GetFieldID(env, clazz, "st_atime_nsec", "J"); + CHECK_NULL_RETURN(attrs_st_atime_nsec, 0); attrs_st_mtime_sec = (*env)->GetFieldID(env, clazz, "st_mtime_sec", "J"); + CHECK_NULL_RETURN(attrs_st_mtime_sec, 0); attrs_st_mtime_nsec = (*env)->GetFieldID(env, clazz, "st_mtime_nsec", "J"); + CHECK_NULL_RETURN(attrs_st_mtime_nsec, 0); attrs_st_ctime_sec = (*env)->GetFieldID(env, clazz, "st_ctime_sec", "J"); + CHECK_NULL_RETURN(attrs_st_ctime_sec, 0); attrs_st_ctime_nsec = (*env)->GetFieldID(env, clazz, "st_ctime_nsec", "J"); + CHECK_NULL_RETURN(attrs_st_ctime_nsec, 0); #ifdef _DARWIN_FEATURE_64_BIT_INODE attrs_st_birthtime_sec = (*env)->GetFieldID(env, clazz, "st_birthtime_sec", "J"); + CHECK_NULL_RETURN(attrs_st_birthtime_sec, 0); #endif clazz = (*env)->FindClass(env, "sun/nio/fs/UnixFileStoreAttributes"); - if (clazz == NULL) { - return 0; - } + CHECK_NULL_RETURN(clazz, 0); attrs_f_frsize = (*env)->GetFieldID(env, clazz, "f_frsize", "J"); + CHECK_NULL_RETURN(attrs_f_frsize, 0); attrs_f_blocks = (*env)->GetFieldID(env, clazz, "f_blocks", "J"); + CHECK_NULL_RETURN(attrs_f_blocks, 0); attrs_f_bfree = (*env)->GetFieldID(env, clazz, "f_bfree", "J"); + CHECK_NULL_RETURN(attrs_f_bfree, 0); attrs_f_bavail = (*env)->GetFieldID(env, clazz, "f_bavail", "J"); + CHECK_NULL_RETURN(attrs_f_bavail, 0); clazz = (*env)->FindClass(env, "sun/nio/fs/UnixMountEntry"); - if (clazz == NULL) { - return 0; - } + CHECK_NULL_RETURN(clazz, 0); entry_name = (*env)->GetFieldID(env, clazz, "name", "[B"); + CHECK_NULL_RETURN(entry_name, 0); entry_dir = (*env)->GetFieldID(env, clazz, "dir", "[B"); + CHECK_NULL_RETURN(entry_dir, 0); entry_fstype = (*env)->GetFieldID(env, clazz, "fstype", "[B"); + CHECK_NULL_RETURN(entry_fstype, 0); entry_options = (*env)->GetFieldID(env, clazz, "opts", "[B"); + CHECK_NULL_RETURN(entry_options, 0); entry_dev = (*env)->GetFieldID(env, clazz, "dev", "J"); + CHECK_NULL_RETURN(entry_dev, 0); /* system calls that might not be available at run time */ @@ -294,7 +312,13 @@ Java_sun_nio_fs_UnixNativeDispatcher_strerror(JNIEnv* env, jclass this, jint err jsize len; jbyteArray bytes; +#ifdef _AIX + /* strerror() is not thread-safe on AIX so we have to use strerror_r() */ + char buffer[256]; + msg = (strerror_r((int)error, buffer, 256) == 0) ? buffer : "Error while calling strerror_r"; +#else msg = strerror((int)error); +#endif len = strlen(msg); bytes = (*env)->NewByteArray(env, len); if (bytes != NULL) { @@ -674,6 +698,15 @@ Java_sun_nio_fs_UnixNativeDispatcher_readdir(JNIEnv* env, jclass this, jlong val /* EINTR not listed as a possible error */ /* TDB: reentrant version probably not required here */ res = readdir64_r(dirp, ptr, &result); + +#ifdef _AIX + /* On AIX, readdir_r() returns EBADF (i.e. '9') and sets 'result' to NULL for the */ + /* directory stream end. Otherwise, 'errno' will contain the error code. */ + if (res != 0) { + res = (result == NULL && res == EBADF) ? 0 : errno; + } +#endif + if (res != 0) { throwUnixException(env, res); return NULL; @@ -877,6 +910,18 @@ Java_sun_nio_fs_UnixNativeDispatcher_statvfs0(JNIEnv* env, jclass this, if (err == -1) { throwUnixException(env, errno); } else { +#ifdef _AIX + /* AIX returns ULONG_MAX in buf.f_blocks for the /proc file system. */ + /* This is too big for a Java signed long and fools various tests. */ + if (buf.f_blocks == ULONG_MAX) { + buf.f_blocks = 0; + } + /* The number of free or available blocks can never exceed the total number of blocks */ + if (buf.f_blocks == 0) { + buf.f_bfree = 0; + buf.f_bavail = 0; + } +#endif (*env)->SetLongField(env, attrs, attrs_f_frsize, long_to_jlong(buf.f_frsize)); (*env)->SetLongField(env, attrs, attrs_f_blocks, long_to_jlong(buf.f_blocks)); (*env)->SetLongField(env, attrs, attrs_f_bfree, long_to_jlong(buf.f_bfree)); diff --git a/jdk/src/solaris/native/sun/security/pkcs11/j2secmod_md.c b/jdk/src/solaris/native/sun/security/pkcs11/j2secmod_md.c index f509c42b559..8b3a62bfdc6 100644 --- a/jdk/src/solaris/native/sun/security/pkcs11/j2secmod_md.c +++ b/jdk/src/solaris/native/sun/security/pkcs11/j2secmod_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -50,7 +50,11 @@ JNIEXPORT jlong JNICALL Java_sun_security_pkcs11_Secmod_nssGetLibraryHandle { const char *libName = (*env)->GetStringUTFChars(env, jLibName, NULL); // look up existing handle only, do not load +#if defined(AIX) + void *hModule = dlopen(libName, RTLD_LAZY); +#else void *hModule = dlopen(libName, RTLD_NOLOAD); +#endif dprintf2("-handle for %s: %u\n", libName, hModule); (*env)->ReleaseStringUTFChars(env, jLibName, libName); return ptr_to_jlong(hModule); diff --git a/jdk/src/windows/classes/sun/awt/Win32GraphicsDevice.java b/jdk/src/windows/classes/sun/awt/Win32GraphicsDevice.java index a38068514c6..d7cfc58e1e8 100644 --- a/jdk/src/windows/classes/sun/awt/Win32GraphicsDevice.java +++ b/jdk/src/windows/classes/sun/awt/Win32GraphicsDevice.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -88,7 +88,7 @@ public class Win32GraphicsDevice extends GraphicsDevice implements // is run as an NT service. To prevent the loading of ddraw.dll // completely, sun.awt.nopixfmt should be set as well. Apps which use // OpenGL w/ Java probably don't want to set this. - String nopixfmt = (String)java.security.AccessController.doPrivileged( + String nopixfmt = java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction("sun.awt.nopixfmt")); pfDisabled = (nopixfmt != null); initIDs(); diff --git a/jdk/src/windows/classes/sun/awt/windows/WPathGraphics.java b/jdk/src/windows/classes/sun/awt/windows/WPathGraphics.java index 80042a15150..1b43fbb379f 100644 --- a/jdk/src/windows/classes/sun/awt/windows/WPathGraphics.java +++ b/jdk/src/windows/classes/sun/awt/windows/WPathGraphics.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -94,7 +94,7 @@ class WPathGraphics extends PathGraphics { private static boolean preferGDITextLayout = false; static { String textLayoutStr = - (String)java.security.AccessController.doPrivileged( + java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction( "sun.java2d.print.enableGDITextLayout")); diff --git a/jdk/src/windows/classes/sun/io/Win32ErrorMode.java b/jdk/src/windows/classes/sun/io/Win32ErrorMode.java index d11a63b1096..8ec417fd6e2 100644 --- a/jdk/src/windows/classes/sun/io/Win32ErrorMode.java +++ b/jdk/src/windows/classes/sun/io/Win32ErrorMode.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -67,7 +67,7 @@ public class Win32ErrorMode { */ public static void initialize() { if (!sun.misc.VM.isBooted()) { - String s = (String) System.getProperty("sun.io.allowCriticalErrorMessageBox"); + String s = System.getProperty("sun.io.allowCriticalErrorMessageBox"); if (s == null || s.equals(Boolean.FALSE.toString())) { long mode = setErrorMode(0); mode |= SEM_FAILCRITICALERRORS; diff --git a/jdk/src/windows/classes/sun/java2d/d3d/D3DBufImgOps.java b/jdk/src/windows/classes/sun/java2d/d3d/D3DBufImgOps.java index c2dee96aaef..890bb87d66b 100644 --- a/jdk/src/windows/classes/sun/java2d/d3d/D3DBufImgOps.java +++ b/jdk/src/windows/classes/sun/java2d/d3d/D3DBufImgOps.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, 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 @@ -78,12 +78,12 @@ class D3DBufImgOps extends BufferedBufImgOps { } SurfaceData srcData = - dstData.getSourceSurfaceData(img, sg.TRANSFORM_ISIDENT, + dstData.getSourceSurfaceData(img, SunGraphics2D.TRANSFORM_ISIDENT, CompositeType.SrcOver, null); if (!(srcData instanceof D3DSurfaceData)) { // REMIND: this hack tries to ensure that we have a cached texture srcData = - dstData.getSourceSurfaceData(img, sg.TRANSFORM_ISIDENT, + dstData.getSourceSurfaceData(img, SunGraphics2D.TRANSFORM_ISIDENT, CompositeType.SrcOver, null); if (!(srcData instanceof D3DSurfaceData)) { return false; diff --git a/jdk/src/windows/classes/sun/java2d/d3d/D3DDrawImage.java b/jdk/src/windows/classes/sun/java2d/d3d/D3DDrawImage.java index 8bfac53732b..f814dc2f613 100644 --- a/jdk/src/windows/classes/sun/java2d/d3d/D3DDrawImage.java +++ b/jdk/src/windows/classes/sun/java2d/d3d/D3DDrawImage.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -53,7 +53,7 @@ public class D3DDrawImage extends DrawImage { SurfaceData dstData = sg.surfaceData; SurfaceData srcData = dstData.getSourceSurfaceData(img, - sg.TRANSFORM_GENERIC, + SunGraphics2D.TRANSFORM_GENERIC, sg.imageComp, bgColor); diff --git a/jdk/src/windows/classes/sun/java2d/d3d/D3DGraphicsDevice.java b/jdk/src/windows/classes/sun/java2d/d3d/D3DGraphicsDevice.java index 2012b19e700..bf6134648c3 100644 --- a/jdk/src/windows/classes/sun/java2d/d3d/D3DGraphicsDevice.java +++ b/jdk/src/windows/classes/sun/java2d/d3d/D3DGraphicsDevice.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, 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 @@ -235,10 +235,12 @@ public class D3DGraphicsDevice extends Win32GraphicsDevice { */ private static class D3DFSWindowAdapter extends WindowAdapter { @Override + @SuppressWarnings("static") public void windowDeactivated(WindowEvent e) { D3DRenderQueue.getInstance().restoreDevices(); } @Override + @SuppressWarnings("static") public void windowActivated(WindowEvent e) { D3DRenderQueue.getInstance().restoreDevices(); } diff --git a/jdk/src/windows/classes/sun/java2d/d3d/D3DPaints.java b/jdk/src/windows/classes/sun/java2d/d3d/D3DPaints.java index 53e59762c23..b328ce3a083 100644 --- a/jdk/src/windows/classes/sun/java2d/d3d/D3DPaints.java +++ b/jdk/src/windows/classes/sun/java2d/d3d/D3DPaints.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, 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 @@ -132,14 +132,14 @@ abstract class D3DPaints { } SurfaceData srcData = - dstData.getSourceSurfaceData(bi, sg2d.TRANSFORM_ISIDENT, + dstData.getSourceSurfaceData(bi, SunGraphics2D.TRANSFORM_ISIDENT, CompositeType.SrcOver, null); if (!(srcData instanceof D3DSurfaceData)) { // REMIND: this is a hack that attempts to cache the system // memory image from the TexturePaint instance into a // D3D texture... srcData = - dstData.getSourceSurfaceData(bi, sg2d.TRANSFORM_ISIDENT, + dstData.getSourceSurfaceData(bi, SunGraphics2D.TRANSFORM_ISIDENT, CompositeType.SrcOver, null); if (!(srcData instanceof D3DSurfaceData)) { return false; diff --git a/jdk/src/windows/classes/sun/java2d/d3d/D3DSurfaceData.java b/jdk/src/windows/classes/sun/java2d/d3d/D3DSurfaceData.java index d37db9e925b..ffab9092a5a 100644 --- a/jdk/src/windows/classes/sun/java2d/d3d/D3DSurfaceData.java +++ b/jdk/src/windows/classes/sun/java2d/d3d/D3DSurfaceData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, 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 @@ -542,7 +542,7 @@ public class D3DSurfaceData extends SurfaceData implements AccelSurface { // REMIND: the D3D pipeline doesn't support XOR!, more // fixes will be needed below. For now we disable D3D rendering // for the surface which had any XOR rendering done to. - if (sg2d.compositeState >= sg2d.COMP_XOR) { + if (sg2d.compositeState >= SunGraphics2D.COMP_XOR) { super.validatePipe(sg2d); sg2d.imagepipe = d3dImagePipe; disableAccelerationForSurface(); @@ -557,18 +557,18 @@ public class D3DSurfaceData extends SurfaceData implements AccelSurface { // by the CompositeType.SrcNoEa (any color) test below.) if (/* CompositeType.SrcNoEa (any color) */ - (sg2d.compositeState <= sg2d.COMP_ISCOPY && - sg2d.paintState <= sg2d.PAINT_ALPHACOLOR) || + (sg2d.compositeState <= SunGraphics2D.COMP_ISCOPY && + sg2d.paintState <= SunGraphics2D.PAINT_ALPHACOLOR) || /* CompositeType.SrcOver (any color) */ - (sg2d.compositeState == sg2d.COMP_ALPHA && - sg2d.paintState <= sg2d.PAINT_ALPHACOLOR && + (sg2d.compositeState == SunGraphics2D.COMP_ALPHA && + sg2d.paintState <= SunGraphics2D.PAINT_ALPHACOLOR && (((AlphaComposite)sg2d.composite).getRule() == AlphaComposite.SRC_OVER)) || /* CompositeType.Xor (any color) */ - (sg2d.compositeState == sg2d.COMP_XOR && - sg2d.paintState <= sg2d.PAINT_ALPHACOLOR)) + (sg2d.compositeState == SunGraphics2D.COMP_XOR && + sg2d.paintState <= SunGraphics2D.PAINT_ALPHACOLOR)) { textpipe = d3dTextPipe; } else { @@ -583,12 +583,12 @@ public class D3DSurfaceData extends SurfaceData implements AccelSurface { D3DRenderer nonTxPipe = null; if (sg2d.antialiasHint != SunHints.INTVAL_ANTIALIAS_ON) { - if (sg2d.paintState <= sg2d.PAINT_ALPHACOLOR) { - if (sg2d.compositeState <= sg2d.COMP_XOR) { + if (sg2d.paintState <= SunGraphics2D.PAINT_ALPHACOLOR) { + if (sg2d.compositeState <= SunGraphics2D.COMP_XOR) { txPipe = d3dTxRenderPipe; nonTxPipe = d3dRenderPipe; } - } else if (sg2d.compositeState <= sg2d.COMP_ALPHA) { + } else if (sg2d.compositeState <= SunGraphics2D.COMP_ALPHA) { if (D3DPaints.isValid(sg2d)) { txPipe = d3dTxRenderPipe; nonTxPipe = d3dRenderPipe; @@ -596,7 +596,7 @@ public class D3DSurfaceData extends SurfaceData implements AccelSurface { // custom paints handled by super.validatePipe() below } } else { - if (sg2d.paintState <= sg2d.PAINT_ALPHACOLOR) { + if (sg2d.paintState <= SunGraphics2D.PAINT_ALPHACOLOR) { if (graphicsDevice.isCapPresent(CAPS_AA_SHADER) && (sg2d.imageComp == CompositeType.SrcOverNoEa || sg2d.imageComp == CompositeType.SrcOver)) @@ -613,7 +613,7 @@ public class D3DSurfaceData extends SurfaceData implements AccelSurface { sg2d.drawpipe = aaConverter; sg2d.fillpipe = aaConverter; sg2d.shapepipe = aaConverter; - } else if (sg2d.compositeState == sg2d.COMP_XOR) { + } else if (sg2d.compositeState == SunGraphics2D.COMP_XOR) { // install the solid pipes when AA and XOR are both enabled txPipe = d3dTxRenderPipe; nonTxPipe = d3dRenderPipe; @@ -623,10 +623,10 @@ public class D3DSurfaceData extends SurfaceData implements AccelSurface { } if (txPipe != null) { - if (sg2d.transformState >= sg2d.TRANSFORM_TRANSLATESCALE) { + if (sg2d.transformState >= SunGraphics2D.TRANSFORM_TRANSLATESCALE) { sg2d.drawpipe = txPipe; sg2d.fillpipe = txPipe; - } else if (sg2d.strokeState != sg2d.STROKE_THIN) { + } else if (sg2d.strokeState != SunGraphics2D.STROKE_THIN) { sg2d.drawpipe = txPipe; sg2d.fillpipe = nonTxPipe; } else { @@ -653,7 +653,7 @@ public class D3DSurfaceData extends SurfaceData implements AccelSurface { @Override protected MaskFill getMaskFill(SunGraphics2D sg2d) { - if (sg2d.paintState > sg2d.PAINT_ALPHACOLOR) { + if (sg2d.paintState > SunGraphics2D.PAINT_ALPHACOLOR) { /* * We can only accelerate non-Color MaskFill operations if * all of the following conditions hold true: @@ -678,8 +678,8 @@ public class D3DSurfaceData extends SurfaceData implements AccelSurface { public boolean copyArea(SunGraphics2D sg2d, int x, int y, int w, int h, int dx, int dy) { - if (sg2d.transformState < sg2d.TRANSFORM_TRANSLATESCALE && - sg2d.compositeState < sg2d.COMP_XOR) + if (sg2d.transformState < SunGraphics2D.TRANSFORM_TRANSLATESCALE && + sg2d.compositeState < SunGraphics2D.COMP_XOR) { x += sg2d.transX; y += sg2d.transY; @@ -738,7 +738,7 @@ public class D3DSurfaceData extends SurfaceData implements AccelSurface { D3DRenderQueue rq = D3DRenderQueue.getInstance(); // swapBuffers can be called from the toolkit thread by swing, we // should detect this and prevent the deadlocks - if (rq.isRenderQueueThread()) { + if (D3DRenderQueue.isRenderQueueThread()) { if (!rq.tryLock()) { // if we could not obtain the lock, repaint the area // that was supposed to be swapped, and no-op this swap diff --git a/jdk/src/windows/classes/sun/java2d/d3d/D3DSurfaceDataProxy.java b/jdk/src/windows/classes/sun/java2d/d3d/D3DSurfaceDataProxy.java index 46b1446c975..66e98882a19 100644 --- a/jdk/src/windows/classes/sun/java2d/d3d/D3DSurfaceDataProxy.java +++ b/jdk/src/windows/classes/sun/java2d/d3d/D3DSurfaceDataProxy.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -72,7 +72,7 @@ public class D3DSurfaceDataProxy extends SurfaceDataProxy { try { cachedData = d3dgc.createManagedSurface(w, h, transparency); } catch (InvalidPipeException e) { - if (!d3dgc.getD3DDevice().isD3DAvailable()) { + if (!D3DGraphicsDevice.isD3DAvailable()) { invalidate(); flush(); return null; diff --git a/jdk/src/windows/classes/sun/java2d/windows/GDIRenderer.java b/jdk/src/windows/classes/sun/java2d/windows/GDIRenderer.java index bb3e2725700..5971c09cdd6 100644 --- a/jdk/src/windows/classes/sun/java2d/windows/GDIRenderer.java +++ b/jdk/src/windows/classes/sun/java2d/windows/GDIRenderer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -264,7 +264,7 @@ public class GDIRenderer implements Path2D.Float p2df; int transX; int transY; - if (sg2d.transformState <= sg2d.TRANSFORM_INT_TRANSLATE) { + if (sg2d.transformState <= SunGraphics2D.TRANSFORM_INT_TRANSLATE) { if (s instanceof Path2D.Float) { p2df = (Path2D.Float)s; } else { @@ -308,9 +308,9 @@ public class GDIRenderer implements } public void draw(SunGraphics2D sg2d, Shape s) { - if (sg2d.strokeState == sg2d.STROKE_THIN) { + if (sg2d.strokeState == SunGraphics2D.STROKE_THIN) { doShape(sg2d, s, false); - } else if (sg2d.strokeState < sg2d.STROKE_CUSTOM) { + } else if (sg2d.strokeState < SunGraphics2D.STROKE_CUSTOM) { ShapeSpanIterator si = LoopPipe.getStrokeSpans(sg2d, s); try { doFillSpans(sg2d, si); diff --git a/jdk/src/windows/classes/sun/java2d/windows/GDIWindowSurfaceData.java b/jdk/src/windows/classes/sun/java2d/windows/GDIWindowSurfaceData.java index deaf9c60e0d..49d9261bbd3 100644 --- a/jdk/src/windows/classes/sun/java2d/windows/GDIWindowSurfaceData.java +++ b/jdk/src/windows/classes/sun/java2d/windows/GDIWindowSurfaceData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -153,11 +153,11 @@ public class GDIWindowSurfaceData extends SurfaceData { public void validatePipe(SunGraphics2D sg2d) { if (sg2d.antialiasHint != SunHints.INTVAL_ANTIALIAS_ON && - sg2d.paintState <= sg2d.PAINT_ALPHACOLOR && - (sg2d.compositeState <= sg2d.COMP_ISCOPY || - sg2d.compositeState == sg2d.COMP_XOR)) + sg2d.paintState <= SunGraphics2D.PAINT_ALPHACOLOR && + (sg2d.compositeState <= SunGraphics2D.COMP_ISCOPY || + sg2d.compositeState == SunGraphics2D.COMP_XOR)) { - if (sg2d.clipState == sg2d.CLIP_SHAPE) { + if (sg2d.clipState == SunGraphics2D.CLIP_SHAPE) { // Do this to init textpipe correctly; we will override the // other non-text pipes below // REMIND: we should clean this up eventually instead of @@ -194,10 +194,10 @@ public class GDIWindowSurfaceData extends SurfaceData { } } sg2d.imagepipe = imagepipe; - if (sg2d.transformState >= sg2d.TRANSFORM_TRANSLATESCALE) { + if (sg2d.transformState >= SunGraphics2D.TRANSFORM_TRANSLATESCALE) { sg2d.drawpipe = gdiTxPipe; sg2d.fillpipe = gdiTxPipe; - } else if (sg2d.strokeState != sg2d.STROKE_THIN){ + } else if (sg2d.strokeState != SunGraphics2D.STROKE_THIN){ sg2d.drawpipe = gdiTxPipe; sg2d.fillpipe = gdiPipe; } else { @@ -220,8 +220,8 @@ public class GDIWindowSurfaceData extends SurfaceData { } public RenderLoops getRenderLoops(SunGraphics2D sg2d) { - if (sg2d.paintState <= sg2d.PAINT_ALPHACOLOR && - sg2d.compositeState <= sg2d.COMP_ISCOPY) + if (sg2d.paintState <= SunGraphics2D.PAINT_ALPHACOLOR && + sg2d.compositeState <= SunGraphics2D.COMP_ISCOPY) { return solidloops; } @@ -295,8 +295,8 @@ public class GDIWindowSurfaceData extends SurfaceData { int x, int y, int w, int h, int dx, int dy) { CompositeType comptype = sg2d.imageComp; - if (sg2d.transformState < sg2d.TRANSFORM_TRANSLATESCALE && - sg2d.clipState != sg2d.CLIP_SHAPE && + if (sg2d.transformState < SunGraphics2D.TRANSFORM_TRANSLATESCALE && + sg2d.clipState != SunGraphics2D.CLIP_SHAPE && (CompositeType.SrcOverNoEa.equals(comptype) || CompositeType.SrcNoEa.equals(comptype))) { diff --git a/jdk/src/windows/classes/sun/management/OperatingSystemImpl.java b/jdk/src/windows/classes/sun/management/OperatingSystemImpl.java index ca766448177..f24ef7d9653 100644 --- a/jdk/src/windows/classes/sun/management/OperatingSystemImpl.java +++ b/jdk/src/windows/classes/sun/management/OperatingSystemImpl.java @@ -50,18 +50,48 @@ class OperatingSystemImpl extends BaseOperatingSystemImpl return getCommittedVirtualMemorySize0(); } } - private native long getCommittedVirtualMemorySize0(); - public native long getTotalSwapSpaceSize(); - public native long getFreeSwapSpaceSize(); - public native long getProcessCpuTime(); - public native long getFreePhysicalMemorySize(); - public native long getTotalPhysicalMemorySize(); - public native double getSystemCpuLoad(); - public native double getProcessCpuLoad(); + public long getTotalSwapSpaceSize() { + return getTotalSwapSpaceSize0(); + } + + public long getFreeSwapSpaceSize() { + return getFreeSwapSpaceSize0(); + } + + public long getProcessCpuTime() { + return getProcessCpuTime0(); + } + + public long getFreePhysicalMemorySize() { + return getFreePhysicalMemorySize0(); + } + + public long getTotalPhysicalMemorySize() { + return getTotalPhysicalMemorySize0(); + } + + public double getSystemCpuLoad() { + return getSystemCpuLoad0(); + } + + public double getProcessCpuLoad() { + return getProcessCpuLoad0(); + } + + /* native methods */ + private native long getCommittedVirtualMemorySize0(); + private native long getFreePhysicalMemorySize0(); + private native long getFreeSwapSpaceSize0(); + private native double getProcessCpuLoad0(); + private native long getProcessCpuTime0(); + private native double getSystemCpuLoad0(); + private native long getTotalPhysicalMemorySize0(); + private native long getTotalSwapSpaceSize0(); static { - initialize(); + initialize0(); } - private static native void initialize(); + + private static native void initialize0(); } diff --git a/jdk/src/windows/classes/sun/nio/ch/PollArrayWrapper.java b/jdk/src/windows/classes/sun/nio/ch/PollArrayWrapper.java index 89455769485..08591f82061 100644 --- a/jdk/src/windows/classes/sun/nio/ch/PollArrayWrapper.java +++ b/jdk/src/windows/classes/sun/nio/ch/PollArrayWrapper.java @@ -53,15 +53,6 @@ class PollArrayWrapper { static short SIZE_POLLFD = 8; // sizeof pollfd struct - // events masks - @Native static final short POLLIN = AbstractPollArrayWrapper.POLLIN; - @Native static final short POLLOUT = AbstractPollArrayWrapper.POLLOUT; - @Native static final short POLLERR = AbstractPollArrayWrapper.POLLERR; - @Native static final short POLLHUP = AbstractPollArrayWrapper.POLLHUP; - @Native static final short POLLNVAL = AbstractPollArrayWrapper.POLLNVAL; - @Native static final short POLLREMOVE = AbstractPollArrayWrapper.POLLREMOVE; - @Native static final short POLLCONN = 0x0002; - private int size; // Size of the pollArray PollArrayWrapper(int newSize) { @@ -119,6 +110,6 @@ class PollArrayWrapper { // Adds Windows wakeup socket at a given index. void addWakeupSocket(int fdVal, int index) { putDescriptor(index, fdVal); - putEventOps(index, POLLIN); + putEventOps(index, Net.POLLIN); } } diff --git a/jdk/src/windows/classes/sun/nio/ch/SinkChannelImpl.java b/jdk/src/windows/classes/sun/nio/ch/SinkChannelImpl.java index 1450928a816..57e88ac38cf 100644 --- a/jdk/src/windows/classes/sun/nio/ch/SinkChannelImpl.java +++ b/jdk/src/windows/classes/sun/nio/ch/SinkChannelImpl.java @@ -78,17 +78,16 @@ class SinkChannelImpl int oldOps = sk.nioReadyOps(); int newOps = initialOps; - if ((ops & PollArrayWrapper.POLLNVAL) != 0) + if ((ops & Net.POLLNVAL) != 0) throw new Error("POLLNVAL detected"); - if ((ops & (PollArrayWrapper.POLLERR - | PollArrayWrapper.POLLHUP)) != 0) { + if ((ops & (Net.POLLERR | Net.POLLHUP)) != 0) { newOps = intOps; sk.nioReadyOps(newOps); return (newOps & ~oldOps) != 0; } - if (((ops & PollArrayWrapper.POLLOUT) != 0) && + if (((ops & Net.POLLOUT) != 0) && ((intOps & SelectionKey.OP_WRITE) != 0)) newOps |= SelectionKey.OP_WRITE; @@ -106,7 +105,7 @@ class SinkChannelImpl public void translateAndSetInterestOps(int ops, SelectionKeyImpl sk) { if ((ops & SelectionKey.OP_WRITE) != 0) - ops = PollArrayWrapper.POLLOUT; + ops = Net.POLLOUT; sk.selector.putEventOps(sk, ops); } diff --git a/jdk/src/windows/classes/sun/nio/ch/SourceChannelImpl.java b/jdk/src/windows/classes/sun/nio/ch/SourceChannelImpl.java index da45df639af..2605d61b47c 100644 --- a/jdk/src/windows/classes/sun/nio/ch/SourceChannelImpl.java +++ b/jdk/src/windows/classes/sun/nio/ch/SourceChannelImpl.java @@ -77,17 +77,16 @@ class SourceChannelImpl int oldOps = sk.nioReadyOps(); int newOps = initialOps; - if ((ops & PollArrayWrapper.POLLNVAL) != 0) + if ((ops & Net.POLLNVAL) != 0) throw new Error("POLLNVAL detected"); - if ((ops & (PollArrayWrapper.POLLERR - | PollArrayWrapper.POLLHUP)) != 0) { + if ((ops & (Net.POLLERR | Net.POLLHUP)) != 0) { newOps = intOps; sk.nioReadyOps(newOps); return (newOps & ~oldOps) != 0; } - if (((ops & PollArrayWrapper.POLLIN) != 0) && + if (((ops & Net.POLLIN) != 0) && ((intOps & SelectionKey.OP_READ) != 0)) newOps |= SelectionKey.OP_READ; @@ -105,7 +104,7 @@ class SourceChannelImpl public void translateAndSetInterestOps(int ops, SelectionKeyImpl sk) { if ((ops & SelectionKey.OP_READ) != 0) - ops = PollArrayWrapper.POLLIN; + ops = Net.POLLIN; sk.selector.putEventOps(sk, ops); } diff --git a/jdk/src/windows/classes/sun/nio/ch/WindowsSelectorImpl.java b/jdk/src/windows/classes/sun/nio/ch/WindowsSelectorImpl.java index d84712ba97c..eec35ea9518 100644 --- a/jdk/src/windows/classes/sun/nio/ch/WindowsSelectorImpl.java +++ b/jdk/src/windows/classes/sun/nio/ch/WindowsSelectorImpl.java @@ -313,16 +313,16 @@ final class WindowsSelectorImpl extends SelectorImpl { private int processSelectedKeys(long updateCount) { int numKeysUpdated = 0; numKeysUpdated += processFDSet(updateCount, readFds, - PollArrayWrapper.POLLIN, + Net.POLLIN, false); numKeysUpdated += processFDSet(updateCount, writeFds, - PollArrayWrapper.POLLCONN | - PollArrayWrapper.POLLOUT, + Net.POLLCONN | + Net.POLLOUT, false); numKeysUpdated += processFDSet(updateCount, exceptFds, - PollArrayWrapper.POLLIN | - PollArrayWrapper.POLLCONN | - PollArrayWrapper.POLLOUT, + Net.POLLIN | + Net.POLLCONN | + Net.POLLOUT, true); return numKeysUpdated; } diff --git a/jdk/src/windows/classes/sun/print/Win32PrintJob.java b/jdk/src/windows/classes/sun/print/Win32PrintJob.java index 844f3ee4f22..570d23a91d2 100644 --- a/jdk/src/windows/classes/sun/print/Win32PrintJob.java +++ b/jdk/src/windows/classes/sun/print/Win32PrintJob.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -308,12 +308,10 @@ public class Win32PrintJob implements CancelablePrintJob { } } - PrinterState prnState = (PrinterState)service.getAttribute( - PrinterState.class); + PrinterState prnState = service.getAttribute(PrinterState.class); if (prnState == PrinterState.STOPPED) { PrinterStateReasons prnStateReasons = - (PrinterStateReasons)service.getAttribute( - PrinterStateReasons.class); + service.getAttribute(PrinterStateReasons.class); if ((prnStateReasons != null) && (prnStateReasons.containsKey(PrinterStateReason.SHUTDOWN))) { @@ -321,9 +319,8 @@ public class Win32PrintJob implements CancelablePrintJob { } } - if ((PrinterIsAcceptingJobs)(service.getAttribute( - PrinterIsAcceptingJobs.class)) == - PrinterIsAcceptingJobs.NOT_ACCEPTING_JOBS) { + if (service.getAttribute(PrinterIsAcceptingJobs.class) == + PrinterIsAcceptingJobs.NOT_ACCEPTING_JOBS) { throw new PrintException("Printer is not accepting job."); } diff --git a/jdk/src/windows/classes/sun/print/Win32PrintService.java b/jdk/src/windows/classes/sun/print/Win32PrintService.java index 73e89269285..1fc7fe46f54 100644 --- a/jdk/src/windows/classes/sun/print/Win32PrintService.java +++ b/jdk/src/windows/classes/sun/print/Win32PrintService.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -506,8 +506,7 @@ public class Win32PrintService implements PrintService, AttributeUpdater, } } else { // if getting MPA failed, we use MediaSize - MediaSize ms = - MediaSize.getMediaSizeForName((MediaSizeName)mediaName); + MediaSize ms = MediaSize.getMediaSizeForName(mediaName); if (ms != null) { try { diff --git a/jdk/src/windows/native/com/sun/security/auth/module/nt.c b/jdk/src/windows/native/com/sun/security/auth/module/nt.c index 64ef356e1dc..72c0ef84f33 100644 --- a/jdk/src/windows/native/com/sun/security/auth/module/nt.c +++ b/jdk/src/windows/native/com/sun/security/auth/module/nt.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -589,7 +589,8 @@ BOOL getImpersonationToken(PHANDLE impersonationToken) { CloseHandle(dupToken); if (debug) { - printf(" [getImpersonationToken] token = %d\n", *impersonationToken); + printf(" [getImpersonationToken] token = %p\n", + (void *)*impersonationToken); } return TRUE; } diff --git a/jdk/src/windows/native/java/io/FileDescriptor_md.c b/jdk/src/windows/native/java/io/FileDescriptor_md.c index 221bf1d9217..db04cd47653 100644 --- a/jdk/src/windows/native/java/io/FileDescriptor_md.c +++ b/jdk/src/windows/native/java/io/FileDescriptor_md.c @@ -48,8 +48,8 @@ jfieldID IO_handle_fdID; JNIEXPORT void JNICALL Java_java_io_FileDescriptor_initIDs(JNIEnv *env, jclass fdClass) { - IO_fd_fdID = (*env)->GetFieldID(env, fdClass, "fd", "I"); - IO_handle_fdID = (*env)->GetFieldID(env, fdClass, "handle", "J"); + CHECK_NULL(IO_fd_fdID = (*env)->GetFieldID(env, fdClass, "fd", "I")); + CHECK_NULL(IO_handle_fdID = (*env)->GetFieldID(env, fdClass, "handle", "J")); } JNIEXPORT jlong JNICALL diff --git a/jdk/src/windows/native/java/io/WinNTFileSystem_md.c b/jdk/src/windows/native/java/io/WinNTFileSystem_md.c index 3c8b821e027..ec7d9d7294b 100644 --- a/jdk/src/windows/native/java/io/WinNTFileSystem_md.c +++ b/jdk/src/windows/native/java/io/WinNTFileSystem_md.c @@ -59,10 +59,12 @@ JNIEXPORT void JNICALL Java_java_io_WinNTFileSystem_initIDs(JNIEnv *env, jclass cls) { HMODULE handle; - jclass fileClass = (*env)->FindClass(env, "java/io/File"); - if (!fileClass) return; - ids.path = - (*env)->GetFieldID(env, fileClass, "path", "Ljava/lang/String;"); + jclass fileClass; + + fileClass = (*env)->FindClass(env, "java/io/File"); + CHECK_NULL(fileClass); + ids.path = (*env)->GetFieldID(env, fileClass, "path", "Ljava/lang/String;"); + CHECK_NULL(ids.path); // GetFinalPathNameByHandle requires Windows Vista or newer if (GetModuleHandleExW((GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | @@ -243,8 +245,8 @@ Java_java_io_WinNTFileSystem_canonicalize0(JNIEnv *env, jobject this, WCHAR canonicalPath[MAX_PATH_LENGTH]; WITH_UNICODE_STRING(env, pathname, path) { - /*we estimate the max length of memory needed as - "currentDir. length + pathname.length" + /* we estimate the max length of memory needed as + "currentDir. length + pathname.length" */ int len = (int)wcslen(path); len += currentDirLength(path, len); @@ -256,12 +258,11 @@ Java_java_io_WinNTFileSystem_canonicalize0(JNIEnv *env, jobject this, } free(cp); } - } else - if (wcanonicalize(path, canonicalPath, MAX_PATH_LENGTH) >= 0) { + } else if (wcanonicalize(path, canonicalPath, MAX_PATH_LENGTH) >= 0) { rv = (*env)->NewString(env, canonicalPath, (jsize)wcslen(canonicalPath)); } } END_UNICODE_STRING(env, path); - if (rv == NULL) { + if (rv == NULL && !(*env)->ExceptionCheck(env)) { JNU_ThrowIOExceptionWithLastError(env, "Bad pathname"); } return rv; @@ -288,15 +289,14 @@ Java_java_io_WinNTFileSystem_canonicalizeWithPrefix0(JNIEnv *env, jobject this, } free(cp); } - } else - if (wcanonicalizeWithPrefix(canonicalPrefix, - pathWithCanonicalPrefix, - canonicalPath, MAX_PATH_LENGTH) >= 0) { + } else if (wcanonicalizeWithPrefix(canonicalPrefix, + pathWithCanonicalPrefix, + canonicalPath, MAX_PATH_LENGTH) >= 0) { rv = (*env)->NewString(env, canonicalPath, (jsize)wcslen(canonicalPath)); } } END_UNICODE_STRING(env, pathWithCanonicalPrefix); } END_UNICODE_STRING(env, canonicalPrefix); - if (rv == NULL) { + if (rv == NULL && !(*env)->ExceptionCheck(env)) { JNU_ThrowIOExceptionWithLastError(env, "Bad pathname"); } return rv; @@ -616,8 +616,13 @@ Java_java_io_WinNTFileSystem_list(JNIEnv *env, jobject this, jobject file) jobjectArray rv, old; DWORD fattr; jstring name; + jclass str_class; + WCHAR *pathbuf; - WCHAR *pathbuf = fileToNTPath(env, file, ids.path); + str_class = JNU_ClassString(env); + CHECK_NULL_RETURN(str_class, NULL); + + pathbuf = fileToNTPath(env, file, ids.path); if (pathbuf == NULL) return NULL; search_path = (WCHAR*)malloc(2*wcslen(pathbuf) + 6); @@ -664,7 +669,7 @@ Java_java_io_WinNTFileSystem_list(JNIEnv *env, jobject this, jobject file) return NULL; } else { // No files found - return an empty array - rv = (*env)->NewObjectArray(env, 0, JNU_ClassString(env), NULL); + rv = (*env)->NewObjectArray(env, 0, str_class, NULL); return rv; } } @@ -672,7 +677,7 @@ Java_java_io_WinNTFileSystem_list(JNIEnv *env, jobject this, jobject file) /* Allocate an initial String array */ len = 0; maxlen = 16; - rv = (*env)->NewObjectArray(env, maxlen, JNU_ClassString(env), NULL); + rv = (*env)->NewObjectArray(env, maxlen, str_class, NULL); if (rv == NULL) // Couldn't allocate an array return NULL; /* Scan the directory */ @@ -686,10 +691,8 @@ Java_java_io_WinNTFileSystem_list(JNIEnv *env, jobject this, jobject file) return NULL; // error; if (len == maxlen) { old = rv; - rv = (*env)->NewObjectArray(env, maxlen <<= 1, - JNU_ClassString(env), NULL); - if ( rv == NULL - || JNU_CopyObjectArray(env, rv, old, len) < 0) + rv = (*env)->NewObjectArray(env, maxlen <<= 1, str_class, NULL); + if (rv == NULL || JNU_CopyObjectArray(env, rv, old, len) < 0) return NULL; // error (*env)->DeleteLocalRef(env, old); } @@ -704,7 +707,7 @@ Java_java_io_WinNTFileSystem_list(JNIEnv *env, jobject this, jobject file) /* Copy the final results into an appropriately-sized array */ old = rv; - rv = (*env)->NewObjectArray(env, len, JNU_ClassString(env), NULL); + rv = (*env)->NewObjectArray(env, len, str_class, NULL); if (rv == NULL) return NULL; /* error */ if (JNU_CopyObjectArray(env, rv, old, len) < 0) diff --git a/jdk/src/windows/native/java/lang/ProcessEnvironment_md.c b/jdk/src/windows/native/java/lang/ProcessEnvironment_md.c index e64d30b74af..3b73dd1d326 100644 --- a/jdk/src/windows/native/java/lang/ProcessEnvironment_md.c +++ b/jdk/src/windows/native/java/lang/ProcessEnvironment_md.c @@ -32,10 +32,15 @@ static jstring environmentBlock9x(JNIEnv *env) { int i; - jmethodID String_init_ID = - (*env)->GetMethodID(env, JNU_ClassString(env), "", "([B)V"); + jmethodID String_init_ID; jbyteArray bytes; - jbyte *blockA = (jbyte *) GetEnvironmentStringsA(); + jbyte *blockA; + + String_init_ID = + (*env)->GetMethodID(env, JNU_ClassString(env), "", "([B)V"); + CHECK_NULL_RETURN(String_init_ID, NULL); + + blockA = (jbyte *) GetEnvironmentStringsA(); if (blockA == NULL) { /* Both GetEnvironmentStringsW and GetEnvironmentStringsA * failed. Out of memory is our best guess. */ diff --git a/jdk/src/windows/native/java/net/Inet4AddressImpl.c b/jdk/src/windows/native/java/net/Inet4AddressImpl.c index f34b5e12431..f21f2de3245 100644 --- a/jdk/src/windows/native/java/net/Inet4AddressImpl.c +++ b/jdk/src/windows/native/java/net/Inet4AddressImpl.c @@ -111,11 +111,6 @@ Java_java_net_Inet4AddressImpl_getLocalHostName (JNIEnv *env, jobject this) { return JNU_NewStringPlatform(env, hostname); } -static jclass ni_iacls; -static jclass ni_ia4cls; -static jmethodID ni_ia4ctrID; -static int initialized = 0; - /* * Find an internet address for a given hostname. Not this this * code only works for addresses of type INET. The translation @@ -140,19 +135,8 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, jobjectArray ret = NULL; - if (!initialized) { - ni_iacls = (*env)->FindClass(env, "java/net/InetAddress"); - CHECK_NULL_RETURN(ni_iacls, NULL); - ni_iacls = (*env)->NewGlobalRef(env, ni_iacls); - CHECK_NULL_RETURN(ni_iacls, NULL); - ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address"); - CHECK_NULL_RETURN(ni_ia4cls, NULL); - ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); - CHECK_NULL_RETURN(ni_ia4cls, NULL); - ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "", "()V"); - CHECK_NULL_RETURN(ni_ia4ctrID, NULL); - initialized = 1; - } + initInetAddressIDs(env); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); if (IS_NULL(host)) { JNU_ThrowNullPointerException(env, "host argument"); @@ -196,13 +180,13 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, address |= (addr[1]<<8) & 0xff00; address |= addr[0]; - ret = (*env)->NewObjectArray(env, 1, ni_iacls, NULL); + ret = (*env)->NewObjectArray(env, 1, ia_class, NULL); if (IS_NULL(ret)) { goto cleanupAndReturn; } - iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID); + iaObj = (*env)->NewObject(env, ia4_class, ia4_ctrID); if (IS_NULL(iaObj)) { ret = NULL; goto cleanupAndReturn; @@ -226,7 +210,7 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, addrp++; } - ret = (*env)->NewObjectArray(env, i, ni_iacls, NULL); + ret = (*env)->NewObjectArray(env, i, ia_class, NULL); if (IS_NULL(ret)) { goto cleanupAndReturn; @@ -235,7 +219,7 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, addrp = (struct in_addr **) hp->h_addr_list; i = 0; while (*addrp != (struct in_addr *) 0) { - jobject iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID); + jobject iaObj = (*env)->NewObject(env, ia4_class, ia4_ctrID); if (IS_NULL(iaObj)) { ret = NULL; goto cleanupAndReturn; diff --git a/jdk/src/windows/native/java/net/Inet6AddressImpl.c b/jdk/src/windows/native/java/net/Inet6AddressImpl.c index f77d5ab79c7..cac70b34dfa 100644 --- a/jdk/src/windows/native/java/net/Inet6AddressImpl.c +++ b/jdk/src/windows/native/java/net/Inet6AddressImpl.c @@ -72,13 +72,6 @@ Java_java_net_Inet6AddressImpl_getLocalHostName (JNIEnv *env, jobject this) { return JNU_NewStringPlatform (env, hostname); } -static jclass ni_iacls; -static jclass ni_ia4cls; -static jclass ni_ia6cls; -static jmethodID ni_ia4ctrID; -static jmethodID ni_ia6ctrID; -static int initialized = 0; - JNIEXPORT jobjectArray JNICALL Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, jstring host) { @@ -86,30 +79,13 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, jobjectArray ret = 0; int retLen = 0; jboolean preferIPv6Address; - static jfieldID ia_preferIPv6AddressID; int error=0; struct addrinfo hints, *res, *resNew = NULL; - if (!initialized) { - ni_iacls = (*env)->FindClass(env, "java/net/InetAddress"); - CHECK_NULL_RETURN(ni_iacls, NULL); - ni_iacls = (*env)->NewGlobalRef(env, ni_iacls); - CHECK_NULL_RETURN(ni_iacls, NULL); - ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address"); - CHECK_NULL_RETURN(ni_ia4cls, NULL); - ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); - CHECK_NULL_RETURN(ni_ia4cls, NULL); - ni_ia6cls = (*env)->FindClass(env, "java/net/Inet6Address"); - CHECK_NULL_RETURN(ni_ia6cls, NULL); - ni_ia6cls = (*env)->NewGlobalRef(env, ni_ia6cls); - CHECK_NULL_RETURN(ni_ia6cls, NULL); - ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "", "()V"); - CHECK_NULL_RETURN(ni_ia4ctrID, NULL); - ni_ia6ctrID = (*env)->GetMethodID(env, ni_ia6cls, "", "()V"); - CHECK_NULL_RETURN(ni_ia6ctrID, NULL); - initialized = 1; - } + initInetAddressIDs(env); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); + if (IS_NULL(host)) { JNU_ThrowNullPointerException(env, "host is null"); return 0; @@ -117,17 +93,6 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, hostname = JNU_GetStringPlatformChars(env, host, JNI_FALSE); CHECK_NULL_RETURN(hostname, NULL); - if (ia_preferIPv6AddressID == NULL) { - jclass c = (*env)->FindClass(env,"java/net/InetAddress"); - if (c) { - ia_preferIPv6AddressID = - (*env)->GetStaticFieldID(env, c, "preferIPv6Address", "Z"); - } - if (ia_preferIPv6AddressID == NULL) { - JNU_ReleaseStringPlatformChars(env, host, hostname); - return NULL; - } - } /* get the address preference */ preferIPv6Address = (*env)->GetStaticBooleanField(env, ia_class, ia_preferIPv6AddressID); @@ -229,7 +194,7 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, retLen = i; iterator = resNew; i = 0; - ret = (*env)->NewObjectArray(env, retLen, ni_iacls, NULL); + ret = (*env)->NewObjectArray(env, retLen, ia_class, NULL); if (IS_NULL(ret)) { /* we may have memory to free at the end of this */ @@ -246,7 +211,7 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, while (iterator != NULL) { if (iterator->ai_family == AF_INET) { - jobject iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID); + jobject iaObj = (*env)->NewObject(env, ia4_class, ia4_ctrID); if (IS_NULL(iaObj)) { ret = NULL; goto cleanupAndReturn; @@ -257,7 +222,7 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, inetIndex ++; } else if (iterator->ai_family == AF_INET6) { jint scope = 0, ret1; - jobject iaObj = (*env)->NewObject(env, ni_ia6cls, ni_ia6ctrID); + jobject iaObj = (*env)->NewObject(env, ia6_class, ia6_ctrID); if (IS_NULL(iaObj)) { ret = NULL; goto cleanupAndReturn; @@ -347,6 +312,7 @@ Java_java_net_Inet6AddressImpl_getHostByAddr(JNIEnv *env, jobject this, if (!error) { ret = (*env)->NewStringUTF(env, host); + CHECK_NULL_RETURN(ret, NULL); } if (ret == NULL) { diff --git a/jdk/src/windows/native/java/net/NetworkInterface.c b/jdk/src/windows/native/java/net/NetworkInterface.c index fee86874771..44e9a61636b 100644 --- a/jdk/src/windows/native/java/net/NetworkInterface.c +++ b/jdk/src/windows/native/java/net/NetworkInterface.c @@ -65,13 +65,6 @@ jfieldID ni_bindsID; /* NetworkInterface.bindings */ jfieldID ni_nameID; /* NetworkInterface.name */ jfieldID ni_displayNameID; /* NetworkInterface.displayName */ jfieldID ni_childsID; /* NetworkInterface.childs */ -jclass ni_iacls; /* InetAddress */ - -jclass ni_ia4cls; /* Inet4Address */ -jmethodID ni_ia4Ctor; /* Inet4Address() */ - -jclass ni_ia6cls; /* Inet6Address */ -jmethodID ni_ia6ctrID; /* Inet6Address() */ jclass ni_ibcls; /* InterfaceAddress */ jmethodID ni_ibctrID; /* InterfaceAddress() */ @@ -515,26 +508,6 @@ Java_java_net_NetworkInterface_init(JNIEnv *env, jclass cls) CHECK_NULL(ni_childsID); ni_ctor = (*env)->GetMethodID(env, ni_class, "", "()V"); CHECK_NULL(ni_ctor); - - ni_iacls = (*env)->FindClass(env, "java/net/InetAddress"); - CHECK_NULL(ni_iacls); - ni_iacls = (*env)->NewGlobalRef(env, ni_iacls); - CHECK_NULL(ni_iacls); - - ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address"); - CHECK_NULL(ni_ia4cls); - ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); - CHECK_NULL(ni_ia4cls); - ni_ia4Ctor = (*env)->GetMethodID(env, ni_ia4cls, "", "()V"); - CHECK_NULL(ni_ia4Ctor); - - ni_ia6cls = (*env)->FindClass(env, "java/net/Inet6Address"); - CHECK_NULL(ni_ia6cls); - ni_ia6cls = (*env)->NewGlobalRef(env, ni_ia6cls); - CHECK_NULL(ni_ia6cls); - ni_ia6ctrID = (*env)->GetMethodID(env, ni_ia6cls, "", "()V"); - CHECK_NULL(ni_ia6ctrID); - ni_ibcls = (*env)->FindClass(env, "java/net/InterfaceAddress"); CHECK_NULL(ni_ibcls); ni_ibcls = (*env)->NewGlobalRef(env, ni_ibcls); @@ -546,6 +519,9 @@ Java_java_net_NetworkInterface_init(JNIEnv *env, jclass cls) ni_ibbroadcastID = (*env)->GetFieldID(env, ni_ibcls, "broadcast", "Ljava/net/Inet4Address;"); CHECK_NULL(ni_ibbroadcastID); ni_ibmaskID = (*env)->GetFieldID(env, ni_ibcls, "maskLength", "S"); + CHECK_NULL(ni_ibmaskID); + + initInetAddressIDs(env); } /* @@ -591,7 +567,7 @@ jobject createNetworkInterface return NULL; } } - addrArr = (*env)->NewObjectArray(env, netaddrCount, ni_iacls, NULL); + addrArr = (*env)->NewObjectArray(env, netaddrCount, ia_class, NULL); if (addrArr == NULL) { free_netaddr(netaddrP); return NULL; @@ -609,7 +585,7 @@ jobject createNetworkInterface jobject iaObj, ia2Obj; jobject ibObj = NULL; if (addrs->addr.him.sa_family == AF_INET) { - iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4Ctor); + iaObj = (*env)->NewObject(env, ia4_class, ia4_ctrID); if (iaObj == NULL) { free_netaddr(netaddrP); return NULL; @@ -624,7 +600,7 @@ jobject createNetworkInterface return NULL; } (*env)->SetObjectField(env, ibObj, ni_ibaddressID, iaObj); - ia2Obj = (*env)->NewObject(env, ni_ia4cls, ni_ia4Ctor); + ia2Obj = (*env)->NewObject(env, ia4_class, ia4_ctrID); if (ia2Obj == NULL) { free_netaddr(netaddrP); return NULL; @@ -636,7 +612,7 @@ jobject createNetworkInterface } } else /* AF_INET6 */ { int scope; - iaObj = (*env)->NewObject(env, ni_ia6cls, ni_ia6ctrID); + iaObj = (*env)->NewObject(env, ia6_class, ia6_ctrID); if (iaObj) { int ret = setInet6Address_ipaddress(env, iaObj, (jbyte *)&(addrs->addr.him6.sin6_addr.s6_addr)); if (ret == JNI_FALSE) { diff --git a/jdk/src/windows/native/java/net/NetworkInterface.h b/jdk/src/windows/native/java/net/NetworkInterface.h index a73c62c66b3..929ac507f89 100644 --- a/jdk/src/windows/native/java/net/NetworkInterface.h +++ b/jdk/src/windows/native/java/net/NetworkInterface.h @@ -70,16 +70,6 @@ extern jfieldID ni_nameID; /* NetworkInterface.name */ extern jfieldID ni_displayNameID; /* NetworkInterface.displayName */ extern jfieldID ni_childsID; /* NetworkInterface.childs */ -extern jclass ni_iacls; /* InetAddress */ - -extern jclass ni_ia4cls; /* Inet4Address */ -extern jmethodID ni_ia4Ctor; /* Inet4Address() */ - -extern jclass ni_ia6cls; /* Inet6Address */ -extern jmethodID ni_ia6ctrID; /* Inet6Address() */ -extern jfieldID ni_ia6ipaddressID; -extern jfieldID ni_ia6ipaddressID; - extern jclass ni_ibcls; /* InterfaceAddress */ extern jmethodID ni_ibctrID; /* InterfaceAddress() */ extern jfieldID ni_ibaddressID; /* InterfaceAddress.address */ diff --git a/jdk/src/windows/native/java/net/NetworkInterface_winXP.c b/jdk/src/windows/native/java/net/NetworkInterface_winXP.c index 7e3e79d1f49..4d29e7f799d 100644 --- a/jdk/src/windows/native/java/net/NetworkInterface_winXP.c +++ b/jdk/src/windows/native/java/net/NetworkInterface_winXP.c @@ -504,7 +504,7 @@ static jobject createNetworkInterfaceXP(JNIEnv *env, netif *ifs) } } - addrArr = (*env)->NewObjectArray(env, netaddrCount, ni_iacls, NULL); + addrArr = (*env)->NewObjectArray(env, netaddrCount, ia_class, NULL); if (addrArr == NULL) { return NULL; } @@ -522,7 +522,7 @@ static jobject createNetworkInterfaceXP(JNIEnv *env, netif *ifs) jobject iaObj, ia2Obj; jobject ibObj = NULL; if (addrs->addr.him.sa_family == AF_INET) { - iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4Ctor); + iaObj = (*env)->NewObject(env, ia4_class, ia4_ctrID); if (iaObj == NULL) { return NULL; } @@ -536,7 +536,7 @@ static jobject createNetworkInterfaceXP(JNIEnv *env, netif *ifs) return NULL; } (*env)->SetObjectField(env, ibObj, ni_ibaddressID, iaObj); - ia2Obj = (*env)->NewObject(env, ni_ia4cls, ni_ia4Ctor); + ia2Obj = (*env)->NewObject(env, ia4_class, ia4_ctrID); if (ia2Obj == NULL) { free_netaddr(netaddrP); return NULL; @@ -547,7 +547,7 @@ static jobject createNetworkInterfaceXP(JNIEnv *env, netif *ifs) (*env)->SetObjectArrayElement(env, bindsArr, bind_index++, ibObj); } else /* AF_INET6 */ { int scope; - iaObj = (*env)->NewObject(env, ni_ia6cls, ni_ia6ctrID); + iaObj = (*env)->NewObject(env, ia6_class, ia6_ctrID); if (iaObj) { int ret = setInet6Address_ipaddress(env, iaObj, (jbyte *)&(addrs->addr.him6.sin6_addr.s6_addr)); if (ret == JNI_FALSE) { diff --git a/jdk/src/windows/native/java/net/net_util_md.c b/jdk/src/windows/native/java/net/net_util_md.c index 6ddb2bcfd78..1cacb57386b 100644 --- a/jdk/src/windows/native/java/net/net_util_md.c +++ b/jdk/src/windows/native/java/net/net_util_md.c @@ -125,8 +125,8 @@ DllMain(HINSTANCE hinst, DWORD reason, LPVOID reserved) return TRUE; } -void initLocalAddrTable () {} -void parseExclusiveBindProperty (JNIEnv *env) {} +void platformInit() {} +void parseExclusiveBindProperty(JNIEnv *env) {} /* * Since winsock doesn't have the equivalent of strerror(errno) diff --git a/jdk/src/windows/native/sun/management/OperatingSystemImpl.c b/jdk/src/windows/native/sun/management/OperatingSystemImpl.c index c684e2bd81c..260f9f695b4 100644 --- a/jdk/src/windows/native/sun/management/OperatingSystemImpl.c +++ b/jdk/src/windows/native/sun/management/OperatingSystemImpl.c @@ -77,7 +77,7 @@ static HANDLE main_process; int perfiInit(void); JNIEXPORT void JNICALL -Java_sun_management_OperatingSystemImpl_initialize +Java_sun_management_OperatingSystemImpl_initialize0 (JNIEnv *env, jclass cls) { main_process = GetCurrentProcess(); @@ -97,7 +97,7 @@ Java_sun_management_OperatingSystemImpl_getCommittedVirtualMemorySize0 } JNIEXPORT jlong JNICALL -Java_sun_management_OperatingSystemImpl_getTotalSwapSpaceSize +Java_sun_management_OperatingSystemImpl_getTotalSwapSpaceSize0 (JNIEnv *env, jobject mbean) { MEMORYSTATUSEX ms; @@ -107,7 +107,7 @@ Java_sun_management_OperatingSystemImpl_getTotalSwapSpaceSize } JNIEXPORT jlong JNICALL -Java_sun_management_OperatingSystemImpl_getFreeSwapSpaceSize +Java_sun_management_OperatingSystemImpl_getFreeSwapSpaceSize0 (JNIEnv *env, jobject mbean) { MEMORYSTATUSEX ms; @@ -117,7 +117,7 @@ Java_sun_management_OperatingSystemImpl_getFreeSwapSpaceSize } JNIEXPORT jlong JNICALL -Java_sun_management_OperatingSystemImpl_getProcessCpuTime +Java_sun_management_OperatingSystemImpl_getProcessCpuTime0 (JNIEnv *env, jobject mbean) { @@ -136,7 +136,7 @@ Java_sun_management_OperatingSystemImpl_getProcessCpuTime } JNIEXPORT jlong JNICALL -Java_sun_management_OperatingSystemImpl_getFreePhysicalMemorySize +Java_sun_management_OperatingSystemImpl_getFreePhysicalMemorySize0 (JNIEnv *env, jobject mbean) { MEMORYSTATUSEX ms; @@ -146,7 +146,7 @@ Java_sun_management_OperatingSystemImpl_getFreePhysicalMemorySize } JNIEXPORT jlong JNICALL -Java_sun_management_OperatingSystemImpl_getTotalPhysicalMemorySize +Java_sun_management_OperatingSystemImpl_getTotalPhysicalMemorySize0 (JNIEnv *env, jobject mbean) { MEMORYSTATUSEX ms; @@ -927,14 +927,14 @@ perfInit(void) { } JNIEXPORT jdouble JNICALL -Java_sun_management_OperatingSystemImpl_getSystemCpuLoad +Java_sun_management_OperatingSystemImpl_getSystemCpuLoad0 (JNIEnv *env, jobject dummy) { return perfGetCPULoad(-1); } JNIEXPORT jdouble JNICALL -Java_sun_management_OperatingSystemImpl_getProcessCpuLoad +Java_sun_management_OperatingSystemImpl_getProcessCpuLoad0 (JNIEnv *env, jobject dummy) { return perfGetProcessLoad(); diff --git a/jdk/src/windows/native/sun/nio/ch/DatagramChannelImpl.c b/jdk/src/windows/native/sun/nio/ch/DatagramChannelImpl.c index ab46f8d7faa..ecc96a1d8bb 100644 --- a/jdk/src/windows/native/sun/nio/ch/DatagramChannelImpl.c +++ b/jdk/src/windows/native/sun/nio/ch/DatagramChannelImpl.c @@ -45,18 +45,28 @@ JNIEXPORT void JNICALL Java_sun_nio_ch_DatagramChannelImpl_initIDs(JNIEnv *env, jclass clazz) { clazz = (*env)->FindClass(env, "java/net/InetSocketAddress"); + CHECK_NULL(clazz); isa_class = (*env)->NewGlobalRef(env, clazz); + if (isa_class == NULL) { + JNU_ThrowOutOfMemoryError(env, NULL); + return; + } isa_ctorID = (*env)->GetMethodID(env, clazz, "", "(Ljava/net/InetAddress;I)V"); + CHECK_NULL(isa_ctorID); clazz = (*env)->FindClass(env, "sun/nio/ch/DatagramChannelImpl"); + CHECK_NULL(clazz); dci_senderID = (*env)->GetFieldID(env, clazz, "sender", "Ljava/net/SocketAddress;"); + CHECK_NULL(dci_senderID); dci_senderAddrID = (*env)->GetFieldID(env, clazz, "cachedSenderInetAddress", "Ljava/net/InetAddress;"); + CHECK_NULL(dci_senderAddrID); dci_senderPortID = (*env)->GetFieldID(env, clazz, "cachedSenderPort", "I"); + CHECK_NULL(dci_senderPortID); } /* @@ -185,17 +195,11 @@ Java_sun_nio_ch_DatagramChannelImpl_receive0(JNIEnv *env, jobject this, if (senderAddr == NULL) { jobject isa = NULL; int port; - jobject ia = NET_SockaddrToInetAddress(env, (struct sockaddr *)&sa, - &port); - + jobject ia = NET_SockaddrToInetAddress(env, (struct sockaddr *)&sa, &port); if (ia != NULL) { isa = (*env)->NewObject(env, isa_class, isa_ctorID, ia, port); } - - if (isa == NULL) { - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); - return IOS_THROWN; - } + CHECK_NULL_RETURN(isa, IOS_THROWN); // update cachedSenderInetAddress/cachedSenderPort (*env)->SetObjectField(env, this, dci_senderAddrID, ia); diff --git a/jdk/src/windows/native/sun/nio/ch/FileKey.c b/jdk/src/windows/native/sun/nio/ch/FileKey.c index e095296abeb..65306d1d639 100644 --- a/jdk/src/windows/native/sun/nio/ch/FileKey.c +++ b/jdk/src/windows/native/sun/nio/ch/FileKey.c @@ -38,9 +38,9 @@ static jfieldID key_indexLow; /* id for FileKey.nFileIndexLow */ JNIEXPORT void JNICALL Java_sun_nio_ch_FileKey_initIDs(JNIEnv *env, jclass clazz) { - key_volumeSN = (*env)->GetFieldID(env, clazz, "dwVolumeSerialNumber", "J"); - key_indexHigh = (*env)->GetFieldID(env, clazz, "nFileIndexHigh", "J"); - key_indexLow = (*env)->GetFieldID(env, clazz, "nFileIndexLow", "J"); + CHECK_NULL(key_volumeSN = (*env)->GetFieldID(env, clazz, "dwVolumeSerialNumber", "J")); + CHECK_NULL(key_indexHigh = (*env)->GetFieldID(env, clazz, "nFileIndexHigh", "J")); + CHECK_NULL(key_indexLow = (*env)->GetFieldID(env, clazz, "nFileIndexLow", "J")); } diff --git a/jdk/src/windows/native/sun/nio/ch/IOUtil.c b/jdk/src/windows/native/sun/nio/ch/IOUtil.c index 10c72e4682f..49de1eb89d7 100644 --- a/jdk/src/windows/native/sun/nio/ch/IOUtil.c +++ b/jdk/src/windows/native/sun/nio/ch/IOUtil.c @@ -33,6 +33,7 @@ #include "nio.h" #include "nio_util.h" +#include "net_util.h" #include "sun_nio_ch_IOUtil.h" /* field id for jlong 'handle' in java.io.FileDescriptor used for file fds */ @@ -52,9 +53,10 @@ Java_sun_security_provider_NativeSeedGenerator_nativeGenerateSeed JNIEXPORT void JNICALL Java_sun_nio_ch_IOUtil_initIDs(JNIEnv *env, jclass clazz) { - clazz = (*env)->FindClass(env, "java/io/FileDescriptor"); - fd_fdID = (*env)->GetFieldID(env, clazz, "fd", "I"); - handle_fdID = (*env)->GetFieldID(env, clazz, "handle", "J"); + CHECK_NULL(clazz = (*env)->FindClass(env, "java/io/FileDescriptor")); + CHECK_NULL(fd_fdID = (*env)->GetFieldID(env, clazz, "fd", "I")); + CHECK_NULL(handle_fdID = (*env)->GetFieldID(env, clazz, "handle", "J")); + initInetAddressIDs(env); } /************************************************************** diff --git a/jdk/src/windows/native/sun/nio/ch/Iocp.c b/jdk/src/windows/native/sun/nio/ch/Iocp.c index 8f87a8937f7..f9556234075 100644 --- a/jdk/src/windows/native/sun/nio/ch/Iocp.c +++ b/jdk/src/windows/native/sun/nio/ch/Iocp.c @@ -46,16 +46,15 @@ Java_sun_nio_ch_Iocp_initIDs(JNIEnv* env, jclass this) jclass clazz; clazz = (*env)->FindClass(env, "sun/nio/ch/Iocp$CompletionStatus"); - if (clazz == NULL) { - return; - } + CHECK_NULL(clazz); completionStatus_error = (*env)->GetFieldID(env, clazz, "error", "I"); - if (completionStatus_error == NULL) return; + CHECK_NULL(completionStatus_error); completionStatus_bytesTransferred = (*env)->GetFieldID(env, clazz, "bytesTransferred", "I"); - if (completionStatus_bytesTransferred == NULL) return; + CHECK_NULL(completionStatus_bytesTransferred); completionStatus_completionKey = (*env)->GetFieldID(env, clazz, "completionKey", "I"); - if (completionStatus_completionKey == NULL) return; + CHECK_NULL(completionStatus_completionKey); completionStatus_overlapped = (*env)->GetFieldID(env, clazz, "overlapped", "J"); + CHECK_NULL(completionStatus_overlapped); } JNIEXPORT jint JNICALL diff --git a/jdk/src/windows/native/sun/nio/ch/Net.c b/jdk/src/windows/native/sun/nio/ch/Net.c index 733405e6f80..acaa50d2b5e 100644 --- a/jdk/src/windows/native/sun/nio/ch/Net.c +++ b/jdk/src/windows/native/sun/nio/ch/Net.c @@ -554,11 +554,11 @@ Java_sun_nio_ch_Net_poll(JNIEnv* env, jclass this, jobject fdo, jint events, jlo FD_ZERO(&rd); FD_ZERO(&wr); FD_ZERO(&ex); - if (events & sun_nio_ch_PollArrayWrapper_POLLIN) { + if (events & POLLIN) { FD_SET(fd, &rd); } - if (events & sun_nio_ch_PollArrayWrapper_POLLOUT || - events & sun_nio_ch_PollArrayWrapper_POLLCONN) { + if (events & POLLOUT || + events & POLLCONN) { FD_SET(fd, &wr); } FD_SET(fd, &ex); @@ -572,14 +572,50 @@ Java_sun_nio_ch_Net_poll(JNIEnv* env, jclass this, jobject fdo, jint events, jlo } else if (rv >= 0) { rv = 0; if (FD_ISSET(fd, &rd)) { - rv |= sun_nio_ch_PollArrayWrapper_POLLIN; + rv |= POLLIN; } if (FD_ISSET(fd, &wr)) { - rv |= sun_nio_ch_PollArrayWrapper_POLLOUT; + rv |= POLLOUT; } if (FD_ISSET(fd, &ex)) { - rv |= sun_nio_ch_PollArrayWrapper_POLLERR; + rv |= POLLERR; } } return rv; } + +JNIEXPORT jshort JNICALL +Java_sun_nio_ch_Net_pollinValue(JNIEnv *env, jclass this) +{ + return (jshort)POLLIN; +} + +JNIEXPORT jshort JNICALL +Java_sun_nio_ch_Net_polloutValue(JNIEnv *env, jclass this) +{ + return (jshort)POLLOUT; +} + +JNIEXPORT jshort JNICALL +Java_sun_nio_ch_Net_pollerrValue(JNIEnv *env, jclass this) +{ + return (jshort)POLLERR; +} + +JNIEXPORT jshort JNICALL +Java_sun_nio_ch_Net_pollhupValue(JNIEnv *env, jclass this) +{ + return (jshort)POLLHUP; +} + +JNIEXPORT jshort JNICALL +Java_sun_nio_ch_Net_pollnvalValue(JNIEnv *env, jclass this) +{ + return (jshort)POLLNVAL; +} + +JNIEXPORT jshort JNICALL +Java_sun_nio_ch_Net_pollconnValue(JNIEnv *env, jclass this) +{ + return (jshort)POLLCONN; +} diff --git a/jdk/src/windows/native/sun/nio/ch/ServerSocketChannelImpl.c b/jdk/src/windows/native/sun/nio/ch/ServerSocketChannelImpl.c index 2af833c2eb7..30d6d641645 100644 --- a/jdk/src/windows/native/sun/nio/ch/ServerSocketChannelImpl.c +++ b/jdk/src/windows/native/sun/nio/ch/ServerSocketChannelImpl.c @@ -56,12 +56,20 @@ JNIEXPORT void JNICALL Java_sun_nio_ch_ServerSocketChannelImpl_initIDs(JNIEnv *env, jclass cls) { cls = (*env)->FindClass(env, "java/io/FileDescriptor"); + CHECK_NULL(cls); fd_fdID = (*env)->GetFieldID(env, cls, "fd", "I"); + CHECK_NULL(fd_fdID); cls = (*env)->FindClass(env, "java/net/InetSocketAddress"); + CHECK_NULL(cls); isa_class = (*env)->NewGlobalRef(env, cls); + if (isa_class == NULL) { + JNU_ThrowOutOfMemoryError(env, NULL); + return; + } isa_ctorID = (*env)->GetMethodID(env, cls, "", "(Ljava/net/InetAddress;I)V"); + CHECK_NULL(isa_ctorID); } JNIEXPORT void JNICALL @@ -99,10 +107,10 @@ Java_sun_nio_ch_ServerSocketChannelImpl_accept0(JNIEnv *env, jobject this, (*env)->SetIntField(env, newfdo, fd_fdID, newfd); remote_ia = NET_SockaddrToInetAddress(env, (struct sockaddr *)&sa, (int *)&remote_port); + CHECK_NULL_RETURN(remote_ia, IOS_THROWN); - isa = (*env)->NewObject(env, isa_class, isa_ctorID, - remote_ia, remote_port); + isa = (*env)->NewObject(env, isa_class, isa_ctorID, remote_ia, remote_port); + CHECK_NULL_RETURN(isa, IOS_THROWN); (*env)->SetObjectArrayElement(env, isaa, 0, isa); - return 1; } diff --git a/jdk/src/windows/native/sun/nio/ch/SocketChannelImpl.c b/jdk/src/windows/native/sun/nio/ch/SocketChannelImpl.c index be50fd69439..5f9fc5000e1 100644 --- a/jdk/src/windows/native/sun/nio/ch/SocketChannelImpl.c +++ b/jdk/src/windows/native/sun/nio/ch/SocketChannelImpl.c @@ -42,8 +42,8 @@ static jfieldID ia_addrID; /* java.net.InetAddress.address */ JNIEXPORT void JNICALL Java_sun_nio_ch_SocketChannelImpl_initIDs(JNIEnv *env, jclass cls) { - cls = (*env)->FindClass(env, "java/net/InetAddress"); - ia_addrID = (*env)->GetFieldID(env, cls, "address", "I"); + CHECK_NULL(cls = (*env)->FindClass(env, "java/net/InetAddress")); + CHECK_NULL(ia_addrID = (*env)->GetFieldID(env, cls, "address", "I")); } jint diff --git a/jdk/src/windows/native/sun/nio/ch/WindowsSelectorImpl.c b/jdk/src/windows/native/sun/nio/ch/WindowsSelectorImpl.c index aa10877c42b..7d5e1e77875 100644 --- a/jdk/src/windows/native/sun/nio/ch/WindowsSelectorImpl.c +++ b/jdk/src/windows/native/sun/nio/ch/WindowsSelectorImpl.c @@ -33,13 +33,15 @@ #define FD_SETSIZE 1024 #include +#include + #include "jvm.h" #include "jni.h" #include "jni_util.h" #include "sun_nio_ch_WindowsSelectorImpl.h" #include "sun_nio_ch_PollArrayWrapper.h" -#include "winsock2.h" +#include "nio_util.h" /* Needed for POLL* constants (includes "winsock2.h") */ typedef struct { jint fd; @@ -79,12 +81,11 @@ Java_sun_nio_ch_WindowsSelectorImpl_00024SubSelector_poll0(JNIEnv *env, jobject /* Set FD_SET structures required for select */ for (i = 0; i < numfds; i++) { - if (fds[i].events & sun_nio_ch_PollArrayWrapper_POLLIN) { + if (fds[i].events & POLLIN) { readfds.fd_array[read_count] = fds[i].fd; read_count++; } - if (fds[i].events & (sun_nio_ch_PollArrayWrapper_POLLOUT | - sun_nio_ch_PollArrayWrapper_POLLCONN)) + if (fds[i].events & (POLLOUT | POLLCONN)) { writefds.fd_array[write_count] = fds[i].fd; write_count++; @@ -110,12 +111,11 @@ Java_sun_nio_ch_WindowsSelectorImpl_00024SubSelector_poll0(JNIEnv *env, jobject /* prepare select structures for the i-th socket */ errreadfds.fd_count = 0; errwritefds.fd_count = 0; - if (fds[i].events & sun_nio_ch_PollArrayWrapper_POLLIN) { + if (fds[i].events & POLLIN) { errreadfds.fd_array[0] = fds[i].fd; errreadfds.fd_count = 1; } - if (fds[i].events & (sun_nio_ch_PollArrayWrapper_POLLOUT | - sun_nio_ch_PollArrayWrapper_POLLCONN)) + if (fds[i].events & (POLLOUT | POLLCONN)) { errwritefds.fd_array[0] = fds[i].fd; errwritefds.fd_count = 1; diff --git a/jdk/src/windows/native/sun/nio/ch/nio_util.h b/jdk/src/windows/native/sun/nio/ch/nio_util.h index cf2df5363b7..1d463241c25 100644 --- a/jdk/src/windows/native/sun/nio/ch/nio_util.h +++ b/jdk/src/windows/native/sun/nio/ch/nio_util.h @@ -23,6 +23,8 @@ * questions. */ +#include + #include "jni.h" /** @@ -55,3 +57,19 @@ struct iovec { }; #endif + +#ifndef POLLIN + /* WSAPoll()/WSAPOLLFD and the corresponding constants are only defined */ + /* in Windows Vista / Windows Server 2008 and later. If we are on an */ + /* older release we just use the Solaris constants as this was previously */ + /* done in PollArrayWrapper.java. */ + #define POLLIN 0x0001 + #define POLLOUT 0x0004 + #define POLLERR 0x0008 + #define POLLHUP 0x0010 + #define POLLNVAL 0x0020 + #define POLLCONN 0x0002 +#else + /* POLLCONN must not equal any of the other constants (see winsock2.h). */ + #define POLLCONN 0x2000 +#endif diff --git a/jdk/src/windows/native/sun/nio/fs/WindowsNativeDispatcher.c b/jdk/src/windows/native/sun/nio/fs/WindowsNativeDispatcher.c index 62d8a892b05..3b981f3760b 100644 --- a/jdk/src/windows/native/sun/nio/fs/WindowsNativeDispatcher.c +++ b/jdk/src/windows/native/sun/nio/fs/WindowsNativeDispatcher.c @@ -111,65 +111,70 @@ Java_sun_nio_fs_WindowsNativeDispatcher_initIDs(JNIEnv* env, jclass this) HMODULE h; clazz = (*env)->FindClass(env, "sun/nio/fs/WindowsNativeDispatcher$FirstFile"); - if (clazz == NULL) { - return; - } + CHECK_NULL(clazz); findFirst_handle = (*env)->GetFieldID(env, clazz, "handle", "J"); + CHECK_NULL(findFirst_handle); findFirst_name = (*env)->GetFieldID(env, clazz, "name", "Ljava/lang/String;"); + CHECK_NULL(findFirst_name); findFirst_attributes = (*env)->GetFieldID(env, clazz, "attributes", "I"); + CHECK_NULL(findFirst_attributes); clazz = (*env)->FindClass(env, "sun/nio/fs/WindowsNativeDispatcher$FirstStream"); - if (clazz == NULL) { - return; - } + CHECK_NULL(clazz); findStream_handle = (*env)->GetFieldID(env, clazz, "handle", "J"); + CHECK_NULL(findStream_handle); findStream_name = (*env)->GetFieldID(env, clazz, "name", "Ljava/lang/String;"); + CHECK_NULL(findStream_name); clazz = (*env)->FindClass(env, "sun/nio/fs/WindowsNativeDispatcher$VolumeInformation"); - if (clazz == NULL) { - return; - } + CHECK_NULL(clazz); volumeInfo_fsName = (*env)->GetFieldID(env, clazz, "fileSystemName", "Ljava/lang/String;"); + CHECK_NULL(volumeInfo_fsName); volumeInfo_volName = (*env)->GetFieldID(env, clazz, "volumeName", "Ljava/lang/String;"); + CHECK_NULL(volumeInfo_volName); volumeInfo_volSN = (*env)->GetFieldID(env, clazz, "volumeSerialNumber", "I"); + CHECK_NULL(volumeInfo_volSN); volumeInfo_flags = (*env)->GetFieldID(env, clazz, "flags", "I"); + CHECK_NULL(volumeInfo_flags); clazz = (*env)->FindClass(env, "sun/nio/fs/WindowsNativeDispatcher$DiskFreeSpace"); - if (clazz == NULL) { - return; - } + CHECK_NULL(clazz); diskSpace_bytesAvailable = (*env)->GetFieldID(env, clazz, "freeBytesAvailable", "J"); + CHECK_NULL(diskSpace_bytesAvailable); diskSpace_totalBytes = (*env)->GetFieldID(env, clazz, "totalNumberOfBytes", "J"); + CHECK_NULL(diskSpace_totalBytes); diskSpace_totalFree = (*env)->GetFieldID(env, clazz, "totalNumberOfFreeBytes", "J"); + CHECK_NULL(diskSpace_totalFree); clazz = (*env)->FindClass(env, "sun/nio/fs/WindowsNativeDispatcher$Account"); - if (clazz == NULL) { - return; - } + CHECK_NULL(clazz); account_domain = (*env)->GetFieldID(env, clazz, "domain", "Ljava/lang/String;"); + CHECK_NULL(account_domain); account_name = (*env)->GetFieldID(env, clazz, "name", "Ljava/lang/String;"); + CHECK_NULL(account_name); account_use = (*env)->GetFieldID(env, clazz, "use", "I"); + CHECK_NULL(account_use); clazz = (*env)->FindClass(env, "sun/nio/fs/WindowsNativeDispatcher$AclInformation"); - if (clazz == NULL) { - return; - } + CHECK_NULL(clazz); aclInfo_aceCount = (*env)->GetFieldID(env, clazz, "aceCount", "I"); + CHECK_NULL(aclInfo_aceCount); clazz = (*env)->FindClass(env, "sun/nio/fs/WindowsNativeDispatcher$CompletionStatus"); - if (clazz == NULL) { - return; - } + CHECK_NULL(clazz); completionStatus_error = (*env)->GetFieldID(env, clazz, "error", "I"); + CHECK_NULL(completionStatus_error); completionStatus_bytesTransferred = (*env)->GetFieldID(env, clazz, "bytesTransferred", "I"); + CHECK_NULL(completionStatus_bytesTransferred); completionStatus_completionKey = (*env)->GetFieldID(env, clazz, "completionKey", "J"); + CHECK_NULL(completionStatus_completionKey); clazz = (*env)->FindClass(env, "sun/nio/fs/WindowsNativeDispatcher$BackupResult"); - if (clazz == NULL) { - return; - } + CHECK_NULL(clazz); backupResult_bytesTransferred = (*env)->GetFieldID(env, clazz, "bytesTransferred", "I"); + CHECK_NULL(backupResult_bytesTransferred); backupResult_context = (*env)->GetFieldID(env, clazz, "context", "J"); + CHECK_NULL(backupResult_context); // get handle to kernel32 if (GetModuleHandleExW((GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | diff --git a/jdk/test/ProblemList.txt b/jdk/test/ProblemList.txt index 2a90ff98b67..8126fbf8d3b 100644 --- a/jdk/test/ProblemList.txt +++ b/jdk/test/ProblemList.txt @@ -41,11 +41,11 @@ # # List items are testnames followed by labels, all MUST BE commented # as to why they are here and use a label: -# generic-all Problems on all platforms -# generic-ARCH Where ARCH is one of: sparc, sparcv9, x64, i586, etc. -# OSNAME-all Where OSNAME is one of: solaris, linux, windows, macosx -# OSNAME-ARCH Specific on to one OSNAME and ARCH, e.g. solaris-amd64 -# OSNAME-REV Specific on to one OSNAME and REV, e.g. solaris-5.8 +# generic-all Problems on all platforms +# generic-ARCH Where ARCH is one of: sparc, sparcv9, x64, i586, etc. +# OSNAME-all Where OSNAME is one of: solaris, linux, windows, macosx, aix +# OSNAME-ARCH Specific on to one OSNAME and ARCH, e.g. solaris-amd64 +# OSNAME-REV Specific on to one OSNAME and REV, e.g. solaris-5.8 # # More than one label is allowed but must be on the same line. # @@ -134,6 +134,11 @@ sun/management/jmxremote/bootstrap/RmiSslBootstrapTest.sh windows-all # jdk_jmx +# 8030957 +com/sun/management/OperatingSystemMXBean/GetProcessCpuLoad.java aix-all +com/sun/management/OperatingSystemMXBean/GetSystemCpuLoad.java aix-all +javax/management/MBeanServer/OldMBeanServerTest.java aix-all + ############################################################################ # jdk_math @@ -173,11 +178,6 @@ java/net/DatagramSocket/SendDatagramToBadAddress.java macosx-all # 6963118 java/nio/channels/Selector/Wakeup.java windows-all -# 7133499, 7133497 -java/nio/channels/AsyncCloseAndInterrupt.java macosx-all -java/nio/channels/AsynchronousFileChannel/Lock.java macosx-all -java/nio/channels/FileChannel/Transfer.java macosx-all - # 7141822 java/nio/channels/DatagramChannel/ChangingAddress.java macosx-all diff --git a/jdk/test/TEST.ROOT b/jdk/test/TEST.ROOT index 0aba9d3bc72..e6cb16998ed 100644 --- a/jdk/test/TEST.ROOT +++ b/jdk/test/TEST.ROOT @@ -5,7 +5,7 @@ keys=2d dnd i18n # Tests that must run in othervm mode -othervm.dirs=java/awt java/beans java/rmi javax/accessibility javax/imageio javax/sound javax/print javax/management com/sun/awt sun/awt sun/java2d sun/pisces sun/rmi +othervm.dirs=java/awt java/beans javax/accessibility javax/imageio javax/sound javax/print javax/management com/sun/awt sun/awt sun/java2d sun/pisces # Tests that cannot run concurrently exclusiveAccess.dirs=java/rmi/Naming java/util/Currency java/util/prefs sun/management/jmxremote sun/tools/jstatd sun/security/mscapi diff --git a/jdk/test/com/sun/corba/5036554/TestCorbaBug.sh b/jdk/test/com/sun/corba/5036554/TestCorbaBug.sh index 983608cb560..7e057e72c38 100644 --- a/jdk/test/com/sun/corba/5036554/TestCorbaBug.sh +++ b/jdk/test/com/sun/corba/5036554/TestCorbaBug.sh @@ -48,7 +48,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/com/sun/corba/cachedSocket/7056731.sh b/jdk/test/com/sun/corba/cachedSocket/7056731.sh index 5244b9a70a5..3b58ad6e632 100644 --- a/jdk/test/com/sun/corba/cachedSocket/7056731.sh +++ b/jdk/test/com/sun/corba/cachedSocket/7056731.sh @@ -31,7 +31,7 @@ OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/com/sun/java/swing/plaf/windows/8016551/bug8016551.java b/jdk/test/com/sun/java/swing/plaf/windows/8016551/bug8016551.java index e616daadde4..35e55f09174 100644 --- a/jdk/test/com/sun/java/swing/plaf/windows/8016551/bug8016551.java +++ b/jdk/test/com/sun/java/swing/plaf/windows/8016551/bug8016551.java @@ -25,7 +25,7 @@ * @bug 8016551 * @summary JMenuItem in WindowsLookAndFeel can't paint default icons * @author Leonid Romanov - * @run main bug8016551 + * @run main/othervm bug8016551 */ import javax.swing.*; diff --git a/jdk/test/com/sun/jdi/ImmutableResourceTest.sh b/jdk/test/com/sun/jdi/ImmutableResourceTest.sh index fa312adad74..29c72ed6254 100644 --- a/jdk/test/com/sun/jdi/ImmutableResourceTest.sh +++ b/jdk/test/com/sun/jdi/ImmutableResourceTest.sh @@ -56,7 +56,7 @@ pass() OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PATHSEP=":" ;; diff --git a/jdk/test/com/sun/jdi/JITDebug.sh b/jdk/test/com/sun/jdi/JITDebug.sh index 0ec359799a6..c647e1153b5 100644 --- a/jdk/test/com/sun/jdi/JITDebug.sh +++ b/jdk/test/com/sun/jdi/JITDebug.sh @@ -63,7 +63,7 @@ pass() OS=`uname -s` export TRANSPORT_METHOD case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PATHSEP=":" TRANSPORT_METHOD=dt_socket ;; diff --git a/jdk/test/com/sun/jdi/JdbReadTwiceTest.sh b/jdk/test/com/sun/jdi/JdbReadTwiceTest.sh index 58be020422b..6f3cb193743 100644 --- a/jdk/test/com/sun/jdi/JdbReadTwiceTest.sh +++ b/jdk/test/com/sun/jdi/JdbReadTwiceTest.sh @@ -213,10 +213,17 @@ if [ ! -r c:/ ] ; then # If the file exists, we try to read it. The # read will fail. mkFiles $HOME/jdb.ini - chmod a-r $HOME/jdb.ini - doit - failIfNot 1 "open: $HOME/jdb.ini" - clean + id > $HOME/jdb.ini + chmod a-r $HOME/jdb.ini + if grep -q "uid=" $HOME/jdb.ini ; then + echo "Unable to make file unreadable, so test will fail. chmod: $HOME/jdb.ini" + if grep -q "uid=0" $HOME/jdb.ini ; then + echo "The test is running as root. Fix infrastructure!" + fi + fi + doit + failIfNot 1 "open: $HOME/jdb.ini" + clean fi diff --git a/jdk/test/com/sun/jdi/PrivateTransportTest.sh b/jdk/test/com/sun/jdi/PrivateTransportTest.sh index 32677db795b..ee8051f46ee 100644 --- a/jdk/test/com/sun/jdi/PrivateTransportTest.sh +++ b/jdk/test/com/sun/jdi/PrivateTransportTest.sh @@ -102,7 +102,7 @@ libdir=${TESTCLASSES} is_windows=false is_cygwin=false case `uname -s` in - SunOS|Linux) + SunOS|Linux|AIX) xx=`find ${jreloc}/lib -name libdt_socket.so` libloc=`dirname ${xx}` ;; @@ -161,13 +161,23 @@ elif [ -f ${libloc}/libdt_socket.so ] ; then echo cp ${libloc}/libdt_socket.so ${fullpath} cp ${libloc}/libdt_socket.so ${fullpath} # make sure we can find libraries in current directory - if [ "${LD_LIBRARY_PATH}" = "" ] ; then - LD_LIBRARY_PATH=${libdir} + if [ "$os" = "AIX" ] ; then + if [ "${LIBPATH}" = "" ] ; then + LIBPATH=${libdir} + else + LIBPATH=${LIBPATH}:${libdir} + fi + export LIBPATH + echo LIBPATH=${LIBPATH} else - LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${libdir} + if [ "${LD_LIBRARY_PATH}" = "" ] ; then + LD_LIBRARY_PATH=${libdir} + else + LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${libdir} + fi + export LD_LIBRARY_PATH + echo LD_LIBRARY_PATH=${LD_LIBRARY_PATH} fi - export LD_LIBRARY_PATH - echo LD_LIBRARY_PATH=${LD_LIBRARY_PATH} else echo "cannot find dt_socket in ${libloc} for ${private_transport}" fail "cannot find dt_socket in ${libloc} for ${private_transport}" diff --git a/jdk/test/com/sun/jdi/ProcessAttachTest.sh b/jdk/test/com/sun/jdi/ProcessAttachTest.sh index 10b5d503154..739b53abb10 100644 --- a/jdk/test/com/sun/jdi/ProcessAttachTest.sh +++ b/jdk/test/com/sun/jdi/ProcessAttachTest.sh @@ -29,7 +29,7 @@ # @summary Unit test for ProcessAttachingConnector # # @build ProcessAttachDebugger ProcessAttachDebuggee ShutdownDebuggee -# @run shell ProcessAttachTest.sh +# @run shell/timeout=120 ProcessAttachTest.sh if [ "${TESTJAVA}" = "" ] then @@ -69,8 +69,8 @@ esac startDebuggee() { - OUTPUTFILE=${TESTCLASSES}/Debuggee.out - ${JAVA} "$@" > ${OUTPUTFILE} & + rm -f ${OUTPUTFILE} + ${JAVA} "$@" > ${OUTPUTFILE} 2>&1 & startpid="$!" pid="${startpid}" @@ -87,17 +87,17 @@ startDebuggee() # "java" process. if [ "$OS" = "Windows" ]; then sleep 2 - pid=`ps -o pid,ppid,comm|grep ${startpid}|grep "java"|cut -c1-6` + pid=`ps -o pid,ppid,comm | awk '/${startpid}.+java/{ print $1 }'` fi echo "Waiting for Debuggee to initialize..." attempts=0 while true; do - sleep 1 out=`tail -1 ${OUTPUTFILE}` if [ ! -z "$out" ]; then break fi + sleep 1 attempts=`expr $attempts + 1` echo "Waiting $attempts second(s) ..." done @@ -107,9 +107,23 @@ startDebuggee() stopDebuggee() { - $JAVA -classpath "${TESTCLASSES}" ShutdownDebuggee $1 + # We have to make sure the debuggee has written the portfile before + # trying to read it. + + echo "Waiting for port file to be written..." + attempts=0 + while true; do + attempts=`expr $attempts + 1` + if [ -f ${PORTFILE} ]; then + break + fi + sleep 1 + echo "Waiting $attempts second(s) ..." + done + + $JAVA -classpath "${TESTCLASSES}" ShutdownDebuggee $1 2>&1 if [ $? != 0 ] ; then - echo "Error: ShutdownDebuggee failed" + echo "Error: ShutdownDebuggee failed: $?" failures=`expr $failures + 1` kill -9 ${startpid} fi @@ -120,7 +134,8 @@ failures=0 ######################################################### echo "Test 1: Debuggee start with suspend=n" -PORTFILE="${TESTCLASSES}"/shutdown1.port +PORTFILE=shutdown1.port +OUTPUTFILE=Debuggee1.out DEBUGGEEFLAGS= if [ -r $TESTCLASSES/@debuggeeVMOptions ] ; then @@ -136,17 +151,27 @@ startDebuggee \ $JAVA -classpath "${TESTCLASSES}${PS}${TESTJAVA}/lib/tools.jar" \ ProcessAttachDebugger $pid 2>&1 -if [ $? != 0 ]; then failures=`expr $failures + 1`; fi + +if [ $? != 0 ]; then + echo "Error: ProcessAttachDebugger failed: $?" + failures=`expr $failures + 1` +fi # Note that when the debugger disconnects, the debuggee picks another # port and outputs another 'Listening for transport ... ' msg. stopDebuggee "${PORTFILE}" +echo "${OUTPUTFILE}:" +cat $OUTPUTFILE +echo "-----" + ######################################################### echo "\nTest 2: Debuggee start with suspend=y" -PORTFILE="${TESTCLASSES}"/shutdown2.port +PORTFILE=shutdown2.port +OUTPUTFILE=Debuggee2.out + startDebuggee \ $DEBUGGEEFLAGS \ -agentlib:jdwp=transport=dt_socket,server=y,suspend=y \ @@ -155,27 +180,20 @@ startDebuggee \ $JAVA -classpath "${TESTCLASSES}${PS}${TESTJAVA}/lib/tools.jar" \ ProcessAttachDebugger $pid 2>&1 -# The debuggee is suspended and doesn't run until the debugger -# disconnects. We have to give it time to write the port number -# to ${PORTFILE} +if [ $? != 0 ]; then + echo "Error: ProcessAttachDebugger failed: $?" + failures=`expr $failures + 1` +fi -echo "Waiting for port file to be written..." -attempts=0 -while true; do - sleep 1 - attempts=`expr $attempts + 1` - if [ -f ${PORTFILE} ]; then - break - fi - echo "Waiting $attempts second(s) ..." -done - -if [ $? != 0 ]; then failures=`expr $failures + 1`; fi stopDebuggee "${PORTFILE}" +echo $OUTPUTFILE : +cat $OUTPUTFILE +echo ----- + ### if [ $failures = 0 ]; then echo "All tests passed."; - else echo "$failures test(s) failed:"; cat ${OUTPUTFILE}; + else echo "$failures test(s) failed." fi exit $failures diff --git a/jdk/test/com/sun/jdi/ShellScaffold.sh b/jdk/test/com/sun/jdi/ShellScaffold.sh index 6ed55c1ae91..7bc063d44eb 100644 --- a/jdk/test/com/sun/jdi/ShellScaffold.sh +++ b/jdk/test/com/sun/jdi/ShellScaffold.sh @@ -199,6 +199,8 @@ findPid() if [ "$osname" = SunOS ] ; then # Solaris and OpenSolaris use pgrep and not ps in psCmd findPidCmd="$psCmd" + elif [ "$osname" = AIX ] ; then + findPidCmd="$psCmd" else # Never use plain 'ps', which requires a "controlling terminal" # and will fail with a "ps: no controlling terminal" error. @@ -293,7 +295,7 @@ EOF psCmd=ps jstack=jstack.exe ;; - SunOS | Linux | Darwin) + SunOS | Linux | Darwin | AIX) transport=dt_socket address= devnull=/dev/null diff --git a/jdk/test/com/sun/jdi/connect/spi/JdiLoadedByCustomLoader.sh b/jdk/test/com/sun/jdi/connect/spi/JdiLoadedByCustomLoader.sh index 6222c80bd14..2b104822b17 100644 --- a/jdk/test/com/sun/jdi/connect/spi/JdiLoadedByCustomLoader.sh +++ b/jdk/test/com/sun/jdi/connect/spi/JdiLoadedByCustomLoader.sh @@ -45,7 +45,7 @@ fi OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" ;; Windows* | CYGWIN*) diff --git a/jdk/test/java/awt/Toolkit/AutoShutdown/ShowExitTest/ShowExitTest.sh b/jdk/test/java/awt/Toolkit/AutoShutdown/ShowExitTest/ShowExitTest.sh index 148041c2825..f772c25245f 100644 --- a/jdk/test/java/awt/Toolkit/AutoShutdown/ShowExitTest/ShowExitTest.sh +++ b/jdk/test/java/awt/Toolkit/AutoShutdown/ShowExitTest/ShowExitTest.sh @@ -102,6 +102,14 @@ case "$OS" in TMP=`cd "${SystemRoot}/Temp"; echo ${PWD}` ;; + AIX ) + VAR="A different value for AIX" + DEFAULT_JDK=/ + FILESEP="/" + PATHSEP=":" + TMP="/tmp" + ;; + # catch all other OSs * ) echo "Unrecognized system! $OS" diff --git a/jdk/test/java/awt/appletviewer/IOExceptionIfEncodedURLTest/IOExceptionIfEncodedURLTest.sh b/jdk/test/java/awt/appletviewer/IOExceptionIfEncodedURLTest/IOExceptionIfEncodedURLTest.sh index ccbea0c7ed0..d8880392570 100644 --- a/jdk/test/java/awt/appletviewer/IOExceptionIfEncodedURLTest/IOExceptionIfEncodedURLTest.sh +++ b/jdk/test/java/awt/appletviewer/IOExceptionIfEncodedURLTest/IOExceptionIfEncodedURLTest.sh @@ -135,6 +135,14 @@ case "$OS" in TMP=`cd "${SystemRoot}/Temp"; echo ${PWD}` ;; + AIX ) + VAR="A different value for AIX" + DEFAULT_JDK=/ + FILESEP="/" + PATHSEP=":" + TMP="/tmp" + ;; + # catch all other OSs * ) echo "Unrecognized system! $OS" diff --git a/jdk/test/java/io/Serializable/evolution/RenamePackage/run.sh b/jdk/test/java/io/Serializable/evolution/RenamePackage/run.sh index deda2826115..f37159d6899 100644 --- a/jdk/test/java/io/Serializable/evolution/RenamePackage/run.sh +++ b/jdk/test/java/io/Serializable/evolution/RenamePackage/run.sh @@ -45,7 +45,7 @@ OS=`uname -s` # Need to determine the classpath separator and filepath separator based on the # operating system. case "$OS" in -SunOS | Linux | Darwin ) +SunOS | Linux | Darwin | AIX ) PS=":" ;; Windows* | CYGWIN* ) PS=";" ;; diff --git a/jdk/test/java/io/Serializable/serialver/classpath/run.sh b/jdk/test/java/io/Serializable/serialver/classpath/run.sh index 8c6b9f3d0be..2aa1b0e92ea 100644 --- a/jdk/test/java/io/Serializable/serialver/classpath/run.sh +++ b/jdk/test/java/io/Serializable/serialver/classpath/run.sh @@ -47,7 +47,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" ;; Windows* | CYGWIN* ) PS=";" ;; diff --git a/jdk/test/java/io/Serializable/serialver/nested/run.sh b/jdk/test/java/io/Serializable/serialver/nested/run.sh index 765d2d41c41..578e74afc51 100644 --- a/jdk/test/java/io/Serializable/serialver/nested/run.sh +++ b/jdk/test/java/io/Serializable/serialver/nested/run.sh @@ -47,7 +47,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" ;; Windows* | CYGWIN* ) PS=";" ;; diff --git a/jdk/test/java/lang/ClassLoader/deadlock/TestCrossDelegate.sh b/jdk/test/java/lang/ClassLoader/deadlock/TestCrossDelegate.sh index 24b129aecbc..c86a4c00f73 100644 --- a/jdk/test/java/lang/ClassLoader/deadlock/TestCrossDelegate.sh +++ b/jdk/test/java/lang/ClassLoader/deadlock/TestCrossDelegate.sh @@ -58,6 +58,9 @@ case "$OS" in Darwin ) FS="/" ;; + AIX ) + FS="/" + ;; Windows*) FS="\\" ;; diff --git a/jdk/test/java/lang/ClassLoader/deadlock/TestOneWayDelegate.sh b/jdk/test/java/lang/ClassLoader/deadlock/TestOneWayDelegate.sh index 6d5aabb0728..49abefef8b4 100644 --- a/jdk/test/java/lang/ClassLoader/deadlock/TestOneWayDelegate.sh +++ b/jdk/test/java/lang/ClassLoader/deadlock/TestOneWayDelegate.sh @@ -63,6 +63,9 @@ case "$OS" in Darwin ) FS="/" ;; + AIX ) + FS="/" + ;; Windows* | CYGWIN* ) FS="\\" ;; diff --git a/jdk/test/java/lang/ClassLoader/getResource/GetResource.java b/jdk/test/java/lang/ClassLoader/getResource/GetResource.java new file mode 100644 index 00000000000..1eb62d0bf24 --- /dev/null +++ b/jdk/test/java/lang/ClassLoader/getResource/GetResource.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2014, 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. + */ + +import java.net.URL; + +public class GetResource { + private static final String RESOURCE_NAME = "test.properties"; + public static void main(String[] args) { + String expect = args[0] + "/" + RESOURCE_NAME; + URL url = GetResource.class.getResource(RESOURCE_NAME); + System.out.println("getResource found: " + url); + if (!url.toString().endsWith(expect)) { + throw new RuntimeException(url + " != expected resource " + expect); + } + + url = ClassLoader.getSystemResource(RESOURCE_NAME); + System.out.println("getSystemResource found: " + url); + if (!url.toString().endsWith(expect)) { + throw new RuntimeException(url + " != expected resource " + expect); + } + } +} diff --git a/jdk/test/java/lang/ClassLoader/getResource/GetResource.sh b/jdk/test/java/lang/ClassLoader/getResource/GetResource.sh new file mode 100644 index 00000000000..2f178cd20b8 --- /dev/null +++ b/jdk/test/java/lang/ClassLoader/getResource/GetResource.sh @@ -0,0 +1,124 @@ +# +# Copyright (c) 2014, 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 6760902 +# @summary Empty path on bootclasspath is not default to current working +# directory for both class lookup and resource lookup whereas +# empty path on classpath is default to current working directory. +# +# @run shell GetResource.sh + +if [ "${TESTSRC}" = "" ] ; then + TESTSRC=`pwd` +fi +if [ "${TESTCLASSES}" = "" ] ; then + TESTCLASSES=`pwd` +fi + +if [ "${TESTJAVA}" = "" ] ; then + echo "TESTJAVA not set. Test cannot execute." + echo "FAILED!!!" + exit 1 +fi + +if [ "${COMPILEJAVA}" = "" ] ; then + COMPILEJAVA="${TESTJAVA}" +fi + +# set platform-specific variables +OS=`uname -s` +case "$OS" in + Windows*) + PS=";" + ;; + CYGWIN* ) + PS=";" + TESTCLASSES=`/usr/bin/cygpath -a -s -m ${TESTCLASSES}` + ;; + * ) + PS=":" + ;; +esac + +echo TESTSRC=${TESTSRC} +echo TESTCLASSES=${TESTCLASSES} +echo TESTJAVA=${TESTJAVA} +echo "" + +${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} \ + -d ${TESTCLASSES} \ + ${TESTSRC}/GetResource.java || exit 10 + +setup() { + dest=${TESTCLASSES}/$1 + rm -rf $dest + mkdir $dest + cp ${TESTSRC}/test.properties $dest + cp ${TESTCLASSES}/GetResource.class $dest +} + + +count=0 +runTest() { + expected=$1; + vmoption=$2; shift; shift + count=`expr $count+1` + echo "Test $count : $vmoption $@" + ${TESTJAVA}/bin/java ${TESTVMOPTS} "$vmoption" $@ \ + GetResource $expected || exit $count +} + +# run test +setup "a" +setup "b" + +cd ${TESTCLASSES} +DIR=`pwd` + +# Expected -Xbootclasspath +# Location or -classpath +runTest "a" "-Xbootclasspath/p:a" +runTest "a" "-Xbootclasspath/p:a${PS}b" +runTest "b" "-Xbootclasspath/p:b" +runTest "b" "-Xbootclasspath/p:b${PS}a" +runTest "a" -cp a +runTest "a" -cp "a${PS}b" +runTest "b" -cp b +runTest "b" -cp "b${PS}a" + +cd ${DIR}/a + +runTest "a" "-Xbootclasspath/p:." +runTest "b" "-Xbootclasspath/p:../b" + +# no -classpath +runTest "a" -cp "${PS}" +runTest "b" -cp "../b" + +# Test empty path in bootclasspath not default to current working directory +runTest "b" "-Xbootclasspath/p:${PS}../b" + +# Test empty path in classpath default to current working directory +runTest "a" -cp "${PS}../b" + diff --git a/jdk/test/java/lang/ClassLoader/getResource/test.properties b/jdk/test/java/lang/ClassLoader/getResource/test.properties new file mode 100644 index 00000000000..64ec12be2bd --- /dev/null +++ b/jdk/test/java/lang/ClassLoader/getResource/test.properties @@ -0,0 +1 @@ +# empty resource diff --git a/jdk/test/java/lang/Math/HypotTests.java b/jdk/test/java/lang/Math/HypotTests.java index d48a6f938a0..9582c83daf8 100644 --- a/jdk/test/java/lang/Math/HypotTests.java +++ b/jdk/test/java/lang/Math/HypotTests.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,7 +29,6 @@ */ import sun.misc.DoubleConsts; -import sun.misc.FpUtils; public class HypotTests { private HypotTests(){} @@ -127,7 +126,7 @@ public class HypotTests { double d = rand.nextDouble(); // Scale d to have an exponent equal to MAX_EXPONENT -15 d = Math.scalb(d, DoubleConsts.MAX_EXPONENT - -15 - FpUtils.ilogb(d)); + -15 - Tests.ilogb(d)); for(int j = 0; j <= 13; j += 1) { failures += testHypotCase(3*d, 4*d, 5*d, 2.5); d *= 2.0; // increase exponent by 1 diff --git a/jdk/test/java/lang/Math/IeeeRecommendedTests.java b/jdk/test/java/lang/Math/IeeeRecommendedTests.java index f776bbf5b1c..ce4c6595b4b 100644 --- a/jdk/test/java/lang/Math/IeeeRecommendedTests.java +++ b/jdk/test/java/lang/Math/IeeeRecommendedTests.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,7 +28,6 @@ * @author Joseph D. Darcy */ -import sun.misc.FpUtils; import sun.misc.DoubleConsts; import sun.misc.FloatConsts; @@ -708,21 +707,21 @@ public class IeeeRecommendedTests { for(int i = 0; i < testCases.length; i++) { // isNaN - failures+=Tests.test("FpUtils.isNaN(float)", testCases[i], - FpUtils.isNaN(testCases[i]), (i ==0)); + failures+=Tests.test("Float.isNaN(float)", testCases[i], + Float.isNaN(testCases[i]), (i ==0)); // isFinite failures+=Tests.test("Float.isFinite(float)", testCases[i], Float.isFinite(testCases[i]), (i >= 3)); // isInfinite - failures+=Tests.test("FpUtils.isInfinite(float)", testCases[i], - FpUtils.isInfinite(testCases[i]), (i==1 || i==2)); + failures+=Tests.test("Float.isInfinite(float)", testCases[i], + Float.isInfinite(testCases[i]), (i==1 || i==2)); // isUnorderd for(int j = 0; j < testCases.length; j++) { - failures+=Tests.test("FpUtils.isUnordered(float, float)", testCases[i],testCases[j], - FpUtils.isUnordered(testCases[i],testCases[j]), (i==0 || j==0)); + failures+=Tests.test("Tests.isUnordered(float, float)", testCases[i],testCases[j], + Tests.isUnordered(testCases[i],testCases[j]), (i==0 || j==0)); } } @@ -758,21 +757,21 @@ public class IeeeRecommendedTests { for(int i = 0; i < testCases.length; i++) { // isNaN - failures+=Tests.test("FpUtils.isNaN(double)", testCases[i], - FpUtils.isNaN(testCases[i]), (i ==0)); + failures+=Tests.test("Double.isNaN(double)", testCases[i], + Double.isNaN(testCases[i]), (i ==0)); // isFinite failures+=Tests.test("Double.isFinite(double)", testCases[i], Double.isFinite(testCases[i]), (i >= 3)); // isInfinite - failures+=Tests.test("FpUtils.isInfinite(double)", testCases[i], - FpUtils.isInfinite(testCases[i]), (i==1 || i==2)); + failures+=Tests.test("Double.isInfinite(double)", testCases[i], + Double.isInfinite(testCases[i]), (i==1 || i==2)); // isUnorderd for(int j = 0; j < testCases.length; j++) { - failures+=Tests.test("FpUtils.isUnordered(double, double)", testCases[i],testCases[j], - FpUtils.isUnordered(testCases[i],testCases[j]), (i==0 || j==0)); + failures+=Tests.test("Tests.isUnordered(double, double)", testCases[i],testCases[j], + Tests.isUnordered(testCases[i],testCases[j]), (i==0 || j==0)); } } @@ -1023,8 +1022,8 @@ public class IeeeRecommendedTests { 2*FloatConsts.MIN_EXPONENT, // -252 2*FloatConsts.MIN_EXPONENT+1, // -251 - FpUtils.ilogb(Float.MIN_VALUE)-1, // -150 - FpUtils.ilogb(Float.MIN_VALUE), // -149 + FloatConsts.MIN_EXPONENT - FloatConsts.SIGNIFICAND_WIDTH, + FloatConsts.MIN_SUB_EXPONENT, -FloatConsts.MAX_EXPONENT, // -127 FloatConsts.MIN_EXPONENT, // -126 @@ -1100,7 +1099,7 @@ public class IeeeRecommendedTests { failures+=testScalbCase(value, scaleFactor, - (FpUtils.ilogb(value) +j > FloatConsts.MAX_EXPONENT ) ? + (Tests.ilogb(value) +j > FloatConsts.MAX_EXPONENT ) ? Math.copySign(infinityF, value) : // overflow // calculate right answer twoToTheMaxExp*(twoToTheMaxExp*(scale*value)) ); @@ -1230,8 +1229,9 @@ public class IeeeRecommendedTests { 2*DoubleConsts.MIN_EXPONENT, // -2044 2*DoubleConsts.MIN_EXPONENT+1, // -2043 - FpUtils.ilogb(Double.MIN_VALUE)-1, // -1076 - FpUtils.ilogb(Double.MIN_VALUE), // -1075 + DoubleConsts.MIN_EXPONENT, // -1022 + DoubleConsts.MIN_EXPONENT - DoubleConsts.SIGNIFICAND_WIDTH, + DoubleConsts.MIN_SUB_EXPONENT, -DoubleConsts.MAX_EXPONENT, // -1023 DoubleConsts.MIN_EXPONENT, // -1022 @@ -1307,7 +1307,7 @@ public class IeeeRecommendedTests { failures+=testScalbCase(value, scaleFactor, - (FpUtils.ilogb(value) +j > DoubleConsts.MAX_EXPONENT ) ? + (Tests.ilogb(value) +j > DoubleConsts.MAX_EXPONENT ) ? Math.copySign(infinityD, value) : // overflow // calculate right answer twoToTheMaxExp*(twoToTheMaxExp*(scale*value)) ); diff --git a/jdk/test/java/lang/Math/Log1pTests.java b/jdk/test/java/lang/Math/Log1pTests.java index 56a80047aa9..5fe373edc78 100644 --- a/jdk/test/java/lang/Math/Log1pTests.java +++ b/jdk/test/java/lang/Math/Log1pTests.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,7 +29,6 @@ */ import sun.misc.DoubleConsts; -import sun.misc.FpUtils; public class Log1pTests { private Log1pTests(){} @@ -105,7 +104,7 @@ public class Log1pTests { for(int i = 0; i < 1000; i++) { double d = rand.nextDouble(); - d = Math.scalb(d, -53 - FpUtils.ilogb(d)); + d = Math.scalb(d, -53 - Tests.ilogb(d)); for(int j = -53; j <= 52; j++) { failures += testLog1pCaseWithUlpDiff(d, hp15cLogp(d), 5); diff --git a/jdk/test/java/lang/Math/Tests.java b/jdk/test/java/lang/Math/Tests.java index 7dd6d68075f..c06c4ed79e3 100644 --- a/jdk/test/java/lang/Math/Tests.java +++ b/jdk/test/java/lang/Math/Tests.java @@ -30,7 +30,8 @@ * and finally the expected result. */ -import sun.misc.FpUtils; +import sun.misc.FloatConsts; +import sun.misc.DoubleConsts; public class Tests { private Tests(){}; // do not instantiate @@ -59,6 +60,176 @@ public class Tests { return -Math.nextUp(-d); } + /** + * Returns unbiased exponent of a {@code float}; for + * subnormal values, the number is treated as if it were + * normalized. That is for all finite, non-zero, positive numbers + * x, scalb(x, -ilogb(x)) is + * always in the range [1, 2). + *

        + * Special cases: + *

          + *
        • If the argument is NaN, then the result is 230. + *
        • If the argument is infinite, then the result is 228. + *
        • If the argument is zero, then the result is -(228). + *
        + * + * @param f floating-point number whose exponent is to be extracted + * @return unbiased exponent of the argument. + */ + public static int ilogb(double d) { + int exponent = Math.getExponent(d); + + switch (exponent) { + case DoubleConsts.MAX_EXPONENT+1: // NaN or infinity + if( Double.isNaN(d) ) + return (1<<30); // 2^30 + else // infinite value + return (1<<28); // 2^28 + + case DoubleConsts.MIN_EXPONENT-1: // zero or subnormal + if(d == 0.0) { + return -(1<<28); // -(2^28) + } + else { + long transducer = Double.doubleToRawLongBits(d); + + /* + * To avoid causing slow arithmetic on subnormals, + * the scaling to determine when d's significand + * is normalized is done in integer arithmetic. + * (there must be at least one "1" bit in the + * significand since zero has been screened out. + */ + + // isolate significand bits + transducer &= DoubleConsts.SIGNIF_BIT_MASK; + assert(transducer != 0L); + + // This loop is simple and functional. We might be + // able to do something more clever that was faster; + // e.g. number of leading zero detection on + // (transducer << (# exponent and sign bits). + while (transducer < + (1L << (DoubleConsts.SIGNIFICAND_WIDTH - 1))) { + transducer *= 2; + exponent--; + } + exponent++; + assert( exponent >= + DoubleConsts.MIN_EXPONENT - (DoubleConsts.SIGNIFICAND_WIDTH-1) && + exponent < DoubleConsts.MIN_EXPONENT); + return exponent; + } + + default: + assert( exponent >= DoubleConsts.MIN_EXPONENT && + exponent <= DoubleConsts.MAX_EXPONENT); + return exponent; + } + } + + /** + * Returns unbiased exponent of a {@code float}; for + * subnormal values, the number is treated as if it were + * normalized. That is for all finite, non-zero, positive numbers + * x, scalb(x, -ilogb(x)) is + * always in the range [1, 2). + *

        + * Special cases: + *

          + *
        • If the argument is NaN, then the result is 230. + *
        • If the argument is infinite, then the result is 228. + *
        • If the argument is zero, then the result is -(228). + *
        + * + * @param f floating-point number whose exponent is to be extracted + * @return unbiased exponent of the argument. + */ + public static int ilogb(float f) { + int exponent = Math.getExponent(f); + + switch (exponent) { + case FloatConsts.MAX_EXPONENT+1: // NaN or infinity + if( Float.isNaN(f) ) + return (1<<30); // 2^30 + else // infinite value + return (1<<28); // 2^28 + + case FloatConsts.MIN_EXPONENT-1: // zero or subnormal + if(f == 0.0f) { + return -(1<<28); // -(2^28) + } + else { + int transducer = Float.floatToRawIntBits(f); + + /* + * To avoid causing slow arithmetic on subnormals, + * the scaling to determine when f's significand + * is normalized is done in integer arithmetic. + * (there must be at least one "1" bit in the + * significand since zero has been screened out. + */ + + // isolate significand bits + transducer &= FloatConsts.SIGNIF_BIT_MASK; + assert(transducer != 0); + + // This loop is simple and functional. We might be + // able to do something more clever that was faster; + // e.g. number of leading zero detection on + // (transducer << (# exponent and sign bits). + while (transducer < + (1 << (FloatConsts.SIGNIFICAND_WIDTH - 1))) { + transducer *= 2; + exponent--; + } + exponent++; + assert( exponent >= + FloatConsts.MIN_EXPONENT - (FloatConsts.SIGNIFICAND_WIDTH-1) && + exponent < FloatConsts.MIN_EXPONENT); + return exponent; + } + + default: + assert( exponent >= FloatConsts.MIN_EXPONENT && + exponent <= FloatConsts.MAX_EXPONENT); + return exponent; + } + } + + /** + * Returns {@code true} if the unordered relation holds + * between the two arguments. When two floating-point values are + * unordered, one value is neither less than, equal to, nor + * greater than the other. For the unordered relation to be true, + * at least one argument must be a {@code NaN}. + * + * @param arg1 the first argument + * @param arg2 the second argument + * @return {@code true} if at least one argument is a NaN, + * {@code false} otherwise. + */ + public static boolean isUnordered(float arg1, float arg2) { + return Float.isNaN(arg1) || Float.isNaN(arg2); + } + + /** + * Returns {@code true} if the unordered relation holds + * between the two arguments. When two floating-point values are + * unordered, one value is neither less than, equal to, nor + * greater than the other. For the unordered relation to be true, + * at least one argument must be a {@code NaN}. + * + * @param arg1 the first argument + * @param arg2 the second argument + * @return {@code true} if at least one argument is a NaN, + * {@code false} otherwise. + */ + public static boolean isUnordered(double arg1, double arg2) { + return Double.isNaN(arg1) || Double.isNaN(arg2); + } + public static int test(String testName, float input, boolean result, boolean expected) { if (expected != result) { @@ -237,7 +408,7 @@ public class Tests { return 1; } else { double difference = expected - result; - if (FpUtils.isUnordered(expected, result) || + if (isUnordered(expected, result) || Double.isNaN(difference) || // fail if greater than or unordered !(Math.abs( difference/Math.ulp(expected) ) <= Math.abs(ulps)) ) { @@ -332,7 +503,7 @@ public class Tests { double result, double expected, double tolerance) { if (Double.compare(expected, result ) != 0) { double difference = expected - result; - if (FpUtils.isUnordered(expected, result) || + if (isUnordered(expected, result) || Double.isNaN(difference) || // fail if greater than or unordered !(Math.abs((difference)/expected) <= StrictMath.pow(10, -tolerance)) ) { diff --git a/jdk/test/java/lang/ProcessBuilder/Basic.java b/jdk/test/java/lang/ProcessBuilder/Basic.java index 515c6ec18e1..ce0bad7772f 100644 --- a/jdk/test/java/lang/ProcessBuilder/Basic.java +++ b/jdk/test/java/lang/ProcessBuilder/Basic.java @@ -61,6 +61,9 @@ public class Basic { /* used for Mac OS X only */ static final String cfUserTextEncoding = System.getenv("__CF_USER_TEXT_ENCODING"); + /* used for AIX only */ + static final String libpath = System.getenv("LIBPATH"); + /** * Returns the number of milliseconds since time given by * startNanoTime, which must have been previously returned from a @@ -87,7 +90,11 @@ public class Basic { String output = commandOutput(r); equal(p.waitFor(), 0); equal(p.exitValue(), 0); - return output; + // The debug/fastdebug versions of the VM may write some warnings to stdout + // (i.e. "Warning: Cannot open log file: hotspot.log" if the VM is started + // in a directory without write permissions). These warnings will confuse tests + // which match the entire output of the child process so better filter them out. + return output.replaceAll("Warning:.*\\n", ""); } private static String commandOutput(ProcessBuilder pb) { @@ -588,6 +595,12 @@ public class Basic { System.getProperty("os.name").startsWith("Windows"); } + static class AIX { + public static boolean is() { return is; } + private static final boolean is = + System.getProperty("os.name").equals("AIX"); + } + static class Unix { public static boolean is() { return is; } private static final boolean is = @@ -641,7 +654,7 @@ public class Basic { private static boolean isEnglish(String envvar) { String val = getenv(envvar); - return (val == null) || val.matches("en.*"); + return (val == null) || val.matches("en.*") || val.matches("C"); } /** Returns true if we can expect English OS error strings */ @@ -716,6 +729,14 @@ public class Basic { return cleanedVars.replace(javaMainClassStr,""); } + /* Only used for AIX -- + * AIX adds the variable AIXTHREAD_GUARDPAGES=0 to the environment. + * Remove it from the list of env variables + */ + private static String removeAixExpectedVars(String vars) { + return vars.replace("AIXTHREAD_GUARDPAGES=0,",""); + } + private static String sortByLinesWindowsly(String text) { String[] lines = text.split("\n"); Arrays.sort(lines, new WindowsComparator()); @@ -1164,13 +1185,20 @@ public class Basic { ProcessBuilder pb = new ProcessBuilder(); pb.environment().clear(); String expected = Windows.is() ? "SystemRoot="+systemRoot+",": ""; + expected = AIX.is() ? "LIBPATH="+libpath+",": expected; if (Windows.is()) { pb.environment().put("SystemRoot", systemRoot); } + if (AIX.is()) { + pb.environment().put("LIBPATH", libpath); + } String result = getenvInChild(pb); if (MacOSX.is()) { result = removeMacExpectedVars(result); } + if (AIX.is()) { + result = removeAixExpectedVars(result); + } equal(result, expected); } catch (Throwable t) { unexpected(t); } @@ -1685,10 +1713,14 @@ public class Basic { } Process p = Runtime.getRuntime().exec(cmdp, envp); String expected = Windows.is() ? "=C:=\\,=ExitValue=3,SystemRoot="+systemRoot+"," : "=C:=\\,"; + expected = AIX.is() ? expected + "LIBPATH="+libpath+",": expected; String commandOutput = commandOutput(p); if (MacOSX.is()) { commandOutput = removeMacExpectedVars(commandOutput); } + if (AIX.is()) { + commandOutput = removeAixExpectedVars(commandOutput); + } equal(commandOutput, expected); if (Windows.is()) { ProcessBuilder pb = new ProcessBuilder(childArgs); @@ -1740,9 +1772,14 @@ public class Basic { if (MacOSX.is()) { commandOutput = removeMacExpectedVars(commandOutput); } + if (AIX.is()) { + commandOutput = removeAixExpectedVars(commandOutput); + } check(commandOutput.equals(Windows.is() ? "LC_ALL=C,SystemRoot="+systemRoot+"," - : "LC_ALL=C,"), + : AIX.is() + ? "LC_ALL=C,LIBPATH="+libpath+"," + : "LC_ALL=C,"), "Incorrect handling of envstrings containing NULs"); } catch (Throwable t) { unexpected(t); } @@ -2019,8 +2056,13 @@ public class Basic { if (Unix.is() && new File("/bin/bash").exists() && new File("/bin/sleep").exists()) { - final String[] cmd = { "/bin/bash", "-c", "(/bin/sleep 6666)" }; - final String[] cmdkill = { "/bin/bash", "-c", "(/usr/bin/pkill -f \"sleep 6666\")" }; + // Notice that we only destroy the process created by us (i.e. + // our child) but not our grandchild (i.e. '/bin/sleep'). So + // pay attention that the grandchild doesn't run too long to + // avoid polluting the process space with useless processes. + // Running the grandchild for 60s should be more than enough. + final String[] cmd = { "/bin/bash", "-c", "(/bin/sleep 60)" }; + final String[] cmdkill = { "/bin/bash", "-c", "(/usr/bin/pkill -f \"sleep 60\")" }; final ProcessBuilder pb = new ProcessBuilder(cmd); final Process p = pb.start(); final InputStream stdout = p.getInputStream(); @@ -2042,13 +2084,27 @@ public class Basic { reader.start(); Thread.sleep(100); p.destroy(); - // Subprocess is now dead, but file descriptors remain open. check(p.waitFor() != 0); check(p.exitValue() != 0); + // Subprocess is now dead, but file descriptors remain open. + // Make sure the test will fail if we don't manage to close + // the open streams within 30 seconds. Notice that this time + // must be shorter than the sleep time of the grandchild. + Timer t = new Timer("test/java/lang/ProcessBuilder/Basic.java process reaper", true); + t.schedule(new TimerTask() { + public void run() { + fail("Subprocesses which create subprocesses of " + + "their own caused the parent to hang while " + + "waiting for file descriptors to be closed."); + System.exit(-1); + } + }, 30000); stdout.close(); stderr.close(); stdin.close(); new ProcessBuilder(cmdkill).start(); + // All streams successfully closed so we can cancel the timer. + t.cancel(); //---------------------------------------------------------- // There remain unsolved issues with asynchronous close. // Here's a highly non-portable experiment to demonstrate: @@ -2194,8 +2250,9 @@ public class Basic { } long end = System.nanoTime(); // give waitFor(timeout) a wide berth (100ms) - if ((end - start) > 100000000) - fail("Test failed: waitFor took too long"); + // Old AIX machines my need a little longer. + if ((end - start) > 100000000L * (AIX.is() ? 4 : 1)) + fail("Test failed: waitFor took too long (" + (end - start) + "ns)"); p.destroy(); p.waitFor(); @@ -2222,7 +2279,7 @@ public class Basic { long end = System.nanoTime(); if ((end - start) < 500000000) - fail("Test failed: waitFor didn't take long enough"); + fail("Test failed: waitFor didn't take long enough (" + (end - start) + "ns)"); p.destroy(); @@ -2230,7 +2287,7 @@ public class Basic { p.waitFor(1000, TimeUnit.MILLISECONDS); end = System.nanoTime(); if ((end - start) > 900000000) - fail("Test failed: waitFor took too long on a dead process."); + fail("Test failed: waitFor took too long on a dead process. (" + (end - start) + "ns)"); } catch (Throwable t) { unexpected(t); } //---------------------------------------------------------------- diff --git a/jdk/test/java/lang/ProcessBuilder/CloseRace.java b/jdk/test/java/lang/ProcessBuilder/CloseRace.java new file mode 100644 index 00000000000..ff2e81fe7a8 --- /dev/null +++ b/jdk/test/java/lang/ProcessBuilder/CloseRace.java @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2013, 2014 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 8024521 + * @summary Closing ProcessPipeInputStream at the time the process exits is racy + * and leads to data corruption. Run this test manually (as + * an ordinary java program) with -Xmx8M to repro bug 8024521. + * @run main/othervm -Xmx8M -Dtest.duration=2 CloseRace + */ + +import java.io.*; +import java.util.ArrayList; +import java.util.List; + +public class CloseRace { + private static final String BIG_FILE = "bigfile"; + + private static final int[] procFDs = new int[6]; + + /** default value sufficient to repro bug 8024521. */ + private static final int testDurationSeconds + = Integer.getInteger("test.duration", 600); + + static boolean fdInUse(int i) { + return new File("/proc/self/fd/" + i).exists(); + } + + static boolean[] procFDsInUse() { + boolean[] inUse = new boolean[procFDs.length]; + for (int i = 0; i < procFDs.length; i++) + inUse[i] = fdInUse(procFDs[i]); + return inUse; + } + + static int count(boolean[] bits) { + int count = 0; + for (int i = 0; i < bits.length; i++) + count += bits[i] ? 1 : 0; + return count; + } + + public static void main(String args[]) throws Exception { + if (!(new File("/proc/self/fd").isDirectory())) + return; + + // Catch Errors from process reaper + Thread.setDefaultUncaughtExceptionHandler + ((t, e) -> { e.printStackTrace(); System.exit(1); }); + + try (RandomAccessFile f = new RandomAccessFile(BIG_FILE, "rw")) { + f.setLength(Runtime.getRuntime().maxMemory()); // provoke OOME + } + + for (int i = 0, j = 0; j < procFDs.length; i++) + if (!fdInUse(i)) + procFDs[j++] = i; + + Thread[] threads = { + new Thread(new OpenLoop()), + new Thread(new ExecLoop()), + }; + for (Thread thread : threads) + thread.start(); + + Thread.sleep(testDurationSeconds * 1000); + + for (Thread thread : threads) + thread.interrupt(); + for (Thread thread : threads) + thread.join(); + } + + static class OpenLoop implements Runnable { + public void run() { + while (!Thread.interrupted()) { + try { + // wait for ExecLoop to finish creating process + do {} while (count(procFDsInUse()) != 3); + List iss = new ArrayList<>(4); + + // eat up three "holes" (closed ends of pipe fd pairs) + for (int i = 0; i < 3; i++) + iss.add(new FileInputStream(BIG_FILE)); + do {} while (count(procFDsInUse()) == procFDs.length); + // hopefully this will racily occupy empty fd slot + iss.add(new FileInputStream(BIG_FILE)); + Thread.sleep(1); // Widen race window + for (InputStream is : iss) + is.close(); + } catch (InterruptedException e) { + break; + } catch (Exception e) { + throw new Error(e); + } + } + } + } + + static class ExecLoop implements Runnable { + public void run() { + ProcessBuilder builder = new ProcessBuilder("/bin/true"); + while (!Thread.interrupted()) { + try { + // wait for OpenLoop to finish + do {} while (count(procFDsInUse()) > 0); + Process process = builder.start(); + InputStream is = process.getInputStream(); + process.waitFor(); + is.close(); + } catch (InterruptedException e) { + break; + } catch (Exception e) { + throw new Error(e); + } + } + } + } +} diff --git a/jdk/test/java/lang/ProcessBuilder/DestroyTest.java b/jdk/test/java/lang/ProcessBuilder/DestroyTest.java index ebf00e32b79..401bd146c28 100644 --- a/jdk/test/java/lang/ProcessBuilder/DestroyTest.java +++ b/jdk/test/java/lang/ProcessBuilder/DestroyTest.java @@ -154,6 +154,9 @@ public class DestroyTest { } else if (osName.equals("SunOS")) { return new UnixTest( File.createTempFile("ProcessTrap-", ".sh",null)); + } else if (osName.equals("AIX")) { + return new UnixTest( + File.createTempFile("ProcessTrap-", ".sh",null)); } return null; } diff --git a/jdk/test/java/lang/Runtime/exec/CloseRace.java b/jdk/test/java/lang/Runtime/exec/CloseRace.java deleted file mode 100644 index a1e57902e31..00000000000 --- a/jdk/test/java/lang/Runtime/exec/CloseRace.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * 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 8024521 - * @summary Closing ProcessPipeInputStream at the time the process exits is racy - * and leads to the data corruption. - * @library /lib/testlibrary - * @run main/othervm/timeout=80 CloseRace - */ - -/** - * This test has a little chance to catch the race during the given default - * time gap of 20 seconds. To increase the time gap, set the system property - * CloseRaceTimeGap=N to the number of seconds. - * Jtreg's timeoutFactor should also be set appropriately. - * - * For example, to run the test for 10 minutes: - * > jtreg \ - * -testjdk:$(PATH_TO_TESTED_JDK) \ - * -timeoutFactor:10 \ - * -DCloseRaceTimeGap=600 \ - * $(PATH_TO_TESTED_JDK_SOURCE)/test/java/lang/Runtime/exec/CloseRace.java - */ - -import java.io.*; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.LinkedList; -import java.util.List; -import jdk.testlibrary.OutputAnalyzer; -import static jdk.testlibrary.ProcessTools.*; - -public class CloseRace { - - public static void main(String args[]) throws Exception { - ProcessBuilder pb = createJavaProcessBuilder("-Xmx64M", "CloseRace$Child", - System.getProperty("CloseRaceTimeGap", "20")); - OutputAnalyzer oa = new OutputAnalyzer(pb.start()); - oa.stderrShouldNotContain("java.lang.OutOfMemoryError"); - } - - public static class Child { - private static final String BIG_FILE = "bigfile"; - private static final String SMALL_FILE = "smallfile"; - private static int timeGap = 20; // seconds - - public static void main(String args[]) throws Exception { - if (args.length > 0) { - try { - timeGap = Integer.parseUnsignedInt(args[0]); - timeGap = Integer.max(timeGap, 10); - timeGap = Integer.min(timeGap, 10 * 60 * 60); // no more than 10 hours - } catch (NumberFormatException ignore) {} - } - try (RandomAccessFile f = new RandomAccessFile(BIG_FILE, "rw")) { - f.setLength(1024 * 1024 * 1024); // 1 Gb, greater than max heap size - } - try (FileOutputStream fs = new FileOutputStream(SMALL_FILE); - PrintStream ps = new PrintStream(fs)) { - for (int i = 0; i < 128; ++i) - ps.println("line of text"); - } - - List threads = new LinkedList<>(); - for (int i = 0; i < 99; ++i) { - Thread t = new Thread (new OpenLoop()); - t.start(); - threads.add(t); - } - Thread t2 = new Thread (new ExecLoop()); - t2.start(); - threads.add(t2); - - Thread.sleep(timeGap); - - for (Thread t : threads) { - t.interrupt(); - t.join(); - } - } - - private static class OpenLoop implements Runnable { - public void run() { - final Path bigFilePath = Paths.get(BIG_FILE); - while (!Thread.interrupted()) { - try (InputStream in = Files.newInputStream(bigFilePath)) { - // Widen the race window by sleeping 1ms - Thread.sleep(1); - } catch (InterruptedException e) { - break; - } catch (Exception e) { - System.err.println(e); - } - } - } - } - - private static class ExecLoop implements Runnable { - public void run() { - List command = new ArrayList<>( - Arrays.asList("/bin/cat", SMALL_FILE)); - while (!Thread.interrupted()) { - try { - ProcessBuilder builder = new ProcessBuilder(command); - final Process process = builder.start(); - InputStream is = process.getInputStream(); - InputStreamReader isr = new InputStreamReader(is); - BufferedReader br = new BufferedReader(isr); - while (br.readLine() != null) {} - process.waitFor(); - isr.close(); - } catch (InterruptedException e) { - break; - } catch (Exception e) { - System.err.println(e); - } - } - } - } - } -} diff --git a/jdk/test/java/lang/StringCoding/CheckEncodings.sh b/jdk/test/java/lang/StringCoding/CheckEncodings.sh index edc5f9a4e49..2936d9cae65 100644 --- a/jdk/test/java/lang/StringCoding/CheckEncodings.sh +++ b/jdk/test/java/lang/StringCoding/CheckEncodings.sh @@ -30,7 +30,7 @@ # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin) ;; + SunOS | Linux | Darwin | AIX ) ;; Windows* | CYGWIN* ) echo "Passed"; exit 0 ;; * ) echo "Unrecognized system!" ; exit 1 ;; diff --git a/jdk/test/java/lang/annotation/loaderLeak/LoaderLeak.sh b/jdk/test/java/lang/annotation/loaderLeak/LoaderLeak.sh index e62a63cd8a5..915aa9558ff 100644 --- a/jdk/test/java/lang/annotation/loaderLeak/LoaderLeak.sh +++ b/jdk/test/java/lang/annotation/loaderLeak/LoaderLeak.sh @@ -48,7 +48,7 @@ echo "CLASSPATH=${CLASSPATH}" # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/java/lang/instrument/DaemonThread/DummyAgent.java b/jdk/test/java/lang/instrument/DaemonThread/DummyAgent.java new file mode 100644 index 00000000000..64b4d59cf18 --- /dev/null +++ b/jdk/test/java/lang/instrument/DaemonThread/DummyAgent.java @@ -0,0 +1,46 @@ +/* + * Copyright 2014 Goldman Sachs. + * Copyright (c) 2014, 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. + */ + +import java.lang.instrument.ClassFileTransformer; +import java.lang.instrument.IllegalClassFormatException; +import java.lang.instrument.Instrumentation; +import java.security.ProtectionDomain; + +public class DummyAgent implements ClassFileTransformer { + @Override + public byte[] transform(ClassLoader loader, String className, + Class classBeingRedefined, ProtectionDomain protectionDomain, + byte[] classfileBuffer) throws IllegalClassFormatException { + + /* The Daemon Thread bug is timing dependent and you want the transform method + * to return ASAP - so just return the buffer will be fine + */ + return classfileBuffer; + } + + public static void premain(String agentArgs, Instrumentation inst) { + inst.addTransformer(new DummyAgent(), false); + } + +} diff --git a/jdk/test/java/lang/instrument/DaemonThread/DummyClass.java b/jdk/test/java/lang/instrument/DaemonThread/DummyClass.java new file mode 100644 index 00000000000..18d671afc09 --- /dev/null +++ b/jdk/test/java/lang/instrument/DaemonThread/DummyClass.java @@ -0,0 +1,27 @@ +/* + * Copyright 2014 Goldman Sachs. + * Copyright (c) 2014, 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. + */ + +/* Just a dummy class for loading */ +public class DummyClass { +} diff --git a/jdk/test/java/lang/instrument/DaemonThread/TestDaemonThread.java b/jdk/test/java/lang/instrument/DaemonThread/TestDaemonThread.java new file mode 100644 index 00000000000..20c9077d02f --- /dev/null +++ b/jdk/test/java/lang/instrument/DaemonThread/TestDaemonThread.java @@ -0,0 +1,72 @@ +/* + * Copyright 2014 Goldman Sachs. + * Copyright (c) 2014, 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 7142035 + * @summary Assert in java.lang.instrument agents during shutdown when classloading occurs after shutdown + * @library /lib/testlibrary + * + * @build DummyAgent DummyClass TestDaemonThreadLauncher TestDaemonThread + * @run shell ../MakeJAR3.sh DummyAgent + * @run main TestDaemonThreadLauncher /timeout=240 + * + */ +import java.io.File; +import java.net.URL; +import java.net.URLClassLoader; + +public class TestDaemonThread implements Runnable{ + File classpath; + + public TestDaemonThread(File classpath) { + this.classpath = classpath; + } + + @Override + public void run() { + + + try { + URL u = this.getClass().getClassLoader().getResource("DummyClass.class"); + String path = u.getPath(); + String parent = u.getPath().substring(0, path.lastIndexOf('/')+1); + URL parentURL = new URL(u, parent); + System.out.println(parentURL); + /* Load lots of class by creating multiple classloaders */ + for(;;) { + ClassLoader cl = new URLClassLoader(new URL[] {parentURL}, null); + cl.loadClass("DummyClass"); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static void main(String[] args) throws Exception { + Thread t = new Thread(new TestDaemonThread(new File(args[0]))); + /* The important part of the bug is that a Daemon thread can continue to load classes after shutdown */ + t.setDaemon(true); + t.start(); + Thread.sleep(200); + } +} diff --git a/jdk/test/java/lang/instrument/DaemonThread/TestDaemonThreadLauncher.java b/jdk/test/java/lang/instrument/DaemonThread/TestDaemonThreadLauncher.java new file mode 100644 index 00000000000..9660bbfa9dc --- /dev/null +++ b/jdk/test/java/lang/instrument/DaemonThread/TestDaemonThreadLauncher.java @@ -0,0 +1,44 @@ +/* + * Copyright 2014 Goldman Sachs. + * Copyright (c) 2014, 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. + */ + + +import jdk.testlibrary.JDKToolLauncher; +import jdk.testlibrary.OutputAnalyzer; +import jdk.testlibrary.ProcessTools; + +import java.io.IOException; +import java.nio.file.Path; + +public class TestDaemonThreadLauncher { + + private static ProcessBuilder processBuilder = new ProcessBuilder(); + + public static void main(String args[]) throws Exception { + for(int i=0; i<50; i++) { + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-javaagent:DummyAgent.jar", "TestDaemonThread", "."); + OutputAnalyzer analyzer = new OutputAnalyzer(pb.start()); + analyzer.shouldNotContain("ASSERTION FAILED"); + } + } +} diff --git a/jdk/test/java/lang/instrument/appendToClassLoaderSearch/CommonSetup.sh b/jdk/test/java/lang/instrument/appendToClassLoaderSearch/CommonSetup.sh index 3455959c3aa..c47f59de834 100644 --- a/jdk/test/java/lang/instrument/appendToClassLoaderSearch/CommonSetup.sh +++ b/jdk/test/java/lang/instrument/appendToClassLoaderSearch/CommonSetup.sh @@ -47,6 +47,10 @@ case "$OS" in PS=":" FS="/" ;; + AIX ) + PS=":" + FS="/" + ;; Windows*) PS=";" OS="Windows" diff --git a/jdk/test/java/lang/invoke/lambda/T8032697.java b/jdk/test/java/lang/invoke/lambda/T8032697.java new file mode 100644 index 00000000000..be422a94b33 --- /dev/null +++ b/jdk/test/java/lang/invoke/lambda/T8032697.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2014, 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 8032697 + * @summary Issues with Lambda + */ + +import java.lang.invoke.LambdaMetafactory; +import java.lang.invoke.LambdaConversionException; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; + +import T8032697_anotherpkg.T8032697_A; + +public class T8032697 extends T8032697_A { + + interface I { + int m(); + } + + interface IA { + int m(T8032697_A x); + } + + static MethodHandles.Lookup l; + static MethodHandle h; + private static MethodType mt(Class k) { return MethodType.methodType(k); } + private static MethodType mt(Class k, Class k2) { return MethodType.methodType(k, k2); } + private static boolean mf(MethodType mti, MethodType mtf) { + try { + LambdaMetafactory.metafactory(l, "m", mti,mtf,h,mtf); + } catch(LambdaConversionException e) { + return true; + } + return false; + } + + public static void main(String[] args) throws Throwable { + l = MethodHandles.lookup(); + h = l.findVirtual(T8032697_A.class, "f", mt(int.class)); + if (mf(mt(I.class, T8032697.class), mt(int.class))) throw new AssertionError("Error: Should work"); + if (mf(mt(IA.class), mt(int.class, T8032697.class))) throw new AssertionError("Error: Should work"); + if (!mf(mt(I.class, T8032697_A.class), mt(int.class))) throw new AssertionError("Error: Should fail"); + if (!mf(mt(IA.class), mt(int.class, T8032697_A.class))) throw new AssertionError("Error: Should fail"); + } +} diff --git a/jdk/test/java/lang/invoke/lambda/T8032697_anotherpkg/T8032697_A.java b/jdk/test/java/lang/invoke/lambda/T8032697_anotherpkg/T8032697_A.java new file mode 100644 index 00000000000..d611e3fef6f --- /dev/null +++ b/jdk/test/java/lang/invoke/lambda/T8032697_anotherpkg/T8032697_A.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package T8032697_anotherpkg; + +public class T8032697_A { + protected final int f() { return 2; } +} diff --git a/jdk/test/java/lang/invoke/lambda/T8032704.java b/jdk/test/java/lang/invoke/lambda/T8032704.java new file mode 100644 index 00000000000..9dfe3a0f108 --- /dev/null +++ b/jdk/test/java/lang/invoke/lambda/T8032704.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2014, 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 8032704 + * @summary Issues with lib perm in Lambda + */ + +import java.io.Closeable; +import java.lang.invoke.LambdaMetafactory; +import java.lang.invoke.LambdaConversionException; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; + +public class T8032704 { + + public static void here() {} + static MethodHandle h; + private static MethodType mt(Class k) { return MethodType.methodType(k); } + private static boolean mf(MethodHandles.Lookup l) { + try { + LambdaMetafactory.metafactory(l, "close", + mt(Closeable.class),mt(void.class),h,mt(void.class)); + } catch(LambdaConversionException e) { + return true; + } + return false; + } + + public static void main(String[] args) throws Throwable { + MethodHandles.Lookup ll = MethodHandles.lookup(); + h = ll.findStatic(T8032704.class, "here", mt(void.class)); + if (mf(ll)) throw new AssertionError("Error: Should work"); + if (!mf(MethodHandles.publicLookup())) throw new AssertionError("Error: Should fail - public"); + if (!mf(ll.in(T8032704other.class))) throw new AssertionError("Error: Should fail - other"); + if (!mf(ll.in(Thread.class))) throw new AssertionError("Error: Should fail - Thread"); + } +} + +class T8032704other {} diff --git a/jdk/test/java/lang/invoke/lambda/T8032711.java b/jdk/test/java/lang/invoke/lambda/T8032711.java new file mode 100644 index 00000000000..b01009f8336 --- /dev/null +++ b/jdk/test/java/lang/invoke/lambda/T8032711.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2014, 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 8032711 + * @summary Issue with Lambda in handling + */ + +import java.lang.invoke.LambdaMetafactory; +import java.lang.invoke.LambdaConversionException; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; + +public class T8032711 { + + interface I { + void m(); + } + + static void here() {} + static MethodHandles.Lookup l; + static MethodHandle h; + private static MethodType mt(Class k) { return MethodType.methodType(k); } + private static boolean mf(Class k) { + try { + LambdaMetafactory.metafactory(l, "m", + mt(I.class),mt(k),h,mt(void.class)); + } catch(LambdaConversionException e) { + return true; + } + return false; + } + + public static void main(String[] args) throws Throwable { + l = MethodHandles.lookup(); + h = l.findStatic(T8032711.class, "here", mt(void.class)); + if (mf(void.class)) throw new AssertionError("Error: Should work"); + if (!mf(String.class)) throw new AssertionError("Error: Should fail"); + } +} diff --git a/jdk/test/java/lang/management/MemoryMXBean/MemoryManagement.java b/jdk/test/java/lang/management/MemoryMXBean/MemoryManagement.java index d9c8d472456..4077d2a08ef 100644 --- a/jdk/test/java/lang/management/MemoryMXBean/MemoryManagement.java +++ b/jdk/test/java/lang/management/MemoryMXBean/MemoryManagement.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -23,9 +23,9 @@ /* * @test - * @bug 4530538 + * @bug 4530538 6980984 * @summary Basic unit test of memory management testing: - * 1) setUsatgeThreshold() and getUsageThreshold() + * 1) setUsageThreshold() and getUsageThreshold() * 2) test low memory detection on the old generation. * * @author Mandy Chung @@ -40,16 +40,18 @@ import javax.management.*; import javax.management.openmbean.CompositeData; public class MemoryManagement { - private static MemoryMXBean mm = ManagementFactory.getMemoryMXBean(); - private static List pools = ManagementFactory.getMemoryPoolMXBeans(); - private static List managers = ManagementFactory.getMemoryManagerMXBeans(); - private static MemoryPoolMXBean mpool = null; - private static boolean trace = false; - private static boolean testFailed = false; + private static final MemoryMXBean mm = ManagementFactory.getMemoryMXBean(); + private static final List pools = + Collections.synchronizedList(ManagementFactory.getMemoryPoolMXBeans()); + private static final List managers = + Collections.synchronizedList(ManagementFactory.getMemoryManagerMXBeans()); + private static volatile MemoryPoolMXBean mpool = null; + private static volatile boolean trace = false; + private static volatile boolean testFailed = false; private static final int NUM_CHUNKS = 2; - private static long chunkSize; + private static volatile long chunkSize; + private static volatile int listenerInvoked = 0; - private static int listenerInvoked = 0; static class SensorListener implements NotificationListener { public void handleNotification(Notification notif, Object handback) { String type = notif.getType(); @@ -101,7 +103,13 @@ public class MemoryManagement { // Now set threshold MemoryUsage mu = mpool.getUsage(); - chunkSize = (mu.getMax() - mu.getUsed()) / 20; + long max = mu.getMax(); + if (max != -1) { + chunkSize = (max - mu.getUsed()) / 20; + } else { // 6980984 + System.gc(); + chunkSize = Runtime.getRuntime().freeMemory()/20; + } newThreshold = mu.getUsed() + (chunkSize * NUM_CHUNKS); System.out.println("Setting threshold for " + mpool.getName() + diff --git a/jdk/test/java/lang/management/OperatingSystemMXBean/TestSystemLoadAvg.sh b/jdk/test/java/lang/management/OperatingSystemMXBean/TestSystemLoadAvg.sh index 571a3d931a3..1ef2f35c8e9 100644 --- a/jdk/test/java/lang/management/OperatingSystemMXBean/TestSystemLoadAvg.sh +++ b/jdk/test/java/lang/management/OperatingSystemMXBean/TestSystemLoadAvg.sh @@ -61,7 +61,7 @@ i=1 while true; do echo "Run $i: TestSystemLoadAvg" case `uname -s` in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) runOne GetSystemLoadAverage ;; * ) diff --git a/jdk/test/java/lang/management/ThreadMXBean/Locks.java b/jdk/test/java/lang/management/ThreadMXBean/Locks.java index c078dccd62d..e65d3637f67 100644 --- a/jdk/test/java/lang/management/ThreadMXBean/Locks.java +++ b/jdk/test/java/lang/management/ThreadMXBean/Locks.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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,18 +27,19 @@ * @summary Basic unit test of ThreadInfo.getLockName() * and ThreadInfo.getLockOwnerName() * @author Mandy Chung + * @author Jaroslav Bachorik * - * @build ThreadExecutionSynchronizer * @run main/othervm Locks */ import java.lang.management.*; +import java.util.concurrent.Phaser; public class Locks { - private static Object objA = new Object(); - private static Object objB = new Object(); - private static Object objC = new Object(); - private static ThreadMXBean tm = ManagementFactory.getThreadMXBean(); + private static final Object objA = new Object(); + private static final Object objB = new Object(); + private static final Object objC = new Object(); + private static final ThreadMXBean tm = ManagementFactory.getThreadMXBean(); private static boolean testFailed = false; @@ -46,48 +47,62 @@ public class Locks { if (lock == null) return null; return lock.getClass().getName() + '@' + - Integer.toHexString(System.identityHashCode(lock)); + Integer.toHexString(System.identityHashCode(lock)); + } + + private static void assertNoLock(Thread t) { + long tid = t.getId(); + ThreadInfo info = tm.getThreadInfo(tid); + String result = info.getLockName(); + + if (result != null) { + throw new RuntimeException("Thread " + t.getName() + " is not supposed to hold any lock. " + + "Currently owning lock: " + result); + } } private static void checkBlockedObject(Thread t, Object lock, Thread owner, Thread.State expectedState) { - ThreadInfo info = tm.getThreadInfo(t.getId()); + long tid = t.getId(); + ThreadInfo info = tm.getThreadInfo(tid); String result = info.getLockName(); String expectedLock = (lock != null ? getLockName(lock) : null); String expectedOwner = (owner != null ? owner.getName() : null); if (lock != null) { - if (expectedState ==Thread.State.BLOCKED) { + if (expectedState == Thread.State.BLOCKED) { int retryCount=0; while(info.getThreadState() != Thread.State.BLOCKED) { if (retryCount++ > 500) { throw new RuntimeException("Thread " + t.getName() + - " is expected to block on " + expectedLock + - " but got " + result + - " Thread.State = " + info.getThreadState()); + " is expected to block on " + expectedLock + + " but got " + result + + " Thread.State = " + info.getThreadState()); } goSleep(100); + info = tm.getThreadInfo(tid); + result = info.getLockName(); } } if (expectedState == Thread.State.WAITING && - info.getThreadState() != Thread.State.WAITING) { + info.getThreadState() != Thread.State.WAITING) { throw new RuntimeException("Thread " + t.getName() + - " is expected to wait on " + expectedLock + - " but got " + result + - " Thread.State = " + info.getThreadState()); + " is expected to wait on " + expectedLock + + " but got " + result + + " Thread.State = " + info.getThreadState()); } } if ((result != null && !result.equals(expectedLock)) || - (result == null && expectedLock != null)) { + (result == null && expectedLock != null)) { throw new RuntimeException("Thread " + t.getName() + " is blocked on " + - expectedLock + " but got " + result); + expectedLock + " but got " + result); } result = info.getLockOwnerName(); if ((result != null && !result.equals(expectedOwner)) || - (result == null && expectedOwner != null)) { + (result == null && expectedOwner != null)) { throw new RuntimeException("Owner of " + lock + " should be " + - expectedOwner + " but got " + result); + expectedOwner + " but got " + result); } } @@ -100,53 +115,49 @@ public class Locks { } } - static ThreadExecutionSynchronizer thrsync = new ThreadExecutionSynchronizer(); - static ThreadExecutionSynchronizer thrsync1 = new ThreadExecutionSynchronizer(); + private static volatile int dummyCounter = 0; static class LockAThread extends Thread { - public LockAThread() { + private final Phaser p; + public LockAThread(Phaser p) { super("LockAThread"); + this.p = p; } public void run() { synchronized(objA) { - // stop here for LockBThread to hold objB - thrsync.waitForSignal(); - - System.out.println("LockAThread about to block on objB"); - synchronized(objB) {}; + // stop here for LockBThread to hold objB + System.out.println("LockAThread about to block on objB"); + p.arriveAndAwaitAdvance(); // Phase 1 (blocking) + synchronized(objB) { + dummyCounter++; + }; } + p.arriveAndAwaitAdvance(); // Phase 2 (blocking) System.out.println("LockAThread about to exit"); - // The state could be anything. The expected state value - // passed with this method is not verified. - checkBlockedObject(this, null, null, Thread.State.TERMINATED); + // Make sure the current thread is not holding any lock + assertNoLock(this); } } static class LockBThread extends Thread { - public LockBThread() { + private final Phaser p; + public LockBThread(Phaser p) { super("LockBThread"); + this.p = p; } public void run() { synchronized(objB) { - // signal waiting LockAThread. - thrsync.signal(); - - System.out.println("LockBThread about to block on objC"); - // Signal main thread about to block on objC - thrsync1.signal(); - synchronized(objC) {}; + System.out.println("LockBThread about to block on objC"); + p.arriveAndAwaitAdvance(); // Phase 1 (blocking) + // Signal main thread about to block on objC + synchronized(objC) { + dummyCounter++; + }; } + p.arriveAndAwaitAdvance(); // Phase 2 (blocking) System.out.println("LockBThread about to exit"); - // The state could be anything. The expected state value - // passed with this method is not verified. - checkBlockedObject(this, null, null, Thread.State.TERMINATED); - } - - public void aboutToLockC() { - // Stop here till LockBThread about to blocked - // for lock objC. - thrsync1.waitForSignal(); - goSleep(500); + // Make sure the current thread is not holding any lock + assertNoLock(this); } } @@ -154,32 +165,36 @@ public class Locks { private static Object ready = new Object(); private static CheckerThread checker; static class WaitingThread extends Thread { - public WaitingThread() { + private final Phaser p; + public WaitingThread(Phaser p) { super("WaitingThread"); + this.p = p; } public void run() { synchronized(objC) { - System.out.println("WaitingThread about to wait on objC"); - try { - // Signal checker thread, about to wait on objC. - thrsync.signal(); - objC.wait(); - } catch (InterruptedException e) { - e.printStackTrace(); - testFailed = true; - } + System.out.println("WaitingThread about to wait on objC"); + try { + // Signal checker thread, about to wait on objC. + p.arriveAndAwaitAdvance(); // Phase 1 (waiting) + objC.wait(); + } catch (InterruptedException e) { + e.printStackTrace(); + testFailed = true; + } - // block until CheckerThread finishes checking - System.out.println("WaitingThread about to block on ready"); - // signal checker thread that it is about acquire - // object ready. - thrsync.signal(); - synchronized(ready) {}; + // block until CheckerThread finishes checking + System.out.println("WaitingThread about to block on ready"); + // signal checker thread that it is about acquire + // object ready. + p.arriveAndAwaitAdvance(); // Phase 2 (waiting) + synchronized(ready) { + dummyCounter++; + }; } synchronized(objC) { try { // signal checker thread, about to wait on objC - thrsync.signal(); + p.arriveAndAwaitAdvance(); // Phase 3 (waiting) objC.wait(); } catch (InterruptedException e) { e.printStackTrace(); @@ -190,21 +205,23 @@ public class Locks { } } static class CheckerThread extends Thread { - public CheckerThread() { + private final Phaser p; + public CheckerThread(Phaser p) { super("CheckerThread"); + this.p = p; } private void waitForState(Thread.State state) { - thrsync.waitForSignal(); - while (waiter.getState() != state) { - goSleep(10); + p.arriveAndAwaitAdvance(); + while (!waiter.isInterrupted() && waiter.getState() != state) { + goSleep(10); } } public void run() { synchronized (ready) { // wait until WaitingThread about to wait for objC - waitForState(Thread.State.WAITING); + waitForState(Thread.State.WAITING); // Phase 1 (waiting) checkBlockedObject(waiter, objC, null, Thread.State.WAITING); synchronized (objC) { @@ -213,13 +230,13 @@ public class Locks { // wait for waiter thread to about to enter // synchronized object ready. - waitForState(Thread.State.BLOCKED); + waitForState(Thread.State.BLOCKED); // Phase 2 (waiting) checkBlockedObject(waiter, ready, this, Thread.State.BLOCKED); } // wait for signal from waiting thread that it is about // wait for objC. - waitForState(Thread.State.WAITING); + waitForState(Thread.State.WAITING); // Phase 3 (waiting) synchronized(objC) { checkBlockedObject(waiter, objC, Thread.currentThread(), Thread.State.WAITING); objC.notify(); @@ -235,24 +252,24 @@ public class Locks { LockAThread t1; LockBThread t2; + Phaser p = new Phaser(3); synchronized(objC) { - // The state could be anything. The expected state value - // passed with this method is not verified. - checkBlockedObject(mainThread, null, null, Thread.State.RUNNABLE); + // Make sure the main thread is not holding any lock + assertNoLock(mainThread); // Test deadlock case // t1 holds lockA and attempts to lock B // t2 holds lockB and attempts to lock C - t1 = new LockAThread(); + + t1 = new LockAThread(p); t1.start(); - t2 = new LockBThread(); + t2 = new LockBThread(p); t2.start(); - t2.aboutToLockC(); - - checkBlockedObject(t1, objB, t2, Thread.State.BLOCKED); + p.arriveAndAwaitAdvance(); // Phase 1 (blocking) checkBlockedObject(t2, objC, mainThread, Thread.State.BLOCKED); + checkBlockedObject(t1, objB, t2, Thread.State.BLOCKED); long[] expectedThreads = new long[3]; expectedThreads[0] = t1.getId(); // blocked on lockB @@ -260,13 +277,14 @@ public class Locks { expectedThreads[2] = mainThread.getId(); // owner of lockC findThreadsBlockedOn(objB, expectedThreads); } - goSleep(100); + p.arriveAndAwaitAdvance(); // Phase 2 (blocking) + p = new Phaser(2); // Test Object.wait() case - waiter = new WaitingThread(); + waiter = new WaitingThread(p); waiter.start(); - checker = new CheckerThread(); + checker = new CheckerThread(p); checker.start(); try { @@ -284,7 +302,7 @@ public class Locks { } private static ThreadInfo findOwnerInfo(ThreadInfo[] infos, String lock) - throws Exception { + throws Exception { ThreadInfo ownerInfo = null; for (int i = 0; i < infos.length; i++) { String blockedLock = infos[i].getLockName(); @@ -292,7 +310,7 @@ public class Locks { long threadId = infos[i].getLockOwnerId(); if (threadId == -1) { throw new RuntimeException("TEST FAILED: " + - lock + " expected to have owner"); + lock + " expected to have owner"); } for (int j = 0; j < infos.length; j++) { if (infos[j].getThreadId() == threadId) { @@ -305,7 +323,7 @@ public class Locks { return ownerInfo; } private static void findThreadsBlockedOn(Object o, long[] expectedThreads) - throws Exception { + throws Exception { String lock = getLockName(o); // Check with ThreadInfo with no stack trace (i.e. no safepoint) ThreadInfo[] infos = tm.getThreadInfo(tm.getAllThreadIds()); @@ -317,14 +335,14 @@ public class Locks { } private static void doCheck(ThreadInfo[] infos, String lock, long[] expectedThreads) - throws Exception { + throws Exception { ThreadInfo ownerInfo = null; // Find the thread who is blocking on lock for (int i = 0; i < infos.length; i++) { String blockedLock = infos[i].getLockName(); if (lock.equals(blockedLock)) { System.out.print(infos[i].getThreadName() + - " blocked on " + blockedLock); + " blocked on " + blockedLock); ownerInfo = infos[i]; } } @@ -336,7 +354,7 @@ public class Locks { ownerInfo = findOwnerInfo(infos, lock); threads[count++] = ownerInfo.getThreadId(); System.out.println(" Owner = " + ownerInfo.getThreadName() + - " id = " + ownerInfo.getThreadId()); + " id = " + ownerInfo.getThreadId()); lock = ownerInfo.getLockName(); System.out.print(ownerInfo.getThreadName() + " Id = " + ownerInfo.getThreadId() + @@ -346,13 +364,13 @@ public class Locks { if (count != expectedThreads.length) { throw new RuntimeException("TEST FAILED: " + - "Expected chain of threads not matched; current count =" + count); + "Expected chain of threads not matched; current count =" + count); } for (int i = 0; i < count; i++) { if (threads[i] != expectedThreads[i]) { System.out.println("TEST FAILED: " + - "Unexpected thread in the chain " + threads[i] + - " expected to be " + expectedThreads[i]); + "Unexpected thread in the chain " + threads[i] + + " expected to be " + expectedThreads[i]); } } } diff --git a/jdk/test/java/lang/management/ThreadMXBean/SynchronizationStatistics.java b/jdk/test/java/lang/management/ThreadMXBean/SynchronizationStatistics.java index e03042864c9..6986adc6893 100644 --- a/jdk/test/java/lang/management/ThreadMXBean/SynchronizationStatistics.java +++ b/jdk/test/java/lang/management/ThreadMXBean/SynchronizationStatistics.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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,45 +27,28 @@ * @summary Basic unit test of the synchronization statistics support: * * @author Mandy Chung + * @author Jaroslav Bachorik * - * @ignore 6309226 - * @build Semaphore * @run main/othervm SynchronizationStatistics */ import java.lang.management.*; +import java.util.concurrent.Phaser; public class SynchronizationStatistics { - private static ThreadMXBean mbean = ManagementFactory.getThreadMXBean(); - - private static boolean blockedTimeCheck = - mbean.isThreadContentionMonitoringSupported(); - private static boolean trace = false; - - private static Object lockA = new Object(); - private static Object lockB = new Object(); - private static Object lockC = new Object(); - private static Object lockD = new Object(); - private static Object waiter = new Object(); - private static volatile boolean testFailed = false; - - private static Object go = new Object(); - - private static void goSleep(long ms) { - try { - Thread.sleep(ms); - } catch (InterruptedException e) { - e.printStackTrace(); - System.out.println("Unexpected exception."); - testFailed = true; + private static class LockerThread extends Thread { + public LockerThread(Runnable r) { + super(r, "LockerThread"); } } - public static void main(String args[]) throws Exception { - if (args.length > 0 && args[0].equals("trace")) { - trace = true; - } + private static final ThreadMXBean mbean = ManagementFactory.getThreadMXBean(); + private static final boolean blockedTimeCheck = + mbean.isThreadContentionMonitoringSupported(); + + + public static void main(String args[]) throws Exception { if (blockedTimeCheck) { mbean.setThreadContentionMonitoringEnabled(true); } @@ -75,457 +58,317 @@ public class SynchronizationStatistics { "Thread Contention Monitoring is not enabled"); } - Examiner examiner = new Examiner("Examiner"); - BlockedThread blocked = new BlockedThread("BlockedThread"); - examiner.setThread(blocked); - - // Start the threads and check them in Blocked and Waiting states - examiner.start(); - - // wait until the examiner acquires all the locks and waiting - // for the BlockedThread to start - examiner.waitUntilWaiting(); - - System.out.println("Checking the thread state for the examiner thread " + - "is waiting to begin."); - - // The Examiner should be waiting to be notified by the BlockedThread - checkThreadState(examiner, Thread.State.WAITING); - - System.out.println("Now starting the blocked thread"); - blocked.start(); - - try { - examiner.join(); - blocked.join(); - } catch (InterruptedException e) { - e.printStackTrace(); - System.out.println("Unexpected exception."); - testFailed = true; - } - - if (testFailed) - throw new RuntimeException("TEST FAILED."); + testBlockingOnSimpleMonitor(); + testBlockingOnNestedMonitor(); + testWaitingOnSimpleMonitor(); + testMultiWaitingOnSimpleMonitor(); + testWaitingOnNestedMonitor(); System.out.println("Test passed."); } - private static String INDENT = " "; - private static void printStack(Thread t, StackTraceElement[] stack) { - System.out.println(INDENT + t + - " stack: (length = " + stack.length + ")"); - if (t != null) { - for (int j = 0; j < stack.length; j++) { - System.out.println(INDENT + stack[j]); + private static LockerThread newLockerThread(Runnable r) { + LockerThread t = new LockerThread(r); + t.setDaemon(true); + return t; + } + + private static void waitForThreadState(Thread t, Thread.State state) throws InterruptedException { + while (!t.isInterrupted() && t.getState() != state) { + Thread.sleep(3); + } + } + + /** + * Tests that blocking on a single monitor properly increases the + * blocked count at least by 1. Also asserts that the correct lock name is provided. + */ + private static void testBlockingOnSimpleMonitor() throws Exception { + System.out.println("testBlockingOnSimpleMonitor"); + final Object lock1 = new Object(); + final Phaser p = new Phaser(2); + LockerThread lt = newLockerThread(new Runnable() { + @Override + public void run() { + p.arriveAndAwaitAdvance(); // phase[1] + synchronized(lock1) { + System.out.println("[LockerThread obtained Lock1]"); + p.arriveAndAwaitAdvance(); // phase[2] + } + p.arriveAndAwaitAdvance(); // phase[3] } - System.out.println(); + }); + + lt.start(); + long tid = lt.getId(); + ThreadInfo ti = mbean.getThreadInfo(tid); + String lockName = null; + synchronized(lock1) { + p.arriveAndAwaitAdvance(); // phase[1] + waitForThreadState(lt, Thread.State.BLOCKED); + lockName = mbean.getThreadInfo(tid).getLockName(); } + + p.arriveAndAwaitAdvance(); // phase[2] + testBlocked(ti, mbean.getThreadInfo(tid), lockName, lock1); + p.arriveAndDeregister(); // phase[3] + + lt.join(); + + System.out.println("OK"); } - private static void checkThreadState(Thread thread, Thread.State s) - throws Exception { + /** + * Tests that blocking on a nested monitor properly increases the + * blocked count at least by 1 - it is not affected by the nesting depth. + * Also asserts that the correct lock name is provided. + */ + private static void testBlockingOnNestedMonitor() throws Exception { + System.out.println("testBlockingOnNestedMonitor"); + final Object lock1 = new Object(); + final Object lock2 = new Object(); - ThreadInfo ti = mbean.getThreadInfo(thread.getId()); - if (ti.getThreadState() != s) { - ThreadInfo info = mbean.getThreadInfo(thread.getId(), - Integer.MAX_VALUE); - System.out.println(INDENT + "TEST FAILED:"); - printStack(thread, info.getStackTrace()); - System.out.println(INDENT + "Thread state: " + info.getThreadState()); - - throw new RuntimeException("TEST FAILED: " + - "Thread state for " + thread + " returns " + ti.getThreadState() + - ". Expected to be " + s); - } - } - - private static void checkThreadState(Thread thread, - Thread.State s1, Thread.State s2) - throws Exception { - - ThreadInfo ti = mbean.getThreadInfo(thread.getId()); - if (ti.getThreadState() != s1 && ti.getThreadState() != s2) { - throw new RuntimeException("TEST FAILED: " + - "Thread state for " + thread + " returns " + ti.getThreadState() + - ". Expected to be " + s1 + " or " + s2); - } - } - - static class StatThread extends Thread { - private long blockingBaseTime = 0; - private long totalWaitTime = 0; - private long totalBlockedEnterTime = 0; - - StatThread(String name) { - super(name); - } - - void addWaitTime(long ns) { - totalWaitTime = totalWaitTime + ns; - } - void addBlockedEnterTime(long ns) { - totalBlockedEnterTime = totalBlockedEnterTime + ns; - } - void setBlockingBaseTime(long time) { - blockingBaseTime = time; - } - - long totalBlockedTimeMs() { - return totalBlockedEnterTime / 1000000; - } - - long totalBlockedTimeMs(long now) { - long t = totalBlockedEnterTime + (now - blockingBaseTime); - return t / 1000000; - } - - long totalWaitTimeMs() { - return totalWaitTime / 1000000; - } - - long totalWaitTimeMs(long now) { - long t = totalWaitTime + (now - blockingBaseTime); - return t / 1000000; - } - } - - static class BlockedThread extends StatThread { - private Semaphore handshake = new Semaphore(); - BlockedThread(String name) { - super(name); - } - void waitUntilBlocked() { - handshake.semaP(); - - // give a chance for the examiner thread to really wait - goSleep(20); - } - - void waitUntilWaiting() { - waitUntilBlocked(); - } - - boolean hasWaitersForBlocked() { - return (handshake.getWaiterCount() > 0); - } - - private void notifyWaiter() { - // wait until the examiner waits on the semaphore - while (handshake.getWaiterCount() == 0) { - goSleep(20); - } - handshake.semaV(); - } - - private void waitObj(long ms) { - synchronized (waiter) { - try { - // notify examinerabout to wait on a monitor - notifyWaiter(); - - long base = System.nanoTime(); - setBlockingBaseTime(base); - waiter.wait(ms); - long now = System.nanoTime(); - addWaitTime(now - base); - } catch (Exception e) { - e.printStackTrace(); - System.out.println("Unexpected exception."); - testFailed = true; + final Phaser p = new Phaser(2); + LockerThread lt = newLockerThread(new Runnable() { + @Override + public void run() { + p.arriveAndAwaitAdvance(); // phase[1] + synchronized(lock1) { + System.out.println("[LockerThread obtained Lock1]"); + p.arriveAndAwaitAdvance(); // phase[2] + p.arriveAndAwaitAdvance(); // phase[3] + synchronized(lock2) { + System.out.println("[LockerThread obtained Lock2]"); + p.arriveAndAwaitAdvance(); // phase[4] + } + p.arriveAndAwaitAdvance(); // phase[5] } } + }); + + lt.start(); + long tid = lt.getId(); + ThreadInfo ti = mbean.getThreadInfo(tid); + ThreadInfo ti1 = null; + String lockName = null; + synchronized(lock1) { + p.arriveAndAwaitAdvance(); // phase[1] + waitForThreadState(lt, Thread.State.BLOCKED); + lockName = mbean.getThreadInfo(tid).getLockName(); } + p.arriveAndAwaitAdvance(); // phase[2] - private void test() { - // notify examiner about to block on lockA - notifyWaiter(); + ti1 = mbean.getThreadInfo(tid); + testBlocked(ti, ti1, lockName, lock1); + ti = ti1; - long base = System.nanoTime(); - setBlockingBaseTime(base); - synchronized (lockA) { - long now = System.nanoTime(); - addBlockedEnterTime(now - base); - - A(); // Expected blocked count = 1 - } - E(); + synchronized(lock2) { + p.arriveAndAwaitAdvance(); // phase [3] + waitForThreadState(lt, Thread.State.BLOCKED); + lockName = mbean.getThreadInfo(tid).getLockName(); } - private void A() { - // notify examiner about to block on lockB - notifyWaiter(); + p.arriveAndAwaitAdvance(); // phase [4] + testBlocked(ti, mbean.getThreadInfo(tid), lockName, lock2); + p.arriveAndDeregister(); - long base = System.nanoTime(); - setBlockingBaseTime(base); - synchronized (lockB) { - long now = System.nanoTime(); - addBlockedEnterTime(now - base); + lt.join(); - B(); // Expected blocked count = 2 + System.out.println("OK"); + } + + /** + * Tests that waiting on a single monitor properly increases the waited + * count by 1 and the waited time by a positive number. + */ + private static void testWaitingOnSimpleMonitor() throws Exception { + System.out.println("testWaitingOnSimpleMonitor"); + final Object lock1 = new Object(); + final Phaser p = new Phaser(2); + LockerThread lt = newLockerThread(new Runnable() { + @Override + public void run() { + p.arriveAndAwaitAdvance(); // phase[1] + synchronized(lock1) { + System.out.println("[LockerThread obtained Lock1]"); + try { + lock1.wait(300); + } catch (InterruptedException ex) { + // ignore + } + p.arriveAndAwaitAdvance(); // phase[2] + } + p.arriveAndAwaitAdvance(); // phase[3] } + }); + + lt.start(); + ThreadInfo ti1 = mbean.getThreadInfo(lt.getId()); + synchronized(lock1) { + p.arriveAndAwaitAdvance(); // phase[1] + waitForThreadState(lt, Thread.State.BLOCKED); } - private void B() { - // notify examiner about to block on lockC - notifyWaiter(); + p.arriveAndAwaitAdvance(); // phase[2] - long base = System.nanoTime(); - setBlockingBaseTime(base); - synchronized (lockC) { - long now = System.nanoTime(); - addBlockedEnterTime(now - base); + ThreadInfo ti2 = mbean.getThreadInfo(lt.getId()); + p.arriveAndDeregister(); // phase[3] - C(); // Expected blocked count = 3 + lt.join(); + + testWaited(ti1, ti2, 1); + System.out.println("OK"); + } + + /** + * Tests that waiting multiple times on the same monitor subsequently + * increases the waited count by the number of subsequent calls and the + * waited time by a positive number. + */ + private static void testMultiWaitingOnSimpleMonitor() throws Exception { + System.out.println("testWaitingOnMultipleMonitors"); + final Object lock1 = new Object(); + + final Phaser p = new Phaser(2); + LockerThread lt = newLockerThread(new Runnable() { + @Override + public void run() { + p.arriveAndAwaitAdvance(); // phase[1] + synchronized(lock1) { + System.out.println("[LockerThread obtained Lock1]"); + for (int i = 0; i < 3; i++) { + try { + lock1.wait(300); + } catch (InterruptedException ex) { + // ignore + } + p.arriveAndAwaitAdvance(); // phase[2-4] + } + } + p.arriveAndAwaitAdvance(); // phase[5] } + }); + + lt.start(); + ThreadInfo ti1 = mbean.getThreadInfo(lt.getId()); + synchronized(lock1) { + p.arriveAndAwaitAdvance(); //phase[1] + waitForThreadState(lt, Thread.State.BLOCKED); } - private void C() { - // notify examiner about to block on lockD - notifyWaiter(); + int phase = p.getPhase(); + while ((p.arriveAndAwaitAdvance() - phase) < 3); // phase[2-4] - long base = System.nanoTime(); - setBlockingBaseTime(base); - synchronized (lockD) { - long now = System.nanoTime(); - addBlockedEnterTime(now - base); + ThreadInfo ti2 = mbean.getThreadInfo(lt.getId()); + p.arriveAndDeregister(); // phase[5] - D(); // Expected blocked count = 4 - } - } - private void D() { - goSleep(50); - } - private void E() { - final int WAIT = 1000; - waitObj(WAIT); - waitObj(WAIT); - waitObj(WAIT); - } + lt.join(); + testWaited(ti1, ti2, 3); + System.out.println("OK"); + } - public void run() { - test(); - } // run() - } // BlockedThread + /** + * Tests that waiting on monitors places in nested synchronized blocks + * properly increases the waited count by the number of times the "lock.wait()" + * was invoked and the waited time by a positive number. + */ + private static void testWaitingOnNestedMonitor() throws Exception { + System.out.println("testWaitingOnNestedMonitor"); + final Object lock1 = new Object(); + final Object lock2 = new Object(); + final Object lock3 = new Object(); - static int blockedCount = 0; - static int waitedCount = 0; - static class Examiner extends StatThread { - private BlockedThread blockedThread; - private Semaphore semaphore = new Semaphore(); + final Phaser p = new Phaser(2); + LockerThread lt = newLockerThread(new Runnable() { + @Override + public void run() { + p.arriveAndAwaitAdvance(); // phase[1] + synchronized(lock1) { + System.out.println("[LockerThread obtained Lock1]"); + try { + lock1.wait(300); + } catch (InterruptedException ex) { + // ignore + } - Examiner(String name) { - super(name); - } - - public void setThread(BlockedThread thread) { - blockedThread = thread; - } - - private void blockedTimeRangeCheck(StatThread t, - long blockedTime, - long nowNano) - throws Exception { - long expected = t.totalBlockedTimeMs(nowNano); - - // accept 5% range - timeRangeCheck(blockedTime, expected, 5); - } - private void waitedTimeRangeCheck(StatThread t, - long waitedTime, - long nowNano) - throws Exception { - long expected = t.totalWaitTimeMs(nowNano); - - // accept 5% range - timeRangeCheck(waitedTime, expected, 5); - } - - private void timeRangeCheck(long time, long expected, int percent) - throws Exception { - - double diff = expected - time; - - if (trace) { - System.out.println(" Time = " + time + - " expected = " + expected + - ". Diff = " + diff); - - } - // throw an exception if blockedTime and expectedTime - // differs > percent% - if (diff < 0) { - diff = diff * -1; - } - - long range = (expected * percent) / 100; - // minimum range = 2 ms - if (range < 2) { - range = 2; - } - if (diff > range) { - throw new RuntimeException("TEST FAILED: " + - "Time returned = " + time + - " expected = " + expected + ". Diff = " + diff); - } - } - private void checkInfo(StatThread t, Thread.State s, Object lock, - String lockName, int bcount, int wcount) - throws Exception { - - String action = "ERROR"; - if (s == Thread.State.WAITING || s == Thread.State.TIMED_WAITING) { - action = "wait on "; - } else if (s == Thread.State.BLOCKED) { - action = "block on "; - } - System.out.println(t + " expected to " + action + lockName + - " with blocked count = " + bcount + - " and waited count = " + wcount); - - long now = System.nanoTime(); - ThreadInfo info = mbean.getThreadInfo(t.getId()); - if (info.getThreadState() != s) { - printStack(t, info.getStackTrace()); - throw new RuntimeException("TEST FAILED: " + - "Thread state returned is " + info.getThreadState() + - ". Expected to be " + s); - } - - if (info.getLockName() == null || - !info.getLockName().equals(lock.toString())) { - throw new RuntimeException("TEST FAILED: " + - "getLockName() returned " + info.getLockName() + - ". Expected to be " + lockName + " - " + lock.toString()); - } - - if (info.getBlockedCount() != bcount) { - throw new RuntimeException("TEST FAILED: " + - "Blocked Count returned is " + info.getBlockedCount() + - ". Expected to be " + bcount); - } - if (info.getWaitedCount() != wcount) { - throw new RuntimeException("TEST FAILED: " + - "Waited Count returned is " + info.getWaitedCount() + - ". Expected to be " + wcount); - } - - String lockObj = info.getLockName(); - if (lockObj == null || !lockObj.equals(lock.toString())) { - throw new RuntimeException("TEST FAILED: " + - "Object blocked on is " + lockObj + - ". Expected to be " + lock.toString()); - } - - if (!blockedTimeCheck) { - return; - } - long blockedTime = info.getBlockedTime(); - if (blockedTime < 0) { - throw new RuntimeException("TEST FAILED: " + - "Blocked time returned is negative = " + blockedTime); - } - - if (s == Thread.State.BLOCKED) { - blockedTimeRangeCheck(t, blockedTime, now); - } else { - timeRangeCheck(blockedTime, t.totalBlockedTimeMs(), 5); - } - - long waitedTime = info.getWaitedTime(); - if (waitedTime < 0) { - throw new RuntimeException("TEST FAILED: " + - "Waited time returned is negative = " + waitedTime); - } - if (s == Thread.State.WAITING || s == Thread.State.TIMED_WAITING) { - waitedTimeRangeCheck(t, waitedTime, now); - } else { - timeRangeCheck(waitedTime, t.totalWaitTimeMs(), 5); - } - - } - - private void examine() { - try { - synchronized (lockD) { - synchronized (lockC) { - synchronized (lockB) { - synchronized (lockA) { - // notify main thread to continue - semaphore.semaV(); - - // wait until BlockedThread has started - blockedThread.waitUntilBlocked(); - - blockedCount++; - checkInfo(blockedThread, Thread.State.BLOCKED, - lockA, "lockA", - blockedCount, waitedCount); - } - - // wait until BlockedThread to block on lockB - blockedThread.waitUntilBlocked(); - - blockedCount++; - checkInfo(blockedThread, Thread.State.BLOCKED, - lockB, "lockB", - blockedCount, waitedCount); + p.arriveAndAwaitAdvance(); // phase[2] + synchronized(lock2) { + System.out.println("[LockerThread obtained Lock2]"); + try { + lock2.wait(300); + } catch (InterruptedException ex) { + // ignore } - // wait until BlockedThread to block on lockC - blockedThread.waitUntilBlocked(); - - blockedCount++; - checkInfo(blockedThread, Thread.State.BLOCKED, - lockC, "lockC", - blockedCount, waitedCount); + p.arriveAndAwaitAdvance(); // phase[3] + synchronized(lock3) { + System.out.println("[LockerThread obtained Lock3]"); + try { + lock3.wait(300); + } catch (InterruptedException ex) { + // ignore + } + p.arriveAndAwaitAdvance(); // phase[4] + } } - // wait until BlockedThread to block on lockD - blockedThread.waitUntilBlocked(); - blockedCount++; - - checkInfo(blockedThread, Thread.State.BLOCKED, - lockD, "lockD", - blockedCount, waitedCount); } - - // wait until BlockedThread about to call E() - // BlockedThread will wait on waiter for 3 times - blockedThread.waitUntilWaiting(); - - waitedCount++; - checkInfo(blockedThread, Thread.State.TIMED_WAITING, - waiter, "waiter", blockedCount, waitedCount); - - blockedThread.waitUntilWaiting(); - - waitedCount++; - checkInfo(blockedThread, Thread.State.TIMED_WAITING, - waiter, "waiter", blockedCount, waitedCount); - - blockedThread.waitUntilWaiting(); - - waitedCount++; - checkInfo(blockedThread, Thread.State.TIMED_WAITING, - waiter, "waiter", blockedCount, waitedCount); - - } catch (Exception e) { - e.printStackTrace(); - System.out.println("Unexpected exception."); - testFailed = true; + p.arriveAndAwaitAdvance(); // phase[5] } + }); + + lt.start(); + ThreadInfo ti1 = mbean.getThreadInfo(lt.getId()); + synchronized(lock1) { + p.arriveAndAwaitAdvance(); // phase[1] + waitForThreadState(lt, Thread.State.BLOCKED); } - public void run() { - examine(); - } // run() - - public void waitUntilWaiting() { - semaphore.semaP(); - - // wait until the examiner is waiting for - while (!blockedThread.hasWaitersForBlocked()) { - goSleep(50); - } - // give a chance for the examiner thread to really wait - goSleep(20); - + synchronized(lock2) { + p.arriveAndAwaitAdvance(); // phase[2] + waitForThreadState(lt, Thread.State.BLOCKED); } - } // Examiner + + synchronized(lock3) { + p.arriveAndAwaitAdvance(); // phase[3] + waitForThreadState(lt, Thread.State.BLOCKED); + } + + p.arriveAndAwaitAdvance(); // phase[4] + ThreadInfo ti2 = mbean.getThreadInfo(lt.getId()); + p.arriveAndDeregister(); // phase[5] + + lt.join(); + testWaited(ti1, ti2, 3); + System.out.println("OK"); + } + + private static void testWaited(ThreadInfo ti1, ThreadInfo ti2, int waited) throws Error { + long waitCntDiff = ti2.getWaitedCount() - ti1.getWaitedCount(); + long waitTimeDiff = ti2.getWaitedTime() - ti1.getWaitedTime(); + if (waitCntDiff < waited) { + throw new Error("Unexpected diff in waited count. Expecting at least " + + waited + " , got " + waitCntDiff); + } + if (waitTimeDiff <= 0) { + throw new Error("Unexpected diff in waited time. Expecting increasing " + + "value, got " + waitTimeDiff + "ms"); + } + } + + private static void testBlocked(ThreadInfo ti1, ThreadInfo ti2, + String lockName, final Object lock) + throws Error { + long blkCntDiff = ti2.getBlockedCount() - ti1.getBlockedCount(); + long blkTimeDiff = ti2.getBlockedTime() - ti1.getBlockedTime(); + if (blkCntDiff < 1) { + throw new Error("Unexpected diff in blocked count. Expecting at least 1, " + + "got " + blkCntDiff); + } + if (blkTimeDiff < 0) { + throw new Error("Unexpected diff in blocked time. Expecting a positive " + + "number, got " + blkTimeDiff); + } + if (!lockName.equals(lock.toString())) { + throw new Error("Unexpected blocked monitor name. Expecting " + + lock.toString() + ", got " + + lockName); + } + } } diff --git a/jdk/test/java/lang/management/ThreadMXBean/ThreadExecutionSynchronizer.java b/jdk/test/java/lang/management/ThreadMXBean/ThreadExecutionSynchronizer.java deleted file mode 100644 index 6cba7e73521..00000000000 --- a/jdk/test/java/lang/management/ThreadMXBean/ThreadExecutionSynchronizer.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (c) 2004, 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. - */ - -/* - * - * @summary This class is used to synchronize execution of two threads. - * @author Swamy Venkataramanappa - */ - -import java.util.concurrent.Semaphore; - -public class ThreadExecutionSynchronizer { - - private volatile boolean waiting; - private final Semaphore semaphore; - - public ThreadExecutionSynchronizer() { - semaphore = new Semaphore(1); - waiting = false; - } - - // Synchronizes two threads execution points. - // Basically any thread could get scheduled to run and - // it is not possible to know which thread reaches expected - // execution point. So whichever thread reaches a execution - // point first wait for the second thread. When the second thread - // reaches the expected execution point will wake up - // the thread which is waiting here. - void stopOrGo() { - semaphore.acquireUninterruptibly(); // Thread can get blocked. - if (!waiting) { - waiting = true; - // Wait for second thread to enter this method. - while(!semaphore.hasQueuedThreads()) { - try { - Thread.sleep(20); - } catch (InterruptedException xx) {} - } - semaphore.release(); - } else { - waiting = false; - semaphore.release(); - } - } - - // Wrapper function just for code readability. - void waitForSignal() { - stopOrGo(); - goSleep(50); - } - - void signal() { - stopOrGo(); - goSleep(50); - } - - private static void goSleep(long ms) { - try { - Thread.sleep(ms); - } catch (InterruptedException e) { - e.printStackTrace(); - System.out.println("Unexpected exception."); - } - } -} diff --git a/jdk/test/java/net/Authenticator/B4933582.sh b/jdk/test/java/net/Authenticator/B4933582.sh index fa1768398ae..1e1268e3f8a 100644 --- a/jdk/test/java/net/Authenticator/B4933582.sh +++ b/jdk/test/java/net/Authenticator/B4933582.sh @@ -26,7 +26,7 @@ OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/java/net/DatagramSocket/Send12k.java b/jdk/test/java/net/DatagramSocket/Send12k.java index 6446330d35e..f6375c1f0b7 100644 --- a/jdk/test/java/net/DatagramSocket/Send12k.java +++ b/jdk/test/java/net/DatagramSocket/Send12k.java @@ -53,7 +53,7 @@ public class Send12k { boolean sendOkay = true; try { s1.send(p1); - } catch (SocketException e) { + } catch (IOException e) { /* * Prior to merlin a send of > 12k to loopback address * would fail silently. diff --git a/jdk/test/java/net/DatagramSocket/SetDatagramSocketImplFactory/ADatagramSocket.sh b/jdk/test/java/net/DatagramSocket/SetDatagramSocketImplFactory/ADatagramSocket.sh index 271b21d26f3..eac0315e7e3 100644 --- a/jdk/test/java/net/DatagramSocket/SetDatagramSocketImplFactory/ADatagramSocket.sh +++ b/jdk/test/java/net/DatagramSocket/SetDatagramSocketImplFactory/ADatagramSocket.sh @@ -27,7 +27,7 @@ # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Darwin ) + SunOS | Darwin | AIX ) PATHSEP=":" FILESEP="/" ;; diff --git a/jdk/test/java/net/Socket/OldSocketImpl.sh b/jdk/test/java/net/Socket/OldSocketImpl.sh index bbe055fa2ea..70b92afc7b6 100644 --- a/jdk/test/java/net/Socket/OldSocketImpl.sh +++ b/jdk/test/java/net/Socket/OldSocketImpl.sh @@ -28,7 +28,7 @@ OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/java/net/URL/B5086147.sh b/jdk/test/java/net/URL/B5086147.sh index a669e1347ee..772d7a32cd1 100644 --- a/jdk/test/java/net/URL/B5086147.sh +++ b/jdk/test/java/net/URL/B5086147.sh @@ -26,7 +26,7 @@ OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) exit 0 ;; CYGWIN* ) diff --git a/jdk/test/java/net/URLClassLoader/B5077773.sh b/jdk/test/java/net/URLClassLoader/B5077773.sh index 9bd9a1e6f34..3b52698840a 100644 --- a/jdk/test/java/net/URLClassLoader/B5077773.sh +++ b/jdk/test/java/net/URLClassLoader/B5077773.sh @@ -34,7 +34,7 @@ OS=`uname -s` case "$OS" in - SunOS | Darwin ) + SunOS | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/java/net/URLClassLoader/sealing/checksealed.sh b/jdk/test/java/net/URLClassLoader/sealing/checksealed.sh index 0d212c62aae..339525a1042 100644 --- a/jdk/test/java/net/URLClassLoader/sealing/checksealed.sh +++ b/jdk/test/java/net/URLClassLoader/sealing/checksealed.sh @@ -27,7 +27,7 @@ OS=`uname -s` case "$OS" in - SunOS | Darwin ) + SunOS | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/java/net/URLConnection/6212146/test.sh b/jdk/test/java/net/URLConnection/6212146/test.sh index 45f5310005e..9a0615cadf3 100644 --- a/jdk/test/java/net/URLConnection/6212146/test.sh +++ b/jdk/test/java/net/URLConnection/6212146/test.sh @@ -33,7 +33,7 @@ OS=`uname -s` case "$OS" in - SunOS | Darwin ) + SunOS | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/java/nio/charset/coders/CheckSJISMappingProp.sh b/jdk/test/java/nio/charset/coders/CheckSJISMappingProp.sh index fd76d5a5031..5c14e7392ec 100644 --- a/jdk/test/java/nio/charset/coders/CheckSJISMappingProp.sh +++ b/jdk/test/java/nio/charset/coders/CheckSJISMappingProp.sh @@ -34,7 +34,7 @@ OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) ;; + SunOS | Linux | Darwin | AIX ) ;; # Skip locale test for Windows Windows* | CYGWIN* ) echo "Passed"; exit 0 ;; diff --git a/jdk/test/java/nio/charset/spi/basic.sh b/jdk/test/java/nio/charset/spi/basic.sh index 6b5ad3108ac..6bc60d140e7 100644 --- a/jdk/test/java/nio/charset/spi/basic.sh +++ b/jdk/test/java/nio/charset/spi/basic.sh @@ -48,7 +48,7 @@ JAR=$COMPILEJAVA/bin/jar DIR=`pwd` case `uname` in - SunOS | Linux | Darwin ) CPS=':' ;; + SunOS | Linux | Darwin | AIX ) CPS=':' ;; Windows* ) CPS=';' ;; CYGWIN* ) DIR=`/usr/bin/cygpath -a -s -m $DIR` @@ -81,7 +81,7 @@ if [ $# -gt 0 ]; then L="$1" shift s=`uname -s` - if [ $s != Linux -a $s != SunOS -a $s != Darwin ]; then + if [ $s != Linux -a $s != SunOS -a $s != Darwin -a $s != AIX ]; then echo "$L: Locales not supported on this system, skipping..." exit 0 fi diff --git a/jdk/test/java/nio/file/Files/SBC.java b/jdk/test/java/nio/file/Files/SBC.java index ab467266edf..d26428d5f60 100644 --- a/jdk/test/java/nio/file/Files/SBC.java +++ b/jdk/test/java/nio/file/Files/SBC.java @@ -235,7 +235,7 @@ public class SBC { try { Files.newByteChannel(link, READ, LinkOption.NOFOLLOW_LINKS); throw new RuntimeException(); - } catch (IOException x) { + } catch (IOException | UnsupportedOperationException x) { } finally { TestUtil.deleteUnchecked(link); } diff --git a/jdk/test/java/nio/file/Files/probeContentType/ForceLoad.java b/jdk/test/java/nio/file/Files/probeContentType/ForceLoad.java index 5bb19ddaaa0..4a4edb26eb8 100644 --- a/jdk/test/java/nio/file/Files/probeContentType/ForceLoad.java +++ b/jdk/test/java/nio/file/Files/probeContentType/ForceLoad.java @@ -25,6 +25,8 @@ * @bug 4313887 * @summary Test library dependencies by invoking Files.probeContentType * before other methods that would cause nio.dll to be loaded. + * @build ForceLoad SimpleFileTypeDetector + * @run main/othervm ForceLoad */ import java.nio.file.*; diff --git a/jdk/test/java/nio/file/Files/walkFileTree/find.sh b/jdk/test/java/nio/file/Files/walkFileTree/find.sh index 9a99147fda0..2549ad3cbbb 100644 --- a/jdk/test/java/nio/file/Files/walkFileTree/find.sh +++ b/jdk/test/java/nio/file/Files/walkFileTree/find.sh @@ -43,7 +43,14 @@ case "$OS" in echo "This test does not run on Windows" exit 0 ;; + AIX ) + CLASSPATH=${TESTCLASSES}:${TESTSRC} + # On AIX "find -follow" may core dump on recursive links without '-L' + # see: http://www-01.ibm.com/support/docview.wss?uid=isg1IV28143 + FIND_FOLLOW_OPT="-L" + ;; * ) + FIND_FOLLOW_OPT= CLASSPATH=${TESTCLASSES}:${TESTSRC} ;; esac @@ -65,7 +72,7 @@ if [ $? != 0 ]; then failures=`expr $failures + 1`; fi # cycles (sym links to ancestor directories), other versions do # not. For that reason we run PrintFileTree with the -printCycles # option when the output without this option differs to find(1). -find "$ROOT" -follow > out1 +find $FIND_FOLLOW_OPT "$ROOT" -follow > out1 $JAVA ${TESTVMOPTS} PrintFileTree -follow "$ROOT" > out2 diff out1 out2 if [ $? != 0 ]; diff --git a/jdk/test/java/rmi/MarshalledObject/compare/Compare.java b/jdk/test/java/rmi/MarshalledObject/compare/Compare.java index 20322646920..94eff595092 100644 --- a/jdk/test/java/rmi/MarshalledObject/compare/Compare.java +++ b/jdk/test/java/rmi/MarshalledObject/compare/Compare.java @@ -29,7 +29,7 @@ * not involved in location should be compared. * @author Ken Arnold * - * @run main Compare 11 annotatedRef + * @run main/othervm Compare 11 annotatedRef */ import java.rmi.MarshalledObject; diff --git a/jdk/test/java/rmi/MarshalledObject/compare/HashCode.java b/jdk/test/java/rmi/MarshalledObject/compare/HashCode.java index 768e418ae5b..86fc5ddfe23 100644 --- a/jdk/test/java/rmi/MarshalledObject/compare/HashCode.java +++ b/jdk/test/java/rmi/MarshalledObject/compare/HashCode.java @@ -27,7 +27,7 @@ * @summary MarshalledObject with null throws NullPointerException * @author Ken Arnold * - * @run main HashCode 11 annotatedRef + * @run main/othervm HashCode 11 annotatedRef */ import java.rmi.MarshalledObject; diff --git a/jdk/test/java/rmi/Naming/DefaultRegistryPort.java b/jdk/test/java/rmi/Naming/DefaultRegistryPort.java index a4c49792536..be1cba70f15 100644 --- a/jdk/test/java/rmi/Naming/DefaultRegistryPort.java +++ b/jdk/test/java/rmi/Naming/DefaultRegistryPort.java @@ -28,7 +28,7 @@ * @author Dana Burns * @library ../testlibrary * @build TestLibrary - * @run main DefaultRegistryPort + * @run main/othervm DefaultRegistryPort */ /* diff --git a/jdk/test/java/rmi/Naming/LookupIPv6.java b/jdk/test/java/rmi/Naming/LookupIPv6.java index da6c62cbc83..453ac166a3b 100644 --- a/jdk/test/java/rmi/Naming/LookupIPv6.java +++ b/jdk/test/java/rmi/Naming/LookupIPv6.java @@ -25,7 +25,8 @@ * @summary Ensure that java.rmi.Naming.lookup can handle URLs containing * IPv6 addresses. * @bug 4402708 - * + * @library ../testlibrary + * @build TestLibrary * @run main/othervm -Djava.net.preferIPv6Addresses=true LookupIPv6 */ @@ -62,17 +63,19 @@ public class LookupIPv6 { * an Inet6Address since this test is run with * -Djava.net.preferIPv6Addresses=true. */ + int port = TestLibrary.getUnusedRandomPort(); InetAddress localAddr = InetAddress.getAllByName(null)[0]; if (localAddr instanceof Inet6Address) { System.out.println("IPv6 detected"); Registry reg; try { - reg = LocateRegistry.createRegistry(Registry.REGISTRY_PORT); + reg = LocateRegistry.createRegistry(port); } catch (Exception ex) { reg = LocateRegistry.getRegistry(); } reg.rebind("foo", reg); - Naming.lookup("rmi://[" + localAddr.getHostAddress() + "]/foo"); + Naming.lookup(String.format("rmi://[%s]:%d/foo", + localAddr.getHostAddress(), port)); } } } diff --git a/jdk/test/java/rmi/Naming/LookupNameWithColon.java b/jdk/test/java/rmi/Naming/LookupNameWithColon.java index e3865fd1239..4250b6b37c9 100644 --- a/jdk/test/java/rmi/Naming/LookupNameWithColon.java +++ b/jdk/test/java/rmi/Naming/LookupNameWithColon.java @@ -28,7 +28,7 @@ * * @library ../testlibrary * @build TestLibrary - * @run main LookupNameWithColon + * @run main/othervm LookupNameWithColon */ import java.rmi.Naming; diff --git a/jdk/test/java/rmi/Naming/legalRegistryNames/LegalRegistryNames.java b/jdk/test/java/rmi/Naming/legalRegistryNames/LegalRegistryNames.java index 725d9ca6c7a..418c3726c2d 100644 --- a/jdk/test/java/rmi/Naming/legalRegistryNames/LegalRegistryNames.java +++ b/jdk/test/java/rmi/Naming/legalRegistryNames/LegalRegistryNames.java @@ -28,7 +28,7 @@ * @author Dana Burns * @library ../../testlibrary * @build TestLibrary Legal LegalRegistryNames_Stub - * @run main LegalRegistryNames + * @run main/othervm LegalRegistryNames */ import java.net.InetAddress; diff --git a/jdk/test/java/rmi/RMISecurityManager/checkPackageAccess/CheckPackageAccess.java b/jdk/test/java/rmi/RMISecurityManager/checkPackageAccess/CheckPackageAccess.java index 32cbe5ff481..93d1ce8427d 100644 --- a/jdk/test/java/rmi/RMISecurityManager/checkPackageAccess/CheckPackageAccess.java +++ b/jdk/test/java/rmi/RMISecurityManager/checkPackageAccess/CheckPackageAccess.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -43,7 +43,7 @@ public class CheckPackageAccess { * access to classes in the sun.* hierarchy, which is what is specified * in the JDK's default java.security file. */ - private final static String restrictedClassName = "sun.misc.Ref"; + private final static String restrictedClassName = "sun.misc.Cache"; public static void main(String[] args) { diff --git a/jdk/test/java/rmi/activation/Activatable/extLoadedImpl/ext.sh b/jdk/test/java/rmi/activation/Activatable/extLoadedImpl/ext.sh index 9c7a2eac4ec..86dfff43f5b 100644 --- a/jdk/test/java/rmi/activation/Activatable/extLoadedImpl/ext.sh +++ b/jdk/test/java/rmi/activation/Activatable/extLoadedImpl/ext.sh @@ -33,7 +33,7 @@ OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" ;; Windows* | CYGWIN* ) diff --git a/jdk/test/java/rmi/activation/ActivationGroupDesc/checkDefaultGroupName/CheckDefaultGroupName.java b/jdk/test/java/rmi/activation/ActivationGroupDesc/checkDefaultGroupName/CheckDefaultGroupName.java index f37cbaeb79f..fac64b5691a 100644 --- a/jdk/test/java/rmi/activation/ActivationGroupDesc/checkDefaultGroupName/CheckDefaultGroupName.java +++ b/jdk/test/java/rmi/activation/ActivationGroupDesc/checkDefaultGroupName/CheckDefaultGroupName.java @@ -25,6 +25,8 @@ * @test * @bug 4252236 * @summary ActivationGroupDesc should not do early binding of default classname + * This test doesn't need to run with othervm option as all it does is + * create an ActivationGroupDesc instance, which has no side effects * @author Laird Dornin * * @library ../../../testlibrary diff --git a/jdk/test/java/rmi/registry/readTest/readTest.sh b/jdk/test/java/rmi/registry/readTest/readTest.sh index b6e7c55c46b..812d0a42b54 100644 --- a/jdk/test/java/rmi/registry/readTest/readTest.sh +++ b/jdk/test/java/rmi/registry/readTest/readTest.sh @@ -34,7 +34,7 @@ ARGS="" REGARGS="" case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" FS="/" FILEURL="file:" diff --git a/jdk/test/java/rmi/server/RemoteObject/notExtending/NotExtending.java b/jdk/test/java/rmi/server/RemoteObject/notExtending/NotExtending.java index ef524a4dd8a..fd5ef1eacce 100644 --- a/jdk/test/java/rmi/server/RemoteObject/notExtending/NotExtending.java +++ b/jdk/test/java/rmi/server/RemoteObject/notExtending/NotExtending.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -123,7 +123,7 @@ public class NotExtending implements Remote { } /** - * Force desparate garbage collection so that all sun.misc.Ref instances + * Force desperate garbage collection so that soft references * will be cleared. * * This method is required with the JDK 1.1.x RMI runtime so that the diff --git a/jdk/test/java/rmi/server/UnicastRemoteObject/exportObject/GcDuringExport.java b/jdk/test/java/rmi/server/UnicastRemoteObject/exportObject/GcDuringExport.java index def2806964d..eeb96a14ace 100644 --- a/jdk/test/java/rmi/server/UnicastRemoteObject/exportObject/GcDuringExport.java +++ b/jdk/test/java/rmi/server/UnicastRemoteObject/exportObject/GcDuringExport.java @@ -30,7 +30,7 @@ * @bug 6597112 * @summary GC'ing objects whilst being exported to RMI should not cause exceptions * @author Neil Richards , - * @run main GcDuringExport + * @run main/othervm GcDuringExport */ import java.rmi.Remote; diff --git a/jdk/test/java/security/Security/ClassLoaderDeadlock/ClassLoaderDeadlock.sh b/jdk/test/java/security/Security/ClassLoaderDeadlock/ClassLoaderDeadlock.sh index 7f5dc78c23a..3794cd41bbb 100644 --- a/jdk/test/java/security/Security/ClassLoaderDeadlock/ClassLoaderDeadlock.sh +++ b/jdk/test/java/security/Security/ClassLoaderDeadlock/ClassLoaderDeadlock.sh @@ -62,6 +62,10 @@ case "$OS" in PATHSEP=":" FILESEP="/" ;; + AIX ) + PATHSEP=":" + FILESEP="/" + ;; CYGWIN* ) PATHSEP=";" FILESEP="/" diff --git a/jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock.sh b/jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock.sh index e1ed14425fa..f2002448566 100644 --- a/jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock.sh +++ b/jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock.sh @@ -46,6 +46,10 @@ case "$OS" in PATHSEP=":" FILESEP="/" ;; + AIX ) + PATHSEP=":" + FILESEP="/" + ;; CYGWIN* ) PATHSEP=";" FILESEP="/" diff --git a/jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock2.sh b/jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock2.sh index e817db37898..2951a28e549 100644 --- a/jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock2.sh +++ b/jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock2.sh @@ -70,6 +70,10 @@ case "$OS" in PATHSEP=":" FILESEP="/" ;; + AIX ) + PATHSEP=":" + FILESEP="/" + ;; Windows* ) PATHSEP=";" FILESEP="\\" diff --git a/jdk/test/java/security/Security/signedfirst/Dyn.sh b/jdk/test/java/security/Security/signedfirst/Dyn.sh index 73cff3e80da..019a2f46c60 100644 --- a/jdk/test/java/security/Security/signedfirst/Dyn.sh +++ b/jdk/test/java/security/Security/signedfirst/Dyn.sh @@ -62,6 +62,10 @@ case "$OS" in PATHSEP=":" FILESEP="/" ;; + AIX ) + PATHSEP=":" + FILESEP="/" + ;; CYGWIN* ) PATHSEP=";" FILESEP="/" diff --git a/jdk/test/java/security/Security/signedfirst/Static.sh b/jdk/test/java/security/Security/signedfirst/Static.sh index 46765e4a92b..b22ca05e184 100644 --- a/jdk/test/java/security/Security/signedfirst/Static.sh +++ b/jdk/test/java/security/Security/signedfirst/Static.sh @@ -62,6 +62,10 @@ case "$OS" in PATHSEP=":" FILESEP="/" ;; + AIX ) + PATHSEP=":" + FILESEP="/" + ;; CYGWIN* ) PATHSEP=";" FILESEP="/" diff --git a/jdk/test/java/security/cert/X509Certificate/X509BadCertificate.java b/jdk/test/java/security/cert/X509Certificate/X509BadCertificate.java new file mode 100644 index 00000000000..b2a6c6923fa --- /dev/null +++ b/jdk/test/java/security/cert/X509Certificate/X509BadCertificate.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * 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 8028431 + * @summary Make sure that proper CertificateException is thrown + * when loading bad x509 certificate + * @author Artem Smotrakov + */ + +import java.io.File; +import java.io.FileInputStream; +import java.security.cert.CertificateFactory; +import java.security.cert.X509Certificate; +import java.security.cert.CertificateException; + +public class X509BadCertificate { + + public static void main(String[] args) throws Exception { + test("bad-cert-1.pem"); + } + + /** + * Parse X509 certificates. + */ + static void test(String filename) throws Exception { + try { + System.out.println("Parse file " + filename); + File f = new File(System.getProperty("test.src", "."), filename); + try (FileInputStream fis = new FileInputStream(f)) { + CertificateFactory cf = CertificateFactory.getInstance("X509"); + X509Certificate cert = (X509Certificate) + cf.generateCertificate(fis); + } + throw new Exception("Test failed: " + + "expected CertificateParsingException was not thrown"); + } catch (CertificateException e) { + System.out.println("Test passed: expected exception was thrown: " + + e.toString()); + } + } +} diff --git a/jdk/test/java/security/cert/X509Certificate/bad-cert-1.pem b/jdk/test/java/security/cert/X509Certificate/bad-cert-1.pem new file mode 100644 index 00000000000..0e6c355d0fd --- /dev/null +++ b/jdk/test/java/security/cert/X509Certificate/bad-cert-1.pem @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDZzCCAk+gAwIBAgIJAJYB3qu9C2kiMA0GCSqGSIb3DQEBBQUAMEoxDTALBgNV +BAMMBFRlc3QxDTALBgNVBAsMBEphdmExDzANBgNVBAoMBk9yYWNsZTEMMAoGA1UE +BwwDU1BCMQswCQYDVQQGEwJSVTAeFw0xMzEyMjMwNzA4MDhaFw0yMzEyMjEwNzA4 +MDhaMEoxDTALBgNVBAMMBFRlc3QxDTALBgNVBAsMBEphdmExDzANBgNVBAoMBk9y +YWNsZTEMMAoGA1UMBwwDU1BCMQswCQYDVQQGEwJSVTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBAOqiCN4gFxehl547Q7/VNGbGApr+wszLdanHPucAH6Wf +LtcRhKNUSqtBAQxEpFrTpMNEqm2GElAjiPa6m48qIjLVSvOb/9w3G/yXB8zyZbIm +/Nfp2sT4OEaa1JSEZSpolhS4FfqYzjGQp5cn4Xn4zKjDgiceHgfLls5x2dRydQZO +Yf91qSIioZxVHUtlo8yztkieiSaqPWt3nJ4PIwhFbsu1HVmWaYZD+nBYCKgVHqrS +cueO98Ca4Doz73O27X1dVbQBdLS0JI7qVAG8LD388iPL8qbsOkgWPzmEQ+kLRKO4 +g7RpuwlXuwaMSh95NWaxlu4Ob6GRJQmpconYoe13+7ECAwEAAaNQME4wHQYDVR0O +BBYEFIG8TPobXcbNbDi+zKudd9whpxoNMB8GA1UdIwQYMBaAFIG8TPobXcbNbDi+ +zKudd9whpxoNMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFRQADggEBAAynN+e7 +h+ufT5SBKN/gBuJAnF1mKIPESiipuv5KoYUGZOY8ShgYLcwY+qnbuHYFUlvq6Zns +K4/e+x/16h32vD7dEPkNvukbvER4YJQQiN6osDfXpTPzixYftWdmtX0u8xQfwb/g +R8DS7bazz99jVXk+jTK4yWBY+gMwEat+LyNQ5cyq8Qhi1oBKUbGRbiOts19B97fn +Rv8TsyXN3INLGYhdVxZoD7E5tyG1ydSFmOMadulAC2epBXDHOXZnz2UWauJc0XW5 +1L/YQVri47VkdHS3tisBzELEJdLmdMDb+5tAU+lItXmTXe2/PB53WIvsEIb4t+eQ +wY0hCj9lVJlajTQ= +-----END CERTIFICATE----- diff --git a/jdk/test/java/util/Currency/PropertiesTest.sh b/jdk/test/java/util/Currency/PropertiesTest.sh index 65ab89da2e0..01f1326cd2d 100644 --- a/jdk/test/java/util/Currency/PropertiesTest.sh +++ b/jdk/test/java/util/Currency/PropertiesTest.sh @@ -52,7 +52,7 @@ echo "CLASSPATH=${CLASSPATH}" # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/java/util/Locale/LocaleCategory.sh b/jdk/test/java/util/Locale/LocaleCategory.sh index 7715d354225..989556a2477 100644 --- a/jdk/test/java/util/Locale/LocaleCategory.sh +++ b/jdk/test/java/util/Locale/LocaleCategory.sh @@ -52,7 +52,7 @@ echo "CLASSPATH=${CLASSPATH}" # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | *BSD | Darwin ) + SunOS | Linux | *BSD | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/java/util/Locale/LocaleProviders.sh b/jdk/test/java/util/Locale/LocaleProviders.sh index db6e4a92d62..58cd9c82060 100644 --- a/jdk/test/java/util/Locale/LocaleProviders.sh +++ b/jdk/test/java/util/Locale/LocaleProviders.sh @@ -56,7 +56,7 @@ echo "CLASSPATH=${CLASSPATH}" # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | *BSD | Darwin ) + SunOS | Linux | *BSD | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/java/util/Locale/LocaleTest.java b/jdk/test/java/util/Locale/LocaleTest.java index 8c9c4f16199..2a6824222b3 100644 --- a/jdk/test/java/util/Locale/LocaleTest.java +++ b/jdk/test/java/util/Locale/LocaleTest.java @@ -25,7 +25,7 @@ * @bug 4052404 4052440 4084688 4092475 4101316 4105828 4107014 4107953 4110613 * 4118587 4118595 4122371 4126371 4126880 4135316 4135752 4139504 4139940 4143951 * 4147315 4147317 4147552 4335196 4778440 4940539 5010672 6475525 6544471 6627549 - * 6786276 7066203 7085757 + * 6786276 7066203 7085757 8030696 * @summary test Locales */ /* @@ -62,6 +62,8 @@ */ import java.text.*; +import java.util.Arrays; +import java.util.List; import java.util.Locale; import java.util.MissingResourceException; import java.util.Date; @@ -925,16 +927,20 @@ test commented out pending API-change approval } /* - * @bug 4147552 4778440 + * @bug 4147552 4778440 8030696 */ public void Test4147552() { Locale[] locales = { new Locale("no", "NO"), new Locale("no", "NO", "B"), - new Locale("no", "NO", "NY") }; + new Locale("no", "NO", "NY"), new Locale("nb", "NO"), + new Locale("nn", "NO") }; String[] englishDisplayNames = { "Norwegian (Norway)", "Norwegian (Norway,Bokm\u00e5l)", - "Norwegian (Norway,Nynorsk)" }; + "Norwegian (Norway,Nynorsk)", + "Norwegian Bokm\u00e5l (Norway)", + "Norwegian Nynorsk (Norway)" }; String[] norwegianDisplayNames = { "norsk (Norge)", - "norsk (Norge,bokm\u00e5l)", "norsk (Norge,nynorsk)" }; + "norsk (Norge,bokm\u00e5l)", "norsk (Noreg,nynorsk)", + "bokm\u00e5l (Norge)", "nynorsk (Noreg)" }; for (int i = 0; i < locales.length; i++) { Locale loc = locales[i]; @@ -948,6 +954,17 @@ test commented out pending API-change approval } } + /* + * @bug 8030696 + */ + public void Test8030696() { + List av = Arrays.asList(Locale.getAvailableLocales()); + if (!av.contains(new Locale("nb", "NO")) || + !av.contains(new Locale("nn", "NO"))) { + errln("\"nb-NO\" and/or \"nn-NO\" locale(s) not returned from getAvailableLocales()."); + } + } + static String escapeUnicode(String s) { StringBuffer buf = new StringBuffer(); for (int i=0; i list = new CopyOnWriteArrayList<>(); + list.add("A"); + list.add("B"); + list.add("C"); + list.add("D"); + list.add("E"); + + expectThrow(() -> list.subList(-1, 5)); + expectThrow(() -> list.subList(0, 6)); + expectThrow(() -> list.subList(4, 3)); + expectThrow(() -> list.subList(0, 5).subList(-1, 5)); + expectThrow(() -> list.subList(0, 5).subList(0, 6)); + expectThrow(() -> list.subList(0, 5).subList(4, 3)); + } + + static void expectThrow(Runnable r) { + try { + r.run(); + throw new RuntimeException("Failed: expected IOOBE to be thrown"); + } catch (IndexOutOfBoundsException x) { + // ok, excpeted + } + } +} + diff --git a/jdk/test/java/util/logging/AnonLoggerWeakRefLeak.sh b/jdk/test/java/util/logging/AnonLoggerWeakRefLeak.sh index eef8641c7b6..fc1aece9ebd 100644 --- a/jdk/test/java/util/logging/AnonLoggerWeakRefLeak.sh +++ b/jdk/test/java/util/logging/AnonLoggerWeakRefLeak.sh @@ -83,9 +83,9 @@ if [ "$status" != 0 ]; then fi if [ "$status" != 0 ]; then - echo "ERROR: 'jmap $jmap_option' is not supported so this test" - echo "ERROR: cannot work reliably. Aborting!" - exit 2 + echo "WARNING: 'jmap $jmap_option' is not supported on this platform" + echo "WARNING: so this test cannot work reliably. Aborting!" + exit 0 fi fi diff --git a/jdk/test/java/util/logging/LoggerWeakRefLeak.sh b/jdk/test/java/util/logging/LoggerWeakRefLeak.sh index ea3dc1f8f1d..25cc4aabc74 100644 --- a/jdk/test/java/util/logging/LoggerWeakRefLeak.sh +++ b/jdk/test/java/util/logging/LoggerWeakRefLeak.sh @@ -83,9 +83,9 @@ if [ "$status" != 0 ]; then fi if [ "$status" != 0 ]; then - echo "ERROR: 'jmap $jmap_option' is not supported so this test" - echo "ERROR: cannot work reliably. Aborting!" - exit 2 + echo "WARNING: 'jmap $jmap_option' is not supported on this platform" + echo "WARNING: so this test cannot work reliably. Aborting!" + exit 0 fi fi diff --git a/jdk/test/java/util/logging/SimpleLogManager.java b/jdk/test/java/util/logging/SimpleLogManager.java index f469727654f..1e1da7919a5 100644 --- a/jdk/test/java/util/logging/SimpleLogManager.java +++ b/jdk/test/java/util/logging/SimpleLogManager.java @@ -98,16 +98,14 @@ public class SimpleLogManager extends CustomLogManager { return false; } CustomLogger newLogger = new CustomLogger(logger); - super.addLogger(newLogger); - return true; + return super.addLogger(newLogger); } public class CustomLogger extends Logger { + final Logger keepRef; // keep a strong reference to avoid GC. CustomLogger(Logger logger) { super(logger.getName(), logger.getResourceBundleName()); - } - CustomLogger(String name) { - super(name, null); + keepRef = logger; } } } diff --git a/jdk/test/java/util/prefs/CheckUserPrefsStorage.sh b/jdk/test/java/util/prefs/CheckUserPrefsStorage.sh index 28210696b39..bfb4a2a54c7 100644 --- a/jdk/test/java/util/prefs/CheckUserPrefsStorage.sh +++ b/jdk/test/java/util/prefs/CheckUserPrefsStorage.sh @@ -31,7 +31,7 @@ OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/javax/crypto/SecretKeyFactory/FailOverTest.sh b/jdk/test/javax/crypto/SecretKeyFactory/FailOverTest.sh index c16b60ff877..51eaa6eda0c 100644 --- a/jdk/test/javax/crypto/SecretKeyFactory/FailOverTest.sh +++ b/jdk/test/javax/crypto/SecretKeyFactory/FailOverTest.sh @@ -56,7 +56,7 @@ echo "TESTCLASSES=${TESTCLASSES}" # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/javax/imageio/metadata/IIOMetadataFormat/runMetadataFormatTest.sh b/jdk/test/javax/imageio/metadata/IIOMetadataFormat/runMetadataFormatTest.sh index 84a58535cf1..800a898eb1a 100644 --- a/jdk/test/javax/imageio/metadata/IIOMetadataFormat/runMetadataFormatTest.sh +++ b/jdk/test/javax/imageio/metadata/IIOMetadataFormat/runMetadataFormatTest.sh @@ -89,7 +89,7 @@ case "$OS" in FILESEP="/" ;; - Linux | Darwin ) + Linux | Darwin | AIX ) VAR="A different value for Linux" DEFAULT_JDK=/none #DEFAULT_JDK=/usr/local/java/jdk1.4/linux-i386 diff --git a/jdk/test/javax/imageio/metadata/IIOMetadataFormat/runMetadataFormatThreadTest.sh b/jdk/test/javax/imageio/metadata/IIOMetadataFormat/runMetadataFormatThreadTest.sh index ed36fef3f17..eb60ba99282 100644 --- a/jdk/test/javax/imageio/metadata/IIOMetadataFormat/runMetadataFormatThreadTest.sh +++ b/jdk/test/javax/imageio/metadata/IIOMetadataFormat/runMetadataFormatThreadTest.sh @@ -90,7 +90,7 @@ case "$OS" in FILESEP="/" ;; - Linux | Darwin ) + Linux | Darwin | AIX ) VAR="A different value for Linux" DEFAULT_JDK=/none #DEFAULT_JDK=/usr/local/java/jdk1.4/linux-i386 diff --git a/jdk/test/javax/imageio/stream/StreamCloserLeak/run_test.sh b/jdk/test/javax/imageio/stream/StreamCloserLeak/run_test.sh index 18ffc1c8d40..1977ca80275 100644 --- a/jdk/test/javax/imageio/stream/StreamCloserLeak/run_test.sh +++ b/jdk/test/javax/imageio/stream/StreamCloserLeak/run_test.sh @@ -92,6 +92,14 @@ case "$OS" in TMP="/tmp" ;; + AIX ) + VAR="A different value for AIX" + DEFAULT_JDK=/ + FILESEP="/" + PATHSEP=":" + TMP="/tmp" + ;; + Darwin ) VAR="A different value for MacOSX" DEFAULT_JDK=/usr diff --git a/jdk/test/javax/script/CommonSetup.sh b/jdk/test/javax/script/CommonSetup.sh index 69ed2379eda..7a64bd8c661 100644 --- a/jdk/test/javax/script/CommonSetup.sh +++ b/jdk/test/javax/script/CommonSetup.sh @@ -36,7 +36,7 @@ OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/javax/security/auth/Subject/doAs/Test.sh b/jdk/test/javax/security/auth/Subject/doAs/Test.sh index 73565211859..fac17d138c5 100644 --- a/jdk/test/javax/security/auth/Subject/doAs/Test.sh +++ b/jdk/test/javax/security/auth/Subject/doAs/Test.sh @@ -48,6 +48,11 @@ case "$OS" in FS="/" RM="/bin/rm -f" ;; + AIX ) + PS=":" + FS="/" + RM="/bin/rm -f" + ;; CYGWIN* ) PS=";" FS="/" diff --git a/jdk/test/jdk/lambda/MethodReferenceTestCallerSensitive.java b/jdk/test/jdk/lambda/MethodReferenceTestCallerSensitive.java index 805a6a203cb..86c22a10627 100644 --- a/jdk/test/jdk/lambda/MethodReferenceTestCallerSensitive.java +++ b/jdk/test/jdk/lambda/MethodReferenceTestCallerSensitive.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,6 +28,8 @@ import java.util.function.Function; /** + * @test + * @bug 8020816 * @author Robert Field */ diff --git a/jdk/test/lib/security/java.policy/Ext_AllPolicy.sh b/jdk/test/lib/security/java.policy/Ext_AllPolicy.sh index b562afa4323..fff2a3436fc 100644 --- a/jdk/test/lib/security/java.policy/Ext_AllPolicy.sh +++ b/jdk/test/lib/security/java.policy/Ext_AllPolicy.sh @@ -53,7 +53,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/sun/management/jmxremote/bootstrap/GeneratePropertyPassword.sh b/jdk/test/sun/management/jmxremote/bootstrap/GeneratePropertyPassword.sh index 4d1d6e8f93d..55d7e7635f4 100644 --- a/jdk/test/sun/management/jmxremote/bootstrap/GeneratePropertyPassword.sh +++ b/jdk/test/sun/management/jmxremote/bootstrap/GeneratePropertyPassword.sh @@ -43,7 +43,7 @@ CYGWIN_NT*) esac case $OS in -SunOS | Linux | Darwin) +SunOS | Linux | Darwin | AIX ) PATHSEP=":" FILESEP="/" DFILESEP=$FILESEP diff --git a/jdk/test/sun/misc/Version/Version.java b/jdk/test/sun/misc/Version/Version.java index 13e507540c1..85c8ce2a071 100644 --- a/jdk/test/sun/misc/Version/Version.java +++ b/jdk/test/sun/misc/Version/Version.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2014, 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 @@ -116,10 +116,16 @@ public class Version { } else if (Character.isDigit(cs.charAt(0)) && Character.isDigit(cs.charAt(1)) && cs.charAt(2) == '.' && Character.isDigit(cs.charAt(3))) { - // HSX has nn.n (major.minor) version + // HSX has nn.n[n] (major.minor) version major = Integer.valueOf(version.substring(0, 2)).intValue(); - minor = Character.digit(cs.charAt(3), 10); - cs = cs.subSequence(4, cs.length()); + if (Character.isDigit(cs.charAt(4))) { + minor = Integer.valueOf(version.substring(3, 5)).intValue(); + cs = cs.subSequence(5, cs.length()); + } + else { + minor = Character.digit(cs.charAt(3), 10); + cs = cs.subSequence(4, cs.length()); + } } if (cs.charAt(0) == '_' && cs.length() >= 3 && Character.isDigit(cs.charAt(1)) && diff --git a/jdk/test/sun/net/ftp/MarkResetTest.sh b/jdk/test/sun/net/ftp/MarkResetTest.sh index c998bcffef2..3878b505d90 100644 --- a/jdk/test/sun/net/ftp/MarkResetTest.sh +++ b/jdk/test/sun/net/ftp/MarkResetTest.sh @@ -28,7 +28,7 @@ OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/sun/net/www/http/HttpClient/RetryPost.java b/jdk/test/sun/net/www/http/HttpClient/RetryPost.java index 2f5add47afa..da7d868c3f2 100644 --- a/jdk/test/sun/net/www/http/HttpClient/RetryPost.java +++ b/jdk/test/sun/net/www/http/HttpClient/RetryPost.java @@ -55,8 +55,8 @@ public class RetryPost void doClient() { try { InetSocketAddress address = httpServer.getAddress(); - URL url = new URL("http://" + address.getHostName() + ":" + address.getPort() + "/test/"); - HttpURLConnection uc = (HttpURLConnection)url.openConnection(); + URL url = new URL("http://localhost:" + address.getPort() + "/test/"); + HttpURLConnection uc = (HttpURLConnection)url.openConnection(Proxy.NO_PROXY); uc.setDoOutput(true); uc.setRequestMethod("POST"); uc.getResponseCode(); diff --git a/jdk/test/sun/net/www/http/HttpClient/RetryPost.sh b/jdk/test/sun/net/www/http/HttpClient/RetryPost.sh index 17d08cd30b0..c500171220c 100644 --- a/jdk/test/sun/net/www/http/HttpClient/RetryPost.sh +++ b/jdk/test/sun/net/www/http/HttpClient/RetryPost.sh @@ -28,7 +28,7 @@ OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/sun/net/www/protocol/jar/B5105410.sh b/jdk/test/sun/net/www/protocol/jar/B5105410.sh index f47ca5ed99d..aa31a53ebc2 100644 --- a/jdk/test/sun/net/www/protocol/jar/B5105410.sh +++ b/jdk/test/sun/net/www/protocol/jar/B5105410.sh @@ -31,7 +31,7 @@ OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/sun/net/www/protocol/jar/jarbug/run.sh b/jdk/test/sun/net/www/protocol/jar/jarbug/run.sh index 5f039b97c93..69632014bac 100644 --- a/jdk/test/sun/net/www/protocol/jar/jarbug/run.sh +++ b/jdk/test/sun/net/www/protocol/jar/jarbug/run.sh @@ -31,7 +31,7 @@ DEST=`pwd` OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/sun/rmi/rmic/RMIGenerator/RmicDefault.java b/jdk/test/sun/rmi/rmic/RMIGenerator/RmicDefault.java index 5f4587ecdfb..ff203731664 100644 --- a/jdk/test/sun/rmi/rmic/RMIGenerator/RmicDefault.java +++ b/jdk/test/sun/rmi/rmic/RMIGenerator/RmicDefault.java @@ -28,7 +28,7 @@ * @library ../../../../java/rmi/testlibrary * * @build StreamPipe - * @run main RmicDefault + * @run main/othervm RmicDefault */ /* diff --git a/jdk/test/sun/rmi/rmic/newrmic/equivalence/batch.sh b/jdk/test/sun/rmi/rmic/newrmic/equivalence/batch.sh index 020202a1818..25913c63ea0 100644 --- a/jdk/test/sun/rmi/rmic/newrmic/equivalence/batch.sh +++ b/jdk/test/sun/rmi/rmic/newrmic/equivalence/batch.sh @@ -61,13 +61,13 @@ mkdir $newv11dir $newvcompatdir $newv12dir set -ex -${TESTJAVA}/bin/rmic -keep -nowrite -v1.1 -d $refv11dir -classpath "$@" -${TESTJAVA}/bin/rmic -keep -nowrite -vcompat -d $refvcompatdir -classpath "$@" -${TESTJAVA}/bin/rmic -keep -v1.2 -d $refv12dir -classpath "$@" +${TESTJAVA}/bin/rmic -keep -nowrite -v1.1 -d $refv11dir -classpath "$@" +${TESTJAVA}/bin/rmic -keep -nowrite -vcompat -d $refvcompatdir -classpath "$@" +${TESTJAVA}/bin/rmic -keep -nowrite -v1.2 -d $refv12dir -classpath "$@" -${TESTJAVA}/bin/rmic -Xnew -nowrite -keep -v1.1 -d $newv11dir -classpath "$@" -${TESTJAVA}/bin/rmic -Xnew -nowrite -keep -vcompat -d $newvcompatdir -classpath "$@" -${TESTJAVA}/bin/rmic -Xnew -keep -v1.2 -d $newv12dir -classpath "$@" +${TESTJAVA}/bin/rmic -Xnew -keep -nowrite -v1.1 -d $newv11dir -classpath "$@" +${TESTJAVA}/bin/rmic -Xnew -keep -nowrite -vcompat -d $newvcompatdir -classpath "$@" +${TESTJAVA}/bin/rmic -Xnew -keep -nowrite -v1.2 -d $newv12dir -classpath "$@" set +ex diff --git a/jdk/test/sun/security/krb5/runNameEquals.sh b/jdk/test/sun/security/krb5/runNameEquals.sh index 7ee81e505c6..f65e32ffd97 100644 --- a/jdk/test/sun/security/krb5/runNameEquals.sh +++ b/jdk/test/sun/security/krb5/runNameEquals.sh @@ -66,6 +66,10 @@ case "$OS" in fi fi ;; + AIX ) + PATHSEP=":" + FILESEP="/" + ;; CYGWIN* ) PATHSEP=";" FILESEP="/" diff --git a/jdk/test/sun/security/pkcs11/Provider/ConfigQuotedString.sh b/jdk/test/sun/security/pkcs11/Provider/ConfigQuotedString.sh index 30b245c81a0..7e93e184354 100644 --- a/jdk/test/sun/security/pkcs11/Provider/ConfigQuotedString.sh +++ b/jdk/test/sun/security/pkcs11/Provider/ConfigQuotedString.sh @@ -72,6 +72,12 @@ case "$OS" in CP="${FS}bin${FS}cp" CHMOD="${FS}bin${FS}chmod" ;; + AIX ) + FS="/" + PS=":" + CP="${FS}bin${FS}cp" + CHMOD="${FS}bin${FS}chmod" + ;; Windows* ) FS="\\" PS=";" diff --git a/jdk/test/sun/security/pkcs11/Provider/Login.sh b/jdk/test/sun/security/pkcs11/Provider/Login.sh index a1f6b132c9e..35f9ed562ea 100644 --- a/jdk/test/sun/security/pkcs11/Provider/Login.sh +++ b/jdk/test/sun/security/pkcs11/Provider/Login.sh @@ -73,6 +73,12 @@ case "$OS" in CP="${FS}bin${FS}cp" CHMOD="${FS}bin${FS}chmod" ;; + AIX ) + FS="/" + PS=":" + CP="${FS}bin${FS}cp" + CHMOD="${FS}bin${FS}chmod" + ;; Windows* ) FS="\\" PS=";" diff --git a/jdk/test/sun/security/provider/KeyStore/DKSTest.sh b/jdk/test/sun/security/provider/KeyStore/DKSTest.sh index b789e414140..99c7617dfa5 100644 --- a/jdk/test/sun/security/provider/KeyStore/DKSTest.sh +++ b/jdk/test/sun/security/provider/KeyStore/DKSTest.sh @@ -50,15 +50,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS ) - PS=":" - FS="/" - ;; - Linux ) - PS=":" - FS="/" - ;; - Darwin ) + SunOS | Linux | Darwin | AIX) PS=":" FS="/" ;; diff --git a/jdk/test/sun/security/provider/PolicyFile/getinstance/getinstance.sh b/jdk/test/sun/security/provider/PolicyFile/getinstance/getinstance.sh index 5775eab80b1..e2da96ea297 100644 --- a/jdk/test/sun/security/provider/PolicyFile/getinstance/getinstance.sh +++ b/jdk/test/sun/security/provider/PolicyFile/getinstance/getinstance.sh @@ -63,6 +63,10 @@ case "$OS" in PS=":" FS="/" ;; + AIX ) + PS=":" + FS="/" + ;; CYGWIN* ) PS=";" FS="/" diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/EngineArgs/DebugReportsOneExtraByte.sh b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/EngineArgs/DebugReportsOneExtraByte.sh index 9b48bee7f3b..b0a824fc45e 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/EngineArgs/DebugReportsOneExtraByte.sh +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/EngineArgs/DebugReportsOneExtraByte.sh @@ -33,7 +33,7 @@ OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/NotifyHandshakeTest.sh b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/NotifyHandshakeTest.sh index eff4930de4a..ee2381612d0 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/NotifyHandshakeTest.sh +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/NotifyHandshakeTest.sh @@ -46,7 +46,7 @@ fi OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) FILESEP="/" PATHSEP=":" ;; diff --git a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxy.sh b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxy.sh index 4cdc5d4d1b7..1b7cf984e8b 100644 --- a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxy.sh +++ b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxy.sh @@ -32,7 +32,7 @@ HOSTNAME=`uname -n` OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxyWithAuth.sh b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxyWithAuth.sh index de7b039488c..fd24c76a475 100644 --- a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxyWithAuth.sh +++ b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxyWithAuth.sh @@ -32,7 +32,7 @@ HOSTNAME=`uname -n` OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PS=":" FS="/" ;; diff --git a/jdk/test/sun/security/tools/jarsigner/AlgOptions.sh b/jdk/test/sun/security/tools/jarsigner/AlgOptions.sh index b6f8c8b3ff2..9b16831d799 100644 --- a/jdk/test/sun/security/tools/jarsigner/AlgOptions.sh +++ b/jdk/test/sun/security/tools/jarsigner/AlgOptions.sh @@ -46,7 +46,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/sun/security/tools/jarsigner/EntriesOrder.java b/jdk/test/sun/security/tools/jarsigner/EntriesOrder.java new file mode 100644 index 00000000000..96c90e98e12 --- /dev/null +++ b/jdk/test/sun/security/tools/jarsigner/EntriesOrder.java @@ -0,0 +1,199 @@ +/* + * Copyright (c) 2014, 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 8031572 + * @summary jarsigner -verify exits with 0 when a jar file is not properly signed + */ + +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.security.cert.Certificate; +import java.util.*; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; +import java.util.jar.JarInputStream; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +public class EntriesOrder { + + public static void main(String[] args) throws Exception { + + String[] entries = { + "META-INF/", + "META-INF/MANIFEST.MF", + "META-INF/A.RSA", + "META-INF/A.SF", + "META-INF/inf", + "a"}; + + Map content = new HashMap<>(); + + // We will create a jar containing entries above. Try all permutations + // and confirm 1) When opened as a JarFile, we can always get 3 signed + // ones (MANIFEST, inf, a), and 2) When opened as a JarInputStream, + // when the order is correct (MANIFEST at beginning, followed by RSA/SF, + // directory ignored), we can get 2 signed ones (inf, a). + + // Prepares raw files + Files.write(Paths.get("a"), "a".getBytes()); + Files.createDirectory(Paths.get("META-INF/")); + Files.write(Paths.get("META-INF/inf"), "inf".getBytes()); + + // Pack, sign, and extract to get all files + sun.tools.jar.Main m = + new sun.tools.jar.Main(System.out, System.err, "jar"); + if (!m.run("cvf a.jar a META-INF/inf".split(" "))) { + throw new Exception("jar creation failed"); + } + sun.security.tools.keytool.Main.main( + ("-keystore jks -storepass changeit -keypass changeit -dname" + + " CN=A -alias a -genkeypair -keyalg rsa").split(" ")); + sun.security.tools.jarsigner.Main.main( + "-keystore jks -storepass changeit a.jar a".split(" ")); + m = new sun.tools.jar.Main(System.out, System.err, "jar"); + if (!m.run("xvf a.jar".split(" "))) { + throw new Exception("jar extraction failed"); + } + + // Data + for (String s: entries) { + if (!s.endsWith("/")) { + content.put(s, Files.readAllBytes(Paths.get(s))); + } + } + + // Test + for (List perm: Permute(entries)) { + + // Recreate a jar + try (ZipOutputStream zos + = new ZipOutputStream(new FileOutputStream("x.jar"))) { + for (String e: perm) { + zos.putNextEntry(new ZipEntry(e)); + if (Paths.get(e).toFile().isDirectory()) continue; + zos.write(content.get(e)); + } + } + + // Open with JarFile, number of signed entries should be 3. + int cc = 0; + try (JarFile jf = new JarFile("x.jar")) { + Enumeration jes = jf.entries(); + while (jes.hasMoreElements()) { + JarEntry je = jes.nextElement(); + sun.misc.IOUtils.readFully(jf.getInputStream(je), -1, true); + Certificate[] certs = je.getCertificates(); + if (certs != null && certs.length > 0) { + cc++; + } + } + } + + if (cc != 3) { + System.out.println(perm + " - jf - " + cc); + throw new Exception(); + } + + // Open with JarInputStream + int signed; + + perm.remove("META-INF/"); + if (perm.get(0).equals("META-INF/MANIFEST.MF") && + perm.get(1).contains("/A.") && + perm.get(2).contains("/A.")) { + signed = 2; // Good order + } else { + signed = 0; // Bad order. In this case, the number of signed + // entries is not documented. Just test impl. + } + + cc = 0; + try (JarInputStream jis + = new JarInputStream(new FileInputStream("x.jar"))) { + while (true) { + JarEntry je = jis.getNextJarEntry(); + if (je == null) break; + sun.misc.IOUtils.readFully(jis, -1, true); + Certificate[] certs = je.getCertificates(); + if (certs != null && certs.length > 0) { + cc++; + } + } + } + + if (cc != signed) { + System.out.println(perm + " - jis - " + cc + " " + signed); + throw new Exception(); + } + } + } + + // Helper method to return all permutations of an array. Each output can + // be altered without damaging the iteration process. + static Iterable> Permute(String[] entries) { + return new Iterable>() { + + int s = entries.length; + long c = factorial(s) - 1; // number of permutations + + private long factorial(int n) { + return (n == 1) ? 1: (n * factorial(n-1)); + } + + @Override + public Iterator> iterator() { + return new Iterator>() { + @Override + public boolean hasNext() { + return c >= 0; + } + + @Override + public List next() { + if (c < 0) return null; + List result = new ArrayList<>(s); + LinkedList source = new LinkedList<>( + Arrays.asList(entries)); + // Treat c as a integer with different radixes at + // different digits, i.e. at digit 0, radix is s; + // at digit 1, radix is s-1. Thus a s-digit number + // is able to represent s! different values. + long n = c; + for (int i=s; i>=1; i--) { + int x = (int)(n % i); + result.add(source.remove(x)); + n = n / i; + } + c--; + return result; + } + }; + } + }; + } +} diff --git a/jdk/test/sun/security/tools/jarsigner/PercentSign.sh b/jdk/test/sun/security/tools/jarsigner/PercentSign.sh index 559c0533e73..38d9ece9bbc 100644 --- a/jdk/test/sun/security/tools/jarsigner/PercentSign.sh +++ b/jdk/test/sun/security/tools/jarsigner/PercentSign.sh @@ -46,7 +46,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/sun/security/tools/jarsigner/diffend.sh b/jdk/test/sun/security/tools/jarsigner/diffend.sh index 0f943796af4..787b58680f3 100644 --- a/jdk/test/sun/security/tools/jarsigner/diffend.sh +++ b/jdk/test/sun/security/tools/jarsigner/diffend.sh @@ -41,7 +41,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/sun/security/tools/jarsigner/oldsig.sh b/jdk/test/sun/security/tools/jarsigner/oldsig.sh index aae758cb937..062c2aa21d9 100644 --- a/jdk/test/sun/security/tools/jarsigner/oldsig.sh +++ b/jdk/test/sun/security/tools/jarsigner/oldsig.sh @@ -42,7 +42,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/sun/security/tools/keytool/AltProviderPath.sh b/jdk/test/sun/security/tools/keytool/AltProviderPath.sh index 82bc65787ab..8fd67ef0e0a 100644 --- a/jdk/test/sun/security/tools/keytool/AltProviderPath.sh +++ b/jdk/test/sun/security/tools/keytool/AltProviderPath.sh @@ -46,7 +46,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/sun/security/tools/keytool/CloneKeyAskPassword.sh b/jdk/test/sun/security/tools/keytool/CloneKeyAskPassword.sh index 0f9b82c84b8..62d1195a1ca 100644 --- a/jdk/test/sun/security/tools/keytool/CloneKeyAskPassword.sh +++ b/jdk/test/sun/security/tools/keytool/CloneKeyAskPassword.sh @@ -59,6 +59,10 @@ case "$OS" in PATHSEP=":" FILESEP="/" ;; + AIX ) + PATHSEP=":" + FILESEP="/" + ;; CYGWIN* ) PATHSEP=";" FILESEP="/" diff --git a/jdk/test/sun/security/tools/keytool/NoExtNPE.sh b/jdk/test/sun/security/tools/keytool/NoExtNPE.sh index da63ed8ce3a..99b6ae51f36 100644 --- a/jdk/test/sun/security/tools/keytool/NoExtNPE.sh +++ b/jdk/test/sun/security/tools/keytool/NoExtNPE.sh @@ -51,6 +51,10 @@ case "$OS" in Darwin ) FILESEP="/" ;; + AIX ) + PATHSEP=":" + FILESEP="/" + ;; CYGWIN* ) FILESEP="/" ;; diff --git a/jdk/test/sun/security/tools/keytool/SecretKeyKS.sh b/jdk/test/sun/security/tools/keytool/SecretKeyKS.sh index 6246d2bdbb1..3323179daff 100644 --- a/jdk/test/sun/security/tools/keytool/SecretKeyKS.sh +++ b/jdk/test/sun/security/tools/keytool/SecretKeyKS.sh @@ -45,7 +45,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/sun/security/tools/keytool/StandardAlgName.sh b/jdk/test/sun/security/tools/keytool/StandardAlgName.sh index 8ac1324bc11..c12348537e1 100644 --- a/jdk/test/sun/security/tools/keytool/StandardAlgName.sh +++ b/jdk/test/sun/security/tools/keytool/StandardAlgName.sh @@ -46,7 +46,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/sun/security/tools/keytool/StorePasswordsByShell.sh b/jdk/test/sun/security/tools/keytool/StorePasswordsByShell.sh index 7347f345878..d3cd2ff92cb 100644 --- a/jdk/test/sun/security/tools/keytool/StorePasswordsByShell.sh +++ b/jdk/test/sun/security/tools/keytool/StorePasswordsByShell.sh @@ -46,15 +46,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS ) - PATHSEP=":" - FILESEP="/" - ;; - Linux ) - PATHSEP=":" - FILESEP="/" - ;; - Darwin ) + SunOS | Linux | Darwin | AIX) PATHSEP=":" FILESEP="/" ;; diff --git a/jdk/test/sun/security/tools/keytool/printssl.sh b/jdk/test/sun/security/tools/keytool/printssl.sh index 36ba9d09437..6ebdd3dad22 100644 --- a/jdk/test/sun/security/tools/keytool/printssl.sh +++ b/jdk/test/sun/security/tools/keytool/printssl.sh @@ -40,7 +40,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) FS="/" ;; CYGWIN* ) diff --git a/jdk/test/sun/security/tools/keytool/resource.sh b/jdk/test/sun/security/tools/keytool/resource.sh index 1256422144e..1e31ff2d241 100644 --- a/jdk/test/sun/security/tools/keytool/resource.sh +++ b/jdk/test/sun/security/tools/keytool/resource.sh @@ -43,7 +43,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null FS="/" ;; diff --git a/jdk/test/sun/security/tools/keytool/standard.sh b/jdk/test/sun/security/tools/keytool/standard.sh index 630aa41c46f..a42fbfda3cc 100644 --- a/jdk/test/sun/security/tools/keytool/standard.sh +++ b/jdk/test/sun/security/tools/keytool/standard.sh @@ -45,7 +45,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin | CYGWIN* ) + SunOS | Linux | Darwin | AIX | CYGWIN* ) FS="/" ;; Windows_* ) diff --git a/jdk/test/sun/security/tools/policytool/Alias.sh b/jdk/test/sun/security/tools/policytool/Alias.sh index ae1e4082004..c7c25899ce3 100644 --- a/jdk/test/sun/security/tools/policytool/Alias.sh +++ b/jdk/test/sun/security/tools/policytool/Alias.sh @@ -47,7 +47,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/sun/security/tools/policytool/ChangeUI.sh b/jdk/test/sun/security/tools/policytool/ChangeUI.sh index 1b6a7984087..96077fa6beb 100644 --- a/jdk/test/sun/security/tools/policytool/ChangeUI.sh +++ b/jdk/test/sun/security/tools/policytool/ChangeUI.sh @@ -46,7 +46,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/sun/security/tools/policytool/OpenPolicy.sh b/jdk/test/sun/security/tools/policytool/OpenPolicy.sh index 325b817c3d2..ada838ebda9 100644 --- a/jdk/test/sun/security/tools/policytool/OpenPolicy.sh +++ b/jdk/test/sun/security/tools/policytool/OpenPolicy.sh @@ -46,7 +46,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/sun/security/tools/policytool/SaveAs.sh b/jdk/test/sun/security/tools/policytool/SaveAs.sh index af18ad96c21..1c16ecb426c 100644 --- a/jdk/test/sun/security/tools/policytool/SaveAs.sh +++ b/jdk/test/sun/security/tools/policytool/SaveAs.sh @@ -47,7 +47,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/sun/security/tools/policytool/UpdatePermissions.sh b/jdk/test/sun/security/tools/policytool/UpdatePermissions.sh index 05978a38b57..70992074e2b 100644 --- a/jdk/test/sun/security/tools/policytool/UpdatePermissions.sh +++ b/jdk/test/sun/security/tools/policytool/UpdatePermissions.sh @@ -47,7 +47,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/sun/security/tools/policytool/UsePolicy.sh b/jdk/test/sun/security/tools/policytool/UsePolicy.sh index c8412389a3b..a1e3d34c6c4 100644 --- a/jdk/test/sun/security/tools/policytool/UsePolicy.sh +++ b/jdk/test/sun/security/tools/policytool/UsePolicy.sh @@ -46,7 +46,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/sun/security/tools/policytool/i18n.sh b/jdk/test/sun/security/tools/policytool/i18n.sh index 58b59e060b2..18ce68dda28 100644 --- a/jdk/test/sun/security/tools/policytool/i18n.sh +++ b/jdk/test/sun/security/tools/policytool/i18n.sh @@ -49,7 +49,7 @@ fi # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) NULL=/dev/null PS=":" FS="/" diff --git a/jdk/test/sun/tools/common/CommonSetup.sh b/jdk/test/sun/tools/common/CommonSetup.sh index db58377a668..f4401a7f6f2 100644 --- a/jdk/test/sun/tools/common/CommonSetup.sh +++ b/jdk/test/sun/tools/common/CommonSetup.sh @@ -48,6 +48,7 @@ # isSolaris - true if OS is Solaris # isWindows - true if OS is Windows # isMacos - true if OS is Macos X +# isAIX - true if OS is AIX if [ -z "${TESTJAVA}" ]; then @@ -83,6 +84,7 @@ isSolaris=false isUnknownOS=false isWindows=false isMacos=false +isAIX=false OS=`uname -s` @@ -113,6 +115,10 @@ case "$OS" in OS="Solaris" isSolaris=true ;; + AIX ) + OS="AIX" + isAIX=true + ;; Windows* ) OS="Windows" PATTERN_EOL='[ ]*$' diff --git a/jdk/test/sun/tools/jconsole/ResourceCheckTest.sh b/jdk/test/sun/tools/jconsole/ResourceCheckTest.sh index 01c2e4b6f01..b82b3ac387c 100644 --- a/jdk/test/sun/tools/jconsole/ResourceCheckTest.sh +++ b/jdk/test/sun/tools/jconsole/ResourceCheckTest.sh @@ -54,7 +54,7 @@ pass() OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin) + SunOS | Linux | Darwin | AIX) PATHSEP=":" ;; diff --git a/jdk/test/sun/tools/jinfo/Basic.sh b/jdk/test/sun/tools/jinfo/Basic.sh index e12bbb3ce33..5905c83d009 100644 --- a/jdk/test/sun/tools/jinfo/Basic.sh +++ b/jdk/test/sun/tools/jinfo/Basic.sh @@ -45,7 +45,7 @@ failed=0 runSA=true -if [ $isMacos = true ]; then +if [ $isMacos = true -o $isAIX = true -o `uname -m` = ppc64 ]; then runSA=false fi diff --git a/jdk/test/sun/tools/jstat/classOutput1.awk b/jdk/test/sun/tools/jstat/classOutput1.awk index d31118bf0ec..6213899e72b 100644 --- a/jdk/test/sun/tools/jstat/classOutput1.awk +++ b/jdk/test/sun/tools/jstat/classOutput1.awk @@ -21,7 +21,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 1) && (totallines == 2)) { + if ((headerlines == 1) && (datalines == 1)) { exit 0 } else { diff --git a/jdk/test/sun/tools/jstat/classloadOutput1.awk b/jdk/test/sun/tools/jstat/classloadOutput1.awk index 66e2b5dcd18..0a3d1e945b5 100644 --- a/jdk/test/sun/tools/jstat/classloadOutput1.awk +++ b/jdk/test/sun/tools/jstat/classloadOutput1.awk @@ -22,7 +22,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 1) && (totallines == 2)) { + if ((headerlines == 1) && (datalines == 1)) { exit 0 } else { diff --git a/jdk/test/sun/tools/jstat/compilerOutput1.awk b/jdk/test/sun/tools/jstat/compilerOutput1.awk index 4a9f89e9fde..09b920ab0e4 100644 --- a/jdk/test/sun/tools/jstat/compilerOutput1.awk +++ b/jdk/test/sun/tools/jstat/compilerOutput1.awk @@ -30,7 +30,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 1) && (totallines == 2)) { + if ((headerlines == 1) && (datalines == 1)) { exit 0 } else { diff --git a/jdk/test/sun/tools/jstat/fileURITest1.awk b/jdk/test/sun/tools/jstat/fileURITest1.awk index 51e31846501..8b56e89ca31 100644 --- a/jdk/test/sun/tools/jstat/fileURITest1.awk +++ b/jdk/test/sun/tools/jstat/fileURITest1.awk @@ -21,7 +21,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 1) && (totallines == 2)) { + if ((headerlines == 1) && (datalines == 1)) { exit 0 } else { diff --git a/jdk/test/sun/tools/jstat/gcCapacityOutput1.awk b/jdk/test/sun/tools/jstat/gcCapacityOutput1.awk index ab630d143b6..ec7a737d55c 100644 --- a/jdk/test/sun/tools/jstat/gcCapacityOutput1.awk +++ b/jdk/test/sun/tools/jstat/gcCapacityOutput1.awk @@ -22,7 +22,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 1) && (totallines == 2)) { + if ((headerlines == 1) && (datalines == 1)) { exit 0 } else { diff --git a/jdk/test/sun/tools/jstat/gcCauseOutput1.awk b/jdk/test/sun/tools/jstat/gcCauseOutput1.awk index 3041291ac3d..005e791043a 100644 --- a/jdk/test/sun/tools/jstat/gcCauseOutput1.awk +++ b/jdk/test/sun/tools/jstat/gcCauseOutput1.awk @@ -30,7 +30,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 1) && (totallines == 2)) { + if ((headerlines == 1) && (datalines == 1)) { exit 0 } else { diff --git a/jdk/test/sun/tools/jstat/gcMetaCapacityOutput1.awk b/jdk/test/sun/tools/jstat/gcMetaCapacityOutput1.awk index 12d9544542a..352e02d6cbc 100644 --- a/jdk/test/sun/tools/jstat/gcMetaCapacityOutput1.awk +++ b/jdk/test/sun/tools/jstat/gcMetaCapacityOutput1.awk @@ -21,7 +21,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 1) && (totallines == 2)) { + if ((headerlines == 1) && (datalines == 1)) { exit 0 } else { diff --git a/jdk/test/sun/tools/jstat/gcNewCapacityOutput1.awk b/jdk/test/sun/tools/jstat/gcNewCapacityOutput1.awk index 0491fa52076..f4473dc37e4 100644 --- a/jdk/test/sun/tools/jstat/gcNewCapacityOutput1.awk +++ b/jdk/test/sun/tools/jstat/gcNewCapacityOutput1.awk @@ -22,7 +22,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 1) && (totallines == 2)) { + if ((headerlines == 1) && (datalines == 1)) { exit 0 } else { diff --git a/jdk/test/sun/tools/jstat/gcOldCapacityOutput1.awk b/jdk/test/sun/tools/jstat/gcOldCapacityOutput1.awk index 7fb4575163a..cbf88756060 100644 --- a/jdk/test/sun/tools/jstat/gcOldCapacityOutput1.awk +++ b/jdk/test/sun/tools/jstat/gcOldCapacityOutput1.awk @@ -21,7 +21,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 1) && (totallines == 2)) { + if ((headerlines == 1) && (datalines == 1)) { exit 0 } else { diff --git a/jdk/test/sun/tools/jstat/gcOldOutput1.awk b/jdk/test/sun/tools/jstat/gcOldOutput1.awk index c007f66b3be..319f707d273 100644 --- a/jdk/test/sun/tools/jstat/gcOldOutput1.awk +++ b/jdk/test/sun/tools/jstat/gcOldOutput1.awk @@ -22,7 +22,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 1) && (totallines == 2)) { + if ((headerlines == 1) && (datalines == 1)) { exit 0 } else { diff --git a/jdk/test/sun/tools/jstat/gcOutput1.awk b/jdk/test/sun/tools/jstat/gcOutput1.awk index d1d90a281e2..5bd59fe0d8e 100644 --- a/jdk/test/sun/tools/jstat/gcOutput1.awk +++ b/jdk/test/sun/tools/jstat/gcOutput1.awk @@ -22,7 +22,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 1) && (totallines == 2)) { + if ((headerlines == 1) && (datalines == 1)) { exit 0 } else { diff --git a/jdk/test/sun/tools/jstat/lineCounts1.awk b/jdk/test/sun/tools/jstat/lineCounts1.awk index dd6d5f8fbf5..cc974104b99 100644 --- a/jdk/test/sun/tools/jstat/lineCounts1.awk +++ b/jdk/test/sun/tools/jstat/lineCounts1.awk @@ -25,7 +25,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 5) && (totallines == 6)) { + if ((headerlines == 1) && (datalines == 5)) { exit 0 } else { diff --git a/jdk/test/sun/tools/jstat/lineCounts2.awk b/jdk/test/sun/tools/jstat/lineCounts2.awk index adecd0a0572..ac2009d2e0b 100644 --- a/jdk/test/sun/tools/jstat/lineCounts2.awk +++ b/jdk/test/sun/tools/jstat/lineCounts2.awk @@ -21,7 +21,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 1) && (totallines == 2)) { + if ((headerlines == 1) && (datalines == 1)) { exit 0 } else { diff --git a/jdk/test/sun/tools/jstat/lineCounts3.awk b/jdk/test/sun/tools/jstat/lineCounts3.awk index 24788b429e0..9b6d3ecec59 100644 --- a/jdk/test/sun/tools/jstat/lineCounts3.awk +++ b/jdk/test/sun/tools/jstat/lineCounts3.awk @@ -30,7 +30,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 10) && (totallines == 11)) { + if ((headerlines == 1) && (datalines == 10)) { exit 0 } else { exit 1 diff --git a/jdk/test/sun/tools/jstat/lineCounts4.awk b/jdk/test/sun/tools/jstat/lineCounts4.awk index c4ea918fdd2..db40ad355c6 100644 --- a/jdk/test/sun/tools/jstat/lineCounts4.awk +++ b/jdk/test/sun/tools/jstat/lineCounts4.awk @@ -36,7 +36,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 2) && (datalines == 11) && (totallines == 13) && (datalines2 == 1)) { + if ((headerlines == 2) && (datalines == 11) && (datalines2 == 1)) { exit 0 } else { exit 1 diff --git a/jdk/test/sun/tools/jstat/printCompilationOutput1.awk b/jdk/test/sun/tools/jstat/printCompilationOutput1.awk index f2e26213975..d165e4d997e 100644 --- a/jdk/test/sun/tools/jstat/printCompilationOutput1.awk +++ b/jdk/test/sun/tools/jstat/printCompilationOutput1.awk @@ -25,7 +25,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 1) && (totallines == 2)) { + if ((headerlines == 1) && (datalines == 1)) { exit 0 } else { diff --git a/jdk/test/sun/tools/jstat/timeStamp1.awk b/jdk/test/sun/tools/jstat/timeStamp1.awk index cce381ce41d..908f4230419 100644 --- a/jdk/test/sun/tools/jstat/timeStamp1.awk +++ b/jdk/test/sun/tools/jstat/timeStamp1.awk @@ -21,7 +21,7 @@ BEGIN { { totallines++; print $0 } END { - if ((headerlines == 1) && (datalines == 1) && (totallines == 2)) { + if ((headerlines == 1) && (datalines == 1)) { exit 0 } else { diff --git a/jdk/test/sun/tools/native2ascii/resources/ImmutableResourceTest.sh b/jdk/test/sun/tools/native2ascii/resources/ImmutableResourceTest.sh index fa312adad74..29c72ed6254 100644 --- a/jdk/test/sun/tools/native2ascii/resources/ImmutableResourceTest.sh +++ b/jdk/test/sun/tools/native2ascii/resources/ImmutableResourceTest.sh @@ -56,7 +56,7 @@ pass() OS=`uname -s` case "$OS" in - SunOS | Linux | Darwin ) + SunOS | Linux | Darwin | AIX ) PATHSEP=":" ;; diff --git a/jdk/test/sun/util/calendar/zi/tzdata/VERSION b/jdk/test/sun/util/calendar/zi/tzdata/VERSION index 1d7698924aa..2f162e0638a 100644 --- a/jdk/test/sun/util/calendar/zi/tzdata/VERSION +++ b/jdk/test/sun/util/calendar/zi/tzdata/VERSION @@ -21,4 +21,4 @@ # or visit www.oracle.com if you need additional information or have any # questions. # -tzdata2013h +tzdata2013i diff --git a/jdk/test/sun/util/calendar/zi/tzdata/africa b/jdk/test/sun/util/calendar/zi/tzdata/africa index 0eed8b1a26a..82d14a4a14d 100644 --- a/jdk/test/sun/util/calendar/zi/tzdata/africa +++ b/jdk/test/sun/util/calendar/zi/tzdata/africa @@ -500,14 +500,13 @@ Rule Libya 1997 only - Apr 4 0:00 1:00 S Rule Libya 1997 only - Oct 4 0:00 0 - Rule Libya 2013 only - Mar lastFri 1:00 1:00 S Rule Libya 2013 only - Oct lastFri 2:00 0 - - -# The 1996 and 1997 entries are from Shanks & Pottenger; -# the IATA SSIM data contain some obvious errors. # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Africa/Tripoli 0:52:44 - LMT 1920 1:00 Libya CE%sT 1959 2:00 - EET 1982 1:00 Libya CE%sT 1990 May 4 +# The 1996 and 1997 entries are from Shanks & Pottenger; +# the IATA SSIM data contain some obvious errors. 2:00 - EET 1996 Sep 30 1:00 Libya CE%sT 1997 Oct 4 2:00 - EET 2012 Nov 10 2:00 diff --git a/jdk/test/sun/util/calendar/zi/tzdata/asia b/jdk/test/sun/util/calendar/zi/tzdata/asia index fd278e5c8a8..1a8f83d3a64 100644 --- a/jdk/test/sun/util/calendar/zi/tzdata/asia +++ b/jdk/test/sun/util/calendar/zi/tzdata/asia @@ -1403,12 +1403,22 @@ Zone Asia/Tokyo 9:18:59 - LMT 1887 Dec 31 15:00u # switch back to standard time this winter, so the will stay on DST # until about the same time next year (at least). # http://www.petra.gov.jo/Public_News/Nws_NewsDetails.aspx?NewsID=88950 -# -# From Paul Eggert (2013-09-21): -# It's looking like this change will be permanent; see -# Petra News Agency, Cancelling winter saved Jordan $7 million (2013-02-20) -# . -# So move Jordan to UTC+3 as of the abovementioned date. + +# From Steffen Thorsen (2013-12-11): +# Jordan Times and other sources say that Jordan is going back to +# UTC+2 on 2013-12-19 at midnight: +# http://jordantimes.com/govt-decides-to-switch-back-to-wintertime +# Official, in Arabic: +# http://www.petra.gov.jo/public_news/Nws_NewsDetails.aspx?Menu_ID=&Site_Id=2&lang=1&NewsID=133230&CatID=14 +# ... Our background/permalink about it +# http://www.timeanddate.com/news/time/jordan-reverses-dst-decision.html +# ... +# http://www.petra.gov.jo/Public_News/Nws_NewsDetails.aspx?lang=2&site_id=1&NewsID=133313&Type=P +# ... says midnight for the coming one and 1:00 for the ones in the future +# (and they will use DST again next year, using the normal schedule). + +# From Paul Eggert (2013-12-11): +# As Steffen suggested, consider the past 21-month experiment to be DST. # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Jordan 1973 only - Jun 6 0:00 1:00 S @@ -1438,11 +1448,13 @@ Rule Jordan 2002 2012 - Mar lastThu 24:00 1:00 S Rule Jordan 2003 only - Oct 24 0:00s 0 - Rule Jordan 2004 only - Oct 15 0:00s 0 - Rule Jordan 2005 only - Sep lastFri 0:00s 0 - -Rule Jordan 2006 2012 - Oct lastFri 0:00s 0 - +Rule Jordan 2006 2011 - Oct lastFri 0:00s 0 - +Rule Jordan 2013 only - Dec 20 0:00 0 - +Rule Jordan 2014 max - Mar lastThu 24:00 1:00 S +Rule Jordan 2014 max - Oct lastFri 0:00s 0 - # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Asia/Amman 2:23:44 - LMT 1931 - 2:00 Jordan EE%sT 2012 Oct 26 0:00s - 3:00 - AST + 2:00 Jordan EE%sT # Kazakhstan diff --git a/jdk/test/sun/util/calendar/zi/tzdata/northamerica b/jdk/test/sun/util/calendar/zi/tzdata/northamerica index b8caf6d019b..9e551bb1c46 100644 --- a/jdk/test/sun/util/calendar/zi/tzdata/northamerica +++ b/jdk/test/sun/util/calendar/zi/tzdata/northamerica @@ -2688,6 +2688,11 @@ Zone America/Costa_Rica -5:36:13 - LMT 1890 # San Jose # to DST--and one more hour on 1999-04-04--when the announcers will have # returned to Baltimore, which switches on that date.) +# From Steffen Thorsen (2013-11-11): +# DST start in Cuba in 2004 ... does not follow the same rules as the +# years before. The correct date should be Sunday 2004-03-28 00:00 ... +# https://web.archive.org/web/20040402060750/http://www.granma.cu/espanol/2004/marzo/sab27/reloj.html + # From Evert van der Veer via Steffen Thorsen (2004-10-28): # Cuba is not going back to standard time this year. # From Paul Eggert (2006-03-22): @@ -2877,7 +2882,8 @@ Rule Cuba 1996 only - Oct 6 0:00s 0 S Rule Cuba 1997 only - Oct 12 0:00s 0 S Rule Cuba 1998 1999 - Mar lastSun 0:00s 1:00 D Rule Cuba 1998 2003 - Oct lastSun 0:00s 0 S -Rule Cuba 2000 2004 - Apr Sun>=1 0:00s 1:00 D +Rule Cuba 2000 2003 - Apr Sun>=1 0:00s 1:00 D +Rule Cuba 2004 only - Mar lastSun 0:00s 1:00 D Rule Cuba 2006 2010 - Oct lastSun 0:00s 0 S Rule Cuba 2007 only - Mar Sun>=8 0:00s 1:00 D Rule Cuba 2008 only - Mar Sun>=15 0:00s 1:00 D diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames.properties deleted file mode 100644 index 594231f2ef3..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames.properties +++ /dev/null @@ -1,651 +0,0 @@ -ACT.daylight.long=Central Summer Time (Northern Territory) -ACT.generic.long=Central Time (Northern Territory) -ACT.standard.long=Central Standard Time (Northern Territory) -AET.daylight.long=Eastern Summer Time (New South Wales) -AET.generic.long=Eastern Time (New South Wales) -AET.standard.long=Eastern Standard Time (New South Wales) -AGT.generic.long=Argentine Time -ART.generic.long=Eastern European Time -AST.generic.long=Alaska Time -Africa/Abidjan.generic.long=Greenwich Mean Time -Africa/Accra.generic.long=Ghana Mean Time -Africa/Addis_Ababa.generic.long=Eastern Africa Time -Africa/Algiers.generic.long=Central European Time -Africa/Asmara.generic.long=Eastern Africa Time -Africa/Asmera.generic.long=Eastern Africa Time -Africa/Bamako.generic.long=Greenwich Mean Time -Africa/Bangui.generic.long=Western African Time -Africa/Banjul.generic.long=Greenwich Mean Time -Africa/Bissau.generic.long=Greenwich Mean Time -Africa/Blantyre.generic.long=Central Africa Time -Africa/Brazzaville.generic.long=Western African Time -Africa/Bujumbura.generic.long=Central Africa Time -Africa/Cairo.generic.long=Eastern European Time -Africa/Casablanca.generic.long=Western European Time -Africa/Ceuta.generic.long=Central European Time -Africa/Conakry.generic.long=Greenwich Mean Time -Africa/Dakar.generic.long=Greenwich Mean Time -Africa/Dar_es_Salaam.generic.long=Eastern Africa Time -Africa/Djibouti.generic.long=Eastern Africa Time -Africa/Douala.generic.long=Western African Time -Africa/El_Aaiun.generic.long=Western European Time -Africa/Freetown.generic.long=Sierra Leone Time -Africa/Gaborone.generic.long=Central Africa Time -Africa/Harare.generic.long=Central Africa Time -Africa/Johannesburg.generic.long=South Africa Time -Africa/Juba.generic.long=Eastern Africa Time -Africa/Kampala.generic.long=Eastern Africa Time -Africa/Khartoum.generic.long=Eastern Africa Time -Africa/Kigali.generic.long=Central Africa Time -Africa/Kinshasa.generic.long=Western African Time -Africa/Lagos.generic.long=Western African Time -Africa/Libreville.generic.long=Western African Time -Africa/Lome.generic.long=Greenwich Mean Time -Africa/Luanda.generic.long=Western African Time -Africa/Lubumbashi.generic.long=Central Africa Time -Africa/Lusaka.generic.long=Central Africa Time -Africa/Malabo.generic.long=Western African Time -Africa/Maputo.generic.long=Central Africa Time -Africa/Maseru.generic.long=South Africa Time -Africa/Mbabane.generic.long=South Africa Time -Africa/Mogadishu.generic.long=Eastern Africa Time -Africa/Monrovia.generic.long=Greenwich Mean Time -Africa/Nairobi.generic.long=Eastern Africa Time -Africa/Ndjamena.generic.long=Western African Time -Africa/Niamey.generic.long=Western African Time -Africa/Nouakchott.generic.long=Greenwich Mean Time -Africa/Ouagadougou.generic.long=Greenwich Mean Time -Africa/Porto-Novo.generic.long=Western African Time -Africa/Sao_Tome.generic.long=Greenwich Mean Time -Africa/Timbuktu.generic.long=Greenwich Mean Time -Africa/Tripoli.generic.long=Eastern European Time -Africa/Tunis.generic.long=Central European Time -Africa/Windhoek.generic.long=Western African Time -America/Adak.generic.long=Hawaii-Aleutian Time -America/Anchorage.generic.long=Alaska Time -America/Anguilla.generic.long=Atlantic Time -America/Antigua.generic.long=Atlantic Time -America/Araguaina.generic.long=Brasilia Time -America/Argentina/Buenos_Aires.generic.long=Argentine Time -America/Argentina/Catamarca.generic.long=Argentine Time -America/Argentina/ComodRivadavia.generic.long=Argentine Time -America/Argentina/Cordoba.generic.long=Argentine Time -America/Argentina/Jujuy.generic.long=Argentine Time -America/Argentina/La_Rioja.generic.long=Argentine Time -America/Argentina/Mendoza.generic.long=Argentine Time -America/Argentina/Rio_Gallegos.generic.long=Argentine Time -America/Argentina/Salta.generic.long=Argentine Time -America/Argentina/San_Juan.generic.long=Argentine Time -America/Argentina/San_Luis.generic.long=Argentine Time -America/Argentina/Tucuman.generic.long=Argentine Time -America/Argentina/Ushuaia.generic.long=Argentine Time -America/Aruba.generic.long=Atlantic Time -America/Asuncion.generic.long=Paraguay Time -America/Atikokan.generic.long=Eastern Time -America/Atka.generic.long=Hawaii-Aleutian Time -America/Bahia.generic.long=Brasilia Time -America/Bahia_Banderas.generic.long=Central Time -America/Barbados.generic.long=Atlantic Time -America/Belem.generic.long=Brasilia Time -America/Belize.generic.long=Central Time -America/Blanc-Sablon.generic.long=Atlantic Time -America/Boa_Vista.generic.long=Amazon Time -America/Bogota.generic.long=Colombia Time -America/Boise.generic.long=Mountain Time -America/Buenos_Aires.generic.long=Argentine Time -America/Cambridge_Bay.generic.long=Mountain Time -America/Campo_Grande.generic.long=Amazon Time -America/Cancun.generic.long=Central Time -America/Caracas.generic.long=Venezuela Time -America/Catamarca.generic.long=Argentine Time -America/Cayenne.generic.long=French Guiana Time -America/Cayman.generic.long=Eastern Time -America/Chicago.generic.long=Central Time -America/Chihuahua.generic.long=Mountain Time -America/Coral_Harbour.generic.long=Eastern Time -America/Cordoba.generic.long=Argentine Time -America/Costa_Rica.generic.long=Central Time -America/Creston.generic.long=Mountain Time -America/Cuiaba.generic.long=Amazon Time -America/Curacao.generic.long=Atlantic Time -America/Danmarkshavn.generic.long=Greenwich Mean Time -America/Dawson.generic.long=Pacific Time -America/Dawson_Creek.generic.long=Mountain Time -America/Denver.generic.long=Mountain Time -America/Detroit.generic.long=Eastern Time -America/Dominica.generic.long=Atlantic Time -America/Edmonton.generic.long=Mountain Time -America/Eirunepe.generic.long=Acre Time -America/El_Salvador.generic.long=Central Time -America/Ensenada.generic.long=Pacific Time -America/Fort_Wayne.generic.long=Eastern Time -America/Fortaleza.generic.long=Brasilia Time -America/Glace_Bay.generic.long=Atlantic Time -America/Godthab.generic.long=Western Greenland Time -America/Goose_Bay.generic.long=Atlantic Time -America/Grand_Turk.generic.long=Eastern Time -America/Grenada.generic.long=Atlantic Time -America/Guadeloupe.generic.long=Atlantic Time -America/Guatemala.generic.long=Central Time -America/Guayaquil.generic.long=Ecuador Time -America/Guyana.generic.long=Guyana Time -America/Halifax.generic.long=Atlantic Time -America/Havana.generic.long=Cuba Time -America/Hermosillo.generic.long=Mountain Time -America/Indiana/Indianapolis.generic.long=Eastern Time -America/Indiana/Knox.generic.long=Central Time -America/Indiana/Marengo.generic.long=Eastern Time -America/Indiana/Petersburg.generic.long=Eastern Time -America/Indiana/Tell_City.generic.long=Central Time -America/Indiana/Vevay.generic.long=Eastern Time -America/Indiana/Vincennes.generic.long=Eastern Time -America/Indiana/Winamac.generic.long=Eastern Time -America/Indianapolis.generic.long=Eastern Time -America/Inuvik.generic.long=Mountain Time -America/Iqaluit.generic.long=Eastern Time -America/Jamaica.generic.long=Eastern Time -America/Jujuy.generic.long=Argentine Time -America/Juneau.generic.long=Alaska Time -America/Kentucky/Louisville.generic.long=Eastern Time -America/Kentucky/Monticello.generic.long=Eastern Time -America/Knox_IN.generic.long=Central Time -America/Kralendijk.generic.long=Atlantic Time -America/La_Paz.generic.long=Bolivia Time -America/Lima.generic.long=Peru Time -America/Los_Angeles.generic.long=Pacific Time -America/Louisville.generic.long=Eastern Time -America/Lower_Princes.generic.long=Atlantic Time -America/Maceio.generic.long=Brasilia Time -America/Managua.generic.long=Central Time -America/Manaus.generic.long=Amazon Time -America/Marigot.generic.long=Atlantic Time -America/Martinique.generic.long=Atlantic Time -America/Matamoros.generic.long=Central Time -America/Mazatlan.generic.long=Mountain Time -America/Mendoza.generic.long=Argentine Time -America/Menominee.generic.long=Central Time -America/Merida.generic.long=Central Time -America/Metlakatla.daylight.long=Metlakatla Daylight Time -America/Metlakatla.generic.long=Metlakatla Time -America/Metlakatla.standard.long=Metlakatla Standard Time -America/Mexico_City.generic.long=Central Time -America/Miquelon.generic.long=Pierre & Miquelon Time -America/Moncton.generic.long=Atlantic Time -America/Monterrey.generic.long=Central Time -America/Montevideo.generic.long=Uruguay Time -America/Montreal.generic.long=Eastern Time -America/Montserrat.generic.long=Atlantic Time -America/Nassau.generic.long=Eastern Time -America/New_York.generic.long=Eastern Time -America/Nipigon.generic.long=Eastern Time -America/Nome.generic.long=Alaska Time -America/Noronha.generic.long=Fernando de Noronha Time -America/North_Dakota/Beulah.generic.long=Central Time -America/North_Dakota/Center.generic.long=Central Time -America/North_Dakota/New_Salem.generic.long=Central Time -America/Ojinaga.generic.long=Mountain Time -America/Panama.generic.long=Eastern Time -America/Pangnirtung.generic.long=Eastern Time -America/Paramaribo.generic.long=Suriname Time -America/Phoenix.generic.long=Mountain Time -America/Port-au-Prince.generic.long=Eastern Time -America/Port_of_Spain.generic.long=Atlantic Time -America/Porto_Acre.generic.long=Acre Time -America/Porto_Velho.generic.long=Amazon Time -America/Puerto_Rico.generic.long=Atlantic Time -America/Rainy_River.generic.long=Central Time -America/Rankin_Inlet.generic.long=Central Time -America/Recife.generic.long=Brasilia Time -America/Regina.generic.long=Central Time -America/Resolute.generic.long=Central Time -America/Rio_Branco.generic.long=Acre Time -America/Rosario.generic.long=Argentine Time -America/Santa_Isabel.generic.long=Pacific Time -America/Santarem.generic.long=Brasilia Time -America/Santiago.generic.long=Chile Time -America/Santo_Domingo.generic.long=Atlantic Time -America/Sao_Paulo.generic.long=Brasilia Time -America/Scoresbysund.generic.long=Eastern Greenland Time -America/Shiprock.generic.long=Mountain Time -America/Sitka.generic.long=Alaska Time -America/St_Barthelemy.generic.long=Atlantic Time -America/St_Johns.generic.long=Newfoundland Time -America/St_Kitts.generic.long=Atlantic Time -America/St_Lucia.generic.long=Atlantic Time -America/St_Thomas.generic.long=Atlantic Time -America/St_Vincent.generic.long=Atlantic Time -America/Swift_Current.generic.long=Central Time -America/Tegucigalpa.generic.long=Central Time -America/Thule.generic.long=Atlantic Time -America/Thunder_Bay.generic.long=Eastern Time -America/Tijuana.generic.long=Pacific Time -America/Toronto.generic.long=Eastern Time -America/Tortola.generic.long=Atlantic Time -America/Vancouver.generic.long=Pacific Time -America/Virgin.generic.long=Atlantic Time -America/Whitehorse.generic.long=Pacific Time -America/Winnipeg.generic.long=Central Time -America/Yakutat.generic.long=Alaska Time -America/Yellowknife.generic.long=Mountain Time -Antarctica/Casey.daylight.long=Western Summer Time (Australia) -Antarctica/Casey.generic.long=Western Time (Australia) -Antarctica/Casey.standard.long=Western Standard Time (Australia) -Antarctica/Davis.generic.long=Davis Time -Antarctica/DumontDUrville.generic.long=Dumont-d'Urville Time -Antarctica/Macquarie.daylight.long=Macquarie Island Summer Time -Antarctica/Macquarie.generic.long=Macquarie Island Time -Antarctica/Macquarie.standard.long=Macquarie Island Time -Antarctica/Mawson.generic.long=Mawson Time -Antarctica/McMurdo.generic.long=New Zealand Time -Antarctica/Palmer.generic.long=Chile Time -Antarctica/Rothera.generic.long=Rothera Time -Antarctica/South_Pole.generic.long=New Zealand Time -Antarctica/Syowa.generic.long=Syowa Time -Antarctica/Vostok.generic.long=Vostok Time -Arctic/Longyearbyen.generic.long=Central European Time -Asia/Aden.generic.long=Arabia Time -Asia/Almaty.generic.long=Alma-Ata Time -Asia/Amman.generic.long=Arabia Time -Asia/Anadyr.generic.long=Anadyr Time -Asia/Aqtau.generic.long=Aqtau Time -Asia/Aqtobe.generic.long=Aqtobe Time -Asia/Ashgabat.generic.long=Turkmenistan Time -Asia/Ashkhabad.generic.long=Turkmenistan Time -Asia/Baghdad.generic.long=Arabia Time -Asia/Bahrain.generic.long=Arabia Time -Asia/Baku.generic.long=Azerbaijan Time -Asia/Bangkok.generic.long=Indochina Time -Asia/Beirut.generic.long=Eastern European Time -Asia/Bishkek.generic.long=Kirgizstan Time -Asia/Brunei.generic.long=Brunei Time -Asia/Calcutta.generic.long=India Time -Asia/Choibalsan.generic.long=Choibalsan Time -Asia/Chongqing.generic.long=China Time -Asia/Chungking.generic.long=China Time -Asia/Colombo.generic.long=India Time -Asia/Dacca.generic.long=Bangladesh Time -Asia/Damascus.generic.long=Eastern European Time -Asia/Dhaka.generic.long=Bangladesh Time -Asia/Dili.generic.long=Timor-Leste Time -Asia/Dubai.generic.long=Gulf Time -Asia/Dushanbe.generic.long=Tajikistan Time -Asia/Gaza.generic.long=Eastern European Time -Asia/Harbin.generic.long=China Time -Asia/Hebron.generic.long=Eastern European Time -Asia/Ho_Chi_Minh.generic.long=Indochina Time -Asia/Hong_Kong.generic.long=Hong Kong Time -Asia/Hovd.generic.long=Hovd Time -Asia/Irkutsk.generic.long=Irkutsk Time -Asia/Istanbul.generic.long=Eastern European Time -Asia/Jakarta.generic.long=West Indonesia Time -Asia/Jayapura.generic.long=East Indonesia Time -Asia/Jerusalem.generic.long=Israel Time -Asia/Kabul.generic.long=Afghanistan Time -Asia/Kamchatka.generic.long=Petropavlovsk-Kamchatski Time -Asia/Karachi.generic.long=Pakistan Time -Asia/Kashgar.generic.long=China Time -Asia/Kathmandu.generic.long=Nepal Time -Asia/Katmandu.generic.long=Nepal Time -Asia/Khandyga.daylight.long=Khandyga Summer Time -Asia/Khandyga.generic.long=Khandyga Time -Asia/Khandyga.standard.long=Khandyga Time -Asia/Kolkata.generic.long=India Time -Asia/Krasnoyarsk.generic.long=Krasnoyarsk Time -Asia/Kuala_Lumpur.generic.long=Malaysia Time -Asia/Kuching.generic.long=Malaysia Time -Asia/Kuwait.generic.long=Arabia Time -Asia/Macao.generic.long=China Time -Asia/Macau.generic.long=China Time -Asia/Magadan.generic.long=Magadan Time -Asia/Makassar.generic.long=Central Indonesia Time -Asia/Manila.generic.long=Philippines Time -Asia/Muscat.generic.long=Gulf Time -Asia/Nicosia.generic.long=Eastern European Time -Asia/Novokuznetsk.generic.long=Novosibirsk Time -Asia/Novosibirsk.generic.long=Novosibirsk Time -Asia/Omsk.generic.long=Omsk Time -Asia/Oral.generic.long=Oral Time -Asia/Phnom_Penh.generic.long=Indochina Time -Asia/Pontianak.generic.long=West Indonesia Time -Asia/Pyongyang.generic.long=Korea Time -Asia/Qatar.generic.long=Arabia Time -Asia/Qyzylorda.generic.long=Qyzylorda Time -Asia/Rangoon.generic.long=Myanmar Time -Asia/Saigon.generic.long=Indochina Time -Asia/Sakhalin.generic.long=Sakhalin Time -Asia/Samarkand.generic.long=Uzbekistan Time -Asia/Seoul.generic.long=Korea Time -Asia/Shanghai.generic.long=China Time -Asia/Singapore.generic.long=Singapore Time -Asia/Taipei.generic.long=China Time -Asia/Tashkent.generic.long=Uzbekistan Time -Asia/Tbilisi.generic.long=Georgia Time -Asia/Tehran.generic.long=Iran Time -Asia/Tel_Aviv.generic.long=Israel Time -Asia/Thimbu.generic.long=Bhutan Time -Asia/Thimphu.generic.long=Bhutan Time -Asia/Tokyo.generic.long=Japan Time -Asia/Ujung_Pandang.generic.long=Central Indonesia Time -Asia/Ulaanbaatar.generic.long=Ulaanbaatar Time -Asia/Ulan_Bator.generic.long=Ulaanbaatar Time -Asia/Urumqi.generic.long=China Time -Asia/Ust-Nera.daylight.long=Ust-Nera Summer Time -Asia/Ust-Nera.generic.long=Ust-Nera Time -Asia/Ust-Nera.standard.long=Ust-Nera Time -Asia/Vientiane.generic.long=Indochina Time -Asia/Vladivostok.generic.long=Vladivostok Time -Asia/Yakutsk.generic.long=Yakutsk Time -Asia/Yekaterinburg.generic.long=Yekaterinburg Time -Asia/Yerevan.generic.long=Armenia Time -Atlantic/Azores.generic.long=Azores Time -Atlantic/Bermuda.generic.long=Atlantic Time -Atlantic/Canary.generic.long=Western European Time -Atlantic/Cape_Verde.generic.long=Cape Verde Time -Atlantic/Faeroe.generic.long=Western European Time -Atlantic/Faroe.generic.long=Western European Time -Atlantic/Jan_Mayen.generic.long=Central European Time -Atlantic/Madeira.generic.long=Western European Time -Atlantic/Reykjavik.generic.long=Greenwich Mean Time -Atlantic/South_Georgia.generic.long=South Georgia Time -Atlantic/St_Helena.generic.long=Greenwich Mean Time -Atlantic/Stanley.generic.long=Falkland Is. Time -Australia/ACT.daylight.long=Eastern Summer Time (New South Wales) -Australia/ACT.generic.long=Eastern Time (New South Wales) -Australia/ACT.standard.long=Eastern Standard Time (New South Wales) -Australia/Adelaide.daylight.long=Central Summer Time (South Australia) -Australia/Adelaide.generic.long=Central Time (South Australia) -Australia/Adelaide.standard.long=Central Standard Time (South Australia) -Australia/Brisbane.daylight.long=Eastern Summer Time (Queensland) -Australia/Brisbane.generic.long=Eastern Time (Queensland) -Australia/Brisbane.standard.long=Eastern Standard Time (Queensland) -Australia/Broken_Hill.daylight.long=Central Summer Time (South Australia/New South Wales) -Australia/Broken_Hill.generic.long=Central Time (South Australia/New South Wales) -Australia/Broken_Hill.standard.long=Central Standard Time (South Australia/New South Wales) -Australia/Canberra.daylight.long=Eastern Summer Time (New South Wales) -Australia/Canberra.generic.long=Eastern Time (New South Wales) -Australia/Canberra.standard.long=Eastern Standard Time (New South Wales) -Australia/Currie.daylight.long=Eastern Summer Time (New South Wales) -Australia/Currie.generic.long=Eastern Time (New South Wales) -Australia/Currie.standard.long=Eastern Standard Time (New South Wales) -Australia/Darwin.daylight.long=Central Summer Time (Northern Territory) -Australia/Darwin.generic.long=Central Time (Northern Territory) -Australia/Darwin.standard.long=Central Standard Time (Northern Territory) -Australia/Eucla.daylight.long=Central Western Summer Time (Australia) -Australia/Eucla.generic.long=Central Western Time (Australia) -Australia/Eucla.standard.long=Central Western Standard Time (Australia) -Australia/Hobart.daylight.long=Eastern Summer Time (Tasmania) -Australia/Hobart.generic.long=Eastern Time (Tasmania) -Australia/Hobart.standard.long=Eastern Standard Time (Tasmania) -Australia/LHI.generic.long=Lord Howe Time -Australia/Lindeman.daylight.long=Eastern Summer Time (Queensland) -Australia/Lindeman.generic.long=Eastern Time (Queensland) -Australia/Lindeman.standard.long=Eastern Standard Time (Queensland) -Australia/Lord_Howe.generic.long=Lord Howe Time -Australia/Melbourne.daylight.long=Eastern Summer Time (Victoria) -Australia/Melbourne.generic.long=Eastern Time (Victoria) -Australia/Melbourne.standard.long=Eastern Standard Time (Victoria) -Australia/NSW.daylight.long=Eastern Summer Time (New South Wales) -Australia/NSW.generic.long=Eastern Time (New South Wales) -Australia/NSW.standard.long=Eastern Standard Time (New South Wales) -Australia/North.daylight.long=Central Summer Time (Northern Territory) -Australia/North.generic.long=Central Time (Northern Territory) -Australia/North.standard.long=Central Standard Time (Northern Territory) -Australia/Perth.daylight.long=Western Summer Time (Australia) -Australia/Perth.generic.long=Western Time (Australia) -Australia/Perth.standard.long=Western Standard Time (Australia) -Australia/Queensland.daylight.long=Eastern Summer Time (Queensland) -Australia/Queensland.generic.long=Eastern Time (Queensland) -Australia/Queensland.standard.long=Eastern Standard Time (Queensland) -Australia/South.daylight.long=Central Summer Time (South Australia) -Australia/South.generic.long=Central Time (South Australia) -Australia/South.standard.long=Central Standard Time (South Australia) -Australia/Sydney.daylight.long=Eastern Summer Time (New South Wales) -Australia/Sydney.generic.long=Eastern Time (New South Wales) -Australia/Sydney.standard.long=Eastern Standard Time (New South Wales) -Australia/Tasmania.daylight.long=Eastern Summer Time (Tasmania) -Australia/Tasmania.generic.long=Eastern Time (Tasmania) -Australia/Tasmania.standard.long=Eastern Standard Time (Tasmania) -Australia/Victoria.daylight.long=Eastern Summer Time (Victoria) -Australia/Victoria.generic.long=Eastern Time (Victoria) -Australia/Victoria.standard.long=Eastern Standard Time (Victoria) -Australia/West.daylight.long=Western Summer Time (Australia) -Australia/West.generic.long=Western Time (Australia) -Australia/West.standard.long=Western Standard Time (Australia) -Australia/Yancowinna.daylight.long=Central Summer Time (South Australia/New South Wales) -Australia/Yancowinna.generic.long=Central Time (South Australia/New South Wales) -Australia/Yancowinna.standard.long=Central Standard Time (South Australia/New South Wales) -BET.generic.long=Brasilia Time -BST.generic.long=Bangladesh Time -Brazil/Acre.generic.long=Acre Time -Brazil/DeNoronha.generic.long=Fernando de Noronha Time -Brazil/East.generic.long=Brasilia Time -Brazil/West.generic.long=Amazon Time -CAT.generic.long=Central Africa Time -CET.generic.long=Central European Time -CNT.generic.long=Newfoundland Time -CST.generic.long=Central Time -CST6CDT.generic.long=Central Time -CTT.generic.long=China Time -Canada/Atlantic.generic.long=Atlantic Time -Canada/Central.generic.long=Central Time -Canada/East-Saskatchewan.generic.long=Central Time -Canada/Eastern.generic.long=Eastern Time -Canada/Mountain.generic.long=Mountain Time -Canada/Newfoundland.generic.long=Newfoundland Time -Canada/Pacific.generic.long=Pacific Time -Canada/Saskatchewan.generic.long=Central Time -Canada/Yukon.generic.long=Pacific Time -Chile/Continental.generic.long=Chile Time -Chile/EasterIsland.generic.long=Easter Is. Time -Cuba.generic.long=Cuba Time -EAT.generic.long=Eastern Africa Time -ECT.generic.long=Central European Time -EET.generic.long=Eastern European Time -EST.generic.long=Eastern Time -EST5EDT.generic.long=Eastern Time -Egypt.generic.long=Eastern European Time -Eire.generic.long=Irish Time -Etc/Greenwich.generic.long=Greenwich Mean Time -Etc/UCT.generic.long=Coordinated Universal Time -Etc/UTC.generic.long=Coordinated Universal Time -Etc/Universal.generic.long=Coordinated Universal Time -Etc/Zulu.generic.long=Coordinated Universal Time -Europe/Amsterdam.generic.long=Central European Time -Europe/Andorra.generic.long=Central European Time -Europe/Athens.generic.long=Eastern European Time -Europe/Belfast.generic.long=British Time -Europe/Belgrade.generic.long=Central European Time -Europe/Berlin.generic.long=Central European Time -Europe/Bratislava.generic.long=Central European Time -Europe/Brussels.generic.long=Central European Time -Europe/Bucharest.generic.long=Eastern European Time -Europe/Budapest.generic.long=Central European Time -Europe/Busingen.generic.long=Central European Time -Europe/Chisinau.generic.long=Eastern European Time -Europe/Copenhagen.generic.long=Central European Time -Europe/Dublin.generic.long=Irish Time -Europe/Gibraltar.generic.long=Central European Time -Europe/Guernsey.generic.long=British Time -Europe/Helsinki.generic.long=Eastern European Time -Europe/Isle_of_Man.generic.long=British Time -Europe/Istanbul.generic.long=Eastern European Time -Europe/Jersey.generic.long=British Time -Europe/Kaliningrad.daylight.long=Further-eastern European Summer Time -Europe/Kaliningrad.generic.long=Further-eastern European Time -Europe/Kaliningrad.standard.long=Further-eastern European Time -Europe/Kiev.generic.long=Eastern European Time -Europe/Lisbon.generic.long=Western European Time -Europe/Ljubljana.generic.long=Central European Time -Europe/London.generic.long=British Time -Europe/Luxembourg.generic.long=Central European Time -Europe/Madrid.generic.long=Central European Time -Europe/Malta.generic.long=Central European Time -Europe/Mariehamn.generic.long=Eastern European Time -Europe/Minsk.daylight.long=Further-eastern European Summer Time -Europe/Minsk.generic.long=Further-eastern European Time -Europe/Minsk.standard.long=Further-eastern European Time -Europe/Monaco.generic.long=Central European Time -Europe/Moscow.generic.long=Moscow Time -Europe/Nicosia.generic.long=Eastern European Time -Europe/Oslo.generic.long=Central European Time -Europe/Paris.generic.long=Central European Time -Europe/Podgorica.generic.long=Central European Time -Europe/Prague.generic.long=Central European Time -Europe/Riga.generic.long=Eastern European Time -Europe/Rome.generic.long=Central European Time -Europe/Samara.generic.long=Samara Time -Europe/San_Marino.generic.long=Central European Time -Europe/Sarajevo.generic.long=Central European Time -Europe/Simferopol.generic.long=Eastern European Time -Europe/Skopje.generic.long=Central European Time -Europe/Sofia.generic.long=Eastern European Time -Europe/Stockholm.generic.long=Central European Time -Europe/Tallinn.generic.long=Eastern European Time -Europe/Tirane.generic.long=Central European Time -Europe/Tiraspol.generic.long=Eastern European Time -Europe/Uzhgorod.generic.long=Eastern European Time -Europe/Vaduz.generic.long=Central European Time -Europe/Vatican.generic.long=Central European Time -Europe/Vienna.generic.long=Central European Time -Europe/Vilnius.generic.long=Eastern European Time -Europe/Volgograd.generic.long=Volgograd Time -Europe/Warsaw.generic.long=Central European Time -Europe/Zagreb.generic.long=Central European Time -Europe/Zaporozhye.generic.long=Eastern European Time -Europe/Zurich.generic.long=Central European Time -GB-Eire.generic.long=British Time -GB.generic.long=British Time -GMT.generic.long=Greenwich Mean Time -Greenwich.generic.long=Greenwich Mean Time -HST.generic.long=Hawaii Time -Hongkong.generic.long=Hong Kong Time -IET.generic.long=Eastern Time -IST.generic.long=India Time -Iceland.generic.long=Greenwich Mean Time -Indian/Antananarivo.generic.long=Eastern Africa Time -Indian/Chagos.generic.long=Indian Ocean Territory Time -Indian/Christmas.generic.long=Christmas Island Time -Indian/Cocos.generic.long=Cocos Islands Time -Indian/Comoro.generic.long=Eastern Africa Time -Indian/Kerguelen.generic.long=French Southern & Antarctic Lands Time -Indian/Mahe.generic.long=Seychelles Time -Indian/Maldives.generic.long=Maldives Time -Indian/Mauritius.generic.long=Mauritius Time -Indian/Mayotte.generic.long=Eastern Africa Time -Indian/Reunion.generic.long=Reunion Time -Iran.generic.long=Iran Time -Israel.generic.long=Israel Time -JST.generic.long=Japan Time -Jamaica.generic.long=Eastern Time -Japan.generic.long=Japan Time -Kwajalein.generic.long=Marshall Islands Time -Libya.generic.long=Eastern European Time -MET.generic.long=Middle Europe Time -MIT.generic.long=West Samoa Time -MST.generic.long=Mountain Time -MST7MDT.generic.long=Mountain Time -Mexico/BajaNorte.generic.long=Pacific Time -Mexico/BajaSur.generic.long=Mountain Time -Mexico/General.generic.long=Central Time -NET.generic.long=Armenia Time -NST.generic.long=New Zealand Time -NZ-CHAT.generic.long=Chatham Time -NZ.generic.long=New Zealand Time -Navajo.generic.long=Mountain Time -PLT.generic.long=Pakistan Time -PNT.generic.long=Mountain Time -PRC.generic.long=China Time -PRT.generic.long=Atlantic Time -PST.generic.long=Pacific Time -PST8PDT.generic.long=Pacific Time -Pacific/Apia.generic.long=West Samoa Time -Pacific/Auckland.generic.long=New Zealand Time -Pacific/Chatham.generic.long=Chatham Time -Pacific/Chuuk.daylight.long=Chuuk Summer Time -Pacific/Chuuk.generic.long=Chuuk Time -Pacific/Chuuk.standard.long=Chuuk Time -Pacific/Easter.generic.long=Easter Is. Time -Pacific/Efate.generic.long=Vanuatu Time -Pacific/Enderbury.generic.long=Phoenix Is. Time -Pacific/Fakaofo.generic.long=Tokelau Time -Pacific/Fiji.generic.long=Fiji Time -Pacific/Funafuti.generic.long=Tuvalu Time -Pacific/Galapagos.generic.long=Galapagos Time -Pacific/Gambier.generic.long=Gambier Time -Pacific/Guadalcanal.generic.long=Solomon Is. Time -Pacific/Guam.generic.long=Chamorro Time -Pacific/Honolulu.generic.long=Hawaii Time -Pacific/Johnston.generic.long=Hawaii Time -Pacific/Kiritimati.generic.long=Line Is. Time -Pacific/Kosrae.generic.long=Kosrae Time -Pacific/Kwajalein.generic.long=Marshall Islands Time -Pacific/Majuro.generic.long=Marshall Islands Time -Pacific/Marquesas.generic.long=Marquesas Time -Pacific/Midway.generic.long=Samoa Time -Pacific/Nauru.generic.long=Nauru Time -Pacific/Niue.generic.long=Niue Time -Pacific/Norfolk.generic.long=Norfolk Time -Pacific/Noumea.generic.long=New Caledonia Time -Pacific/Pago_Pago.generic.long=Samoa Time -Pacific/Palau.generic.long=Palau Time -Pacific/Pitcairn.generic.long=Pitcairn Time -Pacific/Pohnpei.daylight.long=Pohnpei Summer Time -Pacific/Pohnpei.generic.long=Ponape Time -Pacific/Pohnpei.standard.long=Pohnpei Time -Pacific/Ponape.daylight.long=Pohnpei Summer Time -Pacific/Ponape.generic.long=Ponape Time -Pacific/Ponape.standard.long=Pohnpei Time -Pacific/Port_Moresby.generic.long=Papua New Guinea Time -Pacific/Rarotonga.generic.long=Cook Is. Time -Pacific/Saipan.generic.long=Chamorro Time -Pacific/Samoa.generic.long=Samoa Time -Pacific/Tahiti.generic.long=Tahiti Time -Pacific/Tarawa.generic.long=Gilbert Is. Time -Pacific/Tongatapu.generic.long=Tonga Time -Pacific/Truk.daylight.long=Chuuk Summer Time -Pacific/Truk.generic.long=Chuuk Time -Pacific/Truk.standard.long=Chuuk Time -Pacific/Wake.generic.long=Wake Time -Pacific/Wallis.generic.long=Wallis & Futuna Time -Pacific/Yap.daylight.long=Chuuk Summer Time -Pacific/Yap.generic.long=Chuuk Time -Pacific/Yap.standard.long=Chuuk Time -Poland.generic.long=Central European Time -Portugal.generic.long=Western European Time -ROK.generic.long=Korea Time -SST.generic.long=Solomon Is. Time -Singapore.generic.long=Singapore Time -SystemV/AST4.generic.long=Atlantic Time -SystemV/AST4ADT.generic.long=Atlantic Time -SystemV/CST6.generic.long=Central Time -SystemV/CST6CDT.generic.long=Central Time -SystemV/EST5.generic.long=Eastern Time -SystemV/EST5EDT.generic.long=Eastern Time -SystemV/HST10.generic.long=Hawaii Time -SystemV/MST7.generic.long=Mountain Time -SystemV/MST7MDT.generic.long=Mountain Time -SystemV/PST8.generic.long=Pacific Time -SystemV/PST8PDT.generic.long=Pacific Time -SystemV/YST9.generic.long=Alaska Time -SystemV/YST9YDT.generic.long=Alaska Time -Turkey.generic.long=Eastern European Time -UCT.generic.long=Coordinated Universal Time -US/Alaska.generic.long=Alaska Time -US/Aleutian.generic.long=Hawaii-Aleutian Time -US/Arizona.generic.long=Mountain Time -US/Central.generic.long=Central Time -US/East-Indiana.generic.long=Eastern Time -US/Eastern.generic.long=Eastern Time -US/Hawaii.generic.long=Hawaii Time -US/Indiana-Starke.generic.long=Central Time -US/Michigan.generic.long=Eastern Time -US/Mountain.generic.long=Mountain Time -US/Pacific-New.generic.long=Pacific Time -US/Pacific.generic.long=Pacific Time -US/Samoa.generic.long=Samoa Time -UTC.generic.long=Coordinated Universal Time -Universal.generic.long=Coordinated Universal Time -VST.generic.long=Indochina Time -W-SU.generic.long=Moscow Time -WET.generic.long=Western European Time -Zulu.generic.long=Coordinated Universal Time diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNamesTest.java b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNamesTest.java deleted file mode 100644 index e112e56f340..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNamesTest.java +++ /dev/null @@ -1,186 +0,0 @@ -/* - * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * 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 8025051 - * @summary Test time zone names across all locales - * @run main TimeZoneNamesTest - */ - -import sun.util.locale.provider.TimeZoneNameUtility; -import java.util.TimeZone; -import java.util.Locale; -import java.util.Properties; -import java.io.IOException; -import java.io.FileInputStream; - -public class TimeZoneNamesTest { - // name type to test. Possible: long, short. - static String requestedTestType = "long"; - // test Standard/DST (false) or Generic (true) TZ names - static boolean testGeneric = false; - - public static void testGenericTZName( Locale locale, String timezoneName, - int nameType, String expectedName ) throws RuntimeException { - if (testGeneric) { - String genericName = TimeZoneNameUtility.retrieveGenericDisplayName(timezoneName, nameType, locale); - //Check for equality - if (!genericName.equals(expectedName)) - throw new RuntimeException( "Time zone ("+timezoneName+") name is incorrect for locale \""+locale.getDisplayName() - +"\" nameType: Generic"+"("+nameType+") Should be: " +expectedName+" Observed: "+genericName); - } - } - - public static void testTZName( Locale locale, String timezoneName, boolean isDaylight, - int nameType, String expectedName ) throws RuntimeException { - if (!testGeneric) { - //Construct time zone objects - TimeZone zone = TimeZone.getTimeZone(timezoneName); - //Get name from JDK - String name = zone.getDisplayName(isDaylight, nameType, locale); - //Check for equality - if (!name.equals(expectedName)) - throw new RuntimeException( "Time zone ("+timezoneName+") name is incorrect for locale: \""+locale.getDisplayName() - +"\" nameType:"+requestedTestType+" DST:"+isDaylight+" Should be: " +expectedName+" Observed: "+name); - } - } - - public static boolean testPropertyEntry( Locale locale, String entry, String value ) { - boolean result = true; - String[] params = entry.split("\\."); - if (params.length != 3) { - System.out.println("Incorrect property file entry="+entry+" "+params.length); - result = false; - } else { - boolean isDaylight = true; - int nameType = TimeZone.LONG; - - if (params[2].equals("short")) - nameType = TimeZone.SHORT; - - if (params[1].equals("standard")) - isDaylight = false; - - // Names with non-requested tz name type are ignored - if (requestedTestType.equals(params[2])) { - try { - if (params[1].equals("generic")) - testGenericTZName( locale, params[0], nameType, value ); - else - testTZName( locale, params[0], isDaylight, nameType, value ); - } catch (RuntimeException e) { - System.out.println( "Test FAILED: "+e ); - result = false; - } - } - } - return result; - } - - public static boolean testPropertyFile( String propFile, String shortName, Locale locale ) throws RuntimeException { - boolean result = true; - Properties property = new Properties(); - try { - property.load( new FileInputStream(propFile) ); - } catch (IOException e) { - throw new RuntimeException("Property file "+propFile+" is not found", e); - } - for (String key: property.stringPropertyNames()) { - result &= testPropertyEntry(locale, key, property.getProperty(key) ); - } - return result; - } - - // Locale to test, file with names data, test long/short names, test generic names (true/false) - static Object[][] testTargets = { - { Locale.ROOT,"TimeZoneNames.properties","long",false}, - { Locale.ROOT,"TimeZoneNames_short.properties","short",false}, - { Locale.ROOT,"TimeZoneNames.properties","long",true}, - { Locale.ROOT,"TimeZoneNames_short.properties","short",true}, - - { new Locale("de"),"TimeZoneNames_de.properties","long",false}, - { new Locale("de"),"TimeZoneNames_de_short.properties","short",false}, - { new Locale("de"),"TimeZoneNames_de.properties","long",true}, - { new Locale("de"),"TimeZoneNames_de_short.properties","short",true}, - - { new Locale("es"),"TimeZoneNames_es.properties","long",false}, - { new Locale("es"),"TimeZoneNames_es_short.properties","short",false}, - { new Locale("es"),"TimeZoneNames_es.properties","long",true}, - { new Locale("es"),"TimeZoneNames_es_short.properties","short",true}, - - { new Locale("fr"),"TimeZoneNames_fr.properties","long",false}, - { new Locale("fr"),"TimeZoneNames_fr_short.properties","short",false}, - { new Locale("fr"),"TimeZoneNames_fr.properties","long",true}, - { new Locale("fr"),"TimeZoneNames_fr_short.properties","short",true}, - - { new Locale("it"),"TimeZoneNames_it.properties","long",false}, - { new Locale("it"),"TimeZoneNames_it_short.properties","short",false}, - { new Locale("it"),"TimeZoneNames_it.properties","long",true}, - { new Locale("it"),"TimeZoneNames_it_short.properties","short",true}, - - { new Locale("ja"),"TimeZoneNames_ja.properties","long",false}, - { new Locale("ja"),"TimeZoneNames_ja_short.properties","short",false}, - { new Locale("ja"),"TimeZoneNames_ja.properties","long",true}, - { new Locale("ja"),"TimeZoneNames_ja_short.properties","short",true}, - - { new Locale("ko"),"TimeZoneNames_ko.properties","long",false}, - { new Locale("ko"),"TimeZoneNames_ko_short.properties","short",false}, - { new Locale("ko"),"TimeZoneNames_ko.properties","long",true}, - { new Locale("ko"),"TimeZoneNames_ko_short.properties","short",true}, - - { new Locale("pt","BR"),"TimeZoneNames_pt_BR.properties","long",false}, - { new Locale("pt","BR"),"TimeZoneNames_pt_BR_short.properties","short",false}, - { new Locale("pt","BR"),"TimeZoneNames_pt_BR.properties","long",true}, - { new Locale("pt","BR"),"TimeZoneNames_pt_BR_short.properties","short",true}, - - { new Locale("sv"),"TimeZoneNames_sv.properties","long",false}, - { new Locale("sv"),"TimeZoneNames_sv_short.properties","short",false}, - { new Locale("sv"),"TimeZoneNames_sv.properties","long",true}, - { new Locale("sv"),"TimeZoneNames_sv_short.properties","short",true}, - - { new Locale("zh","CN"),"TimeZoneNames_zh_CN.properties","long",false}, - { new Locale("zh","CN"),"TimeZoneNames_zh_CN_short.properties","short",false}, - { new Locale("zh","CN"),"TimeZoneNames_zh_CN.properties","long",true}, - { new Locale("zh","CN"),"TimeZoneNames_zh_CN_short.properties","short",true}, - - { new Locale("zh","TW"),"TimeZoneNames_zh_TW.properties","long",false}, - { new Locale("zh","TW"),"TimeZoneNames_zh_TW_short.properties","short",false}, - { new Locale("zh","TW"),"TimeZoneNames_zh_TW.properties","long",true}, - { new Locale("zh","TW"),"TimeZoneNames_zh_TW_short.properties","short",true} - }; - - public static void main(String[] args) { - boolean result = true; - - for (Object [] test: testTargets) { - Locale testLocale = (Locale) test[0]; - String testFile = (String) test[1]; - requestedTestType = (String) test[2]; - testGeneric = (Boolean) test[3]; - result &= testPropertyFile( System.getProperty("test.src",".")+"/"+testFile, testFile, testLocale); - } - if (!result) - throw new RuntimeException("Some time zones has unexpected names. Please, check test output."); - } -} diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_de.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_de.properties deleted file mode 100644 index 432b127b2b9..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_de.properties +++ /dev/null @@ -1,651 +0,0 @@ -ACT.daylight.long=Zentrale Sommerzeit (Northern Territory) -ACT.generic.long=Zentrale Zeitzone (Northern Territory) -ACT.standard.long=Zentrale Normalzeit (Northern Territory) -AET.daylight.long=\u00D6stliche Sommerzeit (New South Wales) -AET.generic.long=\u00D6stliche Zeitzone (New South Wales) -AET.standard.long=\u00D6stliche Normalzeit (New South Wales) -AGT.generic.long=Argentinische Zeit -ART.generic.long=Osteurop\u00E4ische Zeit -AST.generic.long=Zeitzone f\u00FCr Alaska -Africa/Abidjan.generic.long=Greenwich Zeit -Africa/Accra.generic.long=Ghanaische Normalzeit -Africa/Addis_Ababa.generic.long=Ostafrikanische Zeit -Africa/Algiers.generic.long=Mitteleurop\u00E4ische Zeit -Africa/Asmara.generic.long=Ostafrikanische Zeit -Africa/Asmera.generic.long=Ostafrikanische Zeit -Africa/Bamako.generic.long=Greenwich Zeit -Africa/Bangui.generic.long=Westafrikanische Zeit -Africa/Banjul.generic.long=Greenwich Zeit -Africa/Bissau.generic.long=Greenwich Zeit -Africa/Blantyre.generic.long=Zentralafrikanische Zeit -Africa/Brazzaville.generic.long=Westafrikanische Zeit -Africa/Bujumbura.generic.long=Zentralafrikanische Zeit -Africa/Cairo.generic.long=Osteurop\u00E4ische Zeit -Africa/Casablanca.generic.long=Westeurop\u00E4ische Zeit -Africa/Ceuta.generic.long=Mitteleurop\u00E4ische Zeit -Africa/Conakry.generic.long=Greenwich Zeit -Africa/Dakar.generic.long=Greenwich Zeit -Africa/Dar_es_Salaam.generic.long=Ostafrikanische Zeit -Africa/Djibouti.generic.long=Ostafrikanische Zeit -Africa/Douala.generic.long=Westafrikanische Zeit -Africa/El_Aaiun.generic.long=Westeurop\u00E4ische Zeit -Africa/Freetown.generic.long=Sierra Leone Zeit -Africa/Gaborone.generic.long=Zentralafrikanische Zeit -Africa/Harare.generic.long=Zentralafrikanische Zeit -Africa/Johannesburg.generic.long=Zeitzone f\u00FCr S\u00FCdafrika -Africa/Juba.generic.long=Ostafrikanische Zeit -Africa/Kampala.generic.long=Ostafrikanische Zeit -Africa/Khartoum.generic.long=Ostafrikanische Zeit -Africa/Kigali.generic.long=Zentralafrikanische Zeit -Africa/Kinshasa.generic.long=Westafrikanische Zeit -Africa/Lagos.generic.long=Westafrikanische Zeit -Africa/Libreville.generic.long=Westafrikanische Zeit -Africa/Lome.generic.long=Greenwich Zeit -Africa/Luanda.generic.long=Westafrikanische Zeit -Africa/Lubumbashi.generic.long=Zentralafrikanische Zeit -Africa/Lusaka.generic.long=Zentralafrikanische Zeit -Africa/Malabo.generic.long=Westafrikanische Zeit -Africa/Maputo.generic.long=Zentralafrikanische Zeit -Africa/Maseru.generic.long=Zeitzone f\u00FCr S\u00FCdafrika -Africa/Mbabane.generic.long=Zeitzone f\u00FCr S\u00FCdafrika -Africa/Mogadishu.generic.long=Ostafrikanische Zeit -Africa/Monrovia.generic.long=Greenwich Zeit -Africa/Nairobi.generic.long=Ostafrikanische Zeit -Africa/Ndjamena.generic.long=Westafrikanische Zeit -Africa/Niamey.generic.long=Westafrikanische Zeit -Africa/Nouakchott.generic.long=Greenwich Zeit -Africa/Ouagadougou.generic.long=Greenwich Zeit -Africa/Porto-Novo.generic.long=Westafrikanische Zeit -Africa/Sao_Tome.generic.long=Greenwich Zeit -Africa/Timbuktu.generic.long=Greenwich Zeit -Africa/Tripoli.generic.long=Osteurop\u00e4ische Zeit -Africa/Tunis.generic.long=Mitteleurop\u00E4ische Zeit -Africa/Windhoek.generic.long=Westafrikanische Zeit -America/Adak.generic.long=Zeitzone f\u00FCr Hawaii und Al\u00EButen -America/Anchorage.generic.long=Zeitzone f\u00FCr Alaska -America/Anguilla.generic.long=Zeitzone Atlantik -America/Antigua.generic.long=Zeitzone Atlantik -America/Araguaina.generic.long=Brasilianische Zeit -America/Argentina/Buenos_Aires.generic.long=Argentinische Zeit -America/Argentina/Catamarca.generic.long=Argentinische Zeit -America/Argentina/ComodRivadavia.generic.long=Argentinische Zeit -America/Argentina/Cordoba.generic.long=Argentinische Zeit -America/Argentina/Jujuy.generic.long=Argentinische Zeit -America/Argentina/La_Rioja.generic.long=Argentinische Zeit -America/Argentina/Mendoza.generic.long=Argentinische Zeit -America/Argentina/Rio_Gallegos.generic.long=Argentinische Zeit -America/Argentina/Salta.generic.long=Argentinische Zeit -America/Argentina/San_Juan.generic.long=Argentinische Zeit -America/Argentina/San_Luis.generic.long=Argentinische Zeit -America/Argentina/Tucuman.generic.long=Argentinische Zeit -America/Argentina/Ushuaia.generic.long=Argentinische Zeit -America/Aruba.generic.long=Zeitzone Atlantik -America/Asuncion.generic.long=Paraguay Zeit -America/Atikokan.generic.long=\u00D6stliche Zeitzone -America/Atka.generic.long=Zeitzone f\u00FCr Hawaii und Al\u00EButen -America/Bahia.generic.long=Brasilianische Zeit -America/Bahia_Banderas.generic.long=Zentrale Zeitzone -America/Barbados.generic.long=Zeitzone Atlantik -America/Belem.generic.long=Brasilianische Zeit -America/Belize.generic.long=Zentrale Zeitzone -America/Blanc-Sablon.generic.long=Zeitzone Atlantik -America/Boa_Vista.generic.long=Amazonas Normalzeit -America/Bogota.generic.long=Kolumbianische Zeit -America/Boise.generic.long=Zeitzone Mountain -America/Buenos_Aires.generic.long=Argentinische Zeit -America/Cambridge_Bay.generic.long=Zeitzone Mountain -America/Campo_Grande.generic.long=Amazonas Normalzeit -America/Cancun.generic.long=Zentrale Zeitzone -America/Caracas.generic.long=Venezuelanische Zeit -America/Catamarca.generic.long=Argentinische Zeit -America/Cayenne.generic.long=Franz\u00F6sisch-Guiana Zeit -America/Cayman.generic.long=\u00D6stliche Zeitzone -America/Chicago.generic.long=Zentrale Zeitzone -America/Chihuahua.generic.long=Zeitzone Mountain -America/Coral_Harbour.generic.long=\u00D6stliche Zeitzone -America/Cordoba.generic.long=Argentinische Zeit -America/Costa_Rica.generic.long=Zentrale Zeitzone -America/Creston.generic.long=Zeitzone Mountain -America/Cuiaba.generic.long=Amazonas Normalzeit -America/Curacao.generic.long=Zeitzone Atlantik -America/Danmarkshavn.generic.long=Greenwich Zeit -America/Dawson.generic.long=Zeitzone Pazifik -America/Dawson_Creek.generic.long=Zeitzone Mountain -America/Denver.generic.long=Zeitzone Mountain -America/Detroit.generic.long=\u00D6stliche Zeitzone -America/Dominica.generic.long=Zeitzone Atlantik -America/Edmonton.generic.long=Zeitzone Mountain -America/Eirunepe.generic.long=Acre Normalzeit -America/El_Salvador.generic.long=Zentrale Zeitzone -America/Ensenada.generic.long=Zeitzone Pazifik -America/Fort_Wayne.generic.long=\u00D6stliche Zeitzone -America/Fortaleza.generic.long=Brasilianische Zeit -America/Glace_Bay.generic.long=Zeitzone Atlantik -America/Godthab.generic.long=Westgr\u00F6nl\u00E4ndische Zeit -America/Goose_Bay.generic.long=Zeitzone Atlantik -America/Grand_Turk.generic.long=\u00D6stliche Zeitzone -America/Grenada.generic.long=Zeitzone Atlantik -America/Guadeloupe.generic.long=Zeitzone Atlantik -America/Guatemala.generic.long=Zentrale Zeitzone -America/Guayaquil.generic.long=Ecuadorianische Zeit -America/Guyana.generic.long=Guyanische Zeit -America/Halifax.generic.long=Zeitzone Atlantik -America/Havana.generic.long=Kubanische Normalzeit -America/Hermosillo.generic.long=Zeitzone Mountain -America/Indiana/Indianapolis.generic.long=\u00D6stliche Zeitzone -America/Indiana/Knox.generic.long=Zentrale Zeitzone -America/Indiana/Marengo.generic.long=\u00D6stliche Zeitzone -America/Indiana/Petersburg.generic.long=\u00D6stliche Zeitzone -America/Indiana/Tell_City.generic.long=Zentrale Zeitzone -America/Indiana/Vevay.generic.long=\u00D6stliche Zeitzone -America/Indiana/Vincennes.generic.long=\u00D6stliche Zeitzone -America/Indiana/Winamac.generic.long=\u00D6stliche Zeitzone -America/Indianapolis.generic.long=\u00D6stliche Zeitzone -America/Inuvik.generic.long=Zeitzone Mountain -America/Iqaluit.generic.long=\u00D6stliche Zeitzone -America/Jamaica.generic.long=\u00D6stliche Zeitzone -America/Jujuy.generic.long=Argentinische Zeit -America/Juneau.generic.long=Zeitzone f\u00FCr Alaska -America/Kentucky/Louisville.generic.long=\u00D6stliche Zeitzone -America/Kentucky/Monticello.generic.long=\u00D6stliche Zeitzone -America/Knox_IN.generic.long=Zentrale Zeitzone -America/Kralendijk.generic.long=Zeitzone Atlantik -America/La_Paz.generic.long=Bolivianische Zeit -America/Lima.generic.long=Peruanische Zeit -America/Los_Angeles.generic.long=Zeitzone Pazifik -America/Louisville.generic.long=\u00D6stliche Zeitzone -America/Lower_Princes.generic.long=Zeitzone Atlantik -America/Maceio.generic.long=Brasilianische Zeit -America/Managua.generic.long=Zentrale Zeitzone -America/Manaus.generic.long=Amazonas Normalzeit -America/Marigot.generic.long=Zeitzone Atlantik -America/Martinique.generic.long=Zeitzone Atlantik -America/Matamoros.generic.long=Zentrale Zeitzone -America/Mazatlan.generic.long=Zeitzone Mountain -America/Mendoza.generic.long=Argentinische Zeit -America/Menominee.generic.long=Zentrale Zeitzone -America/Merida.generic.long=Zentrale Zeitzone -America/Metlakatla.daylight.long=Metlakatla Sommerzeit -America/Metlakatla.generic.long=Metlakatla Normalzeit -America/Metlakatla.standard.long=Metlakatla Normalzeit -America/Mexico_City.generic.long=Zentrale Zeitzone -America/Miquelon.generic.long=Zeitzone f\u00FCr St. Pierre und Miquelon -America/Moncton.generic.long=Zeitzone Atlantik -America/Monterrey.generic.long=Zentrale Zeitzone -America/Montevideo.generic.long=Uruguayanische Zeit -America/Montreal.generic.long=\u00D6stliche Zeitzone -America/Montserrat.generic.long=Zeitzone Atlantik -America/Nassau.generic.long=\u00D6stliche Zeitzone -America/New_York.generic.long=\u00D6stliche Zeitzone -America/Nipigon.generic.long=\u00D6stliche Zeitzone -America/Nome.generic.long=Zeitzone f\u00FCr Alaska -America/Noronha.generic.long=Fernando de Noronha Zeit -America/North_Dakota/Beulah.generic.long=Zentrale Zeitzone -America/North_Dakota/Center.generic.long=Zentrale Zeitzone -America/North_Dakota/New_Salem.generic.long=Zentrale Zeitzone -America/Ojinaga.generic.long=Zeitzone Mountain -America/Panama.generic.long=\u00D6stliche Zeitzone -America/Pangnirtung.generic.long=\u00D6stliche Zeitzone -America/Paramaribo.generic.long=Suriname Zeit -America/Phoenix.generic.long=Zeitzone Mountain -America/Port-au-Prince.generic.long=\u00D6stliche Zeitzone -America/Port_of_Spain.generic.long=Zeitzone Atlantik -America/Porto_Acre.generic.long=Acre Normalzeit -America/Porto_Velho.generic.long=Amazonas Normalzeit -America/Puerto_Rico.generic.long=Zeitzone Atlantik -America/Rainy_River.generic.long=Zentrale Zeitzone -America/Rankin_Inlet.generic.long=Zentrale Zeitzone -America/Recife.generic.long=Brasilianische Zeit -America/Regina.generic.long=Zentrale Zeitzone -America/Resolute.generic.long=Zentrale Zeitzone -America/Rio_Branco.generic.long=Acre Normalzeit -America/Rosario.generic.long=Argentinische Zeit -America/Santa_Isabel.generic.long=Zeitzone Pazifik -America/Santarem.generic.long=Brasilianische Zeit -America/Santiago.generic.long=Chilenische Zeit -America/Santo_Domingo.generic.long=Zeitzone Atlantik -America/Sao_Paulo.generic.long=Brasilianische Zeit -America/Scoresbysund.generic.long=Ostgr\u00F6nl\u00E4ndische Zeit -America/Shiprock.generic.long=Zeitzone Mountain -America/Sitka.generic.long=Zeitzone f\u00FCr Alaska -America/St_Barthelemy.generic.long=Zeitzone Atlantik -America/St_Johns.generic.long=Zeitzone f\u00FCr Neufundland -America/St_Kitts.generic.long=Zeitzone Atlantik -America/St_Lucia.generic.long=Zeitzone Atlantik -America/St_Thomas.generic.long=Zeitzone Atlantik -America/St_Vincent.generic.long=Zeitzone Atlantik -America/Swift_Current.generic.long=Zentrale Zeitzone -America/Tegucigalpa.generic.long=Zentrale Zeitzone -America/Thule.generic.long=Zeitzone Atlantik -America/Thunder_Bay.generic.long=\u00D6stliche Zeitzone -America/Tijuana.generic.long=Zeitzone Pazifik -America/Toronto.generic.long=\u00D6stliche Zeitzone -America/Tortola.generic.long=Zeitzone Atlantik -America/Vancouver.generic.long=Zeitzone Pazifik -America/Virgin.generic.long=Zeitzone Atlantik -America/Whitehorse.generic.long=Zeitzone Pazifik -America/Winnipeg.generic.long=Zentrale Zeitzone -America/Yakutat.generic.long=Zeitzone f\u00FCr Alaska -America/Yellowknife.generic.long=Zeitzone Mountain -Antarctica/Casey.daylight.long=Westliche Sommerzeit (Australien) -Antarctica/Casey.generic.long=Westliche Zeitzone (Australien) -Antarctica/Casey.standard.long=Westliche Normalzeit (Australien) -Antarctica/Davis.generic.long=Davis Zeit -Antarctica/DumontDUrville.generic.long=Dumont-d'Urville Zeit -Antarctica/Macquarie.daylight.long=Macquarieinsel Sommerzeit -Antarctica/Macquarie.generic.long=Macquarieinsel Zeit -Antarctica/Macquarie.standard.long=Macquarieinsel Zeit -Antarctica/Mawson.generic.long=Mawson Zeit -Antarctica/McMurdo.generic.long=Zeitzone f\u00FCr Neuseeland -Antarctica/Palmer.generic.long=Chilenische Zeit -Antarctica/Rothera.generic.long=Rothera Zeit -Antarctica/South_Pole.generic.long=Zeitzone f\u00FCr Neuseeland -Antarctica/Syowa.generic.long=Syowa Zeit -Antarctica/Vostok.generic.long=Vostok Zeit -Arctic/Longyearbyen.generic.long=Mitteleurop\u00E4ische Zeit -Asia/Aden.generic.long=Zeitzone f\u00FCr Arabische Halbinsel -Asia/Almaty.generic.long=Alma Ata Zeit -Asia/Amman.generic.long=Zeitzone f\u00fcr Arabische Halbinsel -Asia/Anadyr.generic.long=Anadyr Zeit -Asia/Aqtau.generic.long=Aqtau Zeit -Asia/Aqtobe.generic.long=Aqtobe Zeit -Asia/Ashgabat.generic.long=Turkmenische Zeit -Asia/Ashkhabad.generic.long=Turkmenische Zeit -Asia/Baghdad.generic.long=Zeitzone f\u00FCr Arabische Halbinsel -Asia/Bahrain.generic.long=Zeitzone f\u00FCr Arabische Halbinsel -Asia/Baku.generic.long=Aserbaidschanische Zeit -Asia/Bangkok.generic.long=Indochina Zeit -Asia/Beirut.generic.long=Osteurop\u00E4ische Zeit -Asia/Bishkek.generic.long=Kirgisische Zeit -Asia/Brunei.generic.long=Brunei Zeit -Asia/Calcutta.generic.long=Zeitzone f\u00FCr Indien -Asia/Choibalsan.generic.long=Choibalsan Zeit -Asia/Chongqing.generic.long=Zeitzone f\u00FCr China -Asia/Chungking.generic.long=Zeitzone f\u00FCr China -Asia/Colombo.generic.long=Zeitzone f\u00FCr Indien -Asia/Dacca.generic.long=Bangladesch Zeit -Asia/Damascus.generic.long=Osteurop\u00E4ische Zeit -Asia/Dhaka.generic.long=Bangladesch Zeit -Asia/Dili.generic.long=Timor-Leste Normalzeit -Asia/Dubai.generic.long=Zeitzone f\u00FCr Persischen Golf -Asia/Dushanbe.generic.long=Tadschikische Zeit -Asia/Gaza.generic.long=Osteurop\u00E4ische Zeit -Asia/Harbin.generic.long=Zeitzone f\u00FCr China -Asia/Hebron.generic.long=Osteurop\u00E4ische Zeit -Asia/Ho_Chi_Minh.generic.long=Indochina Zeit -Asia/Hong_Kong.generic.long=Hongkong Zeit -Asia/Hovd.generic.long=Hovd Zeit -Asia/Irkutsk.generic.long=Irkutsk Zeit -Asia/Istanbul.generic.long=Osteurop\u00E4ische Zeit -Asia/Jakarta.generic.long=Westindonesische Zeit -Asia/Jayapura.generic.long=Ostindonesische Zeit -Asia/Jerusalem.generic.long=Zeitzone f\u00FCr Israel -Asia/Kabul.generic.long=Afghanistanische Zeit -Asia/Kamchatka.generic.long=Petropawlowsk-Kamtschatkische Zeit -Asia/Karachi.generic.long=Pakistanische Zeit -Asia/Kashgar.generic.long=Zeitzone f\u00FCr China -Asia/Kathmandu.generic.long=Nepalesische Zeit -Asia/Katmandu.generic.long=Nepalesische Zeit -Asia/Khandyga.daylight.long=Chandyga Sommerzeit -Asia/Khandyga.generic.long=Chandyga Zeit -Asia/Khandyga.standard.long=Chandyga Zeit -Asia/Kolkata.generic.long=Zeitzone f\u00FCr Indien -Asia/Krasnoyarsk.generic.long=Krasnojarsker Zeit -Asia/Kuala_Lumpur.generic.long=Malaysische Zeit -Asia/Kuching.generic.long=Malaysische Zeit -Asia/Kuwait.generic.long=Zeitzone f\u00FCr Arabische Halbinsel -Asia/Macao.generic.long=Zeitzone f\u00FCr China -Asia/Macau.generic.long=Zeitzone f\u00FCr China -Asia/Magadan.generic.long=Magadanische Zeit -Asia/Makassar.generic.long=Zentralindonesische Zeit -Asia/Manila.generic.long=Philippinische Zeit -Asia/Muscat.generic.long=Zeitzone f\u00FCr Persischen Golf -Asia/Nicosia.generic.long=Osteurop\u00E4ische Zeit -Asia/Novokuznetsk.generic.long=Nowosibirsker Zeit -Asia/Novosibirsk.generic.long=Nowosibirsker Zeit -Asia/Omsk.generic.long=Omsk Zeit -Asia/Oral.generic.long=Oral Zeit -Asia/Phnom_Penh.generic.long=Indochina Zeit -Asia/Pontianak.generic.long=Westindonesische Zeit -Asia/Pyongyang.generic.long=Zeitzone f\u00FCr Korea -Asia/Qatar.generic.long=Zeitzone f\u00FCr Arabische Halbinsel -Asia/Qyzylorda.generic.long=Qyzylorda Zeit -Asia/Rangoon.generic.long=Myanmar Zeit -Asia/Saigon.generic.long=Indochina Zeit -Asia/Sakhalin.generic.long=Sakhalin Zeit -Asia/Samarkand.generic.long=Usbekistan Zeit -Asia/Seoul.generic.long=Zeitzone f\u00FCr Korea -Asia/Shanghai.generic.long=Zeitzone f\u00FCr China -Asia/Singapore.generic.long=Singapur Zeit -Asia/Taipei.generic.long=Zeitzone f\u00FCr China -Asia/Tashkent.generic.long=Usbekistan Zeit -Asia/Tbilisi.generic.long=Georgische Zeit -Asia/Tehran.generic.long=Iranische Zeit -Asia/Tel_Aviv.generic.long=Zeitzone f\u00FCr Israel -Asia/Thimbu.generic.long=Bhutanische Zeit -Asia/Thimphu.generic.long=Bhutanische Zeit -Asia/Tokyo.generic.long=Zeitzone f\u00FCr Japan -Asia/Ujung_Pandang.generic.long=Zentralindonesische Zeit -Asia/Ulaanbaatar.generic.long=Ulaanbaatar Zeit -Asia/Ulan_Bator.generic.long=Ulaanbaatar Zeit -Asia/Urumqi.generic.long=Zeitzone f\u00FCr China -Asia/Ust-Nera.daylight.long=Ust-Nera Sommerzeit -Asia/Ust-Nera.generic.long=Ust-Nera Zeit -Asia/Ust-Nera.standard.long=Ust-Nera Zeit -Asia/Vientiane.generic.long=Indochina Zeit -Asia/Vladivostok.generic.long=Wladiwostok Zeit -Asia/Yakutsk.generic.long=Jakutsk Zeit -Asia/Yekaterinburg.generic.long=Jekaterinburger Zeit -Asia/Yerevan.generic.long=Armenische Zeit -Atlantic/Azores.generic.long=Azoren Zeit -Atlantic/Bermuda.generic.long=Zeitzone Atlantik -Atlantic/Canary.generic.long=Westeurop\u00E4ische Zeit -Atlantic/Cape_Verde.generic.long=Kap Verde Zeit -Atlantic/Faeroe.generic.long=Westeurop\u00E4ische Zeit -Atlantic/Faroe.generic.long=Westeurop\u00E4ische Zeit -Atlantic/Jan_Mayen.generic.long=Mitteleurop\u00E4ische Zeit -Atlantic/Madeira.generic.long=Westeurop\u00E4ische Zeit -Atlantic/Reykjavik.generic.long=Greenwich Zeit -Atlantic/South_Georgia.generic.long=Zeitzone f\u00FCr S\u00FCdgeorgien -Atlantic/St_Helena.generic.long=Greenwich Zeit -Atlantic/Stanley.generic.long=Falkland Inseln Zeit -Australia/ACT.daylight.long=\u00D6stliche Sommerzeit (New South Wales) -Australia/ACT.generic.long=\u00D6stliche Zeitzone (New South Wales) -Australia/ACT.standard.long=\u00D6stliche Normalzeit (New South Wales) -Australia/Adelaide.daylight.long=Zentrale Sommerzeit (S\u00FCdaustralien) -Australia/Adelaide.generic.long=Zentrale Zeitzone (S\u00FCdaustralien) -Australia/Adelaide.standard.long=Zentrale Normalzeit (S\u00FCdaustralien) -Australia/Brisbane.daylight.long=\u00D6stliche Sommerzeit (Queensland) -Australia/Brisbane.generic.long=\u00D6stliche Zeitzone (Queensland) -Australia/Brisbane.standard.long=\u00D6stliche Normalzeit (Queensland) -Australia/Broken_Hill.daylight.long=Zentrale Sommerzeit (S\u00FCdaustralien/New South Wales) -Australia/Broken_Hill.generic.long=Zentrale Zeitzone (S\u00FCdaustralien/New South Wales) -Australia/Broken_Hill.standard.long=Zentrale Normalzeit (S\u00FCdaustralien/New South Wales) -Australia/Canberra.daylight.long=\u00D6stliche Sommerzeit (New South Wales) -Australia/Canberra.generic.long=\u00D6stliche Zeitzone (New South Wales) -Australia/Canberra.standard.long=\u00D6stliche Normalzeit (New South Wales) -Australia/Currie.daylight.long=\u00D6stliche Sommerzeit (New South Wales) -Australia/Currie.generic.long=\u00D6stliche Zeitzone (New South Wales) -Australia/Currie.standard.long=\u00D6stliche Normalzeit (New South Wales) -Australia/Darwin.daylight.long=Zentrale Sommerzeit (Northern Territory) -Australia/Darwin.generic.long=Zentrale Zeitzone (Northern Territory) -Australia/Darwin.standard.long=Zentrale Normalzeit (Northern Territory) -Australia/Eucla.daylight.long=Zentral-Westliche Sommerzeit (Australien) -Australia/Eucla.generic.long=Zentral-Westliche Normalzeit (Australien) -Australia/Eucla.standard.long=Zentral-Westliche Normalzeit (Australien) -Australia/Hobart.daylight.long=\u00D6stliche Sommerzeit (Tasmanien) -Australia/Hobart.generic.long=\u00D6stliche Zeitzone (Tasmanien) -Australia/Hobart.standard.long=\u00D6stliche Normalzeit (Tasmanien) -Australia/LHI.generic.long=Lord-Howe Normalzeit -Australia/Lindeman.daylight.long=\u00D6stliche Sommerzeit (Queensland) -Australia/Lindeman.generic.long=\u00D6stliche Zeitzone (Queensland) -Australia/Lindeman.standard.long=\u00D6stliche Normalzeit (Queensland) -Australia/Lord_Howe.generic.long=Lord-Howe Normalzeit -Australia/Melbourne.daylight.long=\u00D6stliche Sommerzeit (Victoria) -Australia/Melbourne.generic.long=\u00D6stliche Zeitzone (Victoria) -Australia/Melbourne.standard.long=\u00D6stliche Normalzeit (Victoria) -Australia/NSW.daylight.long=\u00D6stliche Sommerzeit (New South Wales) -Australia/NSW.generic.long=\u00D6stliche Zeitzone (New South Wales) -Australia/NSW.standard.long=\u00D6stliche Normalzeit (New South Wales) -Australia/North.daylight.long=Zentrale Sommerzeit (Northern Territory) -Australia/North.generic.long=Zentrale Zeitzone (Northern Territory) -Australia/North.standard.long=Zentrale Normalzeit (Northern Territory) -Australia/Perth.daylight.long=Westliche Sommerzeit (Australien) -Australia/Perth.generic.long=Westliche Zeitzone (Australien) -Australia/Perth.standard.long=Westliche Normalzeit (Australien) -Australia/Queensland.daylight.long=\u00D6stliche Sommerzeit (Queensland) -Australia/Queensland.generic.long=\u00D6stliche Zeitzone (Queensland) -Australia/Queensland.standard.long=\u00D6stliche Normalzeit (Queensland) -Australia/South.daylight.long=Zentrale Sommerzeit (S\u00FCdaustralien) -Australia/South.generic.long=Zentrale Zeitzone (S\u00FCdaustralien) -Australia/South.standard.long=Zentrale Normalzeit (S\u00FCdaustralien) -Australia/Sydney.daylight.long=\u00D6stliche Sommerzeit (New South Wales) -Australia/Sydney.generic.long=\u00D6stliche Zeitzone (New South Wales) -Australia/Sydney.standard.long=\u00D6stliche Normalzeit (New South Wales) -Australia/Tasmania.daylight.long=\u00D6stliche Sommerzeit (Tasmanien) -Australia/Tasmania.generic.long=\u00D6stliche Zeitzone (Tasmanien) -Australia/Tasmania.standard.long=\u00D6stliche Normalzeit (Tasmanien) -Australia/Victoria.daylight.long=\u00D6stliche Sommerzeit (Victoria) -Australia/Victoria.generic.long=\u00D6stliche Zeitzone (Victoria) -Australia/Victoria.standard.long=\u00D6stliche Normalzeit (Victoria) -Australia/West.daylight.long=Westliche Sommerzeit (Australien) -Australia/West.generic.long=Westliche Zeitzone (Australien) -Australia/West.standard.long=Westliche Normalzeit (Australien) -Australia/Yancowinna.daylight.long=Zentrale Sommerzeit (S\u00FCdaustralien/New South Wales) -Australia/Yancowinna.generic.long=Zentrale Zeitzone (S\u00FCdaustralien/New South Wales) -Australia/Yancowinna.standard.long=Zentrale Normalzeit (S\u00FCdaustralien/New South Wales) -BET.generic.long=Brasilianische Zeit -BST.generic.long=Bangladesch Zeit -Brazil/Acre.generic.long=Acre Normalzeit -Brazil/DeNoronha.generic.long=Fernando de Noronha Zeit -Brazil/East.generic.long=Brasilianische Zeit -Brazil/West.generic.long=Amazonas Normalzeit -CAT.generic.long=Zentralafrikanische Zeit -CET.generic.long=Mitteleurop\u00e4ische Zeit -CNT.generic.long=Zeitzone f\u00FCr Neufundland -CST.generic.long=Zentrale Zeitzone -CST6CDT.generic.long=Zentrale Zeitzone -CTT.generic.long=Zeitzone f\u00FCr China -Canada/Atlantic.generic.long=Zeitzone Atlantik -Canada/Central.generic.long=Zentrale Zeitzone -Canada/East-Saskatchewan.generic.long=Zentrale Zeitzone -Canada/Eastern.generic.long=\u00D6stliche Zeitzone -Canada/Mountain.generic.long=Zeitzone Mountain -Canada/Newfoundland.generic.long=Zeitzone f\u00FCr Neufundland -Canada/Pacific.generic.long=Zeitzone Pazifik -Canada/Saskatchewan.generic.long=Zentrale Zeitzone -Canada/Yukon.generic.long=Zeitzone Pazifik -Chile/Continental.generic.long=Chilenische Zeit -Chile/EasterIsland.generic.long=Osterinseln Zeit -Cuba.generic.long=Kubanische Normalzeit -EAT.generic.long=Ostafrikanische Zeit -ECT.generic.long=Mitteleurop\u00E4ische Zeit -EET.generic.long=Osteurop\u00e4ische Zeit -EST.generic.long=\u00d6stliche Zeitzone -EST5EDT.generic.long=\u00d6stliche Zeitzone -Egypt.generic.long=Osteurop\u00E4ische Zeit -Eire.generic.long=Irische Zeit -Etc/Greenwich.generic.long=Greenwich Zeit -Etc/UCT.generic.long=Koordinierte Universalzeit -Etc/UTC.generic.long=Koordinierte Universalzeit -Etc/Universal.generic.long=Koordinierte Universalzeit -Etc/Zulu.generic.long=Koordinierte Universalzeit -Europe/Amsterdam.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Andorra.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Athens.generic.long=Osteurop\u00E4ische Zeit -Europe/Belfast.generic.long=Britische Zeit -Europe/Belgrade.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Berlin.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Bratislava.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Brussels.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Bucharest.generic.long=Osteurop\u00E4ische Zeit -Europe/Budapest.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Busingen.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Chisinau.generic.long=Osteurop\u00E4ische Zeit -Europe/Copenhagen.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Dublin.generic.long=Irische Zeit -Europe/Gibraltar.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Guernsey.generic.long=Britische Zeit -Europe/Helsinki.generic.long=Osteurop\u00E4ische Zeit -Europe/Isle_of_Man.generic.long=Britische Zeit -Europe/Istanbul.generic.long=Osteurop\u00E4ische Zeit -Europe/Jersey.generic.long=Britische Zeit -Europe/Kaliningrad.daylight.long=Kaliningrader Sommerzeit -Europe/Kaliningrad.generic.long=Kaliningrader Zeit -Europe/Kaliningrad.standard.long=Kaliningrader Zeit -Europe/Kiev.generic.long=Osteurop\u00E4ische Zeit -Europe/Lisbon.generic.long=Westeurop\u00E4ische Zeit -Europe/Ljubljana.generic.long=Mitteleurop\u00E4ische Zeit -Europe/London.generic.long=Britische Zeit -Europe/Luxembourg.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Madrid.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Malta.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Mariehamn.generic.long=Osteurop\u00E4ische Zeit -Europe/Minsk.daylight.long=Kaliningrader Sommerzeit -Europe/Minsk.generic.long=Kaliningrader Zeit -Europe/Minsk.standard.long=Kaliningrader Zeit -Europe/Monaco.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Moscow.generic.long=Zeitzone f\u00FCr Moskau -Europe/Nicosia.generic.long=Osteurop\u00E4ische Zeit -Europe/Oslo.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Paris.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Podgorica.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Prague.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Riga.generic.long=Osteurop\u00E4ische Zeit -Europe/Rome.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Samara.generic.long=Samarische Zeit -Europe/San_Marino.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Sarajevo.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Simferopol.generic.long=Osteurop\u00E4ische Zeit -Europe/Skopje.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Sofia.generic.long=Osteurop\u00E4ische Zeit -Europe/Stockholm.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Tallinn.generic.long=Osteurop\u00E4ische Zeit -Europe/Tirane.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Tiraspol.generic.long=Osteurop\u00E4ische Zeit -Europe/Uzhgorod.generic.long=Osteurop\u00E4ische Zeit -Europe/Vaduz.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Vatican.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Vienna.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Vilnius.generic.long=Osteurop\u00E4ische Zeit -Europe/Volgograd.generic.long=Wolgograder Zeit -Europe/Warsaw.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Zagreb.generic.long=Mitteleurop\u00E4ische Zeit -Europe/Zaporozhye.generic.long=Osteurop\u00E4ische Zeit -Europe/Zurich.generic.long=Mitteleurop\u00E4ische Zeit -GB-Eire.generic.long=Britische Zeit -GB.generic.long=Britische Zeit -GMT.generic.long=Greenwich Zeit -Greenwich.generic.long=Greenwich Zeit -HST.generic.long=Zeitzone f\u00fcr Hawaii -Hongkong.generic.long=Hongkong Zeit -IET.generic.long=\u00D6stliche Zeitzone -IST.generic.long=Zeitzone f\u00FCr Indien -Iceland.generic.long=Greenwich Zeit -Indian/Antananarivo.generic.long=Ostafrikanische Zeit -Indian/Chagos.generic.long=Indischer Ozean Territorium Zeit -Indian/Christmas.generic.long=Weihnachtsinseln Zeit -Indian/Cocos.generic.long=Kokos-Inseln Zeit -Indian/Comoro.generic.long=Ostafrikanische Zeit -Indian/Kerguelen.generic.long=Franz\u00F6sisch S\u00FCd- u. Antarktische Landzeit -Indian/Mahe.generic.long=Seychellen Zeit -Indian/Maldives.generic.long=Maledivische Zeit -Indian/Mauritius.generic.long=Mauritius Zeit -Indian/Mayotte.generic.long=Ostafrikanische Zeit -Indian/Reunion.generic.long=R\u00E9union Zeit -Iran.generic.long=Iranische Zeit -Israel.generic.long=Zeitzone f\u00FCr Israel -JST.generic.long=Zeitzone f\u00FCr Japan -Jamaica.generic.long=\u00D6stliche Zeitzone -Japan.generic.long=Zeitzone f\u00FCr Japan -Kwajalein.generic.long=Marshallinseln Zeit -Libya.generic.long=Osteurop\u00e4ische Zeit -MET.generic.long=MET -MIT.generic.long=West Samoa Zeit -MST.generic.long=Zeitzone Mountain -MST7MDT.generic.long=Zeitzone Mountain -Mexico/BajaNorte.generic.long=Zeitzone Pazifik -Mexico/BajaSur.generic.long=Zeitzone Mountain -Mexico/General.generic.long=Zentrale Zeitzone -NET.generic.long=Armenische Zeit -NST.generic.long=Zeitzone f\u00FCr Neuseeland -NZ-CHAT.generic.long=Zeitzone f\u00FCr Chatham-Inseln -NZ.generic.long=Zeitzone f\u00FCr Neuseeland -Navajo.generic.long=Zeitzone Mountain -PLT.generic.long=Pakistanische Zeit -PNT.generic.long=Zeitzone Mountain -PRC.generic.long=Zeitzone f\u00FCr China -PRT.generic.long=Zeitzone Atlantik -PST.generic.long=Zeitzone Pazifik -PST8PDT.generic.long=Zeitzone Pazifik -Pacific/Apia.generic.long=West Samoa Zeit -Pacific/Auckland.generic.long=Zeitzone f\u00FCr Neuseeland -Pacific/Chatham.generic.long=Zeitzone f\u00FCr Chatham-Inseln -Pacific/Chuuk.daylight.long=Chuuk Sommerzeit -Pacific/Chuuk.generic.long=Chuuk Zeit -Pacific/Chuuk.standard.long=Chuuk Zeit -Pacific/Easter.generic.long=Osterinseln Zeit -Pacific/Efate.generic.long=Vanuatu Zeit -Pacific/Enderbury.generic.long=Phoenix Inseln Zeit -Pacific/Fakaofo.generic.long=Tokelau Zeit -Pacific/Fiji.generic.long=Fidschi Zeit -Pacific/Funafuti.generic.long=Tuvalu Zeit -Pacific/Galapagos.generic.long=Galapagos Zeit -Pacific/Gambier.generic.long=Gambier Zeit -Pacific/Guadalcanal.generic.long=Salomoninseln Zeit -Pacific/Guam.generic.long=Zeitzone f\u00FCr die Marianen -Pacific/Honolulu.generic.long=Zeitzone f\u00FCr Hawaii -Pacific/Johnston.generic.long=Zeitzone f\u00FCr Hawaii -Pacific/Kiritimati.generic.long=Line Inseln Zeit -Pacific/Kosrae.generic.long=Kosrae Zeit -Pacific/Kwajalein.generic.long=Marshallinseln Zeit -Pacific/Majuro.generic.long=Marshallinseln Zeit -Pacific/Marquesas.generic.long=Marquesas Zeit -Pacific/Midway.generic.long=Zeitzone f\u00FCr Samoa -Pacific/Nauru.generic.long=Nauru Zeit -Pacific/Niue.generic.long=Niue Zeit -Pacific/Norfolk.generic.long=Norfolk Zeit -Pacific/Noumea.generic.long=Neukaledonische Zeit -Pacific/Pago_Pago.generic.long=Zeitzone f\u00FCr Samoa -Pacific/Palau.generic.long=Palau Zeit -Pacific/Pitcairn.generic.long=Zeitzone f\u00FCr Pitcairn -Pacific/Pohnpei.daylight.long=Pohnpei Sommerzeit -Pacific/Pohnpei.generic.long=Pohnpei-Inseln Zeit -Pacific/Pohnpei.standard.long=Pohnpei Zeit -Pacific/Ponape.daylight.long=Pohnpei Sommerzeit -Pacific/Ponape.generic.long=Pohnpei-Inseln Zeit -Pacific/Ponape.standard.long=Pohnpei Zeit -Pacific/Port_Moresby.generic.long=Papua-Neuguinea Zeit -Pacific/Rarotonga.generic.long=Cook-Inseln Zeit -Pacific/Saipan.generic.long=Zeitzone f\u00FCr die Marianen -Pacific/Samoa.generic.long=Zeitzone f\u00FCr Samoa -Pacific/Tahiti.generic.long=Tahiti Zeit -Pacific/Tarawa.generic.long=Gilbert-Inseln Zeit -Pacific/Tongatapu.generic.long=Tonga Zeit -Pacific/Truk.daylight.long=Chuuk Sommerzeit -Pacific/Truk.generic.long=Chuuk Zeit -Pacific/Truk.standard.long=Chuuk Zeit -Pacific/Wake.generic.long=Wake Zeit -Pacific/Wallis.generic.long=Wallis u. Futuna Zeit -Pacific/Yap.daylight.long=Chuuk Sommerzeit -Pacific/Yap.generic.long=Chuuk Zeit -Pacific/Yap.standard.long=Chuuk Zeit -Poland.generic.long=Mitteleurop\u00E4ische Zeit -Portugal.generic.long=Westeurop\u00E4ische Zeit -ROK.generic.long=Zeitzone f\u00FCr Korea -SST.generic.long=Salomoninseln Zeit -Singapore.generic.long=Singapur Zeit -SystemV/AST4.generic.long=Zeitzone Atlantik -SystemV/AST4ADT.generic.long=Zeitzone Atlantik -SystemV/CST6.generic.long=Zentrale Zeitzone -SystemV/CST6CDT.generic.long=Zentrale Zeitzone -SystemV/EST5.generic.long=\u00D6stliche Zeitzone -SystemV/EST5EDT.generic.long=\u00D6stliche Zeitzone -SystemV/HST10.generic.long=Zeitzone f\u00FCr Hawaii -SystemV/MST7.generic.long=Zeitzone Mountain -SystemV/MST7MDT.generic.long=Zeitzone Mountain -SystemV/PST8.generic.long=Zeitzone Pazifik -SystemV/PST8PDT.generic.long=Zeitzone Pazifik -SystemV/YST9.generic.long=Zeitzone f\u00FCr Alaska -SystemV/YST9YDT.generic.long=Zeitzone f\u00FCr Alaska -Turkey.generic.long=Osteurop\u00E4ische Zeit -UCT.generic.long=Koordinierte Universalzeit -US/Alaska.generic.long=Zeitzone f\u00FCr Alaska -US/Aleutian.generic.long=Zeitzone f\u00FCr Hawaii und Al\u00EButen -US/Arizona.generic.long=Zeitzone Mountain -US/Central.generic.long=Zentrale Zeitzone -US/East-Indiana.generic.long=\u00D6stliche Zeitzone -US/Eastern.generic.long=\u00D6stliche Zeitzone -US/Hawaii.generic.long=Zeitzone f\u00FCr Hawaii -US/Indiana-Starke.generic.long=Zentrale Zeitzone -US/Michigan.generic.long=\u00D6stliche Zeitzone -US/Mountain.generic.long=Zeitzone Mountain -US/Pacific-New.generic.long=Zeitzone Pazifik -US/Pacific.generic.long=Zeitzone Pazifik -US/Samoa.generic.long=Zeitzone f\u00FCr Samoa -UTC.generic.long=Koordinierte Universalzeit -Universal.generic.long=Koordinierte Universalzeit -VST.generic.long=Indochina Zeit -W-SU.generic.long=Zeitzone f\u00FCr Moskau -WET.generic.long=Westeurop\u00e4ische Zeit -Zulu.generic.long=Koordinierte Universalzeit diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_de_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_de_short.properties deleted file mode 100644 index 8bbaeb45160..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_de_short.properties +++ /dev/null @@ -1,1743 +0,0 @@ -ACT.daylight.short=CST -ACT.generic.short=CT -ACT.standard.short=CST -AET.daylight.short=EST -AET.generic.short=ET -AET.standard.short=EST -Africa/Abidjan.daylight.short=GMT -Africa/Abidjan.generic.short=GMT -Africa/Abidjan.standard.short=GMT -Africa/Accra.daylight.short=GHST -Africa/Accra.generic.short=GMT -Africa/Accra.standard.short=GMT -Africa/Addis_Ababa.daylight.short=EAST -Africa/Addis_Ababa.generic.short=EAT -Africa/Addis_Ababa.standard.short=EAT -Africa/Algiers.daylight.short=MESZ -Africa/Algiers.generic.short=MEZ -Africa/Algiers.standard.short=MEZ -Africa/Asmara.daylight.short=EAST -Africa/Asmara.generic.short=EAT -Africa/Asmara.standard.short=EAT -Africa/Asmera.daylight.short=EAST -Africa/Asmera.generic.short=EAT -Africa/Asmera.standard.short=EAT -Africa/Bamako.daylight.short=GMT -Africa/Bamako.generic.short=GMT -Africa/Bamako.standard.short=GMT -Africa/Bangui.daylight.short=WAST -Africa/Bangui.generic.short=WAT -Africa/Bangui.standard.short=WAT -Africa/Banjul.daylight.short=GMT -Africa/Banjul.generic.short=GMT -Africa/Banjul.standard.short=GMT -Africa/Bissau.daylight.short=GMT -Africa/Bissau.generic.short=GMT -Africa/Bissau.standard.short=GMT -Africa/Blantyre.daylight.short=CAST -Africa/Blantyre.generic.short=CAT -Africa/Blantyre.standard.short=CAT -Africa/Brazzaville.daylight.short=WAST -Africa/Brazzaville.generic.short=WAT -Africa/Brazzaville.standard.short=WAT -Africa/Bujumbura.daylight.short=CAST -Africa/Bujumbura.generic.short=CAT -Africa/Bujumbura.standard.short=CAT -Africa/Cairo.daylight.short=OESZ -Africa/Cairo.generic.short=OEZ -Africa/Cairo.standard.short=OEZ -Africa/Casablanca.daylight.short=WESZ -Africa/Casablanca.generic.short=WEZ -Africa/Casablanca.standard.short=WEZ -Africa/Ceuta.daylight.short=MESZ -Africa/Ceuta.generic.short=MEZ -Africa/Ceuta.standard.short=MEZ -Africa/Conakry.daylight.short=GMT -Africa/Conakry.generic.short=GMT -Africa/Conakry.standard.short=GMT -Africa/Dakar.daylight.short=GMT -Africa/Dakar.generic.short=GMT -Africa/Dakar.standard.short=GMT -Africa/Dar_es_Salaam.daylight.short=EAST -Africa/Dar_es_Salaam.generic.short=EAT -Africa/Dar_es_Salaam.standard.short=EAT -Africa/Djibouti.daylight.short=EAST -Africa/Djibouti.generic.short=EAT -Africa/Djibouti.standard.short=EAT -Africa/Douala.daylight.short=WAST -Africa/Douala.generic.short=WAT -Africa/Douala.standard.short=WAT -Africa/El_Aaiun.daylight.short=WESZ -Africa/El_Aaiun.generic.short=WEZ -Africa/El_Aaiun.standard.short=WEZ -Africa/Freetown.daylight.short=SLST -Africa/Freetown.generic.short=SLT -Africa/Freetown.standard.short=GMT -Africa/Gaborone.daylight.short=CAST -Africa/Gaborone.generic.short=CAT -Africa/Gaborone.standard.short=CAT -Africa/Harare.daylight.short=CAST -Africa/Harare.generic.short=CAT -Africa/Harare.standard.short=CAT -Africa/Johannesburg.daylight.short=SAST -Africa/Johannesburg.generic.short=SAT -Africa/Johannesburg.standard.short=SAST -Africa/Juba.daylight.short=EAST -Africa/Juba.generic.short=EAT -Africa/Juba.standard.short=EAT -Africa/Kampala.daylight.short=EAST -Africa/Kampala.generic.short=EAT -Africa/Kampala.standard.short=EAT -Africa/Khartoum.daylight.short=EAST -Africa/Khartoum.generic.short=EAT -Africa/Khartoum.standard.short=EAT -Africa/Kigali.daylight.short=CAST -Africa/Kigali.generic.short=CAT -Africa/Kigali.standard.short=CAT -Africa/Kinshasa.daylight.short=WAST -Africa/Kinshasa.generic.short=WAT -Africa/Kinshasa.standard.short=WAT -Africa/Lagos.daylight.short=WAST -Africa/Lagos.generic.short=WAT -Africa/Lagos.standard.short=WAT -Africa/Libreville.daylight.short=WAST -Africa/Libreville.generic.short=WAT -Africa/Libreville.standard.short=WAT -Africa/Lome.daylight.short=GMT -Africa/Lome.generic.short=GMT -Africa/Lome.standard.short=GMT -Africa/Luanda.daylight.short=WAST -Africa/Luanda.generic.short=WAT -Africa/Luanda.standard.short=WAT -Africa/Lubumbashi.daylight.short=CAST -Africa/Lubumbashi.generic.short=CAT -Africa/Lubumbashi.standard.short=CAT -Africa/Lusaka.daylight.short=CAST -Africa/Lusaka.generic.short=CAT -Africa/Lusaka.standard.short=CAT -Africa/Malabo.daylight.short=WAST -Africa/Malabo.generic.short=WAT -Africa/Malabo.standard.short=WAT -Africa/Maputo.daylight.short=CAST -Africa/Maputo.generic.short=CAT -Africa/Maputo.standard.short=CAT -Africa/Maseru.daylight.short=SAST -Africa/Maseru.generic.short=SAT -Africa/Maseru.standard.short=SAST -Africa/Mbabane.daylight.short=SAST -Africa/Mbabane.generic.short=SAT -Africa/Mbabane.standard.short=SAST -Africa/Mogadishu.daylight.short=EAST -Africa/Mogadishu.generic.short=EAT -Africa/Mogadishu.standard.short=EAT -Africa/Monrovia.daylight.short=GMT -Africa/Monrovia.generic.short=GMT -Africa/Monrovia.standard.short=GMT -Africa/Nairobi.daylight.short=EAST -Africa/Nairobi.generic.short=EAT -Africa/Nairobi.standard.short=EAT -Africa/Ndjamena.daylight.short=WAST -Africa/Ndjamena.generic.short=WAT -Africa/Ndjamena.standard.short=WAT -Africa/Niamey.daylight.short=WAST -Africa/Niamey.generic.short=WAT -Africa/Niamey.standard.short=WAT -Africa/Nouakchott.daylight.short=GMT -Africa/Nouakchott.generic.short=GMT -Africa/Nouakchott.standard.short=GMT -Africa/Ouagadougou.daylight.short=GMT -Africa/Ouagadougou.generic.short=GMT -Africa/Ouagadougou.standard.short=GMT -Africa/Porto-Novo.daylight.short=WAST -Africa/Porto-Novo.generic.short=WAT -Africa/Porto-Novo.standard.short=WAT -Africa/Sao_Tome.daylight.short=GMT -Africa/Sao_Tome.generic.short=GMT -Africa/Sao_Tome.standard.short=GMT -Africa/Timbuktu.daylight.short=GMT -Africa/Timbuktu.generic.short=GMT -Africa/Timbuktu.standard.short=GMT -Africa/Tripoli.daylight.short=OESZ -Africa/Tripoli.generic.short=OEZ -Africa/Tripoli.standard.short=OEZ -Africa/Tunis.daylight.short=MESZ -Africa/Tunis.generic.short=MEZ -Africa/Tunis.standard.short=MEZ -Africa/Windhoek.daylight.short=WAST -Africa/Windhoek.generic.short=WAT -Africa/Windhoek.standard.short=WAT -AGT.daylight.short=ARST -AGT.generic.short=ART -AGT.standard.short=ART -America/Adak.daylight.short=HADT -America/Adak.generic.short=HAT -America/Adak.standard.short=HAST -America/Anchorage.daylight.short=AKDT -America/Anchorage.generic.short=AKT -America/Anchorage.standard.short=AKST -America/Anguilla.daylight.short=ADT -America/Anguilla.generic.short=AT -America/Anguilla.standard.short=AST -America/Antigua.daylight.short=ADT -America/Antigua.generic.short=AT -America/Antigua.standard.short=AST -America/Araguaina.daylight.short=BRST -America/Araguaina.generic.short=BRT -America/Araguaina.standard.short=BRT -America/Argentina/Buenos_Aires.daylight.short=ARST -America/Argentina/Buenos_Aires.generic.short=ART -America/Argentina/Buenos_Aires.standard.short=ART -America/Argentina/Catamarca.daylight.short=ARST -America/Argentina/Catamarca.generic.short=ART -America/Argentina/Catamarca.standard.short=ART -America/Argentina/ComodRivadavia.daylight.short=ARST -America/Argentina/ComodRivadavia.generic.short=ART -America/Argentina/ComodRivadavia.standard.short=ART -America/Argentina/Cordoba.daylight.short=ARST -America/Argentina/Cordoba.generic.short=ART -America/Argentina/Cordoba.standard.short=ART -America/Argentina/Jujuy.daylight.short=ARST -America/Argentina/Jujuy.generic.short=ART -America/Argentina/Jujuy.standard.short=ART -America/Argentina/La_Rioja.daylight.short=ARST -America/Argentina/La_Rioja.generic.short=ART -America/Argentina/La_Rioja.standard.short=ART -America/Argentina/Mendoza.daylight.short=ARST -America/Argentina/Mendoza.generic.short=ART -America/Argentina/Mendoza.standard.short=ART -America/Argentina/Rio_Gallegos.daylight.short=ARST -America/Argentina/Rio_Gallegos.generic.short=ART -America/Argentina/Rio_Gallegos.standard.short=ART -America/Argentina/Salta.daylight.short=ARST -America/Argentina/Salta.generic.short=ART -America/Argentina/Salta.standard.short=ART -America/Argentina/San_Juan.daylight.short=ARST -America/Argentina/San_Juan.generic.short=ART -America/Argentina/San_Juan.standard.short=ART -America/Argentina/San_Luis.daylight.short=ARST -America/Argentina/San_Luis.generic.short=ART -America/Argentina/San_Luis.standard.short=ART -America/Argentina/Tucuman.daylight.short=ARST -America/Argentina/Tucuman.generic.short=ART -America/Argentina/Tucuman.standard.short=ART -America/Argentina/Ushuaia.daylight.short=ARST -America/Argentina/Ushuaia.generic.short=ART -America/Argentina/Ushuaia.standard.short=ART -America/Aruba.daylight.short=ADT -America/Aruba.generic.short=AT -America/Aruba.standard.short=AST -America/Asuncion.daylight.short=PYST -America/Asuncion.generic.short=PYT -America/Asuncion.standard.short=PYT -America/Atikokan.daylight.short=EDT -America/Atikokan.generic.short=ET -America/Atikokan.standard.short=EST -America/Atka.daylight.short=HADT -America/Atka.generic.short=HAT -America/Atka.standard.short=HAST -America/Bahia_Banderas.daylight.short=CDT -America/Bahia_Banderas.generic.short=CT -America/Bahia_Banderas.standard.short=CST -America/Bahia.daylight.short=BRST -America/Bahia.generic.short=BRT -America/Bahia.standard.short=BRT -America/Barbados.daylight.short=ADT -America/Barbados.generic.short=AT -America/Barbados.standard.short=AST -America/Belem.daylight.short=BRST -America/Belem.generic.short=BRT -America/Belem.standard.short=BRT -America/Belize.daylight.short=CDT -America/Belize.generic.short=CT -America/Belize.standard.short=CST -America/Blanc-Sablon.daylight.short=ADT -America/Blanc-Sablon.generic.short=AT -America/Blanc-Sablon.standard.short=AST -America/Boa_Vista.daylight.short=AMST -America/Boa_Vista.generic.short=AMT -America/Boa_Vista.standard.short=AMT -America/Bogota.daylight.short=COST -America/Bogota.generic.short=COT -America/Bogota.standard.short=COT -America/Boise.daylight.short=MDT -America/Boise.generic.short=MT -America/Boise.standard.short=MST -America/Buenos_Aires.daylight.short=ARST -America/Buenos_Aires.generic.short=ART -America/Buenos_Aires.standard.short=ART -America/Cambridge_Bay.daylight.short=MDT -America/Cambridge_Bay.generic.short=MT -America/Cambridge_Bay.standard.short=MST -America/Campo_Grande.daylight.short=AMST -America/Campo_Grande.generic.short=AMT -America/Campo_Grande.standard.short=AMT -America/Cancun.daylight.short=CDT -America/Cancun.generic.short=CT -America/Cancun.standard.short=CST -America/Caracas.daylight.short=VEST -America/Caracas.generic.short=VET -America/Caracas.standard.short=VET -America/Catamarca.daylight.short=ARST -America/Catamarca.generic.short=ART -America/Catamarca.standard.short=ART -America/Cayenne.daylight.short=GFST -America/Cayenne.generic.short=GFT -America/Cayenne.standard.short=GFT -America/Cayman.daylight.short=EDT -America/Cayman.generic.short=ET -America/Cayman.standard.short=EST -America/Chicago.daylight.short=CDT -America/Chicago.generic.short=CT -America/Chicago.standard.short=CST -America/Chihuahua.daylight.short=MDT -America/Chihuahua.generic.short=MT -America/Chihuahua.standard.short=MST -America/Coral_Harbour.daylight.short=EDT -America/Coral_Harbour.generic.short=ET -America/Coral_Harbour.standard.short=EST -America/Cordoba.daylight.short=ARST -America/Cordoba.generic.short=ART -America/Cordoba.standard.short=ART -America/Costa_Rica.daylight.short=CDT -America/Costa_Rica.generic.short=CT -America/Costa_Rica.standard.short=CST -America/Creston.daylight.short=MDT -America/Creston.generic.short=MT -America/Creston.standard.short=MST -America/Cuiaba.daylight.short=AMST -America/Cuiaba.generic.short=AMT -America/Cuiaba.standard.short=AMT -America/Curacao.daylight.short=ADT -America/Curacao.generic.short=AT -America/Curacao.standard.short=AST -America/Danmarkshavn.daylight.short=GMT -America/Danmarkshavn.generic.short=GMT -America/Danmarkshavn.standard.short=GMT -America/Dawson_Creek.daylight.short=MDT -America/Dawson_Creek.generic.short=MT -America/Dawson_Creek.standard.short=MST -America/Dawson.daylight.short=PDT -America/Dawson.generic.short=PT -America/Dawson.standard.short=PST -America/Denver.daylight.short=MDT -America/Denver.generic.short=MT -America/Denver.standard.short=MST -America/Detroit.daylight.short=EDT -America/Detroit.generic.short=ET -America/Detroit.standard.short=EST -America/Dominica.daylight.short=ADT -America/Dominica.generic.short=AT -America/Dominica.standard.short=AST -America/Edmonton.daylight.short=MDT -America/Edmonton.generic.short=MT -America/Edmonton.standard.short=MST -America/Eirunepe.daylight.short=ACST -America/Eirunepe.generic.short=ACT -America/Eirunepe.standard.short=ACT -America/El_Salvador.daylight.short=CDT -America/El_Salvador.generic.short=CT -America/El_Salvador.standard.short=CST -America/Ensenada.daylight.short=PDT -America/Ensenada.generic.short=PT -America/Ensenada.standard.short=PST -America/Fortaleza.daylight.short=BRST -America/Fortaleza.generic.short=BRT -America/Fortaleza.standard.short=BRT -America/Fort_Wayne.daylight.short=EDT -America/Fort_Wayne.generic.short=ET -America/Fort_Wayne.standard.short=EST -America/Glace_Bay.daylight.short=ADT -America/Glace_Bay.generic.short=AT -America/Glace_Bay.standard.short=AST -America/Godthab.daylight.short=WGST -America/Godthab.generic.short=WGT -America/Godthab.standard.short=WGT -America/Goose_Bay.daylight.short=ADT -America/Goose_Bay.generic.short=AT -America/Goose_Bay.standard.short=AST -America/Grand_Turk.daylight.short=EDT -America/Grand_Turk.generic.short=ET -America/Grand_Turk.standard.short=EST -America/Grenada.daylight.short=ADT -America/Grenada.generic.short=AT -America/Grenada.standard.short=AST -America/Guadeloupe.daylight.short=ADT -America/Guadeloupe.generic.short=AT -America/Guadeloupe.standard.short=AST -America/Guatemala.daylight.short=CDT -America/Guatemala.generic.short=CT -America/Guatemala.standard.short=CST -America/Guayaquil.daylight.short=ECST -America/Guayaquil.generic.short=ECT -America/Guayaquil.standard.short=ECT -America/Guyana.daylight.short=GYST -America/Guyana.generic.short=GYT -America/Guyana.standard.short=GYT -America/Halifax.daylight.short=ADT -America/Halifax.generic.short=AT -America/Halifax.standard.short=AST -America/Havana.daylight.short=CDT -America/Havana.generic.short=CT -America/Havana.standard.short=CST -America/Hermosillo.daylight.short=MDT -America/Hermosillo.generic.short=MT -America/Hermosillo.standard.short=MST -America/Indiana/Indianapolis.daylight.short=EDT -America/Indiana/Indianapolis.generic.short=ET -America/Indiana/Indianapolis.standard.short=EST -America/Indiana/Knox.daylight.short=CDT -America/Indiana/Knox.generic.short=CT -America/Indiana/Knox.standard.short=CST -America/Indiana/Marengo.daylight.short=EDT -America/Indiana/Marengo.generic.short=ET -America/Indiana/Marengo.standard.short=EST -America/Indiana/Petersburg.daylight.short=EDT -America/Indiana/Petersburg.generic.short=ET -America/Indiana/Petersburg.standard.short=EST -America/Indianapolis.daylight.short=EDT -America/Indianapolis.generic.short=ET -America/Indianapolis.standard.short=EST -America/Indiana/Tell_City.daylight.short=CDT -America/Indiana/Tell_City.generic.short=CT -America/Indiana/Tell_City.standard.short=CST -America/Indiana/Vevay.daylight.short=EDT -America/Indiana/Vevay.generic.short=ET -America/Indiana/Vevay.standard.short=EST -America/Indiana/Vincennes.daylight.short=EDT -America/Indiana/Vincennes.generic.short=ET -America/Indiana/Vincennes.standard.short=EST -America/Indiana/Winamac.daylight.short=EDT -America/Indiana/Winamac.generic.short=ET -America/Indiana/Winamac.standard.short=EST -America/Inuvik.daylight.short=MDT -America/Inuvik.generic.short=MT -America/Inuvik.standard.short=MST -America/Iqaluit.daylight.short=EDT -America/Iqaluit.generic.short=ET -America/Iqaluit.standard.short=EST -America/Jamaica.daylight.short=EDT -America/Jamaica.generic.short=ET -America/Jamaica.standard.short=EST -America/Jujuy.daylight.short=ARST -America/Jujuy.generic.short=ART -America/Jujuy.standard.short=ART -America/Juneau.daylight.short=AKDT -America/Juneau.generic.short=AKT -America/Juneau.standard.short=AKST -America/Kentucky/Louisville.daylight.short=EDT -America/Kentucky/Louisville.generic.short=ET -America/Kentucky/Louisville.standard.short=EST -America/Kentucky/Monticello.daylight.short=EDT -America/Kentucky/Monticello.generic.short=ET -America/Kentucky/Monticello.standard.short=EST -America/Knox_IN.daylight.short=CDT -America/Knox_IN.generic.short=CT -America/Knox_IN.standard.short=CST -America/Kralendijk.daylight.short=ADT -America/Kralendijk.generic.short=AT -America/Kralendijk.standard.short=AST -America/La_Paz.daylight.short=BOST -America/La_Paz.generic.short=BOT -America/La_Paz.standard.short=BOT -America/Lima.daylight.short=PEST -America/Lima.generic.short=PET -America/Lima.standard.short=PET -America/Los_Angeles.daylight.short=PDT -America/Los_Angeles.generic.short=PT -America/Los_Angeles.standard.short=PST -America/Louisville.daylight.short=EDT -America/Louisville.generic.short=ET -America/Louisville.standard.short=EST -America/Lower_Princes.daylight.short=ADT -America/Lower_Princes.generic.short=AT -America/Lower_Princes.standard.short=AST -America/Maceio.daylight.short=BRST -America/Maceio.generic.short=BRT -America/Maceio.standard.short=BRT -America/Managua.daylight.short=CDT -America/Managua.generic.short=CT -America/Managua.standard.short=CST -America/Manaus.daylight.short=AMST -America/Manaus.generic.short=AMT -America/Manaus.standard.short=AMT -America/Marigot.daylight.short=ADT -America/Marigot.generic.short=AT -America/Marigot.standard.short=AST -America/Martinique.daylight.short=ADT -America/Martinique.generic.short=AT -America/Martinique.standard.short=AST -America/Matamoros.daylight.short=CDT -America/Matamoros.generic.short=CT -America/Matamoros.standard.short=CST -America/Mazatlan.daylight.short=MDT -America/Mazatlan.generic.short=MT -America/Mazatlan.standard.short=MST -America/Mendoza.daylight.short=ARST -America/Mendoza.generic.short=ART -America/Mendoza.standard.short=ART -America/Menominee.daylight.short=CDT -America/Menominee.generic.short=CT -America/Menominee.standard.short=CST -America/Merida.daylight.short=CDT -America/Merida.generic.short=CT -America/Merida.standard.short=CST -America/Metlakatla.daylight.short=MeDT -America/Metlakatla.generic.short=MeT -America/Metlakatla.standard.short=MeST -America/Mexico_City.daylight.short=CDT -America/Mexico_City.generic.short=CT -America/Mexico_City.standard.short=CST -America/Miquelon.daylight.short=PMDT -America/Miquelon.generic.short=PMT -America/Miquelon.standard.short=PMST -America/Moncton.daylight.short=ADT -America/Moncton.generic.short=AT -America/Moncton.standard.short=AST -America/Monterrey.daylight.short=CDT -America/Monterrey.generic.short=CT -America/Monterrey.standard.short=CST -America/Montevideo.daylight.short=UYST -America/Montevideo.generic.short=UYT -America/Montevideo.standard.short=UYT -America/Montreal.daylight.short=EDT -America/Montreal.generic.short=ET -America/Montreal.standard.short=EST -America/Montserrat.daylight.short=ADT -America/Montserrat.generic.short=AT -America/Montserrat.standard.short=AST -America/Nassau.daylight.short=EDT -America/Nassau.generic.short=ET -America/Nassau.standard.short=EST -America/New_York.daylight.short=EDT -America/New_York.generic.short=ET -America/New_York.standard.short=EST -America/Nipigon.daylight.short=EDT -America/Nipigon.generic.short=ET -America/Nipigon.standard.short=EST -America/Nome.daylight.short=AKDT -America/Nome.generic.short=AKT -America/Nome.standard.short=AKST -America/Noronha.daylight.short=FNST -America/Noronha.generic.short=FNT -America/Noronha.standard.short=FNT -America/North_Dakota/Beulah.daylight.short=CDT -America/North_Dakota/Beulah.generic.short=CT -America/North_Dakota/Beulah.standard.short=CST -America/North_Dakota/Center.daylight.short=CDT -America/North_Dakota/Center.generic.short=CT -America/North_Dakota/Center.standard.short=CST -America/North_Dakota/New_Salem.daylight.short=CDT -America/North_Dakota/New_Salem.generic.short=CT -America/North_Dakota/New_Salem.standard.short=CST -America/Ojinaga.daylight.short=MDT -America/Ojinaga.generic.short=MT -America/Ojinaga.standard.short=MST -America/Panama.daylight.short=EDT -America/Panama.generic.short=ET -America/Panama.standard.short=EST -America/Pangnirtung.daylight.short=EDT -America/Pangnirtung.generic.short=ET -America/Pangnirtung.standard.short=EST -America/Paramaribo.daylight.short=SRST -America/Paramaribo.generic.short=SRT -America/Paramaribo.standard.short=SRT -America/Phoenix.daylight.short=MDT -America/Phoenix.generic.short=MT -America/Phoenix.standard.short=MST -America/Port-au-Prince.daylight.short=EDT -America/Port-au-Prince.generic.short=ET -America/Port-au-Prince.standard.short=EST -America/Porto_Acre.daylight.short=ACST -America/Porto_Acre.generic.short=ACT -America/Porto_Acre.standard.short=ACT -America/Port_of_Spain.daylight.short=ADT -America/Port_of_Spain.generic.short=AT -America/Port_of_Spain.standard.short=AST -America/Porto_Velho.daylight.short=AMST -America/Porto_Velho.generic.short=AMT -America/Porto_Velho.standard.short=AMT -America/Puerto_Rico.daylight.short=ADT -America/Puerto_Rico.generic.short=AT -America/Puerto_Rico.standard.short=AST -America/Rainy_River.daylight.short=CDT -America/Rainy_River.generic.short=CT -America/Rainy_River.standard.short=CST -America/Rankin_Inlet.daylight.short=CDT -America/Rankin_Inlet.generic.short=CT -America/Rankin_Inlet.standard.short=CST -America/Recife.daylight.short=BRST -America/Recife.generic.short=BRT -America/Recife.standard.short=BRT -America/Regina.daylight.short=CDT -America/Regina.generic.short=CT -America/Regina.standard.short=CST -America/Resolute.daylight.short=CDT -America/Resolute.generic.short=CT -America/Resolute.standard.short=CST -America/Rio_Branco.daylight.short=ACST -America/Rio_Branco.generic.short=ACT -America/Rio_Branco.standard.short=ACT -America/Rosario.daylight.short=ARST -America/Rosario.generic.short=ART -America/Rosario.standard.short=ART -America/Santa_Isabel.daylight.short=PDT -America/Santa_Isabel.generic.short=PT -America/Santa_Isabel.standard.short=PST -America/Santarem.daylight.short=BRST -America/Santarem.generic.short=BRT -America/Santarem.standard.short=BRT -America/Santiago.daylight.short=CLST -America/Santiago.generic.short=CLT -America/Santiago.standard.short=CLT -America/Santo_Domingo.daylight.short=ADT -America/Santo_Domingo.generic.short=AT -America/Santo_Domingo.standard.short=AST -America/Sao_Paulo.daylight.short=BRST -America/Sao_Paulo.generic.short=BRT -America/Sao_Paulo.standard.short=BRT -America/Scoresbysund.daylight.short=EGST -America/Scoresbysund.generic.short=EGT -America/Scoresbysund.standard.short=EGT -America/Shiprock.daylight.short=MDT -America/Shiprock.generic.short=MT -America/Shiprock.standard.short=MST -America/Sitka.daylight.short=AKDT -America/Sitka.generic.short=AKT -America/Sitka.standard.short=AKST -America/St_Barthelemy.daylight.short=ADT -America/St_Barthelemy.generic.short=AT -America/St_Barthelemy.standard.short=AST -America/St_Johns.daylight.short=NDT -America/St_Johns.generic.short=NT -America/St_Johns.standard.short=NST -America/St_Kitts.daylight.short=ADT -America/St_Kitts.generic.short=AT -America/St_Kitts.standard.short=AST -America/St_Lucia.daylight.short=ADT -America/St_Lucia.generic.short=AT -America/St_Lucia.standard.short=AST -America/St_Thomas.daylight.short=ADT -America/St_Thomas.generic.short=AT -America/St_Thomas.standard.short=AST -America/St_Vincent.daylight.short=ADT -America/St_Vincent.generic.short=AT -America/St_Vincent.standard.short=AST -America/Swift_Current.daylight.short=CDT -America/Swift_Current.generic.short=CT -America/Swift_Current.standard.short=CST -America/Tegucigalpa.daylight.short=CDT -America/Tegucigalpa.generic.short=CT -America/Tegucigalpa.standard.short=CST -America/Thule.daylight.short=ADT -America/Thule.generic.short=AT -America/Thule.standard.short=AST -America/Thunder_Bay.daylight.short=EDT -America/Thunder_Bay.generic.short=ET -America/Thunder_Bay.standard.short=EST -America/Tijuana.daylight.short=PDT -America/Tijuana.generic.short=PT -America/Tijuana.standard.short=PST -America/Toronto.daylight.short=EDT -America/Toronto.generic.short=ET -America/Toronto.standard.short=EST -America/Tortola.daylight.short=ADT -America/Tortola.generic.short=AT -America/Tortola.standard.short=AST -America/Vancouver.daylight.short=PDT -America/Vancouver.generic.short=PT -America/Vancouver.standard.short=PST -America/Virgin.daylight.short=ADT -America/Virgin.generic.short=AT -America/Virgin.standard.short=AST -America/Whitehorse.daylight.short=PDT -America/Whitehorse.generic.short=PT -America/Whitehorse.standard.short=PST -America/Winnipeg.daylight.short=CDT -America/Winnipeg.generic.short=CT -America/Winnipeg.standard.short=CST -America/Yakutat.daylight.short=AKDT -America/Yakutat.generic.short=AKT -America/Yakutat.standard.short=AKST -America/Yellowknife.daylight.short=MDT -America/Yellowknife.generic.short=MT -America/Yellowknife.standard.short=MST -Antarctica/Casey.daylight.short=WST -Antarctica/Casey.generic.short=WT -Antarctica/Casey.standard.short=WST -Antarctica/Davis.daylight.short=DAVST -Antarctica/Davis.generic.short=DAVT -Antarctica/Davis.standard.short=DAVT -Antarctica/DumontDUrville.daylight.short=DDUST -Antarctica/DumontDUrville.generic.short=DDUT -Antarctica/DumontDUrville.standard.short=DDUT -Antarctica/Macquarie.daylight.short=MIST -Antarctica/Macquarie.generic.short=MIST -Antarctica/Macquarie.standard.short=MIST -Antarctica/Mawson.daylight.short=MAWST -Antarctica/Mawson.generic.short=MAWT -Antarctica/Mawson.standard.short=MAWT -Antarctica/McMurdo.daylight.short=NZDT -Antarctica/McMurdo.generic.short=NZT -Antarctica/McMurdo.standard.short=NZST -Antarctica/Palmer.daylight.short=CLST -Antarctica/Palmer.generic.short=CLT -Antarctica/Palmer.standard.short=CLT -Antarctica/Rothera.daylight.short=ROTST -Antarctica/Rothera.generic.short=ROTT -Antarctica/Rothera.standard.short=ROTT -Antarctica/South_Pole.daylight.short=NZDT -Antarctica/South_Pole.generic.short=NZT -Antarctica/South_Pole.standard.short=NZST -Antarctica/Syowa.daylight.short=SYOST -Antarctica/Syowa.generic.short=SYOT -Antarctica/Syowa.standard.short=SYOT -Antarctica/Vostok.daylight.short=VOSST -Antarctica/Vostok.generic.short=VOST -Antarctica/Vostok.standard.short=VOST -Arctic/Longyearbyen.daylight.short=MESZ -Arctic/Longyearbyen.generic.short=MEZ -Arctic/Longyearbyen.standard.short=MEZ -ART.daylight.short=OESZ -ART.generic.short=OEZ -ART.standard.short=OEZ -Asia/Aden.daylight.short=ADT -Asia/Aden.generic.short=AT -Asia/Aden.standard.short=AST -Asia/Almaty.daylight.short=ALMST -Asia/Almaty.generic.short=ALMT -Asia/Almaty.standard.short=ALMT -Asia/Amman.daylight.short=ADT -Asia/Amman.generic.short=AT -Asia/Amman.standard.short=AST -Asia/Anadyr.daylight.short=ANAST -Asia/Anadyr.generic.short=ANAT -Asia/Anadyr.standard.short=ANAT -Asia/Aqtau.daylight.short=AQTST -Asia/Aqtau.generic.short=AQTT -Asia/Aqtau.standard.short=AQTT -Asia/Aqtobe.daylight.short=AQTST -Asia/Aqtobe.generic.short=AQTT -Asia/Aqtobe.standard.short=AQTT -Asia/Ashgabat.daylight.short=TMST -Asia/Ashgabat.generic.short=TMT -Asia/Ashgabat.standard.short=TMT -Asia/Ashkhabad.daylight.short=TMST -Asia/Ashkhabad.generic.short=TMT -Asia/Ashkhabad.standard.short=TMT -Asia/Baghdad.daylight.short=ADT -Asia/Baghdad.generic.short=AT -Asia/Baghdad.standard.short=AST -Asia/Bahrain.daylight.short=ADT -Asia/Bahrain.generic.short=AT -Asia/Bahrain.standard.short=AST -Asia/Baku.daylight.short=AZST -Asia/Baku.generic.short=AZT -Asia/Baku.standard.short=AZT -Asia/Bangkok.daylight.short=ICST -Asia/Bangkok.generic.short=ICT -Asia/Bangkok.standard.short=ICT -Asia/Beirut.daylight.short=OESZ -Asia/Beirut.generic.short=OEZ -Asia/Beirut.standard.short=OEZ -Asia/Bishkek.daylight.short=KGST -Asia/Bishkek.generic.short=KGT -Asia/Bishkek.standard.short=KGT -Asia/Brunei.daylight.short=BNST -Asia/Brunei.generic.short=BNT -Asia/Brunei.standard.short=BNT -Asia/Calcutta.daylight.short=IDT -Asia/Calcutta.generic.short=IT -Asia/Calcutta.standard.short=IST -Asia/Choibalsan.daylight.short=CHOST -Asia/Choibalsan.generic.short=CHOT -Asia/Choibalsan.standard.short=CHOT -Asia/Chongqing.daylight.short=CDT -Asia/Chongqing.generic.short=CT -Asia/Chongqing.standard.short=CST -Asia/Chungking.daylight.short=CDT -Asia/Chungking.generic.short=CT -Asia/Chungking.standard.short=CST -Asia/Colombo.daylight.short=IDT -Asia/Colombo.generic.short=IT -Asia/Colombo.standard.short=IST -Asia/Dacca.daylight.short=BDST -Asia/Dacca.generic.short=BDT -Asia/Dacca.standard.short=BDT -Asia/Damascus.daylight.short=OESZ -Asia/Damascus.generic.short=OEZ -Asia/Damascus.standard.short=OEZ -Asia/Dhaka.daylight.short=BDST -Asia/Dhaka.generic.short=BDT -Asia/Dhaka.standard.short=BDT -Asia/Dili.daylight.short=TLST -Asia/Dili.generic.short=TLT -Asia/Dili.standard.short=TLT -Asia/Dubai.daylight.short=GDT -Asia/Dubai.generic.short=GT -Asia/Dubai.standard.short=GST -Asia/Dushanbe.daylight.short=TJST -Asia/Dushanbe.generic.short=TJT -Asia/Dushanbe.standard.short=TJT -Asia/Gaza.daylight.short=OESZ -Asia/Gaza.generic.short=OEZ -Asia/Gaza.standard.short=OEZ -Asia/Harbin.daylight.short=CDT -Asia/Harbin.generic.short=CT -Asia/Harbin.standard.short=CST -Asia/Hebron.daylight.short=OESZ -Asia/Hebron.generic.short=OEZ -Asia/Hebron.standard.short=OEZ -Asia/Ho_Chi_Minh.daylight.short=ICST -Asia/Ho_Chi_Minh.generic.short=ICT -Asia/Ho_Chi_Minh.standard.short=ICT -Asia/Hong_Kong.daylight.short=HKST -Asia/Hong_Kong.generic.short=HKT -Asia/Hong_Kong.standard.short=HKT -Asia/Hovd.daylight.short=HOVST -Asia/Hovd.generic.short=HOVT -Asia/Hovd.standard.short=HOVT -Asia/Irkutsk.daylight.short=IRKST -Asia/Irkutsk.generic.short=IRKT -Asia/Irkutsk.standard.short=IRKT -Asia/Istanbul.daylight.short=OESZ -Asia/Istanbul.generic.short=OEZ -Asia/Istanbul.standard.short=OEZ -Asia/Jakarta.daylight.short=WIST -Asia/Jakarta.generic.short=WIB -Asia/Jakarta.standard.short=WIB -Asia/Jayapura.daylight.short=EIST -Asia/Jayapura.generic.short=WIT -Asia/Jayapura.standard.short=WIT -Asia/Jerusalem.daylight.short=IDT -Asia/Jerusalem.generic.short=IT -Asia/Jerusalem.standard.short=IST -Asia/Kabul.daylight.short=AFST -Asia/Kabul.generic.short=AFT -Asia/Kabul.standard.short=AFT -Asia/Kamchatka.daylight.short=PETST -Asia/Kamchatka.generic.short=PETT -Asia/Kamchatka.standard.short=PETT -Asia/Karachi.daylight.short=PKST -Asia/Karachi.generic.short=PKT -Asia/Karachi.standard.short=PKT -Asia/Kashgar.daylight.short=CDT -Asia/Kashgar.generic.short=CT -Asia/Kashgar.standard.short=CST -Asia/Kathmandu.daylight.short=NPST -Asia/Kathmandu.generic.short=NPT -Asia/Kathmandu.standard.short=NPT -Asia/Katmandu.daylight.short=NPST -Asia/Katmandu.generic.short=NPT -Asia/Katmandu.standard.short=NPT -Asia/Khandyga.daylight.short=YAKST -Asia/Khandyga.generic.short=YAKT -Asia/Khandyga.standard.short=YAKT -Asia/Kolkata.daylight.short=IDT -Asia/Kolkata.generic.short=IT -Asia/Kolkata.standard.short=IST -Asia/Krasnoyarsk.daylight.short=KRAST -Asia/Krasnoyarsk.generic.short=KRAT -Asia/Krasnoyarsk.standard.short=KRAT -Asia/Kuala_Lumpur.daylight.short=MYST -Asia/Kuala_Lumpur.generic.short=MYT -Asia/Kuala_Lumpur.standard.short=MYT -Asia/Kuching.daylight.short=MYST -Asia/Kuching.generic.short=MYT -Asia/Kuching.standard.short=MYT -Asia/Kuwait.daylight.short=ADT -Asia/Kuwait.generic.short=AT -Asia/Kuwait.standard.short=AST -Asia/Macao.daylight.short=CDT -Asia/Macao.generic.short=CT -Asia/Macao.standard.short=CST -Asia/Macau.daylight.short=CDT -Asia/Macau.generic.short=CT -Asia/Macau.standard.short=CST -Asia/Magadan.daylight.short=MAGST -Asia/Magadan.generic.short=MAGT -Asia/Magadan.standard.short=MAGT -Asia/Makassar.daylight.short=CIST -Asia/Makassar.generic.short=WITA -Asia/Makassar.standard.short=WITA -Asia/Manila.daylight.short=PHST -Asia/Manila.generic.short=PHT -Asia/Manila.standard.short=PHT -Asia/Muscat.daylight.short=GDT -Asia/Muscat.generic.short=GT -Asia/Muscat.standard.short=GST -Asia/Nicosia.daylight.short=OESZ -Asia/Nicosia.generic.short=OEZ -Asia/Nicosia.standard.short=OEZ -Asia/Novokuznetsk.daylight.short=NOVST -Asia/Novokuznetsk.generic.short=NOVT -Asia/Novokuznetsk.standard.short=NOVT -Asia/Novosibirsk.daylight.short=NOVST -Asia/Novosibirsk.generic.short=NOVT -Asia/Novosibirsk.standard.short=NOVT -Asia/Omsk.daylight.short=OMSST -Asia/Omsk.generic.short=OMST -Asia/Omsk.standard.short=OMST -Asia/Oral.daylight.short=ORAST -Asia/Oral.generic.short=ORAT -Asia/Oral.standard.short=ORAT -Asia/Phnom_Penh.daylight.short=ICST -Asia/Phnom_Penh.generic.short=ICT -Asia/Phnom_Penh.standard.short=ICT -Asia/Pontianak.daylight.short=WIST -Asia/Pontianak.generic.short=WIB -Asia/Pontianak.standard.short=WIB -Asia/Pyongyang.daylight.short=KDT -Asia/Pyongyang.generic.short=KT -Asia/Pyongyang.standard.short=KST -Asia/Qatar.daylight.short=ADT -Asia/Qatar.generic.short=AT -Asia/Qatar.standard.short=AST -Asia/Qyzylorda.daylight.short=QYZST -Asia/Qyzylorda.generic.short=QYZT -Asia/Qyzylorda.standard.short=QYZT -Asia/Rangoon.daylight.short=MMST -Asia/Rangoon.generic.short=MMT -Asia/Rangoon.standard.short=MMT -Asia/Saigon.daylight.short=ICST -Asia/Saigon.generic.short=ICT -Asia/Saigon.standard.short=ICT -Asia/Sakhalin.daylight.short=SAKST -Asia/Sakhalin.generic.short=SAKT -Asia/Sakhalin.standard.short=SAKT -Asia/Samarkand.daylight.short=UZST -Asia/Samarkand.generic.short=UZT -Asia/Samarkand.standard.short=UZT -Asia/Seoul.daylight.short=KDT -Asia/Seoul.generic.short=KT -Asia/Seoul.standard.short=KST -Asia/Shanghai.daylight.short=CDT -Asia/Shanghai.generic.short=CT -Asia/Shanghai.standard.short=CST -Asia/Singapore.daylight.short=SGST -Asia/Singapore.generic.short=SGT -Asia/Singapore.standard.short=SGT -Asia/Taipei.daylight.short=CDT -Asia/Taipei.generic.short=CT -Asia/Taipei.standard.short=CST -Asia/Tashkent.daylight.short=UZST -Asia/Tashkent.generic.short=UZT -Asia/Tashkent.standard.short=UZT -Asia/Tbilisi.daylight.short=GEST -Asia/Tbilisi.generic.short=GET -Asia/Tbilisi.standard.short=GET -Asia/Tehran.daylight.short=IRDT -Asia/Tehran.generic.short=IRT -Asia/Tehran.standard.short=IRST -Asia/Tel_Aviv.daylight.short=IDT -Asia/Tel_Aviv.generic.short=IT -Asia/Tel_Aviv.standard.short=IST -Asia/Thimbu.daylight.short=BTST -Asia/Thimbu.generic.short=BTT -Asia/Thimbu.standard.short=BTT -Asia/Thimphu.daylight.short=BTST -Asia/Thimphu.generic.short=BTT -Asia/Thimphu.standard.short=BTT -Asia/Tokyo.daylight.short=JDT -Asia/Tokyo.generic.short=JT -Asia/Tokyo.standard.short=JST -Asia/Ujung_Pandang.daylight.short=CIST -Asia/Ujung_Pandang.generic.short=WITA -Asia/Ujung_Pandang.standard.short=WITA -Asia/Ulaanbaatar.daylight.short=ULAST -Asia/Ulaanbaatar.generic.short=ULAT -Asia/Ulaanbaatar.standard.short=ULAT -Asia/Ulan_Bator.daylight.short=ULAST -Asia/Ulan_Bator.generic.short=ULAT -Asia/Ulan_Bator.standard.short=ULAT -Asia/Urumqi.daylight.short=CDT -Asia/Urumqi.generic.short=CT -Asia/Urumqi.standard.short=CST -Asia/Ust-Nera.daylight.short=VLAST -Asia/Ust-Nera.generic.short=VLAT -Asia/Ust-Nera.standard.short=VLAT -Asia/Vientiane.daylight.short=ICST -Asia/Vientiane.generic.short=ICT -Asia/Vientiane.standard.short=ICT -Asia/Vladivostok.daylight.short=VLAST -Asia/Vladivostok.generic.short=VLAT -Asia/Vladivostok.standard.short=VLAT -Asia/Yakutsk.daylight.short=YAKST -Asia/Yakutsk.generic.short=YAKT -Asia/Yakutsk.standard.short=YAKT -Asia/Yekaterinburg.daylight.short=YEKST -Asia/Yekaterinburg.generic.short=YEKT -Asia/Yekaterinburg.standard.short=YEKT -Asia/Yerevan.daylight.short=AMST -Asia/Yerevan.generic.short=AMT -Asia/Yerevan.standard.short=AMT -AST.daylight.short=AKDT -AST.generic.short=AKT -AST.standard.short=AKST -Atlantic/Azores.daylight.short=AZOST -Atlantic/Azores.generic.short=AZOT -Atlantic/Azores.standard.short=AZOT -Atlantic/Bermuda.daylight.short=ADT -Atlantic/Bermuda.generic.short=AT -Atlantic/Bermuda.standard.short=AST -Atlantic/Canary.daylight.short=WESZ -Atlantic/Canary.generic.short=WEZ -Atlantic/Canary.standard.short=WEZ -Atlantic/Cape_Verde.daylight.short=CVST -Atlantic/Cape_Verde.generic.short=CVT -Atlantic/Cape_Verde.standard.short=CVT -Atlantic/Faeroe.daylight.short=WESZ -Atlantic/Faeroe.generic.short=WEZ -Atlantic/Faeroe.standard.short=WEZ -Atlantic/Faroe.daylight.short=WESZ -Atlantic/Faroe.generic.short=WEZ -Atlantic/Faroe.standard.short=WEZ -Atlantic/Jan_Mayen.daylight.short=MESZ -Atlantic/Jan_Mayen.generic.short=MEZ -Atlantic/Jan_Mayen.standard.short=MEZ -Atlantic/Madeira.daylight.short=WESZ -Atlantic/Madeira.generic.short=WEZ -Atlantic/Madeira.standard.short=WEZ -Atlantic/Reykjavik.daylight.short=GMT -Atlantic/Reykjavik.generic.short=GMT -Atlantic/Reykjavik.standard.short=GMT -Atlantic/South_Georgia.daylight.short=GDT -Atlantic/South_Georgia.generic.short=GT -Atlantic/South_Georgia.standard.short=GST -Atlantic/Stanley.daylight.short=FKST -Atlantic/Stanley.generic.short=FKT -Atlantic/Stanley.standard.short=FKT -Atlantic/St_Helena.daylight.short=GMT -Atlantic/St_Helena.generic.short=GMT -Atlantic/St_Helena.standard.short=GMT -Australia/ACT.daylight.short=EST -Australia/ACT.generic.short=ET -Australia/ACT.standard.short=EST -Australia/Adelaide.daylight.short=CST -Australia/Adelaide.generic.short=CT -Australia/Adelaide.standard.short=CST -Australia/Brisbane.daylight.short=EST -Australia/Brisbane.generic.short=ET -Australia/Brisbane.standard.short=EST -Australia/Broken_Hill.daylight.short=CST -Australia/Broken_Hill.generic.short=CT -Australia/Broken_Hill.standard.short=CST -Australia/Canberra.daylight.short=EST -Australia/Canberra.generic.short=ET -Australia/Canberra.standard.short=EST -Australia/Currie.daylight.short=EST -Australia/Currie.generic.short=ET -Australia/Currie.standard.short=EST -Australia/Darwin.daylight.short=CST -Australia/Darwin.generic.short=CT -Australia/Darwin.standard.short=CST -Australia/Eucla.daylight.short=CWST -Australia/Eucla.generic.short=CWT -Australia/Eucla.standard.short=CWST -Australia/Hobart.daylight.short=EST -Australia/Hobart.generic.short=ET -Australia/Hobart.standard.short=EST -Australia/LHI.daylight.short=LHST -Australia/LHI.generic.short=LHT -Australia/LHI.standard.short=LHST -Australia/Lindeman.daylight.short=EST -Australia/Lindeman.generic.short=ET -Australia/Lindeman.standard.short=EST -Australia/Lord_Howe.daylight.short=LHST -Australia/Lord_Howe.generic.short=LHT -Australia/Lord_Howe.standard.short=LHST -Australia/Melbourne.daylight.short=EST -Australia/Melbourne.generic.short=ET -Australia/Melbourne.standard.short=EST -Australia/North.daylight.short=CST -Australia/North.generic.short=CT -Australia/North.standard.short=CST -Australia/NSW.daylight.short=EST -Australia/NSW.generic.short=ET -Australia/NSW.standard.short=EST -Australia/Perth.daylight.short=WST -Australia/Perth.generic.short=WT -Australia/Perth.standard.short=WST -Australia/Queensland.daylight.short=EST -Australia/Queensland.generic.short=ET -Australia/Queensland.standard.short=EST -Australia/South.daylight.short=CST -Australia/South.generic.short=CT -Australia/South.standard.short=CST -Australia/Sydney.daylight.short=EST -Australia/Sydney.generic.short=ET -Australia/Sydney.standard.short=EST -Australia/Tasmania.daylight.short=EST -Australia/Tasmania.generic.short=ET -Australia/Tasmania.standard.short=EST -Australia/Victoria.daylight.short=EST -Australia/Victoria.generic.short=ET -Australia/Victoria.standard.short=EST -Australia/West.daylight.short=WST -Australia/West.generic.short=WT -Australia/West.standard.short=WST -Australia/Yancowinna.daylight.short=CST -Australia/Yancowinna.generic.short=CT -Australia/Yancowinna.standard.short=CST -BET.daylight.short=BRST -BET.generic.short=BRT -BET.standard.short=BRT -Brazil/Acre.daylight.short=ACST -Brazil/Acre.generic.short=ACT -Brazil/Acre.standard.short=ACT -Brazil/DeNoronha.daylight.short=FNST -Brazil/DeNoronha.generic.short=FNT -Brazil/DeNoronha.standard.short=FNT -Brazil/East.daylight.short=BRST -Brazil/East.generic.short=BRT -Brazil/East.standard.short=BRT -Brazil/West.daylight.short=AMST -Brazil/West.generic.short=AMT -Brazil/West.standard.short=AMT -BST.daylight.short=BDST -BST.generic.short=BDT -BST.standard.short=BDT -Canada/Atlantic.daylight.short=ADT -Canada/Atlantic.generic.short=AT -Canada/Atlantic.standard.short=AST -Canada/Central.daylight.short=CDT -Canada/Central.generic.short=CT -Canada/Central.standard.short=CST -Canada/Eastern.daylight.short=EDT -Canada/Eastern.generic.short=ET -Canada/Eastern.standard.short=EST -Canada/East-Saskatchewan.daylight.short=CDT -Canada/East-Saskatchewan.generic.short=CT -Canada/East-Saskatchewan.standard.short=CST -Canada/Mountain.daylight.short=MDT -Canada/Mountain.generic.short=MT -Canada/Mountain.standard.short=MST -Canada/Newfoundland.daylight.short=NDT -Canada/Newfoundland.generic.short=NT -Canada/Newfoundland.standard.short=NST -Canada/Pacific.daylight.short=PDT -Canada/Pacific.generic.short=PT -Canada/Pacific.standard.short=PST -Canada/Saskatchewan.daylight.short=CDT -Canada/Saskatchewan.generic.short=CT -Canada/Saskatchewan.standard.short=CST -Canada/Yukon.daylight.short=PDT -Canada/Yukon.generic.short=PT -Canada/Yukon.standard.short=PST -CAT.daylight.short=CAST -CAT.generic.short=CAT -CAT.standard.short=CAT -CET.daylight.short=MESZ -CET.generic.short=MEZ -CET.standard.short=MEZ -Chile/Continental.daylight.short=CLST -Chile/Continental.generic.short=CLT -Chile/Continental.standard.short=CLT -Chile/EasterIsland.daylight.short=EASST -Chile/EasterIsland.generic.short=EAST -Chile/EasterIsland.standard.short=EAST -CNT.daylight.short=NDT -CNT.generic.short=NT -CNT.standard.short=NST -CST6CDT.daylight.short=CDT -CST6CDT.generic.short=CT -CST6CDT.standard.short=CST -CST.daylight.short=CDT -CST.generic.short=CT -CST.standard.short=CST -CTT.daylight.short=CDT -CTT.generic.short=CT -CTT.standard.short=CST -Cuba.daylight.short=CDT -Cuba.generic.short=CT -Cuba.standard.short=CST -EAT.daylight.short=EAST -EAT.generic.short=EAT -EAT.standard.short=EAT -ECT.daylight.short=MESZ -ECT.generic.short=MEZ -ECT.standard.short=MEZ -EET.daylight.short=OESZ -EET.generic.short=OEZ -EET.standard.short=OEZ -Egypt.daylight.short=OESZ -Egypt.generic.short=OEZ -Egypt.standard.short=OEZ -Eire.daylight.short=IST -Eire.generic.short=IT -Eire.standard.short=GMT -EST5EDT.daylight.short=EDT -EST5EDT.generic.short=ET -EST5EDT.standard.short=EST -EST.daylight.short=EDT -EST.generic.short=ET -EST.standard.short=EST -Etc/Greenwich.daylight.short=GMT -Etc/Greenwich.generic.short=GMT -Etc/Greenwich.standard.short=GMT -Etc/UCT.daylight.short=UTC -Etc/UCT.generic.short=UTC -Etc/UCT.standard.short=UTC -Etc/Universal.daylight.short=UTC -Etc/Universal.generic.short=UTC -Etc/Universal.standard.short=UTC -Etc/UTC.daylight.short=UTC -Etc/UTC.generic.short=UTC -Etc/UTC.standard.short=UTC -Etc/Zulu.daylight.short=UTC -Etc/Zulu.generic.short=UTC -Etc/Zulu.standard.short=UTC -Europe/Amsterdam.daylight.short=MESZ -Europe/Amsterdam.generic.short=MEZ -Europe/Amsterdam.standard.short=MEZ -Europe/Andorra.daylight.short=MESZ -Europe/Andorra.generic.short=MEZ -Europe/Andorra.standard.short=MEZ -Europe/Athens.daylight.short=OESZ -Europe/Athens.generic.short=OEZ -Europe/Athens.standard.short=OEZ -Europe/Belfast.daylight.short=BST -Europe/Belfast.generic.short=BT -Europe/Belfast.standard.short=GMT -Europe/Belgrade.daylight.short=MESZ -Europe/Belgrade.generic.short=MEZ -Europe/Belgrade.standard.short=MEZ -Europe/Berlin.daylight.short=MESZ -Europe/Berlin.generic.short=MEZ -Europe/Berlin.standard.short=MEZ -Europe/Bratislava.daylight.short=MESZ -Europe/Bratislava.generic.short=MEZ -Europe/Bratislava.standard.short=MEZ -Europe/Brussels.daylight.short=MESZ -Europe/Brussels.generic.short=MEZ -Europe/Brussels.standard.short=MEZ -Europe/Bucharest.daylight.short=OESZ -Europe/Bucharest.generic.short=OEZ -Europe/Bucharest.standard.short=OEZ -Europe/Budapest.daylight.short=MESZ -Europe/Budapest.generic.short=MEZ -Europe/Budapest.standard.short=MEZ -Europe/Busingen.daylight.short=MESZ -Europe/Busingen.generic.short=MEZ -Europe/Busingen.standard.short=MEZ -Europe/Chisinau.daylight.short=OESZ -Europe/Chisinau.generic.short=OEZ -Europe/Chisinau.standard.short=OEZ -Europe/Copenhagen.daylight.short=MESZ -Europe/Copenhagen.generic.short=MEZ -Europe/Copenhagen.standard.short=MEZ -Europe/Dublin.daylight.short=IST -Europe/Dublin.generic.short=IT -Europe/Dublin.standard.short=GMT -Europe/Gibraltar.daylight.short=MESZ -Europe/Gibraltar.generic.short=MEZ -Europe/Gibraltar.standard.short=MEZ -Europe/Guernsey.daylight.short=BST -Europe/Guernsey.generic.short=BT -Europe/Guernsey.standard.short=GMT -Europe/Helsinki.daylight.short=OESZ -Europe/Helsinki.generic.short=OEZ -Europe/Helsinki.standard.short=OEZ -Europe/Isle_of_Man.daylight.short=BST -Europe/Isle_of_Man.generic.short=BT -Europe/Isle_of_Man.standard.short=GMT -Europe/Istanbul.daylight.short=OESZ -Europe/Istanbul.generic.short=OEZ -Europe/Istanbul.standard.short=OEZ -Europe/Jersey.daylight.short=BST -Europe/Jersey.generic.short=BT -Europe/Jersey.standard.short=GMT -Europe/Kaliningrad.daylight.short=FEST -Europe/Kaliningrad.generic.short=FET -Europe/Kaliningrad.standard.short=FET -Europe/Kiev.daylight.short=OESZ -Europe/Kiev.generic.short=OEZ -Europe/Kiev.standard.short=OEZ -Europe/Lisbon.daylight.short=WESZ -Europe/Lisbon.generic.short=WEZ -Europe/Lisbon.standard.short=WEZ -Europe/Ljubljana.daylight.short=MESZ -Europe/Ljubljana.generic.short=MEZ -Europe/Ljubljana.standard.short=MEZ -Europe/London.daylight.short=BST -Europe/London.generic.short=BT -Europe/London.standard.short=GMT -Europe/Luxembourg.daylight.short=MESZ -Europe/Luxembourg.generic.short=MEZ -Europe/Luxembourg.standard.short=MEZ -Europe/Madrid.daylight.short=MESZ -Europe/Madrid.generic.short=MEZ -Europe/Madrid.standard.short=MEZ -Europe/Malta.daylight.short=MESZ -Europe/Malta.generic.short=MEZ -Europe/Malta.standard.short=MEZ -Europe/Mariehamn.daylight.short=OESZ -Europe/Mariehamn.generic.short=OEZ -Europe/Mariehamn.standard.short=OEZ -Europe/Minsk.daylight.short=FEST -Europe/Minsk.generic.short=FET -Europe/Minsk.standard.short=FET -Europe/Monaco.daylight.short=MESZ -Europe/Monaco.generic.short=MEZ -Europe/Monaco.standard.short=MEZ -Europe/Moscow.daylight.short=MSD -Europe/Moscow.generic.short=MT -Europe/Moscow.standard.short=MSK -Europe/Nicosia.daylight.short=OESZ -Europe/Nicosia.generic.short=OEZ -Europe/Nicosia.standard.short=OEZ -Europe/Oslo.daylight.short=MESZ -Europe/Oslo.generic.short=MEZ -Europe/Oslo.standard.short=MEZ -Europe/Paris.daylight.short=MESZ -Europe/Paris.generic.short=MEZ -Europe/Paris.standard.short=MEZ -Europe/Podgorica.daylight.short=MESZ -Europe/Podgorica.generic.short=MEZ -Europe/Podgorica.standard.short=MEZ -Europe/Prague.daylight.short=MESZ -Europe/Prague.generic.short=MEZ -Europe/Prague.standard.short=MEZ -Europe/Riga.daylight.short=OESZ -Europe/Riga.generic.short=OEZ -Europe/Riga.standard.short=OEZ -Europe/Rome.daylight.short=MESZ -Europe/Rome.generic.short=MEZ -Europe/Rome.standard.short=MEZ -Europe/Samara.daylight.short=SAMST -Europe/Samara.generic.short=SAMT -Europe/Samara.standard.short=SAMT -Europe/San_Marino.daylight.short=MESZ -Europe/San_Marino.generic.short=MEZ -Europe/San_Marino.standard.short=MEZ -Europe/Sarajevo.daylight.short=MESZ -Europe/Sarajevo.generic.short=MEZ -Europe/Sarajevo.standard.short=MEZ -Europe/Simferopol.daylight.short=OESZ -Europe/Simferopol.generic.short=OEZ -Europe/Simferopol.standard.short=OEZ -Europe/Skopje.daylight.short=MESZ -Europe/Skopje.generic.short=MEZ -Europe/Skopje.standard.short=MEZ -Europe/Sofia.daylight.short=OESZ -Europe/Sofia.generic.short=OEZ -Europe/Sofia.standard.short=OEZ -Europe/Stockholm.daylight.short=MESZ -Europe/Stockholm.generic.short=MEZ -Europe/Stockholm.standard.short=MEZ -Europe/Tallinn.daylight.short=OESZ -Europe/Tallinn.generic.short=OEZ -Europe/Tallinn.standard.short=OEZ -Europe/Tirane.daylight.short=MESZ -Europe/Tirane.generic.short=MEZ -Europe/Tirane.standard.short=MEZ -Europe/Tiraspol.daylight.short=OESZ -Europe/Tiraspol.generic.short=OEZ -Europe/Tiraspol.standard.short=OEZ -Europe/Uzhgorod.daylight.short=OESZ -Europe/Uzhgorod.generic.short=OEZ -Europe/Uzhgorod.standard.short=OEZ -Europe/Vaduz.daylight.short=MESZ -Europe/Vaduz.generic.short=MEZ -Europe/Vaduz.standard.short=MEZ -Europe/Vatican.daylight.short=MESZ -Europe/Vatican.generic.short=MEZ -Europe/Vatican.standard.short=MEZ -Europe/Vienna.daylight.short=MESZ -Europe/Vienna.generic.short=MEZ -Europe/Vienna.standard.short=MEZ -Europe/Vilnius.daylight.short=OESZ -Europe/Vilnius.generic.short=OEZ -Europe/Vilnius.standard.short=OEZ -Europe/Volgograd.daylight.short=VOLST -Europe/Volgograd.generic.short=VOLT -Europe/Volgograd.standard.short=VOLT -Europe/Warsaw.daylight.short=MESZ -Europe/Warsaw.generic.short=MEZ -Europe/Warsaw.standard.short=MEZ -Europe/Zagreb.daylight.short=MESZ -Europe/Zagreb.generic.short=MEZ -Europe/Zagreb.standard.short=MEZ -Europe/Zaporozhye.daylight.short=OESZ -Europe/Zaporozhye.generic.short=OEZ -Europe/Zaporozhye.standard.short=OEZ -Europe/Zurich.daylight.short=MESZ -Europe/Zurich.generic.short=MEZ -Europe/Zurich.standard.short=MEZ -GB.daylight.short=BST -GB-Eire.daylight.short=BST -GB-Eire.generic.short=BT -GB-Eire.standard.short=GMT -GB.generic.short=BT -GB.standard.short=GMT -GMT.daylight.short=GMT -GMT.generic.short=GMT -GMT.standard.short=GMT -Greenwich.daylight.short=GMT -Greenwich.generic.short=GMT -Greenwich.standard.short=GMT -Hongkong.daylight.short=HKST -Hongkong.generic.short=HKT -Hongkong.standard.short=HKT -HST.daylight.short=HDT -HST.generic.short=HT -HST.standard.short=HST -Iceland.daylight.short=GMT -Iceland.generic.short=GMT -Iceland.standard.short=GMT -IET.daylight.short=EDT -IET.generic.short=ET -IET.standard.short=EST -Indian/Antananarivo.daylight.short=EAST -Indian/Antananarivo.generic.short=EAT -Indian/Antananarivo.standard.short=EAT -Indian/Chagos.daylight.short=IOST -Indian/Chagos.generic.short=IOT -Indian/Chagos.standard.short=IOT -Indian/Christmas.daylight.short=CXST -Indian/Christmas.generic.short=CIT -Indian/Christmas.standard.short=CXT -Indian/Cocos.daylight.short=CCST -Indian/Cocos.generic.short=CCT -Indian/Cocos.standard.short=CCT -Indian/Comoro.daylight.short=EAST -Indian/Comoro.generic.short=EAT -Indian/Comoro.standard.short=EAT -Indian/Kerguelen.daylight.short=TFST -Indian/Kerguelen.generic.short=TFT -Indian/Kerguelen.standard.short=TFT -Indian/Mahe.daylight.short=SCST -Indian/Mahe.generic.short=SCT -Indian/Mahe.standard.short=SCT -Indian/Maldives.daylight.short=MVST -Indian/Maldives.generic.short=MVT -Indian/Maldives.standard.short=MVT -Indian/Mauritius.daylight.short=MUST -Indian/Mauritius.generic.short=MUT -Indian/Mauritius.standard.short=MUT -Indian/Mayotte.daylight.short=EAST -Indian/Mayotte.generic.short=EAT -Indian/Mayotte.standard.short=EAT -Indian/Reunion.daylight.short=REST -Indian/Reunion.generic.short=RET -Indian/Reunion.standard.short=RET -Iran.daylight.short=IRDT -Iran.generic.short=IRT -Iran.standard.short=IRST -Israel.daylight.short=IDT -Israel.generic.short=IT -Israel.standard.short=IST -IST.daylight.short=IDT -IST.generic.short=IT -IST.standard.short=IST -Jamaica.daylight.short=EDT -Jamaica.generic.short=ET -Jamaica.standard.short=EST -Japan.daylight.short=JDT -Japan.generic.short=JT -Japan.standard.short=JST -JST.daylight.short=JDT -JST.generic.short=JT -JST.standard.short=JST -Kwajalein.daylight.short=MHST -Kwajalein.generic.short=MHT -Kwajalein.standard.short=MHT -Libya.daylight.short=OESZ -Libya.generic.short=OEZ -Libya.standard.short=OEZ -MET.daylight.short=MEST -MET.generic.short=MET -MET.standard.short=MET -Mexico/BajaNorte.daylight.short=PDT -Mexico/BajaNorte.generic.short=PT -Mexico/BajaNorte.standard.short=PST -Mexico/BajaSur.daylight.short=MDT -Mexico/BajaSur.generic.short=MT -Mexico/BajaSur.standard.short=MST -Mexico/General.daylight.short=CDT -Mexico/General.generic.short=CT -Mexico/General.standard.short=CST -MIT.daylight.short=WSDT -MIT.generic.short=WST -MIT.standard.short=WST -MST7MDT.daylight.short=MDT -MST7MDT.generic.short=MT -MST7MDT.standard.short=MST -MST.daylight.short=MDT -MST.generic.short=MT -MST.standard.short=MST -Navajo.daylight.short=MDT -Navajo.generic.short=MT -Navajo.standard.short=MST -NET.daylight.short=AMST -NET.generic.short=AMT -NET.standard.short=AMT -NST.daylight.short=NZDT -NST.generic.short=NZT -NST.standard.short=NZST -NZ-CHAT.daylight.short=CHADT -NZ-CHAT.generic.short=CHAT -NZ-CHAT.standard.short=CHAST -NZ.daylight.short=NZDT -NZ.generic.short=NZT -NZ.standard.short=NZST -Pacific/Apia.daylight.short=WSDT -Pacific/Apia.generic.short=WST -Pacific/Apia.standard.short=WST -Pacific/Auckland.daylight.short=NZDT -Pacific/Auckland.generic.short=NZT -Pacific/Auckland.standard.short=NZST -Pacific/Chatham.daylight.short=CHADT -Pacific/Chatham.generic.short=CHAT -Pacific/Chatham.standard.short=CHAST -Pacific/Chuuk.daylight.short=CHUST -Pacific/Chuuk.generic.short=CHUT -Pacific/Chuuk.standard.short=CHUT -Pacific/Easter.daylight.short=EASST -Pacific/Easter.generic.short=EAST -Pacific/Easter.standard.short=EAST -Pacific/Efate.daylight.short=VUST -Pacific/Efate.generic.short=VUT -Pacific/Efate.standard.short=VUT -Pacific/Enderbury.daylight.short=PHOST -Pacific/Enderbury.generic.short=PHOT -Pacific/Enderbury.standard.short=PHOT -Pacific/Fakaofo.daylight.short=TKST -Pacific/Fakaofo.generic.short=TKT -Pacific/Fakaofo.standard.short=TKT -Pacific/Fiji.daylight.short=FJST -Pacific/Fiji.generic.short=FJT -Pacific/Fiji.standard.short=FJT -Pacific/Funafuti.daylight.short=TVST -Pacific/Funafuti.generic.short=TVT -Pacific/Funafuti.standard.short=TVT -Pacific/Galapagos.daylight.short=GALST -Pacific/Galapagos.generic.short=GALT -Pacific/Galapagos.standard.short=GALT -Pacific/Gambier.daylight.short=GAMST -Pacific/Gambier.generic.short=GAMT -Pacific/Gambier.standard.short=GAMT -Pacific/Guadalcanal.daylight.short=SBST -Pacific/Guadalcanal.generic.short=SBT -Pacific/Guadalcanal.standard.short=SBT -Pacific/Guam.daylight.short=ChDT -Pacific/Guam.generic.short=ChT -Pacific/Guam.standard.short=ChST -Pacific/Honolulu.daylight.short=HDT -Pacific/Honolulu.generic.short=HT -Pacific/Honolulu.standard.short=HST -Pacific/Johnston.daylight.short=HDT -Pacific/Johnston.generic.short=HT -Pacific/Johnston.standard.short=HST -Pacific/Kiritimati.daylight.short=LINST -Pacific/Kiritimati.generic.short=LINT -Pacific/Kiritimati.standard.short=LINT -Pacific/Kosrae.daylight.short=KOSST -Pacific/Kosrae.generic.short=KOST -Pacific/Kosrae.standard.short=KOST -Pacific/Kwajalein.daylight.short=MHST -Pacific/Kwajalein.generic.short=MHT -Pacific/Kwajalein.standard.short=MHT -Pacific/Majuro.daylight.short=MHST -Pacific/Majuro.generic.short=MHT -Pacific/Majuro.standard.short=MHT -Pacific/Marquesas.daylight.short=MARST -Pacific/Marquesas.generic.short=MART -Pacific/Marquesas.standard.short=MART -Pacific/Midway.daylight.short=SDT -Pacific/Midway.generic.short=ST -Pacific/Midway.standard.short=SST -Pacific/Nauru.daylight.short=NRST -Pacific/Nauru.generic.short=NRT -Pacific/Nauru.standard.short=NRT -Pacific/Niue.daylight.short=NUST -Pacific/Niue.generic.short=NUT -Pacific/Niue.standard.short=NUT -Pacific/Norfolk.daylight.short=NFST -Pacific/Norfolk.generic.short=NFT -Pacific/Norfolk.standard.short=NFT -Pacific/Noumea.daylight.short=NCST -Pacific/Noumea.generic.short=NCT -Pacific/Noumea.standard.short=NCT -Pacific/Pago_Pago.daylight.short=SDT -Pacific/Pago_Pago.generic.short=ST -Pacific/Pago_Pago.standard.short=SST -Pacific/Palau.daylight.short=PWST -Pacific/Palau.generic.short=PWT -Pacific/Palau.standard.short=PWT -Pacific/Pitcairn.daylight.short=PDT -Pacific/Pitcairn.generic.short=PT -Pacific/Pitcairn.standard.short=PST -Pacific/Pohnpei.daylight.short=PONST -Pacific/Pohnpei.generic.short=PONT -Pacific/Pohnpei.standard.short=PONT -Pacific/Ponape.daylight.short=PONST -Pacific/Ponape.generic.short=PONT -Pacific/Ponape.standard.short=PONT -Pacific/Port_Moresby.daylight.short=PGST -Pacific/Port_Moresby.generic.short=PGT -Pacific/Port_Moresby.standard.short=PGT -Pacific/Rarotonga.daylight.short=CKHST -Pacific/Rarotonga.generic.short=CKT -Pacific/Rarotonga.standard.short=CKT -Pacific/Saipan.daylight.short=ChDT -Pacific/Saipan.generic.short=ChT -Pacific/Saipan.standard.short=ChST -Pacific/Samoa.daylight.short=SDT -Pacific/Samoa.generic.short=ST -Pacific/Samoa.standard.short=SST -Pacific/Tahiti.daylight.short=TAHST -Pacific/Tahiti.generic.short=TAHT -Pacific/Tahiti.standard.short=TAHT -Pacific/Tarawa.daylight.short=GILST -Pacific/Tarawa.generic.short=GILT -Pacific/Tarawa.standard.short=GILT -Pacific/Tongatapu.daylight.short=TOST -Pacific/Tongatapu.generic.short=TOT -Pacific/Tongatapu.standard.short=TOT -Pacific/Truk.daylight.short=CHUST -Pacific/Truk.generic.short=CHUT -Pacific/Truk.standard.short=CHUT -Pacific/Wake.daylight.short=WAKST -Pacific/Wake.generic.short=WAKT -Pacific/Wake.standard.short=WAKT -Pacific/Wallis.daylight.short=WFST -Pacific/Wallis.generic.short=WFT -Pacific/Wallis.standard.short=WFT -Pacific/Yap.daylight.short=CHUST -Pacific/Yap.generic.short=CHUT -Pacific/Yap.standard.short=CHUT -PLT.daylight.short=PKST -PLT.generic.short=PKT -PLT.standard.short=PKT -PNT.daylight.short=MDT -PNT.generic.short=MT -PNT.standard.short=MST -Poland.daylight.short=MESZ -Poland.generic.short=MEZ -Poland.standard.short=MEZ -Portugal.daylight.short=WESZ -Portugal.generic.short=WEZ -Portugal.standard.short=WEZ -PRC.daylight.short=CDT -PRC.generic.short=CT -PRC.standard.short=CST -PRT.daylight.short=ADT -PRT.generic.short=AT -PRT.standard.short=AST -PST8PDT.daylight.short=PDT -PST8PDT.generic.short=PT -PST8PDT.standard.short=PST -PST.daylight.short=PDT -PST.generic.short=PT -PST.standard.short=PST -ROK.daylight.short=KDT -ROK.generic.short=KT -ROK.standard.short=KST -Singapore.daylight.short=SGST -Singapore.generic.short=SGT -Singapore.standard.short=SGT -SST.daylight.short=SBST -SST.generic.short=SBT -SST.standard.short=SBT -SystemV/AST4ADT.daylight.short=ADT -SystemV/AST4ADT.generic.short=AT -SystemV/AST4ADT.standard.short=AST -SystemV/AST4.daylight.short=ADT -SystemV/AST4.generic.short=AT -SystemV/AST4.standard.short=AST -SystemV/CST6CDT.daylight.short=CDT -SystemV/CST6CDT.generic.short=CT -SystemV/CST6CDT.standard.short=CST -SystemV/CST6.daylight.short=CDT -SystemV/CST6.generic.short=CT -SystemV/CST6.standard.short=CST -SystemV/EST5.daylight.short=EDT -SystemV/EST5EDT.daylight.short=EDT -SystemV/EST5EDT.generic.short=ET -SystemV/EST5EDT.standard.short=EST -SystemV/EST5.generic.short=ET -SystemV/EST5.standard.short=EST -SystemV/HST10.daylight.short=HDT -SystemV/HST10.generic.short=HT -SystemV/HST10.standard.short=HST -SystemV/MST7.daylight.short=MDT -SystemV/MST7.generic.short=MT -SystemV/MST7MDT.daylight.short=MDT -SystemV/MST7MDT.generic.short=MT -SystemV/MST7MDT.standard.short=MST -SystemV/MST7.standard.short=MST -SystemV/PST8.daylight.short=PDT -SystemV/PST8.generic.short=PT -SystemV/PST8PDT.daylight.short=PDT -SystemV/PST8PDT.generic.short=PT -SystemV/PST8PDT.standard.short=PST -SystemV/PST8.standard.short=PST -SystemV/YST9.daylight.short=AKDT -SystemV/YST9.generic.short=AKT -SystemV/YST9.standard.short=AKST -SystemV/YST9YDT.daylight.short=AKDT -SystemV/YST9YDT.generic.short=AKT -SystemV/YST9YDT.standard.short=AKST -Turkey.daylight.short=OESZ -Turkey.generic.short=OEZ -Turkey.standard.short=OEZ -UCT.daylight.short=UTC -UCT.generic.short=UTC -UCT.standard.short=UTC -Universal.daylight.short=UTC -Universal.generic.short=UTC -Universal.standard.short=UTC -US/Alaska.daylight.short=AKDT -US/Alaska.generic.short=AKT -US/Alaska.standard.short=AKST -US/Aleutian.daylight.short=HADT -US/Aleutian.generic.short=HAT -US/Aleutian.standard.short=HAST -US/Arizona.daylight.short=MDT -US/Arizona.generic.short=MT -US/Arizona.standard.short=MST -US/Central.daylight.short=CDT -US/Central.generic.short=CT -US/Central.standard.short=CST -US/Eastern.daylight.short=EDT -US/Eastern.generic.short=ET -US/Eastern.standard.short=EST -US/East-Indiana.daylight.short=EDT -US/East-Indiana.generic.short=ET -US/East-Indiana.standard.short=EST -US/Hawaii.daylight.short=HDT -US/Hawaii.generic.short=HT -US/Hawaii.standard.short=HST -US/Indiana-Starke.daylight.short=CDT -US/Indiana-Starke.generic.short=CT -US/Indiana-Starke.standard.short=CST -US/Michigan.daylight.short=EDT -US/Michigan.generic.short=ET -US/Michigan.standard.short=EST -US/Mountain.daylight.short=MDT -US/Mountain.generic.short=MT -US/Mountain.standard.short=MST -US/Pacific.daylight.short=PDT -US/Pacific.generic.short=PT -US/Pacific-New.daylight.short=PDT -US/Pacific-New.generic.short=PT -US/Pacific-New.standard.short=PST -US/Pacific.standard.short=PST -US/Samoa.daylight.short=SDT -US/Samoa.generic.short=ST -US/Samoa.standard.short=SST -UTC.daylight.short=UTC -UTC.generic.short=UTC -UTC.standard.short=UTC -VST.daylight.short=ICST -VST.generic.short=ICT -VST.standard.short=ICT -WET.daylight.short=WESZ -WET.generic.short=WEZ -WET.standard.short=WEZ -W-SU.daylight.short=MSD -W-SU.generic.short=MT -W-SU.standard.short=MSK -Zulu.daylight.short=UTC -Zulu.generic.short=UTC -Zulu.standard.short=UTC diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_es.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_es.properties deleted file mode 100644 index 830f0d21e0d..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_es.properties +++ /dev/null @@ -1,651 +0,0 @@ -ACT.daylight.long=Hora de verano Central (territorio del Norte) -ACT.generic.long=Hora Central (Territorio Septentrional) -ACT.standard.long=Hora est\u00E1ndar Central (territorio del Norte) -AET.daylight.long=Hora de verano Oriental (Nueva Gales del Sur) -AET.generic.long=Hora Oriental (Nueva Gales del Sur) -AET.standard.long=Hora est\u00E1ndar Oriental (Nueva Gales del Sur) -AGT.generic.long=Hora de Argentina -ART.generic.long=Hora de Europa Oriental -AST.generic.long=Hora de Alaska -Africa/Abidjan.generic.long=Hora del Meridiano de Greenwich -Africa/Accra.generic.long=Hora central de Ghana -Africa/Addis_Ababa.generic.long=Hora de \u00C1frica Oriental -Africa/Algiers.generic.long=Hora de Europa Central -Africa/Asmara.generic.long=Hora de \u00C1frica Oriental -Africa/Asmera.generic.long=Hora de \u00C1frica Oriental -Africa/Bamako.generic.long=Hora del Meridiano de Greenwich -Africa/Bangui.generic.long=Hora de \u00C1frica Occidental -Africa/Banjul.generic.long=Hora del Meridiano de Greenwich -Africa/Bissau.generic.long=Hora del Meridiano de Greenwich -Africa/Blantyre.generic.long=Hora de \u00C1frica Central -Africa/Brazzaville.generic.long=Hora de \u00C1frica Occidental -Africa/Bujumbura.generic.long=Hora de \u00C1frica Central -Africa/Cairo.generic.long=Hora de Europa Oriental -Africa/Casablanca.generic.long=Hora de Europa Occidental -Africa/Ceuta.generic.long=Hora de Europa Central -Africa/Conakry.generic.long=Hora del Meridiano de Greenwich -Africa/Dakar.generic.long=Hora del Meridiano de Greenwich -Africa/Dar_es_Salaam.generic.long=Hora de \u00C1frica Oriental -Africa/Djibouti.generic.long=Hora de \u00C1frica Oriental -Africa/Douala.generic.long=Hora de \u00C1frica Occidental -Africa/El_Aaiun.generic.long=Hora de Europa Occidental -Africa/Freetown.generic.long=Horario de Sierra Leona -Africa/Gaborone.generic.long=Hora de \u00C1frica Central -Africa/Harare.generic.long=Hora de \u00C1frica Central -Africa/Johannesburg.generic.long=Hora de Sud\u00E1frica -Africa/Juba.generic.long=Hora de \u00C1frica Oriental -Africa/Kampala.generic.long=Hora de \u00C1frica Oriental -Africa/Khartoum.generic.long=Hora de \u00C1frica Oriental -Africa/Kigali.generic.long=Hora de \u00C1frica Central -Africa/Kinshasa.generic.long=Hora de \u00C1frica Occidental -Africa/Lagos.generic.long=Hora de \u00C1frica Occidental -Africa/Libreville.generic.long=Hora de \u00C1frica Occidental -Africa/Lome.generic.long=Hora del Meridiano de Greenwich -Africa/Luanda.generic.long=Hora de \u00C1frica Occidental -Africa/Lubumbashi.generic.long=Hora de \u00C1frica Central -Africa/Lusaka.generic.long=Hora de \u00C1frica Central -Africa/Malabo.generic.long=Hora de \u00C1frica Occidental -Africa/Maputo.generic.long=Hora de \u00C1frica Central -Africa/Maseru.generic.long=Hora de Sud\u00E1frica -Africa/Mbabane.generic.long=Hora de Sud\u00E1frica -Africa/Mogadishu.generic.long=Hora de \u00C1frica Oriental -Africa/Monrovia.generic.long=Hora del Meridiano de Greenwich -Africa/Nairobi.generic.long=Hora de \u00C1frica Oriental -Africa/Ndjamena.generic.long=Hora de \u00C1frica Occidental -Africa/Niamey.generic.long=Hora de \u00C1frica Occidental -Africa/Nouakchott.generic.long=Hora del Meridiano de Greenwich -Africa/Ouagadougou.generic.long=Hora del Meridiano de Greenwich -Africa/Porto-Novo.generic.long=Hora de \u00C1frica Occidental -Africa/Sao_Tome.generic.long=Hora del Meridiano de Greenwich -Africa/Timbuktu.generic.long=Hora del Meridiano de Greenwich -Africa/Tripoli.generic.long=Hora de Europa Oriental -Africa/Tunis.generic.long=Hora de Europa Central -Africa/Windhoek.generic.long=Hora de \u00C1frica Occidental -America/Adak.generic.long=Hora de Hawaii-Aleutian -America/Anchorage.generic.long=Hora de Alaska -America/Anguilla.generic.long=Hora del Atl\u00E1ntico -America/Antigua.generic.long=Hora del Atl\u00E1ntico -America/Araguaina.generic.long=Hora de Brasil -America/Argentina/Buenos_Aires.generic.long=Hora de Argentina -America/Argentina/Catamarca.generic.long=Hora de Argentina -America/Argentina/ComodRivadavia.generic.long=Hora de Argentina -America/Argentina/Cordoba.generic.long=Hora de Argentina -America/Argentina/Jujuy.generic.long=Hora de Argentina -America/Argentina/La_Rioja.generic.long=Hora de Argentina -America/Argentina/Mendoza.generic.long=Hora de Argentina -America/Argentina/Rio_Gallegos.generic.long=Hora de Argentina -America/Argentina/Salta.generic.long=Hora de Argentina -America/Argentina/San_Juan.generic.long=Hora de Argentina -America/Argentina/San_Luis.generic.long=Hora de Argentina -America/Argentina/Tucuman.generic.long=Hora de Argentina -America/Argentina/Ushuaia.generic.long=Hora de Argentina -America/Aruba.generic.long=Hora del Atl\u00E1ntico -America/Asuncion.generic.long=Hora de Paraguay -America/Atikokan.generic.long=Hora Oriental -America/Atka.generic.long=Hora de Hawaii-Aleutian -America/Bahia.generic.long=Hora de Brasil -America/Bahia_Banderas.generic.long=Hora Central -America/Barbados.generic.long=Hora del Atl\u00E1ntico -America/Belem.generic.long=Hora de Brasil -America/Belize.generic.long=Hora Central -America/Blanc-Sablon.generic.long=Hora del Atl\u00E1ntico -America/Boa_Vista.generic.long=Hora est\u00E1ndar de Amazonia -America/Bogota.generic.long=Hora de Colombia -America/Boise.generic.long=Hora de las Monta\u00F1as Rocosas -America/Buenos_Aires.generic.long=Hora de Argentina -America/Cambridge_Bay.generic.long=Hora de las Monta\u00F1as Rocosas -America/Campo_Grande.generic.long=Hora est\u00E1ndar de Amazonia -America/Cancun.generic.long=Hora Central -America/Caracas.generic.long=Hora de Venezuela -America/Catamarca.generic.long=Hora de Argentina -America/Cayenne.generic.long=Hora de la Guayana Francesa -America/Cayman.generic.long=Hora Oriental -America/Chicago.generic.long=Hora Central -America/Chihuahua.generic.long=Hora de las Monta\u00F1as Rocosas -America/Coral_Harbour.generic.long=Hora Oriental -America/Cordoba.generic.long=Hora de Argentina -America/Costa_Rica.generic.long=Hora Central -America/Creston.generic.long=Hora de las Monta\u00F1as Rocosas -America/Cuiaba.generic.long=Hora est\u00E1ndar de Amazonia -America/Curacao.generic.long=Hora del Atl\u00E1ntico -America/Danmarkshavn.generic.long=Hora del Meridiano de Greenwich -America/Dawson.generic.long=Hora del Pac\u00EDfico -America/Dawson_Creek.generic.long=Hora de las Monta\u00F1as Rocosas -America/Denver.generic.long=Hora de las Monta\u00F1as Rocosas -America/Detroit.generic.long=Hora Oriental -America/Dominica.generic.long=Hora del Atl\u00E1ntico -America/Edmonton.generic.long=Hora de las Monta\u00F1as Rocosas -America/Eirunepe.generic.long=Hora de Acre -America/El_Salvador.generic.long=Hora Central -America/Ensenada.generic.long=Hora del Pac\u00EDfico -America/Fort_Wayne.generic.long=Hora Oriental -America/Fortaleza.generic.long=Hora de Brasil -America/Glace_Bay.generic.long=Hora del Atl\u00E1ntico -America/Godthab.generic.long=Hora de Groenlandia Occidental -America/Goose_Bay.generic.long=Hora del Atl\u00E1ntico -America/Grand_Turk.generic.long=Hora Oriental -America/Grenada.generic.long=Hora del Atl\u00E1ntico -America/Guadeloupe.generic.long=Hora del Atl\u00E1ntico -America/Guatemala.generic.long=Hora Central -America/Guayaquil.generic.long=Hora de Ecuador -America/Guyana.generic.long=Hora de Guyana -America/Halifax.generic.long=Hora del Atl\u00E1ntico -America/Havana.generic.long=Hora de Cuba -America/Hermosillo.generic.long=Hora de las Monta\u00F1as Rocosas -America/Indiana/Indianapolis.generic.long=Hora Oriental -America/Indiana/Knox.generic.long=Hora Central -America/Indiana/Marengo.generic.long=Hora Oriental -America/Indiana/Petersburg.generic.long=Hora Oriental -America/Indiana/Tell_City.generic.long=Hora Central -America/Indiana/Vevay.generic.long=Hora Oriental -America/Indiana/Vincennes.generic.long=Hora Oriental -America/Indiana/Winamac.generic.long=Hora Oriental -America/Indianapolis.generic.long=Hora Oriental -America/Inuvik.generic.long=Hora de las Monta\u00F1as Rocosas -America/Iqaluit.generic.long=Hora Oriental -America/Jamaica.generic.long=Hora Oriental -America/Jujuy.generic.long=Hora de Argentina -America/Juneau.generic.long=Hora de Alaska -America/Kentucky/Louisville.generic.long=Hora Oriental -America/Kentucky/Monticello.generic.long=Hora Oriental -America/Knox_IN.generic.long=Hora Central -America/Kralendijk.generic.long=Hora del Atl\u00E1ntico -America/La_Paz.generic.long=Hora de Bolivia -America/Lima.generic.long=Hora de Per\u00FA -America/Los_Angeles.generic.long=Hora del Pac\u00EDfico -America/Louisville.generic.long=Hora Oriental -America/Lower_Princes.generic.long=Hora del Atl\u00E1ntico -America/Maceio.generic.long=Hora de Brasil -America/Managua.generic.long=Hora Central -America/Manaus.generic.long=Hora est\u00E1ndar de Amazonia -America/Marigot.generic.long=Hora del Atl\u00E1ntico -America/Martinique.generic.long=Hora del Atl\u00E1ntico -America/Matamoros.generic.long=Hora Central -America/Mazatlan.generic.long=Hora de las Monta\u00F1as Rocosas -America/Mendoza.generic.long=Hora de Argentina -America/Menominee.generic.long=Hora Central -America/Merida.generic.long=Hora Central -America/Metlakatla.daylight.long=Hora de verano de Metlakatla -America/Metlakatla.generic.long=Metlakatla Time -America/Metlakatla.standard.long=Hora de Metlakatla -America/Mexico_City.generic.long=Hora Central -America/Miquelon.generic.long=Hora de San Pedro y Miquel\u00F3n -America/Moncton.generic.long=Hora del Atl\u00E1ntico -America/Monterrey.generic.long=Hora Central -America/Montevideo.generic.long=Hora de Uruguay -America/Montreal.generic.long=Hora Oriental -America/Montserrat.generic.long=Hora del Atl\u00E1ntico -America/Nassau.generic.long=Hora Oriental -America/New_York.generic.long=Hora Oriental -America/Nipigon.generic.long=Hora Oriental -America/Nome.generic.long=Hora de Alaska -America/Noronha.generic.long=Hora de Fernando de Noronha -America/North_Dakota/Beulah.generic.long=Hora Central -America/North_Dakota/Center.generic.long=Hora Central -America/North_Dakota/New_Salem.generic.long=Hora Central -America/Ojinaga.generic.long=Hora de las Monta\u00F1as Rocosas -America/Panama.generic.long=Hora Oriental -America/Pangnirtung.generic.long=Hora Oriental -America/Paramaribo.generic.long=Hora de Surinam -America/Phoenix.generic.long=Hora de las Monta\u00F1as Rocosas -America/Port-au-Prince.generic.long=Hora Oriental -America/Port_of_Spain.generic.long=Hora del Atl\u00E1ntico -America/Porto_Acre.generic.long=Hora de Acre -America/Porto_Velho.generic.long=Hora est\u00E1ndar de Amazonia -America/Puerto_Rico.generic.long=Hora del Atl\u00E1ntico -America/Rainy_River.generic.long=Hora Central -America/Rankin_Inlet.generic.long=Hora Central -America/Recife.generic.long=Hora de Brasil -America/Regina.generic.long=Hora Central -America/Resolute.generic.long=Hora Central -America/Rio_Branco.generic.long=Hora de Acre -America/Rosario.generic.long=Hora de Argentina -America/Santa_Isabel.generic.long=Hora del Pac\u00EDfico -America/Santarem.generic.long=Hora de Brasil -America/Santiago.generic.long=Hora de Chile -America/Santo_Domingo.generic.long=Hora del Atl\u00E1ntico -America/Sao_Paulo.generic.long=Hora de Brasil -America/Scoresbysund.generic.long=Hora de Groenlandia Oriental -America/Shiprock.generic.long=Hora de las Monta\u00F1as Rocosas -America/Sitka.generic.long=Hora de Alaska -America/St_Barthelemy.generic.long=Hora del Atl\u00E1ntico -America/St_Johns.generic.long=Hora de Terranova -America/St_Kitts.generic.long=Hora del Atl\u00E1ntico -America/St_Lucia.generic.long=Hora del Atl\u00E1ntico -America/St_Thomas.generic.long=Hora del Atl\u00E1ntico -America/St_Vincent.generic.long=Hora del Atl\u00E1ntico -America/Swift_Current.generic.long=Hora Central -America/Tegucigalpa.generic.long=Hora Central -America/Thule.generic.long=Hora del Atl\u00E1ntico -America/Thunder_Bay.generic.long=Hora Oriental -America/Tijuana.generic.long=Hora del Pac\u00EDfico -America/Toronto.generic.long=Hora Oriental -America/Tortola.generic.long=Hora del Atl\u00E1ntico -America/Vancouver.generic.long=Hora del Pac\u00EDfico -America/Virgin.generic.long=Hora del Atl\u00E1ntico -America/Whitehorse.generic.long=Hora del Pac\u00EDfico -America/Winnipeg.generic.long=Hora Central -America/Yakutat.generic.long=Hora de Alaska -America/Yellowknife.generic.long=Hora de las Monta\u00F1as Rocosas -Antarctica/Casey.daylight.long=Hora de verano Occidental (Australia) -Antarctica/Casey.generic.long=Hora Occidental (Australia) -Antarctica/Casey.standard.long=Hora est\u00E1ndar Occidental (Australia) -Antarctica/Davis.generic.long=Hora de Davis -Antarctica/DumontDUrville.generic.long=Hora de Dumont-d'Urville -Antarctica/Macquarie.daylight.long=Hora de verano de Isla Macquarie -Antarctica/Macquarie.generic.long=Hora de Isla Macquarie -Antarctica/Macquarie.standard.long=Hora de Isla Macquarie -Antarctica/Mawson.generic.long=Hora de Mawson -Antarctica/McMurdo.generic.long=Hora de Nueva Zelanda -Antarctica/Palmer.generic.long=Hora de Chile -Antarctica/Rothera.generic.long=Hora de Rothera -Antarctica/South_Pole.generic.long=Hora de Nueva Zelanda -Antarctica/Syowa.generic.long=Hora de Syowa -Antarctica/Vostok.generic.long=Hora de Vostok -Arctic/Longyearbyen.generic.long=Hora de Europa Central -Asia/Aden.generic.long=Hora de Arabia -Asia/Almaty.generic.long=Hora de Alma-Ata -Asia/Amman.generic.long=Hora de Arabia -Asia/Anadyr.generic.long=Hora de Anadyr -Asia/Aqtau.generic.long=Hora de Aqtau -Asia/Aqtobe.generic.long=Hora de Aqtobe -Asia/Ashgabat.generic.long=Hora de Turkmenist\u00E1n -Asia/Ashkhabad.generic.long=Hora de Turkmenist\u00E1n -Asia/Baghdad.generic.long=Hora de Arabia -Asia/Bahrain.generic.long=Hora de Arabia -Asia/Baku.generic.long=Hora de Azerbaiy\u00E1n -Asia/Bangkok.generic.long=Hora de Indochina -Asia/Beirut.generic.long=Hora de Europa Oriental -Asia/Bishkek.generic.long=Hora de Kirguizist\u00E1n -Asia/Brunei.generic.long=Hora de Brunei -Asia/Calcutta.generic.long=Hora de India -Asia/Choibalsan.generic.long=Hora de Choibalsan -Asia/Chongqing.generic.long=Hora de China -Asia/Chungking.generic.long=Hora de China -Asia/Colombo.generic.long=Hora de India -Asia/Dacca.generic.long=Hora de Bangladesh -Asia/Damascus.generic.long=Hora de Europa Oriental -Asia/Dhaka.generic.long=Hora de Bangladesh -Asia/Dili.generic.long=Hora de Timor Leste -Asia/Dubai.generic.long=Hora del Golfo -Asia/Dushanbe.generic.long=Hora de Tajikist\u00E1n -Asia/Gaza.generic.long=Hora de Europa Oriental -Asia/Harbin.generic.long=Hora de China -Asia/Hebron.generic.long=Hora de Europa Oriental -Asia/Ho_Chi_Minh.generic.long=Hora de Indochina -Asia/Hong_Kong.generic.long=Hora de Hong Kong -Asia/Hovd.generic.long=Hora de Hovd -Asia/Irkutsk.generic.long=Hora de Irkutsk -Asia/Istanbul.generic.long=Hora de Europa Oriental -Asia/Jakarta.generic.long=Hora de Indonesia Occidental -Asia/Jayapura.generic.long=Hora de Indonesia Oriental -Asia/Jerusalem.generic.long=Hora de Israel -Asia/Kabul.generic.long=Hora de Afganist\u00E1n -Asia/Kamchatka.generic.long=Hora de Petropavlovsk-Kamchatski -Asia/Karachi.generic.long=Hora de Pakist\u00E1n -Asia/Kashgar.generic.long=Hora de China -Asia/Kathmandu.generic.long=Hora de Nepal -Asia/Katmandu.generic.long=Hora de Nepal -Asia/Khandyga.daylight.long=Hora de verano de Khandyga -Asia/Khandyga.generic.long=Hora de Khandyga -Asia/Khandyga.standard.long=Hora de Khandyga -Asia/Kolkata.generic.long=Hora de India -Asia/Krasnoyarsk.generic.long=Hora de Krasnoyarsk -Asia/Kuala_Lumpur.generic.long=Hora de Malasia -Asia/Kuching.generic.long=Hora de Malasia -Asia/Kuwait.generic.long=Hora de Arabia -Asia/Macao.generic.long=Hora de China -Asia/Macau.generic.long=Hora de China -Asia/Magadan.generic.long=Hora de Magad\u00E1n -Asia/Makassar.generic.long=Hora de Indonesia Central -Asia/Manila.generic.long=Hora de Filipinas -Asia/Muscat.generic.long=Hora del Golfo -Asia/Nicosia.generic.long=Hora de Europa Oriental -Asia/Novokuznetsk.generic.long=Hora de Novosibirsk -Asia/Novosibirsk.generic.long=Hora de Novosibirsk -Asia/Omsk.generic.long=Hora de Omsk -Asia/Oral.generic.long=Hora de Uralsk -Asia/Phnom_Penh.generic.long=Hora de Indochina -Asia/Pontianak.generic.long=Hora de Indonesia Occidental -Asia/Pyongyang.generic.long=Hora de Corea -Asia/Qatar.generic.long=Hora de Arabia -Asia/Qyzylorda.generic.long=Hora de Qyzylorda -Asia/Rangoon.generic.long=Hora de Myanmar -Asia/Saigon.generic.long=Hora de Indochina -Asia/Sakhalin.generic.long=Hora de Sajalin -Asia/Samarkand.generic.long=Hora de Uzbekist\u00E1n -Asia/Seoul.generic.long=Hora de Corea -Asia/Shanghai.generic.long=Hora de China -Asia/Singapore.generic.long=Hora de Singapur -Asia/Taipei.generic.long=Hora de China -Asia/Tashkent.generic.long=Hora de Uzbekist\u00E1n -Asia/Tbilisi.generic.long=Hora de Georgia -Asia/Tehran.generic.long=Hora de Ir\u00E1n -Asia/Tel_Aviv.generic.long=Hora de Israel -Asia/Thimbu.generic.long=Hora de But\u00E1n -Asia/Thimphu.generic.long=Hora de But\u00E1n -Asia/Tokyo.generic.long=Hora de Jap\u00F3n -Asia/Ujung_Pandang.generic.long=Hora de Indonesia Central -Asia/Ulaanbaatar.generic.long=Hora de Ulan Bator -Asia/Ulan_Bator.generic.long=Hora de Ulan Bator -Asia/Urumqi.generic.long=Hora de China -Asia/Ust-Nera.daylight.long=Hora de verano de Ust-Nera -Asia/Ust-Nera.generic.long=Hora de Ust-Nera -Asia/Ust-Nera.standard.long=Hora de Ust-Nera -Asia/Vientiane.generic.long=Hora de Indochina -Asia/Vladivostok.generic.long=Hora de Vladivostok -Asia/Yakutsk.generic.long=Hora de Yakutsk -Asia/Yekaterinburg.generic.long=Hora de Ekaterinburgo -Asia/Yerevan.generic.long=Hora de Armenia -Atlantic/Azores.generic.long=Hora de Azores -Atlantic/Bermuda.generic.long=Hora del Atl\u00E1ntico -Atlantic/Canary.generic.long=Hora de Europa Occidental -Atlantic/Cape_Verde.generic.long=Hora de Cabo Verde -Atlantic/Faeroe.generic.long=Hora de Europa Occidental -Atlantic/Faroe.generic.long=Hora de Europa Occidental -Atlantic/Jan_Mayen.generic.long=Hora de Europa Central -Atlantic/Madeira.generic.long=Hora de Europa Occidental -Atlantic/Reykjavik.generic.long=Hora del Meridiano de Greenwich -Atlantic/South_Georgia.generic.long=Hora de Georgia del Sur -Atlantic/St_Helena.generic.long=Hora del Meridiano de Greenwich -Atlantic/Stanley.generic.long=Hora de las islas Malvinas -Australia/ACT.daylight.long=Hora de verano Oriental (Nueva Gales del Sur) -Australia/ACT.generic.long=Hora Oriental (Nueva Gales del Sur) -Australia/ACT.standard.long=Hora est\u00E1ndar Oriental (Nueva Gales del Sur) -Australia/Adelaide.daylight.long=Hora de verano Central (Sur de Australia) -Australia/Adelaide.generic.long=Hora Central (Australia del Sur) -Australia/Adelaide.standard.long=Hora est\u00E1ndar Central (Sur de Australia) -Australia/Brisbane.daylight.long=Hora est\u00E1ndar de verano del Este (Queensland) -Australia/Brisbane.generic.long=Hora Oriental (Queensland) -Australia/Brisbane.standard.long=Hora est\u00E1ndar del Este (Queensland) -Australia/Broken_Hill.daylight.long=Hora de verano Central (Sur de Australia/Nueva Gales del Sur) -Australia/Broken_Hill.generic.long=Hora Central (Australia del Sur/Nueva Gales del Sur) -Australia/Broken_Hill.standard.long=Hora est\u00E1ndar Central (Sur de Australia/Nueva Gales del Sur) -Australia/Canberra.daylight.long=Hora de verano Oriental (Nueva Gales del Sur) -Australia/Canberra.generic.long=Hora Oriental (Nueva Gales del Sur) -Australia/Canberra.standard.long=Hora est\u00E1ndar Oriental (Nueva Gales del Sur) -Australia/Currie.daylight.long=Hora de verano Oriental (Nueva Gales del Sur) -Australia/Currie.generic.long=Hora Oriental (Nueva Gales del Sur) -Australia/Currie.standard.long=Hora est\u00E1ndar Oriental (Nueva Gales del Sur) -Australia/Darwin.daylight.long=Hora de verano Central (territorio del Norte) -Australia/Darwin.generic.long=Hora Central (Territorio Septentrional) -Australia/Darwin.standard.long=Hora est\u00E1ndar Central (territorio del Norte) -Australia/Eucla.daylight.long=Hora est\u00E1ndar de verano de Australia Central y Occidental -Australia/Eucla.generic.long=Hora de Australia Central y Occidental -Australia/Eucla.standard.long=Hora est\u00E1ndar de Australia Central y Occidental -Australia/Hobart.daylight.long=Hora de verano del Este (Tasmania) -Australia/Hobart.generic.long=Hora Oriental (Tasmania) -Australia/Hobart.standard.long=Hora est\u00E1ndar del Este (Tasmania) -Australia/LHI.generic.long=Hora de Lord Howe -Australia/Lindeman.daylight.long=Hora est\u00E1ndar de verano del Este (Queensland) -Australia/Lindeman.generic.long=Hora Oriental (Queensland) -Australia/Lindeman.standard.long=Hora est\u00E1ndar del Este (Queensland) -Australia/Lord_Howe.generic.long=Hora de Lord Howe -Australia/Melbourne.daylight.long=Hora de verano del Este (Victoria) -Australia/Melbourne.generic.long=Hora Oriental (Victoria) -Australia/Melbourne.standard.long=Hora est\u00E1ndar del Este (Victoria) -Australia/NSW.daylight.long=Hora de verano Oriental (Nueva Gales del Sur) -Australia/NSW.generic.long=Hora Oriental (Nueva Gales del Sur) -Australia/NSW.standard.long=Hora est\u00E1ndar Oriental (Nueva Gales del Sur) -Australia/North.daylight.long=Hora de verano Central (territorio del Norte) -Australia/North.generic.long=Hora Central (Territorio Septentrional) -Australia/North.standard.long=Hora est\u00E1ndar Central (territorio del Norte) -Australia/Perth.daylight.long=Hora de verano Occidental (Australia) -Australia/Perth.generic.long=Hora Occidental (Australia) -Australia/Perth.standard.long=Hora est\u00E1ndar Occidental (Australia) -Australia/Queensland.daylight.long=Hora est\u00E1ndar de verano del Este (Queensland) -Australia/Queensland.generic.long=Hora Oriental (Queensland) -Australia/Queensland.standard.long=Hora est\u00E1ndar del Este (Queensland) -Australia/South.daylight.long=Hora de verano Central (Sur de Australia) -Australia/South.generic.long=Hora Central (Australia del Sur) -Australia/South.standard.long=Hora est\u00E1ndar Central (Sur de Australia) -Australia/Sydney.daylight.long=Hora de verano Oriental (Nueva Gales del Sur) -Australia/Sydney.generic.long=Hora Oriental (Nueva Gales del Sur) -Australia/Sydney.standard.long=Hora est\u00E1ndar Oriental (Nueva Gales del Sur) -Australia/Tasmania.daylight.long=Hora de verano del Este (Tasmania) -Australia/Tasmania.generic.long=Hora Oriental (Tasmania) -Australia/Tasmania.standard.long=Hora est\u00E1ndar del Este (Tasmania) -Australia/Victoria.daylight.long=Hora de verano del Este (Victoria) -Australia/Victoria.generic.long=Hora Oriental (Victoria) -Australia/Victoria.standard.long=Hora est\u00E1ndar del Este (Victoria) -Australia/West.daylight.long=Hora de verano Occidental (Australia) -Australia/West.generic.long=Hora Occidental (Australia) -Australia/West.standard.long=Hora est\u00E1ndar Occidental (Australia) -Australia/Yancowinna.daylight.long=Hora de verano Central (Sur de Australia/Nueva Gales del Sur) -Australia/Yancowinna.generic.long=Hora Central (Australia del Sur/Nueva Gales del Sur) -Australia/Yancowinna.standard.long=Hora est\u00E1ndar Central (Sur de Australia/Nueva Gales del Sur) -BET.generic.long=Hora de Brasil -BST.generic.long=Hora de Bangladesh -Brazil/Acre.generic.long=Hora de Acre -Brazil/DeNoronha.generic.long=Hora de Fernando de Noronha -Brazil/East.generic.long=Hora de Brasil -Brazil/West.generic.long=Hora est\u00E1ndar de Amazonia -CAT.generic.long=Hora de \u00C1frica Central -CET.generic.long=Hora de Europa Central -CNT.generic.long=Hora de Terranova -CST.generic.long=Hora Central -CST6CDT.generic.long=Hora Central -CTT.generic.long=Hora de China -Canada/Atlantic.generic.long=Hora del Atl\u00E1ntico -Canada/Central.generic.long=Hora Central -Canada/East-Saskatchewan.generic.long=Hora Central -Canada/Eastern.generic.long=Hora Oriental -Canada/Mountain.generic.long=Hora de las Monta\u00F1as Rocosas -Canada/Newfoundland.generic.long=Hora de Terranova -Canada/Pacific.generic.long=Hora del Pac\u00EDfico -Canada/Saskatchewan.generic.long=Hora Central -Canada/Yukon.generic.long=Hora del Pac\u00EDfico -Chile/Continental.generic.long=Hora de Chile -Chile/EasterIsland.generic.long=Hora de la Isla de Pascua -Cuba.generic.long=Hora de Cuba -EAT.generic.long=Hora de \u00C1frica Oriental -ECT.generic.long=Hora de Europa Central -EET.generic.long=Hora de Europa Oriental -EST.generic.long=Hora Oriental -EST5EDT.generic.long=Hora Oriental -Egypt.generic.long=Hora de Europa Oriental -Eire.generic.long=Hora de Irlanda -Etc/Greenwich.generic.long=Hora del Meridiano de Greenwich -Etc/UCT.generic.long=Hora Universal Coordinada -Etc/UTC.generic.long=Hora Universal Coordinada -Etc/Universal.generic.long=Hora Universal Coordinada -Etc/Zulu.generic.long=Hora Universal Coordinada -Europe/Amsterdam.generic.long=Hora de Europa Central -Europe/Andorra.generic.long=Hora de Europa Central -Europe/Athens.generic.long=Hora de Europa Oriental -Europe/Belfast.generic.long=Hora de Gran Breta\u00F1a -Europe/Belgrade.generic.long=Hora de Europa Central -Europe/Berlin.generic.long=Hora de Europa Central -Europe/Bratislava.generic.long=Hora de Europa Central -Europe/Brussels.generic.long=Hora de Europa Central -Europe/Bucharest.generic.long=Hora de Europa Oriental -Europe/Budapest.generic.long=Hora de Europa Central -Europe/Busingen.generic.long=Hora de Europa Central -Europe/Chisinau.generic.long=Hora de Europa Oriental -Europe/Copenhagen.generic.long=Hora de Europa Central -Europe/Dublin.generic.long=Hora de Irlanda -Europe/Gibraltar.generic.long=Hora de Europa Central -Europe/Guernsey.generic.long=Hora de Gran Breta\u00F1a -Europe/Helsinki.generic.long=Hora de Europa Oriental -Europe/Isle_of_Man.generic.long=Hora de Gran Breta\u00F1a -Europe/Istanbul.generic.long=Hora de Europa Oriental -Europe/Jersey.generic.long=Hora de Gran Breta\u00F1a -Europe/Kaliningrad.daylight.long=Hora de verano de Europa m\u00E1s Oriental -Europe/Kaliningrad.generic.long=Hora de Europa m\u00E1s Oriental -Europe/Kaliningrad.standard.long=Hora de Europa m\u00E1s Oriental -Europe/Kiev.generic.long=Hora de Europa Oriental -Europe/Lisbon.generic.long=Hora de Europa Occidental -Europe/Ljubljana.generic.long=Hora de Europa Central -Europe/London.generic.long=Hora de Gran Breta\u00F1a -Europe/Luxembourg.generic.long=Hora de Europa Central -Europe/Madrid.generic.long=Hora de Europa Central -Europe/Malta.generic.long=Hora de Europa Central -Europe/Mariehamn.generic.long=Hora de Europa Oriental -Europe/Minsk.daylight.long=Hora de verano de Europa m\u00E1s Oriental -Europe/Minsk.generic.long=Hora de Europa m\u00E1s Oriental -Europe/Minsk.standard.long=Hora de Europa m\u00E1s Oriental -Europe/Monaco.generic.long=Hora de Europa Central -Europe/Moscow.generic.long=Hora de Mosc\u00FA -Europe/Nicosia.generic.long=Hora de Europa Oriental -Europe/Oslo.generic.long=Hora de Europa Central -Europe/Paris.generic.long=Hora de Europa Central -Europe/Podgorica.generic.long=Hora de Europa Central -Europe/Prague.generic.long=Hora de Europa Central -Europe/Riga.generic.long=Hora de Europa Oriental -Europe/Rome.generic.long=Hora de Europa Central -Europe/Samara.generic.long=Hora de Samara -Europe/San_Marino.generic.long=Hora de Europa Central -Europe/Sarajevo.generic.long=Hora de Europa Central -Europe/Simferopol.generic.long=Hora de Europa Oriental -Europe/Skopje.generic.long=Hora de Europa Central -Europe/Sofia.generic.long=Hora de Europa Oriental -Europe/Stockholm.generic.long=Hora de Europa Central -Europe/Tallinn.generic.long=Hora de Europa Oriental -Europe/Tirane.generic.long=Hora de Europa Central -Europe/Tiraspol.generic.long=Hora de Europa Oriental -Europe/Uzhgorod.generic.long=Hora de Europa Oriental -Europe/Vaduz.generic.long=Hora de Europa Central -Europe/Vatican.generic.long=Hora de Europa Central -Europe/Vienna.generic.long=Hora de Europa Central -Europe/Vilnius.generic.long=Hora de Europa Oriental -Europe/Volgograd.generic.long=Hora de Volgogrado -Europe/Warsaw.generic.long=Hora de Europa Central -Europe/Zagreb.generic.long=Hora de Europa Central -Europe/Zaporozhye.generic.long=Hora de Europa Oriental -Europe/Zurich.generic.long=Hora de Europa Central -GB-Eire.generic.long=Hora de Gran Breta\u00F1a -GB.generic.long=Hora de Gran Breta\u00F1a -GMT.generic.long=Hora del Meridiano de Greenwich -Greenwich.generic.long=Hora del Meridiano de Greenwich -HST.generic.long=Hora de Hawaii -Hongkong.generic.long=Hora de Hong Kong -IET.generic.long=Hora Oriental -IST.generic.long=Hora de India -Iceland.generic.long=Hora del Meridiano de Greenwich -Indian/Antananarivo.generic.long=Hora de \u00C1frica Oriental -Indian/Chagos.generic.long=Hora del Territorio del Oc\u00E9ano \u00CDndico -Indian/Christmas.generic.long=Hora de la isla de Christmas -Indian/Cocos.generic.long=Hora de las islas Cocos -Indian/Comoro.generic.long=Hora de \u00C1frica Oriental -Indian/Kerguelen.generic.long=Hora de los Territorios Franceses del Sur y de la Ant\u00E1rtida -Indian/Mahe.generic.long=Hora de Seychelles -Indian/Maldives.generic.long=Hora de Maldivas -Indian/Mauritius.generic.long=Hora de Mauricio -Indian/Mayotte.generic.long=Hora de \u00C1frica Oriental -Indian/Reunion.generic.long=Hora de Reuni\u00F3n -Iran.generic.long=Hora de Ir\u00E1n -Israel.generic.long=Hora de Israel -JST.generic.long=Hora de Jap\u00F3n -Jamaica.generic.long=Hora Oriental -Japan.generic.long=Hora de Jap\u00F3n -Kwajalein.generic.long=Hora de Islas Marshall -Libya.generic.long=Hora de Europa Oriental -MET.generic.long=MET -MIT.generic.long=Hora de Samoa Occidental -MST.generic.long=Hora de las Monta\u00f1as Rocosas -MST7MDT.generic.long=Hora de las Monta\u00f1as Rocosas -Mexico/BajaNorte.generic.long=Hora del Pac\u00EDfico -Mexico/BajaSur.generic.long=Hora de las Monta\u00F1as Rocosas -Mexico/General.generic.long=Hora Central -NET.generic.long=Hora de Armenia -NST.generic.long=Hora de Nueva Zelanda -NZ-CHAT.generic.long=Hora de Chatam -NZ.generic.long=Hora de Nueva Zelanda -Navajo.generic.long=Hora de las Monta\u00F1as Rocosas -PLT.generic.long=Hora de Pakist\u00E1n -PNT.generic.long=Hora de las Monta\u00F1as Rocosas -PRC.generic.long=Hora de China -PRT.generic.long=Hora del Atl\u00E1ntico -PST.generic.long=Hora del Pac\u00EDfico -PST8PDT.generic.long=Hora del Pac\u00edfico -Pacific/Apia.generic.long=Hora de Samoa Occidental -Pacific/Auckland.generic.long=Hora de Nueva Zelanda -Pacific/Chatham.generic.long=Hora de Chatam -Pacific/Chuuk.daylight.long=Hora de verano de Chuuk -Pacific/Chuuk.generic.long=Hora de Chuuk -Pacific/Chuuk.standard.long=Hora de Chuuk -Pacific/Easter.generic.long=Hora de la Isla de Pascua -Pacific/Efate.generic.long=Hora de Vanuatu -Pacific/Enderbury.generic.long=Hora de la isla Phoenix -Pacific/Fakaofo.generic.long=Hora de Tokelau -Pacific/Fiji.generic.long=Hora de Fiji -Pacific/Funafuti.generic.long=Hora de Tuvalu -Pacific/Galapagos.generic.long=Hora de Gal\u00E1pagos -Pacific/Gambier.generic.long=Hora de Gambier -Pacific/Guadalcanal.generic.long=Hora de las Islas Solomon -Pacific/Guam.generic.long=Hora de Chamorro -Pacific/Honolulu.generic.long=Hora de Hawaii -Pacific/Johnston.generic.long=Hora de Hawaii -Pacific/Kiritimati.generic.long=Hora de las islas Line -Pacific/Kosrae.generic.long=Hora de Kosrae -Pacific/Kwajalein.generic.long=Hora de Islas Marshall -Pacific/Majuro.generic.long=Hora de Islas Marshall -Pacific/Marquesas.generic.long=Hora de Marquesas -Pacific/Midway.generic.long=Hora de Samoa -Pacific/Nauru.generic.long=Hora de Nauru -Pacific/Niue.generic.long=Hora de Niue -Pacific/Norfolk.generic.long=Hora de Norfolk -Pacific/Noumea.generic.long=Hora de Nueva Caledonia -Pacific/Pago_Pago.generic.long=Hora de Samoa -Pacific/Palau.generic.long=Hora de Palau -Pacific/Pitcairn.generic.long=Hora de Islas Pitcairn -Pacific/Pohnpei.daylight.long=Hora de verano de Pohnpei -Pacific/Pohnpei.generic.long=Hora de Pohnpei -Pacific/Pohnpei.standard.long=Hora de Pohnpei -Pacific/Ponape.daylight.long=Hora de verano de Pohnpei -Pacific/Ponape.generic.long=Hora de Pohnpei -Pacific/Ponape.standard.long=Hora de Pohnpei -Pacific/Port_Moresby.generic.long=Hora de Pap\u00FAa-Nueva Guinea -Pacific/Rarotonga.generic.long=Hora de las islas Cook -Pacific/Saipan.generic.long=Hora de Chamorro -Pacific/Samoa.generic.long=Hora de Samoa -Pacific/Tahiti.generic.long=Hora de Tahit\u00ED -Pacific/Tarawa.generic.long=Hora de las islas Gilbert -Pacific/Tongatapu.generic.long=Hora de Tonga -Pacific/Truk.daylight.long=Hora de verano de Chuuk -Pacific/Truk.generic.long=Hora de Chuuk -Pacific/Truk.standard.long=Hora de Chuuk -Pacific/Wake.generic.long=Hora de Wake -Pacific/Wallis.generic.long=Hora de Wallis y Futuna -Pacific/Yap.daylight.long=Hora de verano de Chuuk -Pacific/Yap.generic.long=Hora de Chuuk -Pacific/Yap.standard.long=Hora de Chuuk -Poland.generic.long=Hora de Europa Central -Portugal.generic.long=Hora de Europa Occidental -ROK.generic.long=Hora de Corea -SST.generic.long=Hora de las Islas Solomon -Singapore.generic.long=Hora de Singapur -SystemV/AST4.generic.long=Hora del Atl\u00E1ntico -SystemV/AST4ADT.generic.long=Hora del Atl\u00E1ntico -SystemV/CST6.generic.long=Hora Central -SystemV/CST6CDT.generic.long=Hora Central -SystemV/EST5.generic.long=Hora Oriental -SystemV/EST5EDT.generic.long=Hora Oriental -SystemV/HST10.generic.long=Hora de Hawaii -SystemV/MST7.generic.long=Hora de las Monta\u00F1as Rocosas -SystemV/MST7MDT.generic.long=Hora de las Monta\u00F1as Rocosas -SystemV/PST8.generic.long=Hora del Pac\u00EDfico -SystemV/PST8PDT.generic.long=Hora del Pac\u00EDfico -SystemV/YST9.generic.long=Hora de Alaska -SystemV/YST9YDT.generic.long=Hora de Alaska -Turkey.generic.long=Hora de Europa Oriental -UCT.generic.long=Hora Universal Coordinada -US/Alaska.generic.long=Hora de Alaska -US/Aleutian.generic.long=Hora de Hawaii-Aleutian -US/Arizona.generic.long=Hora de las Monta\u00F1as Rocosas -US/Central.generic.long=Hora Central -US/East-Indiana.generic.long=Hora Oriental -US/Eastern.generic.long=Hora Oriental -US/Hawaii.generic.long=Hora de Hawaii -US/Indiana-Starke.generic.long=Hora Central -US/Michigan.generic.long=Hora Oriental -US/Mountain.generic.long=Hora de las Monta\u00F1as Rocosas -US/Pacific-New.generic.long=Hora del Pac\u00EDfico -US/Pacific.generic.long=Hora del Pac\u00EDfico -US/Samoa.generic.long=Hora de Samoa -UTC.generic.long=Hora Universal Coordinada -Universal.generic.long=Hora Universal Coordinada -VST.generic.long=Hora de Indochina -W-SU.generic.long=Hora de Mosc\u00FA -WET.generic.long=Hora de Europa Occidental -Zulu.generic.long=Hora Universal Coordinada diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_es_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_es_short.properties deleted file mode 100644 index 095522a68d1..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_es_short.properties +++ /dev/null @@ -1,1743 +0,0 @@ -ACT.daylight.short=CST -ACT.generic.short=CT -ACT.standard.short=CST -AET.daylight.short=EST -AET.generic.short=ET -AET.standard.short=EST -Africa/Abidjan.daylight.short=GMT -Africa/Abidjan.generic.short=GMT -Africa/Abidjan.standard.short=GMT -Africa/Accra.daylight.short=GHST -Africa/Accra.generic.short=GMT -Africa/Accra.standard.short=GMT -Africa/Addis_Ababa.daylight.short=EAST -Africa/Addis_Ababa.generic.short=EAT -Africa/Addis_Ababa.standard.short=EAT -Africa/Algiers.daylight.short=CEST -Africa/Algiers.generic.short=CET -Africa/Algiers.standard.short=CET -Africa/Asmara.daylight.short=EAST -Africa/Asmara.generic.short=EAT -Africa/Asmara.standard.short=EAT -Africa/Asmera.daylight.short=EAST -Africa/Asmera.generic.short=EAT -Africa/Asmera.standard.short=EAT -Africa/Bamako.daylight.short=GMT -Africa/Bamako.generic.short=GMT -Africa/Bamako.standard.short=GMT -Africa/Bangui.daylight.short=WAST -Africa/Bangui.generic.short=WAT -Africa/Bangui.standard.short=WAT -Africa/Banjul.daylight.short=GMT -Africa/Banjul.generic.short=GMT -Africa/Banjul.standard.short=GMT -Africa/Bissau.daylight.short=GMT -Africa/Bissau.generic.short=GMT -Africa/Bissau.standard.short=GMT -Africa/Blantyre.daylight.short=CAST -Africa/Blantyre.generic.short=CAT -Africa/Blantyre.standard.short=CAT -Africa/Brazzaville.daylight.short=WAST -Africa/Brazzaville.generic.short=WAT -Africa/Brazzaville.standard.short=WAT -Africa/Bujumbura.daylight.short=CAST -Africa/Bujumbura.generic.short=CAT -Africa/Bujumbura.standard.short=CAT -Africa/Cairo.daylight.short=EEST -Africa/Cairo.generic.short=EET -Africa/Cairo.standard.short=EET -Africa/Casablanca.daylight.short=WEST -Africa/Casablanca.generic.short=WET -Africa/Casablanca.standard.short=WET -Africa/Ceuta.daylight.short=CEST -Africa/Ceuta.generic.short=CET -Africa/Ceuta.standard.short=CET -Africa/Conakry.daylight.short=GMT -Africa/Conakry.generic.short=GMT -Africa/Conakry.standard.short=GMT -Africa/Dakar.daylight.short=GMT -Africa/Dakar.generic.short=GMT -Africa/Dakar.standard.short=GMT -Africa/Dar_es_Salaam.daylight.short=EAST -Africa/Dar_es_Salaam.generic.short=EAT -Africa/Dar_es_Salaam.standard.short=EAT -Africa/Djibouti.daylight.short=EAST -Africa/Djibouti.generic.short=EAT -Africa/Djibouti.standard.short=EAT -Africa/Douala.daylight.short=WAST -Africa/Douala.generic.short=WAT -Africa/Douala.standard.short=WAT -Africa/El_Aaiun.daylight.short=WEST -Africa/El_Aaiun.generic.short=WET -Africa/El_Aaiun.standard.short=WET -Africa/Freetown.daylight.short=SLST -Africa/Freetown.generic.short=SLT -Africa/Freetown.standard.short=GMT -Africa/Gaborone.daylight.short=CAST -Africa/Gaborone.generic.short=CAT -Africa/Gaborone.standard.short=CAT -Africa/Harare.daylight.short=CAST -Africa/Harare.generic.short=CAT -Africa/Harare.standard.short=CAT -Africa/Johannesburg.daylight.short=SAST -Africa/Johannesburg.generic.short=SAT -Africa/Johannesburg.standard.short=SAST -Africa/Juba.daylight.short=EAST -Africa/Juba.generic.short=EAT -Africa/Juba.standard.short=EAT -Africa/Kampala.daylight.short=EAST -Africa/Kampala.generic.short=EAT -Africa/Kampala.standard.short=EAT -Africa/Khartoum.daylight.short=EAST -Africa/Khartoum.generic.short=EAT -Africa/Khartoum.standard.short=EAT -Africa/Kigali.daylight.short=CAST -Africa/Kigali.generic.short=CAT -Africa/Kigali.standard.short=CAT -Africa/Kinshasa.daylight.short=WAST -Africa/Kinshasa.generic.short=WAT -Africa/Kinshasa.standard.short=WAT -Africa/Lagos.daylight.short=WAST -Africa/Lagos.generic.short=WAT -Africa/Lagos.standard.short=WAT -Africa/Libreville.daylight.short=WAST -Africa/Libreville.generic.short=WAT -Africa/Libreville.standard.short=WAT -Africa/Lome.daylight.short=GMT -Africa/Lome.generic.short=GMT -Africa/Lome.standard.short=GMT -Africa/Luanda.daylight.short=WAST -Africa/Luanda.generic.short=WAT -Africa/Luanda.standard.short=WAT -Africa/Lubumbashi.daylight.short=CAST -Africa/Lubumbashi.generic.short=CAT -Africa/Lubumbashi.standard.short=CAT -Africa/Lusaka.daylight.short=CAST -Africa/Lusaka.generic.short=CAT -Africa/Lusaka.standard.short=CAT -Africa/Malabo.daylight.short=WAST -Africa/Malabo.generic.short=WAT -Africa/Malabo.standard.short=WAT -Africa/Maputo.daylight.short=CAST -Africa/Maputo.generic.short=CAT -Africa/Maputo.standard.short=CAT -Africa/Maseru.daylight.short=SAST -Africa/Maseru.generic.short=SAT -Africa/Maseru.standard.short=SAST -Africa/Mbabane.daylight.short=SAST -Africa/Mbabane.generic.short=SAT -Africa/Mbabane.standard.short=SAST -Africa/Mogadishu.daylight.short=EAST -Africa/Mogadishu.generic.short=EAT -Africa/Mogadishu.standard.short=EAT -Africa/Monrovia.daylight.short=GMT -Africa/Monrovia.generic.short=GMT -Africa/Monrovia.standard.short=GMT -Africa/Nairobi.daylight.short=EAST -Africa/Nairobi.generic.short=EAT -Africa/Nairobi.standard.short=EAT -Africa/Ndjamena.daylight.short=WAST -Africa/Ndjamena.generic.short=WAT -Africa/Ndjamena.standard.short=WAT -Africa/Niamey.daylight.short=WAST -Africa/Niamey.generic.short=WAT -Africa/Niamey.standard.short=WAT -Africa/Nouakchott.daylight.short=GMT -Africa/Nouakchott.generic.short=GMT -Africa/Nouakchott.standard.short=GMT -Africa/Ouagadougou.daylight.short=GMT -Africa/Ouagadougou.generic.short=GMT -Africa/Ouagadougou.standard.short=GMT -Africa/Porto-Novo.daylight.short=WAST -Africa/Porto-Novo.generic.short=WAT -Africa/Porto-Novo.standard.short=WAT -Africa/Sao_Tome.daylight.short=GMT -Africa/Sao_Tome.generic.short=GMT -Africa/Sao_Tome.standard.short=GMT -Africa/Timbuktu.daylight.short=GMT -Africa/Timbuktu.generic.short=GMT -Africa/Timbuktu.standard.short=GMT -Africa/Tripoli.daylight.short=EEST -Africa/Tripoli.generic.short=EET -Africa/Tripoli.standard.short=EET -Africa/Tunis.daylight.short=CEST -Africa/Tunis.generic.short=CET -Africa/Tunis.standard.short=CET -Africa/Windhoek.daylight.short=WAST -Africa/Windhoek.generic.short=WAT -Africa/Windhoek.standard.short=WAT -AGT.daylight.short=ARST -AGT.generic.short=ART -AGT.standard.short=ART -America/Adak.daylight.short=HADT -America/Adak.generic.short=HAT -America/Adak.standard.short=HAST -America/Anchorage.daylight.short=AKDT -America/Anchorage.generic.short=AKT -America/Anchorage.standard.short=AKST -America/Anguilla.daylight.short=ADT -America/Anguilla.generic.short=AT -America/Anguilla.standard.short=AST -America/Antigua.daylight.short=ADT -America/Antigua.generic.short=AT -America/Antigua.standard.short=AST -America/Araguaina.daylight.short=BRST -America/Araguaina.generic.short=BRT -America/Araguaina.standard.short=BRT -America/Argentina/Buenos_Aires.daylight.short=ARST -America/Argentina/Buenos_Aires.generic.short=ART -America/Argentina/Buenos_Aires.standard.short=ART -America/Argentina/Catamarca.daylight.short=ARST -America/Argentina/Catamarca.generic.short=ART -America/Argentina/Catamarca.standard.short=ART -America/Argentina/ComodRivadavia.daylight.short=ARST -America/Argentina/ComodRivadavia.generic.short=ART -America/Argentina/ComodRivadavia.standard.short=ART -America/Argentina/Cordoba.daylight.short=ARST -America/Argentina/Cordoba.generic.short=ART -America/Argentina/Cordoba.standard.short=ART -America/Argentina/Jujuy.daylight.short=ARST -America/Argentina/Jujuy.generic.short=ART -America/Argentina/Jujuy.standard.short=ART -America/Argentina/La_Rioja.daylight.short=ARST -America/Argentina/La_Rioja.generic.short=ART -America/Argentina/La_Rioja.standard.short=ART -America/Argentina/Mendoza.daylight.short=ARST -America/Argentina/Mendoza.generic.short=ART -America/Argentina/Mendoza.standard.short=ART -America/Argentina/Rio_Gallegos.daylight.short=ARST -America/Argentina/Rio_Gallegos.generic.short=ART -America/Argentina/Rio_Gallegos.standard.short=ART -America/Argentina/Salta.daylight.short=ARST -America/Argentina/Salta.generic.short=ART -America/Argentina/Salta.standard.short=ART -America/Argentina/San_Juan.daylight.short=ARST -America/Argentina/San_Juan.generic.short=ART -America/Argentina/San_Juan.standard.short=ART -America/Argentina/San_Luis.daylight.short=ARST -America/Argentina/San_Luis.generic.short=ART -America/Argentina/San_Luis.standard.short=ART -America/Argentina/Tucuman.daylight.short=ARST -America/Argentina/Tucuman.generic.short=ART -America/Argentina/Tucuman.standard.short=ART -America/Argentina/Ushuaia.daylight.short=ARST -America/Argentina/Ushuaia.generic.short=ART -America/Argentina/Ushuaia.standard.short=ART -America/Aruba.daylight.short=ADT -America/Aruba.generic.short=AT -America/Aruba.standard.short=AST -America/Asuncion.daylight.short=PYST -America/Asuncion.generic.short=PYT -America/Asuncion.standard.short=PYT -America/Atikokan.daylight.short=EDT -America/Atikokan.generic.short=ET -America/Atikokan.standard.short=EST -America/Atka.daylight.short=HADT -America/Atka.generic.short=HAT -America/Atka.standard.short=HAST -America/Bahia_Banderas.daylight.short=CDT -America/Bahia_Banderas.generic.short=CT -America/Bahia_Banderas.standard.short=CST -America/Bahia.daylight.short=BRST -America/Bahia.generic.short=BRT -America/Bahia.standard.short=BRT -America/Barbados.daylight.short=ADT -America/Barbados.generic.short=AT -America/Barbados.standard.short=AST -America/Belem.daylight.short=BRST -America/Belem.generic.short=BRT -America/Belem.standard.short=BRT -America/Belize.daylight.short=CDT -America/Belize.generic.short=CT -America/Belize.standard.short=CST -America/Blanc-Sablon.daylight.short=ADT -America/Blanc-Sablon.generic.short=AT -America/Blanc-Sablon.standard.short=AST -America/Boa_Vista.daylight.short=AMST -America/Boa_Vista.generic.short=AMT -America/Boa_Vista.standard.short=AMT -America/Bogota.daylight.short=COST -America/Bogota.generic.short=COT -America/Bogota.standard.short=COT -America/Boise.daylight.short=MDT -America/Boise.generic.short=MT -America/Boise.standard.short=MST -America/Buenos_Aires.daylight.short=ARST -America/Buenos_Aires.generic.short=ART -America/Buenos_Aires.standard.short=ART -America/Cambridge_Bay.daylight.short=MDT -America/Cambridge_Bay.generic.short=MT -America/Cambridge_Bay.standard.short=MST -America/Campo_Grande.daylight.short=AMST -America/Campo_Grande.generic.short=AMT -America/Campo_Grande.standard.short=AMT -America/Cancun.daylight.short=CDT -America/Cancun.generic.short=CT -America/Cancun.standard.short=CST -America/Caracas.daylight.short=VEST -America/Caracas.generic.short=VET -America/Caracas.standard.short=VET -America/Catamarca.daylight.short=ARST -America/Catamarca.generic.short=ART -America/Catamarca.standard.short=ART -America/Cayenne.daylight.short=GFST -America/Cayenne.generic.short=GFT -America/Cayenne.standard.short=GFT -America/Cayman.daylight.short=EDT -America/Cayman.generic.short=ET -America/Cayman.standard.short=EST -America/Chicago.daylight.short=CDT -America/Chicago.generic.short=CT -America/Chicago.standard.short=CST -America/Chihuahua.daylight.short=MDT -America/Chihuahua.generic.short=MT -America/Chihuahua.standard.short=MST -America/Coral_Harbour.daylight.short=EDT -America/Coral_Harbour.generic.short=ET -America/Coral_Harbour.standard.short=EST -America/Cordoba.daylight.short=ARST -America/Cordoba.generic.short=ART -America/Cordoba.standard.short=ART -America/Costa_Rica.daylight.short=CDT -America/Costa_Rica.generic.short=CT -America/Costa_Rica.standard.short=CST -America/Creston.daylight.short=MDT -America/Creston.generic.short=MT -America/Creston.standard.short=MST -America/Cuiaba.daylight.short=AMST -America/Cuiaba.generic.short=AMT -America/Cuiaba.standard.short=AMT -America/Curacao.daylight.short=ADT -America/Curacao.generic.short=AT -America/Curacao.standard.short=AST -America/Danmarkshavn.daylight.short=GMT -America/Danmarkshavn.generic.short=GMT -America/Danmarkshavn.standard.short=GMT -America/Dawson_Creek.daylight.short=MDT -America/Dawson_Creek.generic.short=MT -America/Dawson_Creek.standard.short=MST -America/Dawson.daylight.short=PDT -America/Dawson.generic.short=PT -America/Dawson.standard.short=PST -America/Denver.daylight.short=MDT -America/Denver.generic.short=MT -America/Denver.standard.short=MST -America/Detroit.daylight.short=EDT -America/Detroit.generic.short=ET -America/Detroit.standard.short=EST -America/Dominica.daylight.short=ADT -America/Dominica.generic.short=AT -America/Dominica.standard.short=AST -America/Edmonton.daylight.short=MDT -America/Edmonton.generic.short=MT -America/Edmonton.standard.short=MST -America/Eirunepe.daylight.short=ACST -America/Eirunepe.generic.short=ACT -America/Eirunepe.standard.short=ACT -America/El_Salvador.daylight.short=CDT -America/El_Salvador.generic.short=CT -America/El_Salvador.standard.short=CST -America/Ensenada.daylight.short=PDT -America/Ensenada.generic.short=PT -America/Ensenada.standard.short=PST -America/Fortaleza.daylight.short=BRST -America/Fortaleza.generic.short=BRT -America/Fortaleza.standard.short=BRT -America/Fort_Wayne.daylight.short=EDT -America/Fort_Wayne.generic.short=ET -America/Fort_Wayne.standard.short=EST -America/Glace_Bay.daylight.short=ADT -America/Glace_Bay.generic.short=AT -America/Glace_Bay.standard.short=AST -America/Godthab.daylight.short=WGST -America/Godthab.generic.short=WGT -America/Godthab.standard.short=WGT -America/Goose_Bay.daylight.short=ADT -America/Goose_Bay.generic.short=AT -America/Goose_Bay.standard.short=AST -America/Grand_Turk.daylight.short=EDT -America/Grand_Turk.generic.short=ET -America/Grand_Turk.standard.short=EST -America/Grenada.daylight.short=ADT -America/Grenada.generic.short=AT -America/Grenada.standard.short=AST -America/Guadeloupe.daylight.short=ADT -America/Guadeloupe.generic.short=AT -America/Guadeloupe.standard.short=AST -America/Guatemala.daylight.short=CDT -America/Guatemala.generic.short=CT -America/Guatemala.standard.short=CST -America/Guayaquil.daylight.short=ECST -America/Guayaquil.generic.short=ECT -America/Guayaquil.standard.short=ECT -America/Guyana.daylight.short=GYST -America/Guyana.generic.short=GYT -America/Guyana.standard.short=GYT -America/Halifax.daylight.short=ADT -America/Halifax.generic.short=AT -America/Halifax.standard.short=AST -America/Havana.daylight.short=CDT -America/Havana.generic.short=CT -America/Havana.standard.short=CST -America/Hermosillo.daylight.short=MDT -America/Hermosillo.generic.short=MT -America/Hermosillo.standard.short=MST -America/Indiana/Indianapolis.daylight.short=EDT -America/Indiana/Indianapolis.generic.short=ET -America/Indiana/Indianapolis.standard.short=EST -America/Indiana/Knox.daylight.short=CDT -America/Indiana/Knox.generic.short=CT -America/Indiana/Knox.standard.short=CST -America/Indiana/Marengo.daylight.short=EDT -America/Indiana/Marengo.generic.short=ET -America/Indiana/Marengo.standard.short=EST -America/Indiana/Petersburg.daylight.short=EDT -America/Indiana/Petersburg.generic.short=ET -America/Indiana/Petersburg.standard.short=EST -America/Indianapolis.daylight.short=EDT -America/Indianapolis.generic.short=ET -America/Indianapolis.standard.short=EST -America/Indiana/Tell_City.daylight.short=CDT -America/Indiana/Tell_City.generic.short=CT -America/Indiana/Tell_City.standard.short=CST -America/Indiana/Vevay.daylight.short=EDT -America/Indiana/Vevay.generic.short=ET -America/Indiana/Vevay.standard.short=EST -America/Indiana/Vincennes.daylight.short=EDT -America/Indiana/Vincennes.generic.short=ET -America/Indiana/Vincennes.standard.short=EST -America/Indiana/Winamac.daylight.short=EDT -America/Indiana/Winamac.generic.short=ET -America/Indiana/Winamac.standard.short=EST -America/Inuvik.daylight.short=MDT -America/Inuvik.generic.short=MT -America/Inuvik.standard.short=MST -America/Iqaluit.daylight.short=EDT -America/Iqaluit.generic.short=ET -America/Iqaluit.standard.short=EST -America/Jamaica.daylight.short=EDT -America/Jamaica.generic.short=ET -America/Jamaica.standard.short=EST -America/Jujuy.daylight.short=ARST -America/Jujuy.generic.short=ART -America/Jujuy.standard.short=ART -America/Juneau.daylight.short=AKDT -America/Juneau.generic.short=AKT -America/Juneau.standard.short=AKST -America/Kentucky/Louisville.daylight.short=EDT -America/Kentucky/Louisville.generic.short=ET -America/Kentucky/Louisville.standard.short=EST -America/Kentucky/Monticello.daylight.short=EDT -America/Kentucky/Monticello.generic.short=ET -America/Kentucky/Monticello.standard.short=EST -America/Knox_IN.daylight.short=CDT -America/Knox_IN.generic.short=CT -America/Knox_IN.standard.short=CST -America/Kralendijk.daylight.short=ADT -America/Kralendijk.generic.short=AT -America/Kralendijk.standard.short=AST -America/La_Paz.daylight.short=BOST -America/La_Paz.generic.short=BOT -America/La_Paz.standard.short=BOT -America/Lima.daylight.short=PEST -America/Lima.generic.short=PET -America/Lima.standard.short=PET -America/Los_Angeles.daylight.short=PDT -America/Los_Angeles.generic.short=PT -America/Los_Angeles.standard.short=PST -America/Louisville.daylight.short=EDT -America/Louisville.generic.short=ET -America/Louisville.standard.short=EST -America/Lower_Princes.daylight.short=ADT -America/Lower_Princes.generic.short=AT -America/Lower_Princes.standard.short=AST -America/Maceio.daylight.short=BRST -America/Maceio.generic.short=BRT -America/Maceio.standard.short=BRT -America/Managua.daylight.short=CDT -America/Managua.generic.short=CT -America/Managua.standard.short=CST -America/Manaus.daylight.short=AMST -America/Manaus.generic.short=AMT -America/Manaus.standard.short=AMT -America/Marigot.daylight.short=ADT -America/Marigot.generic.short=AT -America/Marigot.standard.short=AST -America/Martinique.daylight.short=ADT -America/Martinique.generic.short=AT -America/Martinique.standard.short=AST -America/Matamoros.daylight.short=CDT -America/Matamoros.generic.short=CT -America/Matamoros.standard.short=CST -America/Mazatlan.daylight.short=MDT -America/Mazatlan.generic.short=MT -America/Mazatlan.standard.short=MST -America/Mendoza.daylight.short=ARST -America/Mendoza.generic.short=ART -America/Mendoza.standard.short=ART -America/Menominee.daylight.short=CDT -America/Menominee.generic.short=CT -America/Menominee.standard.short=CST -America/Merida.daylight.short=CDT -America/Merida.generic.short=CT -America/Merida.standard.short=CST -America/Metlakatla.daylight.short=MeDT -America/Metlakatla.generic.short=MeT -America/Metlakatla.standard.short=MeST -America/Mexico_City.daylight.short=CDT -America/Mexico_City.generic.short=CT -America/Mexico_City.standard.short=CST -America/Miquelon.daylight.short=PMDT -America/Miquelon.generic.short=PMT -America/Miquelon.standard.short=PMST -America/Moncton.daylight.short=ADT -America/Moncton.generic.short=AT -America/Moncton.standard.short=AST -America/Monterrey.daylight.short=CDT -America/Monterrey.generic.short=CT -America/Monterrey.standard.short=CST -America/Montevideo.daylight.short=UYST -America/Montevideo.generic.short=UYT -America/Montevideo.standard.short=UYT -America/Montreal.daylight.short=EDT -America/Montreal.generic.short=ET -America/Montreal.standard.short=EST -America/Montserrat.daylight.short=ADT -America/Montserrat.generic.short=AT -America/Montserrat.standard.short=AST -America/Nassau.daylight.short=EDT -America/Nassau.generic.short=ET -America/Nassau.standard.short=EST -America/New_York.daylight.short=EDT -America/New_York.generic.short=ET -America/New_York.standard.short=EST -America/Nipigon.daylight.short=EDT -America/Nipigon.generic.short=ET -America/Nipigon.standard.short=EST -America/Nome.daylight.short=AKDT -America/Nome.generic.short=AKT -America/Nome.standard.short=AKST -America/Noronha.daylight.short=FNST -America/Noronha.generic.short=FNT -America/Noronha.standard.short=FNT -America/North_Dakota/Beulah.daylight.short=CDT -America/North_Dakota/Beulah.generic.short=CT -America/North_Dakota/Beulah.standard.short=CST -America/North_Dakota/Center.daylight.short=CDT -America/North_Dakota/Center.generic.short=CT -America/North_Dakota/Center.standard.short=CST -America/North_Dakota/New_Salem.daylight.short=CDT -America/North_Dakota/New_Salem.generic.short=CT -America/North_Dakota/New_Salem.standard.short=CST -America/Ojinaga.daylight.short=MDT -America/Ojinaga.generic.short=MT -America/Ojinaga.standard.short=MST -America/Panama.daylight.short=EDT -America/Panama.generic.short=ET -America/Panama.standard.short=EST -America/Pangnirtung.daylight.short=EDT -America/Pangnirtung.generic.short=ET -America/Pangnirtung.standard.short=EST -America/Paramaribo.daylight.short=SRST -America/Paramaribo.generic.short=SRT -America/Paramaribo.standard.short=SRT -America/Phoenix.daylight.short=MDT -America/Phoenix.generic.short=MT -America/Phoenix.standard.short=MST -America/Port-au-Prince.daylight.short=EDT -America/Port-au-Prince.generic.short=ET -America/Port-au-Prince.standard.short=EST -America/Porto_Acre.daylight.short=ACST -America/Porto_Acre.generic.short=ACT -America/Porto_Acre.standard.short=ACT -America/Port_of_Spain.daylight.short=ADT -America/Port_of_Spain.generic.short=AT -America/Port_of_Spain.standard.short=AST -America/Porto_Velho.daylight.short=AMST -America/Porto_Velho.generic.short=AMT -America/Porto_Velho.standard.short=AMT -America/Puerto_Rico.daylight.short=ADT -America/Puerto_Rico.generic.short=AT -America/Puerto_Rico.standard.short=AST -America/Rainy_River.daylight.short=CDT -America/Rainy_River.generic.short=CT -America/Rainy_River.standard.short=CST -America/Rankin_Inlet.daylight.short=CDT -America/Rankin_Inlet.generic.short=CT -America/Rankin_Inlet.standard.short=CST -America/Recife.daylight.short=BRST -America/Recife.generic.short=BRT -America/Recife.standard.short=BRT -America/Regina.daylight.short=CDT -America/Regina.generic.short=CT -America/Regina.standard.short=CST -America/Resolute.daylight.short=CDT -America/Resolute.generic.short=CT -America/Resolute.standard.short=CST -America/Rio_Branco.daylight.short=ACST -America/Rio_Branco.generic.short=ACT -America/Rio_Branco.standard.short=ACT -America/Rosario.daylight.short=ARST -America/Rosario.generic.short=ART -America/Rosario.standard.short=ART -America/Santa_Isabel.daylight.short=PDT -America/Santa_Isabel.generic.short=PT -America/Santa_Isabel.standard.short=PST -America/Santarem.daylight.short=BRST -America/Santarem.generic.short=BRT -America/Santarem.standard.short=BRT -America/Santiago.daylight.short=CLST -America/Santiago.generic.short=CLT -America/Santiago.standard.short=CLT -America/Santo_Domingo.daylight.short=ADT -America/Santo_Domingo.generic.short=AT -America/Santo_Domingo.standard.short=AST -America/Sao_Paulo.daylight.short=BRST -America/Sao_Paulo.generic.short=BRT -America/Sao_Paulo.standard.short=BRT -America/Scoresbysund.daylight.short=EGST -America/Scoresbysund.generic.short=EGT -America/Scoresbysund.standard.short=EGT -America/Shiprock.daylight.short=MDT -America/Shiprock.generic.short=MT -America/Shiprock.standard.short=MST -America/Sitka.daylight.short=AKDT -America/Sitka.generic.short=AKT -America/Sitka.standard.short=AKST -America/St_Barthelemy.daylight.short=ADT -America/St_Barthelemy.generic.short=AT -America/St_Barthelemy.standard.short=AST -America/St_Johns.daylight.short=NDT -America/St_Johns.generic.short=NT -America/St_Johns.standard.short=NST -America/St_Kitts.daylight.short=ADT -America/St_Kitts.generic.short=AT -America/St_Kitts.standard.short=AST -America/St_Lucia.daylight.short=ADT -America/St_Lucia.generic.short=AT -America/St_Lucia.standard.short=AST -America/St_Thomas.daylight.short=ADT -America/St_Thomas.generic.short=AT -America/St_Thomas.standard.short=AST -America/St_Vincent.daylight.short=ADT -America/St_Vincent.generic.short=AT -America/St_Vincent.standard.short=AST -America/Swift_Current.daylight.short=CDT -America/Swift_Current.generic.short=CT -America/Swift_Current.standard.short=CST -America/Tegucigalpa.daylight.short=CDT -America/Tegucigalpa.generic.short=CT -America/Tegucigalpa.standard.short=CST -America/Thule.daylight.short=ADT -America/Thule.generic.short=AT -America/Thule.standard.short=AST -America/Thunder_Bay.daylight.short=EDT -America/Thunder_Bay.generic.short=ET -America/Thunder_Bay.standard.short=EST -America/Tijuana.daylight.short=PDT -America/Tijuana.generic.short=PT -America/Tijuana.standard.short=PST -America/Toronto.daylight.short=EDT -America/Toronto.generic.short=ET -America/Toronto.standard.short=EST -America/Tortola.daylight.short=ADT -America/Tortola.generic.short=AT -America/Tortola.standard.short=AST -America/Vancouver.daylight.short=PDT -America/Vancouver.generic.short=PT -America/Vancouver.standard.short=PST -America/Virgin.daylight.short=ADT -America/Virgin.generic.short=AT -America/Virgin.standard.short=AST -America/Whitehorse.daylight.short=PDT -America/Whitehorse.generic.short=PT -America/Whitehorse.standard.short=PST -America/Winnipeg.daylight.short=CDT -America/Winnipeg.generic.short=CT -America/Winnipeg.standard.short=CST -America/Yakutat.daylight.short=AKDT -America/Yakutat.generic.short=AKT -America/Yakutat.standard.short=AKST -America/Yellowknife.daylight.short=MDT -America/Yellowknife.generic.short=MT -America/Yellowknife.standard.short=MST -Antarctica/Casey.daylight.short=WST -Antarctica/Casey.generic.short=WT -Antarctica/Casey.standard.short=WST -Antarctica/Davis.daylight.short=DAVST -Antarctica/Davis.generic.short=DAVT -Antarctica/Davis.standard.short=DAVT -Antarctica/DumontDUrville.daylight.short=DDUST -Antarctica/DumontDUrville.generic.short=DDUT -Antarctica/DumontDUrville.standard.short=DDUT -Antarctica/Macquarie.daylight.short=MIST -Antarctica/Macquarie.generic.short=MIST -Antarctica/Macquarie.standard.short=MIST -Antarctica/Mawson.daylight.short=MAWST -Antarctica/Mawson.generic.short=MAWT -Antarctica/Mawson.standard.short=MAWT -Antarctica/McMurdo.daylight.short=NZDT -Antarctica/McMurdo.generic.short=NZT -Antarctica/McMurdo.standard.short=NZST -Antarctica/Palmer.daylight.short=CLST -Antarctica/Palmer.generic.short=CLT -Antarctica/Palmer.standard.short=CLT -Antarctica/Rothera.daylight.short=ROTST -Antarctica/Rothera.generic.short=ROTT -Antarctica/Rothera.standard.short=ROTT -Antarctica/South_Pole.daylight.short=NZDT -Antarctica/South_Pole.generic.short=NZT -Antarctica/South_Pole.standard.short=NZST -Antarctica/Syowa.daylight.short=SYOST -Antarctica/Syowa.generic.short=SYOT -Antarctica/Syowa.standard.short=SYOT -Antarctica/Vostok.daylight.short=VOSST -Antarctica/Vostok.generic.short=VOST -Antarctica/Vostok.standard.short=VOST -Arctic/Longyearbyen.daylight.short=CEST -Arctic/Longyearbyen.generic.short=CET -Arctic/Longyearbyen.standard.short=CET -ART.daylight.short=EEST -ART.generic.short=EET -ART.standard.short=EET -Asia/Aden.daylight.short=ADT -Asia/Aden.generic.short=AT -Asia/Aden.standard.short=AST -Asia/Almaty.daylight.short=ALMST -Asia/Almaty.generic.short=ALMT -Asia/Almaty.standard.short=ALMT -Asia/Amman.daylight.short=ADT -Asia/Amman.generic.short=AT -Asia/Amman.standard.short=AST -Asia/Anadyr.daylight.short=ANAST -Asia/Anadyr.generic.short=ANAT -Asia/Anadyr.standard.short=ANAT -Asia/Aqtau.daylight.short=AQTST -Asia/Aqtau.generic.short=AQTT -Asia/Aqtau.standard.short=AQTT -Asia/Aqtobe.daylight.short=AQTST -Asia/Aqtobe.generic.short=AQTT -Asia/Aqtobe.standard.short=AQTT -Asia/Ashgabat.daylight.short=TMST -Asia/Ashgabat.generic.short=TMT -Asia/Ashgabat.standard.short=TMT -Asia/Ashkhabad.daylight.short=TMST -Asia/Ashkhabad.generic.short=TMT -Asia/Ashkhabad.standard.short=TMT -Asia/Baghdad.daylight.short=ADT -Asia/Baghdad.generic.short=AT -Asia/Baghdad.standard.short=AST -Asia/Bahrain.daylight.short=ADT -Asia/Bahrain.generic.short=AT -Asia/Bahrain.standard.short=AST -Asia/Baku.daylight.short=AZST -Asia/Baku.generic.short=AZT -Asia/Baku.standard.short=AZT -Asia/Bangkok.daylight.short=ICST -Asia/Bangkok.generic.short=ICT -Asia/Bangkok.standard.short=ICT -Asia/Beirut.daylight.short=EEST -Asia/Beirut.generic.short=EET -Asia/Beirut.standard.short=EET -Asia/Bishkek.daylight.short=KGST -Asia/Bishkek.generic.short=KGT -Asia/Bishkek.standard.short=KGT -Asia/Brunei.daylight.short=BNST -Asia/Brunei.generic.short=BNT -Asia/Brunei.standard.short=BNT -Asia/Calcutta.daylight.short=IDT -Asia/Calcutta.generic.short=IT -Asia/Calcutta.standard.short=IST -Asia/Choibalsan.daylight.short=CHOST -Asia/Choibalsan.generic.short=CHOT -Asia/Choibalsan.standard.short=CHOT -Asia/Chongqing.daylight.short=CDT -Asia/Chongqing.generic.short=CT -Asia/Chongqing.standard.short=CST -Asia/Chungking.daylight.short=CDT -Asia/Chungking.generic.short=CT -Asia/Chungking.standard.short=CST -Asia/Colombo.daylight.short=IDT -Asia/Colombo.generic.short=IT -Asia/Colombo.standard.short=IST -Asia/Dacca.daylight.short=BDST -Asia/Dacca.generic.short=BDT -Asia/Dacca.standard.short=BDT -Asia/Damascus.daylight.short=EEST -Asia/Damascus.generic.short=EET -Asia/Damascus.standard.short=EET -Asia/Dhaka.daylight.short=BDST -Asia/Dhaka.generic.short=BDT -Asia/Dhaka.standard.short=BDT -Asia/Dili.daylight.short=TLST -Asia/Dili.generic.short=TLT -Asia/Dili.standard.short=TLT -Asia/Dubai.daylight.short=GDT -Asia/Dubai.generic.short=GT -Asia/Dubai.standard.short=GST -Asia/Dushanbe.daylight.short=TJST -Asia/Dushanbe.generic.short=TJT -Asia/Dushanbe.standard.short=TJT -Asia/Gaza.daylight.short=EEST -Asia/Gaza.generic.short=EET -Asia/Gaza.standard.short=EET -Asia/Harbin.daylight.short=CDT -Asia/Harbin.generic.short=CT -Asia/Harbin.standard.short=CST -Asia/Hebron.daylight.short=EEST -Asia/Hebron.generic.short=EET -Asia/Hebron.standard.short=EET -Asia/Ho_Chi_Minh.daylight.short=ICST -Asia/Ho_Chi_Minh.generic.short=ICT -Asia/Ho_Chi_Minh.standard.short=ICT -Asia/Hong_Kong.daylight.short=HKST -Asia/Hong_Kong.generic.short=HKT -Asia/Hong_Kong.standard.short=HKT -Asia/Hovd.daylight.short=HOVST -Asia/Hovd.generic.short=HOVT -Asia/Hovd.standard.short=HOVT -Asia/Irkutsk.daylight.short=IRKST -Asia/Irkutsk.generic.short=IRKT -Asia/Irkutsk.standard.short=IRKT -Asia/Istanbul.daylight.short=EEST -Asia/Istanbul.generic.short=EET -Asia/Istanbul.standard.short=EET -Asia/Jakarta.daylight.short=WIST -Asia/Jakarta.generic.short=WIB -Asia/Jakarta.standard.short=WIB -Asia/Jayapura.daylight.short=EIST -Asia/Jayapura.generic.short=WIT -Asia/Jayapura.standard.short=WIT -Asia/Jerusalem.daylight.short=IDT -Asia/Jerusalem.generic.short=IT -Asia/Jerusalem.standard.short=IST -Asia/Kabul.daylight.short=AFST -Asia/Kabul.generic.short=AFT -Asia/Kabul.standard.short=AFT -Asia/Kamchatka.daylight.short=PETST -Asia/Kamchatka.generic.short=PETT -Asia/Kamchatka.standard.short=PETT -Asia/Karachi.daylight.short=PKST -Asia/Karachi.generic.short=PKT -Asia/Karachi.standard.short=PKT -Asia/Kashgar.daylight.short=CDT -Asia/Kashgar.generic.short=CT -Asia/Kashgar.standard.short=CST -Asia/Kathmandu.daylight.short=NPST -Asia/Kathmandu.generic.short=NPT -Asia/Kathmandu.standard.short=NPT -Asia/Katmandu.daylight.short=NPST -Asia/Katmandu.generic.short=NPT -Asia/Katmandu.standard.short=NPT -Asia/Khandyga.daylight.short=YAKST -Asia/Khandyga.generic.short=YAKT -Asia/Khandyga.standard.short=YAKT -Asia/Kolkata.daylight.short=IDT -Asia/Kolkata.generic.short=IT -Asia/Kolkata.standard.short=IST -Asia/Krasnoyarsk.daylight.short=KRAST -Asia/Krasnoyarsk.generic.short=KRAT -Asia/Krasnoyarsk.standard.short=KRAT -Asia/Kuala_Lumpur.daylight.short=MYST -Asia/Kuala_Lumpur.generic.short=MYT -Asia/Kuala_Lumpur.standard.short=MYT -Asia/Kuching.daylight.short=MYST -Asia/Kuching.generic.short=MYT -Asia/Kuching.standard.short=MYT -Asia/Kuwait.daylight.short=ADT -Asia/Kuwait.generic.short=AT -Asia/Kuwait.standard.short=AST -Asia/Macao.daylight.short=CDT -Asia/Macao.generic.short=CT -Asia/Macao.standard.short=CST -Asia/Macau.daylight.short=CDT -Asia/Macau.generic.short=CT -Asia/Macau.standard.short=CST -Asia/Magadan.daylight.short=MAGST -Asia/Magadan.generic.short=MAGT -Asia/Magadan.standard.short=MAGT -Asia/Makassar.daylight.short=CIST -Asia/Makassar.generic.short=WITA -Asia/Makassar.standard.short=WITA -Asia/Manila.daylight.short=PHST -Asia/Manila.generic.short=PHT -Asia/Manila.standard.short=PHT -Asia/Muscat.daylight.short=GDT -Asia/Muscat.generic.short=GT -Asia/Muscat.standard.short=GST -Asia/Nicosia.daylight.short=EEST -Asia/Nicosia.generic.short=EET -Asia/Nicosia.standard.short=EET -Asia/Novokuznetsk.daylight.short=NOVST -Asia/Novokuznetsk.generic.short=NOVT -Asia/Novokuznetsk.standard.short=NOVT -Asia/Novosibirsk.daylight.short=NOVST -Asia/Novosibirsk.generic.short=NOVT -Asia/Novosibirsk.standard.short=NOVT -Asia/Omsk.daylight.short=OMSST -Asia/Omsk.generic.short=OMST -Asia/Omsk.standard.short=OMST -Asia/Oral.daylight.short=ORAST -Asia/Oral.generic.short=ORAT -Asia/Oral.standard.short=ORAT -Asia/Phnom_Penh.daylight.short=ICST -Asia/Phnom_Penh.generic.short=ICT -Asia/Phnom_Penh.standard.short=ICT -Asia/Pontianak.daylight.short=WIST -Asia/Pontianak.generic.short=WIB -Asia/Pontianak.standard.short=WIB -Asia/Pyongyang.daylight.short=KDT -Asia/Pyongyang.generic.short=KT -Asia/Pyongyang.standard.short=KST -Asia/Qatar.daylight.short=ADT -Asia/Qatar.generic.short=AT -Asia/Qatar.standard.short=AST -Asia/Qyzylorda.daylight.short=QYZST -Asia/Qyzylorda.generic.short=QYZT -Asia/Qyzylorda.standard.short=QYZT -Asia/Rangoon.daylight.short=MMST -Asia/Rangoon.generic.short=MMT -Asia/Rangoon.standard.short=MMT -Asia/Saigon.daylight.short=ICST -Asia/Saigon.generic.short=ICT -Asia/Saigon.standard.short=ICT -Asia/Sakhalin.daylight.short=SAKST -Asia/Sakhalin.generic.short=SAKT -Asia/Sakhalin.standard.short=SAKT -Asia/Samarkand.daylight.short=UZST -Asia/Samarkand.generic.short=UZT -Asia/Samarkand.standard.short=UZT -Asia/Seoul.daylight.short=KDT -Asia/Seoul.generic.short=KT -Asia/Seoul.standard.short=KST -Asia/Shanghai.daylight.short=CDT -Asia/Shanghai.generic.short=CT -Asia/Shanghai.standard.short=CST -Asia/Singapore.daylight.short=SGST -Asia/Singapore.generic.short=SGT -Asia/Singapore.standard.short=SGT -Asia/Taipei.daylight.short=CDT -Asia/Taipei.generic.short=CT -Asia/Taipei.standard.short=CST -Asia/Tashkent.daylight.short=UZST -Asia/Tashkent.generic.short=UZT -Asia/Tashkent.standard.short=UZT -Asia/Tbilisi.daylight.short=GEST -Asia/Tbilisi.generic.short=GET -Asia/Tbilisi.standard.short=GET -Asia/Tehran.daylight.short=IRDT -Asia/Tehran.generic.short=IRT -Asia/Tehran.standard.short=IRST -Asia/Tel_Aviv.daylight.short=IDT -Asia/Tel_Aviv.generic.short=IT -Asia/Tel_Aviv.standard.short=IST -Asia/Thimbu.daylight.short=BTST -Asia/Thimbu.generic.short=BTT -Asia/Thimbu.standard.short=BTT -Asia/Thimphu.daylight.short=BTST -Asia/Thimphu.generic.short=BTT -Asia/Thimphu.standard.short=BTT -Asia/Tokyo.daylight.short=JDT -Asia/Tokyo.generic.short=JT -Asia/Tokyo.standard.short=JST -Asia/Ujung_Pandang.daylight.short=CIST -Asia/Ujung_Pandang.generic.short=WITA -Asia/Ujung_Pandang.standard.short=WITA -Asia/Ulaanbaatar.daylight.short=ULAST -Asia/Ulaanbaatar.generic.short=ULAT -Asia/Ulaanbaatar.standard.short=ULAT -Asia/Ulan_Bator.daylight.short=ULAST -Asia/Ulan_Bator.generic.short=ULAT -Asia/Ulan_Bator.standard.short=ULAT -Asia/Urumqi.daylight.short=CDT -Asia/Urumqi.generic.short=CT -Asia/Urumqi.standard.short=CST -Asia/Ust-Nera.daylight.short=VLAST -Asia/Ust-Nera.generic.short=VLAT -Asia/Ust-Nera.standard.short=VLAT -Asia/Vientiane.daylight.short=ICST -Asia/Vientiane.generic.short=ICT -Asia/Vientiane.standard.short=ICT -Asia/Vladivostok.daylight.short=VLAST -Asia/Vladivostok.generic.short=VLAT -Asia/Vladivostok.standard.short=VLAT -Asia/Yakutsk.daylight.short=YAKST -Asia/Yakutsk.generic.short=YAKT -Asia/Yakutsk.standard.short=YAKT -Asia/Yekaterinburg.daylight.short=YEKST -Asia/Yekaterinburg.generic.short=YEKT -Asia/Yekaterinburg.standard.short=YEKT -Asia/Yerevan.daylight.short=AMST -Asia/Yerevan.generic.short=AMT -Asia/Yerevan.standard.short=AMT -AST.daylight.short=AKDT -AST.generic.short=AKT -AST.standard.short=AKST -Atlantic/Azores.daylight.short=AZOST -Atlantic/Azores.generic.short=AZOT -Atlantic/Azores.standard.short=AZOT -Atlantic/Bermuda.daylight.short=ADT -Atlantic/Bermuda.generic.short=AT -Atlantic/Bermuda.standard.short=AST -Atlantic/Canary.daylight.short=WEST -Atlantic/Canary.generic.short=WET -Atlantic/Canary.standard.short=WET -Atlantic/Cape_Verde.daylight.short=CVST -Atlantic/Cape_Verde.generic.short=CVT -Atlantic/Cape_Verde.standard.short=CVT -Atlantic/Faeroe.daylight.short=WEST -Atlantic/Faeroe.generic.short=WET -Atlantic/Faeroe.standard.short=WET -Atlantic/Faroe.daylight.short=WEST -Atlantic/Faroe.generic.short=WET -Atlantic/Faroe.standard.short=WET -Atlantic/Jan_Mayen.daylight.short=CEST -Atlantic/Jan_Mayen.generic.short=CET -Atlantic/Jan_Mayen.standard.short=CET -Atlantic/Madeira.daylight.short=WEST -Atlantic/Madeira.generic.short=WET -Atlantic/Madeira.standard.short=WET -Atlantic/Reykjavik.daylight.short=GMT -Atlantic/Reykjavik.generic.short=GMT -Atlantic/Reykjavik.standard.short=GMT -Atlantic/South_Georgia.daylight.short=GDT -Atlantic/South_Georgia.generic.short=GT -Atlantic/South_Georgia.standard.short=GST -Atlantic/Stanley.daylight.short=FKST -Atlantic/Stanley.generic.short=FKT -Atlantic/Stanley.standard.short=FKT -Atlantic/St_Helena.daylight.short=GMT -Atlantic/St_Helena.generic.short=GMT -Atlantic/St_Helena.standard.short=GMT -Australia/ACT.daylight.short=EST -Australia/ACT.generic.short=ET -Australia/ACT.standard.short=EST -Australia/Adelaide.daylight.short=CST -Australia/Adelaide.generic.short=CT -Australia/Adelaide.standard.short=CST -Australia/Brisbane.daylight.short=EST -Australia/Brisbane.generic.short=ET -Australia/Brisbane.standard.short=EST -Australia/Broken_Hill.daylight.short=CST -Australia/Broken_Hill.generic.short=CT -Australia/Broken_Hill.standard.short=CST -Australia/Canberra.daylight.short=EST -Australia/Canberra.generic.short=ET -Australia/Canberra.standard.short=EST -Australia/Currie.daylight.short=EST -Australia/Currie.generic.short=ET -Australia/Currie.standard.short=EST -Australia/Darwin.daylight.short=CST -Australia/Darwin.generic.short=CT -Australia/Darwin.standard.short=CST -Australia/Eucla.daylight.short=CWST -Australia/Eucla.generic.short=CWT -Australia/Eucla.standard.short=CWST -Australia/Hobart.daylight.short=EST -Australia/Hobart.generic.short=ET -Australia/Hobart.standard.short=EST -Australia/LHI.daylight.short=LHST -Australia/LHI.generic.short=LHT -Australia/LHI.standard.short=LHST -Australia/Lindeman.daylight.short=EST -Australia/Lindeman.generic.short=ET -Australia/Lindeman.standard.short=EST -Australia/Lord_Howe.daylight.short=LHST -Australia/Lord_Howe.generic.short=LHT -Australia/Lord_Howe.standard.short=LHST -Australia/Melbourne.daylight.short=EST -Australia/Melbourne.generic.short=ET -Australia/Melbourne.standard.short=EST -Australia/North.daylight.short=CST -Australia/North.generic.short=CT -Australia/North.standard.short=CST -Australia/NSW.daylight.short=EST -Australia/NSW.generic.short=ET -Australia/NSW.standard.short=EST -Australia/Perth.daylight.short=WST -Australia/Perth.generic.short=WT -Australia/Perth.standard.short=WST -Australia/Queensland.daylight.short=EST -Australia/Queensland.generic.short=ET -Australia/Queensland.standard.short=EST -Australia/South.daylight.short=CST -Australia/South.generic.short=CT -Australia/South.standard.short=CST -Australia/Sydney.daylight.short=EST -Australia/Sydney.generic.short=ET -Australia/Sydney.standard.short=EST -Australia/Tasmania.daylight.short=EST -Australia/Tasmania.generic.short=ET -Australia/Tasmania.standard.short=EST -Australia/Victoria.daylight.short=EST -Australia/Victoria.generic.short=ET -Australia/Victoria.standard.short=EST -Australia/West.daylight.short=WST -Australia/West.generic.short=WT -Australia/West.standard.short=WST -Australia/Yancowinna.daylight.short=CST -Australia/Yancowinna.generic.short=CT -Australia/Yancowinna.standard.short=CST -BET.daylight.short=BRST -BET.generic.short=BRT -BET.standard.short=BRT -Brazil/Acre.daylight.short=ACST -Brazil/Acre.generic.short=ACT -Brazil/Acre.standard.short=ACT -Brazil/DeNoronha.daylight.short=FNST -Brazil/DeNoronha.generic.short=FNT -Brazil/DeNoronha.standard.short=FNT -Brazil/East.daylight.short=BRST -Brazil/East.generic.short=BRT -Brazil/East.standard.short=BRT -Brazil/West.daylight.short=AMST -Brazil/West.generic.short=AMT -Brazil/West.standard.short=AMT -BST.daylight.short=BDST -BST.generic.short=BDT -BST.standard.short=BDT -Canada/Atlantic.daylight.short=ADT -Canada/Atlantic.generic.short=AT -Canada/Atlantic.standard.short=AST -Canada/Central.daylight.short=CDT -Canada/Central.generic.short=CT -Canada/Central.standard.short=CST -Canada/Eastern.daylight.short=EDT -Canada/Eastern.generic.short=ET -Canada/Eastern.standard.short=EST -Canada/East-Saskatchewan.daylight.short=CDT -Canada/East-Saskatchewan.generic.short=CT -Canada/East-Saskatchewan.standard.short=CST -Canada/Mountain.daylight.short=MDT -Canada/Mountain.generic.short=MT -Canada/Mountain.standard.short=MST -Canada/Newfoundland.daylight.short=NDT -Canada/Newfoundland.generic.short=NT -Canada/Newfoundland.standard.short=NST -Canada/Pacific.daylight.short=PDT -Canada/Pacific.generic.short=PT -Canada/Pacific.standard.short=PST -Canada/Saskatchewan.daylight.short=CDT -Canada/Saskatchewan.generic.short=CT -Canada/Saskatchewan.standard.short=CST -Canada/Yukon.daylight.short=PDT -Canada/Yukon.generic.short=PT -Canada/Yukon.standard.short=PST -CAT.daylight.short=CAST -CAT.generic.short=CAT -CAT.standard.short=CAT -CET.daylight.short=CEST -CET.generic.short=CET -CET.standard.short=CET -Chile/Continental.daylight.short=CLST -Chile/Continental.generic.short=CLT -Chile/Continental.standard.short=CLT -Chile/EasterIsland.daylight.short=EASST -Chile/EasterIsland.generic.short=EAST -Chile/EasterIsland.standard.short=EAST -CNT.daylight.short=NDT -CNT.generic.short=NT -CNT.standard.short=NST -CST6CDT.daylight.short=CDT -CST6CDT.generic.short=CT -CST6CDT.standard.short=CST -CST.daylight.short=CDT -CST.generic.short=CT -CST.standard.short=CST -CTT.daylight.short=CDT -CTT.generic.short=CT -CTT.standard.short=CST -Cuba.daylight.short=CDT -Cuba.generic.short=CT -Cuba.standard.short=CST -EAT.daylight.short=EAST -EAT.generic.short=EAT -EAT.standard.short=EAT -ECT.daylight.short=CEST -ECT.generic.short=CET -ECT.standard.short=CET -EET.daylight.short=EEST -EET.generic.short=EET -EET.standard.short=EET -Egypt.daylight.short=EEST -Egypt.generic.short=EET -Egypt.standard.short=EET -Eire.daylight.short=IST -Eire.generic.short=IT -Eire.standard.short=GMT -EST5EDT.daylight.short=EDT -EST5EDT.generic.short=ET -EST5EDT.standard.short=EST -EST.daylight.short=EDT -EST.generic.short=ET -EST.standard.short=EST -Etc/Greenwich.daylight.short=GMT -Etc/Greenwich.generic.short=GMT -Etc/Greenwich.standard.short=GMT -Etc/UCT.daylight.short=UTC -Etc/UCT.generic.short=UTC -Etc/UCT.standard.short=UTC -Etc/Universal.daylight.short=UTC -Etc/Universal.generic.short=UTC -Etc/Universal.standard.short=UTC -Etc/UTC.daylight.short=UTC -Etc/UTC.generic.short=UTC -Etc/UTC.standard.short=UTC -Etc/Zulu.daylight.short=UTC -Etc/Zulu.generic.short=UTC -Etc/Zulu.standard.short=UTC -Europe/Amsterdam.daylight.short=CEST -Europe/Amsterdam.generic.short=CET -Europe/Amsterdam.standard.short=CET -Europe/Andorra.daylight.short=CEST -Europe/Andorra.generic.short=CET -Europe/Andorra.standard.short=CET -Europe/Athens.daylight.short=EEST -Europe/Athens.generic.short=EET -Europe/Athens.standard.short=EET -Europe/Belfast.daylight.short=BST -Europe/Belfast.generic.short=BT -Europe/Belfast.standard.short=GMT -Europe/Belgrade.daylight.short=CEST -Europe/Belgrade.generic.short=CET -Europe/Belgrade.standard.short=CET -Europe/Berlin.daylight.short=CEST -Europe/Berlin.generic.short=CET -Europe/Berlin.standard.short=CET -Europe/Bratislava.daylight.short=CEST -Europe/Bratislava.generic.short=CET -Europe/Bratislava.standard.short=CET -Europe/Brussels.daylight.short=CEST -Europe/Brussels.generic.short=CET -Europe/Brussels.standard.short=CET -Europe/Bucharest.daylight.short=EEST -Europe/Bucharest.generic.short=EET -Europe/Bucharest.standard.short=EET -Europe/Budapest.daylight.short=CEST -Europe/Budapest.generic.short=CET -Europe/Budapest.standard.short=CET -Europe/Busingen.daylight.short=CEST -Europe/Busingen.generic.short=CET -Europe/Busingen.standard.short=CET -Europe/Chisinau.daylight.short=EEST -Europe/Chisinau.generic.short=EET -Europe/Chisinau.standard.short=EET -Europe/Copenhagen.daylight.short=CEST -Europe/Copenhagen.generic.short=CET -Europe/Copenhagen.standard.short=CET -Europe/Dublin.daylight.short=IST -Europe/Dublin.generic.short=IT -Europe/Dublin.standard.short=GMT -Europe/Gibraltar.daylight.short=CEST -Europe/Gibraltar.generic.short=CET -Europe/Gibraltar.standard.short=CET -Europe/Guernsey.daylight.short=BST -Europe/Guernsey.generic.short=BT -Europe/Guernsey.standard.short=GMT -Europe/Helsinki.daylight.short=EEST -Europe/Helsinki.generic.short=EET -Europe/Helsinki.standard.short=EET -Europe/Isle_of_Man.daylight.short=BST -Europe/Isle_of_Man.generic.short=BT -Europe/Isle_of_Man.standard.short=GMT -Europe/Istanbul.daylight.short=EEST -Europe/Istanbul.generic.short=EET -Europe/Istanbul.standard.short=EET -Europe/Jersey.daylight.short=BST -Europe/Jersey.generic.short=BT -Europe/Jersey.standard.short=GMT -Europe/Kaliningrad.daylight.short=FEST -Europe/Kaliningrad.generic.short=FET -Europe/Kaliningrad.standard.short=FET -Europe/Kiev.daylight.short=EEST -Europe/Kiev.generic.short=EET -Europe/Kiev.standard.short=EET -Europe/Lisbon.daylight.short=WEST -Europe/Lisbon.generic.short=WET -Europe/Lisbon.standard.short=WET -Europe/Ljubljana.daylight.short=CEST -Europe/Ljubljana.generic.short=CET -Europe/Ljubljana.standard.short=CET -Europe/London.daylight.short=BST -Europe/London.generic.short=BT -Europe/London.standard.short=GMT -Europe/Luxembourg.daylight.short=CEST -Europe/Luxembourg.generic.short=CET -Europe/Luxembourg.standard.short=CET -Europe/Madrid.daylight.short=CEST -Europe/Madrid.generic.short=CET -Europe/Madrid.standard.short=CET -Europe/Malta.daylight.short=CEST -Europe/Malta.generic.short=CET -Europe/Malta.standard.short=CET -Europe/Mariehamn.daylight.short=EEST -Europe/Mariehamn.generic.short=EET -Europe/Mariehamn.standard.short=EET -Europe/Minsk.daylight.short=FEST -Europe/Minsk.generic.short=FET -Europe/Minsk.standard.short=FET -Europe/Monaco.daylight.short=CEST -Europe/Monaco.generic.short=CET -Europe/Monaco.standard.short=CET -Europe/Moscow.daylight.short=MSD -Europe/Moscow.generic.short=MT -Europe/Moscow.standard.short=MSK -Europe/Nicosia.daylight.short=EEST -Europe/Nicosia.generic.short=EET -Europe/Nicosia.standard.short=EET -Europe/Oslo.daylight.short=CEST -Europe/Oslo.generic.short=CET -Europe/Oslo.standard.short=CET -Europe/Paris.daylight.short=CEST -Europe/Paris.generic.short=CET -Europe/Paris.standard.short=CET -Europe/Podgorica.daylight.short=CEST -Europe/Podgorica.generic.short=CET -Europe/Podgorica.standard.short=CET -Europe/Prague.daylight.short=CEST -Europe/Prague.generic.short=CET -Europe/Prague.standard.short=CET -Europe/Riga.daylight.short=EEST -Europe/Riga.generic.short=EET -Europe/Riga.standard.short=EET -Europe/Rome.daylight.short=CEST -Europe/Rome.generic.short=CET -Europe/Rome.standard.short=CET -Europe/Samara.daylight.short=SAMST -Europe/Samara.generic.short=SAMT -Europe/Samara.standard.short=SAMT -Europe/San_Marino.daylight.short=CEST -Europe/San_Marino.generic.short=CET -Europe/San_Marino.standard.short=CET -Europe/Sarajevo.daylight.short=CEST -Europe/Sarajevo.generic.short=CET -Europe/Sarajevo.standard.short=CET -Europe/Simferopol.daylight.short=EEST -Europe/Simferopol.generic.short=EET -Europe/Simferopol.standard.short=EET -Europe/Skopje.daylight.short=CEST -Europe/Skopje.generic.short=CET -Europe/Skopje.standard.short=CET -Europe/Sofia.daylight.short=EEST -Europe/Sofia.generic.short=EET -Europe/Sofia.standard.short=EET -Europe/Stockholm.daylight.short=CEST -Europe/Stockholm.generic.short=CET -Europe/Stockholm.standard.short=CET -Europe/Tallinn.daylight.short=EEST -Europe/Tallinn.generic.short=EET -Europe/Tallinn.standard.short=EET -Europe/Tirane.daylight.short=CEST -Europe/Tirane.generic.short=CET -Europe/Tirane.standard.short=CET -Europe/Tiraspol.daylight.short=EEST -Europe/Tiraspol.generic.short=EET -Europe/Tiraspol.standard.short=EET -Europe/Uzhgorod.daylight.short=EEST -Europe/Uzhgorod.generic.short=EET -Europe/Uzhgorod.standard.short=EET -Europe/Vaduz.daylight.short=CEST -Europe/Vaduz.generic.short=CET -Europe/Vaduz.standard.short=CET -Europe/Vatican.daylight.short=CEST -Europe/Vatican.generic.short=CET -Europe/Vatican.standard.short=CET -Europe/Vienna.daylight.short=CEST -Europe/Vienna.generic.short=CET -Europe/Vienna.standard.short=CET -Europe/Vilnius.daylight.short=EEST -Europe/Vilnius.generic.short=EET -Europe/Vilnius.standard.short=EET -Europe/Volgograd.daylight.short=VOLST -Europe/Volgograd.generic.short=VOLT -Europe/Volgograd.standard.short=VOLT -Europe/Warsaw.daylight.short=CEST -Europe/Warsaw.generic.short=CET -Europe/Warsaw.standard.short=CET -Europe/Zagreb.daylight.short=CEST -Europe/Zagreb.generic.short=CET -Europe/Zagreb.standard.short=CET -Europe/Zaporozhye.daylight.short=EEST -Europe/Zaporozhye.generic.short=EET -Europe/Zaporozhye.standard.short=EET -Europe/Zurich.daylight.short=CEST -Europe/Zurich.generic.short=CET -Europe/Zurich.standard.short=CET -GB.daylight.short=BST -GB-Eire.daylight.short=BST -GB-Eire.generic.short=BT -GB-Eire.standard.short=GMT -GB.generic.short=BT -GB.standard.short=GMT -GMT.daylight.short=GMT -GMT.generic.short=GMT -GMT.standard.short=GMT -Greenwich.daylight.short=GMT -Greenwich.generic.short=GMT -Greenwich.standard.short=GMT -Hongkong.daylight.short=HKST -Hongkong.generic.short=HKT -Hongkong.standard.short=HKT -HST.daylight.short=HDT -HST.generic.short=HT -HST.standard.short=HST -Iceland.daylight.short=GMT -Iceland.generic.short=GMT -Iceland.standard.short=GMT -IET.daylight.short=EDT -IET.generic.short=ET -IET.standard.short=EST -Indian/Antananarivo.daylight.short=EAST -Indian/Antananarivo.generic.short=EAT -Indian/Antananarivo.standard.short=EAT -Indian/Chagos.daylight.short=IOST -Indian/Chagos.generic.short=IOT -Indian/Chagos.standard.short=IOT -Indian/Christmas.daylight.short=CXST -Indian/Christmas.generic.short=CIT -Indian/Christmas.standard.short=CXT -Indian/Cocos.daylight.short=CCST -Indian/Cocos.generic.short=CCT -Indian/Cocos.standard.short=CCT -Indian/Comoro.daylight.short=EAST -Indian/Comoro.generic.short=EAT -Indian/Comoro.standard.short=EAT -Indian/Kerguelen.daylight.short=TFST -Indian/Kerguelen.generic.short=TFT -Indian/Kerguelen.standard.short=TFT -Indian/Mahe.daylight.short=SCST -Indian/Mahe.generic.short=SCT -Indian/Mahe.standard.short=SCT -Indian/Maldives.daylight.short=MVST -Indian/Maldives.generic.short=MVT -Indian/Maldives.standard.short=MVT -Indian/Mauritius.daylight.short=MUST -Indian/Mauritius.generic.short=MUT -Indian/Mauritius.standard.short=MUT -Indian/Mayotte.daylight.short=EAST -Indian/Mayotte.generic.short=EAT -Indian/Mayotte.standard.short=EAT -Indian/Reunion.daylight.short=REST -Indian/Reunion.generic.short=RET -Indian/Reunion.standard.short=RET -Iran.daylight.short=IRDT -Iran.generic.short=IRT -Iran.standard.short=IRST -Israel.daylight.short=IDT -Israel.generic.short=IT -Israel.standard.short=IST -IST.daylight.short=IDT -IST.generic.short=IT -IST.standard.short=IST -Jamaica.daylight.short=EDT -Jamaica.generic.short=ET -Jamaica.standard.short=EST -Japan.daylight.short=JDT -Japan.generic.short=JT -Japan.standard.short=JST -JST.daylight.short=JDT -JST.generic.short=JT -JST.standard.short=JST -Kwajalein.daylight.short=MHST -Kwajalein.generic.short=MHT -Kwajalein.standard.short=MHT -Libya.daylight.short=EEST -Libya.generic.short=EET -Libya.standard.short=EET -MET.daylight.short=MEST -MET.generic.short=MET -MET.standard.short=MET -Mexico/BajaNorte.daylight.short=PDT -Mexico/BajaNorte.generic.short=PT -Mexico/BajaNorte.standard.short=PST -Mexico/BajaSur.daylight.short=MDT -Mexico/BajaSur.generic.short=MT -Mexico/BajaSur.standard.short=MST -Mexico/General.daylight.short=CDT -Mexico/General.generic.short=CT -Mexico/General.standard.short=CST -MIT.daylight.short=WSDT -MIT.generic.short=WST -MIT.standard.short=WST -MST7MDT.daylight.short=MDT -MST7MDT.generic.short=MT -MST7MDT.standard.short=MST -MST.daylight.short=MDT -MST.generic.short=MT -MST.standard.short=MST -Navajo.daylight.short=MDT -Navajo.generic.short=MT -Navajo.standard.short=MST -NET.daylight.short=AMST -NET.generic.short=AMT -NET.standard.short=AMT -NST.daylight.short=NZDT -NST.generic.short=NZT -NST.standard.short=NZST -NZ-CHAT.daylight.short=CHADT -NZ-CHAT.generic.short=CHAT -NZ-CHAT.standard.short=CHAST -NZ.daylight.short=NZDT -NZ.generic.short=NZT -NZ.standard.short=NZST -Pacific/Apia.daylight.short=WSDT -Pacific/Apia.generic.short=WST -Pacific/Apia.standard.short=WST -Pacific/Auckland.daylight.short=NZDT -Pacific/Auckland.generic.short=NZT -Pacific/Auckland.standard.short=NZST -Pacific/Chatham.daylight.short=CHADT -Pacific/Chatham.generic.short=CHAT -Pacific/Chatham.standard.short=CHAST -Pacific/Chuuk.daylight.short=CHUST -Pacific/Chuuk.generic.short=CHUT -Pacific/Chuuk.standard.short=CHUT -Pacific/Easter.daylight.short=EASST -Pacific/Easter.generic.short=EAST -Pacific/Easter.standard.short=EAST -Pacific/Efate.daylight.short=VUST -Pacific/Efate.generic.short=VUT -Pacific/Efate.standard.short=VUT -Pacific/Enderbury.daylight.short=PHOST -Pacific/Enderbury.generic.short=PHOT -Pacific/Enderbury.standard.short=PHOT -Pacific/Fakaofo.daylight.short=TKST -Pacific/Fakaofo.generic.short=TKT -Pacific/Fakaofo.standard.short=TKT -Pacific/Fiji.daylight.short=FJST -Pacific/Fiji.generic.short=FJT -Pacific/Fiji.standard.short=FJT -Pacific/Funafuti.daylight.short=TVST -Pacific/Funafuti.generic.short=TVT -Pacific/Funafuti.standard.short=TVT -Pacific/Galapagos.daylight.short=GALST -Pacific/Galapagos.generic.short=GALT -Pacific/Galapagos.standard.short=GALT -Pacific/Gambier.daylight.short=GAMST -Pacific/Gambier.generic.short=GAMT -Pacific/Gambier.standard.short=GAMT -Pacific/Guadalcanal.daylight.short=SBST -Pacific/Guadalcanal.generic.short=SBT -Pacific/Guadalcanal.standard.short=SBT -Pacific/Guam.daylight.short=ChDT -Pacific/Guam.generic.short=ChT -Pacific/Guam.standard.short=ChST -Pacific/Honolulu.daylight.short=HDT -Pacific/Honolulu.generic.short=HT -Pacific/Honolulu.standard.short=HST -Pacific/Johnston.daylight.short=HDT -Pacific/Johnston.generic.short=HT -Pacific/Johnston.standard.short=HST -Pacific/Kiritimati.daylight.short=LINST -Pacific/Kiritimati.generic.short=LINT -Pacific/Kiritimati.standard.short=LINT -Pacific/Kosrae.daylight.short=KOSST -Pacific/Kosrae.generic.short=KOST -Pacific/Kosrae.standard.short=KOST -Pacific/Kwajalein.daylight.short=MHST -Pacific/Kwajalein.generic.short=MHT -Pacific/Kwajalein.standard.short=MHT -Pacific/Majuro.daylight.short=MHST -Pacific/Majuro.generic.short=MHT -Pacific/Majuro.standard.short=MHT -Pacific/Marquesas.daylight.short=MARST -Pacific/Marquesas.generic.short=MART -Pacific/Marquesas.standard.short=MART -Pacific/Midway.daylight.short=SDT -Pacific/Midway.generic.short=ST -Pacific/Midway.standard.short=SST -Pacific/Nauru.daylight.short=NRST -Pacific/Nauru.generic.short=NRT -Pacific/Nauru.standard.short=NRT -Pacific/Niue.daylight.short=NUST -Pacific/Niue.generic.short=NUT -Pacific/Niue.standard.short=NUT -Pacific/Norfolk.daylight.short=NFST -Pacific/Norfolk.generic.short=NFT -Pacific/Norfolk.standard.short=NFT -Pacific/Noumea.daylight.short=NCST -Pacific/Noumea.generic.short=NCT -Pacific/Noumea.standard.short=NCT -Pacific/Pago_Pago.daylight.short=SDT -Pacific/Pago_Pago.generic.short=ST -Pacific/Pago_Pago.standard.short=SST -Pacific/Palau.daylight.short=PWST -Pacific/Palau.generic.short=PWT -Pacific/Palau.standard.short=PWT -Pacific/Pitcairn.daylight.short=PDT -Pacific/Pitcairn.generic.short=PT -Pacific/Pitcairn.standard.short=PST -Pacific/Pohnpei.daylight.short=PONST -Pacific/Pohnpei.generic.short=PONT -Pacific/Pohnpei.standard.short=PONT -Pacific/Ponape.daylight.short=PONST -Pacific/Ponape.generic.short=PONT -Pacific/Ponape.standard.short=PONT -Pacific/Port_Moresby.daylight.short=PGST -Pacific/Port_Moresby.generic.short=PGT -Pacific/Port_Moresby.standard.short=PGT -Pacific/Rarotonga.daylight.short=CKHST -Pacific/Rarotonga.generic.short=CKT -Pacific/Rarotonga.standard.short=CKT -Pacific/Saipan.daylight.short=ChDT -Pacific/Saipan.generic.short=ChT -Pacific/Saipan.standard.short=ChST -Pacific/Samoa.daylight.short=SDT -Pacific/Samoa.generic.short=ST -Pacific/Samoa.standard.short=SST -Pacific/Tahiti.daylight.short=TAHST -Pacific/Tahiti.generic.short=TAHT -Pacific/Tahiti.standard.short=TAHT -Pacific/Tarawa.daylight.short=GILST -Pacific/Tarawa.generic.short=GILT -Pacific/Tarawa.standard.short=GILT -Pacific/Tongatapu.daylight.short=TOST -Pacific/Tongatapu.generic.short=TOT -Pacific/Tongatapu.standard.short=TOT -Pacific/Truk.daylight.short=CHUST -Pacific/Truk.generic.short=CHUT -Pacific/Truk.standard.short=CHUT -Pacific/Wake.daylight.short=WAKST -Pacific/Wake.generic.short=WAKT -Pacific/Wake.standard.short=WAKT -Pacific/Wallis.daylight.short=WFST -Pacific/Wallis.generic.short=WFT -Pacific/Wallis.standard.short=WFT -Pacific/Yap.daylight.short=CHUST -Pacific/Yap.generic.short=CHUT -Pacific/Yap.standard.short=CHUT -PLT.daylight.short=PKST -PLT.generic.short=PKT -PLT.standard.short=PKT -PNT.daylight.short=MDT -PNT.generic.short=MT -PNT.standard.short=MST -Poland.daylight.short=CEST -Poland.generic.short=CET -Poland.standard.short=CET -Portugal.daylight.short=WEST -Portugal.generic.short=WET -Portugal.standard.short=WET -PRC.daylight.short=CDT -PRC.generic.short=CT -PRC.standard.short=CST -PRT.daylight.short=ADT -PRT.generic.short=AT -PRT.standard.short=AST -PST8PDT.daylight.short=PDT -PST8PDT.generic.short=PT -PST8PDT.standard.short=PST -PST.daylight.short=PDT -PST.generic.short=PT -PST.standard.short=PST -ROK.daylight.short=KDT -ROK.generic.short=KT -ROK.standard.short=KST -Singapore.daylight.short=SGST -Singapore.generic.short=SGT -Singapore.standard.short=SGT -SST.daylight.short=SBST -SST.generic.short=SBT -SST.standard.short=SBT -SystemV/AST4ADT.daylight.short=ADT -SystemV/AST4ADT.generic.short=AT -SystemV/AST4ADT.standard.short=AST -SystemV/AST4.daylight.short=ADT -SystemV/AST4.generic.short=AT -SystemV/AST4.standard.short=AST -SystemV/CST6CDT.daylight.short=CDT -SystemV/CST6CDT.generic.short=CT -SystemV/CST6CDT.standard.short=CST -SystemV/CST6.daylight.short=CDT -SystemV/CST6.generic.short=CT -SystemV/CST6.standard.short=CST -SystemV/EST5.daylight.short=EDT -SystemV/EST5EDT.daylight.short=EDT -SystemV/EST5EDT.generic.short=ET -SystemV/EST5EDT.standard.short=EST -SystemV/EST5.generic.short=ET -SystemV/EST5.standard.short=EST -SystemV/HST10.daylight.short=HDT -SystemV/HST10.generic.short=HT -SystemV/HST10.standard.short=HST -SystemV/MST7.daylight.short=MDT -SystemV/MST7.generic.short=MT -SystemV/MST7MDT.daylight.short=MDT -SystemV/MST7MDT.generic.short=MT -SystemV/MST7MDT.standard.short=MST -SystemV/MST7.standard.short=MST -SystemV/PST8.daylight.short=PDT -SystemV/PST8.generic.short=PT -SystemV/PST8PDT.daylight.short=PDT -SystemV/PST8PDT.generic.short=PT -SystemV/PST8PDT.standard.short=PST -SystemV/PST8.standard.short=PST -SystemV/YST9.daylight.short=AKDT -SystemV/YST9.generic.short=AKT -SystemV/YST9.standard.short=AKST -SystemV/YST9YDT.daylight.short=AKDT -SystemV/YST9YDT.generic.short=AKT -SystemV/YST9YDT.standard.short=AKST -Turkey.daylight.short=EEST -Turkey.generic.short=EET -Turkey.standard.short=EET -UCT.daylight.short=UTC -UCT.generic.short=UTC -UCT.standard.short=UTC -Universal.daylight.short=UTC -Universal.generic.short=UTC -Universal.standard.short=UTC -US/Alaska.daylight.short=AKDT -US/Alaska.generic.short=AKT -US/Alaska.standard.short=AKST -US/Aleutian.daylight.short=HADT -US/Aleutian.generic.short=HAT -US/Aleutian.standard.short=HAST -US/Arizona.daylight.short=MDT -US/Arizona.generic.short=MT -US/Arizona.standard.short=MST -US/Central.daylight.short=CDT -US/Central.generic.short=CT -US/Central.standard.short=CST -US/Eastern.daylight.short=EDT -US/Eastern.generic.short=ET -US/Eastern.standard.short=EST -US/East-Indiana.daylight.short=EDT -US/East-Indiana.generic.short=ET -US/East-Indiana.standard.short=EST -US/Hawaii.daylight.short=HDT -US/Hawaii.generic.short=HT -US/Hawaii.standard.short=HST -US/Indiana-Starke.daylight.short=CDT -US/Indiana-Starke.generic.short=CT -US/Indiana-Starke.standard.short=CST -US/Michigan.daylight.short=EDT -US/Michigan.generic.short=ET -US/Michigan.standard.short=EST -US/Mountain.daylight.short=MDT -US/Mountain.generic.short=MT -US/Mountain.standard.short=MST -US/Pacific.daylight.short=PDT -US/Pacific.generic.short=PT -US/Pacific-New.daylight.short=PDT -US/Pacific-New.generic.short=PT -US/Pacific-New.standard.short=PST -US/Pacific.standard.short=PST -US/Samoa.daylight.short=SDT -US/Samoa.generic.short=ST -US/Samoa.standard.short=SST -UTC.daylight.short=UTC -UTC.generic.short=UTC -UTC.standard.short=UTC -VST.daylight.short=ICST -VST.generic.short=ICT -VST.standard.short=ICT -WET.daylight.short=WEST -WET.generic.short=WET -WET.standard.short=WET -W-SU.daylight.short=MSD -W-SU.generic.short=MT -W-SU.standard.short=MSK -Zulu.daylight.short=UTC -Zulu.generic.short=UTC -Zulu.standard.short=UTC diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_fr.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_fr.properties deleted file mode 100644 index 6389940bbab..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_fr.properties +++ /dev/null @@ -1,651 +0,0 @@ -ACT.daylight.long=Heure d'\u00E9t\u00E9 d'Australie centrale (Territoire du Nord) -ACT.generic.long=Centre (Territoire du Nord) -ACT.standard.long=Heure standard d'Australie centrale (Territoire du Nord) -AET.daylight.long=Heure d'\u00E9t\u00E9 de l'Est (Nouvelle-Galles du Sud) -AET.generic.long=C\u00F4te Est (Nouvelle-Galles du Sud) -AET.standard.long=Heure normale de l'Est (Nouvelle-Galles du Sud) -AGT.generic.long=Heure d'Argentine -ART.generic.long=Heure d'Europe de l'Est -AST.generic.long=Alaska -Africa/Abidjan.generic.long=Heure de Greenwich -Africa/Accra.generic.long=Heure du Ghana -Africa/Addis_Ababa.generic.long=Heure d'Afrique de l'Est -Africa/Algiers.generic.long=Heure d'Europe centrale -Africa/Asmara.generic.long=Heure d'Afrique de l'Est -Africa/Asmera.generic.long=Heure d'Afrique de l'Est -Africa/Bamako.generic.long=Heure de Greenwich -Africa/Bangui.generic.long=Heure d'Afrique de l'Ouest -Africa/Banjul.generic.long=Heure de Greenwich -Africa/Bissau.generic.long=Heure de Greenwich -Africa/Blantyre.generic.long=Heure d'Afrique centrale -Africa/Brazzaville.generic.long=Heure d'Afrique de l'Ouest -Africa/Bujumbura.generic.long=Heure d'Afrique centrale -Africa/Cairo.generic.long=Heure d'Europe de l'Est -Africa/Casablanca.generic.long=Heure d'Europe de l'Ouest -Africa/Ceuta.generic.long=Heure d'Europe centrale -Africa/Conakry.generic.long=Heure de Greenwich -Africa/Dakar.generic.long=Heure de Greenwich -Africa/Dar_es_Salaam.generic.long=Heure d'Afrique de l'Est -Africa/Djibouti.generic.long=Heure d'Afrique de l'Est -Africa/Douala.generic.long=Heure d'Afrique de l'Ouest -Africa/El_Aaiun.generic.long=Heure d'Europe de l'Ouest -Africa/Freetown.generic.long=Heure de Sierra Leone -Africa/Gaborone.generic.long=Heure d'Afrique centrale -Africa/Harare.generic.long=Heure d'Afrique centrale -Africa/Johannesburg.generic.long=Afrique du Sud -Africa/Juba.generic.long=Heure d'Afrique de l'Est -Africa/Kampala.generic.long=Heure d'Afrique de l'Est -Africa/Khartoum.generic.long=Heure d'Afrique de l'Est -Africa/Kigali.generic.long=Heure d'Afrique centrale -Africa/Kinshasa.generic.long=Heure d'Afrique de l'Ouest -Africa/Lagos.generic.long=Heure d'Afrique de l'Ouest -Africa/Libreville.generic.long=Heure d'Afrique de l'Ouest -Africa/Lome.generic.long=Heure de Greenwich -Africa/Luanda.generic.long=Heure d'Afrique de l'Ouest -Africa/Lubumbashi.generic.long=Heure d'Afrique centrale -Africa/Lusaka.generic.long=Heure d'Afrique centrale -Africa/Malabo.generic.long=Heure d'Afrique de l'Ouest -Africa/Maputo.generic.long=Heure d'Afrique centrale -Africa/Maseru.generic.long=Afrique du Sud -Africa/Mbabane.generic.long=Afrique du Sud -Africa/Mogadishu.generic.long=Heure d'Afrique de l'Est -Africa/Monrovia.generic.long=Heure de Greenwich -Africa/Nairobi.generic.long=Heure d'Afrique de l'Est -Africa/Ndjamena.generic.long=Heure d'Afrique de l'Ouest -Africa/Niamey.generic.long=Heure d'Afrique de l'Ouest -Africa/Nouakchott.generic.long=Heure de Greenwich -Africa/Ouagadougou.generic.long=Heure de Greenwich -Africa/Porto-Novo.generic.long=Heure d'Afrique de l'Ouest -Africa/Sao_Tome.generic.long=Heure de Greenwich -Africa/Timbuktu.generic.long=Heure de Greenwich -Africa/Tripoli.generic.long=Heure d'Europe de l'Est -Africa/Tunis.generic.long=Heure d'Europe centrale -Africa/Windhoek.generic.long=Heure d'Afrique de l'Ouest -America/Adak.generic.long=Hawa\u00EF-Iles Al\u00E9outiennes -America/Anchorage.generic.long=Alaska -America/Anguilla.generic.long=Atlantique -America/Antigua.generic.long=Atlantique -America/Araguaina.generic.long=Heure du Br\u00E9sil -America/Argentina/Buenos_Aires.generic.long=Heure d'Argentine -America/Argentina/Catamarca.generic.long=Heure d'Argentine -America/Argentina/ComodRivadavia.generic.long=Heure d'Argentine -America/Argentina/Cordoba.generic.long=Heure d'Argentine -America/Argentina/Jujuy.generic.long=Heure d'Argentine -America/Argentina/La_Rioja.generic.long=Heure d'Argentine -America/Argentina/Mendoza.generic.long=Heure d'Argentine -America/Argentina/Rio_Gallegos.generic.long=Heure d'Argentine -America/Argentina/Salta.generic.long=Heure d'Argentine -America/Argentina/San_Juan.generic.long=Heure d'Argentine -America/Argentina/San_Luis.generic.long=Heure d'Argentine -America/Argentina/Tucuman.generic.long=Heure d'Argentine -America/Argentina/Ushuaia.generic.long=Heure d'Argentine -America/Aruba.generic.long=Atlantique -America/Asuncion.generic.long=Heure du Paraguay -America/Atikokan.generic.long=C\u00F4te Est -America/Atka.generic.long=Hawa\u00EF-Iles Al\u00E9outiennes -America/Bahia.generic.long=Heure du Br\u00E9sil -America/Bahia_Banderas.generic.long=Centre -America/Barbados.generic.long=Atlantique -America/Belem.generic.long=Heure du Br\u00E9sil -America/Belize.generic.long=Centre -America/Blanc-Sablon.generic.long=Atlantique -America/Boa_Vista.generic.long=Heure d'Amazonie -America/Bogota.generic.long=Heure de Colombie -America/Boise.generic.long=Rocheuses -America/Buenos_Aires.generic.long=Heure d'Argentine -America/Cambridge_Bay.generic.long=Rocheuses -America/Campo_Grande.generic.long=Heure d'Amazonie -America/Cancun.generic.long=Centre -America/Caracas.generic.long=Heure du Venezuela -America/Catamarca.generic.long=Heure d'Argentine -America/Cayenne.generic.long=Heure de Guyane fran\u00E7aise -America/Cayman.generic.long=C\u00F4te Est -America/Chicago.generic.long=Centre -America/Chihuahua.generic.long=Rocheuses -America/Coral_Harbour.generic.long=C\u00F4te Est -America/Cordoba.generic.long=Heure d'Argentine -America/Costa_Rica.generic.long=Centre -America/Creston.generic.long=Rocheuses -America/Cuiaba.generic.long=Heure d'Amazonie -America/Curacao.generic.long=Atlantique -America/Danmarkshavn.generic.long=Heure de Greenwich -America/Dawson.generic.long=Pacifique -America/Dawson_Creek.generic.long=Rocheuses -America/Denver.generic.long=Rocheuses -America/Detroit.generic.long=C\u00F4te Est -America/Dominica.generic.long=Atlantique -America/Edmonton.generic.long=Rocheuses -America/Eirunepe.generic.long=Heure de l'Acre -America/El_Salvador.generic.long=Centre -America/Ensenada.generic.long=Pacifique -America/Fort_Wayne.generic.long=C\u00F4te Est -America/Fortaleza.generic.long=Heure du Br\u00E9sil -America/Glace_Bay.generic.long=Atlantique -America/Godthab.generic.long=Heure du Groenland de l'Ouest -America/Goose_Bay.generic.long=Atlantique -America/Grand_Turk.generic.long=C\u00F4te Est -America/Grenada.generic.long=Atlantique -America/Guadeloupe.generic.long=Atlantique -America/Guatemala.generic.long=Centre -America/Guayaquil.generic.long=Heure de l'Equateur -America/Guyana.generic.long=Heure de Guyana -America/Halifax.generic.long=Atlantique -America/Havana.generic.long=Heure de Cuba -America/Hermosillo.generic.long=Rocheuses -America/Indiana/Indianapolis.generic.long=C\u00F4te Est -America/Indiana/Knox.generic.long=Centre -America/Indiana/Marengo.generic.long=C\u00F4te Est -America/Indiana/Petersburg.generic.long=C\u00F4te Est -America/Indiana/Tell_City.generic.long=Centre -America/Indiana/Vevay.generic.long=C\u00F4te Est -America/Indiana/Vincennes.generic.long=C\u00F4te Est -America/Indiana/Winamac.generic.long=C\u00F4te Est -America/Indianapolis.generic.long=C\u00F4te Est -America/Inuvik.generic.long=Rocheuses -America/Iqaluit.generic.long=C\u00F4te Est -America/Jamaica.generic.long=C\u00F4te Est -America/Jujuy.generic.long=Heure d'Argentine -America/Juneau.generic.long=Alaska -America/Kentucky/Louisville.generic.long=C\u00F4te Est -America/Kentucky/Monticello.generic.long=C\u00F4te Est -America/Knox_IN.generic.long=Centre -America/Kralendijk.generic.long=Atlantique -America/La_Paz.generic.long=Heure de Bolivie -America/Lima.generic.long=Heure du P\u00E9rou -America/Los_Angeles.generic.long=Pacifique -America/Louisville.generic.long=C\u00F4te Est -America/Lower_Princes.generic.long=Atlantique -America/Maceio.generic.long=Heure du Br\u00E9sil -America/Managua.generic.long=Centre -America/Manaus.generic.long=Heure d'Amazonie -America/Marigot.generic.long=Atlantique -America/Martinique.generic.long=Atlantique -America/Matamoros.generic.long=Centre -America/Mazatlan.generic.long=Rocheuses -America/Mendoza.generic.long=Heure d'Argentine -America/Menominee.generic.long=Centre -America/Merida.generic.long=Centre -America/Metlakatla.daylight.long=Heure avanc\u00E9e de Metlakatla -America/Metlakatla.generic.long=Heure de Metlakatla -America/Metlakatla.standard.long=Heure normale de Metlakatla -America/Mexico_City.generic.long=Centre -America/Miquelon.generic.long=Saint-Pierre-et-Miquelon -America/Moncton.generic.long=Atlantique -America/Monterrey.generic.long=Centre -America/Montevideo.generic.long=Heure de l'Uruguay -America/Montreal.generic.long=C\u00F4te Est -America/Montserrat.generic.long=Atlantique -America/Nassau.generic.long=C\u00F4te Est -America/New_York.generic.long=C\u00F4te Est -America/Nipigon.generic.long=C\u00F4te Est -America/Nome.generic.long=Alaska -America/Noronha.generic.long=Heure de Fernando de Noronha -America/North_Dakota/Beulah.generic.long=Centre -America/North_Dakota/Center.generic.long=Centre -America/North_Dakota/New_Salem.generic.long=Centre -America/Ojinaga.generic.long=Rocheuses -America/Panama.generic.long=C\u00F4te Est -America/Pangnirtung.generic.long=C\u00F4te Est -America/Paramaribo.generic.long=Heure du Surinam -America/Phoenix.generic.long=Rocheuses -America/Port-au-Prince.generic.long=C\u00F4te Est -America/Port_of_Spain.generic.long=Atlantique -America/Porto_Acre.generic.long=Heure de l'Acre -America/Porto_Velho.generic.long=Heure d'Amazonie -America/Puerto_Rico.generic.long=Atlantique -America/Rainy_River.generic.long=Centre -America/Rankin_Inlet.generic.long=Centre -America/Recife.generic.long=Heure du Br\u00E9sil -America/Regina.generic.long=Centre -America/Resolute.generic.long=Centre -America/Rio_Branco.generic.long=Heure de l'Acre -America/Rosario.generic.long=Heure d'Argentine -America/Santa_Isabel.generic.long=Pacifique -America/Santarem.generic.long=Heure du Br\u00E9sil -America/Santiago.generic.long=Heure du Chili -America/Santo_Domingo.generic.long=Atlantique -America/Sao_Paulo.generic.long=Heure du Br\u00E9sil -America/Scoresbysund.generic.long=Heure du Groenland de l'Est -America/Shiprock.generic.long=Rocheuses -America/Sitka.generic.long=Alaska -America/St_Barthelemy.generic.long=Atlantique -America/St_Johns.generic.long=Terre-Neuve -America/St_Kitts.generic.long=Atlantique -America/St_Lucia.generic.long=Atlantique -America/St_Thomas.generic.long=Atlantique -America/St_Vincent.generic.long=Atlantique -America/Swift_Current.generic.long=Centre -America/Tegucigalpa.generic.long=Centre -America/Thule.generic.long=Atlantique -America/Thunder_Bay.generic.long=C\u00F4te Est -America/Tijuana.generic.long=Pacifique -America/Toronto.generic.long=C\u00F4te Est -America/Tortola.generic.long=Atlantique -America/Vancouver.generic.long=Pacifique -America/Virgin.generic.long=Atlantique -America/Whitehorse.generic.long=Pacifique -America/Winnipeg.generic.long=Centre -America/Yakutat.generic.long=Alaska -America/Yellowknife.generic.long=Rocheuses -Antarctica/Casey.daylight.long=Heure d'\u00E9t\u00E9 de l'Ouest (Australie) -Antarctica/Casey.generic.long=Ouest (Australie) -Antarctica/Casey.standard.long=Heure normale de l'Ouest (Australie) -Antarctica/Davis.generic.long=Heure de Davis -Antarctica/DumontDUrville.generic.long=Heure de Dumont-d'Urville -Antarctica/Macquarie.daylight.long=Heure d'\u00E9t\u00E9 de l'Ile Macquarie -Antarctica/Macquarie.generic.long=Heure de l'Ile Macquarie -Antarctica/Macquarie.standard.long=Heure de l'Ile Macquarie -Antarctica/Mawson.generic.long=Heure de Mawson -Antarctica/McMurdo.generic.long=Nouvelle-Z\u00E9lande -Antarctica/Palmer.generic.long=Heure du Chili -Antarctica/Rothera.generic.long=Heure de Rothera -Antarctica/South_Pole.generic.long=Nouvelle-Z\u00E9lande -Antarctica/Syowa.generic.long=Heure de Syowa -Antarctica/Vostok.generic.long=Heure de Vostok -Arctic/Longyearbyen.generic.long=Heure d'Europe centrale -Asia/Aden.generic.long=Arabie -Asia/Almaty.generic.long=Heure d'Alma-Ata -Asia/Amman.generic.long=Arabie -Asia/Anadyr.generic.long=Heure d'Anadyr -Asia/Aqtau.generic.long=Heure d'Aqtau -Asia/Aqtobe.generic.long=Heure d'Aqtobe -Asia/Ashgabat.generic.long=Heure du Turkm\u00E9nistan -Asia/Ashkhabad.generic.long=Heure du Turkm\u00E9nistan -Asia/Baghdad.generic.long=Arabie -Asia/Bahrain.generic.long=Arabie -Asia/Baku.generic.long=Heure d'Azerba\u00EFdjan -Asia/Bangkok.generic.long=Heure d'Indochine -Asia/Beirut.generic.long=Heure d'Europe de l'Est -Asia/Bishkek.generic.long=Heure du Kirghizistan -Asia/Brunei.generic.long=Heure du Brunei -Asia/Calcutta.generic.long=Inde -Asia/Choibalsan.generic.long=Heure de Choibalsan -Asia/Chongqing.generic.long=Chine -Asia/Chungking.generic.long=Chine -Asia/Colombo.generic.long=Inde -Asia/Dacca.generic.long=Heure du Bangladesh -Asia/Damascus.generic.long=Heure d'Europe de l'Est -Asia/Dhaka.generic.long=Heure du Bangladesh -Asia/Dili.generic.long=Heure de Timor-Leste -Asia/Dubai.generic.long=Golfe -Asia/Dushanbe.generic.long=Heure du Tadjikistan -Asia/Gaza.generic.long=Heure d'Europe de l'Est -Asia/Harbin.generic.long=Chine -Asia/Hebron.generic.long=Heure d'Europe de l'Est -Asia/Ho_Chi_Minh.generic.long=Heure d'Indochine -Asia/Hong_Kong.generic.long=Heure de Hong-Kong -Asia/Hovd.generic.long=Heure de Hovd -Asia/Irkutsk.generic.long=Heure d'Irkutsk -Asia/Istanbul.generic.long=Heure d'Europe de l'Est -Asia/Jakarta.generic.long=Heure de l'Indon\u00E9sie occidentale -Asia/Jayapura.generic.long=Heure d'Indon\u00E9sie orientale -Asia/Jerusalem.generic.long=Isra\u00EBl -Asia/Kabul.generic.long=Heure d'Afghanistan -Asia/Kamchatka.generic.long=Heure de Petropavlovsk-Kamchatski -Asia/Karachi.generic.long=Heure du Pakistan -Asia/Kashgar.generic.long=Chine -Asia/Kathmandu.generic.long=Heure du N\u00E9pal -Asia/Katmandu.generic.long=Heure du N\u00E9pal -Asia/Khandyga.daylight.long=Heure d'\u00E9t\u00E9 de Khandyga -Asia/Khandyga.generic.long=Heure de Khandyga -Asia/Khandyga.standard.long=Heure de Khandyga -Asia/Kolkata.generic.long=Inde -Asia/Krasnoyarsk.generic.long=Heure de Krasno\u00EFarsk -Asia/Kuala_Lumpur.generic.long=Heure de Malaisie -Asia/Kuching.generic.long=Heure de Malaisie -Asia/Kuwait.generic.long=Arabie -Asia/Macao.generic.long=Chine -Asia/Macau.generic.long=Chine -Asia/Magadan.generic.long=Heure de Magadan -Asia/Makassar.generic.long=Heure d'Indon\u00E9sie centrale -Asia/Manila.generic.long=Heure des Philippines -Asia/Muscat.generic.long=Golfe -Asia/Nicosia.generic.long=Heure d'Europe de l'Est -Asia/Novokuznetsk.generic.long=Heure de Novossibirsk -Asia/Novosibirsk.generic.long=Heure de Novossibirsk -Asia/Omsk.generic.long=Heure d'Omsk -Asia/Oral.generic.long=Heure d'Oral -Asia/Phnom_Penh.generic.long=Heure d'Indochine -Asia/Pontianak.generic.long=Heure de l'Indon\u00E9sie occidentale -Asia/Pyongyang.generic.long=Cor\u00E9e -Asia/Qatar.generic.long=Arabie -Asia/Qyzylorda.generic.long=Heure de Kyzylorda -Asia/Rangoon.generic.long=Heure de Myanmar -Asia/Saigon.generic.long=Heure d'Indochine -Asia/Sakhalin.generic.long=Heure de Sakhalin -Asia/Samarkand.generic.long=Heure de l'Ouzb\u00E9kistan -Asia/Seoul.generic.long=Cor\u00E9e -Asia/Shanghai.generic.long=Chine -Asia/Singapore.generic.long=Heure de Singapour -Asia/Taipei.generic.long=Chine -Asia/Tashkent.generic.long=Heure de l'Ouzb\u00E9kistan -Asia/Tbilisi.generic.long=Heure de G\u00E9orgie -Asia/Tehran.generic.long=Heure d'Iran -Asia/Tel_Aviv.generic.long=Isra\u00EBl -Asia/Thimbu.generic.long=Heure du Bhoutan -Asia/Thimphu.generic.long=Heure du Bhoutan -Asia/Tokyo.generic.long=Japon -Asia/Ujung_Pandang.generic.long=Heure d'Indon\u00E9sie centrale -Asia/Ulaanbaatar.generic.long=Heure de l'Ulaanbaatar -Asia/Ulan_Bator.generic.long=Heure de l'Ulaanbaatar -Asia/Urumqi.generic.long=Chine -Asia/Ust-Nera.daylight.long=Heure d'\u00E9t\u00E9 d'Ust-Nera -Asia/Ust-Nera.generic.long=Heure d'Ust-Nera -Asia/Ust-Nera.standard.long=Heure d'Ust-Nera -Asia/Vientiane.generic.long=Heure d'Indochine -Asia/Vladivostok.generic.long=Heure de Vladivostok -Asia/Yakutsk.generic.long=Heure du Iakoutsk -Asia/Yekaterinburg.generic.long=Heure de Yekaterinburg -Asia/Yerevan.generic.long=Heure d'Arm\u00E9nie -Atlantic/Azores.generic.long=Heure des A\u00E7ores -Atlantic/Bermuda.generic.long=Atlantique -Atlantic/Canary.generic.long=Heure d'Europe de l'Ouest -Atlantic/Cape_Verde.generic.long=Heure de Cap-Vert -Atlantic/Faeroe.generic.long=Heure d'Europe de l'Ouest -Atlantic/Faroe.generic.long=Heure d'Europe de l'Ouest -Atlantic/Jan_Mayen.generic.long=Heure d'Europe centrale -Atlantic/Madeira.generic.long=Heure d'Europe de l'Ouest -Atlantic/Reykjavik.generic.long=Heure de Greenwich -Atlantic/South_Georgia.generic.long=G\u00E9orgie du Sud -Atlantic/St_Helena.generic.long=Heure de Greenwich -Atlantic/Stanley.generic.long=Heure des \u00EEles Falkland -Australia/ACT.daylight.long=Heure d'\u00E9t\u00E9 de l'Est (Nouvelle-Galles du Sud) -Australia/ACT.generic.long=C\u00F4te Est (Nouvelle-Galles du Sud) -Australia/ACT.standard.long=Heure normale de l'Est (Nouvelle-Galles du Sud) -Australia/Adelaide.daylight.long=Heure d'\u00E9t\u00E9 d'Australie centrale (Australie du sud) -Australia/Adelaide.generic.long=Centre (Australie-M\u00E9ridionale) -Australia/Adelaide.standard.long=Heure standard d'Australie centrale (Australie du sud) -Australia/Brisbane.daylight.long=Heure d'\u00E9t\u00E9 d'Australie orientale (Queensland) -Australia/Brisbane.generic.long=C\u00F4te Est (Queensland) -Australia/Brisbane.standard.long=Heure standard d'Australie orientale (Queensland) -Australia/Broken_Hill.daylight.long=Heure d'\u00E9t\u00E9 d'Australie centrale (Australie du sud/Nouvelle-Galles du sud) -Australia/Broken_Hill.generic.long=Centre (Australie-M\u00E9ridionale/Nouvelle-Galles du Sud) -Australia/Broken_Hill.standard.long=Heure standard d'Australie centrale (Australie du sud/Nouvelle-Galles du sud) -Australia/Canberra.daylight.long=Heure d'\u00E9t\u00E9 de l'Est (Nouvelle-Galles du Sud) -Australia/Canberra.generic.long=C\u00F4te Est (Nouvelle-Galles du Sud) -Australia/Canberra.standard.long=Heure normale de l'Est (Nouvelle-Galles du Sud) -Australia/Currie.daylight.long=Heure d'\u00E9t\u00E9 de l'Est (Nouvelle-Galles du Sud) -Australia/Currie.generic.long=C\u00F4te Est (Nouvelle-Galles du Sud) -Australia/Currie.standard.long=Heure normale de l'Est (Nouvelle-Galles du Sud) -Australia/Darwin.daylight.long=Heure d'\u00E9t\u00E9 d'Australie centrale (Territoire du Nord) -Australia/Darwin.generic.long=Centre (Territoire du Nord) -Australia/Darwin.standard.long=Heure standard d'Australie centrale (Territoire du Nord) -Australia/Eucla.daylight.long=Heure d'\u00E9t\u00E9 de l'Australie occidentale (centre) -Australia/Eucla.generic.long=Heure de l'Australie occidentale (centre) -Australia/Eucla.standard.long=Heure standard de l'Australie occidentale (centre) -Australia/Hobart.daylight.long=Heure d'\u00E9t\u00E9 d'Australie orientale (Tasmanie) -Australia/Hobart.generic.long=C\u00F4te Est (Tasmanie) -Australia/Hobart.standard.long=Heure standard d'Australie orientale (Tasmanie) -Australia/LHI.generic.long=Heure de Lord Howe -Australia/Lindeman.daylight.long=Heure d'\u00E9t\u00E9 d'Australie orientale (Queensland) -Australia/Lindeman.generic.long=C\u00F4te Est (Queensland) -Australia/Lindeman.standard.long=Heure standard d'Australie orientale (Queensland) -Australia/Lord_Howe.generic.long=Heure de Lord Howe -Australia/Melbourne.daylight.long=Heure d'\u00E9t\u00E9 d'Australie orientale (Victoria) -Australia/Melbourne.generic.long=C\u00F4te Est (Victoria) -Australia/Melbourne.standard.long=Heure standard d'Australie orientale (Victoria) -Australia/NSW.daylight.long=Heure d'\u00E9t\u00E9 de l'Est (Nouvelle-Galles du Sud) -Australia/NSW.generic.long=C\u00F4te Est (Nouvelle-Galles du Sud) -Australia/NSW.standard.long=Heure normale de l'Est (Nouvelle-Galles du Sud) -Australia/North.daylight.long=Heure d'\u00E9t\u00E9 d'Australie centrale (Territoire du Nord) -Australia/North.generic.long=Centre (Territoire du Nord) -Australia/North.standard.long=Heure standard d'Australie centrale (Territoire du Nord) -Australia/Perth.daylight.long=Heure d'\u00E9t\u00E9 de l'Ouest (Australie) -Australia/Perth.generic.long=Ouest (Australie) -Australia/Perth.standard.long=Heure normale de l'Ouest (Australie) -Australia/Queensland.daylight.long=Heure d'\u00E9t\u00E9 d'Australie orientale (Queensland) -Australia/Queensland.generic.long=C\u00F4te Est (Queensland) -Australia/Queensland.standard.long=Heure standard d'Australie orientale (Queensland) -Australia/South.daylight.long=Heure d'\u00E9t\u00E9 d'Australie centrale (Australie du sud) -Australia/South.generic.long=Centre (Australie-M\u00E9ridionale) -Australia/South.standard.long=Heure standard d'Australie centrale (Australie du sud) -Australia/Sydney.daylight.long=Heure d'\u00E9t\u00E9 de l'Est (Nouvelle-Galles du Sud) -Australia/Sydney.generic.long=C\u00F4te Est (Nouvelle-Galles du Sud) -Australia/Sydney.standard.long=Heure normale de l'Est (Nouvelle-Galles du Sud) -Australia/Tasmania.daylight.long=Heure d'\u00E9t\u00E9 d'Australie orientale (Tasmanie) -Australia/Tasmania.generic.long=C\u00F4te Est (Tasmanie) -Australia/Tasmania.standard.long=Heure standard d'Australie orientale (Tasmanie) -Australia/Victoria.daylight.long=Heure d'\u00E9t\u00E9 d'Australie orientale (Victoria) -Australia/Victoria.generic.long=C\u00F4te Est (Victoria) -Australia/Victoria.standard.long=Heure standard d'Australie orientale (Victoria) -Australia/West.daylight.long=Heure d'\u00E9t\u00E9 de l'Ouest (Australie) -Australia/West.generic.long=Ouest (Australie) -Australia/West.standard.long=Heure normale de l'Ouest (Australie) -Australia/Yancowinna.daylight.long=Heure d'\u00E9t\u00E9 d'Australie centrale (Australie du sud/Nouvelle-Galles du sud) -Australia/Yancowinna.generic.long=Centre (Australie-M\u00E9ridionale/Nouvelle-Galles du Sud) -Australia/Yancowinna.standard.long=Heure standard d'Australie centrale (Australie du sud/Nouvelle-Galles du sud) -BET.generic.long=Heure du Br\u00E9sil -BST.generic.long=Heure du Bangladesh -Brazil/Acre.generic.long=Heure de l'Acre -Brazil/DeNoronha.generic.long=Heure de Fernando de Noronha -Brazil/East.generic.long=Heure du Br\u00E9sil -Brazil/West.generic.long=Heure d'Amazonie -CAT.generic.long=Heure d'Afrique centrale -CET.generic.long=Heure d'Europe centrale -CNT.generic.long=Terre-Neuve -CST.generic.long=Centre -CST6CDT.generic.long=Centre -CTT.generic.long=Chine -Canada/Atlantic.generic.long=Atlantique -Canada/Central.generic.long=Centre -Canada/East-Saskatchewan.generic.long=Centre -Canada/Eastern.generic.long=C\u00F4te Est -Canada/Mountain.generic.long=Rocheuses -Canada/Newfoundland.generic.long=Terre-Neuve -Canada/Pacific.generic.long=Pacifique -Canada/Saskatchewan.generic.long=Centre -Canada/Yukon.generic.long=Pacifique -Chile/Continental.generic.long=Heure du Chili -Chile/EasterIsland.generic.long=Heure de l'Ile de P\u00E2ques -Cuba.generic.long=Heure de Cuba -EAT.generic.long=Heure d'Afrique de l'Est -ECT.generic.long=Heure d'Europe centrale -EET.generic.long=Heure d'Europe de l'Est -EST.generic.long=C\u00f4te Est -EST5EDT.generic.long=C\u00f4te Est -Egypt.generic.long=Heure d'Europe de l'Est -Eire.generic.long=Heure irlandaise -Etc/Greenwich.generic.long=Heure de Greenwich -Etc/UCT.generic.long=Temps universel coordonn\u00E9 -Etc/UTC.generic.long=Temps universel coordonn\u00E9 -Etc/Universal.generic.long=Temps universel coordonn\u00E9 -Etc/Zulu.generic.long=Temps universel coordonn\u00E9 -Europe/Amsterdam.generic.long=Heure d'Europe centrale -Europe/Andorra.generic.long=Heure d'Europe centrale -Europe/Athens.generic.long=Heure d'Europe de l'Est -Europe/Belfast.generic.long=Heure britannique -Europe/Belgrade.generic.long=Heure d'Europe centrale -Europe/Berlin.generic.long=Heure d'Europe centrale -Europe/Bratislava.generic.long=Heure d'Europe centrale -Europe/Brussels.generic.long=Heure d'Europe centrale -Europe/Bucharest.generic.long=Heure d'Europe de l'Est -Europe/Budapest.generic.long=Heure d'Europe centrale -Europe/Busingen.generic.long=Heure d'Europe centrale -Europe/Chisinau.generic.long=Heure d'Europe de l'Est -Europe/Copenhagen.generic.long=Heure d'Europe centrale -Europe/Dublin.generic.long=Heure irlandaise -Europe/Gibraltar.generic.long=Heure d'Europe centrale -Europe/Guernsey.generic.long=Heure britannique -Europe/Helsinki.generic.long=Heure d'Europe de l'Est -Europe/Isle_of_Man.generic.long=Heure britannique -Europe/Istanbul.generic.long=Heure d'Europe de l'Est -Europe/Jersey.generic.long=Heure britannique -Europe/Kaliningrad.daylight.long=Heure d'\u00E9t\u00E9 d'Europe de l'Est UTC+3 -Europe/Kaliningrad.generic.long=Heure d'Europe de l'Est UTC+3 -Europe/Kaliningrad.standard.long=Heure d'Europe de l'Est UTC+3 -Europe/Kiev.generic.long=Heure d'Europe de l'Est -Europe/Lisbon.generic.long=Heure d'Europe de l'Ouest -Europe/Ljubljana.generic.long=Heure d'Europe centrale -Europe/London.generic.long=Heure britannique -Europe/Luxembourg.generic.long=Heure d'Europe centrale -Europe/Madrid.generic.long=Heure d'Europe centrale -Europe/Malta.generic.long=Heure d'Europe centrale -Europe/Mariehamn.generic.long=Heure d'Europe de l'Est -Europe/Minsk.daylight.long=Heure d'\u00E9t\u00E9 d'Europe de l'Est UTC+3 -Europe/Minsk.generic.long=Heure d'Europe de l'Est UTC+3 -Europe/Minsk.standard.long=Heure d'Europe de l'Est UTC+3 -Europe/Monaco.generic.long=Heure d'Europe centrale -Europe/Moscow.generic.long=Moscou -Europe/Nicosia.generic.long=Heure d'Europe de l'Est -Europe/Oslo.generic.long=Heure d'Europe centrale -Europe/Paris.generic.long=Heure d'Europe centrale -Europe/Podgorica.generic.long=Heure d'Europe centrale -Europe/Prague.generic.long=Heure d'Europe centrale -Europe/Riga.generic.long=Heure d'Europe de l'Est -Europe/Rome.generic.long=Heure d'Europe centrale -Europe/Samara.generic.long=Heure de Samara -Europe/San_Marino.generic.long=Heure d'Europe centrale -Europe/Sarajevo.generic.long=Heure d'Europe centrale -Europe/Simferopol.generic.long=Heure d'Europe de l'Est -Europe/Skopje.generic.long=Heure d'Europe centrale -Europe/Sofia.generic.long=Heure d'Europe de l'Est -Europe/Stockholm.generic.long=Heure d'Europe centrale -Europe/Tallinn.generic.long=Heure d'Europe de l'Est -Europe/Tirane.generic.long=Heure d'Europe centrale -Europe/Tiraspol.generic.long=Heure d'Europe de l'Est -Europe/Uzhgorod.generic.long=Heure d'Europe de l'Est -Europe/Vaduz.generic.long=Heure d'Europe centrale -Europe/Vatican.generic.long=Heure d'Europe centrale -Europe/Vienna.generic.long=Heure d'Europe centrale -Europe/Vilnius.generic.long=Heure d'Europe de l'Est -Europe/Volgograd.generic.long=Heure de Volgograd -Europe/Warsaw.generic.long=Heure d'Europe centrale -Europe/Zagreb.generic.long=Heure d'Europe centrale -Europe/Zaporozhye.generic.long=Heure d'Europe de l'Est -Europe/Zurich.generic.long=Heure d'Europe centrale -GB-Eire.generic.long=Heure britannique -GB.generic.long=Heure britannique -GMT.generic.long=Heure de Greenwich -Greenwich.generic.long=Heure de Greenwich -HST.generic.long=Hawa\u00ef -Hongkong.generic.long=Heure de Hong-Kong -IET.generic.long=C\u00F4te Est -IST.generic.long=Inde -Iceland.generic.long=Heure de Greenwich -Indian/Antananarivo.generic.long=Heure d'Afrique de l'Est -Indian/Chagos.generic.long=Heure de l'oc\u00E9an Indien -Indian/Christmas.generic.long=Heure de l'Ile Christmas -Indian/Cocos.generic.long=Heure des Iles Cocos -Indian/Comoro.generic.long=Heure d'Afrique de l'Est -Indian/Kerguelen.generic.long=Heure des Terres australes antarctiques fran\u00E7aises -Indian/Mahe.generic.long=Heure des Seychelles -Indian/Maldives.generic.long=Heure des Maldives -Indian/Mauritius.generic.long=Heure de Maurice -Indian/Mayotte.generic.long=Heure d'Afrique de l'Est -Indian/Reunion.generic.long=Heure de la R\u00E9union -Iran.generic.long=Heure d'Iran -Israel.generic.long=Isra\u00EBl -JST.generic.long=Japon -Jamaica.generic.long=C\u00F4te Est -Japan.generic.long=Japon -Kwajalein.generic.long=Heure des Iles Marshall -Libya.generic.long=Heure d'Europe de l'Est -MET.generic.long=MET -MIT.generic.long=Heure des Samoas occidentales -MST.generic.long=Rocheuses -MST7MDT.generic.long=Rocheuses -Mexico/BajaNorte.generic.long=Pacifique -Mexico/BajaSur.generic.long=Rocheuses -Mexico/General.generic.long=Centre -NET.generic.long=Heure d'Arm\u00E9nie -NST.generic.long=Nouvelle-Z\u00E9lande -NZ-CHAT.generic.long=Chatham -NZ.generic.long=Nouvelle-Z\u00E9lande -Navajo.generic.long=Rocheuses -PLT.generic.long=Heure du Pakistan -PNT.generic.long=Rocheuses -PRC.generic.long=Chine -PRT.generic.long=Atlantique -PST.generic.long=Pacifique -PST8PDT.generic.long=Pacifique -Pacific/Apia.generic.long=Heure des Samoas occidentales -Pacific/Auckland.generic.long=Nouvelle-Z\u00E9lande -Pacific/Chatham.generic.long=Chatham -Pacific/Chuuk.daylight.long=Heure d'\u00E9t\u00E9 de Chuuk -Pacific/Chuuk.generic.long=Heure de Chuuk -Pacific/Chuuk.standard.long=Heure de Chuuk -Pacific/Easter.generic.long=Heure de l'Ile de P\u00E2ques -Pacific/Efate.generic.long=Heure du Vanuatu -Pacific/Enderbury.generic.long=Heure de l'Ile de Phoenix -Pacific/Fakaofo.generic.long=Heure de Tokelau -Pacific/Fiji.generic.long=Heure de Fidji -Pacific/Funafuti.generic.long=Heure de Tuvalu -Pacific/Galapagos.generic.long=Heure des Galapagos -Pacific/Gambier.generic.long=Heure de Gambi -Pacific/Guadalcanal.generic.long=Heure des Iles Salomon -Pacific/Guam.generic.long=Chamorro -Pacific/Honolulu.generic.long=Hawa\u00EF -Pacific/Johnston.generic.long=Hawa\u00EF -Pacific/Kiritimati.generic.long=Heure de l'Ile de Line -Pacific/Kosrae.generic.long=Heure de Kusaie -Pacific/Kwajalein.generic.long=Heure des Iles Marshall -Pacific/Majuro.generic.long=Heure des Iles Marshall -Pacific/Marquesas.generic.long=Heure des Marquises -Pacific/Midway.generic.long=Samoa -Pacific/Nauru.generic.long=Heure de Nauru -Pacific/Niue.generic.long=Heure de Niue -Pacific/Norfolk.generic.long=Heure de Norfolk -Pacific/Noumea.generic.long=Heure de Nouvelle-Cal\u00E9donie -Pacific/Pago_Pago.generic.long=Samoa -Pacific/Palau.generic.long=Heure de Palaos -Pacific/Pitcairn.generic.long=Pitcairn -Pacific/Pohnpei.daylight.long=Heure d'\u00E9t\u00E9 de Pohnpei -Pacific/Pohnpei.generic.long=Ponape -Pacific/Pohnpei.standard.long=Heure de Pohnpei -Pacific/Ponape.daylight.long=Heure d'\u00E9t\u00E9 de Pohnpei -Pacific/Ponape.generic.long=Ponape -Pacific/Ponape.standard.long=Heure de Pohnpei -Pacific/Port_Moresby.generic.long=Heure de Papouasie-Nouvelle-Guin\u00E9e -Pacific/Rarotonga.generic.long=Heure des Iles Cook -Pacific/Saipan.generic.long=Chamorro -Pacific/Samoa.generic.long=Samoa -Pacific/Tahiti.generic.long=Heure de Tahiti -Pacific/Tarawa.generic.long=Heure de Kiribati -Pacific/Tongatapu.generic.long=Heure de Tonga -Pacific/Truk.daylight.long=Heure d'\u00E9t\u00E9 de Chuuk -Pacific/Truk.generic.long=Heure de Chuuk -Pacific/Truk.standard.long=Heure de Chuuk -Pacific/Wake.generic.long=Heure de Wake -Pacific/Wallis.generic.long=Heure de Wallis-et-Futuna -Pacific/Yap.daylight.long=Heure d'\u00E9t\u00E9 de Chuuk -Pacific/Yap.generic.long=Heure de Chuuk -Pacific/Yap.standard.long=Heure de Chuuk -Poland.generic.long=Heure d'Europe centrale -Portugal.generic.long=Heure d'Europe de l'Ouest -ROK.generic.long=Cor\u00E9e -SST.generic.long=Heure des Iles Salomon -Singapore.generic.long=Heure de Singapour -SystemV/AST4.generic.long=Atlantique -SystemV/AST4ADT.generic.long=Atlantique -SystemV/CST6.generic.long=Centre -SystemV/CST6CDT.generic.long=Centre -SystemV/EST5.generic.long=C\u00F4te Est -SystemV/EST5EDT.generic.long=C\u00F4te Est -SystemV/HST10.generic.long=Hawa\u00EF -SystemV/MST7.generic.long=Rocheuses -SystemV/MST7MDT.generic.long=Rocheuses -SystemV/PST8.generic.long=Pacifique -SystemV/PST8PDT.generic.long=Pacifique -SystemV/YST9.generic.long=Alaska -SystemV/YST9YDT.generic.long=Alaska -Turkey.generic.long=Heure d'Europe de l'Est -UCT.generic.long=Temps universel coordonn\u00E9 -US/Alaska.generic.long=Alaska -US/Aleutian.generic.long=Hawa\u00EF-Iles Al\u00E9outiennes -US/Arizona.generic.long=Rocheuses -US/Central.generic.long=Centre -US/East-Indiana.generic.long=C\u00F4te Est -US/Eastern.generic.long=C\u00F4te Est -US/Hawaii.generic.long=Hawa\u00EF -US/Indiana-Starke.generic.long=Centre -US/Michigan.generic.long=C\u00F4te Est -US/Mountain.generic.long=Rocheuses -US/Pacific-New.generic.long=Pacifique -US/Pacific.generic.long=Pacifique -US/Samoa.generic.long=Samoa -UTC.generic.long=Temps universel coordonn\u00E9 -Universal.generic.long=Temps universel coordonn\u00E9 -VST.generic.long=Heure d'Indochine -W-SU.generic.long=Moscou -WET.generic.long=Heure d'Europe de l'Ouest -Zulu.generic.long=Temps universel coordonn\u00E9 diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_fr_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_fr_short.properties deleted file mode 100644 index 095522a68d1..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_fr_short.properties +++ /dev/null @@ -1,1743 +0,0 @@ -ACT.daylight.short=CST -ACT.generic.short=CT -ACT.standard.short=CST -AET.daylight.short=EST -AET.generic.short=ET -AET.standard.short=EST -Africa/Abidjan.daylight.short=GMT -Africa/Abidjan.generic.short=GMT -Africa/Abidjan.standard.short=GMT -Africa/Accra.daylight.short=GHST -Africa/Accra.generic.short=GMT -Africa/Accra.standard.short=GMT -Africa/Addis_Ababa.daylight.short=EAST -Africa/Addis_Ababa.generic.short=EAT -Africa/Addis_Ababa.standard.short=EAT -Africa/Algiers.daylight.short=CEST -Africa/Algiers.generic.short=CET -Africa/Algiers.standard.short=CET -Africa/Asmara.daylight.short=EAST -Africa/Asmara.generic.short=EAT -Africa/Asmara.standard.short=EAT -Africa/Asmera.daylight.short=EAST -Africa/Asmera.generic.short=EAT -Africa/Asmera.standard.short=EAT -Africa/Bamako.daylight.short=GMT -Africa/Bamako.generic.short=GMT -Africa/Bamako.standard.short=GMT -Africa/Bangui.daylight.short=WAST -Africa/Bangui.generic.short=WAT -Africa/Bangui.standard.short=WAT -Africa/Banjul.daylight.short=GMT -Africa/Banjul.generic.short=GMT -Africa/Banjul.standard.short=GMT -Africa/Bissau.daylight.short=GMT -Africa/Bissau.generic.short=GMT -Africa/Bissau.standard.short=GMT -Africa/Blantyre.daylight.short=CAST -Africa/Blantyre.generic.short=CAT -Africa/Blantyre.standard.short=CAT -Africa/Brazzaville.daylight.short=WAST -Africa/Brazzaville.generic.short=WAT -Africa/Brazzaville.standard.short=WAT -Africa/Bujumbura.daylight.short=CAST -Africa/Bujumbura.generic.short=CAT -Africa/Bujumbura.standard.short=CAT -Africa/Cairo.daylight.short=EEST -Africa/Cairo.generic.short=EET -Africa/Cairo.standard.short=EET -Africa/Casablanca.daylight.short=WEST -Africa/Casablanca.generic.short=WET -Africa/Casablanca.standard.short=WET -Africa/Ceuta.daylight.short=CEST -Africa/Ceuta.generic.short=CET -Africa/Ceuta.standard.short=CET -Africa/Conakry.daylight.short=GMT -Africa/Conakry.generic.short=GMT -Africa/Conakry.standard.short=GMT -Africa/Dakar.daylight.short=GMT -Africa/Dakar.generic.short=GMT -Africa/Dakar.standard.short=GMT -Africa/Dar_es_Salaam.daylight.short=EAST -Africa/Dar_es_Salaam.generic.short=EAT -Africa/Dar_es_Salaam.standard.short=EAT -Africa/Djibouti.daylight.short=EAST -Africa/Djibouti.generic.short=EAT -Africa/Djibouti.standard.short=EAT -Africa/Douala.daylight.short=WAST -Africa/Douala.generic.short=WAT -Africa/Douala.standard.short=WAT -Africa/El_Aaiun.daylight.short=WEST -Africa/El_Aaiun.generic.short=WET -Africa/El_Aaiun.standard.short=WET -Africa/Freetown.daylight.short=SLST -Africa/Freetown.generic.short=SLT -Africa/Freetown.standard.short=GMT -Africa/Gaborone.daylight.short=CAST -Africa/Gaborone.generic.short=CAT -Africa/Gaborone.standard.short=CAT -Africa/Harare.daylight.short=CAST -Africa/Harare.generic.short=CAT -Africa/Harare.standard.short=CAT -Africa/Johannesburg.daylight.short=SAST -Africa/Johannesburg.generic.short=SAT -Africa/Johannesburg.standard.short=SAST -Africa/Juba.daylight.short=EAST -Africa/Juba.generic.short=EAT -Africa/Juba.standard.short=EAT -Africa/Kampala.daylight.short=EAST -Africa/Kampala.generic.short=EAT -Africa/Kampala.standard.short=EAT -Africa/Khartoum.daylight.short=EAST -Africa/Khartoum.generic.short=EAT -Africa/Khartoum.standard.short=EAT -Africa/Kigali.daylight.short=CAST -Africa/Kigali.generic.short=CAT -Africa/Kigali.standard.short=CAT -Africa/Kinshasa.daylight.short=WAST -Africa/Kinshasa.generic.short=WAT -Africa/Kinshasa.standard.short=WAT -Africa/Lagos.daylight.short=WAST -Africa/Lagos.generic.short=WAT -Africa/Lagos.standard.short=WAT -Africa/Libreville.daylight.short=WAST -Africa/Libreville.generic.short=WAT -Africa/Libreville.standard.short=WAT -Africa/Lome.daylight.short=GMT -Africa/Lome.generic.short=GMT -Africa/Lome.standard.short=GMT -Africa/Luanda.daylight.short=WAST -Africa/Luanda.generic.short=WAT -Africa/Luanda.standard.short=WAT -Africa/Lubumbashi.daylight.short=CAST -Africa/Lubumbashi.generic.short=CAT -Africa/Lubumbashi.standard.short=CAT -Africa/Lusaka.daylight.short=CAST -Africa/Lusaka.generic.short=CAT -Africa/Lusaka.standard.short=CAT -Africa/Malabo.daylight.short=WAST -Africa/Malabo.generic.short=WAT -Africa/Malabo.standard.short=WAT -Africa/Maputo.daylight.short=CAST -Africa/Maputo.generic.short=CAT -Africa/Maputo.standard.short=CAT -Africa/Maseru.daylight.short=SAST -Africa/Maseru.generic.short=SAT -Africa/Maseru.standard.short=SAST -Africa/Mbabane.daylight.short=SAST -Africa/Mbabane.generic.short=SAT -Africa/Mbabane.standard.short=SAST -Africa/Mogadishu.daylight.short=EAST -Africa/Mogadishu.generic.short=EAT -Africa/Mogadishu.standard.short=EAT -Africa/Monrovia.daylight.short=GMT -Africa/Monrovia.generic.short=GMT -Africa/Monrovia.standard.short=GMT -Africa/Nairobi.daylight.short=EAST -Africa/Nairobi.generic.short=EAT -Africa/Nairobi.standard.short=EAT -Africa/Ndjamena.daylight.short=WAST -Africa/Ndjamena.generic.short=WAT -Africa/Ndjamena.standard.short=WAT -Africa/Niamey.daylight.short=WAST -Africa/Niamey.generic.short=WAT -Africa/Niamey.standard.short=WAT -Africa/Nouakchott.daylight.short=GMT -Africa/Nouakchott.generic.short=GMT -Africa/Nouakchott.standard.short=GMT -Africa/Ouagadougou.daylight.short=GMT -Africa/Ouagadougou.generic.short=GMT -Africa/Ouagadougou.standard.short=GMT -Africa/Porto-Novo.daylight.short=WAST -Africa/Porto-Novo.generic.short=WAT -Africa/Porto-Novo.standard.short=WAT -Africa/Sao_Tome.daylight.short=GMT -Africa/Sao_Tome.generic.short=GMT -Africa/Sao_Tome.standard.short=GMT -Africa/Timbuktu.daylight.short=GMT -Africa/Timbuktu.generic.short=GMT -Africa/Timbuktu.standard.short=GMT -Africa/Tripoli.daylight.short=EEST -Africa/Tripoli.generic.short=EET -Africa/Tripoli.standard.short=EET -Africa/Tunis.daylight.short=CEST -Africa/Tunis.generic.short=CET -Africa/Tunis.standard.short=CET -Africa/Windhoek.daylight.short=WAST -Africa/Windhoek.generic.short=WAT -Africa/Windhoek.standard.short=WAT -AGT.daylight.short=ARST -AGT.generic.short=ART -AGT.standard.short=ART -America/Adak.daylight.short=HADT -America/Adak.generic.short=HAT -America/Adak.standard.short=HAST -America/Anchorage.daylight.short=AKDT -America/Anchorage.generic.short=AKT -America/Anchorage.standard.short=AKST -America/Anguilla.daylight.short=ADT -America/Anguilla.generic.short=AT -America/Anguilla.standard.short=AST -America/Antigua.daylight.short=ADT -America/Antigua.generic.short=AT -America/Antigua.standard.short=AST -America/Araguaina.daylight.short=BRST -America/Araguaina.generic.short=BRT -America/Araguaina.standard.short=BRT -America/Argentina/Buenos_Aires.daylight.short=ARST -America/Argentina/Buenos_Aires.generic.short=ART -America/Argentina/Buenos_Aires.standard.short=ART -America/Argentina/Catamarca.daylight.short=ARST -America/Argentina/Catamarca.generic.short=ART -America/Argentina/Catamarca.standard.short=ART -America/Argentina/ComodRivadavia.daylight.short=ARST -America/Argentina/ComodRivadavia.generic.short=ART -America/Argentina/ComodRivadavia.standard.short=ART -America/Argentina/Cordoba.daylight.short=ARST -America/Argentina/Cordoba.generic.short=ART -America/Argentina/Cordoba.standard.short=ART -America/Argentina/Jujuy.daylight.short=ARST -America/Argentina/Jujuy.generic.short=ART -America/Argentina/Jujuy.standard.short=ART -America/Argentina/La_Rioja.daylight.short=ARST -America/Argentina/La_Rioja.generic.short=ART -America/Argentina/La_Rioja.standard.short=ART -America/Argentina/Mendoza.daylight.short=ARST -America/Argentina/Mendoza.generic.short=ART -America/Argentina/Mendoza.standard.short=ART -America/Argentina/Rio_Gallegos.daylight.short=ARST -America/Argentina/Rio_Gallegos.generic.short=ART -America/Argentina/Rio_Gallegos.standard.short=ART -America/Argentina/Salta.daylight.short=ARST -America/Argentina/Salta.generic.short=ART -America/Argentina/Salta.standard.short=ART -America/Argentina/San_Juan.daylight.short=ARST -America/Argentina/San_Juan.generic.short=ART -America/Argentina/San_Juan.standard.short=ART -America/Argentina/San_Luis.daylight.short=ARST -America/Argentina/San_Luis.generic.short=ART -America/Argentina/San_Luis.standard.short=ART -America/Argentina/Tucuman.daylight.short=ARST -America/Argentina/Tucuman.generic.short=ART -America/Argentina/Tucuman.standard.short=ART -America/Argentina/Ushuaia.daylight.short=ARST -America/Argentina/Ushuaia.generic.short=ART -America/Argentina/Ushuaia.standard.short=ART -America/Aruba.daylight.short=ADT -America/Aruba.generic.short=AT -America/Aruba.standard.short=AST -America/Asuncion.daylight.short=PYST -America/Asuncion.generic.short=PYT -America/Asuncion.standard.short=PYT -America/Atikokan.daylight.short=EDT -America/Atikokan.generic.short=ET -America/Atikokan.standard.short=EST -America/Atka.daylight.short=HADT -America/Atka.generic.short=HAT -America/Atka.standard.short=HAST -America/Bahia_Banderas.daylight.short=CDT -America/Bahia_Banderas.generic.short=CT -America/Bahia_Banderas.standard.short=CST -America/Bahia.daylight.short=BRST -America/Bahia.generic.short=BRT -America/Bahia.standard.short=BRT -America/Barbados.daylight.short=ADT -America/Barbados.generic.short=AT -America/Barbados.standard.short=AST -America/Belem.daylight.short=BRST -America/Belem.generic.short=BRT -America/Belem.standard.short=BRT -America/Belize.daylight.short=CDT -America/Belize.generic.short=CT -America/Belize.standard.short=CST -America/Blanc-Sablon.daylight.short=ADT -America/Blanc-Sablon.generic.short=AT -America/Blanc-Sablon.standard.short=AST -America/Boa_Vista.daylight.short=AMST -America/Boa_Vista.generic.short=AMT -America/Boa_Vista.standard.short=AMT -America/Bogota.daylight.short=COST -America/Bogota.generic.short=COT -America/Bogota.standard.short=COT -America/Boise.daylight.short=MDT -America/Boise.generic.short=MT -America/Boise.standard.short=MST -America/Buenos_Aires.daylight.short=ARST -America/Buenos_Aires.generic.short=ART -America/Buenos_Aires.standard.short=ART -America/Cambridge_Bay.daylight.short=MDT -America/Cambridge_Bay.generic.short=MT -America/Cambridge_Bay.standard.short=MST -America/Campo_Grande.daylight.short=AMST -America/Campo_Grande.generic.short=AMT -America/Campo_Grande.standard.short=AMT -America/Cancun.daylight.short=CDT -America/Cancun.generic.short=CT -America/Cancun.standard.short=CST -America/Caracas.daylight.short=VEST -America/Caracas.generic.short=VET -America/Caracas.standard.short=VET -America/Catamarca.daylight.short=ARST -America/Catamarca.generic.short=ART -America/Catamarca.standard.short=ART -America/Cayenne.daylight.short=GFST -America/Cayenne.generic.short=GFT -America/Cayenne.standard.short=GFT -America/Cayman.daylight.short=EDT -America/Cayman.generic.short=ET -America/Cayman.standard.short=EST -America/Chicago.daylight.short=CDT -America/Chicago.generic.short=CT -America/Chicago.standard.short=CST -America/Chihuahua.daylight.short=MDT -America/Chihuahua.generic.short=MT -America/Chihuahua.standard.short=MST -America/Coral_Harbour.daylight.short=EDT -America/Coral_Harbour.generic.short=ET -America/Coral_Harbour.standard.short=EST -America/Cordoba.daylight.short=ARST -America/Cordoba.generic.short=ART -America/Cordoba.standard.short=ART -America/Costa_Rica.daylight.short=CDT -America/Costa_Rica.generic.short=CT -America/Costa_Rica.standard.short=CST -America/Creston.daylight.short=MDT -America/Creston.generic.short=MT -America/Creston.standard.short=MST -America/Cuiaba.daylight.short=AMST -America/Cuiaba.generic.short=AMT -America/Cuiaba.standard.short=AMT -America/Curacao.daylight.short=ADT -America/Curacao.generic.short=AT -America/Curacao.standard.short=AST -America/Danmarkshavn.daylight.short=GMT -America/Danmarkshavn.generic.short=GMT -America/Danmarkshavn.standard.short=GMT -America/Dawson_Creek.daylight.short=MDT -America/Dawson_Creek.generic.short=MT -America/Dawson_Creek.standard.short=MST -America/Dawson.daylight.short=PDT -America/Dawson.generic.short=PT -America/Dawson.standard.short=PST -America/Denver.daylight.short=MDT -America/Denver.generic.short=MT -America/Denver.standard.short=MST -America/Detroit.daylight.short=EDT -America/Detroit.generic.short=ET -America/Detroit.standard.short=EST -America/Dominica.daylight.short=ADT -America/Dominica.generic.short=AT -America/Dominica.standard.short=AST -America/Edmonton.daylight.short=MDT -America/Edmonton.generic.short=MT -America/Edmonton.standard.short=MST -America/Eirunepe.daylight.short=ACST -America/Eirunepe.generic.short=ACT -America/Eirunepe.standard.short=ACT -America/El_Salvador.daylight.short=CDT -America/El_Salvador.generic.short=CT -America/El_Salvador.standard.short=CST -America/Ensenada.daylight.short=PDT -America/Ensenada.generic.short=PT -America/Ensenada.standard.short=PST -America/Fortaleza.daylight.short=BRST -America/Fortaleza.generic.short=BRT -America/Fortaleza.standard.short=BRT -America/Fort_Wayne.daylight.short=EDT -America/Fort_Wayne.generic.short=ET -America/Fort_Wayne.standard.short=EST -America/Glace_Bay.daylight.short=ADT -America/Glace_Bay.generic.short=AT -America/Glace_Bay.standard.short=AST -America/Godthab.daylight.short=WGST -America/Godthab.generic.short=WGT -America/Godthab.standard.short=WGT -America/Goose_Bay.daylight.short=ADT -America/Goose_Bay.generic.short=AT -America/Goose_Bay.standard.short=AST -America/Grand_Turk.daylight.short=EDT -America/Grand_Turk.generic.short=ET -America/Grand_Turk.standard.short=EST -America/Grenada.daylight.short=ADT -America/Grenada.generic.short=AT -America/Grenada.standard.short=AST -America/Guadeloupe.daylight.short=ADT -America/Guadeloupe.generic.short=AT -America/Guadeloupe.standard.short=AST -America/Guatemala.daylight.short=CDT -America/Guatemala.generic.short=CT -America/Guatemala.standard.short=CST -America/Guayaquil.daylight.short=ECST -America/Guayaquil.generic.short=ECT -America/Guayaquil.standard.short=ECT -America/Guyana.daylight.short=GYST -America/Guyana.generic.short=GYT -America/Guyana.standard.short=GYT -America/Halifax.daylight.short=ADT -America/Halifax.generic.short=AT -America/Halifax.standard.short=AST -America/Havana.daylight.short=CDT -America/Havana.generic.short=CT -America/Havana.standard.short=CST -America/Hermosillo.daylight.short=MDT -America/Hermosillo.generic.short=MT -America/Hermosillo.standard.short=MST -America/Indiana/Indianapolis.daylight.short=EDT -America/Indiana/Indianapolis.generic.short=ET -America/Indiana/Indianapolis.standard.short=EST -America/Indiana/Knox.daylight.short=CDT -America/Indiana/Knox.generic.short=CT -America/Indiana/Knox.standard.short=CST -America/Indiana/Marengo.daylight.short=EDT -America/Indiana/Marengo.generic.short=ET -America/Indiana/Marengo.standard.short=EST -America/Indiana/Petersburg.daylight.short=EDT -America/Indiana/Petersburg.generic.short=ET -America/Indiana/Petersburg.standard.short=EST -America/Indianapolis.daylight.short=EDT -America/Indianapolis.generic.short=ET -America/Indianapolis.standard.short=EST -America/Indiana/Tell_City.daylight.short=CDT -America/Indiana/Tell_City.generic.short=CT -America/Indiana/Tell_City.standard.short=CST -America/Indiana/Vevay.daylight.short=EDT -America/Indiana/Vevay.generic.short=ET -America/Indiana/Vevay.standard.short=EST -America/Indiana/Vincennes.daylight.short=EDT -America/Indiana/Vincennes.generic.short=ET -America/Indiana/Vincennes.standard.short=EST -America/Indiana/Winamac.daylight.short=EDT -America/Indiana/Winamac.generic.short=ET -America/Indiana/Winamac.standard.short=EST -America/Inuvik.daylight.short=MDT -America/Inuvik.generic.short=MT -America/Inuvik.standard.short=MST -America/Iqaluit.daylight.short=EDT -America/Iqaluit.generic.short=ET -America/Iqaluit.standard.short=EST -America/Jamaica.daylight.short=EDT -America/Jamaica.generic.short=ET -America/Jamaica.standard.short=EST -America/Jujuy.daylight.short=ARST -America/Jujuy.generic.short=ART -America/Jujuy.standard.short=ART -America/Juneau.daylight.short=AKDT -America/Juneau.generic.short=AKT -America/Juneau.standard.short=AKST -America/Kentucky/Louisville.daylight.short=EDT -America/Kentucky/Louisville.generic.short=ET -America/Kentucky/Louisville.standard.short=EST -America/Kentucky/Monticello.daylight.short=EDT -America/Kentucky/Monticello.generic.short=ET -America/Kentucky/Monticello.standard.short=EST -America/Knox_IN.daylight.short=CDT -America/Knox_IN.generic.short=CT -America/Knox_IN.standard.short=CST -America/Kralendijk.daylight.short=ADT -America/Kralendijk.generic.short=AT -America/Kralendijk.standard.short=AST -America/La_Paz.daylight.short=BOST -America/La_Paz.generic.short=BOT -America/La_Paz.standard.short=BOT -America/Lima.daylight.short=PEST -America/Lima.generic.short=PET -America/Lima.standard.short=PET -America/Los_Angeles.daylight.short=PDT -America/Los_Angeles.generic.short=PT -America/Los_Angeles.standard.short=PST -America/Louisville.daylight.short=EDT -America/Louisville.generic.short=ET -America/Louisville.standard.short=EST -America/Lower_Princes.daylight.short=ADT -America/Lower_Princes.generic.short=AT -America/Lower_Princes.standard.short=AST -America/Maceio.daylight.short=BRST -America/Maceio.generic.short=BRT -America/Maceio.standard.short=BRT -America/Managua.daylight.short=CDT -America/Managua.generic.short=CT -America/Managua.standard.short=CST -America/Manaus.daylight.short=AMST -America/Manaus.generic.short=AMT -America/Manaus.standard.short=AMT -America/Marigot.daylight.short=ADT -America/Marigot.generic.short=AT -America/Marigot.standard.short=AST -America/Martinique.daylight.short=ADT -America/Martinique.generic.short=AT -America/Martinique.standard.short=AST -America/Matamoros.daylight.short=CDT -America/Matamoros.generic.short=CT -America/Matamoros.standard.short=CST -America/Mazatlan.daylight.short=MDT -America/Mazatlan.generic.short=MT -America/Mazatlan.standard.short=MST -America/Mendoza.daylight.short=ARST -America/Mendoza.generic.short=ART -America/Mendoza.standard.short=ART -America/Menominee.daylight.short=CDT -America/Menominee.generic.short=CT -America/Menominee.standard.short=CST -America/Merida.daylight.short=CDT -America/Merida.generic.short=CT -America/Merida.standard.short=CST -America/Metlakatla.daylight.short=MeDT -America/Metlakatla.generic.short=MeT -America/Metlakatla.standard.short=MeST -America/Mexico_City.daylight.short=CDT -America/Mexico_City.generic.short=CT -America/Mexico_City.standard.short=CST -America/Miquelon.daylight.short=PMDT -America/Miquelon.generic.short=PMT -America/Miquelon.standard.short=PMST -America/Moncton.daylight.short=ADT -America/Moncton.generic.short=AT -America/Moncton.standard.short=AST -America/Monterrey.daylight.short=CDT -America/Monterrey.generic.short=CT -America/Monterrey.standard.short=CST -America/Montevideo.daylight.short=UYST -America/Montevideo.generic.short=UYT -America/Montevideo.standard.short=UYT -America/Montreal.daylight.short=EDT -America/Montreal.generic.short=ET -America/Montreal.standard.short=EST -America/Montserrat.daylight.short=ADT -America/Montserrat.generic.short=AT -America/Montserrat.standard.short=AST -America/Nassau.daylight.short=EDT -America/Nassau.generic.short=ET -America/Nassau.standard.short=EST -America/New_York.daylight.short=EDT -America/New_York.generic.short=ET -America/New_York.standard.short=EST -America/Nipigon.daylight.short=EDT -America/Nipigon.generic.short=ET -America/Nipigon.standard.short=EST -America/Nome.daylight.short=AKDT -America/Nome.generic.short=AKT -America/Nome.standard.short=AKST -America/Noronha.daylight.short=FNST -America/Noronha.generic.short=FNT -America/Noronha.standard.short=FNT -America/North_Dakota/Beulah.daylight.short=CDT -America/North_Dakota/Beulah.generic.short=CT -America/North_Dakota/Beulah.standard.short=CST -America/North_Dakota/Center.daylight.short=CDT -America/North_Dakota/Center.generic.short=CT -America/North_Dakota/Center.standard.short=CST -America/North_Dakota/New_Salem.daylight.short=CDT -America/North_Dakota/New_Salem.generic.short=CT -America/North_Dakota/New_Salem.standard.short=CST -America/Ojinaga.daylight.short=MDT -America/Ojinaga.generic.short=MT -America/Ojinaga.standard.short=MST -America/Panama.daylight.short=EDT -America/Panama.generic.short=ET -America/Panama.standard.short=EST -America/Pangnirtung.daylight.short=EDT -America/Pangnirtung.generic.short=ET -America/Pangnirtung.standard.short=EST -America/Paramaribo.daylight.short=SRST -America/Paramaribo.generic.short=SRT -America/Paramaribo.standard.short=SRT -America/Phoenix.daylight.short=MDT -America/Phoenix.generic.short=MT -America/Phoenix.standard.short=MST -America/Port-au-Prince.daylight.short=EDT -America/Port-au-Prince.generic.short=ET -America/Port-au-Prince.standard.short=EST -America/Porto_Acre.daylight.short=ACST -America/Porto_Acre.generic.short=ACT -America/Porto_Acre.standard.short=ACT -America/Port_of_Spain.daylight.short=ADT -America/Port_of_Spain.generic.short=AT -America/Port_of_Spain.standard.short=AST -America/Porto_Velho.daylight.short=AMST -America/Porto_Velho.generic.short=AMT -America/Porto_Velho.standard.short=AMT -America/Puerto_Rico.daylight.short=ADT -America/Puerto_Rico.generic.short=AT -America/Puerto_Rico.standard.short=AST -America/Rainy_River.daylight.short=CDT -America/Rainy_River.generic.short=CT -America/Rainy_River.standard.short=CST -America/Rankin_Inlet.daylight.short=CDT -America/Rankin_Inlet.generic.short=CT -America/Rankin_Inlet.standard.short=CST -America/Recife.daylight.short=BRST -America/Recife.generic.short=BRT -America/Recife.standard.short=BRT -America/Regina.daylight.short=CDT -America/Regina.generic.short=CT -America/Regina.standard.short=CST -America/Resolute.daylight.short=CDT -America/Resolute.generic.short=CT -America/Resolute.standard.short=CST -America/Rio_Branco.daylight.short=ACST -America/Rio_Branco.generic.short=ACT -America/Rio_Branco.standard.short=ACT -America/Rosario.daylight.short=ARST -America/Rosario.generic.short=ART -America/Rosario.standard.short=ART -America/Santa_Isabel.daylight.short=PDT -America/Santa_Isabel.generic.short=PT -America/Santa_Isabel.standard.short=PST -America/Santarem.daylight.short=BRST -America/Santarem.generic.short=BRT -America/Santarem.standard.short=BRT -America/Santiago.daylight.short=CLST -America/Santiago.generic.short=CLT -America/Santiago.standard.short=CLT -America/Santo_Domingo.daylight.short=ADT -America/Santo_Domingo.generic.short=AT -America/Santo_Domingo.standard.short=AST -America/Sao_Paulo.daylight.short=BRST -America/Sao_Paulo.generic.short=BRT -America/Sao_Paulo.standard.short=BRT -America/Scoresbysund.daylight.short=EGST -America/Scoresbysund.generic.short=EGT -America/Scoresbysund.standard.short=EGT -America/Shiprock.daylight.short=MDT -America/Shiprock.generic.short=MT -America/Shiprock.standard.short=MST -America/Sitka.daylight.short=AKDT -America/Sitka.generic.short=AKT -America/Sitka.standard.short=AKST -America/St_Barthelemy.daylight.short=ADT -America/St_Barthelemy.generic.short=AT -America/St_Barthelemy.standard.short=AST -America/St_Johns.daylight.short=NDT -America/St_Johns.generic.short=NT -America/St_Johns.standard.short=NST -America/St_Kitts.daylight.short=ADT -America/St_Kitts.generic.short=AT -America/St_Kitts.standard.short=AST -America/St_Lucia.daylight.short=ADT -America/St_Lucia.generic.short=AT -America/St_Lucia.standard.short=AST -America/St_Thomas.daylight.short=ADT -America/St_Thomas.generic.short=AT -America/St_Thomas.standard.short=AST -America/St_Vincent.daylight.short=ADT -America/St_Vincent.generic.short=AT -America/St_Vincent.standard.short=AST -America/Swift_Current.daylight.short=CDT -America/Swift_Current.generic.short=CT -America/Swift_Current.standard.short=CST -America/Tegucigalpa.daylight.short=CDT -America/Tegucigalpa.generic.short=CT -America/Tegucigalpa.standard.short=CST -America/Thule.daylight.short=ADT -America/Thule.generic.short=AT -America/Thule.standard.short=AST -America/Thunder_Bay.daylight.short=EDT -America/Thunder_Bay.generic.short=ET -America/Thunder_Bay.standard.short=EST -America/Tijuana.daylight.short=PDT -America/Tijuana.generic.short=PT -America/Tijuana.standard.short=PST -America/Toronto.daylight.short=EDT -America/Toronto.generic.short=ET -America/Toronto.standard.short=EST -America/Tortola.daylight.short=ADT -America/Tortola.generic.short=AT -America/Tortola.standard.short=AST -America/Vancouver.daylight.short=PDT -America/Vancouver.generic.short=PT -America/Vancouver.standard.short=PST -America/Virgin.daylight.short=ADT -America/Virgin.generic.short=AT -America/Virgin.standard.short=AST -America/Whitehorse.daylight.short=PDT -America/Whitehorse.generic.short=PT -America/Whitehorse.standard.short=PST -America/Winnipeg.daylight.short=CDT -America/Winnipeg.generic.short=CT -America/Winnipeg.standard.short=CST -America/Yakutat.daylight.short=AKDT -America/Yakutat.generic.short=AKT -America/Yakutat.standard.short=AKST -America/Yellowknife.daylight.short=MDT -America/Yellowknife.generic.short=MT -America/Yellowknife.standard.short=MST -Antarctica/Casey.daylight.short=WST -Antarctica/Casey.generic.short=WT -Antarctica/Casey.standard.short=WST -Antarctica/Davis.daylight.short=DAVST -Antarctica/Davis.generic.short=DAVT -Antarctica/Davis.standard.short=DAVT -Antarctica/DumontDUrville.daylight.short=DDUST -Antarctica/DumontDUrville.generic.short=DDUT -Antarctica/DumontDUrville.standard.short=DDUT -Antarctica/Macquarie.daylight.short=MIST -Antarctica/Macquarie.generic.short=MIST -Antarctica/Macquarie.standard.short=MIST -Antarctica/Mawson.daylight.short=MAWST -Antarctica/Mawson.generic.short=MAWT -Antarctica/Mawson.standard.short=MAWT -Antarctica/McMurdo.daylight.short=NZDT -Antarctica/McMurdo.generic.short=NZT -Antarctica/McMurdo.standard.short=NZST -Antarctica/Palmer.daylight.short=CLST -Antarctica/Palmer.generic.short=CLT -Antarctica/Palmer.standard.short=CLT -Antarctica/Rothera.daylight.short=ROTST -Antarctica/Rothera.generic.short=ROTT -Antarctica/Rothera.standard.short=ROTT -Antarctica/South_Pole.daylight.short=NZDT -Antarctica/South_Pole.generic.short=NZT -Antarctica/South_Pole.standard.short=NZST -Antarctica/Syowa.daylight.short=SYOST -Antarctica/Syowa.generic.short=SYOT -Antarctica/Syowa.standard.short=SYOT -Antarctica/Vostok.daylight.short=VOSST -Antarctica/Vostok.generic.short=VOST -Antarctica/Vostok.standard.short=VOST -Arctic/Longyearbyen.daylight.short=CEST -Arctic/Longyearbyen.generic.short=CET -Arctic/Longyearbyen.standard.short=CET -ART.daylight.short=EEST -ART.generic.short=EET -ART.standard.short=EET -Asia/Aden.daylight.short=ADT -Asia/Aden.generic.short=AT -Asia/Aden.standard.short=AST -Asia/Almaty.daylight.short=ALMST -Asia/Almaty.generic.short=ALMT -Asia/Almaty.standard.short=ALMT -Asia/Amman.daylight.short=ADT -Asia/Amman.generic.short=AT -Asia/Amman.standard.short=AST -Asia/Anadyr.daylight.short=ANAST -Asia/Anadyr.generic.short=ANAT -Asia/Anadyr.standard.short=ANAT -Asia/Aqtau.daylight.short=AQTST -Asia/Aqtau.generic.short=AQTT -Asia/Aqtau.standard.short=AQTT -Asia/Aqtobe.daylight.short=AQTST -Asia/Aqtobe.generic.short=AQTT -Asia/Aqtobe.standard.short=AQTT -Asia/Ashgabat.daylight.short=TMST -Asia/Ashgabat.generic.short=TMT -Asia/Ashgabat.standard.short=TMT -Asia/Ashkhabad.daylight.short=TMST -Asia/Ashkhabad.generic.short=TMT -Asia/Ashkhabad.standard.short=TMT -Asia/Baghdad.daylight.short=ADT -Asia/Baghdad.generic.short=AT -Asia/Baghdad.standard.short=AST -Asia/Bahrain.daylight.short=ADT -Asia/Bahrain.generic.short=AT -Asia/Bahrain.standard.short=AST -Asia/Baku.daylight.short=AZST -Asia/Baku.generic.short=AZT -Asia/Baku.standard.short=AZT -Asia/Bangkok.daylight.short=ICST -Asia/Bangkok.generic.short=ICT -Asia/Bangkok.standard.short=ICT -Asia/Beirut.daylight.short=EEST -Asia/Beirut.generic.short=EET -Asia/Beirut.standard.short=EET -Asia/Bishkek.daylight.short=KGST -Asia/Bishkek.generic.short=KGT -Asia/Bishkek.standard.short=KGT -Asia/Brunei.daylight.short=BNST -Asia/Brunei.generic.short=BNT -Asia/Brunei.standard.short=BNT -Asia/Calcutta.daylight.short=IDT -Asia/Calcutta.generic.short=IT -Asia/Calcutta.standard.short=IST -Asia/Choibalsan.daylight.short=CHOST -Asia/Choibalsan.generic.short=CHOT -Asia/Choibalsan.standard.short=CHOT -Asia/Chongqing.daylight.short=CDT -Asia/Chongqing.generic.short=CT -Asia/Chongqing.standard.short=CST -Asia/Chungking.daylight.short=CDT -Asia/Chungking.generic.short=CT -Asia/Chungking.standard.short=CST -Asia/Colombo.daylight.short=IDT -Asia/Colombo.generic.short=IT -Asia/Colombo.standard.short=IST -Asia/Dacca.daylight.short=BDST -Asia/Dacca.generic.short=BDT -Asia/Dacca.standard.short=BDT -Asia/Damascus.daylight.short=EEST -Asia/Damascus.generic.short=EET -Asia/Damascus.standard.short=EET -Asia/Dhaka.daylight.short=BDST -Asia/Dhaka.generic.short=BDT -Asia/Dhaka.standard.short=BDT -Asia/Dili.daylight.short=TLST -Asia/Dili.generic.short=TLT -Asia/Dili.standard.short=TLT -Asia/Dubai.daylight.short=GDT -Asia/Dubai.generic.short=GT -Asia/Dubai.standard.short=GST -Asia/Dushanbe.daylight.short=TJST -Asia/Dushanbe.generic.short=TJT -Asia/Dushanbe.standard.short=TJT -Asia/Gaza.daylight.short=EEST -Asia/Gaza.generic.short=EET -Asia/Gaza.standard.short=EET -Asia/Harbin.daylight.short=CDT -Asia/Harbin.generic.short=CT -Asia/Harbin.standard.short=CST -Asia/Hebron.daylight.short=EEST -Asia/Hebron.generic.short=EET -Asia/Hebron.standard.short=EET -Asia/Ho_Chi_Minh.daylight.short=ICST -Asia/Ho_Chi_Minh.generic.short=ICT -Asia/Ho_Chi_Minh.standard.short=ICT -Asia/Hong_Kong.daylight.short=HKST -Asia/Hong_Kong.generic.short=HKT -Asia/Hong_Kong.standard.short=HKT -Asia/Hovd.daylight.short=HOVST -Asia/Hovd.generic.short=HOVT -Asia/Hovd.standard.short=HOVT -Asia/Irkutsk.daylight.short=IRKST -Asia/Irkutsk.generic.short=IRKT -Asia/Irkutsk.standard.short=IRKT -Asia/Istanbul.daylight.short=EEST -Asia/Istanbul.generic.short=EET -Asia/Istanbul.standard.short=EET -Asia/Jakarta.daylight.short=WIST -Asia/Jakarta.generic.short=WIB -Asia/Jakarta.standard.short=WIB -Asia/Jayapura.daylight.short=EIST -Asia/Jayapura.generic.short=WIT -Asia/Jayapura.standard.short=WIT -Asia/Jerusalem.daylight.short=IDT -Asia/Jerusalem.generic.short=IT -Asia/Jerusalem.standard.short=IST -Asia/Kabul.daylight.short=AFST -Asia/Kabul.generic.short=AFT -Asia/Kabul.standard.short=AFT -Asia/Kamchatka.daylight.short=PETST -Asia/Kamchatka.generic.short=PETT -Asia/Kamchatka.standard.short=PETT -Asia/Karachi.daylight.short=PKST -Asia/Karachi.generic.short=PKT -Asia/Karachi.standard.short=PKT -Asia/Kashgar.daylight.short=CDT -Asia/Kashgar.generic.short=CT -Asia/Kashgar.standard.short=CST -Asia/Kathmandu.daylight.short=NPST -Asia/Kathmandu.generic.short=NPT -Asia/Kathmandu.standard.short=NPT -Asia/Katmandu.daylight.short=NPST -Asia/Katmandu.generic.short=NPT -Asia/Katmandu.standard.short=NPT -Asia/Khandyga.daylight.short=YAKST -Asia/Khandyga.generic.short=YAKT -Asia/Khandyga.standard.short=YAKT -Asia/Kolkata.daylight.short=IDT -Asia/Kolkata.generic.short=IT -Asia/Kolkata.standard.short=IST -Asia/Krasnoyarsk.daylight.short=KRAST -Asia/Krasnoyarsk.generic.short=KRAT -Asia/Krasnoyarsk.standard.short=KRAT -Asia/Kuala_Lumpur.daylight.short=MYST -Asia/Kuala_Lumpur.generic.short=MYT -Asia/Kuala_Lumpur.standard.short=MYT -Asia/Kuching.daylight.short=MYST -Asia/Kuching.generic.short=MYT -Asia/Kuching.standard.short=MYT -Asia/Kuwait.daylight.short=ADT -Asia/Kuwait.generic.short=AT -Asia/Kuwait.standard.short=AST -Asia/Macao.daylight.short=CDT -Asia/Macao.generic.short=CT -Asia/Macao.standard.short=CST -Asia/Macau.daylight.short=CDT -Asia/Macau.generic.short=CT -Asia/Macau.standard.short=CST -Asia/Magadan.daylight.short=MAGST -Asia/Magadan.generic.short=MAGT -Asia/Magadan.standard.short=MAGT -Asia/Makassar.daylight.short=CIST -Asia/Makassar.generic.short=WITA -Asia/Makassar.standard.short=WITA -Asia/Manila.daylight.short=PHST -Asia/Manila.generic.short=PHT -Asia/Manila.standard.short=PHT -Asia/Muscat.daylight.short=GDT -Asia/Muscat.generic.short=GT -Asia/Muscat.standard.short=GST -Asia/Nicosia.daylight.short=EEST -Asia/Nicosia.generic.short=EET -Asia/Nicosia.standard.short=EET -Asia/Novokuznetsk.daylight.short=NOVST -Asia/Novokuznetsk.generic.short=NOVT -Asia/Novokuznetsk.standard.short=NOVT -Asia/Novosibirsk.daylight.short=NOVST -Asia/Novosibirsk.generic.short=NOVT -Asia/Novosibirsk.standard.short=NOVT -Asia/Omsk.daylight.short=OMSST -Asia/Omsk.generic.short=OMST -Asia/Omsk.standard.short=OMST -Asia/Oral.daylight.short=ORAST -Asia/Oral.generic.short=ORAT -Asia/Oral.standard.short=ORAT -Asia/Phnom_Penh.daylight.short=ICST -Asia/Phnom_Penh.generic.short=ICT -Asia/Phnom_Penh.standard.short=ICT -Asia/Pontianak.daylight.short=WIST -Asia/Pontianak.generic.short=WIB -Asia/Pontianak.standard.short=WIB -Asia/Pyongyang.daylight.short=KDT -Asia/Pyongyang.generic.short=KT -Asia/Pyongyang.standard.short=KST -Asia/Qatar.daylight.short=ADT -Asia/Qatar.generic.short=AT -Asia/Qatar.standard.short=AST -Asia/Qyzylorda.daylight.short=QYZST -Asia/Qyzylorda.generic.short=QYZT -Asia/Qyzylorda.standard.short=QYZT -Asia/Rangoon.daylight.short=MMST -Asia/Rangoon.generic.short=MMT -Asia/Rangoon.standard.short=MMT -Asia/Saigon.daylight.short=ICST -Asia/Saigon.generic.short=ICT -Asia/Saigon.standard.short=ICT -Asia/Sakhalin.daylight.short=SAKST -Asia/Sakhalin.generic.short=SAKT -Asia/Sakhalin.standard.short=SAKT -Asia/Samarkand.daylight.short=UZST -Asia/Samarkand.generic.short=UZT -Asia/Samarkand.standard.short=UZT -Asia/Seoul.daylight.short=KDT -Asia/Seoul.generic.short=KT -Asia/Seoul.standard.short=KST -Asia/Shanghai.daylight.short=CDT -Asia/Shanghai.generic.short=CT -Asia/Shanghai.standard.short=CST -Asia/Singapore.daylight.short=SGST -Asia/Singapore.generic.short=SGT -Asia/Singapore.standard.short=SGT -Asia/Taipei.daylight.short=CDT -Asia/Taipei.generic.short=CT -Asia/Taipei.standard.short=CST -Asia/Tashkent.daylight.short=UZST -Asia/Tashkent.generic.short=UZT -Asia/Tashkent.standard.short=UZT -Asia/Tbilisi.daylight.short=GEST -Asia/Tbilisi.generic.short=GET -Asia/Tbilisi.standard.short=GET -Asia/Tehran.daylight.short=IRDT -Asia/Tehran.generic.short=IRT -Asia/Tehran.standard.short=IRST -Asia/Tel_Aviv.daylight.short=IDT -Asia/Tel_Aviv.generic.short=IT -Asia/Tel_Aviv.standard.short=IST -Asia/Thimbu.daylight.short=BTST -Asia/Thimbu.generic.short=BTT -Asia/Thimbu.standard.short=BTT -Asia/Thimphu.daylight.short=BTST -Asia/Thimphu.generic.short=BTT -Asia/Thimphu.standard.short=BTT -Asia/Tokyo.daylight.short=JDT -Asia/Tokyo.generic.short=JT -Asia/Tokyo.standard.short=JST -Asia/Ujung_Pandang.daylight.short=CIST -Asia/Ujung_Pandang.generic.short=WITA -Asia/Ujung_Pandang.standard.short=WITA -Asia/Ulaanbaatar.daylight.short=ULAST -Asia/Ulaanbaatar.generic.short=ULAT -Asia/Ulaanbaatar.standard.short=ULAT -Asia/Ulan_Bator.daylight.short=ULAST -Asia/Ulan_Bator.generic.short=ULAT -Asia/Ulan_Bator.standard.short=ULAT -Asia/Urumqi.daylight.short=CDT -Asia/Urumqi.generic.short=CT -Asia/Urumqi.standard.short=CST -Asia/Ust-Nera.daylight.short=VLAST -Asia/Ust-Nera.generic.short=VLAT -Asia/Ust-Nera.standard.short=VLAT -Asia/Vientiane.daylight.short=ICST -Asia/Vientiane.generic.short=ICT -Asia/Vientiane.standard.short=ICT -Asia/Vladivostok.daylight.short=VLAST -Asia/Vladivostok.generic.short=VLAT -Asia/Vladivostok.standard.short=VLAT -Asia/Yakutsk.daylight.short=YAKST -Asia/Yakutsk.generic.short=YAKT -Asia/Yakutsk.standard.short=YAKT -Asia/Yekaterinburg.daylight.short=YEKST -Asia/Yekaterinburg.generic.short=YEKT -Asia/Yekaterinburg.standard.short=YEKT -Asia/Yerevan.daylight.short=AMST -Asia/Yerevan.generic.short=AMT -Asia/Yerevan.standard.short=AMT -AST.daylight.short=AKDT -AST.generic.short=AKT -AST.standard.short=AKST -Atlantic/Azores.daylight.short=AZOST -Atlantic/Azores.generic.short=AZOT -Atlantic/Azores.standard.short=AZOT -Atlantic/Bermuda.daylight.short=ADT -Atlantic/Bermuda.generic.short=AT -Atlantic/Bermuda.standard.short=AST -Atlantic/Canary.daylight.short=WEST -Atlantic/Canary.generic.short=WET -Atlantic/Canary.standard.short=WET -Atlantic/Cape_Verde.daylight.short=CVST -Atlantic/Cape_Verde.generic.short=CVT -Atlantic/Cape_Verde.standard.short=CVT -Atlantic/Faeroe.daylight.short=WEST -Atlantic/Faeroe.generic.short=WET -Atlantic/Faeroe.standard.short=WET -Atlantic/Faroe.daylight.short=WEST -Atlantic/Faroe.generic.short=WET -Atlantic/Faroe.standard.short=WET -Atlantic/Jan_Mayen.daylight.short=CEST -Atlantic/Jan_Mayen.generic.short=CET -Atlantic/Jan_Mayen.standard.short=CET -Atlantic/Madeira.daylight.short=WEST -Atlantic/Madeira.generic.short=WET -Atlantic/Madeira.standard.short=WET -Atlantic/Reykjavik.daylight.short=GMT -Atlantic/Reykjavik.generic.short=GMT -Atlantic/Reykjavik.standard.short=GMT -Atlantic/South_Georgia.daylight.short=GDT -Atlantic/South_Georgia.generic.short=GT -Atlantic/South_Georgia.standard.short=GST -Atlantic/Stanley.daylight.short=FKST -Atlantic/Stanley.generic.short=FKT -Atlantic/Stanley.standard.short=FKT -Atlantic/St_Helena.daylight.short=GMT -Atlantic/St_Helena.generic.short=GMT -Atlantic/St_Helena.standard.short=GMT -Australia/ACT.daylight.short=EST -Australia/ACT.generic.short=ET -Australia/ACT.standard.short=EST -Australia/Adelaide.daylight.short=CST -Australia/Adelaide.generic.short=CT -Australia/Adelaide.standard.short=CST -Australia/Brisbane.daylight.short=EST -Australia/Brisbane.generic.short=ET -Australia/Brisbane.standard.short=EST -Australia/Broken_Hill.daylight.short=CST -Australia/Broken_Hill.generic.short=CT -Australia/Broken_Hill.standard.short=CST -Australia/Canberra.daylight.short=EST -Australia/Canberra.generic.short=ET -Australia/Canberra.standard.short=EST -Australia/Currie.daylight.short=EST -Australia/Currie.generic.short=ET -Australia/Currie.standard.short=EST -Australia/Darwin.daylight.short=CST -Australia/Darwin.generic.short=CT -Australia/Darwin.standard.short=CST -Australia/Eucla.daylight.short=CWST -Australia/Eucla.generic.short=CWT -Australia/Eucla.standard.short=CWST -Australia/Hobart.daylight.short=EST -Australia/Hobart.generic.short=ET -Australia/Hobart.standard.short=EST -Australia/LHI.daylight.short=LHST -Australia/LHI.generic.short=LHT -Australia/LHI.standard.short=LHST -Australia/Lindeman.daylight.short=EST -Australia/Lindeman.generic.short=ET -Australia/Lindeman.standard.short=EST -Australia/Lord_Howe.daylight.short=LHST -Australia/Lord_Howe.generic.short=LHT -Australia/Lord_Howe.standard.short=LHST -Australia/Melbourne.daylight.short=EST -Australia/Melbourne.generic.short=ET -Australia/Melbourne.standard.short=EST -Australia/North.daylight.short=CST -Australia/North.generic.short=CT -Australia/North.standard.short=CST -Australia/NSW.daylight.short=EST -Australia/NSW.generic.short=ET -Australia/NSW.standard.short=EST -Australia/Perth.daylight.short=WST -Australia/Perth.generic.short=WT -Australia/Perth.standard.short=WST -Australia/Queensland.daylight.short=EST -Australia/Queensland.generic.short=ET -Australia/Queensland.standard.short=EST -Australia/South.daylight.short=CST -Australia/South.generic.short=CT -Australia/South.standard.short=CST -Australia/Sydney.daylight.short=EST -Australia/Sydney.generic.short=ET -Australia/Sydney.standard.short=EST -Australia/Tasmania.daylight.short=EST -Australia/Tasmania.generic.short=ET -Australia/Tasmania.standard.short=EST -Australia/Victoria.daylight.short=EST -Australia/Victoria.generic.short=ET -Australia/Victoria.standard.short=EST -Australia/West.daylight.short=WST -Australia/West.generic.short=WT -Australia/West.standard.short=WST -Australia/Yancowinna.daylight.short=CST -Australia/Yancowinna.generic.short=CT -Australia/Yancowinna.standard.short=CST -BET.daylight.short=BRST -BET.generic.short=BRT -BET.standard.short=BRT -Brazil/Acre.daylight.short=ACST -Brazil/Acre.generic.short=ACT -Brazil/Acre.standard.short=ACT -Brazil/DeNoronha.daylight.short=FNST -Brazil/DeNoronha.generic.short=FNT -Brazil/DeNoronha.standard.short=FNT -Brazil/East.daylight.short=BRST -Brazil/East.generic.short=BRT -Brazil/East.standard.short=BRT -Brazil/West.daylight.short=AMST -Brazil/West.generic.short=AMT -Brazil/West.standard.short=AMT -BST.daylight.short=BDST -BST.generic.short=BDT -BST.standard.short=BDT -Canada/Atlantic.daylight.short=ADT -Canada/Atlantic.generic.short=AT -Canada/Atlantic.standard.short=AST -Canada/Central.daylight.short=CDT -Canada/Central.generic.short=CT -Canada/Central.standard.short=CST -Canada/Eastern.daylight.short=EDT -Canada/Eastern.generic.short=ET -Canada/Eastern.standard.short=EST -Canada/East-Saskatchewan.daylight.short=CDT -Canada/East-Saskatchewan.generic.short=CT -Canada/East-Saskatchewan.standard.short=CST -Canada/Mountain.daylight.short=MDT -Canada/Mountain.generic.short=MT -Canada/Mountain.standard.short=MST -Canada/Newfoundland.daylight.short=NDT -Canada/Newfoundland.generic.short=NT -Canada/Newfoundland.standard.short=NST -Canada/Pacific.daylight.short=PDT -Canada/Pacific.generic.short=PT -Canada/Pacific.standard.short=PST -Canada/Saskatchewan.daylight.short=CDT -Canada/Saskatchewan.generic.short=CT -Canada/Saskatchewan.standard.short=CST -Canada/Yukon.daylight.short=PDT -Canada/Yukon.generic.short=PT -Canada/Yukon.standard.short=PST -CAT.daylight.short=CAST -CAT.generic.short=CAT -CAT.standard.short=CAT -CET.daylight.short=CEST -CET.generic.short=CET -CET.standard.short=CET -Chile/Continental.daylight.short=CLST -Chile/Continental.generic.short=CLT -Chile/Continental.standard.short=CLT -Chile/EasterIsland.daylight.short=EASST -Chile/EasterIsland.generic.short=EAST -Chile/EasterIsland.standard.short=EAST -CNT.daylight.short=NDT -CNT.generic.short=NT -CNT.standard.short=NST -CST6CDT.daylight.short=CDT -CST6CDT.generic.short=CT -CST6CDT.standard.short=CST -CST.daylight.short=CDT -CST.generic.short=CT -CST.standard.short=CST -CTT.daylight.short=CDT -CTT.generic.short=CT -CTT.standard.short=CST -Cuba.daylight.short=CDT -Cuba.generic.short=CT -Cuba.standard.short=CST -EAT.daylight.short=EAST -EAT.generic.short=EAT -EAT.standard.short=EAT -ECT.daylight.short=CEST -ECT.generic.short=CET -ECT.standard.short=CET -EET.daylight.short=EEST -EET.generic.short=EET -EET.standard.short=EET -Egypt.daylight.short=EEST -Egypt.generic.short=EET -Egypt.standard.short=EET -Eire.daylight.short=IST -Eire.generic.short=IT -Eire.standard.short=GMT -EST5EDT.daylight.short=EDT -EST5EDT.generic.short=ET -EST5EDT.standard.short=EST -EST.daylight.short=EDT -EST.generic.short=ET -EST.standard.short=EST -Etc/Greenwich.daylight.short=GMT -Etc/Greenwich.generic.short=GMT -Etc/Greenwich.standard.short=GMT -Etc/UCT.daylight.short=UTC -Etc/UCT.generic.short=UTC -Etc/UCT.standard.short=UTC -Etc/Universal.daylight.short=UTC -Etc/Universal.generic.short=UTC -Etc/Universal.standard.short=UTC -Etc/UTC.daylight.short=UTC -Etc/UTC.generic.short=UTC -Etc/UTC.standard.short=UTC -Etc/Zulu.daylight.short=UTC -Etc/Zulu.generic.short=UTC -Etc/Zulu.standard.short=UTC -Europe/Amsterdam.daylight.short=CEST -Europe/Amsterdam.generic.short=CET -Europe/Amsterdam.standard.short=CET -Europe/Andorra.daylight.short=CEST -Europe/Andorra.generic.short=CET -Europe/Andorra.standard.short=CET -Europe/Athens.daylight.short=EEST -Europe/Athens.generic.short=EET -Europe/Athens.standard.short=EET -Europe/Belfast.daylight.short=BST -Europe/Belfast.generic.short=BT -Europe/Belfast.standard.short=GMT -Europe/Belgrade.daylight.short=CEST -Europe/Belgrade.generic.short=CET -Europe/Belgrade.standard.short=CET -Europe/Berlin.daylight.short=CEST -Europe/Berlin.generic.short=CET -Europe/Berlin.standard.short=CET -Europe/Bratislava.daylight.short=CEST -Europe/Bratislava.generic.short=CET -Europe/Bratislava.standard.short=CET -Europe/Brussels.daylight.short=CEST -Europe/Brussels.generic.short=CET -Europe/Brussels.standard.short=CET -Europe/Bucharest.daylight.short=EEST -Europe/Bucharest.generic.short=EET -Europe/Bucharest.standard.short=EET -Europe/Budapest.daylight.short=CEST -Europe/Budapest.generic.short=CET -Europe/Budapest.standard.short=CET -Europe/Busingen.daylight.short=CEST -Europe/Busingen.generic.short=CET -Europe/Busingen.standard.short=CET -Europe/Chisinau.daylight.short=EEST -Europe/Chisinau.generic.short=EET -Europe/Chisinau.standard.short=EET -Europe/Copenhagen.daylight.short=CEST -Europe/Copenhagen.generic.short=CET -Europe/Copenhagen.standard.short=CET -Europe/Dublin.daylight.short=IST -Europe/Dublin.generic.short=IT -Europe/Dublin.standard.short=GMT -Europe/Gibraltar.daylight.short=CEST -Europe/Gibraltar.generic.short=CET -Europe/Gibraltar.standard.short=CET -Europe/Guernsey.daylight.short=BST -Europe/Guernsey.generic.short=BT -Europe/Guernsey.standard.short=GMT -Europe/Helsinki.daylight.short=EEST -Europe/Helsinki.generic.short=EET -Europe/Helsinki.standard.short=EET -Europe/Isle_of_Man.daylight.short=BST -Europe/Isle_of_Man.generic.short=BT -Europe/Isle_of_Man.standard.short=GMT -Europe/Istanbul.daylight.short=EEST -Europe/Istanbul.generic.short=EET -Europe/Istanbul.standard.short=EET -Europe/Jersey.daylight.short=BST -Europe/Jersey.generic.short=BT -Europe/Jersey.standard.short=GMT -Europe/Kaliningrad.daylight.short=FEST -Europe/Kaliningrad.generic.short=FET -Europe/Kaliningrad.standard.short=FET -Europe/Kiev.daylight.short=EEST -Europe/Kiev.generic.short=EET -Europe/Kiev.standard.short=EET -Europe/Lisbon.daylight.short=WEST -Europe/Lisbon.generic.short=WET -Europe/Lisbon.standard.short=WET -Europe/Ljubljana.daylight.short=CEST -Europe/Ljubljana.generic.short=CET -Europe/Ljubljana.standard.short=CET -Europe/London.daylight.short=BST -Europe/London.generic.short=BT -Europe/London.standard.short=GMT -Europe/Luxembourg.daylight.short=CEST -Europe/Luxembourg.generic.short=CET -Europe/Luxembourg.standard.short=CET -Europe/Madrid.daylight.short=CEST -Europe/Madrid.generic.short=CET -Europe/Madrid.standard.short=CET -Europe/Malta.daylight.short=CEST -Europe/Malta.generic.short=CET -Europe/Malta.standard.short=CET -Europe/Mariehamn.daylight.short=EEST -Europe/Mariehamn.generic.short=EET -Europe/Mariehamn.standard.short=EET -Europe/Minsk.daylight.short=FEST -Europe/Minsk.generic.short=FET -Europe/Minsk.standard.short=FET -Europe/Monaco.daylight.short=CEST -Europe/Monaco.generic.short=CET -Europe/Monaco.standard.short=CET -Europe/Moscow.daylight.short=MSD -Europe/Moscow.generic.short=MT -Europe/Moscow.standard.short=MSK -Europe/Nicosia.daylight.short=EEST -Europe/Nicosia.generic.short=EET -Europe/Nicosia.standard.short=EET -Europe/Oslo.daylight.short=CEST -Europe/Oslo.generic.short=CET -Europe/Oslo.standard.short=CET -Europe/Paris.daylight.short=CEST -Europe/Paris.generic.short=CET -Europe/Paris.standard.short=CET -Europe/Podgorica.daylight.short=CEST -Europe/Podgorica.generic.short=CET -Europe/Podgorica.standard.short=CET -Europe/Prague.daylight.short=CEST -Europe/Prague.generic.short=CET -Europe/Prague.standard.short=CET -Europe/Riga.daylight.short=EEST -Europe/Riga.generic.short=EET -Europe/Riga.standard.short=EET -Europe/Rome.daylight.short=CEST -Europe/Rome.generic.short=CET -Europe/Rome.standard.short=CET -Europe/Samara.daylight.short=SAMST -Europe/Samara.generic.short=SAMT -Europe/Samara.standard.short=SAMT -Europe/San_Marino.daylight.short=CEST -Europe/San_Marino.generic.short=CET -Europe/San_Marino.standard.short=CET -Europe/Sarajevo.daylight.short=CEST -Europe/Sarajevo.generic.short=CET -Europe/Sarajevo.standard.short=CET -Europe/Simferopol.daylight.short=EEST -Europe/Simferopol.generic.short=EET -Europe/Simferopol.standard.short=EET -Europe/Skopje.daylight.short=CEST -Europe/Skopje.generic.short=CET -Europe/Skopje.standard.short=CET -Europe/Sofia.daylight.short=EEST -Europe/Sofia.generic.short=EET -Europe/Sofia.standard.short=EET -Europe/Stockholm.daylight.short=CEST -Europe/Stockholm.generic.short=CET -Europe/Stockholm.standard.short=CET -Europe/Tallinn.daylight.short=EEST -Europe/Tallinn.generic.short=EET -Europe/Tallinn.standard.short=EET -Europe/Tirane.daylight.short=CEST -Europe/Tirane.generic.short=CET -Europe/Tirane.standard.short=CET -Europe/Tiraspol.daylight.short=EEST -Europe/Tiraspol.generic.short=EET -Europe/Tiraspol.standard.short=EET -Europe/Uzhgorod.daylight.short=EEST -Europe/Uzhgorod.generic.short=EET -Europe/Uzhgorod.standard.short=EET -Europe/Vaduz.daylight.short=CEST -Europe/Vaduz.generic.short=CET -Europe/Vaduz.standard.short=CET -Europe/Vatican.daylight.short=CEST -Europe/Vatican.generic.short=CET -Europe/Vatican.standard.short=CET -Europe/Vienna.daylight.short=CEST -Europe/Vienna.generic.short=CET -Europe/Vienna.standard.short=CET -Europe/Vilnius.daylight.short=EEST -Europe/Vilnius.generic.short=EET -Europe/Vilnius.standard.short=EET -Europe/Volgograd.daylight.short=VOLST -Europe/Volgograd.generic.short=VOLT -Europe/Volgograd.standard.short=VOLT -Europe/Warsaw.daylight.short=CEST -Europe/Warsaw.generic.short=CET -Europe/Warsaw.standard.short=CET -Europe/Zagreb.daylight.short=CEST -Europe/Zagreb.generic.short=CET -Europe/Zagreb.standard.short=CET -Europe/Zaporozhye.daylight.short=EEST -Europe/Zaporozhye.generic.short=EET -Europe/Zaporozhye.standard.short=EET -Europe/Zurich.daylight.short=CEST -Europe/Zurich.generic.short=CET -Europe/Zurich.standard.short=CET -GB.daylight.short=BST -GB-Eire.daylight.short=BST -GB-Eire.generic.short=BT -GB-Eire.standard.short=GMT -GB.generic.short=BT -GB.standard.short=GMT -GMT.daylight.short=GMT -GMT.generic.short=GMT -GMT.standard.short=GMT -Greenwich.daylight.short=GMT -Greenwich.generic.short=GMT -Greenwich.standard.short=GMT -Hongkong.daylight.short=HKST -Hongkong.generic.short=HKT -Hongkong.standard.short=HKT -HST.daylight.short=HDT -HST.generic.short=HT -HST.standard.short=HST -Iceland.daylight.short=GMT -Iceland.generic.short=GMT -Iceland.standard.short=GMT -IET.daylight.short=EDT -IET.generic.short=ET -IET.standard.short=EST -Indian/Antananarivo.daylight.short=EAST -Indian/Antananarivo.generic.short=EAT -Indian/Antananarivo.standard.short=EAT -Indian/Chagos.daylight.short=IOST -Indian/Chagos.generic.short=IOT -Indian/Chagos.standard.short=IOT -Indian/Christmas.daylight.short=CXST -Indian/Christmas.generic.short=CIT -Indian/Christmas.standard.short=CXT -Indian/Cocos.daylight.short=CCST -Indian/Cocos.generic.short=CCT -Indian/Cocos.standard.short=CCT -Indian/Comoro.daylight.short=EAST -Indian/Comoro.generic.short=EAT -Indian/Comoro.standard.short=EAT -Indian/Kerguelen.daylight.short=TFST -Indian/Kerguelen.generic.short=TFT -Indian/Kerguelen.standard.short=TFT -Indian/Mahe.daylight.short=SCST -Indian/Mahe.generic.short=SCT -Indian/Mahe.standard.short=SCT -Indian/Maldives.daylight.short=MVST -Indian/Maldives.generic.short=MVT -Indian/Maldives.standard.short=MVT -Indian/Mauritius.daylight.short=MUST -Indian/Mauritius.generic.short=MUT -Indian/Mauritius.standard.short=MUT -Indian/Mayotte.daylight.short=EAST -Indian/Mayotte.generic.short=EAT -Indian/Mayotte.standard.short=EAT -Indian/Reunion.daylight.short=REST -Indian/Reunion.generic.short=RET -Indian/Reunion.standard.short=RET -Iran.daylight.short=IRDT -Iran.generic.short=IRT -Iran.standard.short=IRST -Israel.daylight.short=IDT -Israel.generic.short=IT -Israel.standard.short=IST -IST.daylight.short=IDT -IST.generic.short=IT -IST.standard.short=IST -Jamaica.daylight.short=EDT -Jamaica.generic.short=ET -Jamaica.standard.short=EST -Japan.daylight.short=JDT -Japan.generic.short=JT -Japan.standard.short=JST -JST.daylight.short=JDT -JST.generic.short=JT -JST.standard.short=JST -Kwajalein.daylight.short=MHST -Kwajalein.generic.short=MHT -Kwajalein.standard.short=MHT -Libya.daylight.short=EEST -Libya.generic.short=EET -Libya.standard.short=EET -MET.daylight.short=MEST -MET.generic.short=MET -MET.standard.short=MET -Mexico/BajaNorte.daylight.short=PDT -Mexico/BajaNorte.generic.short=PT -Mexico/BajaNorte.standard.short=PST -Mexico/BajaSur.daylight.short=MDT -Mexico/BajaSur.generic.short=MT -Mexico/BajaSur.standard.short=MST -Mexico/General.daylight.short=CDT -Mexico/General.generic.short=CT -Mexico/General.standard.short=CST -MIT.daylight.short=WSDT -MIT.generic.short=WST -MIT.standard.short=WST -MST7MDT.daylight.short=MDT -MST7MDT.generic.short=MT -MST7MDT.standard.short=MST -MST.daylight.short=MDT -MST.generic.short=MT -MST.standard.short=MST -Navajo.daylight.short=MDT -Navajo.generic.short=MT -Navajo.standard.short=MST -NET.daylight.short=AMST -NET.generic.short=AMT -NET.standard.short=AMT -NST.daylight.short=NZDT -NST.generic.short=NZT -NST.standard.short=NZST -NZ-CHAT.daylight.short=CHADT -NZ-CHAT.generic.short=CHAT -NZ-CHAT.standard.short=CHAST -NZ.daylight.short=NZDT -NZ.generic.short=NZT -NZ.standard.short=NZST -Pacific/Apia.daylight.short=WSDT -Pacific/Apia.generic.short=WST -Pacific/Apia.standard.short=WST -Pacific/Auckland.daylight.short=NZDT -Pacific/Auckland.generic.short=NZT -Pacific/Auckland.standard.short=NZST -Pacific/Chatham.daylight.short=CHADT -Pacific/Chatham.generic.short=CHAT -Pacific/Chatham.standard.short=CHAST -Pacific/Chuuk.daylight.short=CHUST -Pacific/Chuuk.generic.short=CHUT -Pacific/Chuuk.standard.short=CHUT -Pacific/Easter.daylight.short=EASST -Pacific/Easter.generic.short=EAST -Pacific/Easter.standard.short=EAST -Pacific/Efate.daylight.short=VUST -Pacific/Efate.generic.short=VUT -Pacific/Efate.standard.short=VUT -Pacific/Enderbury.daylight.short=PHOST -Pacific/Enderbury.generic.short=PHOT -Pacific/Enderbury.standard.short=PHOT -Pacific/Fakaofo.daylight.short=TKST -Pacific/Fakaofo.generic.short=TKT -Pacific/Fakaofo.standard.short=TKT -Pacific/Fiji.daylight.short=FJST -Pacific/Fiji.generic.short=FJT -Pacific/Fiji.standard.short=FJT -Pacific/Funafuti.daylight.short=TVST -Pacific/Funafuti.generic.short=TVT -Pacific/Funafuti.standard.short=TVT -Pacific/Galapagos.daylight.short=GALST -Pacific/Galapagos.generic.short=GALT -Pacific/Galapagos.standard.short=GALT -Pacific/Gambier.daylight.short=GAMST -Pacific/Gambier.generic.short=GAMT -Pacific/Gambier.standard.short=GAMT -Pacific/Guadalcanal.daylight.short=SBST -Pacific/Guadalcanal.generic.short=SBT -Pacific/Guadalcanal.standard.short=SBT -Pacific/Guam.daylight.short=ChDT -Pacific/Guam.generic.short=ChT -Pacific/Guam.standard.short=ChST -Pacific/Honolulu.daylight.short=HDT -Pacific/Honolulu.generic.short=HT -Pacific/Honolulu.standard.short=HST -Pacific/Johnston.daylight.short=HDT -Pacific/Johnston.generic.short=HT -Pacific/Johnston.standard.short=HST -Pacific/Kiritimati.daylight.short=LINST -Pacific/Kiritimati.generic.short=LINT -Pacific/Kiritimati.standard.short=LINT -Pacific/Kosrae.daylight.short=KOSST -Pacific/Kosrae.generic.short=KOST -Pacific/Kosrae.standard.short=KOST -Pacific/Kwajalein.daylight.short=MHST -Pacific/Kwajalein.generic.short=MHT -Pacific/Kwajalein.standard.short=MHT -Pacific/Majuro.daylight.short=MHST -Pacific/Majuro.generic.short=MHT -Pacific/Majuro.standard.short=MHT -Pacific/Marquesas.daylight.short=MARST -Pacific/Marquesas.generic.short=MART -Pacific/Marquesas.standard.short=MART -Pacific/Midway.daylight.short=SDT -Pacific/Midway.generic.short=ST -Pacific/Midway.standard.short=SST -Pacific/Nauru.daylight.short=NRST -Pacific/Nauru.generic.short=NRT -Pacific/Nauru.standard.short=NRT -Pacific/Niue.daylight.short=NUST -Pacific/Niue.generic.short=NUT -Pacific/Niue.standard.short=NUT -Pacific/Norfolk.daylight.short=NFST -Pacific/Norfolk.generic.short=NFT -Pacific/Norfolk.standard.short=NFT -Pacific/Noumea.daylight.short=NCST -Pacific/Noumea.generic.short=NCT -Pacific/Noumea.standard.short=NCT -Pacific/Pago_Pago.daylight.short=SDT -Pacific/Pago_Pago.generic.short=ST -Pacific/Pago_Pago.standard.short=SST -Pacific/Palau.daylight.short=PWST -Pacific/Palau.generic.short=PWT -Pacific/Palau.standard.short=PWT -Pacific/Pitcairn.daylight.short=PDT -Pacific/Pitcairn.generic.short=PT -Pacific/Pitcairn.standard.short=PST -Pacific/Pohnpei.daylight.short=PONST -Pacific/Pohnpei.generic.short=PONT -Pacific/Pohnpei.standard.short=PONT -Pacific/Ponape.daylight.short=PONST -Pacific/Ponape.generic.short=PONT -Pacific/Ponape.standard.short=PONT -Pacific/Port_Moresby.daylight.short=PGST -Pacific/Port_Moresby.generic.short=PGT -Pacific/Port_Moresby.standard.short=PGT -Pacific/Rarotonga.daylight.short=CKHST -Pacific/Rarotonga.generic.short=CKT -Pacific/Rarotonga.standard.short=CKT -Pacific/Saipan.daylight.short=ChDT -Pacific/Saipan.generic.short=ChT -Pacific/Saipan.standard.short=ChST -Pacific/Samoa.daylight.short=SDT -Pacific/Samoa.generic.short=ST -Pacific/Samoa.standard.short=SST -Pacific/Tahiti.daylight.short=TAHST -Pacific/Tahiti.generic.short=TAHT -Pacific/Tahiti.standard.short=TAHT -Pacific/Tarawa.daylight.short=GILST -Pacific/Tarawa.generic.short=GILT -Pacific/Tarawa.standard.short=GILT -Pacific/Tongatapu.daylight.short=TOST -Pacific/Tongatapu.generic.short=TOT -Pacific/Tongatapu.standard.short=TOT -Pacific/Truk.daylight.short=CHUST -Pacific/Truk.generic.short=CHUT -Pacific/Truk.standard.short=CHUT -Pacific/Wake.daylight.short=WAKST -Pacific/Wake.generic.short=WAKT -Pacific/Wake.standard.short=WAKT -Pacific/Wallis.daylight.short=WFST -Pacific/Wallis.generic.short=WFT -Pacific/Wallis.standard.short=WFT -Pacific/Yap.daylight.short=CHUST -Pacific/Yap.generic.short=CHUT -Pacific/Yap.standard.short=CHUT -PLT.daylight.short=PKST -PLT.generic.short=PKT -PLT.standard.short=PKT -PNT.daylight.short=MDT -PNT.generic.short=MT -PNT.standard.short=MST -Poland.daylight.short=CEST -Poland.generic.short=CET -Poland.standard.short=CET -Portugal.daylight.short=WEST -Portugal.generic.short=WET -Portugal.standard.short=WET -PRC.daylight.short=CDT -PRC.generic.short=CT -PRC.standard.short=CST -PRT.daylight.short=ADT -PRT.generic.short=AT -PRT.standard.short=AST -PST8PDT.daylight.short=PDT -PST8PDT.generic.short=PT -PST8PDT.standard.short=PST -PST.daylight.short=PDT -PST.generic.short=PT -PST.standard.short=PST -ROK.daylight.short=KDT -ROK.generic.short=KT -ROK.standard.short=KST -Singapore.daylight.short=SGST -Singapore.generic.short=SGT -Singapore.standard.short=SGT -SST.daylight.short=SBST -SST.generic.short=SBT -SST.standard.short=SBT -SystemV/AST4ADT.daylight.short=ADT -SystemV/AST4ADT.generic.short=AT -SystemV/AST4ADT.standard.short=AST -SystemV/AST4.daylight.short=ADT -SystemV/AST4.generic.short=AT -SystemV/AST4.standard.short=AST -SystemV/CST6CDT.daylight.short=CDT -SystemV/CST6CDT.generic.short=CT -SystemV/CST6CDT.standard.short=CST -SystemV/CST6.daylight.short=CDT -SystemV/CST6.generic.short=CT -SystemV/CST6.standard.short=CST -SystemV/EST5.daylight.short=EDT -SystemV/EST5EDT.daylight.short=EDT -SystemV/EST5EDT.generic.short=ET -SystemV/EST5EDT.standard.short=EST -SystemV/EST5.generic.short=ET -SystemV/EST5.standard.short=EST -SystemV/HST10.daylight.short=HDT -SystemV/HST10.generic.short=HT -SystemV/HST10.standard.short=HST -SystemV/MST7.daylight.short=MDT -SystemV/MST7.generic.short=MT -SystemV/MST7MDT.daylight.short=MDT -SystemV/MST7MDT.generic.short=MT -SystemV/MST7MDT.standard.short=MST -SystemV/MST7.standard.short=MST -SystemV/PST8.daylight.short=PDT -SystemV/PST8.generic.short=PT -SystemV/PST8PDT.daylight.short=PDT -SystemV/PST8PDT.generic.short=PT -SystemV/PST8PDT.standard.short=PST -SystemV/PST8.standard.short=PST -SystemV/YST9.daylight.short=AKDT -SystemV/YST9.generic.short=AKT -SystemV/YST9.standard.short=AKST -SystemV/YST9YDT.daylight.short=AKDT -SystemV/YST9YDT.generic.short=AKT -SystemV/YST9YDT.standard.short=AKST -Turkey.daylight.short=EEST -Turkey.generic.short=EET -Turkey.standard.short=EET -UCT.daylight.short=UTC -UCT.generic.short=UTC -UCT.standard.short=UTC -Universal.daylight.short=UTC -Universal.generic.short=UTC -Universal.standard.short=UTC -US/Alaska.daylight.short=AKDT -US/Alaska.generic.short=AKT -US/Alaska.standard.short=AKST -US/Aleutian.daylight.short=HADT -US/Aleutian.generic.short=HAT -US/Aleutian.standard.short=HAST -US/Arizona.daylight.short=MDT -US/Arizona.generic.short=MT -US/Arizona.standard.short=MST -US/Central.daylight.short=CDT -US/Central.generic.short=CT -US/Central.standard.short=CST -US/Eastern.daylight.short=EDT -US/Eastern.generic.short=ET -US/Eastern.standard.short=EST -US/East-Indiana.daylight.short=EDT -US/East-Indiana.generic.short=ET -US/East-Indiana.standard.short=EST -US/Hawaii.daylight.short=HDT -US/Hawaii.generic.short=HT -US/Hawaii.standard.short=HST -US/Indiana-Starke.daylight.short=CDT -US/Indiana-Starke.generic.short=CT -US/Indiana-Starke.standard.short=CST -US/Michigan.daylight.short=EDT -US/Michigan.generic.short=ET -US/Michigan.standard.short=EST -US/Mountain.daylight.short=MDT -US/Mountain.generic.short=MT -US/Mountain.standard.short=MST -US/Pacific.daylight.short=PDT -US/Pacific.generic.short=PT -US/Pacific-New.daylight.short=PDT -US/Pacific-New.generic.short=PT -US/Pacific-New.standard.short=PST -US/Pacific.standard.short=PST -US/Samoa.daylight.short=SDT -US/Samoa.generic.short=ST -US/Samoa.standard.short=SST -UTC.daylight.short=UTC -UTC.generic.short=UTC -UTC.standard.short=UTC -VST.daylight.short=ICST -VST.generic.short=ICT -VST.standard.short=ICT -WET.daylight.short=WEST -WET.generic.short=WET -WET.standard.short=WET -W-SU.daylight.short=MSD -W-SU.generic.short=MT -W-SU.standard.short=MSK -Zulu.daylight.short=UTC -Zulu.generic.short=UTC -Zulu.standard.short=UTC diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_it.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_it.properties deleted file mode 100644 index 6a4c8280ced..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_it.properties +++ /dev/null @@ -1,651 +0,0 @@ -ACT.daylight.long=Ora estiva centrale (Territori del Nord) -ACT.generic.long=Ora fuso centrale (Territori del Nord) -ACT.standard.long=Ora standard centrale (Territori del Nord) -AET.daylight.long=Ora estiva dell'Australia orientale (Nuovo Galles del Sud) -AET.generic.long=Ora fuso orientale (Nuovo Galles del Sud) -AET.standard.long=Ora standard dell'Australia orientale (Nuovo Galles del Sud) -AGT.generic.long=Ora dell'Argentina -ART.generic.long=Ora dell'Europa orientale -AST.generic.long=Ora Alaska -Africa/Abidjan.generic.long=Ora media di Greenwich -Africa/Accra.generic.long=Ora media del Ghana -Africa/Addis_Ababa.generic.long=Ora dell'Africa orientale -Africa/Algiers.generic.long=Ora dell'Europa centrale -Africa/Asmara.generic.long=Ora dell'Africa orientale -Africa/Asmera.generic.long=Ora dell'Africa orientale -Africa/Bamako.generic.long=Ora media di Greenwich -Africa/Bangui.generic.long=Ora dell'Africa occidentale -Africa/Banjul.generic.long=Ora media di Greenwich -Africa/Bissau.generic.long=Ora media di Greenwich -Africa/Blantyre.generic.long=Ora dell'Africa centrale -Africa/Brazzaville.generic.long=Ora dell'Africa occidentale -Africa/Bujumbura.generic.long=Ora dell'Africa centrale -Africa/Cairo.generic.long=Ora dell'Europa orientale -Africa/Casablanca.generic.long=Ora dell'Europa occidentale -Africa/Ceuta.generic.long=Ora dell'Europa centrale -Africa/Conakry.generic.long=Ora media di Greenwich -Africa/Dakar.generic.long=Ora media di Greenwich -Africa/Dar_es_Salaam.generic.long=Ora dell'Africa orientale -Africa/Djibouti.generic.long=Ora dell'Africa orientale -Africa/Douala.generic.long=Ora dell'Africa occidentale -Africa/El_Aaiun.generic.long=Ora dell'Europa occidentale -Africa/Freetown.generic.long=Ora della Sierra Leone -Africa/Gaborone.generic.long=Ora dell'Africa centrale -Africa/Harare.generic.long=Ora dell'Africa centrale -Africa/Johannesburg.generic.long=Ora Sudafrica -Africa/Juba.generic.long=Ora dell'Africa orientale -Africa/Kampala.generic.long=Ora dell'Africa orientale -Africa/Khartoum.generic.long=Ora dell'Africa orientale -Africa/Kigali.generic.long=Ora dell'Africa centrale -Africa/Kinshasa.generic.long=Ora dell'Africa occidentale -Africa/Lagos.generic.long=Ora dell'Africa occidentale -Africa/Libreville.generic.long=Ora dell'Africa occidentale -Africa/Lome.generic.long=Ora media di Greenwich -Africa/Luanda.generic.long=Ora dell'Africa occidentale -Africa/Lubumbashi.generic.long=Ora dell'Africa centrale -Africa/Lusaka.generic.long=Ora dell'Africa centrale -Africa/Malabo.generic.long=Ora dell'Africa occidentale -Africa/Maputo.generic.long=Ora dell'Africa centrale -Africa/Maseru.generic.long=Ora Sudafrica -Africa/Mbabane.generic.long=Ora Sudafrica -Africa/Mogadishu.generic.long=Ora dell'Africa orientale -Africa/Monrovia.generic.long=Ora media di Greenwich -Africa/Nairobi.generic.long=Ora dell'Africa orientale -Africa/Ndjamena.generic.long=Ora dell'Africa occidentale -Africa/Niamey.generic.long=Ora dell'Africa occidentale -Africa/Nouakchott.generic.long=Ora media di Greenwich -Africa/Ouagadougou.generic.long=Ora media di Greenwich -Africa/Porto-Novo.generic.long=Ora dell'Africa occidentale -Africa/Sao_Tome.generic.long=Ora media di Greenwich -Africa/Timbuktu.generic.long=Ora media di Greenwich -Africa/Tripoli.generic.long=Ora dell'Europa orientale -Africa/Tunis.generic.long=Ora dell'Europa centrale -Africa/Windhoek.generic.long=Ora dell'Africa occidentale -America/Adak.generic.long=Ora Hawaii-Aleutine -America/Anchorage.generic.long=Ora Alaska -America/Anguilla.generic.long=Fuso dell'Atlantico -America/Antigua.generic.long=Fuso dell'Atlantico -America/Araguaina.generic.long=Ora di Brasilia -America/Argentina/Buenos_Aires.generic.long=Ora dell'Argentina -America/Argentina/Catamarca.generic.long=Ora dell'Argentina -America/Argentina/ComodRivadavia.generic.long=Ora dell'Argentina -America/Argentina/Cordoba.generic.long=Ora dell'Argentina -America/Argentina/Jujuy.generic.long=Ora dell'Argentina -America/Argentina/La_Rioja.generic.long=Ora dell'Argentina -America/Argentina/Mendoza.generic.long=Ora dell'Argentina -America/Argentina/Rio_Gallegos.generic.long=Ora dell'Argentina -America/Argentina/Salta.generic.long=Ora dell'Argentina -America/Argentina/San_Juan.generic.long=Ora dell'Argentina -America/Argentina/San_Luis.generic.long=Ora dell'Argentina -America/Argentina/Tucuman.generic.long=Ora dell'Argentina -America/Argentina/Ushuaia.generic.long=Ora dell'Argentina -America/Aruba.generic.long=Fuso dell'Atlantico -America/Asuncion.generic.long=Ora del Paraguay -America/Atikokan.generic.long=Fuso orientale -America/Atka.generic.long=Ora Hawaii-Aleutine -America/Bahia.generic.long=Ora di Brasilia -America/Bahia_Banderas.generic.long=Ora fuso centrale -America/Barbados.generic.long=Fuso dell'Atlantico -America/Belem.generic.long=Ora di Brasilia -America/Belize.generic.long=Ora fuso centrale -America/Blanc-Sablon.generic.long=Fuso dell'Atlantico -America/Boa_Vista.generic.long=Ora dell'Amazzonia -America/Bogota.generic.long=Ora della Colombia -America/Boise.generic.long=Ora fuso occidentale -America/Buenos_Aires.generic.long=Ora dell'Argentina -America/Cambridge_Bay.generic.long=Ora fuso occidentale -America/Campo_Grande.generic.long=Ora dell'Amazzonia -America/Cancun.generic.long=Ora fuso centrale -America/Caracas.generic.long=Ora del Venezuela -America/Catamarca.generic.long=Ora dell'Argentina -America/Cayenne.generic.long=Ora della Guyana Francese -America/Cayman.generic.long=Fuso orientale -America/Chicago.generic.long=Ora fuso centrale -America/Chihuahua.generic.long=Ora fuso occidentale -America/Coral_Harbour.generic.long=Fuso orientale -America/Cordoba.generic.long=Ora dell'Argentina -America/Costa_Rica.generic.long=Ora fuso centrale -America/Creston.generic.long=Ora fuso occidentale -America/Cuiaba.generic.long=Ora dell'Amazzonia -America/Curacao.generic.long=Fuso dell'Atlantico -America/Danmarkshavn.generic.long=Ora media di Greenwich -America/Dawson.generic.long=Fuso del Pacifico -America/Dawson_Creek.generic.long=Ora fuso occidentale -America/Denver.generic.long=Ora fuso occidentale -America/Detroit.generic.long=Fuso orientale -America/Dominica.generic.long=Fuso dell'Atlantico -America/Edmonton.generic.long=Ora fuso occidentale -America/Eirunepe.generic.long=Ora di Acre -America/El_Salvador.generic.long=Ora fuso centrale -America/Ensenada.generic.long=Fuso del Pacifico -America/Fort_Wayne.generic.long=Fuso orientale -America/Fortaleza.generic.long=Ora di Brasilia -America/Glace_Bay.generic.long=Fuso dell'Atlantico -America/Godthab.generic.long=Ora della Groenlandia occidentale -America/Goose_Bay.generic.long=Fuso dell'Atlantico -America/Grand_Turk.generic.long=Fuso orientale -America/Grenada.generic.long=Fuso dell'Atlantico -America/Guadeloupe.generic.long=Fuso dell'Atlantico -America/Guatemala.generic.long=Ora fuso centrale -America/Guayaquil.generic.long=Ora dell'Ecuador -America/Guyana.generic.long=Ora della Guyana -America/Halifax.generic.long=Fuso dell'Atlantico -America/Havana.generic.long=Ora di Cuba -America/Hermosillo.generic.long=Ora fuso occidentale -America/Indiana/Indianapolis.generic.long=Fuso orientale -America/Indiana/Knox.generic.long=Ora fuso centrale -America/Indiana/Marengo.generic.long=Fuso orientale -America/Indiana/Petersburg.generic.long=Fuso orientale -America/Indiana/Tell_City.generic.long=Ora fuso centrale -America/Indiana/Vevay.generic.long=Fuso orientale -America/Indiana/Vincennes.generic.long=Fuso orientale -America/Indiana/Winamac.generic.long=Fuso orientale -America/Indianapolis.generic.long=Fuso orientale -America/Inuvik.generic.long=Ora fuso occidentale -America/Iqaluit.generic.long=Fuso orientale -America/Jamaica.generic.long=Fuso orientale -America/Jujuy.generic.long=Ora dell'Argentina -America/Juneau.generic.long=Ora Alaska -America/Kentucky/Louisville.generic.long=Fuso orientale -America/Kentucky/Monticello.generic.long=Fuso orientale -America/Knox_IN.generic.long=Ora fuso centrale -America/Kralendijk.generic.long=Fuso dell'Atlantico -America/La_Paz.generic.long=Ora della Bolivia -America/Lima.generic.long=Ora del Per\u00F9 -America/Los_Angeles.generic.long=Fuso del Pacifico -America/Louisville.generic.long=Fuso orientale -America/Lower_Princes.generic.long=Fuso dell'Atlantico -America/Maceio.generic.long=Ora di Brasilia -America/Managua.generic.long=Ora fuso centrale -America/Manaus.generic.long=Ora dell'Amazzonia -America/Marigot.generic.long=Fuso dell'Atlantico -America/Martinique.generic.long=Fuso dell'Atlantico -America/Matamoros.generic.long=Ora fuso centrale -America/Mazatlan.generic.long=Ora fuso occidentale -America/Mendoza.generic.long=Ora dell'Argentina -America/Menominee.generic.long=Ora fuso centrale -America/Merida.generic.long=Ora fuso centrale -America/Metlakatla.daylight.long=Ora legale di Metlakatla -America/Metlakatla.generic.long=Ora di Metlakatla -America/Metlakatla.standard.long=Ora standard di Metlakatla -America/Mexico_City.generic.long=Ora fuso centrale -America/Miquelon.generic.long=Ora Saint-Pierre e Miquelon -America/Moncton.generic.long=Fuso dell'Atlantico -America/Monterrey.generic.long=Ora fuso centrale -America/Montevideo.generic.long=Ora dell'Uruguay -America/Montreal.generic.long=Fuso orientale -America/Montserrat.generic.long=Fuso dell'Atlantico -America/Nassau.generic.long=Fuso orientale -America/New_York.generic.long=Fuso orientale -America/Nipigon.generic.long=Fuso orientale -America/Nome.generic.long=Ora Alaska -America/Noronha.generic.long=Ora di Fernando de Noronha -America/North_Dakota/Beulah.generic.long=Ora fuso centrale -America/North_Dakota/Center.generic.long=Ora fuso centrale -America/North_Dakota/New_Salem.generic.long=Ora fuso centrale -America/Ojinaga.generic.long=Ora fuso occidentale -America/Panama.generic.long=Fuso orientale -America/Pangnirtung.generic.long=Fuso orientale -America/Paramaribo.generic.long=Ora di Suriname -America/Phoenix.generic.long=Ora fuso occidentale -America/Port-au-Prince.generic.long=Fuso orientale -America/Port_of_Spain.generic.long=Fuso dell'Atlantico -America/Porto_Acre.generic.long=Ora di Acre -America/Porto_Velho.generic.long=Ora dell'Amazzonia -America/Puerto_Rico.generic.long=Fuso dell'Atlantico -America/Rainy_River.generic.long=Ora fuso centrale -America/Rankin_Inlet.generic.long=Ora fuso centrale -America/Recife.generic.long=Ora di Brasilia -America/Regina.generic.long=Ora fuso centrale -America/Resolute.generic.long=Ora fuso centrale -America/Rio_Branco.generic.long=Ora di Acre -America/Rosario.generic.long=Ora dell'Argentina -America/Santa_Isabel.generic.long=Fuso del Pacifico -America/Santarem.generic.long=Ora di Brasilia -America/Santiago.generic.long=Ora del Cile -America/Santo_Domingo.generic.long=Fuso dell'Atlantico -America/Sao_Paulo.generic.long=Ora di Brasilia -America/Scoresbysund.generic.long=Ora della Groenlandia orientale -America/Shiprock.generic.long=Ora fuso occidentale -America/Sitka.generic.long=Ora Alaska -America/St_Barthelemy.generic.long=Fuso dell'Atlantico -America/St_Johns.generic.long=Ora Terranova -America/St_Kitts.generic.long=Fuso dell'Atlantico -America/St_Lucia.generic.long=Fuso dell'Atlantico -America/St_Thomas.generic.long=Fuso dell'Atlantico -America/St_Vincent.generic.long=Fuso dell'Atlantico -America/Swift_Current.generic.long=Ora fuso centrale -America/Tegucigalpa.generic.long=Ora fuso centrale -America/Thule.generic.long=Fuso dell'Atlantico -America/Thunder_Bay.generic.long=Fuso orientale -America/Tijuana.generic.long=Fuso del Pacifico -America/Toronto.generic.long=Fuso orientale -America/Tortola.generic.long=Fuso dell'Atlantico -America/Vancouver.generic.long=Fuso del Pacifico -America/Virgin.generic.long=Fuso dell'Atlantico -America/Whitehorse.generic.long=Fuso del Pacifico -America/Winnipeg.generic.long=Ora fuso centrale -America/Yakutat.generic.long=Ora Alaska -America/Yellowknife.generic.long=Ora fuso occidentale -Antarctica/Casey.daylight.long=Ora estiva dell'Australia occidentale -Antarctica/Casey.generic.long=Ora Australia occidentale -Antarctica/Casey.standard.long=Ora standard dell'Australia occidentale -Antarctica/Davis.generic.long=Ora di Davis -Antarctica/DumontDUrville.generic.long=Ora di Dumont-d'Urville -Antarctica/Macquarie.daylight.long=Ora estiva dell'Isola Macquarie -Antarctica/Macquarie.generic.long=Ora dell'Isola Macquarie -Antarctica/Macquarie.standard.long=Ora dell'Isola Macquarie -Antarctica/Mawson.generic.long=Ora di Mawson -Antarctica/McMurdo.generic.long=Ora Nuova Zelanda -Antarctica/Palmer.generic.long=Ora del Cile -Antarctica/Rothera.generic.long=Ora di Rothera -Antarctica/South_Pole.generic.long=Ora Nuova Zelanda -Antarctica/Syowa.generic.long=Ora di Syowa -Antarctica/Vostok.generic.long=Ora di Vostok -Arctic/Longyearbyen.generic.long=Ora dell'Europa centrale -Asia/Aden.generic.long=Ora Arabia Saudita -Asia/Almaty.generic.long=Ora di Alma-Ata -Asia/Amman.generic.long=Ora Arabia Saudita -Asia/Anadyr.generic.long=Ora di Anadyr -Asia/Aqtau.generic.long=Ora di Aqtau -Asia/Aqtobe.generic.long=Ora di Aqtobe -Asia/Ashgabat.generic.long=Ora del Turkmenistan -Asia/Ashkhabad.generic.long=Ora del Turkmenistan -Asia/Baghdad.generic.long=Ora Arabia Saudita -Asia/Bahrain.generic.long=Ora Arabia Saudita -Asia/Baku.generic.long=Ora dell'Azerbaigian -Asia/Bangkok.generic.long=Ora dell'Indocina -Asia/Beirut.generic.long=Ora dell'Europa orientale -Asia/Bishkek.generic.long=Ora del Kirghizistan -Asia/Brunei.generic.long=Ora del Brunei -Asia/Calcutta.generic.long=Ora India -Asia/Choibalsan.generic.long=Ora di Choibalsan -Asia/Chongqing.generic.long=Ora Cina -Asia/Chungking.generic.long=Ora Cina -Asia/Colombo.generic.long=Ora India -Asia/Dacca.generic.long=Ora del Bangladesh -Asia/Damascus.generic.long=Ora dell'Europa orientale -Asia/Dhaka.generic.long=Ora del Bangladesh -Asia/Dili.generic.long=Ora di Timor Est -Asia/Dubai.generic.long=Ora del golfo -Asia/Dushanbe.generic.long=Ora del Tagikistan -Asia/Gaza.generic.long=Ora dell'Europa orientale -Asia/Harbin.generic.long=Ora Cina -Asia/Hebron.generic.long=Ora dell'Europa orientale -Asia/Ho_Chi_Minh.generic.long=Ora dell'Indocina -Asia/Hong_Kong.generic.long=Ora di Hong Kong -Asia/Hovd.generic.long=Ora di Hovd -Asia/Irkutsk.generic.long=Ora di Irkutsk -Asia/Istanbul.generic.long=Ora dell'Europa orientale -Asia/Jakarta.generic.long=Ora dell'Indonesia occidentale -Asia/Jayapura.generic.long=Ora dell'Indonesia orientale -Asia/Jerusalem.generic.long=Ora Israele -Asia/Kabul.generic.long=Ora dell'Afghanistan -Asia/Kamchatka.generic.long=Ora di Petropavlovsk-Kamchatski -Asia/Karachi.generic.long=Ora del Pakistan -Asia/Kashgar.generic.long=Ora Cina -Asia/Kathmandu.generic.long=Ora del Nepal -Asia/Katmandu.generic.long=Ora del Nepal -Asia/Khandyga.daylight.long=Ora estiva di Khandyga -Asia/Khandyga.generic.long=Ora di Khandyga -Asia/Khandyga.standard.long=Ora di Khandyga -Asia/Kolkata.generic.long=Ora India -Asia/Krasnoyarsk.generic.long=Ora di Krasnojarsk -Asia/Kuala_Lumpur.generic.long=Ora della Malaysia -Asia/Kuching.generic.long=Ora della Malaysia -Asia/Kuwait.generic.long=Ora Arabia Saudita -Asia/Macao.generic.long=Ora Cina -Asia/Macau.generic.long=Ora Cina -Asia/Magadan.generic.long=Ora di Magadan -Asia/Makassar.generic.long=Ora dell'Indonesia centrale -Asia/Manila.generic.long=Ora delle Filippine -Asia/Muscat.generic.long=Ora del golfo -Asia/Nicosia.generic.long=Ora dell'Europa orientale -Asia/Novokuznetsk.generic.long=Ora di Novosibirsk -Asia/Novosibirsk.generic.long=Ora di Novosibirsk -Asia/Omsk.generic.long=Ora di Omsk -Asia/Oral.generic.long=Ora di Oral -Asia/Phnom_Penh.generic.long=Ora dell'Indocina -Asia/Pontianak.generic.long=Ora dell'Indonesia occidentale -Asia/Pyongyang.generic.long=Ora Corea -Asia/Qatar.generic.long=Ora Arabia Saudita -Asia/Qyzylorda.generic.long=Ora di Qyzylorda -Asia/Rangoon.generic.long=Ora della Birmania/Myanmar -Asia/Saigon.generic.long=Ora dell'Indocina -Asia/Sakhalin.generic.long=Ora di Sakhalin -Asia/Samarkand.generic.long=Ora dell'Uzbekistan -Asia/Seoul.generic.long=Ora Corea -Asia/Shanghai.generic.long=Ora Cina -Asia/Singapore.generic.long=Ora di Singapore -Asia/Taipei.generic.long=Ora Cina -Asia/Tashkent.generic.long=Ora dell'Uzbekistan -Asia/Tbilisi.generic.long=Ora della Georgia -Asia/Tehran.generic.long=Ora Iran -Asia/Tel_Aviv.generic.long=Ora Israele -Asia/Thimbu.generic.long=Ora del Bhutan -Asia/Thimphu.generic.long=Ora del Bhutan -Asia/Tokyo.generic.long=Ora Giappone -Asia/Ujung_Pandang.generic.long=Ora dell'Indonesia centrale -Asia/Ulaanbaatar.generic.long=Ora di Ulaanbaatar -Asia/Ulan_Bator.generic.long=Ora di Ulaanbaatar -Asia/Urumqi.generic.long=Ora Cina -Asia/Ust-Nera.daylight.long=Ora estiva di Ust-Nera -Asia/Ust-Nera.generic.long=Ora di Ust-Nera -Asia/Ust-Nera.standard.long=Ora di Ust-Nera -Asia/Vientiane.generic.long=Ora dell'Indocina -Asia/Vladivostok.generic.long=Ora di Vladivostok -Asia/Yakutsk.generic.long=Ora di Yakutsk -Asia/Yekaterinburg.generic.long=Ora di Ekaterinburg -Asia/Yerevan.generic.long=Ora dell'Armenia -Atlantic/Azores.generic.long=Ora delle Azzorre -Atlantic/Bermuda.generic.long=Fuso dell'Atlantico -Atlantic/Canary.generic.long=Ora dell'Europa occidentale -Atlantic/Cape_Verde.generic.long=Ora di Capo Verde -Atlantic/Faeroe.generic.long=Ora dell'Europa occidentale -Atlantic/Faroe.generic.long=Ora dell'Europa occidentale -Atlantic/Jan_Mayen.generic.long=Ora dell'Europa centrale -Atlantic/Madeira.generic.long=Ora dell'Europa occidentale -Atlantic/Reykjavik.generic.long=Ora media di Greenwich -Atlantic/South_Georgia.generic.long=Ora Georgia del Sud -Atlantic/St_Helena.generic.long=Ora media di Greenwich -Atlantic/Stanley.generic.long=Ora delle Falkland -Australia/ACT.daylight.long=Ora estiva dell'Australia orientale (Nuovo Galles del Sud) -Australia/ACT.generic.long=Ora fuso orientale (Nuovo Galles del Sud) -Australia/ACT.standard.long=Ora standard dell'Australia orientale (Nuovo Galles del Sud) -Australia/Adelaide.daylight.long=Ora estiva centrale (Australia del Sud) -Australia/Adelaide.generic.long=Ora fuso centrale (Australia del Sud) -Australia/Adelaide.standard.long=Ora standard centrale (Australia del Sud) -Australia/Brisbane.daylight.long=Ora estiva orientale (Queensland) -Australia/Brisbane.generic.long=Ora fuso orientale (Queensland) -Australia/Brisbane.standard.long=Ora standard orientale (Queensland) -Australia/Broken_Hill.daylight.long=Ora estiva centrale (Australia del Sud/Nuovo Galles del Sud) -Australia/Broken_Hill.generic.long=Ora fuso centrale (Australia del Sud/Nuovo Galles del Sud) -Australia/Broken_Hill.standard.long=Ora standard centrale (Australia del Sud/Nuovo Galles del Sud) -Australia/Canberra.daylight.long=Ora estiva dell'Australia orientale (Nuovo Galles del Sud) -Australia/Canberra.generic.long=Ora fuso orientale (Nuovo Galles del Sud) -Australia/Canberra.standard.long=Ora standard dell'Australia orientale (Nuovo Galles del Sud) -Australia/Currie.daylight.long=Ora estiva dell'Australia orientale (Nuovo Galles del Sud) -Australia/Currie.generic.long=Ora fuso orientale (Nuovo Galles del Sud) -Australia/Currie.standard.long=Ora standard dell'Australia orientale (Nuovo Galles del Sud) -Australia/Darwin.daylight.long=Ora estiva centrale (Territori del Nord) -Australia/Darwin.generic.long=Ora fuso centrale (Territori del Nord) -Australia/Darwin.standard.long=Ora standard centrale (Territori del Nord) -Australia/Eucla.daylight.long=Ora estiva Australia centro-occidentale -Australia/Eucla.generic.long=Ora Australia centro-occidentale -Australia/Eucla.standard.long=Ora standard Australia centro-occidentale -Australia/Hobart.daylight.long=Ora estiva orientale (Tasmania) -Australia/Hobart.generic.long=Ora fuso orientale (Tasmania) -Australia/Hobart.standard.long=Ora standard orientale (Tasmania) -Australia/LHI.generic.long=Ora di Lord Howe -Australia/Lindeman.daylight.long=Ora estiva orientale (Queensland) -Australia/Lindeman.generic.long=Ora fuso orientale (Queensland) -Australia/Lindeman.standard.long=Ora standard orientale (Queensland) -Australia/Lord_Howe.generic.long=Ora di Lord Howe -Australia/Melbourne.daylight.long=Ora estiva orientale (Victoria) -Australia/Melbourne.generic.long=Ora fuso orientale (Victoria) -Australia/Melbourne.standard.long=Ora standard orientale (Victoria) -Australia/NSW.daylight.long=Ora estiva dell'Australia orientale (Nuovo Galles del Sud) -Australia/NSW.generic.long=Ora fuso orientale (Nuovo Galles del Sud) -Australia/NSW.standard.long=Ora standard dell'Australia orientale (Nuovo Galles del Sud) -Australia/North.daylight.long=Ora estiva centrale (Territori del Nord) -Australia/North.generic.long=Ora fuso centrale (Territori del Nord) -Australia/North.standard.long=Ora standard centrale (Territori del Nord) -Australia/Perth.daylight.long=Ora estiva dell'Australia occidentale -Australia/Perth.generic.long=Ora Australia occidentale -Australia/Perth.standard.long=Ora standard dell'Australia occidentale -Australia/Queensland.daylight.long=Ora estiva orientale (Queensland) -Australia/Queensland.generic.long=Ora fuso orientale (Queensland) -Australia/Queensland.standard.long=Ora standard orientale (Queensland) -Australia/South.daylight.long=Ora estiva centrale (Australia del Sud) -Australia/South.generic.long=Ora fuso centrale (Australia del Sud) -Australia/South.standard.long=Ora standard centrale (Australia del Sud) -Australia/Sydney.daylight.long=Ora estiva dell'Australia orientale (Nuovo Galles del Sud) -Australia/Sydney.generic.long=Ora fuso orientale (Nuovo Galles del Sud) -Australia/Sydney.standard.long=Ora standard dell'Australia orientale (Nuovo Galles del Sud) -Australia/Tasmania.daylight.long=Ora estiva orientale (Tasmania) -Australia/Tasmania.generic.long=Ora fuso orientale (Tasmania) -Australia/Tasmania.standard.long=Ora standard orientale (Tasmania) -Australia/Victoria.daylight.long=Ora estiva orientale (Victoria) -Australia/Victoria.generic.long=Ora fuso orientale (Victoria) -Australia/Victoria.standard.long=Ora standard orientale (Victoria) -Australia/West.daylight.long=Ora estiva dell'Australia occidentale -Australia/West.generic.long=Ora Australia occidentale -Australia/West.standard.long=Ora standard dell'Australia occidentale -Australia/Yancowinna.daylight.long=Ora estiva centrale (Australia del Sud/Nuovo Galles del Sud) -Australia/Yancowinna.generic.long=Ora fuso centrale (Australia del Sud/Nuovo Galles del Sud) -Australia/Yancowinna.standard.long=Ora standard centrale (Australia del Sud/Nuovo Galles del Sud) -BET.generic.long=Ora di Brasilia -BST.generic.long=Ora del Bangladesh -Brazil/Acre.generic.long=Ora di Acre -Brazil/DeNoronha.generic.long=Ora di Fernando de Noronha -Brazil/East.generic.long=Ora di Brasilia -Brazil/West.generic.long=Ora dell'Amazzonia -CAT.generic.long=Ora dell'Africa centrale -CET.generic.long=Ora dell'Europa centrale -CNT.generic.long=Ora Terranova -CST.generic.long=Ora fuso centrale -CST6CDT.generic.long=Ora fuso centrale -CTT.generic.long=Ora Cina -Canada/Atlantic.generic.long=Fuso dell'Atlantico -Canada/Central.generic.long=Ora fuso centrale -Canada/East-Saskatchewan.generic.long=Ora fuso centrale -Canada/Eastern.generic.long=Fuso orientale -Canada/Mountain.generic.long=Ora fuso occidentale -Canada/Newfoundland.generic.long=Ora Terranova -Canada/Pacific.generic.long=Fuso del Pacifico -Canada/Saskatchewan.generic.long=Ora fuso centrale -Canada/Yukon.generic.long=Fuso del Pacifico -Chile/Continental.generic.long=Ora del Cile -Chile/EasterIsland.generic.long=Ora dell'Isola di Pasqua -Cuba.generic.long=Ora di Cuba -EAT.generic.long=Ora dell'Africa orientale -ECT.generic.long=Ora dell'Europa centrale -EET.generic.long=Ora dell'Europa orientale -EST.generic.long=Fuso orientale -EST5EDT.generic.long=Fuso orientale -Egypt.generic.long=Ora dell'Europa orientale -Eire.generic.long=Ora irlandese -Etc/Greenwich.generic.long=Ora media di Greenwich -Etc/UCT.generic.long=Tempo universale coordinato -Etc/UTC.generic.long=Tempo universale coordinato -Etc/Universal.generic.long=Tempo universale coordinato -Etc/Zulu.generic.long=Tempo universale coordinato -Europe/Amsterdam.generic.long=Ora dell'Europa centrale -Europe/Andorra.generic.long=Ora dell'Europa centrale -Europe/Athens.generic.long=Ora dell'Europa orientale -Europe/Belfast.generic.long=Ora britannica -Europe/Belgrade.generic.long=Ora dell'Europa centrale -Europe/Berlin.generic.long=Ora dell'Europa centrale -Europe/Bratislava.generic.long=Ora dell'Europa centrale -Europe/Brussels.generic.long=Ora dell'Europa centrale -Europe/Bucharest.generic.long=Ora dell'Europa orientale -Europe/Budapest.generic.long=Ora dell'Europa centrale -Europe/Busingen.generic.long=Ora dell'Europa centrale -Europe/Chisinau.generic.long=Ora dell'Europa orientale -Europe/Copenhagen.generic.long=Ora dell'Europa centrale -Europe/Dublin.generic.long=Ora irlandese -Europe/Gibraltar.generic.long=Ora dell'Europa centrale -Europe/Guernsey.generic.long=Ora britannica -Europe/Helsinki.generic.long=Ora dell'Europa orientale -Europe/Isle_of_Man.generic.long=Ora britannica -Europe/Istanbul.generic.long=Ora dell'Europa orientale -Europe/Jersey.generic.long=Ora britannica -Europe/Kaliningrad.daylight.long=Ora estiva dei paesi europei pi\u00F9 orientali -Europe/Kaliningrad.generic.long=Ora dei paesi europei pi\u00F9 orientali -Europe/Kaliningrad.standard.long=Ora dei paesi europei pi\u00F9 orientali -Europe/Kiev.generic.long=Ora dell'Europa orientale -Europe/Lisbon.generic.long=Ora dell'Europa occidentale -Europe/Ljubljana.generic.long=Ora dell'Europa centrale -Europe/London.generic.long=Ora britannica -Europe/Luxembourg.generic.long=Ora dell'Europa centrale -Europe/Madrid.generic.long=Ora dell'Europa centrale -Europe/Malta.generic.long=Ora dell'Europa centrale -Europe/Mariehamn.generic.long=Ora dell'Europa orientale -Europe/Minsk.daylight.long=Ora estiva dei paesi europei pi\u00F9 orientali -Europe/Minsk.generic.long=Ora dei paesi europei pi\u00F9 orientali -Europe/Minsk.standard.long=Ora dei paesi europei pi\u00F9 orientali -Europe/Monaco.generic.long=Ora dell'Europa centrale -Europe/Moscow.generic.long=Ora Mosca -Europe/Nicosia.generic.long=Ora dell'Europa orientale -Europe/Oslo.generic.long=Ora dell'Europa centrale -Europe/Paris.generic.long=Ora dell'Europa centrale -Europe/Podgorica.generic.long=Ora dell'Europa centrale -Europe/Prague.generic.long=Ora dell'Europa centrale -Europe/Riga.generic.long=Ora dell'Europa orientale -Europe/Rome.generic.long=Ora dell'Europa centrale -Europe/Samara.generic.long=Ora di Samara -Europe/San_Marino.generic.long=Ora dell'Europa centrale -Europe/Sarajevo.generic.long=Ora dell'Europa centrale -Europe/Simferopol.generic.long=Ora dell'Europa orientale -Europe/Skopje.generic.long=Ora dell'Europa centrale -Europe/Sofia.generic.long=Ora dell'Europa orientale -Europe/Stockholm.generic.long=Ora dell'Europa centrale -Europe/Tallinn.generic.long=Ora dell'Europa orientale -Europe/Tirane.generic.long=Ora dell'Europa centrale -Europe/Tiraspol.generic.long=Ora dell'Europa orientale -Europe/Uzhgorod.generic.long=Ora dell'Europa orientale -Europe/Vaduz.generic.long=Ora dell'Europa centrale -Europe/Vatican.generic.long=Ora dell'Europa centrale -Europe/Vienna.generic.long=Ora dell'Europa centrale -Europe/Vilnius.generic.long=Ora dell'Europa orientale -Europe/Volgograd.generic.long=Ora di Volgograd -Europe/Warsaw.generic.long=Ora dell'Europa centrale -Europe/Zagreb.generic.long=Ora dell'Europa centrale -Europe/Zaporozhye.generic.long=Ora dell'Europa orientale -Europe/Zurich.generic.long=Ora dell'Europa centrale -GB-Eire.generic.long=Ora britannica -GB.generic.long=Ora britannica -GMT.generic.long=Ora media di Greenwich -Greenwich.generic.long=Ora media di Greenwich -HST.generic.long=Ora Hawaii -Hongkong.generic.long=Ora di Hong Kong -IET.generic.long=Fuso orientale -IST.generic.long=Ora India -Iceland.generic.long=Ora media di Greenwich -Indian/Antananarivo.generic.long=Ora dell'Africa orientale -Indian/Chagos.generic.long=Ora del Territorio Britannico dell'Oceano Indiano -Indian/Christmas.generic.long=Ora dell'Isola Christmas -Indian/Cocos.generic.long=Ora delle Isole Cocos -Indian/Comoro.generic.long=Ora dell'Africa orientale -Indian/Kerguelen.generic.long=Ora delle Terre Australi e Antartiche Francesi -Indian/Mahe.generic.long=Ora delle Seychelles -Indian/Maldives.generic.long=Ora delle Maldive -Indian/Mauritius.generic.long=Ora di Mauritius -Indian/Mayotte.generic.long=Ora dell'Africa orientale -Indian/Reunion.generic.long=Ora di Reunion -Iran.generic.long=Ora Iran -Israel.generic.long=Ora Israele -JST.generic.long=Ora Giappone -Jamaica.generic.long=Fuso orientale -Japan.generic.long=Ora Giappone -Kwajalein.generic.long=Ora delle Isole Marshall -Libya.generic.long=Ora dell'Europa orientale -MET.generic.long=MET -MIT.generic.long=Ora di Samoa occidentale -MST.generic.long=Ora fuso occidentale -MST7MDT.generic.long=Ora fuso occidentale -Mexico/BajaNorte.generic.long=Fuso del Pacifico -Mexico/BajaSur.generic.long=Ora fuso occidentale -Mexico/General.generic.long=Ora fuso centrale -NET.generic.long=Ora dell'Armenia -NST.generic.long=Ora Nuova Zelanda -NZ-CHAT.generic.long=Ora Chatham -NZ.generic.long=Ora Nuova Zelanda -Navajo.generic.long=Ora fuso occidentale -PLT.generic.long=Ora del Pakistan -PNT.generic.long=Ora fuso occidentale -PRC.generic.long=Ora Cina -PRT.generic.long=Fuso dell'Atlantico -PST.generic.long=Fuso del Pacifico -PST8PDT.generic.long=Fuso del Pacifico -Pacific/Apia.generic.long=Ora di Samoa occidentale -Pacific/Auckland.generic.long=Ora Nuova Zelanda -Pacific/Chatham.generic.long=Ora Chatham -Pacific/Chuuk.daylight.long=Ora estiva di Chuuk -Pacific/Chuuk.generic.long=Ora di Chuuk -Pacific/Chuuk.standard.long=Ora di Chuuk -Pacific/Easter.generic.long=Ora dell'Isola di Pasqua -Pacific/Efate.generic.long=Ora di Vanuatu -Pacific/Enderbury.generic.long=Ora delle Isole Phoenix -Pacific/Fakaofo.generic.long=Ora di Tokelau -Pacific/Fiji.generic.long=Ora di Figi -Pacific/Funafuti.generic.long=Ora di Tuvalu -Pacific/Galapagos.generic.long=Ora delle Galapagos -Pacific/Gambier.generic.long=Ora di Gambier -Pacific/Guadalcanal.generic.long=Ora delle Isole Salomone -Pacific/Guam.generic.long=Ora Chamorro -Pacific/Honolulu.generic.long=Ora Hawaii -Pacific/Johnston.generic.long=Ora Hawaii -Pacific/Kiritimati.generic.long=Ora delle Line Islands -Pacific/Kosrae.generic.long=Ora di Kosrae -Pacific/Kwajalein.generic.long=Ora delle Isole Marshall -Pacific/Majuro.generic.long=Ora delle Isole Marshall -Pacific/Marquesas.generic.long=Ora delle Isole Marchesi -Pacific/Midway.generic.long=Ora Samoa -Pacific/Nauru.generic.long=Ora di Nauru -Pacific/Niue.generic.long=Ora di Niue -Pacific/Norfolk.generic.long=Ora di Norfolk -Pacific/Noumea.generic.long=Ora della Nuova Caledonia -Pacific/Pago_Pago.generic.long=Ora Samoa -Pacific/Palau.generic.long=Ora di Palau -Pacific/Pitcairn.generic.long=Ora Pitcairn -Pacific/Pohnpei.daylight.long=Ora estiva di Pohnpei -Pacific/Pohnpei.generic.long=Ora Ponape -Pacific/Pohnpei.standard.long=Ora di Pohnpei -Pacific/Ponape.daylight.long=Ora estiva di Pohnpei -Pacific/Ponape.generic.long=Ora Ponape -Pacific/Ponape.standard.long=Ora di Pohnpei -Pacific/Port_Moresby.generic.long=Ora di Papua Nuova Guinea -Pacific/Rarotonga.generic.long=Ora delle Isole Cook -Pacific/Saipan.generic.long=Ora Chamorro -Pacific/Samoa.generic.long=Ora Samoa -Pacific/Tahiti.generic.long=Ora di Tahiti -Pacific/Tarawa.generic.long=Ora delle Isole Gilbert -Pacific/Tongatapu.generic.long=Ora di Tonga -Pacific/Truk.daylight.long=Ora estiva di Chuuk -Pacific/Truk.generic.long=Ora di Chuuk -Pacific/Truk.standard.long=Ora di Chuuk -Pacific/Wake.generic.long=Ora di Wake -Pacific/Wallis.generic.long=Ora di Wallis e Futuna -Pacific/Yap.daylight.long=Ora estiva di Chuuk -Pacific/Yap.generic.long=Ora di Chuuk -Pacific/Yap.standard.long=Ora di Chuuk -Poland.generic.long=Ora dell'Europa centrale -Portugal.generic.long=Ora dell'Europa occidentale -ROK.generic.long=Ora Corea -SST.generic.long=Ora delle Isole Salomone -Singapore.generic.long=Ora di Singapore -SystemV/AST4.generic.long=Fuso dell'Atlantico -SystemV/AST4ADT.generic.long=Fuso dell'Atlantico -SystemV/CST6.generic.long=Ora fuso centrale -SystemV/CST6CDT.generic.long=Ora fuso centrale -SystemV/EST5.generic.long=Fuso orientale -SystemV/EST5EDT.generic.long=Fuso orientale -SystemV/HST10.generic.long=Ora Hawaii -SystemV/MST7.generic.long=Ora fuso occidentale -SystemV/MST7MDT.generic.long=Ora fuso occidentale -SystemV/PST8.generic.long=Fuso del Pacifico -SystemV/PST8PDT.generic.long=Fuso del Pacifico -SystemV/YST9.generic.long=Ora Alaska -SystemV/YST9YDT.generic.long=Ora Alaska -Turkey.generic.long=Ora dell'Europa orientale -UCT.generic.long=Tempo universale coordinato -US/Alaska.generic.long=Ora Alaska -US/Aleutian.generic.long=Ora Hawaii-Aleutine -US/Arizona.generic.long=Ora fuso occidentale -US/Central.generic.long=Ora fuso centrale -US/East-Indiana.generic.long=Fuso orientale -US/Eastern.generic.long=Fuso orientale -US/Hawaii.generic.long=Ora Hawaii -US/Indiana-Starke.generic.long=Ora fuso centrale -US/Michigan.generic.long=Fuso orientale -US/Mountain.generic.long=Ora fuso occidentale -US/Pacific-New.generic.long=Fuso del Pacifico -US/Pacific.generic.long=Fuso del Pacifico -US/Samoa.generic.long=Ora Samoa -UTC.generic.long=Tempo universale coordinato -Universal.generic.long=Tempo universale coordinato -VST.generic.long=Ora dell'Indocina -W-SU.generic.long=Ora Mosca -WET.generic.long=Ora dell'Europa occidentale -Zulu.generic.long=Tempo universale coordinato diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_it_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_it_short.properties deleted file mode 100644 index 095522a68d1..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_it_short.properties +++ /dev/null @@ -1,1743 +0,0 @@ -ACT.daylight.short=CST -ACT.generic.short=CT -ACT.standard.short=CST -AET.daylight.short=EST -AET.generic.short=ET -AET.standard.short=EST -Africa/Abidjan.daylight.short=GMT -Africa/Abidjan.generic.short=GMT -Africa/Abidjan.standard.short=GMT -Africa/Accra.daylight.short=GHST -Africa/Accra.generic.short=GMT -Africa/Accra.standard.short=GMT -Africa/Addis_Ababa.daylight.short=EAST -Africa/Addis_Ababa.generic.short=EAT -Africa/Addis_Ababa.standard.short=EAT -Africa/Algiers.daylight.short=CEST -Africa/Algiers.generic.short=CET -Africa/Algiers.standard.short=CET -Africa/Asmara.daylight.short=EAST -Africa/Asmara.generic.short=EAT -Africa/Asmara.standard.short=EAT -Africa/Asmera.daylight.short=EAST -Africa/Asmera.generic.short=EAT -Africa/Asmera.standard.short=EAT -Africa/Bamako.daylight.short=GMT -Africa/Bamako.generic.short=GMT -Africa/Bamako.standard.short=GMT -Africa/Bangui.daylight.short=WAST -Africa/Bangui.generic.short=WAT -Africa/Bangui.standard.short=WAT -Africa/Banjul.daylight.short=GMT -Africa/Banjul.generic.short=GMT -Africa/Banjul.standard.short=GMT -Africa/Bissau.daylight.short=GMT -Africa/Bissau.generic.short=GMT -Africa/Bissau.standard.short=GMT -Africa/Blantyre.daylight.short=CAST -Africa/Blantyre.generic.short=CAT -Africa/Blantyre.standard.short=CAT -Africa/Brazzaville.daylight.short=WAST -Africa/Brazzaville.generic.short=WAT -Africa/Brazzaville.standard.short=WAT -Africa/Bujumbura.daylight.short=CAST -Africa/Bujumbura.generic.short=CAT -Africa/Bujumbura.standard.short=CAT -Africa/Cairo.daylight.short=EEST -Africa/Cairo.generic.short=EET -Africa/Cairo.standard.short=EET -Africa/Casablanca.daylight.short=WEST -Africa/Casablanca.generic.short=WET -Africa/Casablanca.standard.short=WET -Africa/Ceuta.daylight.short=CEST -Africa/Ceuta.generic.short=CET -Africa/Ceuta.standard.short=CET -Africa/Conakry.daylight.short=GMT -Africa/Conakry.generic.short=GMT -Africa/Conakry.standard.short=GMT -Africa/Dakar.daylight.short=GMT -Africa/Dakar.generic.short=GMT -Africa/Dakar.standard.short=GMT -Africa/Dar_es_Salaam.daylight.short=EAST -Africa/Dar_es_Salaam.generic.short=EAT -Africa/Dar_es_Salaam.standard.short=EAT -Africa/Djibouti.daylight.short=EAST -Africa/Djibouti.generic.short=EAT -Africa/Djibouti.standard.short=EAT -Africa/Douala.daylight.short=WAST -Africa/Douala.generic.short=WAT -Africa/Douala.standard.short=WAT -Africa/El_Aaiun.daylight.short=WEST -Africa/El_Aaiun.generic.short=WET -Africa/El_Aaiun.standard.short=WET -Africa/Freetown.daylight.short=SLST -Africa/Freetown.generic.short=SLT -Africa/Freetown.standard.short=GMT -Africa/Gaborone.daylight.short=CAST -Africa/Gaborone.generic.short=CAT -Africa/Gaborone.standard.short=CAT -Africa/Harare.daylight.short=CAST -Africa/Harare.generic.short=CAT -Africa/Harare.standard.short=CAT -Africa/Johannesburg.daylight.short=SAST -Africa/Johannesburg.generic.short=SAT -Africa/Johannesburg.standard.short=SAST -Africa/Juba.daylight.short=EAST -Africa/Juba.generic.short=EAT -Africa/Juba.standard.short=EAT -Africa/Kampala.daylight.short=EAST -Africa/Kampala.generic.short=EAT -Africa/Kampala.standard.short=EAT -Africa/Khartoum.daylight.short=EAST -Africa/Khartoum.generic.short=EAT -Africa/Khartoum.standard.short=EAT -Africa/Kigali.daylight.short=CAST -Africa/Kigali.generic.short=CAT -Africa/Kigali.standard.short=CAT -Africa/Kinshasa.daylight.short=WAST -Africa/Kinshasa.generic.short=WAT -Africa/Kinshasa.standard.short=WAT -Africa/Lagos.daylight.short=WAST -Africa/Lagos.generic.short=WAT -Africa/Lagos.standard.short=WAT -Africa/Libreville.daylight.short=WAST -Africa/Libreville.generic.short=WAT -Africa/Libreville.standard.short=WAT -Africa/Lome.daylight.short=GMT -Africa/Lome.generic.short=GMT -Africa/Lome.standard.short=GMT -Africa/Luanda.daylight.short=WAST -Africa/Luanda.generic.short=WAT -Africa/Luanda.standard.short=WAT -Africa/Lubumbashi.daylight.short=CAST -Africa/Lubumbashi.generic.short=CAT -Africa/Lubumbashi.standard.short=CAT -Africa/Lusaka.daylight.short=CAST -Africa/Lusaka.generic.short=CAT -Africa/Lusaka.standard.short=CAT -Africa/Malabo.daylight.short=WAST -Africa/Malabo.generic.short=WAT -Africa/Malabo.standard.short=WAT -Africa/Maputo.daylight.short=CAST -Africa/Maputo.generic.short=CAT -Africa/Maputo.standard.short=CAT -Africa/Maseru.daylight.short=SAST -Africa/Maseru.generic.short=SAT -Africa/Maseru.standard.short=SAST -Africa/Mbabane.daylight.short=SAST -Africa/Mbabane.generic.short=SAT -Africa/Mbabane.standard.short=SAST -Africa/Mogadishu.daylight.short=EAST -Africa/Mogadishu.generic.short=EAT -Africa/Mogadishu.standard.short=EAT -Africa/Monrovia.daylight.short=GMT -Africa/Monrovia.generic.short=GMT -Africa/Monrovia.standard.short=GMT -Africa/Nairobi.daylight.short=EAST -Africa/Nairobi.generic.short=EAT -Africa/Nairobi.standard.short=EAT -Africa/Ndjamena.daylight.short=WAST -Africa/Ndjamena.generic.short=WAT -Africa/Ndjamena.standard.short=WAT -Africa/Niamey.daylight.short=WAST -Africa/Niamey.generic.short=WAT -Africa/Niamey.standard.short=WAT -Africa/Nouakchott.daylight.short=GMT -Africa/Nouakchott.generic.short=GMT -Africa/Nouakchott.standard.short=GMT -Africa/Ouagadougou.daylight.short=GMT -Africa/Ouagadougou.generic.short=GMT -Africa/Ouagadougou.standard.short=GMT -Africa/Porto-Novo.daylight.short=WAST -Africa/Porto-Novo.generic.short=WAT -Africa/Porto-Novo.standard.short=WAT -Africa/Sao_Tome.daylight.short=GMT -Africa/Sao_Tome.generic.short=GMT -Africa/Sao_Tome.standard.short=GMT -Africa/Timbuktu.daylight.short=GMT -Africa/Timbuktu.generic.short=GMT -Africa/Timbuktu.standard.short=GMT -Africa/Tripoli.daylight.short=EEST -Africa/Tripoli.generic.short=EET -Africa/Tripoli.standard.short=EET -Africa/Tunis.daylight.short=CEST -Africa/Tunis.generic.short=CET -Africa/Tunis.standard.short=CET -Africa/Windhoek.daylight.short=WAST -Africa/Windhoek.generic.short=WAT -Africa/Windhoek.standard.short=WAT -AGT.daylight.short=ARST -AGT.generic.short=ART -AGT.standard.short=ART -America/Adak.daylight.short=HADT -America/Adak.generic.short=HAT -America/Adak.standard.short=HAST -America/Anchorage.daylight.short=AKDT -America/Anchorage.generic.short=AKT -America/Anchorage.standard.short=AKST -America/Anguilla.daylight.short=ADT -America/Anguilla.generic.short=AT -America/Anguilla.standard.short=AST -America/Antigua.daylight.short=ADT -America/Antigua.generic.short=AT -America/Antigua.standard.short=AST -America/Araguaina.daylight.short=BRST -America/Araguaina.generic.short=BRT -America/Araguaina.standard.short=BRT -America/Argentina/Buenos_Aires.daylight.short=ARST -America/Argentina/Buenos_Aires.generic.short=ART -America/Argentina/Buenos_Aires.standard.short=ART -America/Argentina/Catamarca.daylight.short=ARST -America/Argentina/Catamarca.generic.short=ART -America/Argentina/Catamarca.standard.short=ART -America/Argentina/ComodRivadavia.daylight.short=ARST -America/Argentina/ComodRivadavia.generic.short=ART -America/Argentina/ComodRivadavia.standard.short=ART -America/Argentina/Cordoba.daylight.short=ARST -America/Argentina/Cordoba.generic.short=ART -America/Argentina/Cordoba.standard.short=ART -America/Argentina/Jujuy.daylight.short=ARST -America/Argentina/Jujuy.generic.short=ART -America/Argentina/Jujuy.standard.short=ART -America/Argentina/La_Rioja.daylight.short=ARST -America/Argentina/La_Rioja.generic.short=ART -America/Argentina/La_Rioja.standard.short=ART -America/Argentina/Mendoza.daylight.short=ARST -America/Argentina/Mendoza.generic.short=ART -America/Argentina/Mendoza.standard.short=ART -America/Argentina/Rio_Gallegos.daylight.short=ARST -America/Argentina/Rio_Gallegos.generic.short=ART -America/Argentina/Rio_Gallegos.standard.short=ART -America/Argentina/Salta.daylight.short=ARST -America/Argentina/Salta.generic.short=ART -America/Argentina/Salta.standard.short=ART -America/Argentina/San_Juan.daylight.short=ARST -America/Argentina/San_Juan.generic.short=ART -America/Argentina/San_Juan.standard.short=ART -America/Argentina/San_Luis.daylight.short=ARST -America/Argentina/San_Luis.generic.short=ART -America/Argentina/San_Luis.standard.short=ART -America/Argentina/Tucuman.daylight.short=ARST -America/Argentina/Tucuman.generic.short=ART -America/Argentina/Tucuman.standard.short=ART -America/Argentina/Ushuaia.daylight.short=ARST -America/Argentina/Ushuaia.generic.short=ART -America/Argentina/Ushuaia.standard.short=ART -America/Aruba.daylight.short=ADT -America/Aruba.generic.short=AT -America/Aruba.standard.short=AST -America/Asuncion.daylight.short=PYST -America/Asuncion.generic.short=PYT -America/Asuncion.standard.short=PYT -America/Atikokan.daylight.short=EDT -America/Atikokan.generic.short=ET -America/Atikokan.standard.short=EST -America/Atka.daylight.short=HADT -America/Atka.generic.short=HAT -America/Atka.standard.short=HAST -America/Bahia_Banderas.daylight.short=CDT -America/Bahia_Banderas.generic.short=CT -America/Bahia_Banderas.standard.short=CST -America/Bahia.daylight.short=BRST -America/Bahia.generic.short=BRT -America/Bahia.standard.short=BRT -America/Barbados.daylight.short=ADT -America/Barbados.generic.short=AT -America/Barbados.standard.short=AST -America/Belem.daylight.short=BRST -America/Belem.generic.short=BRT -America/Belem.standard.short=BRT -America/Belize.daylight.short=CDT -America/Belize.generic.short=CT -America/Belize.standard.short=CST -America/Blanc-Sablon.daylight.short=ADT -America/Blanc-Sablon.generic.short=AT -America/Blanc-Sablon.standard.short=AST -America/Boa_Vista.daylight.short=AMST -America/Boa_Vista.generic.short=AMT -America/Boa_Vista.standard.short=AMT -America/Bogota.daylight.short=COST -America/Bogota.generic.short=COT -America/Bogota.standard.short=COT -America/Boise.daylight.short=MDT -America/Boise.generic.short=MT -America/Boise.standard.short=MST -America/Buenos_Aires.daylight.short=ARST -America/Buenos_Aires.generic.short=ART -America/Buenos_Aires.standard.short=ART -America/Cambridge_Bay.daylight.short=MDT -America/Cambridge_Bay.generic.short=MT -America/Cambridge_Bay.standard.short=MST -America/Campo_Grande.daylight.short=AMST -America/Campo_Grande.generic.short=AMT -America/Campo_Grande.standard.short=AMT -America/Cancun.daylight.short=CDT -America/Cancun.generic.short=CT -America/Cancun.standard.short=CST -America/Caracas.daylight.short=VEST -America/Caracas.generic.short=VET -America/Caracas.standard.short=VET -America/Catamarca.daylight.short=ARST -America/Catamarca.generic.short=ART -America/Catamarca.standard.short=ART -America/Cayenne.daylight.short=GFST -America/Cayenne.generic.short=GFT -America/Cayenne.standard.short=GFT -America/Cayman.daylight.short=EDT -America/Cayman.generic.short=ET -America/Cayman.standard.short=EST -America/Chicago.daylight.short=CDT -America/Chicago.generic.short=CT -America/Chicago.standard.short=CST -America/Chihuahua.daylight.short=MDT -America/Chihuahua.generic.short=MT -America/Chihuahua.standard.short=MST -America/Coral_Harbour.daylight.short=EDT -America/Coral_Harbour.generic.short=ET -America/Coral_Harbour.standard.short=EST -America/Cordoba.daylight.short=ARST -America/Cordoba.generic.short=ART -America/Cordoba.standard.short=ART -America/Costa_Rica.daylight.short=CDT -America/Costa_Rica.generic.short=CT -America/Costa_Rica.standard.short=CST -America/Creston.daylight.short=MDT -America/Creston.generic.short=MT -America/Creston.standard.short=MST -America/Cuiaba.daylight.short=AMST -America/Cuiaba.generic.short=AMT -America/Cuiaba.standard.short=AMT -America/Curacao.daylight.short=ADT -America/Curacao.generic.short=AT -America/Curacao.standard.short=AST -America/Danmarkshavn.daylight.short=GMT -America/Danmarkshavn.generic.short=GMT -America/Danmarkshavn.standard.short=GMT -America/Dawson_Creek.daylight.short=MDT -America/Dawson_Creek.generic.short=MT -America/Dawson_Creek.standard.short=MST -America/Dawson.daylight.short=PDT -America/Dawson.generic.short=PT -America/Dawson.standard.short=PST -America/Denver.daylight.short=MDT -America/Denver.generic.short=MT -America/Denver.standard.short=MST -America/Detroit.daylight.short=EDT -America/Detroit.generic.short=ET -America/Detroit.standard.short=EST -America/Dominica.daylight.short=ADT -America/Dominica.generic.short=AT -America/Dominica.standard.short=AST -America/Edmonton.daylight.short=MDT -America/Edmonton.generic.short=MT -America/Edmonton.standard.short=MST -America/Eirunepe.daylight.short=ACST -America/Eirunepe.generic.short=ACT -America/Eirunepe.standard.short=ACT -America/El_Salvador.daylight.short=CDT -America/El_Salvador.generic.short=CT -America/El_Salvador.standard.short=CST -America/Ensenada.daylight.short=PDT -America/Ensenada.generic.short=PT -America/Ensenada.standard.short=PST -America/Fortaleza.daylight.short=BRST -America/Fortaleza.generic.short=BRT -America/Fortaleza.standard.short=BRT -America/Fort_Wayne.daylight.short=EDT -America/Fort_Wayne.generic.short=ET -America/Fort_Wayne.standard.short=EST -America/Glace_Bay.daylight.short=ADT -America/Glace_Bay.generic.short=AT -America/Glace_Bay.standard.short=AST -America/Godthab.daylight.short=WGST -America/Godthab.generic.short=WGT -America/Godthab.standard.short=WGT -America/Goose_Bay.daylight.short=ADT -America/Goose_Bay.generic.short=AT -America/Goose_Bay.standard.short=AST -America/Grand_Turk.daylight.short=EDT -America/Grand_Turk.generic.short=ET -America/Grand_Turk.standard.short=EST -America/Grenada.daylight.short=ADT -America/Grenada.generic.short=AT -America/Grenada.standard.short=AST -America/Guadeloupe.daylight.short=ADT -America/Guadeloupe.generic.short=AT -America/Guadeloupe.standard.short=AST -America/Guatemala.daylight.short=CDT -America/Guatemala.generic.short=CT -America/Guatemala.standard.short=CST -America/Guayaquil.daylight.short=ECST -America/Guayaquil.generic.short=ECT -America/Guayaquil.standard.short=ECT -America/Guyana.daylight.short=GYST -America/Guyana.generic.short=GYT -America/Guyana.standard.short=GYT -America/Halifax.daylight.short=ADT -America/Halifax.generic.short=AT -America/Halifax.standard.short=AST -America/Havana.daylight.short=CDT -America/Havana.generic.short=CT -America/Havana.standard.short=CST -America/Hermosillo.daylight.short=MDT -America/Hermosillo.generic.short=MT -America/Hermosillo.standard.short=MST -America/Indiana/Indianapolis.daylight.short=EDT -America/Indiana/Indianapolis.generic.short=ET -America/Indiana/Indianapolis.standard.short=EST -America/Indiana/Knox.daylight.short=CDT -America/Indiana/Knox.generic.short=CT -America/Indiana/Knox.standard.short=CST -America/Indiana/Marengo.daylight.short=EDT -America/Indiana/Marengo.generic.short=ET -America/Indiana/Marengo.standard.short=EST -America/Indiana/Petersburg.daylight.short=EDT -America/Indiana/Petersburg.generic.short=ET -America/Indiana/Petersburg.standard.short=EST -America/Indianapolis.daylight.short=EDT -America/Indianapolis.generic.short=ET -America/Indianapolis.standard.short=EST -America/Indiana/Tell_City.daylight.short=CDT -America/Indiana/Tell_City.generic.short=CT -America/Indiana/Tell_City.standard.short=CST -America/Indiana/Vevay.daylight.short=EDT -America/Indiana/Vevay.generic.short=ET -America/Indiana/Vevay.standard.short=EST -America/Indiana/Vincennes.daylight.short=EDT -America/Indiana/Vincennes.generic.short=ET -America/Indiana/Vincennes.standard.short=EST -America/Indiana/Winamac.daylight.short=EDT -America/Indiana/Winamac.generic.short=ET -America/Indiana/Winamac.standard.short=EST -America/Inuvik.daylight.short=MDT -America/Inuvik.generic.short=MT -America/Inuvik.standard.short=MST -America/Iqaluit.daylight.short=EDT -America/Iqaluit.generic.short=ET -America/Iqaluit.standard.short=EST -America/Jamaica.daylight.short=EDT -America/Jamaica.generic.short=ET -America/Jamaica.standard.short=EST -America/Jujuy.daylight.short=ARST -America/Jujuy.generic.short=ART -America/Jujuy.standard.short=ART -America/Juneau.daylight.short=AKDT -America/Juneau.generic.short=AKT -America/Juneau.standard.short=AKST -America/Kentucky/Louisville.daylight.short=EDT -America/Kentucky/Louisville.generic.short=ET -America/Kentucky/Louisville.standard.short=EST -America/Kentucky/Monticello.daylight.short=EDT -America/Kentucky/Monticello.generic.short=ET -America/Kentucky/Monticello.standard.short=EST -America/Knox_IN.daylight.short=CDT -America/Knox_IN.generic.short=CT -America/Knox_IN.standard.short=CST -America/Kralendijk.daylight.short=ADT -America/Kralendijk.generic.short=AT -America/Kralendijk.standard.short=AST -America/La_Paz.daylight.short=BOST -America/La_Paz.generic.short=BOT -America/La_Paz.standard.short=BOT -America/Lima.daylight.short=PEST -America/Lima.generic.short=PET -America/Lima.standard.short=PET -America/Los_Angeles.daylight.short=PDT -America/Los_Angeles.generic.short=PT -America/Los_Angeles.standard.short=PST -America/Louisville.daylight.short=EDT -America/Louisville.generic.short=ET -America/Louisville.standard.short=EST -America/Lower_Princes.daylight.short=ADT -America/Lower_Princes.generic.short=AT -America/Lower_Princes.standard.short=AST -America/Maceio.daylight.short=BRST -America/Maceio.generic.short=BRT -America/Maceio.standard.short=BRT -America/Managua.daylight.short=CDT -America/Managua.generic.short=CT -America/Managua.standard.short=CST -America/Manaus.daylight.short=AMST -America/Manaus.generic.short=AMT -America/Manaus.standard.short=AMT -America/Marigot.daylight.short=ADT -America/Marigot.generic.short=AT -America/Marigot.standard.short=AST -America/Martinique.daylight.short=ADT -America/Martinique.generic.short=AT -America/Martinique.standard.short=AST -America/Matamoros.daylight.short=CDT -America/Matamoros.generic.short=CT -America/Matamoros.standard.short=CST -America/Mazatlan.daylight.short=MDT -America/Mazatlan.generic.short=MT -America/Mazatlan.standard.short=MST -America/Mendoza.daylight.short=ARST -America/Mendoza.generic.short=ART -America/Mendoza.standard.short=ART -America/Menominee.daylight.short=CDT -America/Menominee.generic.short=CT -America/Menominee.standard.short=CST -America/Merida.daylight.short=CDT -America/Merida.generic.short=CT -America/Merida.standard.short=CST -America/Metlakatla.daylight.short=MeDT -America/Metlakatla.generic.short=MeT -America/Metlakatla.standard.short=MeST -America/Mexico_City.daylight.short=CDT -America/Mexico_City.generic.short=CT -America/Mexico_City.standard.short=CST -America/Miquelon.daylight.short=PMDT -America/Miquelon.generic.short=PMT -America/Miquelon.standard.short=PMST -America/Moncton.daylight.short=ADT -America/Moncton.generic.short=AT -America/Moncton.standard.short=AST -America/Monterrey.daylight.short=CDT -America/Monterrey.generic.short=CT -America/Monterrey.standard.short=CST -America/Montevideo.daylight.short=UYST -America/Montevideo.generic.short=UYT -America/Montevideo.standard.short=UYT -America/Montreal.daylight.short=EDT -America/Montreal.generic.short=ET -America/Montreal.standard.short=EST -America/Montserrat.daylight.short=ADT -America/Montserrat.generic.short=AT -America/Montserrat.standard.short=AST -America/Nassau.daylight.short=EDT -America/Nassau.generic.short=ET -America/Nassau.standard.short=EST -America/New_York.daylight.short=EDT -America/New_York.generic.short=ET -America/New_York.standard.short=EST -America/Nipigon.daylight.short=EDT -America/Nipigon.generic.short=ET -America/Nipigon.standard.short=EST -America/Nome.daylight.short=AKDT -America/Nome.generic.short=AKT -America/Nome.standard.short=AKST -America/Noronha.daylight.short=FNST -America/Noronha.generic.short=FNT -America/Noronha.standard.short=FNT -America/North_Dakota/Beulah.daylight.short=CDT -America/North_Dakota/Beulah.generic.short=CT -America/North_Dakota/Beulah.standard.short=CST -America/North_Dakota/Center.daylight.short=CDT -America/North_Dakota/Center.generic.short=CT -America/North_Dakota/Center.standard.short=CST -America/North_Dakota/New_Salem.daylight.short=CDT -America/North_Dakota/New_Salem.generic.short=CT -America/North_Dakota/New_Salem.standard.short=CST -America/Ojinaga.daylight.short=MDT -America/Ojinaga.generic.short=MT -America/Ojinaga.standard.short=MST -America/Panama.daylight.short=EDT -America/Panama.generic.short=ET -America/Panama.standard.short=EST -America/Pangnirtung.daylight.short=EDT -America/Pangnirtung.generic.short=ET -America/Pangnirtung.standard.short=EST -America/Paramaribo.daylight.short=SRST -America/Paramaribo.generic.short=SRT -America/Paramaribo.standard.short=SRT -America/Phoenix.daylight.short=MDT -America/Phoenix.generic.short=MT -America/Phoenix.standard.short=MST -America/Port-au-Prince.daylight.short=EDT -America/Port-au-Prince.generic.short=ET -America/Port-au-Prince.standard.short=EST -America/Porto_Acre.daylight.short=ACST -America/Porto_Acre.generic.short=ACT -America/Porto_Acre.standard.short=ACT -America/Port_of_Spain.daylight.short=ADT -America/Port_of_Spain.generic.short=AT -America/Port_of_Spain.standard.short=AST -America/Porto_Velho.daylight.short=AMST -America/Porto_Velho.generic.short=AMT -America/Porto_Velho.standard.short=AMT -America/Puerto_Rico.daylight.short=ADT -America/Puerto_Rico.generic.short=AT -America/Puerto_Rico.standard.short=AST -America/Rainy_River.daylight.short=CDT -America/Rainy_River.generic.short=CT -America/Rainy_River.standard.short=CST -America/Rankin_Inlet.daylight.short=CDT -America/Rankin_Inlet.generic.short=CT -America/Rankin_Inlet.standard.short=CST -America/Recife.daylight.short=BRST -America/Recife.generic.short=BRT -America/Recife.standard.short=BRT -America/Regina.daylight.short=CDT -America/Regina.generic.short=CT -America/Regina.standard.short=CST -America/Resolute.daylight.short=CDT -America/Resolute.generic.short=CT -America/Resolute.standard.short=CST -America/Rio_Branco.daylight.short=ACST -America/Rio_Branco.generic.short=ACT -America/Rio_Branco.standard.short=ACT -America/Rosario.daylight.short=ARST -America/Rosario.generic.short=ART -America/Rosario.standard.short=ART -America/Santa_Isabel.daylight.short=PDT -America/Santa_Isabel.generic.short=PT -America/Santa_Isabel.standard.short=PST -America/Santarem.daylight.short=BRST -America/Santarem.generic.short=BRT -America/Santarem.standard.short=BRT -America/Santiago.daylight.short=CLST -America/Santiago.generic.short=CLT -America/Santiago.standard.short=CLT -America/Santo_Domingo.daylight.short=ADT -America/Santo_Domingo.generic.short=AT -America/Santo_Domingo.standard.short=AST -America/Sao_Paulo.daylight.short=BRST -America/Sao_Paulo.generic.short=BRT -America/Sao_Paulo.standard.short=BRT -America/Scoresbysund.daylight.short=EGST -America/Scoresbysund.generic.short=EGT -America/Scoresbysund.standard.short=EGT -America/Shiprock.daylight.short=MDT -America/Shiprock.generic.short=MT -America/Shiprock.standard.short=MST -America/Sitka.daylight.short=AKDT -America/Sitka.generic.short=AKT -America/Sitka.standard.short=AKST -America/St_Barthelemy.daylight.short=ADT -America/St_Barthelemy.generic.short=AT -America/St_Barthelemy.standard.short=AST -America/St_Johns.daylight.short=NDT -America/St_Johns.generic.short=NT -America/St_Johns.standard.short=NST -America/St_Kitts.daylight.short=ADT -America/St_Kitts.generic.short=AT -America/St_Kitts.standard.short=AST -America/St_Lucia.daylight.short=ADT -America/St_Lucia.generic.short=AT -America/St_Lucia.standard.short=AST -America/St_Thomas.daylight.short=ADT -America/St_Thomas.generic.short=AT -America/St_Thomas.standard.short=AST -America/St_Vincent.daylight.short=ADT -America/St_Vincent.generic.short=AT -America/St_Vincent.standard.short=AST -America/Swift_Current.daylight.short=CDT -America/Swift_Current.generic.short=CT -America/Swift_Current.standard.short=CST -America/Tegucigalpa.daylight.short=CDT -America/Tegucigalpa.generic.short=CT -America/Tegucigalpa.standard.short=CST -America/Thule.daylight.short=ADT -America/Thule.generic.short=AT -America/Thule.standard.short=AST -America/Thunder_Bay.daylight.short=EDT -America/Thunder_Bay.generic.short=ET -America/Thunder_Bay.standard.short=EST -America/Tijuana.daylight.short=PDT -America/Tijuana.generic.short=PT -America/Tijuana.standard.short=PST -America/Toronto.daylight.short=EDT -America/Toronto.generic.short=ET -America/Toronto.standard.short=EST -America/Tortola.daylight.short=ADT -America/Tortola.generic.short=AT -America/Tortola.standard.short=AST -America/Vancouver.daylight.short=PDT -America/Vancouver.generic.short=PT -America/Vancouver.standard.short=PST -America/Virgin.daylight.short=ADT -America/Virgin.generic.short=AT -America/Virgin.standard.short=AST -America/Whitehorse.daylight.short=PDT -America/Whitehorse.generic.short=PT -America/Whitehorse.standard.short=PST -America/Winnipeg.daylight.short=CDT -America/Winnipeg.generic.short=CT -America/Winnipeg.standard.short=CST -America/Yakutat.daylight.short=AKDT -America/Yakutat.generic.short=AKT -America/Yakutat.standard.short=AKST -America/Yellowknife.daylight.short=MDT -America/Yellowknife.generic.short=MT -America/Yellowknife.standard.short=MST -Antarctica/Casey.daylight.short=WST -Antarctica/Casey.generic.short=WT -Antarctica/Casey.standard.short=WST -Antarctica/Davis.daylight.short=DAVST -Antarctica/Davis.generic.short=DAVT -Antarctica/Davis.standard.short=DAVT -Antarctica/DumontDUrville.daylight.short=DDUST -Antarctica/DumontDUrville.generic.short=DDUT -Antarctica/DumontDUrville.standard.short=DDUT -Antarctica/Macquarie.daylight.short=MIST -Antarctica/Macquarie.generic.short=MIST -Antarctica/Macquarie.standard.short=MIST -Antarctica/Mawson.daylight.short=MAWST -Antarctica/Mawson.generic.short=MAWT -Antarctica/Mawson.standard.short=MAWT -Antarctica/McMurdo.daylight.short=NZDT -Antarctica/McMurdo.generic.short=NZT -Antarctica/McMurdo.standard.short=NZST -Antarctica/Palmer.daylight.short=CLST -Antarctica/Palmer.generic.short=CLT -Antarctica/Palmer.standard.short=CLT -Antarctica/Rothera.daylight.short=ROTST -Antarctica/Rothera.generic.short=ROTT -Antarctica/Rothera.standard.short=ROTT -Antarctica/South_Pole.daylight.short=NZDT -Antarctica/South_Pole.generic.short=NZT -Antarctica/South_Pole.standard.short=NZST -Antarctica/Syowa.daylight.short=SYOST -Antarctica/Syowa.generic.short=SYOT -Antarctica/Syowa.standard.short=SYOT -Antarctica/Vostok.daylight.short=VOSST -Antarctica/Vostok.generic.short=VOST -Antarctica/Vostok.standard.short=VOST -Arctic/Longyearbyen.daylight.short=CEST -Arctic/Longyearbyen.generic.short=CET -Arctic/Longyearbyen.standard.short=CET -ART.daylight.short=EEST -ART.generic.short=EET -ART.standard.short=EET -Asia/Aden.daylight.short=ADT -Asia/Aden.generic.short=AT -Asia/Aden.standard.short=AST -Asia/Almaty.daylight.short=ALMST -Asia/Almaty.generic.short=ALMT -Asia/Almaty.standard.short=ALMT -Asia/Amman.daylight.short=ADT -Asia/Amman.generic.short=AT -Asia/Amman.standard.short=AST -Asia/Anadyr.daylight.short=ANAST -Asia/Anadyr.generic.short=ANAT -Asia/Anadyr.standard.short=ANAT -Asia/Aqtau.daylight.short=AQTST -Asia/Aqtau.generic.short=AQTT -Asia/Aqtau.standard.short=AQTT -Asia/Aqtobe.daylight.short=AQTST -Asia/Aqtobe.generic.short=AQTT -Asia/Aqtobe.standard.short=AQTT -Asia/Ashgabat.daylight.short=TMST -Asia/Ashgabat.generic.short=TMT -Asia/Ashgabat.standard.short=TMT -Asia/Ashkhabad.daylight.short=TMST -Asia/Ashkhabad.generic.short=TMT -Asia/Ashkhabad.standard.short=TMT -Asia/Baghdad.daylight.short=ADT -Asia/Baghdad.generic.short=AT -Asia/Baghdad.standard.short=AST -Asia/Bahrain.daylight.short=ADT -Asia/Bahrain.generic.short=AT -Asia/Bahrain.standard.short=AST -Asia/Baku.daylight.short=AZST -Asia/Baku.generic.short=AZT -Asia/Baku.standard.short=AZT -Asia/Bangkok.daylight.short=ICST -Asia/Bangkok.generic.short=ICT -Asia/Bangkok.standard.short=ICT -Asia/Beirut.daylight.short=EEST -Asia/Beirut.generic.short=EET -Asia/Beirut.standard.short=EET -Asia/Bishkek.daylight.short=KGST -Asia/Bishkek.generic.short=KGT -Asia/Bishkek.standard.short=KGT -Asia/Brunei.daylight.short=BNST -Asia/Brunei.generic.short=BNT -Asia/Brunei.standard.short=BNT -Asia/Calcutta.daylight.short=IDT -Asia/Calcutta.generic.short=IT -Asia/Calcutta.standard.short=IST -Asia/Choibalsan.daylight.short=CHOST -Asia/Choibalsan.generic.short=CHOT -Asia/Choibalsan.standard.short=CHOT -Asia/Chongqing.daylight.short=CDT -Asia/Chongqing.generic.short=CT -Asia/Chongqing.standard.short=CST -Asia/Chungking.daylight.short=CDT -Asia/Chungking.generic.short=CT -Asia/Chungking.standard.short=CST -Asia/Colombo.daylight.short=IDT -Asia/Colombo.generic.short=IT -Asia/Colombo.standard.short=IST -Asia/Dacca.daylight.short=BDST -Asia/Dacca.generic.short=BDT -Asia/Dacca.standard.short=BDT -Asia/Damascus.daylight.short=EEST -Asia/Damascus.generic.short=EET -Asia/Damascus.standard.short=EET -Asia/Dhaka.daylight.short=BDST -Asia/Dhaka.generic.short=BDT -Asia/Dhaka.standard.short=BDT -Asia/Dili.daylight.short=TLST -Asia/Dili.generic.short=TLT -Asia/Dili.standard.short=TLT -Asia/Dubai.daylight.short=GDT -Asia/Dubai.generic.short=GT -Asia/Dubai.standard.short=GST -Asia/Dushanbe.daylight.short=TJST -Asia/Dushanbe.generic.short=TJT -Asia/Dushanbe.standard.short=TJT -Asia/Gaza.daylight.short=EEST -Asia/Gaza.generic.short=EET -Asia/Gaza.standard.short=EET -Asia/Harbin.daylight.short=CDT -Asia/Harbin.generic.short=CT -Asia/Harbin.standard.short=CST -Asia/Hebron.daylight.short=EEST -Asia/Hebron.generic.short=EET -Asia/Hebron.standard.short=EET -Asia/Ho_Chi_Minh.daylight.short=ICST -Asia/Ho_Chi_Minh.generic.short=ICT -Asia/Ho_Chi_Minh.standard.short=ICT -Asia/Hong_Kong.daylight.short=HKST -Asia/Hong_Kong.generic.short=HKT -Asia/Hong_Kong.standard.short=HKT -Asia/Hovd.daylight.short=HOVST -Asia/Hovd.generic.short=HOVT -Asia/Hovd.standard.short=HOVT -Asia/Irkutsk.daylight.short=IRKST -Asia/Irkutsk.generic.short=IRKT -Asia/Irkutsk.standard.short=IRKT -Asia/Istanbul.daylight.short=EEST -Asia/Istanbul.generic.short=EET -Asia/Istanbul.standard.short=EET -Asia/Jakarta.daylight.short=WIST -Asia/Jakarta.generic.short=WIB -Asia/Jakarta.standard.short=WIB -Asia/Jayapura.daylight.short=EIST -Asia/Jayapura.generic.short=WIT -Asia/Jayapura.standard.short=WIT -Asia/Jerusalem.daylight.short=IDT -Asia/Jerusalem.generic.short=IT -Asia/Jerusalem.standard.short=IST -Asia/Kabul.daylight.short=AFST -Asia/Kabul.generic.short=AFT -Asia/Kabul.standard.short=AFT -Asia/Kamchatka.daylight.short=PETST -Asia/Kamchatka.generic.short=PETT -Asia/Kamchatka.standard.short=PETT -Asia/Karachi.daylight.short=PKST -Asia/Karachi.generic.short=PKT -Asia/Karachi.standard.short=PKT -Asia/Kashgar.daylight.short=CDT -Asia/Kashgar.generic.short=CT -Asia/Kashgar.standard.short=CST -Asia/Kathmandu.daylight.short=NPST -Asia/Kathmandu.generic.short=NPT -Asia/Kathmandu.standard.short=NPT -Asia/Katmandu.daylight.short=NPST -Asia/Katmandu.generic.short=NPT -Asia/Katmandu.standard.short=NPT -Asia/Khandyga.daylight.short=YAKST -Asia/Khandyga.generic.short=YAKT -Asia/Khandyga.standard.short=YAKT -Asia/Kolkata.daylight.short=IDT -Asia/Kolkata.generic.short=IT -Asia/Kolkata.standard.short=IST -Asia/Krasnoyarsk.daylight.short=KRAST -Asia/Krasnoyarsk.generic.short=KRAT -Asia/Krasnoyarsk.standard.short=KRAT -Asia/Kuala_Lumpur.daylight.short=MYST -Asia/Kuala_Lumpur.generic.short=MYT -Asia/Kuala_Lumpur.standard.short=MYT -Asia/Kuching.daylight.short=MYST -Asia/Kuching.generic.short=MYT -Asia/Kuching.standard.short=MYT -Asia/Kuwait.daylight.short=ADT -Asia/Kuwait.generic.short=AT -Asia/Kuwait.standard.short=AST -Asia/Macao.daylight.short=CDT -Asia/Macao.generic.short=CT -Asia/Macao.standard.short=CST -Asia/Macau.daylight.short=CDT -Asia/Macau.generic.short=CT -Asia/Macau.standard.short=CST -Asia/Magadan.daylight.short=MAGST -Asia/Magadan.generic.short=MAGT -Asia/Magadan.standard.short=MAGT -Asia/Makassar.daylight.short=CIST -Asia/Makassar.generic.short=WITA -Asia/Makassar.standard.short=WITA -Asia/Manila.daylight.short=PHST -Asia/Manila.generic.short=PHT -Asia/Manila.standard.short=PHT -Asia/Muscat.daylight.short=GDT -Asia/Muscat.generic.short=GT -Asia/Muscat.standard.short=GST -Asia/Nicosia.daylight.short=EEST -Asia/Nicosia.generic.short=EET -Asia/Nicosia.standard.short=EET -Asia/Novokuznetsk.daylight.short=NOVST -Asia/Novokuznetsk.generic.short=NOVT -Asia/Novokuznetsk.standard.short=NOVT -Asia/Novosibirsk.daylight.short=NOVST -Asia/Novosibirsk.generic.short=NOVT -Asia/Novosibirsk.standard.short=NOVT -Asia/Omsk.daylight.short=OMSST -Asia/Omsk.generic.short=OMST -Asia/Omsk.standard.short=OMST -Asia/Oral.daylight.short=ORAST -Asia/Oral.generic.short=ORAT -Asia/Oral.standard.short=ORAT -Asia/Phnom_Penh.daylight.short=ICST -Asia/Phnom_Penh.generic.short=ICT -Asia/Phnom_Penh.standard.short=ICT -Asia/Pontianak.daylight.short=WIST -Asia/Pontianak.generic.short=WIB -Asia/Pontianak.standard.short=WIB -Asia/Pyongyang.daylight.short=KDT -Asia/Pyongyang.generic.short=KT -Asia/Pyongyang.standard.short=KST -Asia/Qatar.daylight.short=ADT -Asia/Qatar.generic.short=AT -Asia/Qatar.standard.short=AST -Asia/Qyzylorda.daylight.short=QYZST -Asia/Qyzylorda.generic.short=QYZT -Asia/Qyzylorda.standard.short=QYZT -Asia/Rangoon.daylight.short=MMST -Asia/Rangoon.generic.short=MMT -Asia/Rangoon.standard.short=MMT -Asia/Saigon.daylight.short=ICST -Asia/Saigon.generic.short=ICT -Asia/Saigon.standard.short=ICT -Asia/Sakhalin.daylight.short=SAKST -Asia/Sakhalin.generic.short=SAKT -Asia/Sakhalin.standard.short=SAKT -Asia/Samarkand.daylight.short=UZST -Asia/Samarkand.generic.short=UZT -Asia/Samarkand.standard.short=UZT -Asia/Seoul.daylight.short=KDT -Asia/Seoul.generic.short=KT -Asia/Seoul.standard.short=KST -Asia/Shanghai.daylight.short=CDT -Asia/Shanghai.generic.short=CT -Asia/Shanghai.standard.short=CST -Asia/Singapore.daylight.short=SGST -Asia/Singapore.generic.short=SGT -Asia/Singapore.standard.short=SGT -Asia/Taipei.daylight.short=CDT -Asia/Taipei.generic.short=CT -Asia/Taipei.standard.short=CST -Asia/Tashkent.daylight.short=UZST -Asia/Tashkent.generic.short=UZT -Asia/Tashkent.standard.short=UZT -Asia/Tbilisi.daylight.short=GEST -Asia/Tbilisi.generic.short=GET -Asia/Tbilisi.standard.short=GET -Asia/Tehran.daylight.short=IRDT -Asia/Tehran.generic.short=IRT -Asia/Tehran.standard.short=IRST -Asia/Tel_Aviv.daylight.short=IDT -Asia/Tel_Aviv.generic.short=IT -Asia/Tel_Aviv.standard.short=IST -Asia/Thimbu.daylight.short=BTST -Asia/Thimbu.generic.short=BTT -Asia/Thimbu.standard.short=BTT -Asia/Thimphu.daylight.short=BTST -Asia/Thimphu.generic.short=BTT -Asia/Thimphu.standard.short=BTT -Asia/Tokyo.daylight.short=JDT -Asia/Tokyo.generic.short=JT -Asia/Tokyo.standard.short=JST -Asia/Ujung_Pandang.daylight.short=CIST -Asia/Ujung_Pandang.generic.short=WITA -Asia/Ujung_Pandang.standard.short=WITA -Asia/Ulaanbaatar.daylight.short=ULAST -Asia/Ulaanbaatar.generic.short=ULAT -Asia/Ulaanbaatar.standard.short=ULAT -Asia/Ulan_Bator.daylight.short=ULAST -Asia/Ulan_Bator.generic.short=ULAT -Asia/Ulan_Bator.standard.short=ULAT -Asia/Urumqi.daylight.short=CDT -Asia/Urumqi.generic.short=CT -Asia/Urumqi.standard.short=CST -Asia/Ust-Nera.daylight.short=VLAST -Asia/Ust-Nera.generic.short=VLAT -Asia/Ust-Nera.standard.short=VLAT -Asia/Vientiane.daylight.short=ICST -Asia/Vientiane.generic.short=ICT -Asia/Vientiane.standard.short=ICT -Asia/Vladivostok.daylight.short=VLAST -Asia/Vladivostok.generic.short=VLAT -Asia/Vladivostok.standard.short=VLAT -Asia/Yakutsk.daylight.short=YAKST -Asia/Yakutsk.generic.short=YAKT -Asia/Yakutsk.standard.short=YAKT -Asia/Yekaterinburg.daylight.short=YEKST -Asia/Yekaterinburg.generic.short=YEKT -Asia/Yekaterinburg.standard.short=YEKT -Asia/Yerevan.daylight.short=AMST -Asia/Yerevan.generic.short=AMT -Asia/Yerevan.standard.short=AMT -AST.daylight.short=AKDT -AST.generic.short=AKT -AST.standard.short=AKST -Atlantic/Azores.daylight.short=AZOST -Atlantic/Azores.generic.short=AZOT -Atlantic/Azores.standard.short=AZOT -Atlantic/Bermuda.daylight.short=ADT -Atlantic/Bermuda.generic.short=AT -Atlantic/Bermuda.standard.short=AST -Atlantic/Canary.daylight.short=WEST -Atlantic/Canary.generic.short=WET -Atlantic/Canary.standard.short=WET -Atlantic/Cape_Verde.daylight.short=CVST -Atlantic/Cape_Verde.generic.short=CVT -Atlantic/Cape_Verde.standard.short=CVT -Atlantic/Faeroe.daylight.short=WEST -Atlantic/Faeroe.generic.short=WET -Atlantic/Faeroe.standard.short=WET -Atlantic/Faroe.daylight.short=WEST -Atlantic/Faroe.generic.short=WET -Atlantic/Faroe.standard.short=WET -Atlantic/Jan_Mayen.daylight.short=CEST -Atlantic/Jan_Mayen.generic.short=CET -Atlantic/Jan_Mayen.standard.short=CET -Atlantic/Madeira.daylight.short=WEST -Atlantic/Madeira.generic.short=WET -Atlantic/Madeira.standard.short=WET -Atlantic/Reykjavik.daylight.short=GMT -Atlantic/Reykjavik.generic.short=GMT -Atlantic/Reykjavik.standard.short=GMT -Atlantic/South_Georgia.daylight.short=GDT -Atlantic/South_Georgia.generic.short=GT -Atlantic/South_Georgia.standard.short=GST -Atlantic/Stanley.daylight.short=FKST -Atlantic/Stanley.generic.short=FKT -Atlantic/Stanley.standard.short=FKT -Atlantic/St_Helena.daylight.short=GMT -Atlantic/St_Helena.generic.short=GMT -Atlantic/St_Helena.standard.short=GMT -Australia/ACT.daylight.short=EST -Australia/ACT.generic.short=ET -Australia/ACT.standard.short=EST -Australia/Adelaide.daylight.short=CST -Australia/Adelaide.generic.short=CT -Australia/Adelaide.standard.short=CST -Australia/Brisbane.daylight.short=EST -Australia/Brisbane.generic.short=ET -Australia/Brisbane.standard.short=EST -Australia/Broken_Hill.daylight.short=CST -Australia/Broken_Hill.generic.short=CT -Australia/Broken_Hill.standard.short=CST -Australia/Canberra.daylight.short=EST -Australia/Canberra.generic.short=ET -Australia/Canberra.standard.short=EST -Australia/Currie.daylight.short=EST -Australia/Currie.generic.short=ET -Australia/Currie.standard.short=EST -Australia/Darwin.daylight.short=CST -Australia/Darwin.generic.short=CT -Australia/Darwin.standard.short=CST -Australia/Eucla.daylight.short=CWST -Australia/Eucla.generic.short=CWT -Australia/Eucla.standard.short=CWST -Australia/Hobart.daylight.short=EST -Australia/Hobart.generic.short=ET -Australia/Hobart.standard.short=EST -Australia/LHI.daylight.short=LHST -Australia/LHI.generic.short=LHT -Australia/LHI.standard.short=LHST -Australia/Lindeman.daylight.short=EST -Australia/Lindeman.generic.short=ET -Australia/Lindeman.standard.short=EST -Australia/Lord_Howe.daylight.short=LHST -Australia/Lord_Howe.generic.short=LHT -Australia/Lord_Howe.standard.short=LHST -Australia/Melbourne.daylight.short=EST -Australia/Melbourne.generic.short=ET -Australia/Melbourne.standard.short=EST -Australia/North.daylight.short=CST -Australia/North.generic.short=CT -Australia/North.standard.short=CST -Australia/NSW.daylight.short=EST -Australia/NSW.generic.short=ET -Australia/NSW.standard.short=EST -Australia/Perth.daylight.short=WST -Australia/Perth.generic.short=WT -Australia/Perth.standard.short=WST -Australia/Queensland.daylight.short=EST -Australia/Queensland.generic.short=ET -Australia/Queensland.standard.short=EST -Australia/South.daylight.short=CST -Australia/South.generic.short=CT -Australia/South.standard.short=CST -Australia/Sydney.daylight.short=EST -Australia/Sydney.generic.short=ET -Australia/Sydney.standard.short=EST -Australia/Tasmania.daylight.short=EST -Australia/Tasmania.generic.short=ET -Australia/Tasmania.standard.short=EST -Australia/Victoria.daylight.short=EST -Australia/Victoria.generic.short=ET -Australia/Victoria.standard.short=EST -Australia/West.daylight.short=WST -Australia/West.generic.short=WT -Australia/West.standard.short=WST -Australia/Yancowinna.daylight.short=CST -Australia/Yancowinna.generic.short=CT -Australia/Yancowinna.standard.short=CST -BET.daylight.short=BRST -BET.generic.short=BRT -BET.standard.short=BRT -Brazil/Acre.daylight.short=ACST -Brazil/Acre.generic.short=ACT -Brazil/Acre.standard.short=ACT -Brazil/DeNoronha.daylight.short=FNST -Brazil/DeNoronha.generic.short=FNT -Brazil/DeNoronha.standard.short=FNT -Brazil/East.daylight.short=BRST -Brazil/East.generic.short=BRT -Brazil/East.standard.short=BRT -Brazil/West.daylight.short=AMST -Brazil/West.generic.short=AMT -Brazil/West.standard.short=AMT -BST.daylight.short=BDST -BST.generic.short=BDT -BST.standard.short=BDT -Canada/Atlantic.daylight.short=ADT -Canada/Atlantic.generic.short=AT -Canada/Atlantic.standard.short=AST -Canada/Central.daylight.short=CDT -Canada/Central.generic.short=CT -Canada/Central.standard.short=CST -Canada/Eastern.daylight.short=EDT -Canada/Eastern.generic.short=ET -Canada/Eastern.standard.short=EST -Canada/East-Saskatchewan.daylight.short=CDT -Canada/East-Saskatchewan.generic.short=CT -Canada/East-Saskatchewan.standard.short=CST -Canada/Mountain.daylight.short=MDT -Canada/Mountain.generic.short=MT -Canada/Mountain.standard.short=MST -Canada/Newfoundland.daylight.short=NDT -Canada/Newfoundland.generic.short=NT -Canada/Newfoundland.standard.short=NST -Canada/Pacific.daylight.short=PDT -Canada/Pacific.generic.short=PT -Canada/Pacific.standard.short=PST -Canada/Saskatchewan.daylight.short=CDT -Canada/Saskatchewan.generic.short=CT -Canada/Saskatchewan.standard.short=CST -Canada/Yukon.daylight.short=PDT -Canada/Yukon.generic.short=PT -Canada/Yukon.standard.short=PST -CAT.daylight.short=CAST -CAT.generic.short=CAT -CAT.standard.short=CAT -CET.daylight.short=CEST -CET.generic.short=CET -CET.standard.short=CET -Chile/Continental.daylight.short=CLST -Chile/Continental.generic.short=CLT -Chile/Continental.standard.short=CLT -Chile/EasterIsland.daylight.short=EASST -Chile/EasterIsland.generic.short=EAST -Chile/EasterIsland.standard.short=EAST -CNT.daylight.short=NDT -CNT.generic.short=NT -CNT.standard.short=NST -CST6CDT.daylight.short=CDT -CST6CDT.generic.short=CT -CST6CDT.standard.short=CST -CST.daylight.short=CDT -CST.generic.short=CT -CST.standard.short=CST -CTT.daylight.short=CDT -CTT.generic.short=CT -CTT.standard.short=CST -Cuba.daylight.short=CDT -Cuba.generic.short=CT -Cuba.standard.short=CST -EAT.daylight.short=EAST -EAT.generic.short=EAT -EAT.standard.short=EAT -ECT.daylight.short=CEST -ECT.generic.short=CET -ECT.standard.short=CET -EET.daylight.short=EEST -EET.generic.short=EET -EET.standard.short=EET -Egypt.daylight.short=EEST -Egypt.generic.short=EET -Egypt.standard.short=EET -Eire.daylight.short=IST -Eire.generic.short=IT -Eire.standard.short=GMT -EST5EDT.daylight.short=EDT -EST5EDT.generic.short=ET -EST5EDT.standard.short=EST -EST.daylight.short=EDT -EST.generic.short=ET -EST.standard.short=EST -Etc/Greenwich.daylight.short=GMT -Etc/Greenwich.generic.short=GMT -Etc/Greenwich.standard.short=GMT -Etc/UCT.daylight.short=UTC -Etc/UCT.generic.short=UTC -Etc/UCT.standard.short=UTC -Etc/Universal.daylight.short=UTC -Etc/Universal.generic.short=UTC -Etc/Universal.standard.short=UTC -Etc/UTC.daylight.short=UTC -Etc/UTC.generic.short=UTC -Etc/UTC.standard.short=UTC -Etc/Zulu.daylight.short=UTC -Etc/Zulu.generic.short=UTC -Etc/Zulu.standard.short=UTC -Europe/Amsterdam.daylight.short=CEST -Europe/Amsterdam.generic.short=CET -Europe/Amsterdam.standard.short=CET -Europe/Andorra.daylight.short=CEST -Europe/Andorra.generic.short=CET -Europe/Andorra.standard.short=CET -Europe/Athens.daylight.short=EEST -Europe/Athens.generic.short=EET -Europe/Athens.standard.short=EET -Europe/Belfast.daylight.short=BST -Europe/Belfast.generic.short=BT -Europe/Belfast.standard.short=GMT -Europe/Belgrade.daylight.short=CEST -Europe/Belgrade.generic.short=CET -Europe/Belgrade.standard.short=CET -Europe/Berlin.daylight.short=CEST -Europe/Berlin.generic.short=CET -Europe/Berlin.standard.short=CET -Europe/Bratislava.daylight.short=CEST -Europe/Bratislava.generic.short=CET -Europe/Bratislava.standard.short=CET -Europe/Brussels.daylight.short=CEST -Europe/Brussels.generic.short=CET -Europe/Brussels.standard.short=CET -Europe/Bucharest.daylight.short=EEST -Europe/Bucharest.generic.short=EET -Europe/Bucharest.standard.short=EET -Europe/Budapest.daylight.short=CEST -Europe/Budapest.generic.short=CET -Europe/Budapest.standard.short=CET -Europe/Busingen.daylight.short=CEST -Europe/Busingen.generic.short=CET -Europe/Busingen.standard.short=CET -Europe/Chisinau.daylight.short=EEST -Europe/Chisinau.generic.short=EET -Europe/Chisinau.standard.short=EET -Europe/Copenhagen.daylight.short=CEST -Europe/Copenhagen.generic.short=CET -Europe/Copenhagen.standard.short=CET -Europe/Dublin.daylight.short=IST -Europe/Dublin.generic.short=IT -Europe/Dublin.standard.short=GMT -Europe/Gibraltar.daylight.short=CEST -Europe/Gibraltar.generic.short=CET -Europe/Gibraltar.standard.short=CET -Europe/Guernsey.daylight.short=BST -Europe/Guernsey.generic.short=BT -Europe/Guernsey.standard.short=GMT -Europe/Helsinki.daylight.short=EEST -Europe/Helsinki.generic.short=EET -Europe/Helsinki.standard.short=EET -Europe/Isle_of_Man.daylight.short=BST -Europe/Isle_of_Man.generic.short=BT -Europe/Isle_of_Man.standard.short=GMT -Europe/Istanbul.daylight.short=EEST -Europe/Istanbul.generic.short=EET -Europe/Istanbul.standard.short=EET -Europe/Jersey.daylight.short=BST -Europe/Jersey.generic.short=BT -Europe/Jersey.standard.short=GMT -Europe/Kaliningrad.daylight.short=FEST -Europe/Kaliningrad.generic.short=FET -Europe/Kaliningrad.standard.short=FET -Europe/Kiev.daylight.short=EEST -Europe/Kiev.generic.short=EET -Europe/Kiev.standard.short=EET -Europe/Lisbon.daylight.short=WEST -Europe/Lisbon.generic.short=WET -Europe/Lisbon.standard.short=WET -Europe/Ljubljana.daylight.short=CEST -Europe/Ljubljana.generic.short=CET -Europe/Ljubljana.standard.short=CET -Europe/London.daylight.short=BST -Europe/London.generic.short=BT -Europe/London.standard.short=GMT -Europe/Luxembourg.daylight.short=CEST -Europe/Luxembourg.generic.short=CET -Europe/Luxembourg.standard.short=CET -Europe/Madrid.daylight.short=CEST -Europe/Madrid.generic.short=CET -Europe/Madrid.standard.short=CET -Europe/Malta.daylight.short=CEST -Europe/Malta.generic.short=CET -Europe/Malta.standard.short=CET -Europe/Mariehamn.daylight.short=EEST -Europe/Mariehamn.generic.short=EET -Europe/Mariehamn.standard.short=EET -Europe/Minsk.daylight.short=FEST -Europe/Minsk.generic.short=FET -Europe/Minsk.standard.short=FET -Europe/Monaco.daylight.short=CEST -Europe/Monaco.generic.short=CET -Europe/Monaco.standard.short=CET -Europe/Moscow.daylight.short=MSD -Europe/Moscow.generic.short=MT -Europe/Moscow.standard.short=MSK -Europe/Nicosia.daylight.short=EEST -Europe/Nicosia.generic.short=EET -Europe/Nicosia.standard.short=EET -Europe/Oslo.daylight.short=CEST -Europe/Oslo.generic.short=CET -Europe/Oslo.standard.short=CET -Europe/Paris.daylight.short=CEST -Europe/Paris.generic.short=CET -Europe/Paris.standard.short=CET -Europe/Podgorica.daylight.short=CEST -Europe/Podgorica.generic.short=CET -Europe/Podgorica.standard.short=CET -Europe/Prague.daylight.short=CEST -Europe/Prague.generic.short=CET -Europe/Prague.standard.short=CET -Europe/Riga.daylight.short=EEST -Europe/Riga.generic.short=EET -Europe/Riga.standard.short=EET -Europe/Rome.daylight.short=CEST -Europe/Rome.generic.short=CET -Europe/Rome.standard.short=CET -Europe/Samara.daylight.short=SAMST -Europe/Samara.generic.short=SAMT -Europe/Samara.standard.short=SAMT -Europe/San_Marino.daylight.short=CEST -Europe/San_Marino.generic.short=CET -Europe/San_Marino.standard.short=CET -Europe/Sarajevo.daylight.short=CEST -Europe/Sarajevo.generic.short=CET -Europe/Sarajevo.standard.short=CET -Europe/Simferopol.daylight.short=EEST -Europe/Simferopol.generic.short=EET -Europe/Simferopol.standard.short=EET -Europe/Skopje.daylight.short=CEST -Europe/Skopje.generic.short=CET -Europe/Skopje.standard.short=CET -Europe/Sofia.daylight.short=EEST -Europe/Sofia.generic.short=EET -Europe/Sofia.standard.short=EET -Europe/Stockholm.daylight.short=CEST -Europe/Stockholm.generic.short=CET -Europe/Stockholm.standard.short=CET -Europe/Tallinn.daylight.short=EEST -Europe/Tallinn.generic.short=EET -Europe/Tallinn.standard.short=EET -Europe/Tirane.daylight.short=CEST -Europe/Tirane.generic.short=CET -Europe/Tirane.standard.short=CET -Europe/Tiraspol.daylight.short=EEST -Europe/Tiraspol.generic.short=EET -Europe/Tiraspol.standard.short=EET -Europe/Uzhgorod.daylight.short=EEST -Europe/Uzhgorod.generic.short=EET -Europe/Uzhgorod.standard.short=EET -Europe/Vaduz.daylight.short=CEST -Europe/Vaduz.generic.short=CET -Europe/Vaduz.standard.short=CET -Europe/Vatican.daylight.short=CEST -Europe/Vatican.generic.short=CET -Europe/Vatican.standard.short=CET -Europe/Vienna.daylight.short=CEST -Europe/Vienna.generic.short=CET -Europe/Vienna.standard.short=CET -Europe/Vilnius.daylight.short=EEST -Europe/Vilnius.generic.short=EET -Europe/Vilnius.standard.short=EET -Europe/Volgograd.daylight.short=VOLST -Europe/Volgograd.generic.short=VOLT -Europe/Volgograd.standard.short=VOLT -Europe/Warsaw.daylight.short=CEST -Europe/Warsaw.generic.short=CET -Europe/Warsaw.standard.short=CET -Europe/Zagreb.daylight.short=CEST -Europe/Zagreb.generic.short=CET -Europe/Zagreb.standard.short=CET -Europe/Zaporozhye.daylight.short=EEST -Europe/Zaporozhye.generic.short=EET -Europe/Zaporozhye.standard.short=EET -Europe/Zurich.daylight.short=CEST -Europe/Zurich.generic.short=CET -Europe/Zurich.standard.short=CET -GB.daylight.short=BST -GB-Eire.daylight.short=BST -GB-Eire.generic.short=BT -GB-Eire.standard.short=GMT -GB.generic.short=BT -GB.standard.short=GMT -GMT.daylight.short=GMT -GMT.generic.short=GMT -GMT.standard.short=GMT -Greenwich.daylight.short=GMT -Greenwich.generic.short=GMT -Greenwich.standard.short=GMT -Hongkong.daylight.short=HKST -Hongkong.generic.short=HKT -Hongkong.standard.short=HKT -HST.daylight.short=HDT -HST.generic.short=HT -HST.standard.short=HST -Iceland.daylight.short=GMT -Iceland.generic.short=GMT -Iceland.standard.short=GMT -IET.daylight.short=EDT -IET.generic.short=ET -IET.standard.short=EST -Indian/Antananarivo.daylight.short=EAST -Indian/Antananarivo.generic.short=EAT -Indian/Antananarivo.standard.short=EAT -Indian/Chagos.daylight.short=IOST -Indian/Chagos.generic.short=IOT -Indian/Chagos.standard.short=IOT -Indian/Christmas.daylight.short=CXST -Indian/Christmas.generic.short=CIT -Indian/Christmas.standard.short=CXT -Indian/Cocos.daylight.short=CCST -Indian/Cocos.generic.short=CCT -Indian/Cocos.standard.short=CCT -Indian/Comoro.daylight.short=EAST -Indian/Comoro.generic.short=EAT -Indian/Comoro.standard.short=EAT -Indian/Kerguelen.daylight.short=TFST -Indian/Kerguelen.generic.short=TFT -Indian/Kerguelen.standard.short=TFT -Indian/Mahe.daylight.short=SCST -Indian/Mahe.generic.short=SCT -Indian/Mahe.standard.short=SCT -Indian/Maldives.daylight.short=MVST -Indian/Maldives.generic.short=MVT -Indian/Maldives.standard.short=MVT -Indian/Mauritius.daylight.short=MUST -Indian/Mauritius.generic.short=MUT -Indian/Mauritius.standard.short=MUT -Indian/Mayotte.daylight.short=EAST -Indian/Mayotte.generic.short=EAT -Indian/Mayotte.standard.short=EAT -Indian/Reunion.daylight.short=REST -Indian/Reunion.generic.short=RET -Indian/Reunion.standard.short=RET -Iran.daylight.short=IRDT -Iran.generic.short=IRT -Iran.standard.short=IRST -Israel.daylight.short=IDT -Israel.generic.short=IT -Israel.standard.short=IST -IST.daylight.short=IDT -IST.generic.short=IT -IST.standard.short=IST -Jamaica.daylight.short=EDT -Jamaica.generic.short=ET -Jamaica.standard.short=EST -Japan.daylight.short=JDT -Japan.generic.short=JT -Japan.standard.short=JST -JST.daylight.short=JDT -JST.generic.short=JT -JST.standard.short=JST -Kwajalein.daylight.short=MHST -Kwajalein.generic.short=MHT -Kwajalein.standard.short=MHT -Libya.daylight.short=EEST -Libya.generic.short=EET -Libya.standard.short=EET -MET.daylight.short=MEST -MET.generic.short=MET -MET.standard.short=MET -Mexico/BajaNorte.daylight.short=PDT -Mexico/BajaNorte.generic.short=PT -Mexico/BajaNorte.standard.short=PST -Mexico/BajaSur.daylight.short=MDT -Mexico/BajaSur.generic.short=MT -Mexico/BajaSur.standard.short=MST -Mexico/General.daylight.short=CDT -Mexico/General.generic.short=CT -Mexico/General.standard.short=CST -MIT.daylight.short=WSDT -MIT.generic.short=WST -MIT.standard.short=WST -MST7MDT.daylight.short=MDT -MST7MDT.generic.short=MT -MST7MDT.standard.short=MST -MST.daylight.short=MDT -MST.generic.short=MT -MST.standard.short=MST -Navajo.daylight.short=MDT -Navajo.generic.short=MT -Navajo.standard.short=MST -NET.daylight.short=AMST -NET.generic.short=AMT -NET.standard.short=AMT -NST.daylight.short=NZDT -NST.generic.short=NZT -NST.standard.short=NZST -NZ-CHAT.daylight.short=CHADT -NZ-CHAT.generic.short=CHAT -NZ-CHAT.standard.short=CHAST -NZ.daylight.short=NZDT -NZ.generic.short=NZT -NZ.standard.short=NZST -Pacific/Apia.daylight.short=WSDT -Pacific/Apia.generic.short=WST -Pacific/Apia.standard.short=WST -Pacific/Auckland.daylight.short=NZDT -Pacific/Auckland.generic.short=NZT -Pacific/Auckland.standard.short=NZST -Pacific/Chatham.daylight.short=CHADT -Pacific/Chatham.generic.short=CHAT -Pacific/Chatham.standard.short=CHAST -Pacific/Chuuk.daylight.short=CHUST -Pacific/Chuuk.generic.short=CHUT -Pacific/Chuuk.standard.short=CHUT -Pacific/Easter.daylight.short=EASST -Pacific/Easter.generic.short=EAST -Pacific/Easter.standard.short=EAST -Pacific/Efate.daylight.short=VUST -Pacific/Efate.generic.short=VUT -Pacific/Efate.standard.short=VUT -Pacific/Enderbury.daylight.short=PHOST -Pacific/Enderbury.generic.short=PHOT -Pacific/Enderbury.standard.short=PHOT -Pacific/Fakaofo.daylight.short=TKST -Pacific/Fakaofo.generic.short=TKT -Pacific/Fakaofo.standard.short=TKT -Pacific/Fiji.daylight.short=FJST -Pacific/Fiji.generic.short=FJT -Pacific/Fiji.standard.short=FJT -Pacific/Funafuti.daylight.short=TVST -Pacific/Funafuti.generic.short=TVT -Pacific/Funafuti.standard.short=TVT -Pacific/Galapagos.daylight.short=GALST -Pacific/Galapagos.generic.short=GALT -Pacific/Galapagos.standard.short=GALT -Pacific/Gambier.daylight.short=GAMST -Pacific/Gambier.generic.short=GAMT -Pacific/Gambier.standard.short=GAMT -Pacific/Guadalcanal.daylight.short=SBST -Pacific/Guadalcanal.generic.short=SBT -Pacific/Guadalcanal.standard.short=SBT -Pacific/Guam.daylight.short=ChDT -Pacific/Guam.generic.short=ChT -Pacific/Guam.standard.short=ChST -Pacific/Honolulu.daylight.short=HDT -Pacific/Honolulu.generic.short=HT -Pacific/Honolulu.standard.short=HST -Pacific/Johnston.daylight.short=HDT -Pacific/Johnston.generic.short=HT -Pacific/Johnston.standard.short=HST -Pacific/Kiritimati.daylight.short=LINST -Pacific/Kiritimati.generic.short=LINT -Pacific/Kiritimati.standard.short=LINT -Pacific/Kosrae.daylight.short=KOSST -Pacific/Kosrae.generic.short=KOST -Pacific/Kosrae.standard.short=KOST -Pacific/Kwajalein.daylight.short=MHST -Pacific/Kwajalein.generic.short=MHT -Pacific/Kwajalein.standard.short=MHT -Pacific/Majuro.daylight.short=MHST -Pacific/Majuro.generic.short=MHT -Pacific/Majuro.standard.short=MHT -Pacific/Marquesas.daylight.short=MARST -Pacific/Marquesas.generic.short=MART -Pacific/Marquesas.standard.short=MART -Pacific/Midway.daylight.short=SDT -Pacific/Midway.generic.short=ST -Pacific/Midway.standard.short=SST -Pacific/Nauru.daylight.short=NRST -Pacific/Nauru.generic.short=NRT -Pacific/Nauru.standard.short=NRT -Pacific/Niue.daylight.short=NUST -Pacific/Niue.generic.short=NUT -Pacific/Niue.standard.short=NUT -Pacific/Norfolk.daylight.short=NFST -Pacific/Norfolk.generic.short=NFT -Pacific/Norfolk.standard.short=NFT -Pacific/Noumea.daylight.short=NCST -Pacific/Noumea.generic.short=NCT -Pacific/Noumea.standard.short=NCT -Pacific/Pago_Pago.daylight.short=SDT -Pacific/Pago_Pago.generic.short=ST -Pacific/Pago_Pago.standard.short=SST -Pacific/Palau.daylight.short=PWST -Pacific/Palau.generic.short=PWT -Pacific/Palau.standard.short=PWT -Pacific/Pitcairn.daylight.short=PDT -Pacific/Pitcairn.generic.short=PT -Pacific/Pitcairn.standard.short=PST -Pacific/Pohnpei.daylight.short=PONST -Pacific/Pohnpei.generic.short=PONT -Pacific/Pohnpei.standard.short=PONT -Pacific/Ponape.daylight.short=PONST -Pacific/Ponape.generic.short=PONT -Pacific/Ponape.standard.short=PONT -Pacific/Port_Moresby.daylight.short=PGST -Pacific/Port_Moresby.generic.short=PGT -Pacific/Port_Moresby.standard.short=PGT -Pacific/Rarotonga.daylight.short=CKHST -Pacific/Rarotonga.generic.short=CKT -Pacific/Rarotonga.standard.short=CKT -Pacific/Saipan.daylight.short=ChDT -Pacific/Saipan.generic.short=ChT -Pacific/Saipan.standard.short=ChST -Pacific/Samoa.daylight.short=SDT -Pacific/Samoa.generic.short=ST -Pacific/Samoa.standard.short=SST -Pacific/Tahiti.daylight.short=TAHST -Pacific/Tahiti.generic.short=TAHT -Pacific/Tahiti.standard.short=TAHT -Pacific/Tarawa.daylight.short=GILST -Pacific/Tarawa.generic.short=GILT -Pacific/Tarawa.standard.short=GILT -Pacific/Tongatapu.daylight.short=TOST -Pacific/Tongatapu.generic.short=TOT -Pacific/Tongatapu.standard.short=TOT -Pacific/Truk.daylight.short=CHUST -Pacific/Truk.generic.short=CHUT -Pacific/Truk.standard.short=CHUT -Pacific/Wake.daylight.short=WAKST -Pacific/Wake.generic.short=WAKT -Pacific/Wake.standard.short=WAKT -Pacific/Wallis.daylight.short=WFST -Pacific/Wallis.generic.short=WFT -Pacific/Wallis.standard.short=WFT -Pacific/Yap.daylight.short=CHUST -Pacific/Yap.generic.short=CHUT -Pacific/Yap.standard.short=CHUT -PLT.daylight.short=PKST -PLT.generic.short=PKT -PLT.standard.short=PKT -PNT.daylight.short=MDT -PNT.generic.short=MT -PNT.standard.short=MST -Poland.daylight.short=CEST -Poland.generic.short=CET -Poland.standard.short=CET -Portugal.daylight.short=WEST -Portugal.generic.short=WET -Portugal.standard.short=WET -PRC.daylight.short=CDT -PRC.generic.short=CT -PRC.standard.short=CST -PRT.daylight.short=ADT -PRT.generic.short=AT -PRT.standard.short=AST -PST8PDT.daylight.short=PDT -PST8PDT.generic.short=PT -PST8PDT.standard.short=PST -PST.daylight.short=PDT -PST.generic.short=PT -PST.standard.short=PST -ROK.daylight.short=KDT -ROK.generic.short=KT -ROK.standard.short=KST -Singapore.daylight.short=SGST -Singapore.generic.short=SGT -Singapore.standard.short=SGT -SST.daylight.short=SBST -SST.generic.short=SBT -SST.standard.short=SBT -SystemV/AST4ADT.daylight.short=ADT -SystemV/AST4ADT.generic.short=AT -SystemV/AST4ADT.standard.short=AST -SystemV/AST4.daylight.short=ADT -SystemV/AST4.generic.short=AT -SystemV/AST4.standard.short=AST -SystemV/CST6CDT.daylight.short=CDT -SystemV/CST6CDT.generic.short=CT -SystemV/CST6CDT.standard.short=CST -SystemV/CST6.daylight.short=CDT -SystemV/CST6.generic.short=CT -SystemV/CST6.standard.short=CST -SystemV/EST5.daylight.short=EDT -SystemV/EST5EDT.daylight.short=EDT -SystemV/EST5EDT.generic.short=ET -SystemV/EST5EDT.standard.short=EST -SystemV/EST5.generic.short=ET -SystemV/EST5.standard.short=EST -SystemV/HST10.daylight.short=HDT -SystemV/HST10.generic.short=HT -SystemV/HST10.standard.short=HST -SystemV/MST7.daylight.short=MDT -SystemV/MST7.generic.short=MT -SystemV/MST7MDT.daylight.short=MDT -SystemV/MST7MDT.generic.short=MT -SystemV/MST7MDT.standard.short=MST -SystemV/MST7.standard.short=MST -SystemV/PST8.daylight.short=PDT -SystemV/PST8.generic.short=PT -SystemV/PST8PDT.daylight.short=PDT -SystemV/PST8PDT.generic.short=PT -SystemV/PST8PDT.standard.short=PST -SystemV/PST8.standard.short=PST -SystemV/YST9.daylight.short=AKDT -SystemV/YST9.generic.short=AKT -SystemV/YST9.standard.short=AKST -SystemV/YST9YDT.daylight.short=AKDT -SystemV/YST9YDT.generic.short=AKT -SystemV/YST9YDT.standard.short=AKST -Turkey.daylight.short=EEST -Turkey.generic.short=EET -Turkey.standard.short=EET -UCT.daylight.short=UTC -UCT.generic.short=UTC -UCT.standard.short=UTC -Universal.daylight.short=UTC -Universal.generic.short=UTC -Universal.standard.short=UTC -US/Alaska.daylight.short=AKDT -US/Alaska.generic.short=AKT -US/Alaska.standard.short=AKST -US/Aleutian.daylight.short=HADT -US/Aleutian.generic.short=HAT -US/Aleutian.standard.short=HAST -US/Arizona.daylight.short=MDT -US/Arizona.generic.short=MT -US/Arizona.standard.short=MST -US/Central.daylight.short=CDT -US/Central.generic.short=CT -US/Central.standard.short=CST -US/Eastern.daylight.short=EDT -US/Eastern.generic.short=ET -US/Eastern.standard.short=EST -US/East-Indiana.daylight.short=EDT -US/East-Indiana.generic.short=ET -US/East-Indiana.standard.short=EST -US/Hawaii.daylight.short=HDT -US/Hawaii.generic.short=HT -US/Hawaii.standard.short=HST -US/Indiana-Starke.daylight.short=CDT -US/Indiana-Starke.generic.short=CT -US/Indiana-Starke.standard.short=CST -US/Michigan.daylight.short=EDT -US/Michigan.generic.short=ET -US/Michigan.standard.short=EST -US/Mountain.daylight.short=MDT -US/Mountain.generic.short=MT -US/Mountain.standard.short=MST -US/Pacific.daylight.short=PDT -US/Pacific.generic.short=PT -US/Pacific-New.daylight.short=PDT -US/Pacific-New.generic.short=PT -US/Pacific-New.standard.short=PST -US/Pacific.standard.short=PST -US/Samoa.daylight.short=SDT -US/Samoa.generic.short=ST -US/Samoa.standard.short=SST -UTC.daylight.short=UTC -UTC.generic.short=UTC -UTC.standard.short=UTC -VST.daylight.short=ICST -VST.generic.short=ICT -VST.standard.short=ICT -WET.daylight.short=WEST -WET.generic.short=WET -WET.standard.short=WET -W-SU.daylight.short=MSD -W-SU.generic.short=MT -W-SU.standard.short=MSK -Zulu.daylight.short=UTC -Zulu.generic.short=UTC -Zulu.standard.short=UTC diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ja.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ja.properties deleted file mode 100644 index ac5a86d36ba..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ja.properties +++ /dev/null @@ -1,651 +0,0 @@ -ACT.daylight.long=\u4E2D\u90E8\u590F\u6642\u9593(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC) -ACT.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC) -ACT.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC) -AET.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -AET.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -AET.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -AGT.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -ART.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -AST.generic.long=\u30A2\u30E9\u30B9\u30AB\u6642\u9593 -Africa/Abidjan.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Africa/Accra.generic.long=\u30AC\u30FC\u30CA\u6A19\u6E96\u6642 -Africa/Addis_Ababa.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Algiers.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Africa/Asmara.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Asmera.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Bamako.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Africa/Bangui.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Banjul.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Africa/Bissau.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Africa/Blantyre.generic.long=\u4E2D\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Brazzaville.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Bujumbura.generic.long=\u4E2D\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Cairo.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Africa/Casablanca.generic.long=\u897F\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Africa/Ceuta.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Africa/Conakry.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Africa/Dakar.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Africa/Dar_es_Salaam.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Djibouti.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Douala.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/El_Aaiun.generic.long=\u897F\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Africa/Freetown.generic.long=\u30B7\u30A8\u30E9\u30EC\u30AA\u30CD\u6642\u9593 -Africa/Gaborone.generic.long=\u4E2D\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Harare.generic.long=\u4E2D\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Johannesburg.generic.long=\u5357\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Juba.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Kampala.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Khartoum.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Kigali.generic.long=\u4E2D\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Kinshasa.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Lagos.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Libreville.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Lome.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Africa/Luanda.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Lubumbashi.generic.long=\u4E2D\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Lusaka.generic.long=\u4E2D\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Malabo.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Maputo.generic.long=\u4E2D\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Maseru.generic.long=\u5357\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Mbabane.generic.long=\u5357\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Mogadishu.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Monrovia.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Africa/Nairobi.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Ndjamena.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Niamey.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Nouakchott.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Africa/Ouagadougou.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Africa/Porto-Novo.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Africa/Sao_Tome.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Africa/Timbuktu.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Africa/Tripoli.generic.long=\u6771\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593 -Africa/Tunis.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Africa/Windhoek.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -America/Adak.generic.long=\u30CF\u30EF\u30A4\u30FB\u30A2\u30EA\u30E5\u30FC\u30B7\u30E3\u30F3\u6642\u9593 -America/Anchorage.generic.long=\u30A2\u30E9\u30B9\u30AB\u6642\u9593 -America/Anguilla.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Antigua.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Araguaina.generic.long=\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593 -America/Argentina/Buenos_Aires.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Argentina/Catamarca.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Argentina/ComodRivadavia.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Argentina/Cordoba.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Argentina/Jujuy.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Argentina/La_Rioja.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Argentina/Mendoza.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Argentina/Rio_Gallegos.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Argentina/Salta.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Argentina/San_Juan.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Argentina/San_Luis.generic.long=\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u6642\u9593 -America/Argentina/Tucuman.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Argentina/Ushuaia.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Aruba.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Asuncion.generic.long=\u30D1\u30E9\u30B0\u30A2\u30A4\u6642\u9593 -America/Atikokan.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Atka.generic.long=\u30CF\u30EF\u30A4\u30FB\u30A2\u30EA\u30E5\u30FC\u30B7\u30E3\u30F3\u6642\u9593 -America/Bahia.generic.long=\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593 -America/Bahia_Banderas.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Barbados.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Belem.generic.long=\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593 -America/Belize.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Blanc-Sablon.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Boa_Vista.generic.long=\u30A2\u30DE\u30BE\u30F3\u6642\u9593 -America/Bogota.generic.long=\u30B3\u30ED\u30F3\u30D3\u30A2\u6642\u9593 -America/Boise.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -America/Buenos_Aires.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Cambridge_Bay.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -America/Campo_Grande.generic.long=\u30A2\u30DE\u30BE\u30F3\u6642\u9593 -America/Cancun.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Caracas.generic.long=\u30D9\u30CD\u30BA\u30A8\u30E9\u6642\u9593 -America/Catamarca.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Cayenne.generic.long=\u30D5\u30E9\u30F3\u30B9\u9818\u30AE\u30A2\u30CA\u6642\u9593 -America/Cayman.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Chicago.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Chihuahua.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -America/Coral_Harbour.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Cordoba.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Costa_Rica.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Creston.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -America/Cuiaba.generic.long=\u30A2\u30DE\u30BE\u30F3\u6642\u9593 -America/Curacao.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Danmarkshavn.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -America/Dawson.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642 -America/Dawson_Creek.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -America/Denver.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -America/Detroit.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Dominica.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Edmonton.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -America/Eirunepe.generic.long=\u30a2\u30af\u30ec\u6642\u9593 -America/El_Salvador.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Ensenada.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642 -America/Fort_Wayne.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Fortaleza.generic.long=\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593 -America/Glace_Bay.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Godthab.generic.long=\u897F\u90E8\u30B0\u30EA\u30FC\u30F3\u30E9\u30F3\u30C9\u6642\u9593 -America/Goose_Bay.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Grand_Turk.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Grenada.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Guadeloupe.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Guatemala.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Guayaquil.generic.long=\u30A8\u30AF\u30A2\u30C9\u30EB\u6642\u9593 -America/Guyana.generic.long=\u30AC\u30A4\u30A2\u30CA\u6642\u9593 -America/Halifax.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Havana.generic.long=\u30AD\u30E5\u30FC\u30D0\u6642\u9593 -America/Hermosillo.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -America/Indiana/Indianapolis.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Indiana/Knox.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Indiana/Marengo.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Indiana/Petersburg.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Indiana/Tell_City.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Indiana/Vevay.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Indiana/Vincennes.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Indiana/Winamac.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Indianapolis.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Inuvik.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -America/Iqaluit.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Jamaica.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Jujuy.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Juneau.generic.long=\u30A2\u30E9\u30B9\u30AB\u6642\u9593 -America/Kentucky/Louisville.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Kentucky/Monticello.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Knox_IN.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Kralendijk.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/La_Paz.generic.long=\u30DC\u30EA\u30D3\u30A2\u6642\u9593 -America/Lima.generic.long=\u30DA\u30EB\u30FC\u6642\u9593 -America/Los_Angeles.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642 -America/Louisville.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Lower_Princes.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Maceio.generic.long=\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593 -America/Managua.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Manaus.generic.long=\u30A2\u30DE\u30BE\u30F3\u6642\u9593 -America/Marigot.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Martinique.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Matamoros.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Mazatlan.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -America/Mendoza.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Menominee.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Merida.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Metlakatla.daylight.long=\u30E1\u30C8\u30E9\u30AB\u30C8\u30E9\u590F\u6642\u9593 -America/Metlakatla.generic.long=\u30E1\u30C8\u30E9\u30AB\u30C8\u30E9\u6642\u9593 -America/Metlakatla.standard.long=\u30E1\u30C8\u30E9\u30AB\u30C8\u30E9\u6A19\u6E96\u6642\u9593 -America/Mexico_City.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Miquelon.generic.long=\u30D4\u30A8\u30FC\u30EB\u30FB\u30DF\u30AF\u30ED\u30F3\u6642\u9593 -America/Moncton.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Monterrey.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Montevideo.generic.long=\u30A6\u30EB\u30B0\u30A2\u30A4\u6642\u9593 -America/Montreal.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Montserrat.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Nassau.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/New_York.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Nipigon.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Nome.generic.long=\u30A2\u30E9\u30B9\u30AB\u6642\u9593 -America/Noronha.generic.long=\u30D5\u30A7\u30EB\u30CA\u30F3\u30C9\u30FB\u30C7\u30FB\u30CE\u30ED\u30FC\u30CB\u30E3\u6642\u9593 -America/North_Dakota/Beulah.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/North_Dakota/Center.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/North_Dakota/New_Salem.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Ojinaga.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -America/Panama.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Pangnirtung.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Paramaribo.generic.long=\u30B9\u30EA\u30CA\u30E0\u6642\u9593 -America/Phoenix.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -America/Port-au-Prince.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Port_of_Spain.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Porto_Acre.generic.long=\u30a2\u30af\u30ec\u6642\u9593 -America/Porto_Velho.generic.long=\u30A2\u30DE\u30BE\u30F3\u6642\u9593 -America/Puerto_Rico.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Rainy_River.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Rankin_Inlet.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Recife.generic.long=\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593 -America/Regina.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Resolute.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Rio_Branco.generic.long=\u30a2\u30af\u30ec\u6642\u9593 -America/Rosario.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593 -America/Santa_Isabel.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642 -America/Santarem.generic.long=\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593 -America/Santiago.generic.long=\u30C1\u30EA\u6642\u9593 -America/Santo_Domingo.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Sao_Paulo.generic.long=\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593 -America/Scoresbysund.generic.long=\u6771\u90E8\u30B0\u30EA\u30FC\u30F3\u30E9\u30F3\u30C9\u6642\u9593 -America/Shiprock.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -America/Sitka.generic.long=\u30A2\u30E9\u30B9\u30AB\u6642\u9593 -America/St_Barthelemy.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/St_Johns.generic.long=\u30CB\u30E5\u30FC\u30D5\u30A1\u30F3\u30C9\u30E9\u30F3\u30C9\u6642\u9593 -America/St_Kitts.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/St_Lucia.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/St_Thomas.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/St_Vincent.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Swift_Current.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Tegucigalpa.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Thule.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Thunder_Bay.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Tijuana.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642 -America/Toronto.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -America/Tortola.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Vancouver.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642 -America/Virgin.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -America/Whitehorse.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642 -America/Winnipeg.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -America/Yakutat.generic.long=\u30A2\u30E9\u30B9\u30AB\u6642\u9593 -America/Yellowknife.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -Antarctica/Casey.daylight.long=\u897F\u90E8\u590F\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Antarctica/Casey.generic.long=\u897F\u90E8\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Antarctica/Casey.standard.long=\u897F\u90E8\u6A19\u6E96\u6642(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Antarctica/Davis.generic.long=\u30C7\u30FC\u30D3\u30B9\u6642\u9593 -Antarctica/DumontDUrville.generic.long=\u30C7\u30E5\u30E2\u30F3\u30FB\u30C7\u30E5\u30EB\u30D3\u30EB\u6642\u9593 -Antarctica/Macquarie.daylight.long=\u30DE\u30C3\u30B3\u30FC\u30EA\u30FC\u5CF6\u590F\u6642\u9593 -Antarctica/Macquarie.generic.long=\u30DE\u30C3\u30B3\u30FC\u30EA\u30FC\u5CF6\u6642\u9593 -Antarctica/Macquarie.standard.long=\u30DE\u30C3\u30B3\u30FC\u30EA\u30FC\u5CF6\u6642\u9593 -Antarctica/Mawson.generic.long=\u30E2\u30FC\u30BD\u30F3\u6642\u9593 -Antarctica/McMurdo.generic.long=\u30CB\u30E5\u30FC\u30B8\u30FC\u30E9\u30F3\u30C9\u6642\u9593 -Antarctica/Palmer.generic.long=\u30C1\u30EA\u6642\u9593 -Antarctica/Rothera.generic.long=\u30ED\u30BC\u30E9\u6642\u9593 -Antarctica/South_Pole.generic.long=\u30CB\u30E5\u30FC\u30B8\u30FC\u30E9\u30F3\u30C9\u6642\u9593 -Antarctica/Syowa.generic.long=\u662D\u548C\u57FA\u5730\u6642\u9593 -Antarctica/Vostok.generic.long=\u30DC\u30B9\u30C8\u30FC\u30AF\u6642\u9593 -Arctic/Longyearbyen.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Asia/Aden.generic.long=\u30A2\u30E9\u30D3\u30A2\u6642\u9593 -Asia/Almaty.generic.long=\u30A2\u30EB\u30DE\u30A2\u30BF\u6642\u9593 -Asia/Amman.generic.long=\u30a2\u30e9\u30d3\u30a2\u6642\u9593 -Asia/Anadyr.generic.long=\u30A2\u30CA\u30C7\u30A3\u30EA\u6642\u9593 -Asia/Aqtau.generic.long=\u30A2\u30AF\u30BF\u30A6\u6642\u9593 -Asia/Aqtobe.generic.long=\u30A2\u30AF\u30C8\u30D9\u6642\u9593 -Asia/Ashgabat.generic.long=\u30C8\u30EB\u30AF\u30E1\u30CB\u30B9\u30BF\u30F3\u6642\u9593 -Asia/Ashkhabad.generic.long=\u30C8\u30EB\u30AF\u30E1\u30CB\u30B9\u30BF\u30F3\u6642\u9593 -Asia/Baghdad.generic.long=\u30A2\u30E9\u30D3\u30A2\u6642\u9593 -Asia/Bahrain.generic.long=\u30A2\u30E9\u30D3\u30A2\u6642\u9593 -Asia/Baku.generic.long=\u30A2\u30BC\u30EB\u30D0\u30A4\u30B8\u30E3\u30F3\u6642\u9593 -Asia/Bangkok.generic.long=\u30A4\u30F3\u30C9\u30B7\u30CA\u6642\u9593 -Asia/Beirut.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Asia/Bishkek.generic.long=\u30AD\u30EB\u30AE\u30B9\u6642\u9593 -Asia/Brunei.generic.long=\u30D6\u30EB\u30CD\u30A4\u6642\u9593 -Asia/Calcutta.generic.long=\u30A4\u30F3\u30C9\u6642\u9593 -Asia/Choibalsan.generic.long=\u30C1\u30E7\u30A4\u30D0\u30EB\u30B5\u30F3\u6642\u9593 -Asia/Chongqing.generic.long=\u4E2D\u56FD\u6642\u9593 -Asia/Chungking.generic.long=\u4E2D\u56FD\u6642\u9593 -Asia/Colombo.generic.long=\u30A4\u30F3\u30C9\u6642\u9593 -Asia/Dacca.generic.long=\u30D0\u30F3\u30B0\u30E9\u30C7\u30B7\u30E5\u6642\u9593 -Asia/Damascus.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Asia/Dhaka.generic.long=\u30D0\u30F3\u30B0\u30E9\u30C7\u30B7\u30E5\u6642\u9593 -Asia/Dili.generic.long=\u6771\u30C6\u30A3\u30E2\u30FC\u30EB\u6642\u9593 -Asia/Dubai.generic.long=\u6E7E\u5CB8\u6642\u9593 -Asia/Dushanbe.generic.long=\u30BF\u30B8\u30AD\u30B9\u30BF\u30F3\u6642\u9593 -Asia/Gaza.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Asia/Harbin.generic.long=\u4E2D\u56FD\u6642\u9593 -Asia/Hebron.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Asia/Ho_Chi_Minh.generic.long=\u30A4\u30F3\u30C9\u30B7\u30CA\u6642\u9593 -Asia/Hong_Kong.generic.long=\u9999\u6E2F\u6642\u9593 -Asia/Hovd.generic.long=\u30DB\u30D6\u30C9\u6642\u9593 -Asia/Irkutsk.generic.long=\u30A4\u30EB\u30AF\u30FC\u30C4\u30AF\u6642\u9593 -Asia/Istanbul.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Asia/Jakarta.generic.long=\u897F\u90E8\u30A4\u30F3\u30C9\u30CD\u30B7\u30A2\u6642\u9593 -Asia/Jayapura.generic.long=\u6771\u90E8\u30A4\u30F3\u30C9\u30CD\u30B7\u30A2\u6642\u9593 -Asia/Jerusalem.generic.long=\u30A4\u30B9\u30E9\u30A8\u30EB\u6642\u9593 -Asia/Kabul.generic.long=\u30A2\u30D5\u30AC\u30CB\u30B9\u30BF\u30F3\u6642\u9593 -Asia/Kamchatka.generic.long=\u30DA\u30C8\u30ED\u30D1\u30D6\u30ED\u30D5\u30B9\u30AF\u30FB\u30AB\u30E0\u30C1\u30E3\u30C4\u30AD\u30FC\u6642\u9593 -Asia/Karachi.generic.long=\u30D1\u30AD\u30B9\u30BF\u30F3\u6642\u9593 -Asia/Kashgar.generic.long=\u4E2D\u56FD\u6642\u9593 -Asia/Kathmandu.generic.long=\u30CD\u30D1\u30FC\u30EB\u6642\u9593 -Asia/Katmandu.generic.long=\u30CD\u30D1\u30FC\u30EB\u6642\u9593 -Asia/Khandyga.daylight.long=\u30CF\u30F3\u30C9\u30A5\u30A4\u30AC\u590F\u6642\u9593 -Asia/Khandyga.generic.long=\u30CF\u30F3\u30C9\u30A5\u30A4\u30AC\u6642\u9593 -Asia/Khandyga.standard.long=\u30CF\u30F3\u30C9\u30A5\u30A4\u30AC\u6642\u9593 -Asia/Kolkata.generic.long=\u30A4\u30F3\u30C9\u6642\u9593 -Asia/Krasnoyarsk.generic.long=\u30AF\u30E9\u30B9\u30CE\u30E4\u30EB\u30B9\u30AF\u6642\u9593 -Asia/Kuala_Lumpur.generic.long=\u30DE\u30EC\u30FC\u30B7\u30A2\u6642\u9593 -Asia/Kuching.generic.long=\u30DE\u30EC\u30FC\u30B7\u30A2\u6642\u9593 -Asia/Kuwait.generic.long=\u30A2\u30E9\u30D3\u30A2\u6642\u9593 -Asia/Macao.generic.long=\u4E2D\u56FD\u6642\u9593 -Asia/Macau.generic.long=\u4E2D\u56FD\u6642\u9593 -Asia/Magadan.generic.long=\u30DE\u30AC\u30C0\u30F3\u6642\u9593 -Asia/Makassar.generic.long=\u4E2D\u90E8\u30A4\u30F3\u30C9\u30CD\u30B7\u30A2\u6642\u9593 -Asia/Manila.generic.long=\u30D5\u30A3\u30EA\u30D4\u30F3\u6642\u9593 -Asia/Muscat.generic.long=\u6E7E\u5CB8\u6642\u9593 -Asia/Nicosia.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Asia/Novokuznetsk.generic.long=\u30CE\u30F4\u30A9\u30B7\u30D3\u30EB\u30B9\u30AF\u6642\u9593 -Asia/Novosibirsk.generic.long=\u30CE\u30F4\u30A9\u30B7\u30D3\u30EB\u30B9\u30AF\u6642\u9593 -Asia/Omsk.generic.long=\u30AA\u30E0\u30B9\u30AF\u6642\u9593 -Asia/Oral.generic.long=\u30AA\u30E9\u30EB\u6642\u9593 -Asia/Phnom_Penh.generic.long=\u30A4\u30F3\u30C9\u30B7\u30CA\u6642\u9593 -Asia/Pontianak.generic.long=\u897F\u90E8\u30A4\u30F3\u30C9\u30CD\u30B7\u30A2\u6642\u9593 -Asia/Pyongyang.generic.long=\u97D3\u56FD\u6642\u9593 -Asia/Qatar.generic.long=\u30A2\u30E9\u30D3\u30A2\u6642\u9593 -Asia/Qyzylorda.generic.long=\u30AF\u30BA\u30ED\u30EB\u30C0\u6642\u9593 -Asia/Rangoon.generic.long=\u30DF\u30E3\u30F3\u30DE\u30FC\u6642\u9593 -Asia/Saigon.generic.long=\u30A4\u30F3\u30C9\u30B7\u30CA\u6642\u9593 -Asia/Sakhalin.generic.long=\u30B5\u30CF\u30EA\u30F3\u6642\u9593 -Asia/Samarkand.generic.long=\u30A6\u30BA\u30D9\u30AD\u30B9\u30BF\u30F3\u6642\u9593 -Asia/Seoul.generic.long=\u97D3\u56FD\u6642\u9593 -Asia/Shanghai.generic.long=\u4E2D\u56FD\u6642\u9593 -Asia/Singapore.generic.long=\u30B7\u30F3\u30AC\u30DD\u30FC\u30EB\u6642\u9593 -Asia/Taipei.generic.long=\u4E2D\u56FD\u6642\u9593 -Asia/Tashkent.generic.long=\u30A6\u30BA\u30D9\u30AD\u30B9\u30BF\u30F3\u6642\u9593 -Asia/Tbilisi.generic.long=\u30B0\u30EB\u30B8\u30A2\u6642\u9593 -Asia/Tehran.generic.long=\u30A4\u30E9\u30F3\u6642\u9593 -Asia/Tel_Aviv.generic.long=\u30A4\u30B9\u30E9\u30A8\u30EB\u6642\u9593 -Asia/Thimbu.generic.long=\u30D6\u30FC\u30BF\u30F3\u6642\u9593 -Asia/Thimphu.generic.long=\u30D6\u30FC\u30BF\u30F3\u6642\u9593 -Asia/Tokyo.generic.long=\u65E5\u672C\u6642\u9593 -Asia/Ujung_Pandang.generic.long=\u4E2D\u90E8\u30A4\u30F3\u30C9\u30CD\u30B7\u30A2\u6642\u9593 -Asia/Ulaanbaatar.generic.long=\u30A6\u30E9\u30F3\u30D0\u30FC\u30C8\u30EB\u6642\u9593 -Asia/Ulan_Bator.generic.long=\u30A6\u30E9\u30F3\u30D0\u30FC\u30C8\u30EB\u6642\u9593 -Asia/Urumqi.generic.long=\u4E2D\u56FD\u6642\u9593 -Asia/Ust-Nera.daylight.long=\u30A6\u30B9\u30C1\u30CD\u30E9\u590F\u6642\u9593 -Asia/Ust-Nera.generic.long=\u30A6\u30B9\u30C1\u30CD\u30E9\u6642\u9593 -Asia/Ust-Nera.standard.long=\u30A6\u30B9\u30C1\u30CD\u30E9\u6642\u9593 -Asia/Vientiane.generic.long=\u30A4\u30F3\u30C9\u30B7\u30CA\u6642\u9593 -Asia/Vladivostok.generic.long=\u30A6\u30E9\u30B8\u30AA\u30B9\u30C8\u30AF\u6642\u9593 -Asia/Yakutsk.generic.long=\u30E4\u30AF\u30FC\u30C4\u30AF\u6642\u9593 -Asia/Yekaterinburg.generic.long=\u30A8\u30AB\u30C6\u30EA\u30F3\u30D6\u30EB\u30AF\u6642\u9593 -Asia/Yerevan.generic.long=\u30A2\u30EB\u30E1\u30CB\u30A2\u6642\u9593 -Atlantic/Azores.generic.long=\u30A2\u30BE\u30EC\u30B9\u6642\u9593 -Atlantic/Bermuda.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -Atlantic/Canary.generic.long=\u897F\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Atlantic/Cape_Verde.generic.long=\u30AB\u30FC\u30DC\u30D9\u30EB\u30C7\u6642\u9593 -Atlantic/Faeroe.generic.long=\u897F\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Atlantic/Faroe.generic.long=\u897F\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Atlantic/Jan_Mayen.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Atlantic/Madeira.generic.long=\u897F\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Atlantic/Reykjavik.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Atlantic/South_Georgia.generic.long=\u5357\u30B8\u30E7\u30FC\u30B8\u30A2\u6642\u9593 -Atlantic/St_Helena.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Atlantic/Stanley.generic.long=\u30D5\u30A9\u30FC\u30AF\u30E9\u30F3\u30C9\u8AF8\u5CF6\u6642\u9593 -Australia/ACT.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/ACT.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/ACT.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/Adelaide.daylight.long=\u4E2D\u90E8\u590F\u6642\u9593(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Australia/Adelaide.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Australia/Adelaide.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Australia/Brisbane.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9) -Australia/Brisbane.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9) -Australia/Brisbane.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9) -Australia/Broken_Hill.daylight.long=\u4E2D\u90E8\u590F\u6642\u9593(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/Broken_Hill.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/Broken_Hill.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/Canberra.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/Canberra.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/Canberra.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/Currie.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/Currie.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/Currie.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/Darwin.daylight.long=\u4E2D\u90E8\u590F\u6642\u9593(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC) -Australia/Darwin.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC) -Australia/Darwin.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC) -Australia/Eucla.daylight.long=\u4E2D\u897F\u90E8\u590F\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Australia/Eucla.generic.long=\u4E2D\u897F\u90E8\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Australia/Eucla.standard.long=\u4E2D\u897F\u90E8\u6A19\u6E96\u6642(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Australia/Hobart.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30BF\u30B9\u30DE\u30CB\u30A2) -Australia/Hobart.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30BF\u30B9\u30DE\u30CB\u30A2) -Australia/Hobart.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30BF\u30B9\u30DE\u30CB\u30A2) -Australia/LHI.generic.long=\u30ED\u30FC\u30C9\u30CF\u30A6\u6642\u9593 -Australia/Lindeman.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9) -Australia/Lindeman.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9) -Australia/Lindeman.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9) -Australia/Lord_Howe.generic.long=\u30ED\u30FC\u30C9\u30CF\u30A6\u6642\u9593 -Australia/Melbourne.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30D3\u30AF\u30C8\u30EA\u30A2) -Australia/Melbourne.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30D3\u30AF\u30C8\u30EA\u30A2) -Australia/Melbourne.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30D3\u30AF\u30C8\u30EA\u30A2) -Australia/NSW.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/NSW.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/NSW.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/North.daylight.long=\u4E2D\u90E8\u590F\u6642\u9593(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC) -Australia/North.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC) -Australia/North.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC) -Australia/Perth.daylight.long=\u897F\u90E8\u590F\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Australia/Perth.generic.long=\u897F\u90E8\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Australia/Perth.standard.long=\u897F\u90E8\u6A19\u6E96\u6642(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Australia/Queensland.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9) -Australia/Queensland.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9) -Australia/Queensland.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9) -Australia/South.daylight.long=\u4E2D\u90E8\u590F\u6642\u9593(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Australia/South.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Australia/South.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Australia/Sydney.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/Sydney.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/Sydney.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/Tasmania.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30BF\u30B9\u30DE\u30CB\u30A2) -Australia/Tasmania.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30BF\u30B9\u30DE\u30CB\u30A2) -Australia/Tasmania.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30BF\u30B9\u30DE\u30CB\u30A2) -Australia/Victoria.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30D3\u30AF\u30C8\u30EA\u30A2) -Australia/Victoria.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30D3\u30AF\u30C8\u30EA\u30A2) -Australia/Victoria.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30D3\u30AF\u30C8\u30EA\u30A2) -Australia/West.daylight.long=\u897F\u90E8\u590F\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Australia/West.generic.long=\u897F\u90E8\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Australia/West.standard.long=\u897F\u90E8\u6A19\u6E96\u6642(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2) -Australia/Yancowinna.daylight.long=\u4E2D\u90E8\u590F\u6642\u9593(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/Yancowinna.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -Australia/Yancowinna.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA) -BET.generic.long=\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593 -BST.generic.long=\u30D0\u30F3\u30B0\u30E9\u30C7\u30B7\u30E5\u6642\u9593 -Brazil/Acre.generic.long=\u30a2\u30af\u30ec\u6642\u9593 -Brazil/DeNoronha.generic.long=\u30D5\u30A7\u30EB\u30CA\u30F3\u30C9\u30FB\u30C7\u30FB\u30CE\u30ED\u30FC\u30CB\u30E3\u6642\u9593 -Brazil/East.generic.long=\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593 -Brazil/West.generic.long=\u30A2\u30DE\u30BE\u30F3\u6642\u9593 -CAT.generic.long=\u4E2D\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -CET.generic.long=\u4e2d\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593 -CNT.generic.long=\u30CB\u30E5\u30FC\u30D5\u30A1\u30F3\u30C9\u30E9\u30F3\u30C9\u6642\u9593 -CST.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -CST6CDT.generic.long=\u4e2d\u90e8\u6a19\u6e96\u6642 -CTT.generic.long=\u4E2D\u56FD\u6642\u9593 -Canada/Atlantic.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -Canada/Central.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -Canada/East-Saskatchewan.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -Canada/Eastern.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -Canada/Mountain.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -Canada/Newfoundland.generic.long=\u30CB\u30E5\u30FC\u30D5\u30A1\u30F3\u30C9\u30E9\u30F3\u30C9\u6642\u9593 -Canada/Pacific.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642 -Canada/Saskatchewan.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -Canada/Yukon.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642 -Chile/Continental.generic.long=\u30C1\u30EA\u6642\u9593 -Chile/EasterIsland.generic.long=\u30A4\u30FC\u30B9\u30BF\u30FC\u5CF6\u6642\u9593 -Cuba.generic.long=\u30AD\u30E5\u30FC\u30D0\u6642\u9593 -EAT.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -ECT.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -EET.generic.long=\u6771\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593 -EST.generic.long=\u6771\u90e8\u6a19\u6e96\u6642 -EST5EDT.generic.long=\u6771\u90e8\u6a19\u6e96\u6642 -Egypt.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Eire.generic.long=\u30A2\u30A4\u30EB\u30E9\u30F3\u30C9\u6642\u9593 -Etc/Greenwich.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Etc/UCT.generic.long=\u5354\u5B9A\u4E16\u754C\u6642 -Etc/UTC.generic.long=\u5354\u5B9A\u4E16\u754C\u6642 -Etc/Universal.generic.long=\u5354\u5B9A\u4E16\u754C\u6642 -Etc/Zulu.generic.long=\u5354\u5B9A\u4E16\u754C\u6642 -Europe/Amsterdam.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Andorra.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Athens.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Belfast.generic.long=\u30A4\u30AE\u30EA\u30B9\u6642\u9593 -Europe/Belgrade.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Berlin.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Bratislava.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Brussels.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Bucharest.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Budapest.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Busingen.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Chisinau.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Copenhagen.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Dublin.generic.long=\u30A2\u30A4\u30EB\u30E9\u30F3\u30C9\u6642\u9593 -Europe/Gibraltar.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Guernsey.generic.long=\u30A4\u30AE\u30EA\u30B9\u6642\u9593 -Europe/Helsinki.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Isle_of_Man.generic.long=\u30A4\u30AE\u30EA\u30B9\u6642\u9593 -Europe/Istanbul.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Jersey.generic.long=\u30A4\u30AE\u30EA\u30B9\u6642\u9593 -Europe/Kaliningrad.daylight.long=\u6975\u6771\u30E8\u30FC\u30ED\u30C3\u30D1\u590F\u6642\u9593 -Europe/Kaliningrad.generic.long=\u6975\u6771\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Kaliningrad.standard.long=\u6975\u6771\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Kiev.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Lisbon.generic.long=\u897F\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Ljubljana.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/London.generic.long=\u30A4\u30AE\u30EA\u30B9\u6642\u9593 -Europe/Luxembourg.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Madrid.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Malta.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Mariehamn.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Minsk.daylight.long=\u6975\u6771\u30E8\u30FC\u30ED\u30C3\u30D1\u590F\u6642\u9593 -Europe/Minsk.generic.long=\u6975\u6771\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Minsk.standard.long=\u6975\u6771\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Monaco.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Moscow.generic.long=\u30E2\u30B9\u30AF\u30EF\u6642\u9593 -Europe/Nicosia.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Oslo.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Paris.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Podgorica.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Prague.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Riga.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Rome.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Samara.generic.long=\u30B5\u30DE\u30E9\u6642\u9593 -Europe/San_Marino.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Sarajevo.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Simferopol.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Skopje.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Sofia.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Stockholm.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Tallinn.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Tirane.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Tiraspol.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Uzhgorod.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Vaduz.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Vatican.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Vienna.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Vilnius.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Volgograd.generic.long=\u30DC\u30EB\u30B4\u30B0\u30E9\u30FC\u30C9\u6642\u9593 -Europe/Warsaw.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Zagreb.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Zaporozhye.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Europe/Zurich.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -GB-Eire.generic.long=\u30A4\u30AE\u30EA\u30B9\u6642\u9593 -GB.generic.long=\u30A4\u30AE\u30EA\u30B9\u6642\u9593 -GMT.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Greenwich.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -HST.generic.long=\u30cf\u30ef\u30a4\u6642\u9593 -Hongkong.generic.long=\u9999\u6E2F\u6642\u9593 -IET.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -IST.generic.long=\u30A4\u30F3\u30C9\u6642\u9593 -Iceland.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642 -Indian/Antananarivo.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Indian/Chagos.generic.long=\u30A4\u30F3\u30C9\u6D0B\u5730\u57DF\u6642\u9593 -Indian/Christmas.generic.long=\u30AF\u30EA\u30B9\u30DE\u30B9\u5CF6\u6642\u9593 -Indian/Cocos.generic.long=\u30B3\u30B3\u30B9\u8AF8\u5CF6\u6642\u9593 -Indian/Comoro.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Indian/Kerguelen.generic.long=\u30D5\u30E9\u30F3\u30B9\u9818\u5357\u65B9\u304A\u3088\u3073\u5357\u6975\u5927\u9678\u6642\u9593 -Indian/Mahe.generic.long=\u30BB\u30FC\u30B7\u30A7\u30EB\u6642\u9593 -Indian/Maldives.generic.long=\u30E2\u30EB\u30B8\u30D6\u6642\u9593 -Indian/Mauritius.generic.long=\u30E2\u30FC\u30EA\u30B7\u30E3\u30B9\u6642\u9593 -Indian/Mayotte.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593 -Indian/Reunion.generic.long=\u30EC\u30E6\u30CB\u30AA\u30F3\u6642\u9593 -Iran.generic.long=\u30A4\u30E9\u30F3\u6642\u9593 -Israel.generic.long=\u30A4\u30B9\u30E9\u30A8\u30EB\u6642\u9593 -JST.generic.long=\u65E5\u672C\u6642\u9593 -Jamaica.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -Japan.generic.long=\u65E5\u672C\u6642\u9593 -Kwajalein.generic.long=\u30DE\u30FC\u30B7\u30E3\u30EB\u8AF8\u5CF6\u6642\u9593 -Libya.generic.long=\u6771\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593 -MET.generic.long=MET -MIT.generic.long=\u897F\u30B5\u30E2\u30A2\u6642\u9593 -MST.generic.long=\u5c71\u5730\u6a19\u6e96\u6642 -MST7MDT.generic.long=\u5c71\u5730\u6a19\u6e96\u6642 -Mexico/BajaNorte.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642 -Mexico/BajaSur.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -Mexico/General.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -NET.generic.long=\u30A2\u30EB\u30E1\u30CB\u30A2\u6642\u9593 -NST.generic.long=\u30CB\u30E5\u30FC\u30B8\u30FC\u30E9\u30F3\u30C9\u6642\u9593 -NZ-CHAT.generic.long=\u30C1\u30E3\u30BF\u30E0\u6642\u9593 -NZ.generic.long=\u30CB\u30E5\u30FC\u30B8\u30FC\u30E9\u30F3\u30C9\u6642\u9593 -Navajo.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -PLT.generic.long=\u30D1\u30AD\u30B9\u30BF\u30F3\u6642\u9593 -PNT.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -PRC.generic.long=\u4E2D\u56FD\u6642\u9593 -PRT.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -PST.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642 -PST8PDT.generic.long=\u592a\u5e73\u6d0b\u6a19\u6e96\u6642 -Pacific/Apia.generic.long=\u897F\u30B5\u30E2\u30A2\u6642\u9593 -Pacific/Auckland.generic.long=\u30CB\u30E5\u30FC\u30B8\u30FC\u30E9\u30F3\u30C9\u6642\u9593 -Pacific/Chatham.generic.long=\u30C1\u30E3\u30BF\u30E0\u6642\u9593 -Pacific/Chuuk.daylight.long=Chuuk Time -Pacific/Chuuk.generic.long=\u30C1\u30E5\u30FC\u30AF\u6642\u9593 -Pacific/Chuuk.standard.long=\u30C1\u30E5\u30FC\u30AF\u6642\u9593 -Pacific/Easter.generic.long=\u30A4\u30FC\u30B9\u30BF\u30FC\u5CF6\u6642\u9593 -Pacific/Efate.generic.long=\u30D0\u30CC\u30A2\u30C4\u6642\u9593 -Pacific/Enderbury.generic.long=\u30D5\u30A7\u30CB\u30C3\u30AF\u30B9\u8AF8\u5CF6\u6642\u9593 -Pacific/Fakaofo.generic.long=\u30C8\u30B1\u30E9\u30A6\u6642\u9593 -Pacific/Fiji.generic.long=\u30D5\u30A3\u30B8\u30FC\u6642\u9593 -Pacific/Funafuti.generic.long=\u30C4\u30D0\u30EB\u6642\u9593 -Pacific/Galapagos.generic.long=\u30AC\u30E9\u30D1\u30B4\u30B9\u6642\u9593 -Pacific/Gambier.generic.long=\u30AC\u30F3\u30D3\u30A8\u6642\u9593 -Pacific/Guadalcanal.generic.long=\u30BD\u30ED\u30E2\u30F3\u8AF8\u5CF6\u6642\u9593 -Pacific/Guam.generic.long=\u30C1\u30E3\u30E2\u30ED\u6642\u9593 -Pacific/Honolulu.generic.long=\u30CF\u30EF\u30A4\u6642\u9593 -Pacific/Johnston.generic.long=\u30CF\u30EF\u30A4\u6642\u9593 -Pacific/Kiritimati.generic.long=\u30E9\u30A4\u30F3\u8AF8\u5CF6\u6642\u9593 -Pacific/Kosrae.generic.long=\u30B3\u30B9\u30E9\u30A8\u6642\u9593 -Pacific/Kwajalein.generic.long=\u30DE\u30FC\u30B7\u30E3\u30EB\u8AF8\u5CF6\u6642\u9593 -Pacific/Majuro.generic.long=\u30DE\u30FC\u30B7\u30E3\u30EB\u8AF8\u5CF6\u6642\u9593 -Pacific/Marquesas.generic.long=\u30DE\u30EB\u30AD\u30FC\u30BA\u6642\u9593 -Pacific/Midway.generic.long=\u30B5\u30E2\u30A2\u6642\u9593 -Pacific/Nauru.generic.long=\u30CA\u30A6\u30EB\u6642\u9593 -Pacific/Niue.generic.long=\u30CB\u30A6\u30A8\u6642\u9593 -Pacific/Norfolk.generic.long=\u30CE\u30FC\u30D5\u30A9\u30FC\u30AF\u6642\u9593 -Pacific/Noumea.generic.long=\u30CB\u30E5\u30FC\u30AB\u30EC\u30C9\u30CB\u30A2\u6642\u9593 -Pacific/Pago_Pago.generic.long=\u30B5\u30E2\u30A2\u6642\u9593 -Pacific/Palau.generic.long=\u30D1\u30E9\u30AA\u6642\u9593 -Pacific/Pitcairn.generic.long=\u30D4\u30C8\u30B1\u30A2\u30F3\u6642\u9593 -Pacific/Pohnpei.daylight.long=\u30DD\u30F3\u30DA\u30A4\u590F\u6642\u9593 -Pacific/Pohnpei.generic.long=\u30DD\u30CA\u30DA\u6642\u9593 -Pacific/Pohnpei.standard.long=\u30DD\u30F3\u30DA\u30A4\u6642\u9593 -Pacific/Ponape.daylight.long=\u30DD\u30F3\u30DA\u30A4\u590F\u6642\u9593 -Pacific/Ponape.generic.long=\u30DD\u30CA\u30DA\u6642\u9593 -Pacific/Ponape.standard.long=\u30DD\u30F3\u30DA\u30A4\u6642\u9593 -Pacific/Port_Moresby.generic.long=\u30D1\u30D7\u30A2\u30CB\u30E5\u30FC\u30AE\u30CB\u30A2\u6642\u9593 -Pacific/Rarotonga.generic.long=\u30AF\u30C3\u30AF\u8AF8\u5CF6\u6642\u9593 -Pacific/Saipan.generic.long=\u30C1\u30E3\u30E2\u30ED\u6642\u9593 -Pacific/Samoa.generic.long=\u30B5\u30E2\u30A2\u6642\u9593 -Pacific/Tahiti.generic.long=\u30BF\u30D2\u30C1\u6642\u9593 -Pacific/Tarawa.generic.long=\u30AE\u30EB\u30D0\u30FC\u30C8\u8AF8\u5CF6\u6642\u9593 -Pacific/Tongatapu.generic.long=\u30C8\u30F3\u30AC\u6642\u9593 -Pacific/Truk.daylight.long=Chuuk Time -Pacific/Truk.generic.long=\u30C1\u30E5\u30FC\u30AF\u6642\u9593 -Pacific/Truk.standard.long=\u30C1\u30E5\u30FC\u30AF\u6642\u9593 -Pacific/Wake.generic.long=\u30A6\u30A7\u30FC\u30AF\u6642\u9593 -Pacific/Wallis.generic.long=\u30A6\u30A9\u30EA\u30B9\u30FB\u30D5\u30C4\u30CA\u6642\u9593 -Pacific/Yap.daylight.long=Chuuk Time -Pacific/Yap.generic.long=\u30C1\u30E5\u30FC\u30AF\u6642\u9593 -Pacific/Yap.standard.long=\u30C1\u30E5\u30FC\u30AF\u6642\u9593 -Poland.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -Portugal.generic.long=\u897F\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -ROK.generic.long=\u97D3\u56FD\u6642\u9593 -SST.generic.long=\u30BD\u30ED\u30E2\u30F3\u8AF8\u5CF6\u6642\u9593 -Singapore.generic.long=\u30B7\u30F3\u30AC\u30DD\u30FC\u30EB\u6642\u9593 -SystemV/AST4.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -SystemV/AST4ADT.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642 -SystemV/CST6.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -SystemV/CST6CDT.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -SystemV/EST5.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -SystemV/EST5EDT.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -SystemV/HST10.generic.long=\u30CF\u30EF\u30A4\u6642\u9593 -SystemV/MST7.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -SystemV/MST7MDT.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -SystemV/PST8.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642 -SystemV/PST8PDT.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642 -SystemV/YST9.generic.long=\u30A2\u30E9\u30B9\u30AB\u6642\u9593 -SystemV/YST9YDT.generic.long=\u30A2\u30E9\u30B9\u30AB\u6642\u9593 -Turkey.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593 -UCT.generic.long=\u5354\u5B9A\u4E16\u754C\u6642 -US/Alaska.generic.long=\u30A2\u30E9\u30B9\u30AB\u6642\u9593 -US/Aleutian.generic.long=\u30CF\u30EF\u30A4\u30FB\u30A2\u30EA\u30E5\u30FC\u30B7\u30E3\u30F3\u6642\u9593 -US/Arizona.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -US/Central.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -US/East-Indiana.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -US/Eastern.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -US/Hawaii.generic.long=\u30CF\u30EF\u30A4\u6642\u9593 -US/Indiana-Starke.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642 -US/Michigan.generic.long=\u6771\u90E8\u6A19\u6E96\u6642 -US/Mountain.generic.long=\u5C71\u5730\u6A19\u6E96\u6642 -US/Pacific-New.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642 -US/Pacific.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642 -US/Samoa.generic.long=\u30B5\u30E2\u30A2\u6642\u9593 -UTC.generic.long=\u5354\u5B9A\u4E16\u754C\u6642 -Universal.generic.long=\u5354\u5B9A\u4E16\u754C\u6642 -VST.generic.long=\u30A4\u30F3\u30C9\u30B7\u30CA\u6642\u9593 -W-SU.generic.long=\u30E2\u30B9\u30AF\u30EF\u6642\u9593 -WET.generic.long=\u897f\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593 -Zulu.generic.long=\u5354\u5B9A\u4E16\u754C\u6642 diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ja_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ja_short.properties deleted file mode 100644 index 095522a68d1..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ja_short.properties +++ /dev/null @@ -1,1743 +0,0 @@ -ACT.daylight.short=CST -ACT.generic.short=CT -ACT.standard.short=CST -AET.daylight.short=EST -AET.generic.short=ET -AET.standard.short=EST -Africa/Abidjan.daylight.short=GMT -Africa/Abidjan.generic.short=GMT -Africa/Abidjan.standard.short=GMT -Africa/Accra.daylight.short=GHST -Africa/Accra.generic.short=GMT -Africa/Accra.standard.short=GMT -Africa/Addis_Ababa.daylight.short=EAST -Africa/Addis_Ababa.generic.short=EAT -Africa/Addis_Ababa.standard.short=EAT -Africa/Algiers.daylight.short=CEST -Africa/Algiers.generic.short=CET -Africa/Algiers.standard.short=CET -Africa/Asmara.daylight.short=EAST -Africa/Asmara.generic.short=EAT -Africa/Asmara.standard.short=EAT -Africa/Asmera.daylight.short=EAST -Africa/Asmera.generic.short=EAT -Africa/Asmera.standard.short=EAT -Africa/Bamako.daylight.short=GMT -Africa/Bamako.generic.short=GMT -Africa/Bamako.standard.short=GMT -Africa/Bangui.daylight.short=WAST -Africa/Bangui.generic.short=WAT -Africa/Bangui.standard.short=WAT -Africa/Banjul.daylight.short=GMT -Africa/Banjul.generic.short=GMT -Africa/Banjul.standard.short=GMT -Africa/Bissau.daylight.short=GMT -Africa/Bissau.generic.short=GMT -Africa/Bissau.standard.short=GMT -Africa/Blantyre.daylight.short=CAST -Africa/Blantyre.generic.short=CAT -Africa/Blantyre.standard.short=CAT -Africa/Brazzaville.daylight.short=WAST -Africa/Brazzaville.generic.short=WAT -Africa/Brazzaville.standard.short=WAT -Africa/Bujumbura.daylight.short=CAST -Africa/Bujumbura.generic.short=CAT -Africa/Bujumbura.standard.short=CAT -Africa/Cairo.daylight.short=EEST -Africa/Cairo.generic.short=EET -Africa/Cairo.standard.short=EET -Africa/Casablanca.daylight.short=WEST -Africa/Casablanca.generic.short=WET -Africa/Casablanca.standard.short=WET -Africa/Ceuta.daylight.short=CEST -Africa/Ceuta.generic.short=CET -Africa/Ceuta.standard.short=CET -Africa/Conakry.daylight.short=GMT -Africa/Conakry.generic.short=GMT -Africa/Conakry.standard.short=GMT -Africa/Dakar.daylight.short=GMT -Africa/Dakar.generic.short=GMT -Africa/Dakar.standard.short=GMT -Africa/Dar_es_Salaam.daylight.short=EAST -Africa/Dar_es_Salaam.generic.short=EAT -Africa/Dar_es_Salaam.standard.short=EAT -Africa/Djibouti.daylight.short=EAST -Africa/Djibouti.generic.short=EAT -Africa/Djibouti.standard.short=EAT -Africa/Douala.daylight.short=WAST -Africa/Douala.generic.short=WAT -Africa/Douala.standard.short=WAT -Africa/El_Aaiun.daylight.short=WEST -Africa/El_Aaiun.generic.short=WET -Africa/El_Aaiun.standard.short=WET -Africa/Freetown.daylight.short=SLST -Africa/Freetown.generic.short=SLT -Africa/Freetown.standard.short=GMT -Africa/Gaborone.daylight.short=CAST -Africa/Gaborone.generic.short=CAT -Africa/Gaborone.standard.short=CAT -Africa/Harare.daylight.short=CAST -Africa/Harare.generic.short=CAT -Africa/Harare.standard.short=CAT -Africa/Johannesburg.daylight.short=SAST -Africa/Johannesburg.generic.short=SAT -Africa/Johannesburg.standard.short=SAST -Africa/Juba.daylight.short=EAST -Africa/Juba.generic.short=EAT -Africa/Juba.standard.short=EAT -Africa/Kampala.daylight.short=EAST -Africa/Kampala.generic.short=EAT -Africa/Kampala.standard.short=EAT -Africa/Khartoum.daylight.short=EAST -Africa/Khartoum.generic.short=EAT -Africa/Khartoum.standard.short=EAT -Africa/Kigali.daylight.short=CAST -Africa/Kigali.generic.short=CAT -Africa/Kigali.standard.short=CAT -Africa/Kinshasa.daylight.short=WAST -Africa/Kinshasa.generic.short=WAT -Africa/Kinshasa.standard.short=WAT -Africa/Lagos.daylight.short=WAST -Africa/Lagos.generic.short=WAT -Africa/Lagos.standard.short=WAT -Africa/Libreville.daylight.short=WAST -Africa/Libreville.generic.short=WAT -Africa/Libreville.standard.short=WAT -Africa/Lome.daylight.short=GMT -Africa/Lome.generic.short=GMT -Africa/Lome.standard.short=GMT -Africa/Luanda.daylight.short=WAST -Africa/Luanda.generic.short=WAT -Africa/Luanda.standard.short=WAT -Africa/Lubumbashi.daylight.short=CAST -Africa/Lubumbashi.generic.short=CAT -Africa/Lubumbashi.standard.short=CAT -Africa/Lusaka.daylight.short=CAST -Africa/Lusaka.generic.short=CAT -Africa/Lusaka.standard.short=CAT -Africa/Malabo.daylight.short=WAST -Africa/Malabo.generic.short=WAT -Africa/Malabo.standard.short=WAT -Africa/Maputo.daylight.short=CAST -Africa/Maputo.generic.short=CAT -Africa/Maputo.standard.short=CAT -Africa/Maseru.daylight.short=SAST -Africa/Maseru.generic.short=SAT -Africa/Maseru.standard.short=SAST -Africa/Mbabane.daylight.short=SAST -Africa/Mbabane.generic.short=SAT -Africa/Mbabane.standard.short=SAST -Africa/Mogadishu.daylight.short=EAST -Africa/Mogadishu.generic.short=EAT -Africa/Mogadishu.standard.short=EAT -Africa/Monrovia.daylight.short=GMT -Africa/Monrovia.generic.short=GMT -Africa/Monrovia.standard.short=GMT -Africa/Nairobi.daylight.short=EAST -Africa/Nairobi.generic.short=EAT -Africa/Nairobi.standard.short=EAT -Africa/Ndjamena.daylight.short=WAST -Africa/Ndjamena.generic.short=WAT -Africa/Ndjamena.standard.short=WAT -Africa/Niamey.daylight.short=WAST -Africa/Niamey.generic.short=WAT -Africa/Niamey.standard.short=WAT -Africa/Nouakchott.daylight.short=GMT -Africa/Nouakchott.generic.short=GMT -Africa/Nouakchott.standard.short=GMT -Africa/Ouagadougou.daylight.short=GMT -Africa/Ouagadougou.generic.short=GMT -Africa/Ouagadougou.standard.short=GMT -Africa/Porto-Novo.daylight.short=WAST -Africa/Porto-Novo.generic.short=WAT -Africa/Porto-Novo.standard.short=WAT -Africa/Sao_Tome.daylight.short=GMT -Africa/Sao_Tome.generic.short=GMT -Africa/Sao_Tome.standard.short=GMT -Africa/Timbuktu.daylight.short=GMT -Africa/Timbuktu.generic.short=GMT -Africa/Timbuktu.standard.short=GMT -Africa/Tripoli.daylight.short=EEST -Africa/Tripoli.generic.short=EET -Africa/Tripoli.standard.short=EET -Africa/Tunis.daylight.short=CEST -Africa/Tunis.generic.short=CET -Africa/Tunis.standard.short=CET -Africa/Windhoek.daylight.short=WAST -Africa/Windhoek.generic.short=WAT -Africa/Windhoek.standard.short=WAT -AGT.daylight.short=ARST -AGT.generic.short=ART -AGT.standard.short=ART -America/Adak.daylight.short=HADT -America/Adak.generic.short=HAT -America/Adak.standard.short=HAST -America/Anchorage.daylight.short=AKDT -America/Anchorage.generic.short=AKT -America/Anchorage.standard.short=AKST -America/Anguilla.daylight.short=ADT -America/Anguilla.generic.short=AT -America/Anguilla.standard.short=AST -America/Antigua.daylight.short=ADT -America/Antigua.generic.short=AT -America/Antigua.standard.short=AST -America/Araguaina.daylight.short=BRST -America/Araguaina.generic.short=BRT -America/Araguaina.standard.short=BRT -America/Argentina/Buenos_Aires.daylight.short=ARST -America/Argentina/Buenos_Aires.generic.short=ART -America/Argentina/Buenos_Aires.standard.short=ART -America/Argentina/Catamarca.daylight.short=ARST -America/Argentina/Catamarca.generic.short=ART -America/Argentina/Catamarca.standard.short=ART -America/Argentina/ComodRivadavia.daylight.short=ARST -America/Argentina/ComodRivadavia.generic.short=ART -America/Argentina/ComodRivadavia.standard.short=ART -America/Argentina/Cordoba.daylight.short=ARST -America/Argentina/Cordoba.generic.short=ART -America/Argentina/Cordoba.standard.short=ART -America/Argentina/Jujuy.daylight.short=ARST -America/Argentina/Jujuy.generic.short=ART -America/Argentina/Jujuy.standard.short=ART -America/Argentina/La_Rioja.daylight.short=ARST -America/Argentina/La_Rioja.generic.short=ART -America/Argentina/La_Rioja.standard.short=ART -America/Argentina/Mendoza.daylight.short=ARST -America/Argentina/Mendoza.generic.short=ART -America/Argentina/Mendoza.standard.short=ART -America/Argentina/Rio_Gallegos.daylight.short=ARST -America/Argentina/Rio_Gallegos.generic.short=ART -America/Argentina/Rio_Gallegos.standard.short=ART -America/Argentina/Salta.daylight.short=ARST -America/Argentina/Salta.generic.short=ART -America/Argentina/Salta.standard.short=ART -America/Argentina/San_Juan.daylight.short=ARST -America/Argentina/San_Juan.generic.short=ART -America/Argentina/San_Juan.standard.short=ART -America/Argentina/San_Luis.daylight.short=ARST -America/Argentina/San_Luis.generic.short=ART -America/Argentina/San_Luis.standard.short=ART -America/Argentina/Tucuman.daylight.short=ARST -America/Argentina/Tucuman.generic.short=ART -America/Argentina/Tucuman.standard.short=ART -America/Argentina/Ushuaia.daylight.short=ARST -America/Argentina/Ushuaia.generic.short=ART -America/Argentina/Ushuaia.standard.short=ART -America/Aruba.daylight.short=ADT -America/Aruba.generic.short=AT -America/Aruba.standard.short=AST -America/Asuncion.daylight.short=PYST -America/Asuncion.generic.short=PYT -America/Asuncion.standard.short=PYT -America/Atikokan.daylight.short=EDT -America/Atikokan.generic.short=ET -America/Atikokan.standard.short=EST -America/Atka.daylight.short=HADT -America/Atka.generic.short=HAT -America/Atka.standard.short=HAST -America/Bahia_Banderas.daylight.short=CDT -America/Bahia_Banderas.generic.short=CT -America/Bahia_Banderas.standard.short=CST -America/Bahia.daylight.short=BRST -America/Bahia.generic.short=BRT -America/Bahia.standard.short=BRT -America/Barbados.daylight.short=ADT -America/Barbados.generic.short=AT -America/Barbados.standard.short=AST -America/Belem.daylight.short=BRST -America/Belem.generic.short=BRT -America/Belem.standard.short=BRT -America/Belize.daylight.short=CDT -America/Belize.generic.short=CT -America/Belize.standard.short=CST -America/Blanc-Sablon.daylight.short=ADT -America/Blanc-Sablon.generic.short=AT -America/Blanc-Sablon.standard.short=AST -America/Boa_Vista.daylight.short=AMST -America/Boa_Vista.generic.short=AMT -America/Boa_Vista.standard.short=AMT -America/Bogota.daylight.short=COST -America/Bogota.generic.short=COT -America/Bogota.standard.short=COT -America/Boise.daylight.short=MDT -America/Boise.generic.short=MT -America/Boise.standard.short=MST -America/Buenos_Aires.daylight.short=ARST -America/Buenos_Aires.generic.short=ART -America/Buenos_Aires.standard.short=ART -America/Cambridge_Bay.daylight.short=MDT -America/Cambridge_Bay.generic.short=MT -America/Cambridge_Bay.standard.short=MST -America/Campo_Grande.daylight.short=AMST -America/Campo_Grande.generic.short=AMT -America/Campo_Grande.standard.short=AMT -America/Cancun.daylight.short=CDT -America/Cancun.generic.short=CT -America/Cancun.standard.short=CST -America/Caracas.daylight.short=VEST -America/Caracas.generic.short=VET -America/Caracas.standard.short=VET -America/Catamarca.daylight.short=ARST -America/Catamarca.generic.short=ART -America/Catamarca.standard.short=ART -America/Cayenne.daylight.short=GFST -America/Cayenne.generic.short=GFT -America/Cayenne.standard.short=GFT -America/Cayman.daylight.short=EDT -America/Cayman.generic.short=ET -America/Cayman.standard.short=EST -America/Chicago.daylight.short=CDT -America/Chicago.generic.short=CT -America/Chicago.standard.short=CST -America/Chihuahua.daylight.short=MDT -America/Chihuahua.generic.short=MT -America/Chihuahua.standard.short=MST -America/Coral_Harbour.daylight.short=EDT -America/Coral_Harbour.generic.short=ET -America/Coral_Harbour.standard.short=EST -America/Cordoba.daylight.short=ARST -America/Cordoba.generic.short=ART -America/Cordoba.standard.short=ART -America/Costa_Rica.daylight.short=CDT -America/Costa_Rica.generic.short=CT -America/Costa_Rica.standard.short=CST -America/Creston.daylight.short=MDT -America/Creston.generic.short=MT -America/Creston.standard.short=MST -America/Cuiaba.daylight.short=AMST -America/Cuiaba.generic.short=AMT -America/Cuiaba.standard.short=AMT -America/Curacao.daylight.short=ADT -America/Curacao.generic.short=AT -America/Curacao.standard.short=AST -America/Danmarkshavn.daylight.short=GMT -America/Danmarkshavn.generic.short=GMT -America/Danmarkshavn.standard.short=GMT -America/Dawson_Creek.daylight.short=MDT -America/Dawson_Creek.generic.short=MT -America/Dawson_Creek.standard.short=MST -America/Dawson.daylight.short=PDT -America/Dawson.generic.short=PT -America/Dawson.standard.short=PST -America/Denver.daylight.short=MDT -America/Denver.generic.short=MT -America/Denver.standard.short=MST -America/Detroit.daylight.short=EDT -America/Detroit.generic.short=ET -America/Detroit.standard.short=EST -America/Dominica.daylight.short=ADT -America/Dominica.generic.short=AT -America/Dominica.standard.short=AST -America/Edmonton.daylight.short=MDT -America/Edmonton.generic.short=MT -America/Edmonton.standard.short=MST -America/Eirunepe.daylight.short=ACST -America/Eirunepe.generic.short=ACT -America/Eirunepe.standard.short=ACT -America/El_Salvador.daylight.short=CDT -America/El_Salvador.generic.short=CT -America/El_Salvador.standard.short=CST -America/Ensenada.daylight.short=PDT -America/Ensenada.generic.short=PT -America/Ensenada.standard.short=PST -America/Fortaleza.daylight.short=BRST -America/Fortaleza.generic.short=BRT -America/Fortaleza.standard.short=BRT -America/Fort_Wayne.daylight.short=EDT -America/Fort_Wayne.generic.short=ET -America/Fort_Wayne.standard.short=EST -America/Glace_Bay.daylight.short=ADT -America/Glace_Bay.generic.short=AT -America/Glace_Bay.standard.short=AST -America/Godthab.daylight.short=WGST -America/Godthab.generic.short=WGT -America/Godthab.standard.short=WGT -America/Goose_Bay.daylight.short=ADT -America/Goose_Bay.generic.short=AT -America/Goose_Bay.standard.short=AST -America/Grand_Turk.daylight.short=EDT -America/Grand_Turk.generic.short=ET -America/Grand_Turk.standard.short=EST -America/Grenada.daylight.short=ADT -America/Grenada.generic.short=AT -America/Grenada.standard.short=AST -America/Guadeloupe.daylight.short=ADT -America/Guadeloupe.generic.short=AT -America/Guadeloupe.standard.short=AST -America/Guatemala.daylight.short=CDT -America/Guatemala.generic.short=CT -America/Guatemala.standard.short=CST -America/Guayaquil.daylight.short=ECST -America/Guayaquil.generic.short=ECT -America/Guayaquil.standard.short=ECT -America/Guyana.daylight.short=GYST -America/Guyana.generic.short=GYT -America/Guyana.standard.short=GYT -America/Halifax.daylight.short=ADT -America/Halifax.generic.short=AT -America/Halifax.standard.short=AST -America/Havana.daylight.short=CDT -America/Havana.generic.short=CT -America/Havana.standard.short=CST -America/Hermosillo.daylight.short=MDT -America/Hermosillo.generic.short=MT -America/Hermosillo.standard.short=MST -America/Indiana/Indianapolis.daylight.short=EDT -America/Indiana/Indianapolis.generic.short=ET -America/Indiana/Indianapolis.standard.short=EST -America/Indiana/Knox.daylight.short=CDT -America/Indiana/Knox.generic.short=CT -America/Indiana/Knox.standard.short=CST -America/Indiana/Marengo.daylight.short=EDT -America/Indiana/Marengo.generic.short=ET -America/Indiana/Marengo.standard.short=EST -America/Indiana/Petersburg.daylight.short=EDT -America/Indiana/Petersburg.generic.short=ET -America/Indiana/Petersburg.standard.short=EST -America/Indianapolis.daylight.short=EDT -America/Indianapolis.generic.short=ET -America/Indianapolis.standard.short=EST -America/Indiana/Tell_City.daylight.short=CDT -America/Indiana/Tell_City.generic.short=CT -America/Indiana/Tell_City.standard.short=CST -America/Indiana/Vevay.daylight.short=EDT -America/Indiana/Vevay.generic.short=ET -America/Indiana/Vevay.standard.short=EST -America/Indiana/Vincennes.daylight.short=EDT -America/Indiana/Vincennes.generic.short=ET -America/Indiana/Vincennes.standard.short=EST -America/Indiana/Winamac.daylight.short=EDT -America/Indiana/Winamac.generic.short=ET -America/Indiana/Winamac.standard.short=EST -America/Inuvik.daylight.short=MDT -America/Inuvik.generic.short=MT -America/Inuvik.standard.short=MST -America/Iqaluit.daylight.short=EDT -America/Iqaluit.generic.short=ET -America/Iqaluit.standard.short=EST -America/Jamaica.daylight.short=EDT -America/Jamaica.generic.short=ET -America/Jamaica.standard.short=EST -America/Jujuy.daylight.short=ARST -America/Jujuy.generic.short=ART -America/Jujuy.standard.short=ART -America/Juneau.daylight.short=AKDT -America/Juneau.generic.short=AKT -America/Juneau.standard.short=AKST -America/Kentucky/Louisville.daylight.short=EDT -America/Kentucky/Louisville.generic.short=ET -America/Kentucky/Louisville.standard.short=EST -America/Kentucky/Monticello.daylight.short=EDT -America/Kentucky/Monticello.generic.short=ET -America/Kentucky/Monticello.standard.short=EST -America/Knox_IN.daylight.short=CDT -America/Knox_IN.generic.short=CT -America/Knox_IN.standard.short=CST -America/Kralendijk.daylight.short=ADT -America/Kralendijk.generic.short=AT -America/Kralendijk.standard.short=AST -America/La_Paz.daylight.short=BOST -America/La_Paz.generic.short=BOT -America/La_Paz.standard.short=BOT -America/Lima.daylight.short=PEST -America/Lima.generic.short=PET -America/Lima.standard.short=PET -America/Los_Angeles.daylight.short=PDT -America/Los_Angeles.generic.short=PT -America/Los_Angeles.standard.short=PST -America/Louisville.daylight.short=EDT -America/Louisville.generic.short=ET -America/Louisville.standard.short=EST -America/Lower_Princes.daylight.short=ADT -America/Lower_Princes.generic.short=AT -America/Lower_Princes.standard.short=AST -America/Maceio.daylight.short=BRST -America/Maceio.generic.short=BRT -America/Maceio.standard.short=BRT -America/Managua.daylight.short=CDT -America/Managua.generic.short=CT -America/Managua.standard.short=CST -America/Manaus.daylight.short=AMST -America/Manaus.generic.short=AMT -America/Manaus.standard.short=AMT -America/Marigot.daylight.short=ADT -America/Marigot.generic.short=AT -America/Marigot.standard.short=AST -America/Martinique.daylight.short=ADT -America/Martinique.generic.short=AT -America/Martinique.standard.short=AST -America/Matamoros.daylight.short=CDT -America/Matamoros.generic.short=CT -America/Matamoros.standard.short=CST -America/Mazatlan.daylight.short=MDT -America/Mazatlan.generic.short=MT -America/Mazatlan.standard.short=MST -America/Mendoza.daylight.short=ARST -America/Mendoza.generic.short=ART -America/Mendoza.standard.short=ART -America/Menominee.daylight.short=CDT -America/Menominee.generic.short=CT -America/Menominee.standard.short=CST -America/Merida.daylight.short=CDT -America/Merida.generic.short=CT -America/Merida.standard.short=CST -America/Metlakatla.daylight.short=MeDT -America/Metlakatla.generic.short=MeT -America/Metlakatla.standard.short=MeST -America/Mexico_City.daylight.short=CDT -America/Mexico_City.generic.short=CT -America/Mexico_City.standard.short=CST -America/Miquelon.daylight.short=PMDT -America/Miquelon.generic.short=PMT -America/Miquelon.standard.short=PMST -America/Moncton.daylight.short=ADT -America/Moncton.generic.short=AT -America/Moncton.standard.short=AST -America/Monterrey.daylight.short=CDT -America/Monterrey.generic.short=CT -America/Monterrey.standard.short=CST -America/Montevideo.daylight.short=UYST -America/Montevideo.generic.short=UYT -America/Montevideo.standard.short=UYT -America/Montreal.daylight.short=EDT -America/Montreal.generic.short=ET -America/Montreal.standard.short=EST -America/Montserrat.daylight.short=ADT -America/Montserrat.generic.short=AT -America/Montserrat.standard.short=AST -America/Nassau.daylight.short=EDT -America/Nassau.generic.short=ET -America/Nassau.standard.short=EST -America/New_York.daylight.short=EDT -America/New_York.generic.short=ET -America/New_York.standard.short=EST -America/Nipigon.daylight.short=EDT -America/Nipigon.generic.short=ET -America/Nipigon.standard.short=EST -America/Nome.daylight.short=AKDT -America/Nome.generic.short=AKT -America/Nome.standard.short=AKST -America/Noronha.daylight.short=FNST -America/Noronha.generic.short=FNT -America/Noronha.standard.short=FNT -America/North_Dakota/Beulah.daylight.short=CDT -America/North_Dakota/Beulah.generic.short=CT -America/North_Dakota/Beulah.standard.short=CST -America/North_Dakota/Center.daylight.short=CDT -America/North_Dakota/Center.generic.short=CT -America/North_Dakota/Center.standard.short=CST -America/North_Dakota/New_Salem.daylight.short=CDT -America/North_Dakota/New_Salem.generic.short=CT -America/North_Dakota/New_Salem.standard.short=CST -America/Ojinaga.daylight.short=MDT -America/Ojinaga.generic.short=MT -America/Ojinaga.standard.short=MST -America/Panama.daylight.short=EDT -America/Panama.generic.short=ET -America/Panama.standard.short=EST -America/Pangnirtung.daylight.short=EDT -America/Pangnirtung.generic.short=ET -America/Pangnirtung.standard.short=EST -America/Paramaribo.daylight.short=SRST -America/Paramaribo.generic.short=SRT -America/Paramaribo.standard.short=SRT -America/Phoenix.daylight.short=MDT -America/Phoenix.generic.short=MT -America/Phoenix.standard.short=MST -America/Port-au-Prince.daylight.short=EDT -America/Port-au-Prince.generic.short=ET -America/Port-au-Prince.standard.short=EST -America/Porto_Acre.daylight.short=ACST -America/Porto_Acre.generic.short=ACT -America/Porto_Acre.standard.short=ACT -America/Port_of_Spain.daylight.short=ADT -America/Port_of_Spain.generic.short=AT -America/Port_of_Spain.standard.short=AST -America/Porto_Velho.daylight.short=AMST -America/Porto_Velho.generic.short=AMT -America/Porto_Velho.standard.short=AMT -America/Puerto_Rico.daylight.short=ADT -America/Puerto_Rico.generic.short=AT -America/Puerto_Rico.standard.short=AST -America/Rainy_River.daylight.short=CDT -America/Rainy_River.generic.short=CT -America/Rainy_River.standard.short=CST -America/Rankin_Inlet.daylight.short=CDT -America/Rankin_Inlet.generic.short=CT -America/Rankin_Inlet.standard.short=CST -America/Recife.daylight.short=BRST -America/Recife.generic.short=BRT -America/Recife.standard.short=BRT -America/Regina.daylight.short=CDT -America/Regina.generic.short=CT -America/Regina.standard.short=CST -America/Resolute.daylight.short=CDT -America/Resolute.generic.short=CT -America/Resolute.standard.short=CST -America/Rio_Branco.daylight.short=ACST -America/Rio_Branco.generic.short=ACT -America/Rio_Branco.standard.short=ACT -America/Rosario.daylight.short=ARST -America/Rosario.generic.short=ART -America/Rosario.standard.short=ART -America/Santa_Isabel.daylight.short=PDT -America/Santa_Isabel.generic.short=PT -America/Santa_Isabel.standard.short=PST -America/Santarem.daylight.short=BRST -America/Santarem.generic.short=BRT -America/Santarem.standard.short=BRT -America/Santiago.daylight.short=CLST -America/Santiago.generic.short=CLT -America/Santiago.standard.short=CLT -America/Santo_Domingo.daylight.short=ADT -America/Santo_Domingo.generic.short=AT -America/Santo_Domingo.standard.short=AST -America/Sao_Paulo.daylight.short=BRST -America/Sao_Paulo.generic.short=BRT -America/Sao_Paulo.standard.short=BRT -America/Scoresbysund.daylight.short=EGST -America/Scoresbysund.generic.short=EGT -America/Scoresbysund.standard.short=EGT -America/Shiprock.daylight.short=MDT -America/Shiprock.generic.short=MT -America/Shiprock.standard.short=MST -America/Sitka.daylight.short=AKDT -America/Sitka.generic.short=AKT -America/Sitka.standard.short=AKST -America/St_Barthelemy.daylight.short=ADT -America/St_Barthelemy.generic.short=AT -America/St_Barthelemy.standard.short=AST -America/St_Johns.daylight.short=NDT -America/St_Johns.generic.short=NT -America/St_Johns.standard.short=NST -America/St_Kitts.daylight.short=ADT -America/St_Kitts.generic.short=AT -America/St_Kitts.standard.short=AST -America/St_Lucia.daylight.short=ADT -America/St_Lucia.generic.short=AT -America/St_Lucia.standard.short=AST -America/St_Thomas.daylight.short=ADT -America/St_Thomas.generic.short=AT -America/St_Thomas.standard.short=AST -America/St_Vincent.daylight.short=ADT -America/St_Vincent.generic.short=AT -America/St_Vincent.standard.short=AST -America/Swift_Current.daylight.short=CDT -America/Swift_Current.generic.short=CT -America/Swift_Current.standard.short=CST -America/Tegucigalpa.daylight.short=CDT -America/Tegucigalpa.generic.short=CT -America/Tegucigalpa.standard.short=CST -America/Thule.daylight.short=ADT -America/Thule.generic.short=AT -America/Thule.standard.short=AST -America/Thunder_Bay.daylight.short=EDT -America/Thunder_Bay.generic.short=ET -America/Thunder_Bay.standard.short=EST -America/Tijuana.daylight.short=PDT -America/Tijuana.generic.short=PT -America/Tijuana.standard.short=PST -America/Toronto.daylight.short=EDT -America/Toronto.generic.short=ET -America/Toronto.standard.short=EST -America/Tortola.daylight.short=ADT -America/Tortola.generic.short=AT -America/Tortola.standard.short=AST -America/Vancouver.daylight.short=PDT -America/Vancouver.generic.short=PT -America/Vancouver.standard.short=PST -America/Virgin.daylight.short=ADT -America/Virgin.generic.short=AT -America/Virgin.standard.short=AST -America/Whitehorse.daylight.short=PDT -America/Whitehorse.generic.short=PT -America/Whitehorse.standard.short=PST -America/Winnipeg.daylight.short=CDT -America/Winnipeg.generic.short=CT -America/Winnipeg.standard.short=CST -America/Yakutat.daylight.short=AKDT -America/Yakutat.generic.short=AKT -America/Yakutat.standard.short=AKST -America/Yellowknife.daylight.short=MDT -America/Yellowknife.generic.short=MT -America/Yellowknife.standard.short=MST -Antarctica/Casey.daylight.short=WST -Antarctica/Casey.generic.short=WT -Antarctica/Casey.standard.short=WST -Antarctica/Davis.daylight.short=DAVST -Antarctica/Davis.generic.short=DAVT -Antarctica/Davis.standard.short=DAVT -Antarctica/DumontDUrville.daylight.short=DDUST -Antarctica/DumontDUrville.generic.short=DDUT -Antarctica/DumontDUrville.standard.short=DDUT -Antarctica/Macquarie.daylight.short=MIST -Antarctica/Macquarie.generic.short=MIST -Antarctica/Macquarie.standard.short=MIST -Antarctica/Mawson.daylight.short=MAWST -Antarctica/Mawson.generic.short=MAWT -Antarctica/Mawson.standard.short=MAWT -Antarctica/McMurdo.daylight.short=NZDT -Antarctica/McMurdo.generic.short=NZT -Antarctica/McMurdo.standard.short=NZST -Antarctica/Palmer.daylight.short=CLST -Antarctica/Palmer.generic.short=CLT -Antarctica/Palmer.standard.short=CLT -Antarctica/Rothera.daylight.short=ROTST -Antarctica/Rothera.generic.short=ROTT -Antarctica/Rothera.standard.short=ROTT -Antarctica/South_Pole.daylight.short=NZDT -Antarctica/South_Pole.generic.short=NZT -Antarctica/South_Pole.standard.short=NZST -Antarctica/Syowa.daylight.short=SYOST -Antarctica/Syowa.generic.short=SYOT -Antarctica/Syowa.standard.short=SYOT -Antarctica/Vostok.daylight.short=VOSST -Antarctica/Vostok.generic.short=VOST -Antarctica/Vostok.standard.short=VOST -Arctic/Longyearbyen.daylight.short=CEST -Arctic/Longyearbyen.generic.short=CET -Arctic/Longyearbyen.standard.short=CET -ART.daylight.short=EEST -ART.generic.short=EET -ART.standard.short=EET -Asia/Aden.daylight.short=ADT -Asia/Aden.generic.short=AT -Asia/Aden.standard.short=AST -Asia/Almaty.daylight.short=ALMST -Asia/Almaty.generic.short=ALMT -Asia/Almaty.standard.short=ALMT -Asia/Amman.daylight.short=ADT -Asia/Amman.generic.short=AT -Asia/Amman.standard.short=AST -Asia/Anadyr.daylight.short=ANAST -Asia/Anadyr.generic.short=ANAT -Asia/Anadyr.standard.short=ANAT -Asia/Aqtau.daylight.short=AQTST -Asia/Aqtau.generic.short=AQTT -Asia/Aqtau.standard.short=AQTT -Asia/Aqtobe.daylight.short=AQTST -Asia/Aqtobe.generic.short=AQTT -Asia/Aqtobe.standard.short=AQTT -Asia/Ashgabat.daylight.short=TMST -Asia/Ashgabat.generic.short=TMT -Asia/Ashgabat.standard.short=TMT -Asia/Ashkhabad.daylight.short=TMST -Asia/Ashkhabad.generic.short=TMT -Asia/Ashkhabad.standard.short=TMT -Asia/Baghdad.daylight.short=ADT -Asia/Baghdad.generic.short=AT -Asia/Baghdad.standard.short=AST -Asia/Bahrain.daylight.short=ADT -Asia/Bahrain.generic.short=AT -Asia/Bahrain.standard.short=AST -Asia/Baku.daylight.short=AZST -Asia/Baku.generic.short=AZT -Asia/Baku.standard.short=AZT -Asia/Bangkok.daylight.short=ICST -Asia/Bangkok.generic.short=ICT -Asia/Bangkok.standard.short=ICT -Asia/Beirut.daylight.short=EEST -Asia/Beirut.generic.short=EET -Asia/Beirut.standard.short=EET -Asia/Bishkek.daylight.short=KGST -Asia/Bishkek.generic.short=KGT -Asia/Bishkek.standard.short=KGT -Asia/Brunei.daylight.short=BNST -Asia/Brunei.generic.short=BNT -Asia/Brunei.standard.short=BNT -Asia/Calcutta.daylight.short=IDT -Asia/Calcutta.generic.short=IT -Asia/Calcutta.standard.short=IST -Asia/Choibalsan.daylight.short=CHOST -Asia/Choibalsan.generic.short=CHOT -Asia/Choibalsan.standard.short=CHOT -Asia/Chongqing.daylight.short=CDT -Asia/Chongqing.generic.short=CT -Asia/Chongqing.standard.short=CST -Asia/Chungking.daylight.short=CDT -Asia/Chungking.generic.short=CT -Asia/Chungking.standard.short=CST -Asia/Colombo.daylight.short=IDT -Asia/Colombo.generic.short=IT -Asia/Colombo.standard.short=IST -Asia/Dacca.daylight.short=BDST -Asia/Dacca.generic.short=BDT -Asia/Dacca.standard.short=BDT -Asia/Damascus.daylight.short=EEST -Asia/Damascus.generic.short=EET -Asia/Damascus.standard.short=EET -Asia/Dhaka.daylight.short=BDST -Asia/Dhaka.generic.short=BDT -Asia/Dhaka.standard.short=BDT -Asia/Dili.daylight.short=TLST -Asia/Dili.generic.short=TLT -Asia/Dili.standard.short=TLT -Asia/Dubai.daylight.short=GDT -Asia/Dubai.generic.short=GT -Asia/Dubai.standard.short=GST -Asia/Dushanbe.daylight.short=TJST -Asia/Dushanbe.generic.short=TJT -Asia/Dushanbe.standard.short=TJT -Asia/Gaza.daylight.short=EEST -Asia/Gaza.generic.short=EET -Asia/Gaza.standard.short=EET -Asia/Harbin.daylight.short=CDT -Asia/Harbin.generic.short=CT -Asia/Harbin.standard.short=CST -Asia/Hebron.daylight.short=EEST -Asia/Hebron.generic.short=EET -Asia/Hebron.standard.short=EET -Asia/Ho_Chi_Minh.daylight.short=ICST -Asia/Ho_Chi_Minh.generic.short=ICT -Asia/Ho_Chi_Minh.standard.short=ICT -Asia/Hong_Kong.daylight.short=HKST -Asia/Hong_Kong.generic.short=HKT -Asia/Hong_Kong.standard.short=HKT -Asia/Hovd.daylight.short=HOVST -Asia/Hovd.generic.short=HOVT -Asia/Hovd.standard.short=HOVT -Asia/Irkutsk.daylight.short=IRKST -Asia/Irkutsk.generic.short=IRKT -Asia/Irkutsk.standard.short=IRKT -Asia/Istanbul.daylight.short=EEST -Asia/Istanbul.generic.short=EET -Asia/Istanbul.standard.short=EET -Asia/Jakarta.daylight.short=WIST -Asia/Jakarta.generic.short=WIB -Asia/Jakarta.standard.short=WIB -Asia/Jayapura.daylight.short=EIST -Asia/Jayapura.generic.short=WIT -Asia/Jayapura.standard.short=WIT -Asia/Jerusalem.daylight.short=IDT -Asia/Jerusalem.generic.short=IT -Asia/Jerusalem.standard.short=IST -Asia/Kabul.daylight.short=AFST -Asia/Kabul.generic.short=AFT -Asia/Kabul.standard.short=AFT -Asia/Kamchatka.daylight.short=PETST -Asia/Kamchatka.generic.short=PETT -Asia/Kamchatka.standard.short=PETT -Asia/Karachi.daylight.short=PKST -Asia/Karachi.generic.short=PKT -Asia/Karachi.standard.short=PKT -Asia/Kashgar.daylight.short=CDT -Asia/Kashgar.generic.short=CT -Asia/Kashgar.standard.short=CST -Asia/Kathmandu.daylight.short=NPST -Asia/Kathmandu.generic.short=NPT -Asia/Kathmandu.standard.short=NPT -Asia/Katmandu.daylight.short=NPST -Asia/Katmandu.generic.short=NPT -Asia/Katmandu.standard.short=NPT -Asia/Khandyga.daylight.short=YAKST -Asia/Khandyga.generic.short=YAKT -Asia/Khandyga.standard.short=YAKT -Asia/Kolkata.daylight.short=IDT -Asia/Kolkata.generic.short=IT -Asia/Kolkata.standard.short=IST -Asia/Krasnoyarsk.daylight.short=KRAST -Asia/Krasnoyarsk.generic.short=KRAT -Asia/Krasnoyarsk.standard.short=KRAT -Asia/Kuala_Lumpur.daylight.short=MYST -Asia/Kuala_Lumpur.generic.short=MYT -Asia/Kuala_Lumpur.standard.short=MYT -Asia/Kuching.daylight.short=MYST -Asia/Kuching.generic.short=MYT -Asia/Kuching.standard.short=MYT -Asia/Kuwait.daylight.short=ADT -Asia/Kuwait.generic.short=AT -Asia/Kuwait.standard.short=AST -Asia/Macao.daylight.short=CDT -Asia/Macao.generic.short=CT -Asia/Macao.standard.short=CST -Asia/Macau.daylight.short=CDT -Asia/Macau.generic.short=CT -Asia/Macau.standard.short=CST -Asia/Magadan.daylight.short=MAGST -Asia/Magadan.generic.short=MAGT -Asia/Magadan.standard.short=MAGT -Asia/Makassar.daylight.short=CIST -Asia/Makassar.generic.short=WITA -Asia/Makassar.standard.short=WITA -Asia/Manila.daylight.short=PHST -Asia/Manila.generic.short=PHT -Asia/Manila.standard.short=PHT -Asia/Muscat.daylight.short=GDT -Asia/Muscat.generic.short=GT -Asia/Muscat.standard.short=GST -Asia/Nicosia.daylight.short=EEST -Asia/Nicosia.generic.short=EET -Asia/Nicosia.standard.short=EET -Asia/Novokuznetsk.daylight.short=NOVST -Asia/Novokuznetsk.generic.short=NOVT -Asia/Novokuznetsk.standard.short=NOVT -Asia/Novosibirsk.daylight.short=NOVST -Asia/Novosibirsk.generic.short=NOVT -Asia/Novosibirsk.standard.short=NOVT -Asia/Omsk.daylight.short=OMSST -Asia/Omsk.generic.short=OMST -Asia/Omsk.standard.short=OMST -Asia/Oral.daylight.short=ORAST -Asia/Oral.generic.short=ORAT -Asia/Oral.standard.short=ORAT -Asia/Phnom_Penh.daylight.short=ICST -Asia/Phnom_Penh.generic.short=ICT -Asia/Phnom_Penh.standard.short=ICT -Asia/Pontianak.daylight.short=WIST -Asia/Pontianak.generic.short=WIB -Asia/Pontianak.standard.short=WIB -Asia/Pyongyang.daylight.short=KDT -Asia/Pyongyang.generic.short=KT -Asia/Pyongyang.standard.short=KST -Asia/Qatar.daylight.short=ADT -Asia/Qatar.generic.short=AT -Asia/Qatar.standard.short=AST -Asia/Qyzylorda.daylight.short=QYZST -Asia/Qyzylorda.generic.short=QYZT -Asia/Qyzylorda.standard.short=QYZT -Asia/Rangoon.daylight.short=MMST -Asia/Rangoon.generic.short=MMT -Asia/Rangoon.standard.short=MMT -Asia/Saigon.daylight.short=ICST -Asia/Saigon.generic.short=ICT -Asia/Saigon.standard.short=ICT -Asia/Sakhalin.daylight.short=SAKST -Asia/Sakhalin.generic.short=SAKT -Asia/Sakhalin.standard.short=SAKT -Asia/Samarkand.daylight.short=UZST -Asia/Samarkand.generic.short=UZT -Asia/Samarkand.standard.short=UZT -Asia/Seoul.daylight.short=KDT -Asia/Seoul.generic.short=KT -Asia/Seoul.standard.short=KST -Asia/Shanghai.daylight.short=CDT -Asia/Shanghai.generic.short=CT -Asia/Shanghai.standard.short=CST -Asia/Singapore.daylight.short=SGST -Asia/Singapore.generic.short=SGT -Asia/Singapore.standard.short=SGT -Asia/Taipei.daylight.short=CDT -Asia/Taipei.generic.short=CT -Asia/Taipei.standard.short=CST -Asia/Tashkent.daylight.short=UZST -Asia/Tashkent.generic.short=UZT -Asia/Tashkent.standard.short=UZT -Asia/Tbilisi.daylight.short=GEST -Asia/Tbilisi.generic.short=GET -Asia/Tbilisi.standard.short=GET -Asia/Tehran.daylight.short=IRDT -Asia/Tehran.generic.short=IRT -Asia/Tehran.standard.short=IRST -Asia/Tel_Aviv.daylight.short=IDT -Asia/Tel_Aviv.generic.short=IT -Asia/Tel_Aviv.standard.short=IST -Asia/Thimbu.daylight.short=BTST -Asia/Thimbu.generic.short=BTT -Asia/Thimbu.standard.short=BTT -Asia/Thimphu.daylight.short=BTST -Asia/Thimphu.generic.short=BTT -Asia/Thimphu.standard.short=BTT -Asia/Tokyo.daylight.short=JDT -Asia/Tokyo.generic.short=JT -Asia/Tokyo.standard.short=JST -Asia/Ujung_Pandang.daylight.short=CIST -Asia/Ujung_Pandang.generic.short=WITA -Asia/Ujung_Pandang.standard.short=WITA -Asia/Ulaanbaatar.daylight.short=ULAST -Asia/Ulaanbaatar.generic.short=ULAT -Asia/Ulaanbaatar.standard.short=ULAT -Asia/Ulan_Bator.daylight.short=ULAST -Asia/Ulan_Bator.generic.short=ULAT -Asia/Ulan_Bator.standard.short=ULAT -Asia/Urumqi.daylight.short=CDT -Asia/Urumqi.generic.short=CT -Asia/Urumqi.standard.short=CST -Asia/Ust-Nera.daylight.short=VLAST -Asia/Ust-Nera.generic.short=VLAT -Asia/Ust-Nera.standard.short=VLAT -Asia/Vientiane.daylight.short=ICST -Asia/Vientiane.generic.short=ICT -Asia/Vientiane.standard.short=ICT -Asia/Vladivostok.daylight.short=VLAST -Asia/Vladivostok.generic.short=VLAT -Asia/Vladivostok.standard.short=VLAT -Asia/Yakutsk.daylight.short=YAKST -Asia/Yakutsk.generic.short=YAKT -Asia/Yakutsk.standard.short=YAKT -Asia/Yekaterinburg.daylight.short=YEKST -Asia/Yekaterinburg.generic.short=YEKT -Asia/Yekaterinburg.standard.short=YEKT -Asia/Yerevan.daylight.short=AMST -Asia/Yerevan.generic.short=AMT -Asia/Yerevan.standard.short=AMT -AST.daylight.short=AKDT -AST.generic.short=AKT -AST.standard.short=AKST -Atlantic/Azores.daylight.short=AZOST -Atlantic/Azores.generic.short=AZOT -Atlantic/Azores.standard.short=AZOT -Atlantic/Bermuda.daylight.short=ADT -Atlantic/Bermuda.generic.short=AT -Atlantic/Bermuda.standard.short=AST -Atlantic/Canary.daylight.short=WEST -Atlantic/Canary.generic.short=WET -Atlantic/Canary.standard.short=WET -Atlantic/Cape_Verde.daylight.short=CVST -Atlantic/Cape_Verde.generic.short=CVT -Atlantic/Cape_Verde.standard.short=CVT -Atlantic/Faeroe.daylight.short=WEST -Atlantic/Faeroe.generic.short=WET -Atlantic/Faeroe.standard.short=WET -Atlantic/Faroe.daylight.short=WEST -Atlantic/Faroe.generic.short=WET -Atlantic/Faroe.standard.short=WET -Atlantic/Jan_Mayen.daylight.short=CEST -Atlantic/Jan_Mayen.generic.short=CET -Atlantic/Jan_Mayen.standard.short=CET -Atlantic/Madeira.daylight.short=WEST -Atlantic/Madeira.generic.short=WET -Atlantic/Madeira.standard.short=WET -Atlantic/Reykjavik.daylight.short=GMT -Atlantic/Reykjavik.generic.short=GMT -Atlantic/Reykjavik.standard.short=GMT -Atlantic/South_Georgia.daylight.short=GDT -Atlantic/South_Georgia.generic.short=GT -Atlantic/South_Georgia.standard.short=GST -Atlantic/Stanley.daylight.short=FKST -Atlantic/Stanley.generic.short=FKT -Atlantic/Stanley.standard.short=FKT -Atlantic/St_Helena.daylight.short=GMT -Atlantic/St_Helena.generic.short=GMT -Atlantic/St_Helena.standard.short=GMT -Australia/ACT.daylight.short=EST -Australia/ACT.generic.short=ET -Australia/ACT.standard.short=EST -Australia/Adelaide.daylight.short=CST -Australia/Adelaide.generic.short=CT -Australia/Adelaide.standard.short=CST -Australia/Brisbane.daylight.short=EST -Australia/Brisbane.generic.short=ET -Australia/Brisbane.standard.short=EST -Australia/Broken_Hill.daylight.short=CST -Australia/Broken_Hill.generic.short=CT -Australia/Broken_Hill.standard.short=CST -Australia/Canberra.daylight.short=EST -Australia/Canberra.generic.short=ET -Australia/Canberra.standard.short=EST -Australia/Currie.daylight.short=EST -Australia/Currie.generic.short=ET -Australia/Currie.standard.short=EST -Australia/Darwin.daylight.short=CST -Australia/Darwin.generic.short=CT -Australia/Darwin.standard.short=CST -Australia/Eucla.daylight.short=CWST -Australia/Eucla.generic.short=CWT -Australia/Eucla.standard.short=CWST -Australia/Hobart.daylight.short=EST -Australia/Hobart.generic.short=ET -Australia/Hobart.standard.short=EST -Australia/LHI.daylight.short=LHST -Australia/LHI.generic.short=LHT -Australia/LHI.standard.short=LHST -Australia/Lindeman.daylight.short=EST -Australia/Lindeman.generic.short=ET -Australia/Lindeman.standard.short=EST -Australia/Lord_Howe.daylight.short=LHST -Australia/Lord_Howe.generic.short=LHT -Australia/Lord_Howe.standard.short=LHST -Australia/Melbourne.daylight.short=EST -Australia/Melbourne.generic.short=ET -Australia/Melbourne.standard.short=EST -Australia/North.daylight.short=CST -Australia/North.generic.short=CT -Australia/North.standard.short=CST -Australia/NSW.daylight.short=EST -Australia/NSW.generic.short=ET -Australia/NSW.standard.short=EST -Australia/Perth.daylight.short=WST -Australia/Perth.generic.short=WT -Australia/Perth.standard.short=WST -Australia/Queensland.daylight.short=EST -Australia/Queensland.generic.short=ET -Australia/Queensland.standard.short=EST -Australia/South.daylight.short=CST -Australia/South.generic.short=CT -Australia/South.standard.short=CST -Australia/Sydney.daylight.short=EST -Australia/Sydney.generic.short=ET -Australia/Sydney.standard.short=EST -Australia/Tasmania.daylight.short=EST -Australia/Tasmania.generic.short=ET -Australia/Tasmania.standard.short=EST -Australia/Victoria.daylight.short=EST -Australia/Victoria.generic.short=ET -Australia/Victoria.standard.short=EST -Australia/West.daylight.short=WST -Australia/West.generic.short=WT -Australia/West.standard.short=WST -Australia/Yancowinna.daylight.short=CST -Australia/Yancowinna.generic.short=CT -Australia/Yancowinna.standard.short=CST -BET.daylight.short=BRST -BET.generic.short=BRT -BET.standard.short=BRT -Brazil/Acre.daylight.short=ACST -Brazil/Acre.generic.short=ACT -Brazil/Acre.standard.short=ACT -Brazil/DeNoronha.daylight.short=FNST -Brazil/DeNoronha.generic.short=FNT -Brazil/DeNoronha.standard.short=FNT -Brazil/East.daylight.short=BRST -Brazil/East.generic.short=BRT -Brazil/East.standard.short=BRT -Brazil/West.daylight.short=AMST -Brazil/West.generic.short=AMT -Brazil/West.standard.short=AMT -BST.daylight.short=BDST -BST.generic.short=BDT -BST.standard.short=BDT -Canada/Atlantic.daylight.short=ADT -Canada/Atlantic.generic.short=AT -Canada/Atlantic.standard.short=AST -Canada/Central.daylight.short=CDT -Canada/Central.generic.short=CT -Canada/Central.standard.short=CST -Canada/Eastern.daylight.short=EDT -Canada/Eastern.generic.short=ET -Canada/Eastern.standard.short=EST -Canada/East-Saskatchewan.daylight.short=CDT -Canada/East-Saskatchewan.generic.short=CT -Canada/East-Saskatchewan.standard.short=CST -Canada/Mountain.daylight.short=MDT -Canada/Mountain.generic.short=MT -Canada/Mountain.standard.short=MST -Canada/Newfoundland.daylight.short=NDT -Canada/Newfoundland.generic.short=NT -Canada/Newfoundland.standard.short=NST -Canada/Pacific.daylight.short=PDT -Canada/Pacific.generic.short=PT -Canada/Pacific.standard.short=PST -Canada/Saskatchewan.daylight.short=CDT -Canada/Saskatchewan.generic.short=CT -Canada/Saskatchewan.standard.short=CST -Canada/Yukon.daylight.short=PDT -Canada/Yukon.generic.short=PT -Canada/Yukon.standard.short=PST -CAT.daylight.short=CAST -CAT.generic.short=CAT -CAT.standard.short=CAT -CET.daylight.short=CEST -CET.generic.short=CET -CET.standard.short=CET -Chile/Continental.daylight.short=CLST -Chile/Continental.generic.short=CLT -Chile/Continental.standard.short=CLT -Chile/EasterIsland.daylight.short=EASST -Chile/EasterIsland.generic.short=EAST -Chile/EasterIsland.standard.short=EAST -CNT.daylight.short=NDT -CNT.generic.short=NT -CNT.standard.short=NST -CST6CDT.daylight.short=CDT -CST6CDT.generic.short=CT -CST6CDT.standard.short=CST -CST.daylight.short=CDT -CST.generic.short=CT -CST.standard.short=CST -CTT.daylight.short=CDT -CTT.generic.short=CT -CTT.standard.short=CST -Cuba.daylight.short=CDT -Cuba.generic.short=CT -Cuba.standard.short=CST -EAT.daylight.short=EAST -EAT.generic.short=EAT -EAT.standard.short=EAT -ECT.daylight.short=CEST -ECT.generic.short=CET -ECT.standard.short=CET -EET.daylight.short=EEST -EET.generic.short=EET -EET.standard.short=EET -Egypt.daylight.short=EEST -Egypt.generic.short=EET -Egypt.standard.short=EET -Eire.daylight.short=IST -Eire.generic.short=IT -Eire.standard.short=GMT -EST5EDT.daylight.short=EDT -EST5EDT.generic.short=ET -EST5EDT.standard.short=EST -EST.daylight.short=EDT -EST.generic.short=ET -EST.standard.short=EST -Etc/Greenwich.daylight.short=GMT -Etc/Greenwich.generic.short=GMT -Etc/Greenwich.standard.short=GMT -Etc/UCT.daylight.short=UTC -Etc/UCT.generic.short=UTC -Etc/UCT.standard.short=UTC -Etc/Universal.daylight.short=UTC -Etc/Universal.generic.short=UTC -Etc/Universal.standard.short=UTC -Etc/UTC.daylight.short=UTC -Etc/UTC.generic.short=UTC -Etc/UTC.standard.short=UTC -Etc/Zulu.daylight.short=UTC -Etc/Zulu.generic.short=UTC -Etc/Zulu.standard.short=UTC -Europe/Amsterdam.daylight.short=CEST -Europe/Amsterdam.generic.short=CET -Europe/Amsterdam.standard.short=CET -Europe/Andorra.daylight.short=CEST -Europe/Andorra.generic.short=CET -Europe/Andorra.standard.short=CET -Europe/Athens.daylight.short=EEST -Europe/Athens.generic.short=EET -Europe/Athens.standard.short=EET -Europe/Belfast.daylight.short=BST -Europe/Belfast.generic.short=BT -Europe/Belfast.standard.short=GMT -Europe/Belgrade.daylight.short=CEST -Europe/Belgrade.generic.short=CET -Europe/Belgrade.standard.short=CET -Europe/Berlin.daylight.short=CEST -Europe/Berlin.generic.short=CET -Europe/Berlin.standard.short=CET -Europe/Bratislava.daylight.short=CEST -Europe/Bratislava.generic.short=CET -Europe/Bratislava.standard.short=CET -Europe/Brussels.daylight.short=CEST -Europe/Brussels.generic.short=CET -Europe/Brussels.standard.short=CET -Europe/Bucharest.daylight.short=EEST -Europe/Bucharest.generic.short=EET -Europe/Bucharest.standard.short=EET -Europe/Budapest.daylight.short=CEST -Europe/Budapest.generic.short=CET -Europe/Budapest.standard.short=CET -Europe/Busingen.daylight.short=CEST -Europe/Busingen.generic.short=CET -Europe/Busingen.standard.short=CET -Europe/Chisinau.daylight.short=EEST -Europe/Chisinau.generic.short=EET -Europe/Chisinau.standard.short=EET -Europe/Copenhagen.daylight.short=CEST -Europe/Copenhagen.generic.short=CET -Europe/Copenhagen.standard.short=CET -Europe/Dublin.daylight.short=IST -Europe/Dublin.generic.short=IT -Europe/Dublin.standard.short=GMT -Europe/Gibraltar.daylight.short=CEST -Europe/Gibraltar.generic.short=CET -Europe/Gibraltar.standard.short=CET -Europe/Guernsey.daylight.short=BST -Europe/Guernsey.generic.short=BT -Europe/Guernsey.standard.short=GMT -Europe/Helsinki.daylight.short=EEST -Europe/Helsinki.generic.short=EET -Europe/Helsinki.standard.short=EET -Europe/Isle_of_Man.daylight.short=BST -Europe/Isle_of_Man.generic.short=BT -Europe/Isle_of_Man.standard.short=GMT -Europe/Istanbul.daylight.short=EEST -Europe/Istanbul.generic.short=EET -Europe/Istanbul.standard.short=EET -Europe/Jersey.daylight.short=BST -Europe/Jersey.generic.short=BT -Europe/Jersey.standard.short=GMT -Europe/Kaliningrad.daylight.short=FEST -Europe/Kaliningrad.generic.short=FET -Europe/Kaliningrad.standard.short=FET -Europe/Kiev.daylight.short=EEST -Europe/Kiev.generic.short=EET -Europe/Kiev.standard.short=EET -Europe/Lisbon.daylight.short=WEST -Europe/Lisbon.generic.short=WET -Europe/Lisbon.standard.short=WET -Europe/Ljubljana.daylight.short=CEST -Europe/Ljubljana.generic.short=CET -Europe/Ljubljana.standard.short=CET -Europe/London.daylight.short=BST -Europe/London.generic.short=BT -Europe/London.standard.short=GMT -Europe/Luxembourg.daylight.short=CEST -Europe/Luxembourg.generic.short=CET -Europe/Luxembourg.standard.short=CET -Europe/Madrid.daylight.short=CEST -Europe/Madrid.generic.short=CET -Europe/Madrid.standard.short=CET -Europe/Malta.daylight.short=CEST -Europe/Malta.generic.short=CET -Europe/Malta.standard.short=CET -Europe/Mariehamn.daylight.short=EEST -Europe/Mariehamn.generic.short=EET -Europe/Mariehamn.standard.short=EET -Europe/Minsk.daylight.short=FEST -Europe/Minsk.generic.short=FET -Europe/Minsk.standard.short=FET -Europe/Monaco.daylight.short=CEST -Europe/Monaco.generic.short=CET -Europe/Monaco.standard.short=CET -Europe/Moscow.daylight.short=MSD -Europe/Moscow.generic.short=MT -Europe/Moscow.standard.short=MSK -Europe/Nicosia.daylight.short=EEST -Europe/Nicosia.generic.short=EET -Europe/Nicosia.standard.short=EET -Europe/Oslo.daylight.short=CEST -Europe/Oslo.generic.short=CET -Europe/Oslo.standard.short=CET -Europe/Paris.daylight.short=CEST -Europe/Paris.generic.short=CET -Europe/Paris.standard.short=CET -Europe/Podgorica.daylight.short=CEST -Europe/Podgorica.generic.short=CET -Europe/Podgorica.standard.short=CET -Europe/Prague.daylight.short=CEST -Europe/Prague.generic.short=CET -Europe/Prague.standard.short=CET -Europe/Riga.daylight.short=EEST -Europe/Riga.generic.short=EET -Europe/Riga.standard.short=EET -Europe/Rome.daylight.short=CEST -Europe/Rome.generic.short=CET -Europe/Rome.standard.short=CET -Europe/Samara.daylight.short=SAMST -Europe/Samara.generic.short=SAMT -Europe/Samara.standard.short=SAMT -Europe/San_Marino.daylight.short=CEST -Europe/San_Marino.generic.short=CET -Europe/San_Marino.standard.short=CET -Europe/Sarajevo.daylight.short=CEST -Europe/Sarajevo.generic.short=CET -Europe/Sarajevo.standard.short=CET -Europe/Simferopol.daylight.short=EEST -Europe/Simferopol.generic.short=EET -Europe/Simferopol.standard.short=EET -Europe/Skopje.daylight.short=CEST -Europe/Skopje.generic.short=CET -Europe/Skopje.standard.short=CET -Europe/Sofia.daylight.short=EEST -Europe/Sofia.generic.short=EET -Europe/Sofia.standard.short=EET -Europe/Stockholm.daylight.short=CEST -Europe/Stockholm.generic.short=CET -Europe/Stockholm.standard.short=CET -Europe/Tallinn.daylight.short=EEST -Europe/Tallinn.generic.short=EET -Europe/Tallinn.standard.short=EET -Europe/Tirane.daylight.short=CEST -Europe/Tirane.generic.short=CET -Europe/Tirane.standard.short=CET -Europe/Tiraspol.daylight.short=EEST -Europe/Tiraspol.generic.short=EET -Europe/Tiraspol.standard.short=EET -Europe/Uzhgorod.daylight.short=EEST -Europe/Uzhgorod.generic.short=EET -Europe/Uzhgorod.standard.short=EET -Europe/Vaduz.daylight.short=CEST -Europe/Vaduz.generic.short=CET -Europe/Vaduz.standard.short=CET -Europe/Vatican.daylight.short=CEST -Europe/Vatican.generic.short=CET -Europe/Vatican.standard.short=CET -Europe/Vienna.daylight.short=CEST -Europe/Vienna.generic.short=CET -Europe/Vienna.standard.short=CET -Europe/Vilnius.daylight.short=EEST -Europe/Vilnius.generic.short=EET -Europe/Vilnius.standard.short=EET -Europe/Volgograd.daylight.short=VOLST -Europe/Volgograd.generic.short=VOLT -Europe/Volgograd.standard.short=VOLT -Europe/Warsaw.daylight.short=CEST -Europe/Warsaw.generic.short=CET -Europe/Warsaw.standard.short=CET -Europe/Zagreb.daylight.short=CEST -Europe/Zagreb.generic.short=CET -Europe/Zagreb.standard.short=CET -Europe/Zaporozhye.daylight.short=EEST -Europe/Zaporozhye.generic.short=EET -Europe/Zaporozhye.standard.short=EET -Europe/Zurich.daylight.short=CEST -Europe/Zurich.generic.short=CET -Europe/Zurich.standard.short=CET -GB.daylight.short=BST -GB-Eire.daylight.short=BST -GB-Eire.generic.short=BT -GB-Eire.standard.short=GMT -GB.generic.short=BT -GB.standard.short=GMT -GMT.daylight.short=GMT -GMT.generic.short=GMT -GMT.standard.short=GMT -Greenwich.daylight.short=GMT -Greenwich.generic.short=GMT -Greenwich.standard.short=GMT -Hongkong.daylight.short=HKST -Hongkong.generic.short=HKT -Hongkong.standard.short=HKT -HST.daylight.short=HDT -HST.generic.short=HT -HST.standard.short=HST -Iceland.daylight.short=GMT -Iceland.generic.short=GMT -Iceland.standard.short=GMT -IET.daylight.short=EDT -IET.generic.short=ET -IET.standard.short=EST -Indian/Antananarivo.daylight.short=EAST -Indian/Antananarivo.generic.short=EAT -Indian/Antananarivo.standard.short=EAT -Indian/Chagos.daylight.short=IOST -Indian/Chagos.generic.short=IOT -Indian/Chagos.standard.short=IOT -Indian/Christmas.daylight.short=CXST -Indian/Christmas.generic.short=CIT -Indian/Christmas.standard.short=CXT -Indian/Cocos.daylight.short=CCST -Indian/Cocos.generic.short=CCT -Indian/Cocos.standard.short=CCT -Indian/Comoro.daylight.short=EAST -Indian/Comoro.generic.short=EAT -Indian/Comoro.standard.short=EAT -Indian/Kerguelen.daylight.short=TFST -Indian/Kerguelen.generic.short=TFT -Indian/Kerguelen.standard.short=TFT -Indian/Mahe.daylight.short=SCST -Indian/Mahe.generic.short=SCT -Indian/Mahe.standard.short=SCT -Indian/Maldives.daylight.short=MVST -Indian/Maldives.generic.short=MVT -Indian/Maldives.standard.short=MVT -Indian/Mauritius.daylight.short=MUST -Indian/Mauritius.generic.short=MUT -Indian/Mauritius.standard.short=MUT -Indian/Mayotte.daylight.short=EAST -Indian/Mayotte.generic.short=EAT -Indian/Mayotte.standard.short=EAT -Indian/Reunion.daylight.short=REST -Indian/Reunion.generic.short=RET -Indian/Reunion.standard.short=RET -Iran.daylight.short=IRDT -Iran.generic.short=IRT -Iran.standard.short=IRST -Israel.daylight.short=IDT -Israel.generic.short=IT -Israel.standard.short=IST -IST.daylight.short=IDT -IST.generic.short=IT -IST.standard.short=IST -Jamaica.daylight.short=EDT -Jamaica.generic.short=ET -Jamaica.standard.short=EST -Japan.daylight.short=JDT -Japan.generic.short=JT -Japan.standard.short=JST -JST.daylight.short=JDT -JST.generic.short=JT -JST.standard.short=JST -Kwajalein.daylight.short=MHST -Kwajalein.generic.short=MHT -Kwajalein.standard.short=MHT -Libya.daylight.short=EEST -Libya.generic.short=EET -Libya.standard.short=EET -MET.daylight.short=MEST -MET.generic.short=MET -MET.standard.short=MET -Mexico/BajaNorte.daylight.short=PDT -Mexico/BajaNorte.generic.short=PT -Mexico/BajaNorte.standard.short=PST -Mexico/BajaSur.daylight.short=MDT -Mexico/BajaSur.generic.short=MT -Mexico/BajaSur.standard.short=MST -Mexico/General.daylight.short=CDT -Mexico/General.generic.short=CT -Mexico/General.standard.short=CST -MIT.daylight.short=WSDT -MIT.generic.short=WST -MIT.standard.short=WST -MST7MDT.daylight.short=MDT -MST7MDT.generic.short=MT -MST7MDT.standard.short=MST -MST.daylight.short=MDT -MST.generic.short=MT -MST.standard.short=MST -Navajo.daylight.short=MDT -Navajo.generic.short=MT -Navajo.standard.short=MST -NET.daylight.short=AMST -NET.generic.short=AMT -NET.standard.short=AMT -NST.daylight.short=NZDT -NST.generic.short=NZT -NST.standard.short=NZST -NZ-CHAT.daylight.short=CHADT -NZ-CHAT.generic.short=CHAT -NZ-CHAT.standard.short=CHAST -NZ.daylight.short=NZDT -NZ.generic.short=NZT -NZ.standard.short=NZST -Pacific/Apia.daylight.short=WSDT -Pacific/Apia.generic.short=WST -Pacific/Apia.standard.short=WST -Pacific/Auckland.daylight.short=NZDT -Pacific/Auckland.generic.short=NZT -Pacific/Auckland.standard.short=NZST -Pacific/Chatham.daylight.short=CHADT -Pacific/Chatham.generic.short=CHAT -Pacific/Chatham.standard.short=CHAST -Pacific/Chuuk.daylight.short=CHUST -Pacific/Chuuk.generic.short=CHUT -Pacific/Chuuk.standard.short=CHUT -Pacific/Easter.daylight.short=EASST -Pacific/Easter.generic.short=EAST -Pacific/Easter.standard.short=EAST -Pacific/Efate.daylight.short=VUST -Pacific/Efate.generic.short=VUT -Pacific/Efate.standard.short=VUT -Pacific/Enderbury.daylight.short=PHOST -Pacific/Enderbury.generic.short=PHOT -Pacific/Enderbury.standard.short=PHOT -Pacific/Fakaofo.daylight.short=TKST -Pacific/Fakaofo.generic.short=TKT -Pacific/Fakaofo.standard.short=TKT -Pacific/Fiji.daylight.short=FJST -Pacific/Fiji.generic.short=FJT -Pacific/Fiji.standard.short=FJT -Pacific/Funafuti.daylight.short=TVST -Pacific/Funafuti.generic.short=TVT -Pacific/Funafuti.standard.short=TVT -Pacific/Galapagos.daylight.short=GALST -Pacific/Galapagos.generic.short=GALT -Pacific/Galapagos.standard.short=GALT -Pacific/Gambier.daylight.short=GAMST -Pacific/Gambier.generic.short=GAMT -Pacific/Gambier.standard.short=GAMT -Pacific/Guadalcanal.daylight.short=SBST -Pacific/Guadalcanal.generic.short=SBT -Pacific/Guadalcanal.standard.short=SBT -Pacific/Guam.daylight.short=ChDT -Pacific/Guam.generic.short=ChT -Pacific/Guam.standard.short=ChST -Pacific/Honolulu.daylight.short=HDT -Pacific/Honolulu.generic.short=HT -Pacific/Honolulu.standard.short=HST -Pacific/Johnston.daylight.short=HDT -Pacific/Johnston.generic.short=HT -Pacific/Johnston.standard.short=HST -Pacific/Kiritimati.daylight.short=LINST -Pacific/Kiritimati.generic.short=LINT -Pacific/Kiritimati.standard.short=LINT -Pacific/Kosrae.daylight.short=KOSST -Pacific/Kosrae.generic.short=KOST -Pacific/Kosrae.standard.short=KOST -Pacific/Kwajalein.daylight.short=MHST -Pacific/Kwajalein.generic.short=MHT -Pacific/Kwajalein.standard.short=MHT -Pacific/Majuro.daylight.short=MHST -Pacific/Majuro.generic.short=MHT -Pacific/Majuro.standard.short=MHT -Pacific/Marquesas.daylight.short=MARST -Pacific/Marquesas.generic.short=MART -Pacific/Marquesas.standard.short=MART -Pacific/Midway.daylight.short=SDT -Pacific/Midway.generic.short=ST -Pacific/Midway.standard.short=SST -Pacific/Nauru.daylight.short=NRST -Pacific/Nauru.generic.short=NRT -Pacific/Nauru.standard.short=NRT -Pacific/Niue.daylight.short=NUST -Pacific/Niue.generic.short=NUT -Pacific/Niue.standard.short=NUT -Pacific/Norfolk.daylight.short=NFST -Pacific/Norfolk.generic.short=NFT -Pacific/Norfolk.standard.short=NFT -Pacific/Noumea.daylight.short=NCST -Pacific/Noumea.generic.short=NCT -Pacific/Noumea.standard.short=NCT -Pacific/Pago_Pago.daylight.short=SDT -Pacific/Pago_Pago.generic.short=ST -Pacific/Pago_Pago.standard.short=SST -Pacific/Palau.daylight.short=PWST -Pacific/Palau.generic.short=PWT -Pacific/Palau.standard.short=PWT -Pacific/Pitcairn.daylight.short=PDT -Pacific/Pitcairn.generic.short=PT -Pacific/Pitcairn.standard.short=PST -Pacific/Pohnpei.daylight.short=PONST -Pacific/Pohnpei.generic.short=PONT -Pacific/Pohnpei.standard.short=PONT -Pacific/Ponape.daylight.short=PONST -Pacific/Ponape.generic.short=PONT -Pacific/Ponape.standard.short=PONT -Pacific/Port_Moresby.daylight.short=PGST -Pacific/Port_Moresby.generic.short=PGT -Pacific/Port_Moresby.standard.short=PGT -Pacific/Rarotonga.daylight.short=CKHST -Pacific/Rarotonga.generic.short=CKT -Pacific/Rarotonga.standard.short=CKT -Pacific/Saipan.daylight.short=ChDT -Pacific/Saipan.generic.short=ChT -Pacific/Saipan.standard.short=ChST -Pacific/Samoa.daylight.short=SDT -Pacific/Samoa.generic.short=ST -Pacific/Samoa.standard.short=SST -Pacific/Tahiti.daylight.short=TAHST -Pacific/Tahiti.generic.short=TAHT -Pacific/Tahiti.standard.short=TAHT -Pacific/Tarawa.daylight.short=GILST -Pacific/Tarawa.generic.short=GILT -Pacific/Tarawa.standard.short=GILT -Pacific/Tongatapu.daylight.short=TOST -Pacific/Tongatapu.generic.short=TOT -Pacific/Tongatapu.standard.short=TOT -Pacific/Truk.daylight.short=CHUST -Pacific/Truk.generic.short=CHUT -Pacific/Truk.standard.short=CHUT -Pacific/Wake.daylight.short=WAKST -Pacific/Wake.generic.short=WAKT -Pacific/Wake.standard.short=WAKT -Pacific/Wallis.daylight.short=WFST -Pacific/Wallis.generic.short=WFT -Pacific/Wallis.standard.short=WFT -Pacific/Yap.daylight.short=CHUST -Pacific/Yap.generic.short=CHUT -Pacific/Yap.standard.short=CHUT -PLT.daylight.short=PKST -PLT.generic.short=PKT -PLT.standard.short=PKT -PNT.daylight.short=MDT -PNT.generic.short=MT -PNT.standard.short=MST -Poland.daylight.short=CEST -Poland.generic.short=CET -Poland.standard.short=CET -Portugal.daylight.short=WEST -Portugal.generic.short=WET -Portugal.standard.short=WET -PRC.daylight.short=CDT -PRC.generic.short=CT -PRC.standard.short=CST -PRT.daylight.short=ADT -PRT.generic.short=AT -PRT.standard.short=AST -PST8PDT.daylight.short=PDT -PST8PDT.generic.short=PT -PST8PDT.standard.short=PST -PST.daylight.short=PDT -PST.generic.short=PT -PST.standard.short=PST -ROK.daylight.short=KDT -ROK.generic.short=KT -ROK.standard.short=KST -Singapore.daylight.short=SGST -Singapore.generic.short=SGT -Singapore.standard.short=SGT -SST.daylight.short=SBST -SST.generic.short=SBT -SST.standard.short=SBT -SystemV/AST4ADT.daylight.short=ADT -SystemV/AST4ADT.generic.short=AT -SystemV/AST4ADT.standard.short=AST -SystemV/AST4.daylight.short=ADT -SystemV/AST4.generic.short=AT -SystemV/AST4.standard.short=AST -SystemV/CST6CDT.daylight.short=CDT -SystemV/CST6CDT.generic.short=CT -SystemV/CST6CDT.standard.short=CST -SystemV/CST6.daylight.short=CDT -SystemV/CST6.generic.short=CT -SystemV/CST6.standard.short=CST -SystemV/EST5.daylight.short=EDT -SystemV/EST5EDT.daylight.short=EDT -SystemV/EST5EDT.generic.short=ET -SystemV/EST5EDT.standard.short=EST -SystemV/EST5.generic.short=ET -SystemV/EST5.standard.short=EST -SystemV/HST10.daylight.short=HDT -SystemV/HST10.generic.short=HT -SystemV/HST10.standard.short=HST -SystemV/MST7.daylight.short=MDT -SystemV/MST7.generic.short=MT -SystemV/MST7MDT.daylight.short=MDT -SystemV/MST7MDT.generic.short=MT -SystemV/MST7MDT.standard.short=MST -SystemV/MST7.standard.short=MST -SystemV/PST8.daylight.short=PDT -SystemV/PST8.generic.short=PT -SystemV/PST8PDT.daylight.short=PDT -SystemV/PST8PDT.generic.short=PT -SystemV/PST8PDT.standard.short=PST -SystemV/PST8.standard.short=PST -SystemV/YST9.daylight.short=AKDT -SystemV/YST9.generic.short=AKT -SystemV/YST9.standard.short=AKST -SystemV/YST9YDT.daylight.short=AKDT -SystemV/YST9YDT.generic.short=AKT -SystemV/YST9YDT.standard.short=AKST -Turkey.daylight.short=EEST -Turkey.generic.short=EET -Turkey.standard.short=EET -UCT.daylight.short=UTC -UCT.generic.short=UTC -UCT.standard.short=UTC -Universal.daylight.short=UTC -Universal.generic.short=UTC -Universal.standard.short=UTC -US/Alaska.daylight.short=AKDT -US/Alaska.generic.short=AKT -US/Alaska.standard.short=AKST -US/Aleutian.daylight.short=HADT -US/Aleutian.generic.short=HAT -US/Aleutian.standard.short=HAST -US/Arizona.daylight.short=MDT -US/Arizona.generic.short=MT -US/Arizona.standard.short=MST -US/Central.daylight.short=CDT -US/Central.generic.short=CT -US/Central.standard.short=CST -US/Eastern.daylight.short=EDT -US/Eastern.generic.short=ET -US/Eastern.standard.short=EST -US/East-Indiana.daylight.short=EDT -US/East-Indiana.generic.short=ET -US/East-Indiana.standard.short=EST -US/Hawaii.daylight.short=HDT -US/Hawaii.generic.short=HT -US/Hawaii.standard.short=HST -US/Indiana-Starke.daylight.short=CDT -US/Indiana-Starke.generic.short=CT -US/Indiana-Starke.standard.short=CST -US/Michigan.daylight.short=EDT -US/Michigan.generic.short=ET -US/Michigan.standard.short=EST -US/Mountain.daylight.short=MDT -US/Mountain.generic.short=MT -US/Mountain.standard.short=MST -US/Pacific.daylight.short=PDT -US/Pacific.generic.short=PT -US/Pacific-New.daylight.short=PDT -US/Pacific-New.generic.short=PT -US/Pacific-New.standard.short=PST -US/Pacific.standard.short=PST -US/Samoa.daylight.short=SDT -US/Samoa.generic.short=ST -US/Samoa.standard.short=SST -UTC.daylight.short=UTC -UTC.generic.short=UTC -UTC.standard.short=UTC -VST.daylight.short=ICST -VST.generic.short=ICT -VST.standard.short=ICT -WET.daylight.short=WEST -WET.generic.short=WET -WET.standard.short=WET -W-SU.daylight.short=MSD -W-SU.generic.short=MT -W-SU.standard.short=MSK -Zulu.daylight.short=UTC -Zulu.generic.short=UTC -Zulu.standard.short=UTC diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ko.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ko.properties deleted file mode 100644 index 52c2bc820ad..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ko.properties +++ /dev/null @@ -1,651 +0,0 @@ -ACT.daylight.long=\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBD81\uBD80 \uC9C0\uC5ED) -ACT.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uBD81\uBD80 \uC9C0\uC5ED) -ACT.standard.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uBD81\uBD80 \uC9C0\uC5ED) -AET.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -AET.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -AET.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -AGT.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -ART.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -AST.generic.long=\uC54C\uB798\uC2A4\uCE74 \uD45C\uC900\uC2DC -Africa/Abidjan.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Africa/Accra.generic.long=\uAC00\uB098 \uD45C\uC900\uC2DC -Africa/Addis_Ababa.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Algiers.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Africa/Asmara.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Asmera.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Bamako.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Africa/Bangui.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Banjul.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Africa/Bissau.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Africa/Blantyre.generic.long=\uC911\uC559 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Brazzaville.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Bujumbura.generic.long=\uC911\uC559 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Cairo.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Africa/Casablanca.generic.long=\uC11C\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Africa/Ceuta.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Africa/Conakry.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Africa/Dakar.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Africa/Dar_es_Salaam.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Djibouti.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Douala.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/El_Aaiun.generic.long=\uC11C\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Africa/Freetown.generic.long=\uC2DC\uC5D0\uB77C\uB9AC\uC628 \uD45C\uC900\uC2DC -Africa/Gaborone.generic.long=\uC911\uC559 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Harare.generic.long=\uC911\uC559 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Johannesburg.generic.long=\uB0A8\uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Juba.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Kampala.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Khartoum.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Kigali.generic.long=\uC911\uC559 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Kinshasa.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Lagos.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Libreville.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Lome.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Africa/Luanda.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Lubumbashi.generic.long=\uC911\uC559 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Lusaka.generic.long=\uC911\uC559 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Malabo.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Maputo.generic.long=\uC911\uC559 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Maseru.generic.long=\uB0A8\uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Mbabane.generic.long=\uB0A8\uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Mogadishu.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Monrovia.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Africa/Nairobi.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Ndjamena.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Niamey.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Nouakchott.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Africa/Ouagadougou.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Africa/Porto-Novo.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Africa/Sao_Tome.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Africa/Timbuktu.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Africa/Tripoli.generic.long=\ub3d9\ubd80 \uc720\ub7fd \ud45c\uc900\uc2dc -Africa/Tunis.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Africa/Windhoek.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -America/Adak.generic.long=\uD558\uC640\uC774-\uC54C\uB8E8\uC0E8 \uD45C\uC900\uC2DC -America/Anchorage.generic.long=\uC54C\uB798\uC2A4\uCE74 \uD45C\uC900\uC2DC -America/Anguilla.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Antigua.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Araguaina.generic.long=\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC -America/Argentina/Buenos_Aires.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Argentina/Catamarca.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Argentina/ComodRivadavia.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Argentina/Cordoba.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Argentina/Jujuy.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Argentina/La_Rioja.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Argentina/Mendoza.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Argentina/Rio_Gallegos.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Argentina/Salta.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Argentina/San_Juan.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Argentina/San_Luis.generic.long=\uc544\ub974\ud5e8\ud2f0\ub098 \ud45c\uc900\uc2dc -America/Argentina/Tucuman.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Argentina/Ushuaia.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Aruba.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Asuncion.generic.long=\uD30C\uB77C\uACFC\uC774 \uD45C\uC900\uC2DC -America/Atikokan.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Atka.generic.long=\uD558\uC640\uC774-\uC54C\uB8E8\uC0E8 \uD45C\uC900\uC2DC -America/Bahia.generic.long=\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC -America/Bahia_Banderas.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Barbados.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Belem.generic.long=\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC -America/Belize.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Blanc-Sablon.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Boa_Vista.generic.long=\uC544\uB9C8\uC874 \uD45C\uC900\uC2DC -America/Bogota.generic.long=\uCF5C\uB86C\uBE44\uC544 \uD45C\uC900\uC2DC -America/Boise.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -America/Buenos_Aires.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Cambridge_Bay.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -America/Campo_Grande.generic.long=\uC544\uB9C8\uC874 \uD45C\uC900\uC2DC -America/Cancun.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Caracas.generic.long=\uBCA0\uB124\uC218\uC5D8\uB77C \uD45C\uC900\uC2DC -America/Catamarca.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Cayenne.generic.long=\uD504\uB791\uC2A4\uB839 \uAE30\uC544\uB098 \uD45C\uC900\uC2DC -America/Cayman.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Chicago.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Chihuahua.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -America/Coral_Harbour.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Cordoba.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Costa_Rica.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Creston.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -America/Cuiaba.generic.long=\uC544\uB9C8\uC874 \uD45C\uC900\uC2DC -America/Curacao.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Danmarkshavn.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -America/Dawson.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC -America/Dawson_Creek.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -America/Denver.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -America/Detroit.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Dominica.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Edmonton.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -America/Eirunepe.generic.long=\uc5d0\uc774\ucee4 \uc2dc\uac04 -America/El_Salvador.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Ensenada.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC -America/Fort_Wayne.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Fortaleza.generic.long=\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC -America/Glace_Bay.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Godthab.generic.long=\uC11C\uBD80 \uADF8\uB9B0\uB780\uB4DC \uD45C\uC900\uC2DC -America/Goose_Bay.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Grand_Turk.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Grenada.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Guadeloupe.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Guatemala.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Guayaquil.generic.long=\uC5D0\uCF70\uB3C4\uB974 \uD45C\uC900\uC2DC -America/Guyana.generic.long=\uAC00\uC774\uC544\uB098 \uD45C\uC900\uC2DC -America/Halifax.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Havana.generic.long=\uCFE0\uBC14 \uD45C\uC900\uC2DC -America/Hermosillo.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -America/Indiana/Indianapolis.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Indiana/Knox.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Indiana/Marengo.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Indiana/Petersburg.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Indiana/Tell_City.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Indiana/Vevay.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Indiana/Vincennes.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Indiana/Winamac.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Indianapolis.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Inuvik.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -America/Iqaluit.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Jamaica.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Jujuy.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Juneau.generic.long=\uC54C\uB798\uC2A4\uCE74 \uD45C\uC900\uC2DC -America/Kentucky/Louisville.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Kentucky/Monticello.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Knox_IN.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Kralendijk.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/La_Paz.generic.long=\uBCFC\uB9AC\uBE44\uC544 \uD45C\uC900\uC2DC -America/Lima.generic.long=\uD398\uB8E8 \uD45C\uC900\uC2DC -America/Los_Angeles.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC -America/Louisville.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Lower_Princes.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Maceio.generic.long=\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC -America/Managua.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Manaus.generic.long=\uC544\uB9C8\uC874 \uD45C\uC900\uC2DC -America/Marigot.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Martinique.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Matamoros.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Mazatlan.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -America/Mendoza.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Menominee.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Merida.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Metlakatla.daylight.long=\uBA54\uD2B8\uB77C\uCE74\uD2B8\uB77C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04 -America/Metlakatla.generic.long=\uBA54\uD2B8\uB77C\uCE74\uD2B8\uB77C \uD45C\uC900\uC2DC -America/Metlakatla.standard.long=\uBA54\uD2B8\uB77C\uCE74\uD2B8\uB77C \uD45C\uC900\uC2DC -America/Mexico_City.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Miquelon.generic.long=\uD53C\uC5D0\uB974 \uBBF8\uD074\uB871 \uD45C\uC900\uC2DC -America/Moncton.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Monterrey.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Montevideo.generic.long=\uC6B0\uB8E8\uACFC\uC774 \uD45C\uC900\uC2DC -America/Montreal.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Montserrat.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Nassau.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/New_York.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Nipigon.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Nome.generic.long=\uC54C\uB798\uC2A4\uCE74 \uD45C\uC900\uC2DC -America/Noronha.generic.long=\uD398\uB974\uB09C\uB3C4 \uB4DC \uB178\uB85C\uD558 \uD45C\uC900\uC2DC -America/North_Dakota/Beulah.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/North_Dakota/Center.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/North_Dakota/New_Salem.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Ojinaga.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -America/Panama.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Pangnirtung.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Paramaribo.generic.long=\uC218\uB9AC\uB0A8 \uD45C\uC900\uC2DC -America/Phoenix.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -America/Port-au-Prince.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Port_of_Spain.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Porto_Acre.generic.long=\uc5d0\uc774\ucee4 \uc2dc\uac04 -America/Porto_Velho.generic.long=\uC544\uB9C8\uC874 \uD45C\uC900\uC2DC -America/Puerto_Rico.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Rainy_River.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Rankin_Inlet.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Recife.generic.long=\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC -America/Regina.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Resolute.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Rio_Branco.generic.long=\uc5d0\uc774\ucee4 \uc2dc\uac04 -America/Rosario.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC -America/Santa_Isabel.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC -America/Santarem.generic.long=\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC -America/Santiago.generic.long=\uCE60\uB808 \uD45C\uC900\uC2DC -America/Santo_Domingo.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Sao_Paulo.generic.long=\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC -America/Scoresbysund.generic.long=\uB3D9\uBD80 \uADF8\uB9B0\uB780\uB4DC \uD45C\uC900\uC2DC -America/Shiprock.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -America/Sitka.generic.long=\uC54C\uB798\uC2A4\uCE74 \uD45C\uC900\uC2DC -America/St_Barthelemy.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/St_Johns.generic.long=\uB274\uD380\uB4E4\uB79C\uB4DC \uD45C\uC900\uC2DC -America/St_Kitts.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/St_Lucia.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/St_Thomas.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/St_Vincent.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Swift_Current.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Tegucigalpa.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Thule.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Thunder_Bay.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Tijuana.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC -America/Toronto.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -America/Tortola.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Vancouver.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC -America/Virgin.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -America/Whitehorse.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC -America/Winnipeg.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -America/Yakutat.generic.long=\uC54C\uB798\uC2A4\uCE74 \uD45C\uC900\uC2DC -America/Yellowknife.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -Antarctica/Casey.daylight.long=\uC11C\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Antarctica/Casey.generic.long=\uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Antarctica/Casey.standard.long=\uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Antarctica/Davis.generic.long=\uB370\uC774\uBE44\uC2A4 \uD45C\uC900\uC2DC -Antarctica/DumontDUrville.generic.long=\uB450\uBAAC\uD2B8\uC6B0\uB974\uBE4C \uD45C\uC900\uC2DC -Antarctica/Macquarie.daylight.long=\uB9E4\uCF70\uB9AC \uC12C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04 -Antarctica/Macquarie.generic.long=\uB9E4\uCF70\uB9AC \uC12C \uD45C\uC900\uC2DC -Antarctica/Macquarie.standard.long=\uB9E4\uCF70\uB9AC \uC12C \uD45C\uC900\uC2DC -Antarctica/Mawson.generic.long=\uB9C8\uC2A8 \uD45C\uC900\uC2DC -Antarctica/McMurdo.generic.long=\uB274\uC9C8\uB79C\uB4DC \uD45C\uC900\uC2DC -Antarctica/Palmer.generic.long=\uCE60\uB808 \uD45C\uC900\uC2DC -Antarctica/Rothera.generic.long=\uB85C\uB354\uB77C \uD45C\uC900\uC2DC -Antarctica/South_Pole.generic.long=\uB274\uC9C8\uB79C\uB4DC \uD45C\uC900\uC2DC -Antarctica/Syowa.generic.long=\uC1FC\uC640 \uD45C\uC900\uC2DC -Antarctica/Vostok.generic.long=\uBCF4\uC2A4\uD1A1 \uD45C\uC900\uC2DC -Arctic/Longyearbyen.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Asia/Aden.generic.long=\uC544\uB77C\uBE44\uC544 \uD45C\uC900\uC2DC -Asia/Almaty.generic.long=\uC54C\uB9C8\uC544\uD0C0 \uD45C\uC900\uC2DC -Asia/Amman.generic.long=\uc544\ub77c\ube44\uc544 \ud45c\uc900\uc2dc -Asia/Anadyr.generic.long=\uC544\uB098\uB514\uB9AC \uD45C\uC900\uC2DC -Asia/Aqtau.generic.long=\uC544\uD06C\uD0C0\uC6B0 \uD45C\uC900\uC2DC -Asia/Aqtobe.generic.long=\uC544\uD06C\uD1A0\uBCA0 \uD45C\uC900\uC2DC -Asia/Ashgabat.generic.long=\uD22C\uB974\uD06C\uBA54\uB2C8\uC2A4\uD0C4 \uD45C\uC900\uC2DC -Asia/Ashkhabad.generic.long=\uD22C\uB974\uD06C\uBA54\uB2C8\uC2A4\uD0C4 \uD45C\uC900\uC2DC -Asia/Baghdad.generic.long=\uC544\uB77C\uBE44\uC544 \uD45C\uC900\uC2DC -Asia/Bahrain.generic.long=\uC544\uB77C\uBE44\uC544 \uD45C\uC900\uC2DC -Asia/Baku.generic.long=\uC544\uC81C\uB974\uBC14\uC774\uC794 \uD45C\uC900\uC2DC -Asia/Bangkok.generic.long=\uC778\uB3C4\uCC28\uC774\uB098 \uBC18\uB3C4 \uD45C\uC900\uC2DC -Asia/Beirut.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Asia/Bishkek.generic.long=\uD0A4\uB974\uAE30\uC2A4\uC2A4\uD0C4 \uD45C\uC900\uC2DC -Asia/Brunei.generic.long=\uBE0C\uB8E8\uB098\uC774 \uD45C\uC900\uC2DC -Asia/Calcutta.generic.long=\uC778\uB3C4 \uD45C\uC900\uC2DC -Asia/Choibalsan.generic.long=\uCD08\uC774\uBC1C\uC0B0 \uD45C\uC900\uC2DC -Asia/Chongqing.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC -Asia/Chungking.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC -Asia/Colombo.generic.long=\uC778\uB3C4 \uD45C\uC900\uC2DC -Asia/Dacca.generic.long=\uBC29\uAE00\uB77C\uB370\uC2DC \uD45C\uC900\uC2DC -Asia/Damascus.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Asia/Dhaka.generic.long=\uBC29\uAE00\uB77C\uB370\uC2DC \uD45C\uC900\uC2DC -Asia/Dili.generic.long=\uB3D9\uD2F0\uBAA8\uB974 \uD45C\uC900\uC2DC -Asia/Dubai.generic.long=\uAC78\uD504\uB9CC \uD45C\uC900\uC2DC -Asia/Dushanbe.generic.long=\uD0C0\uC9C0\uD0A4\uC2A4\uD0C4 \uD45C\uC900\uC2DC -Asia/Gaza.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Asia/Harbin.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC -Asia/Hebron.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Asia/Ho_Chi_Minh.generic.long=\uC778\uB3C4\uCC28\uC774\uB098 \uBC18\uB3C4 \uD45C\uC900\uC2DC -Asia/Hong_Kong.generic.long=\uD64D\uCF69 \uD45C\uC900\uC2DC -Asia/Hovd.generic.long=\uD638\uBE0C\uB4DC \uD45C\uC900\uC2DC -Asia/Irkutsk.generic.long=\uC774\uB974\uCFE0\uCE20\uD06C \uD45C\uC900\uC2DC -Asia/Istanbul.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Asia/Jakarta.generic.long=\uC11C\uBD80 \uC778\uB3C4\uB124\uC2DC\uC544 \uD45C\uC900\uC2DC -Asia/Jayapura.generic.long=\uB3D9\uBD80 \uC778\uB3C4\uB124\uC2DC\uC544 \uD45C\uC900\uC2DC -Asia/Jerusalem.generic.long=\uC544\uC2A4\uB77C\uC5D8 \uD45C\uC900\uC2DC -Asia/Kabul.generic.long=\uC544\uD504\uAC00\uB2C8\uC2A4\uD0C4 \uD45C\uC900\uC2DC -Asia/Kamchatka.generic.long=\uD398\uD2B8\uB85C\uD30C\uBE0C\uB85C\uD504\uC2A4\uD06C-\uCE84\uCC28\uCE20\uD0A4 \uD45C\uC900\uC2DC -Asia/Karachi.generic.long=\uD30C\uD0A4\uC2A4\uD0C4 \uD45C\uC900\uC2DC -Asia/Kashgar.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC -Asia/Kathmandu.generic.long=\uB124\uD314 \uD45C\uC900\uC2DC -Asia/Katmandu.generic.long=\uB124\uD314 \uD45C\uC900\uC2DC -Asia/Khandyga.daylight.long=\uD55C\uB514\uAC00 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04 -Asia/Khandyga.generic.long=\uD55C\uB514\uAC00 \uD45C\uC900\uC2DC -Asia/Khandyga.standard.long=\uD55C\uB514\uAC00 \uD45C\uC900\uC2DC -Asia/Kolkata.generic.long=\uC778\uB3C4 \uD45C\uC900\uC2DC -Asia/Krasnoyarsk.generic.long=\uD06C\uB77C\uC2A4\uB178\uC57C\uB974\uC2A4\uD06C \uD45C\uC900\uC2DC -Asia/Kuala_Lumpur.generic.long=\uB9D0\uB808\uC774\uC2DC\uC544 \uD45C\uC900\uC2DC -Asia/Kuching.generic.long=\uB9D0\uB808\uC774\uC2DC\uC544 \uD45C\uC900\uC2DC -Asia/Kuwait.generic.long=\uC544\uB77C\uBE44\uC544 \uD45C\uC900\uC2DC -Asia/Macao.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC -Asia/Macau.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC -Asia/Magadan.generic.long=\uB9C8\uAC00\uB2E8 \uD45C\uC900\uC2DC -Asia/Makassar.generic.long=\uC911\uBD80 \uC778\uB3C4\uB124\uC2DC\uC544 \uD45C\uC900\uC2DC -Asia/Manila.generic.long=\uD544\uB9AC\uD540 \uD45C\uC900\uC2DC -Asia/Muscat.generic.long=\uAC78\uD504\uB9CC \uD45C\uC900\uC2DC -Asia/Nicosia.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Asia/Novokuznetsk.generic.long=\uB178\uBCF4\uC2DC\uBE44\uB974\uC2A4\uD06C \uD45C\uC900\uC2DC -Asia/Novosibirsk.generic.long=\uB178\uBCF4\uC2DC\uBE44\uB974\uC2A4\uD06C \uD45C\uC900\uC2DC -Asia/Omsk.generic.long=\uC634\uC2A4\uD06C \uD45C\uC900\uC2DC -Asia/Oral.generic.long=\uC624\uB7F4 \uD45C\uC900\uC2DC -Asia/Phnom_Penh.generic.long=\uC778\uB3C4\uCC28\uC774\uB098 \uBC18\uB3C4 \uD45C\uC900\uC2DC -Asia/Pontianak.generic.long=\uC11C\uBD80 \uC778\uB3C4\uB124\uC2DC\uC544 \uD45C\uC900\uC2DC -Asia/Pyongyang.generic.long=\uB300\uD55C\uBBFC\uAD6D \uD45C\uC900\uC2DC -Asia/Qatar.generic.long=\uC544\uB77C\uBE44\uC544 \uD45C\uC900\uC2DC -Asia/Qyzylorda.generic.long=\uD0A4\uC9C8\uB85C\uB974\uB2E4 \uD45C\uC900\uC2DC -Asia/Rangoon.generic.long=\uBBF8\uC580\uB9C8 \uD45C\uC900\uC2DC -Asia/Saigon.generic.long=\uC778\uB3C4\uCC28\uC774\uB098 \uBC18\uB3C4 \uD45C\uC900\uC2DC -Asia/Sakhalin.generic.long=\uC0AC\uD560\uB9B0 \uD45C\uC900\uC2DC -Asia/Samarkand.generic.long=\uC6B0\uC988\uBCA0\uD0A4\uC2A4\uD0C4 \uD45C\uC900\uC2DC -Asia/Seoul.generic.long=\uB300\uD55C\uBBFC\uAD6D \uD45C\uC900\uC2DC -Asia/Shanghai.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC -Asia/Singapore.generic.long=\uC2F1\uAC00\uD3EC\uB974 \uD45C\uC900\uC2DC -Asia/Taipei.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC -Asia/Tashkent.generic.long=\uC6B0\uC988\uBCA0\uD0A4\uC2A4\uD0C4 \uD45C\uC900\uC2DC -Asia/Tbilisi.generic.long=\uADF8\uB8E8\uC9C0\uC57C \uD45C\uC900\uC2DC -Asia/Tehran.generic.long=\uC774\uB780 \uD45C\uC900\uC2DC -Asia/Tel_Aviv.generic.long=\uC544\uC2A4\uB77C\uC5D8 \uD45C\uC900\uC2DC -Asia/Thimbu.generic.long=\uBD80\uD0C4 \uD45C\uC900\uC2DC -Asia/Thimphu.generic.long=\uBD80\uD0C4 \uD45C\uC900\uC2DC -Asia/Tokyo.generic.long=\uC77C\uBCF8 \uD45C\uC900\uC2DC -Asia/Ujung_Pandang.generic.long=\uC911\uBD80 \uC778\uB3C4\uB124\uC2DC\uC544 \uD45C\uC900\uC2DC -Asia/Ulaanbaatar.generic.long=\uC6B8\uB780\uBC14\uD1A0\uB974 \uD45C\uC900\uC2DC -Asia/Ulan_Bator.generic.long=\uC6B8\uB780\uBC14\uD1A0\uB974 \uD45C\uC900\uC2DC -Asia/Urumqi.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC -Asia/Ust-Nera.daylight.long=\uC6B0\uC2A4\uD2F0\uB124\uB77C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04 -Asia/Ust-Nera.generic.long=\uC6B0\uC2A4\uD2F0\uB124\uB77C \uD45C\uC900\uC2DC -Asia/Ust-Nera.standard.long=\uC6B0\uC2A4\uD2F0\uB124\uB77C \uD45C\uC900\uC2DC -Asia/Vientiane.generic.long=\uC778\uB3C4\uCC28\uC774\uB098 \uBC18\uB3C4 \uD45C\uC900\uC2DC -Asia/Vladivostok.generic.long=\uBE14\uB77C\uB514\uBCF4\uC2A4\uD1A1 \uD45C\uC900\uC2DC -Asia/Yakutsk.generic.long=\uC57C\uCFE0\uCE20\uD06C \uD45C\uC900\uC2DC -Asia/Yekaterinburg.generic.long=\uC608\uCE74\uD14C\uB9B0\uBD80\uB974\uD06C \uD45C\uC900\uC2DC -Asia/Yerevan.generic.long=\uC544\uB974\uBA54\uB2C8\uC544 \uD45C\uC900\uC2DC -Atlantic/Azores.generic.long=\uC544\uC870\uB808\uC2A4 \uD45C\uC900\uC2DC -Atlantic/Bermuda.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -Atlantic/Canary.generic.long=\uC11C\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Atlantic/Cape_Verde.generic.long=\uCF00\uC774\uD504\uBCA0\uB974\uB370 \uD45C\uC900\uC2DC -Atlantic/Faeroe.generic.long=\uC11C\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Atlantic/Faroe.generic.long=\uC11C\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Atlantic/Jan_Mayen.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Atlantic/Madeira.generic.long=\uC11C\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Atlantic/Reykjavik.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Atlantic/South_Georgia.generic.long=\uC0AC\uC6B0\uC2A4\uC870\uC9C0\uC544 \uD45C\uC900\uC2DC -Atlantic/St_Helena.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Atlantic/Stanley.generic.long=\uD3EC\uD074\uB79C\uB4DC \uC81C\uB3C4 \uD45C\uC900\uC2DC -Australia/ACT.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/ACT.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/ACT.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/Adelaide.daylight.long=\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Australia/Adelaide.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Australia/Adelaide.standard.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Australia/Brisbane.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD038\uC990\uB79C\uB4DC) -Australia/Brisbane.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD038\uC990\uB79C\uB4DC) -Australia/Brisbane.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD038\uC990\uB79C\uB4DC) -Australia/Broken_Hill.daylight.long=\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/Broken_Hill.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/Broken_Hill.standard.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/Canberra.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/Canberra.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/Canberra.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/Currie.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/Currie.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/Currie.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/Darwin.daylight.long=\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBD81\uBD80 \uC9C0\uC5ED) -Australia/Darwin.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uBD81\uBD80 \uC9C0\uC5ED) -Australia/Darwin.standard.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uBD81\uBD80 \uC9C0\uC5ED) -Australia/Eucla.daylight.long=\uC911\uC559 \uC11C\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Australia/Eucla.generic.long=\uC911\uC559 \uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Australia/Eucla.standard.long=\uC911\uC559 \uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Australia/Hobart.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544) -Australia/Hobart.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544) -Australia/Hobart.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544) -Australia/LHI.generic.long=\uB85C\uB4DC\uD558\uC6B0 \uD45C\uC900\uC2DC -Australia/Lindeman.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD038\uC990\uB79C\uB4DC) -Australia/Lindeman.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD038\uC990\uB79C\uB4DC) -Australia/Lindeman.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD038\uC990\uB79C\uB4DC) -Australia/Lord_Howe.generic.long=\uB85C\uB4DC\uD558\uC6B0 \uD45C\uC900\uC2DC -Australia/Melbourne.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBE45\uD1A0\uB9AC\uC544) -Australia/Melbourne.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uBE45\uD1A0\uB9AC\uC544) -Australia/Melbourne.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uBE45\uD1A0\uB9AC\uC544) -Australia/NSW.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/NSW.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/NSW.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/North.daylight.long=\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBD81\uBD80 \uC9C0\uC5ED) -Australia/North.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uBD81\uBD80 \uC9C0\uC5ED) -Australia/North.standard.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uBD81\uBD80 \uC9C0\uC5ED) -Australia/Perth.daylight.long=\uC11C\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Australia/Perth.generic.long=\uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Australia/Perth.standard.long=\uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Australia/Queensland.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD038\uC990\uB79C\uB4DC) -Australia/Queensland.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD038\uC990\uB79C\uB4DC) -Australia/Queensland.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD038\uC990\uB79C\uB4DC) -Australia/South.daylight.long=\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Australia/South.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Australia/South.standard.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Australia/Sydney.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/Sydney.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/Sydney.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/Tasmania.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544) -Australia/Tasmania.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544) -Australia/Tasmania.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544) -Australia/Victoria.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBE45\uD1A0\uB9AC\uC544) -Australia/Victoria.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uBE45\uD1A0\uB9AC\uC544) -Australia/Victoria.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uBE45\uD1A0\uB9AC\uC544) -Australia/West.daylight.long=\uC11C\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Australia/West.generic.long=\uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Australia/West.standard.long=\uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544) -Australia/Yancowinna.daylight.long=\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/Yancowinna.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -Australia/Yancowinna.standard.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988) -BET.generic.long=\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC -BST.generic.long=\uBC29\uAE00\uB77C\uB370\uC2DC \uD45C\uC900\uC2DC -Brazil/Acre.generic.long=\uc5d0\uc774\ucee4 \uc2dc\uac04 -Brazil/DeNoronha.generic.long=\uD398\uB974\uB09C\uB3C4 \uB4DC \uB178\uB85C\uD558 \uD45C\uC900\uC2DC -Brazil/East.generic.long=\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC -Brazil/West.generic.long=\uC544\uB9C8\uC874 \uD45C\uC900\uC2DC -CAT.generic.long=\uC911\uC559 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -CET.generic.long=\uc911\uc559 \uc720\ub7fd \ud45c\uc900\uc2dc -CNT.generic.long=\uB274\uD380\uB4E4\uB79C\uB4DC \uD45C\uC900\uC2DC -CST.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -CST6CDT.generic.long=\uc911\ubd80 \ud45c\uc900\uc2dc -CTT.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC -Canada/Atlantic.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -Canada/Central.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -Canada/East-Saskatchewan.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -Canada/Eastern.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -Canada/Mountain.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -Canada/Newfoundland.generic.long=\uB274\uD380\uB4E4\uB79C\uB4DC \uD45C\uC900\uC2DC -Canada/Pacific.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC -Canada/Saskatchewan.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -Canada/Yukon.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC -Chile/Continental.generic.long=\uCE60\uB808 \uD45C\uC900\uC2DC -Chile/EasterIsland.generic.long=\uC774\uC2A4\uD130 \uC12C \uD45C\uC900\uC2DC -Cuba.generic.long=\uCFE0\uBC14 \uD45C\uC900\uC2DC -EAT.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -ECT.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -EET.generic.long=\ub3d9\ubd80 \uc720\ub7fd \ud45c\uc900\uc2dc -EST.generic.long=\ub3d9\ubd80 \ud45c\uc900\uc2dc -EST5EDT.generic.long=\ub3d9\ubd80 \ud45c\uc900\uc2dc -Egypt.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Eire.generic.long=\uC544\uC77C\uB79C\uB4DC \uD45C\uC900\uC2DC -Etc/Greenwich.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Etc/UCT.generic.long=\uC9C0\uC5ED \uD45C\uC900\uC2DC -Etc/UTC.generic.long=\uC9C0\uC5ED \uD45C\uC900\uC2DC -Etc/Universal.generic.long=\uC9C0\uC5ED \uD45C\uC900\uC2DC -Etc/Zulu.generic.long=\uC9C0\uC5ED \uD45C\uC900\uC2DC -Europe/Amsterdam.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Andorra.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Athens.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Belfast.generic.long=\uC601\uAD6D \uD45C\uC900\uC2DC -Europe/Belgrade.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Berlin.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Bratislava.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Brussels.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Bucharest.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Budapest.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Busingen.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Chisinau.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Copenhagen.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Dublin.generic.long=\uC544\uC77C\uB79C\uB4DC \uD45C\uC900\uC2DC -Europe/Gibraltar.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Guernsey.generic.long=\uC601\uAD6D \uD45C\uC900\uC2DC -Europe/Helsinki.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Isle_of_Man.generic.long=\uC601\uAD6D \uD45C\uC900\uC2DC -Europe/Istanbul.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Jersey.generic.long=\uC601\uAD6D \uD45C\uC900\uC2DC -Europe/Kaliningrad.daylight.long=\uADF9\uB3D9 \uC720\uB7FD \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04 -Europe/Kaliningrad.generic.long=\uADF9\uB3D9 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Kaliningrad.standard.long=\uADF9\uB3D9 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Kiev.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Lisbon.generic.long=\uC11C\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Ljubljana.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/London.generic.long=\uC601\uAD6D \uD45C\uC900\uC2DC -Europe/Luxembourg.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Madrid.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Malta.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Mariehamn.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Minsk.daylight.long=\uADF9\uB3D9 \uC720\uB7FD \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04 -Europe/Minsk.generic.long=\uADF9\uB3D9 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Minsk.standard.long=\uADF9\uB3D9 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Monaco.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Moscow.generic.long=\uBAA8\uC2A4\uD06C\uBC14 \uD45C\uC900\uC2DC -Europe/Nicosia.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Oslo.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Paris.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Podgorica.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Prague.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Riga.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Rome.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Samara.generic.long=\uC0AC\uB9C8\uB77C \uD45C\uC900\uC2DC -Europe/San_Marino.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Sarajevo.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Simferopol.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Skopje.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Sofia.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Stockholm.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Tallinn.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Tirane.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Tiraspol.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Uzhgorod.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Vaduz.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Vatican.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Vienna.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Vilnius.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Volgograd.generic.long=\uBCFC\uACE0\uADF8\uB77C\uB4DC \uD45C\uC900\uC2DC -Europe/Warsaw.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Zagreb.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Zaporozhye.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -Europe/Zurich.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -GB-Eire.generic.long=\uC601\uAD6D \uD45C\uC900\uC2DC -GB.generic.long=\uC601\uAD6D \uD45C\uC900\uC2DC -GMT.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Greenwich.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -HST.generic.long=\ud558\uc640\uc774 \ud45c\uc900\uc2dc -Hongkong.generic.long=\uD64D\uCF69 \uD45C\uC900\uC2DC -IET.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -IST.generic.long=\uC778\uB3C4 \uD45C\uC900\uC2DC -Iceland.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC -Indian/Antananarivo.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Indian/Chagos.generic.long=\uC778\uB3C4\uC591 \uC2DD\uBBFC\uC9C0 \uD45C\uC900\uC2DC -Indian/Christmas.generic.long=\uD06C\uB9AC\uC2A4\uB9C8\uC2A4 \uC12C \uD45C\uC900\uC2DC -Indian/Cocos.generic.long=\uCF54\uCF54\uC2A4 \uC81C\uB3C4 \uD45C\uC900\uC2DC -Indian/Comoro.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Indian/Kerguelen.generic.long=\uD504\uB791\uC2A4\uB839 \uB0A8\uBD80 \uBC0F \uB0A8\uADF9 \uB300\uB959 \uD45C\uC900\uC2DC -Indian/Mahe.generic.long=\uC138\uC774\uC178 \uD45C\uC900\uC2DC -Indian/Maldives.generic.long=\uBAB0\uB514\uBE0C \uD45C\uC900\uC2DC -Indian/Mauritius.generic.long=\uBAA8\uB9AC\uC154\uC2A4 \uD45C\uC900\uC2DC -Indian/Mayotte.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC -Indian/Reunion.generic.long=\uB808\uC704\uB2C8\uC639 \uD45C\uC900\uC2DC -Iran.generic.long=\uC774\uB780 \uD45C\uC900\uC2DC -Israel.generic.long=\uC544\uC2A4\uB77C\uC5D8 \uD45C\uC900\uC2DC -JST.generic.long=\uC77C\uBCF8 \uD45C\uC900\uC2DC -Jamaica.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -Japan.generic.long=\uC77C\uBCF8 \uD45C\uC900\uC2DC -Kwajalein.generic.long=\uB9C8\uC15C \uC81C\uB3C4 \uD45C\uC900\uC2DC -Libya.generic.long=\ub3d9\ubd80 \uc720\ub7fd \ud45c\uc900\uc2dc -MET.generic.long=MET -MIT.generic.long=\uC11C\uC0AC\uBAA8\uC544 \uD45C\uC900\uC2DC -MST.generic.long=\uc0b0\uc9c0 \ud45c\uc900\uc2dc -MST7MDT.generic.long=\uc0b0\uc9c0 \ud45c\uc900\uc2dc -Mexico/BajaNorte.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC -Mexico/BajaSur.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -Mexico/General.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -NET.generic.long=\uC544\uB974\uBA54\uB2C8\uC544 \uD45C\uC900\uC2DC -NST.generic.long=\uB274\uC9C8\uB79C\uB4DC \uD45C\uC900\uC2DC -NZ-CHAT.generic.long=\uCC44\uD140 \uD45C\uC900\uC2DC -NZ.generic.long=\uB274\uC9C8\uB79C\uB4DC \uD45C\uC900\uC2DC -Navajo.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -PLT.generic.long=\uD30C\uD0A4\uC2A4\uD0C4 \uD45C\uC900\uC2DC -PNT.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -PRC.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC -PRT.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -PST.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC -PST8PDT.generic.long=\ud0dc\ud3c9\uc591 \ud45c\uc900\uc2dc -Pacific/Apia.generic.long=\uC11C\uC0AC\uBAA8\uC544 \uD45C\uC900\uC2DC -Pacific/Auckland.generic.long=\uB274\uC9C8\uB79C\uB4DC \uD45C\uC900\uC2DC -Pacific/Chatham.generic.long=\uCC44\uD140 \uD45C\uC900\uC2DC -Pacific/Chuuk.daylight.long=\uCD94\uD06C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04 -Pacific/Chuuk.generic.long=\uCD94\uD06C \uD45C\uC900\uC2DC -Pacific/Chuuk.standard.long=\uCD94\uD06C \uD45C\uC900\uC2DC -Pacific/Easter.generic.long=\uC774\uC2A4\uD130 \uC12C \uD45C\uC900\uC2DC -Pacific/Efate.generic.long=\uBC14\uB204\uC544\uD22C \uD45C\uC900\uC2DC -Pacific/Enderbury.generic.long=\uD53C\uB2C9\uC2A4 \uC81C\uB3C4 \uD45C\uC900\uC2DC -Pacific/Fakaofo.generic.long=\uD1A0\uCF08\uB77C\uC6B0 \uD45C\uC900\uC2DC -Pacific/Fiji.generic.long=\uD53C\uC9C0 \uD45C\uC900\uC2DC -Pacific/Funafuti.generic.long=\uD22C\uBC1C\uB8E8 \uD45C\uC900\uC2DC -Pacific/Galapagos.generic.long=\uAC08\uB77C\uD30C\uACE0\uC2A4 \uD45C\uC900\uC2DC -Pacific/Gambier.generic.long=\uC7A0\uBE44\uC544 \uD45C\uC900\uC2DC -Pacific/Guadalcanal.generic.long=\uC194\uB85C\uBAAC \uC81C\uB3C4 \uD45C\uC900\uC2DC -Pacific/Guam.generic.long=\uCC28\uBAA8\uB974 \uD45C\uC900\uC2DC -Pacific/Honolulu.generic.long=\uD558\uC640\uC774 \uD45C\uC900\uC2DC -Pacific/Johnston.generic.long=\uD558\uC640\uC774 \uD45C\uC900\uC2DC -Pacific/Kiritimati.generic.long=\uB77C\uC778 \uC81C\uB3C4 \uD45C\uC900\uC2DC -Pacific/Kosrae.generic.long=\uCF54\uC2A4\uB808 \uD45C\uC900\uC2DC -Pacific/Kwajalein.generic.long=\uB9C8\uC15C \uC81C\uB3C4 \uD45C\uC900\uC2DC -Pacific/Majuro.generic.long=\uB9C8\uC15C \uC81C\uB3C4 \uD45C\uC900\uC2DC -Pacific/Marquesas.generic.long=\uB9C8\uD0A4\uC800\uC2A4 \uD45C\uC900\uC2DC -Pacific/Midway.generic.long=\uC0AC\uBAA8\uC544 \uD45C\uC900\uC2DC -Pacific/Nauru.generic.long=\uB098\uC6B0\uB8E8 \uD45C\uC900\uC2DC -Pacific/Niue.generic.long=\uB2C8\uC6B0\uC5D0 \uD45C\uC900\uC2DC -Pacific/Norfolk.generic.long=\uB178\uD37D \uD45C\uC900\uC2DC -Pacific/Noumea.generic.long=\uB274 \uCE7C\uB808\uB3C4\uB2C8\uC544 \uD45C\uC900\uC2DC -Pacific/Pago_Pago.generic.long=\uC0AC\uBAA8\uC544 \uD45C\uC900\uC2DC -Pacific/Palau.generic.long=\uD314\uB77C\uC6B0 \uD45C\uC900\uC2DC -Pacific/Pitcairn.generic.long=\uD54F\uCF00\uC5B8 \uD45C\uC900\uC2DC -Pacific/Pohnpei.daylight.long=\uD3F0\uD398\uC774 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04 -Pacific/Pohnpei.generic.long=\uD3EC\uB098\uD398 \uD45C\uC900\uC2DC -Pacific/Pohnpei.standard.long=\uD3F0\uD398\uC774 \uD45C\uC900\uC2DC -Pacific/Ponape.daylight.long=\uD3F0\uD398\uC774 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04 -Pacific/Ponape.generic.long=\uD3EC\uB098\uD398 \uD45C\uC900\uC2DC -Pacific/Ponape.standard.long=\uD3F0\uD398\uC774 \uD45C\uC900\uC2DC -Pacific/Port_Moresby.generic.long=\uD30C\uD478\uC544 \uB274\uAE30\uB2C8\uC544 \uD45C\uC900\uC2DC -Pacific/Rarotonga.generic.long=\uCFE1 \uC81C\uB3C4 \uD45C\uC900\uC2DC -Pacific/Saipan.generic.long=\uCC28\uBAA8\uB974 \uD45C\uC900\uC2DC -Pacific/Samoa.generic.long=\uC0AC\uBAA8\uC544 \uD45C\uC900\uC2DC -Pacific/Tahiti.generic.long=\uD0C0\uD788\uD2F0 \uD45C\uC900\uC2DC -Pacific/Tarawa.generic.long=\uAE38\uBC84\uD2B8 \uC81C\uB3C4 \uD45C\uC900\uC2DC -Pacific/Tongatapu.generic.long=\uD1B5\uAC00 \uD45C\uC900\uC2DC -Pacific/Truk.daylight.long=\uCD94\uD06C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04 -Pacific/Truk.generic.long=\uCD94\uD06C \uD45C\uC900\uC2DC -Pacific/Truk.standard.long=\uCD94\uD06C \uD45C\uC900\uC2DC -Pacific/Wake.generic.long=\uC6E8\uC774\uD06C \uD45C\uC900\uC2DC -Pacific/Wallis.generic.long=\uC6D4\uB9AC\uC2A4 \uD478\uD22C\uB098 \uD45C\uC900\uC2DC -Pacific/Yap.daylight.long=\uCD94\uD06C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04 -Pacific/Yap.generic.long=\uCD94\uD06C \uD45C\uC900\uC2DC -Pacific/Yap.standard.long=\uCD94\uD06C \uD45C\uC900\uC2DC -Poland.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC -Portugal.generic.long=\uC11C\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -ROK.generic.long=\uB300\uD55C\uBBFC\uAD6D \uD45C\uC900\uC2DC -SST.generic.long=\uC194\uB85C\uBAAC \uC81C\uB3C4 \uD45C\uC900\uC2DC -Singapore.generic.long=\uC2F1\uAC00\uD3EC\uB974 \uD45C\uC900\uC2DC -SystemV/AST4.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -SystemV/AST4ADT.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC -SystemV/CST6.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -SystemV/CST6CDT.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -SystemV/EST5.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -SystemV/EST5EDT.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -SystemV/HST10.generic.long=\uD558\uC640\uC774 \uD45C\uC900\uC2DC -SystemV/MST7.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -SystemV/MST7MDT.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -SystemV/PST8.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC -SystemV/PST8PDT.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC -SystemV/YST9.generic.long=\uC54C\uB798\uC2A4\uCE74 \uD45C\uC900\uC2DC -SystemV/YST9YDT.generic.long=\uC54C\uB798\uC2A4\uCE74 \uD45C\uC900\uC2DC -Turkey.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC -UCT.generic.long=\uC9C0\uC5ED \uD45C\uC900\uC2DC -US/Alaska.generic.long=\uC54C\uB798\uC2A4\uCE74 \uD45C\uC900\uC2DC -US/Aleutian.generic.long=\uD558\uC640\uC774-\uC54C\uB8E8\uC0E8 \uD45C\uC900\uC2DC -US/Arizona.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -US/Central.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -US/East-Indiana.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -US/Eastern.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -US/Hawaii.generic.long=\uD558\uC640\uC774 \uD45C\uC900\uC2DC -US/Indiana-Starke.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC -US/Michigan.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC -US/Mountain.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC -US/Pacific-New.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC -US/Pacific.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC -US/Samoa.generic.long=\uC0AC\uBAA8\uC544 \uD45C\uC900\uC2DC -UTC.generic.long=\uC9C0\uC5ED \uD45C\uC900\uC2DC -Universal.generic.long=\uC9C0\uC5ED \uD45C\uC900\uC2DC -VST.generic.long=\uC778\uB3C4\uCC28\uC774\uB098 \uBC18\uB3C4 \uD45C\uC900\uC2DC -W-SU.generic.long=\uBAA8\uC2A4\uD06C\uBC14 \uD45C\uC900\uC2DC -WET.generic.long=\uc11c\ubd80 \uc720\ub7fd \ud45c\uc900\uc2dc -Zulu.generic.long=\uC9C0\uC5ED \uD45C\uC900\uC2DC diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ko_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ko_short.properties deleted file mode 100644 index 095522a68d1..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ko_short.properties +++ /dev/null @@ -1,1743 +0,0 @@ -ACT.daylight.short=CST -ACT.generic.short=CT -ACT.standard.short=CST -AET.daylight.short=EST -AET.generic.short=ET -AET.standard.short=EST -Africa/Abidjan.daylight.short=GMT -Africa/Abidjan.generic.short=GMT -Africa/Abidjan.standard.short=GMT -Africa/Accra.daylight.short=GHST -Africa/Accra.generic.short=GMT -Africa/Accra.standard.short=GMT -Africa/Addis_Ababa.daylight.short=EAST -Africa/Addis_Ababa.generic.short=EAT -Africa/Addis_Ababa.standard.short=EAT -Africa/Algiers.daylight.short=CEST -Africa/Algiers.generic.short=CET -Africa/Algiers.standard.short=CET -Africa/Asmara.daylight.short=EAST -Africa/Asmara.generic.short=EAT -Africa/Asmara.standard.short=EAT -Africa/Asmera.daylight.short=EAST -Africa/Asmera.generic.short=EAT -Africa/Asmera.standard.short=EAT -Africa/Bamako.daylight.short=GMT -Africa/Bamako.generic.short=GMT -Africa/Bamako.standard.short=GMT -Africa/Bangui.daylight.short=WAST -Africa/Bangui.generic.short=WAT -Africa/Bangui.standard.short=WAT -Africa/Banjul.daylight.short=GMT -Africa/Banjul.generic.short=GMT -Africa/Banjul.standard.short=GMT -Africa/Bissau.daylight.short=GMT -Africa/Bissau.generic.short=GMT -Africa/Bissau.standard.short=GMT -Africa/Blantyre.daylight.short=CAST -Africa/Blantyre.generic.short=CAT -Africa/Blantyre.standard.short=CAT -Africa/Brazzaville.daylight.short=WAST -Africa/Brazzaville.generic.short=WAT -Africa/Brazzaville.standard.short=WAT -Africa/Bujumbura.daylight.short=CAST -Africa/Bujumbura.generic.short=CAT -Africa/Bujumbura.standard.short=CAT -Africa/Cairo.daylight.short=EEST -Africa/Cairo.generic.short=EET -Africa/Cairo.standard.short=EET -Africa/Casablanca.daylight.short=WEST -Africa/Casablanca.generic.short=WET -Africa/Casablanca.standard.short=WET -Africa/Ceuta.daylight.short=CEST -Africa/Ceuta.generic.short=CET -Africa/Ceuta.standard.short=CET -Africa/Conakry.daylight.short=GMT -Africa/Conakry.generic.short=GMT -Africa/Conakry.standard.short=GMT -Africa/Dakar.daylight.short=GMT -Africa/Dakar.generic.short=GMT -Africa/Dakar.standard.short=GMT -Africa/Dar_es_Salaam.daylight.short=EAST -Africa/Dar_es_Salaam.generic.short=EAT -Africa/Dar_es_Salaam.standard.short=EAT -Africa/Djibouti.daylight.short=EAST -Africa/Djibouti.generic.short=EAT -Africa/Djibouti.standard.short=EAT -Africa/Douala.daylight.short=WAST -Africa/Douala.generic.short=WAT -Africa/Douala.standard.short=WAT -Africa/El_Aaiun.daylight.short=WEST -Africa/El_Aaiun.generic.short=WET -Africa/El_Aaiun.standard.short=WET -Africa/Freetown.daylight.short=SLST -Africa/Freetown.generic.short=SLT -Africa/Freetown.standard.short=GMT -Africa/Gaborone.daylight.short=CAST -Africa/Gaborone.generic.short=CAT -Africa/Gaborone.standard.short=CAT -Africa/Harare.daylight.short=CAST -Africa/Harare.generic.short=CAT -Africa/Harare.standard.short=CAT -Africa/Johannesburg.daylight.short=SAST -Africa/Johannesburg.generic.short=SAT -Africa/Johannesburg.standard.short=SAST -Africa/Juba.daylight.short=EAST -Africa/Juba.generic.short=EAT -Africa/Juba.standard.short=EAT -Africa/Kampala.daylight.short=EAST -Africa/Kampala.generic.short=EAT -Africa/Kampala.standard.short=EAT -Africa/Khartoum.daylight.short=EAST -Africa/Khartoum.generic.short=EAT -Africa/Khartoum.standard.short=EAT -Africa/Kigali.daylight.short=CAST -Africa/Kigali.generic.short=CAT -Africa/Kigali.standard.short=CAT -Africa/Kinshasa.daylight.short=WAST -Africa/Kinshasa.generic.short=WAT -Africa/Kinshasa.standard.short=WAT -Africa/Lagos.daylight.short=WAST -Africa/Lagos.generic.short=WAT -Africa/Lagos.standard.short=WAT -Africa/Libreville.daylight.short=WAST -Africa/Libreville.generic.short=WAT -Africa/Libreville.standard.short=WAT -Africa/Lome.daylight.short=GMT -Africa/Lome.generic.short=GMT -Africa/Lome.standard.short=GMT -Africa/Luanda.daylight.short=WAST -Africa/Luanda.generic.short=WAT -Africa/Luanda.standard.short=WAT -Africa/Lubumbashi.daylight.short=CAST -Africa/Lubumbashi.generic.short=CAT -Africa/Lubumbashi.standard.short=CAT -Africa/Lusaka.daylight.short=CAST -Africa/Lusaka.generic.short=CAT -Africa/Lusaka.standard.short=CAT -Africa/Malabo.daylight.short=WAST -Africa/Malabo.generic.short=WAT -Africa/Malabo.standard.short=WAT -Africa/Maputo.daylight.short=CAST -Africa/Maputo.generic.short=CAT -Africa/Maputo.standard.short=CAT -Africa/Maseru.daylight.short=SAST -Africa/Maseru.generic.short=SAT -Africa/Maseru.standard.short=SAST -Africa/Mbabane.daylight.short=SAST -Africa/Mbabane.generic.short=SAT -Africa/Mbabane.standard.short=SAST -Africa/Mogadishu.daylight.short=EAST -Africa/Mogadishu.generic.short=EAT -Africa/Mogadishu.standard.short=EAT -Africa/Monrovia.daylight.short=GMT -Africa/Monrovia.generic.short=GMT -Africa/Monrovia.standard.short=GMT -Africa/Nairobi.daylight.short=EAST -Africa/Nairobi.generic.short=EAT -Africa/Nairobi.standard.short=EAT -Africa/Ndjamena.daylight.short=WAST -Africa/Ndjamena.generic.short=WAT -Africa/Ndjamena.standard.short=WAT -Africa/Niamey.daylight.short=WAST -Africa/Niamey.generic.short=WAT -Africa/Niamey.standard.short=WAT -Africa/Nouakchott.daylight.short=GMT -Africa/Nouakchott.generic.short=GMT -Africa/Nouakchott.standard.short=GMT -Africa/Ouagadougou.daylight.short=GMT -Africa/Ouagadougou.generic.short=GMT -Africa/Ouagadougou.standard.short=GMT -Africa/Porto-Novo.daylight.short=WAST -Africa/Porto-Novo.generic.short=WAT -Africa/Porto-Novo.standard.short=WAT -Africa/Sao_Tome.daylight.short=GMT -Africa/Sao_Tome.generic.short=GMT -Africa/Sao_Tome.standard.short=GMT -Africa/Timbuktu.daylight.short=GMT -Africa/Timbuktu.generic.short=GMT -Africa/Timbuktu.standard.short=GMT -Africa/Tripoli.daylight.short=EEST -Africa/Tripoli.generic.short=EET -Africa/Tripoli.standard.short=EET -Africa/Tunis.daylight.short=CEST -Africa/Tunis.generic.short=CET -Africa/Tunis.standard.short=CET -Africa/Windhoek.daylight.short=WAST -Africa/Windhoek.generic.short=WAT -Africa/Windhoek.standard.short=WAT -AGT.daylight.short=ARST -AGT.generic.short=ART -AGT.standard.short=ART -America/Adak.daylight.short=HADT -America/Adak.generic.short=HAT -America/Adak.standard.short=HAST -America/Anchorage.daylight.short=AKDT -America/Anchorage.generic.short=AKT -America/Anchorage.standard.short=AKST -America/Anguilla.daylight.short=ADT -America/Anguilla.generic.short=AT -America/Anguilla.standard.short=AST -America/Antigua.daylight.short=ADT -America/Antigua.generic.short=AT -America/Antigua.standard.short=AST -America/Araguaina.daylight.short=BRST -America/Araguaina.generic.short=BRT -America/Araguaina.standard.short=BRT -America/Argentina/Buenos_Aires.daylight.short=ARST -America/Argentina/Buenos_Aires.generic.short=ART -America/Argentina/Buenos_Aires.standard.short=ART -America/Argentina/Catamarca.daylight.short=ARST -America/Argentina/Catamarca.generic.short=ART -America/Argentina/Catamarca.standard.short=ART -America/Argentina/ComodRivadavia.daylight.short=ARST -America/Argentina/ComodRivadavia.generic.short=ART -America/Argentina/ComodRivadavia.standard.short=ART -America/Argentina/Cordoba.daylight.short=ARST -America/Argentina/Cordoba.generic.short=ART -America/Argentina/Cordoba.standard.short=ART -America/Argentina/Jujuy.daylight.short=ARST -America/Argentina/Jujuy.generic.short=ART -America/Argentina/Jujuy.standard.short=ART -America/Argentina/La_Rioja.daylight.short=ARST -America/Argentina/La_Rioja.generic.short=ART -America/Argentina/La_Rioja.standard.short=ART -America/Argentina/Mendoza.daylight.short=ARST -America/Argentina/Mendoza.generic.short=ART -America/Argentina/Mendoza.standard.short=ART -America/Argentina/Rio_Gallegos.daylight.short=ARST -America/Argentina/Rio_Gallegos.generic.short=ART -America/Argentina/Rio_Gallegos.standard.short=ART -America/Argentina/Salta.daylight.short=ARST -America/Argentina/Salta.generic.short=ART -America/Argentina/Salta.standard.short=ART -America/Argentina/San_Juan.daylight.short=ARST -America/Argentina/San_Juan.generic.short=ART -America/Argentina/San_Juan.standard.short=ART -America/Argentina/San_Luis.daylight.short=ARST -America/Argentina/San_Luis.generic.short=ART -America/Argentina/San_Luis.standard.short=ART -America/Argentina/Tucuman.daylight.short=ARST -America/Argentina/Tucuman.generic.short=ART -America/Argentina/Tucuman.standard.short=ART -America/Argentina/Ushuaia.daylight.short=ARST -America/Argentina/Ushuaia.generic.short=ART -America/Argentina/Ushuaia.standard.short=ART -America/Aruba.daylight.short=ADT -America/Aruba.generic.short=AT -America/Aruba.standard.short=AST -America/Asuncion.daylight.short=PYST -America/Asuncion.generic.short=PYT -America/Asuncion.standard.short=PYT -America/Atikokan.daylight.short=EDT -America/Atikokan.generic.short=ET -America/Atikokan.standard.short=EST -America/Atka.daylight.short=HADT -America/Atka.generic.short=HAT -America/Atka.standard.short=HAST -America/Bahia_Banderas.daylight.short=CDT -America/Bahia_Banderas.generic.short=CT -America/Bahia_Banderas.standard.short=CST -America/Bahia.daylight.short=BRST -America/Bahia.generic.short=BRT -America/Bahia.standard.short=BRT -America/Barbados.daylight.short=ADT -America/Barbados.generic.short=AT -America/Barbados.standard.short=AST -America/Belem.daylight.short=BRST -America/Belem.generic.short=BRT -America/Belem.standard.short=BRT -America/Belize.daylight.short=CDT -America/Belize.generic.short=CT -America/Belize.standard.short=CST -America/Blanc-Sablon.daylight.short=ADT -America/Blanc-Sablon.generic.short=AT -America/Blanc-Sablon.standard.short=AST -America/Boa_Vista.daylight.short=AMST -America/Boa_Vista.generic.short=AMT -America/Boa_Vista.standard.short=AMT -America/Bogota.daylight.short=COST -America/Bogota.generic.short=COT -America/Bogota.standard.short=COT -America/Boise.daylight.short=MDT -America/Boise.generic.short=MT -America/Boise.standard.short=MST -America/Buenos_Aires.daylight.short=ARST -America/Buenos_Aires.generic.short=ART -America/Buenos_Aires.standard.short=ART -America/Cambridge_Bay.daylight.short=MDT -America/Cambridge_Bay.generic.short=MT -America/Cambridge_Bay.standard.short=MST -America/Campo_Grande.daylight.short=AMST -America/Campo_Grande.generic.short=AMT -America/Campo_Grande.standard.short=AMT -America/Cancun.daylight.short=CDT -America/Cancun.generic.short=CT -America/Cancun.standard.short=CST -America/Caracas.daylight.short=VEST -America/Caracas.generic.short=VET -America/Caracas.standard.short=VET -America/Catamarca.daylight.short=ARST -America/Catamarca.generic.short=ART -America/Catamarca.standard.short=ART -America/Cayenne.daylight.short=GFST -America/Cayenne.generic.short=GFT -America/Cayenne.standard.short=GFT -America/Cayman.daylight.short=EDT -America/Cayman.generic.short=ET -America/Cayman.standard.short=EST -America/Chicago.daylight.short=CDT -America/Chicago.generic.short=CT -America/Chicago.standard.short=CST -America/Chihuahua.daylight.short=MDT -America/Chihuahua.generic.short=MT -America/Chihuahua.standard.short=MST -America/Coral_Harbour.daylight.short=EDT -America/Coral_Harbour.generic.short=ET -America/Coral_Harbour.standard.short=EST -America/Cordoba.daylight.short=ARST -America/Cordoba.generic.short=ART -America/Cordoba.standard.short=ART -America/Costa_Rica.daylight.short=CDT -America/Costa_Rica.generic.short=CT -America/Costa_Rica.standard.short=CST -America/Creston.daylight.short=MDT -America/Creston.generic.short=MT -America/Creston.standard.short=MST -America/Cuiaba.daylight.short=AMST -America/Cuiaba.generic.short=AMT -America/Cuiaba.standard.short=AMT -America/Curacao.daylight.short=ADT -America/Curacao.generic.short=AT -America/Curacao.standard.short=AST -America/Danmarkshavn.daylight.short=GMT -America/Danmarkshavn.generic.short=GMT -America/Danmarkshavn.standard.short=GMT -America/Dawson_Creek.daylight.short=MDT -America/Dawson_Creek.generic.short=MT -America/Dawson_Creek.standard.short=MST -America/Dawson.daylight.short=PDT -America/Dawson.generic.short=PT -America/Dawson.standard.short=PST -America/Denver.daylight.short=MDT -America/Denver.generic.short=MT -America/Denver.standard.short=MST -America/Detroit.daylight.short=EDT -America/Detroit.generic.short=ET -America/Detroit.standard.short=EST -America/Dominica.daylight.short=ADT -America/Dominica.generic.short=AT -America/Dominica.standard.short=AST -America/Edmonton.daylight.short=MDT -America/Edmonton.generic.short=MT -America/Edmonton.standard.short=MST -America/Eirunepe.daylight.short=ACST -America/Eirunepe.generic.short=ACT -America/Eirunepe.standard.short=ACT -America/El_Salvador.daylight.short=CDT -America/El_Salvador.generic.short=CT -America/El_Salvador.standard.short=CST -America/Ensenada.daylight.short=PDT -America/Ensenada.generic.short=PT -America/Ensenada.standard.short=PST -America/Fortaleza.daylight.short=BRST -America/Fortaleza.generic.short=BRT -America/Fortaleza.standard.short=BRT -America/Fort_Wayne.daylight.short=EDT -America/Fort_Wayne.generic.short=ET -America/Fort_Wayne.standard.short=EST -America/Glace_Bay.daylight.short=ADT -America/Glace_Bay.generic.short=AT -America/Glace_Bay.standard.short=AST -America/Godthab.daylight.short=WGST -America/Godthab.generic.short=WGT -America/Godthab.standard.short=WGT -America/Goose_Bay.daylight.short=ADT -America/Goose_Bay.generic.short=AT -America/Goose_Bay.standard.short=AST -America/Grand_Turk.daylight.short=EDT -America/Grand_Turk.generic.short=ET -America/Grand_Turk.standard.short=EST -America/Grenada.daylight.short=ADT -America/Grenada.generic.short=AT -America/Grenada.standard.short=AST -America/Guadeloupe.daylight.short=ADT -America/Guadeloupe.generic.short=AT -America/Guadeloupe.standard.short=AST -America/Guatemala.daylight.short=CDT -America/Guatemala.generic.short=CT -America/Guatemala.standard.short=CST -America/Guayaquil.daylight.short=ECST -America/Guayaquil.generic.short=ECT -America/Guayaquil.standard.short=ECT -America/Guyana.daylight.short=GYST -America/Guyana.generic.short=GYT -America/Guyana.standard.short=GYT -America/Halifax.daylight.short=ADT -America/Halifax.generic.short=AT -America/Halifax.standard.short=AST -America/Havana.daylight.short=CDT -America/Havana.generic.short=CT -America/Havana.standard.short=CST -America/Hermosillo.daylight.short=MDT -America/Hermosillo.generic.short=MT -America/Hermosillo.standard.short=MST -America/Indiana/Indianapolis.daylight.short=EDT -America/Indiana/Indianapolis.generic.short=ET -America/Indiana/Indianapolis.standard.short=EST -America/Indiana/Knox.daylight.short=CDT -America/Indiana/Knox.generic.short=CT -America/Indiana/Knox.standard.short=CST -America/Indiana/Marengo.daylight.short=EDT -America/Indiana/Marengo.generic.short=ET -America/Indiana/Marengo.standard.short=EST -America/Indiana/Petersburg.daylight.short=EDT -America/Indiana/Petersburg.generic.short=ET -America/Indiana/Petersburg.standard.short=EST -America/Indianapolis.daylight.short=EDT -America/Indianapolis.generic.short=ET -America/Indianapolis.standard.short=EST -America/Indiana/Tell_City.daylight.short=CDT -America/Indiana/Tell_City.generic.short=CT -America/Indiana/Tell_City.standard.short=CST -America/Indiana/Vevay.daylight.short=EDT -America/Indiana/Vevay.generic.short=ET -America/Indiana/Vevay.standard.short=EST -America/Indiana/Vincennes.daylight.short=EDT -America/Indiana/Vincennes.generic.short=ET -America/Indiana/Vincennes.standard.short=EST -America/Indiana/Winamac.daylight.short=EDT -America/Indiana/Winamac.generic.short=ET -America/Indiana/Winamac.standard.short=EST -America/Inuvik.daylight.short=MDT -America/Inuvik.generic.short=MT -America/Inuvik.standard.short=MST -America/Iqaluit.daylight.short=EDT -America/Iqaluit.generic.short=ET -America/Iqaluit.standard.short=EST -America/Jamaica.daylight.short=EDT -America/Jamaica.generic.short=ET -America/Jamaica.standard.short=EST -America/Jujuy.daylight.short=ARST -America/Jujuy.generic.short=ART -America/Jujuy.standard.short=ART -America/Juneau.daylight.short=AKDT -America/Juneau.generic.short=AKT -America/Juneau.standard.short=AKST -America/Kentucky/Louisville.daylight.short=EDT -America/Kentucky/Louisville.generic.short=ET -America/Kentucky/Louisville.standard.short=EST -America/Kentucky/Monticello.daylight.short=EDT -America/Kentucky/Monticello.generic.short=ET -America/Kentucky/Monticello.standard.short=EST -America/Knox_IN.daylight.short=CDT -America/Knox_IN.generic.short=CT -America/Knox_IN.standard.short=CST -America/Kralendijk.daylight.short=ADT -America/Kralendijk.generic.short=AT -America/Kralendijk.standard.short=AST -America/La_Paz.daylight.short=BOST -America/La_Paz.generic.short=BOT -America/La_Paz.standard.short=BOT -America/Lima.daylight.short=PEST -America/Lima.generic.short=PET -America/Lima.standard.short=PET -America/Los_Angeles.daylight.short=PDT -America/Los_Angeles.generic.short=PT -America/Los_Angeles.standard.short=PST -America/Louisville.daylight.short=EDT -America/Louisville.generic.short=ET -America/Louisville.standard.short=EST -America/Lower_Princes.daylight.short=ADT -America/Lower_Princes.generic.short=AT -America/Lower_Princes.standard.short=AST -America/Maceio.daylight.short=BRST -America/Maceio.generic.short=BRT -America/Maceio.standard.short=BRT -America/Managua.daylight.short=CDT -America/Managua.generic.short=CT -America/Managua.standard.short=CST -America/Manaus.daylight.short=AMST -America/Manaus.generic.short=AMT -America/Manaus.standard.short=AMT -America/Marigot.daylight.short=ADT -America/Marigot.generic.short=AT -America/Marigot.standard.short=AST -America/Martinique.daylight.short=ADT -America/Martinique.generic.short=AT -America/Martinique.standard.short=AST -America/Matamoros.daylight.short=CDT -America/Matamoros.generic.short=CT -America/Matamoros.standard.short=CST -America/Mazatlan.daylight.short=MDT -America/Mazatlan.generic.short=MT -America/Mazatlan.standard.short=MST -America/Mendoza.daylight.short=ARST -America/Mendoza.generic.short=ART -America/Mendoza.standard.short=ART -America/Menominee.daylight.short=CDT -America/Menominee.generic.short=CT -America/Menominee.standard.short=CST -America/Merida.daylight.short=CDT -America/Merida.generic.short=CT -America/Merida.standard.short=CST -America/Metlakatla.daylight.short=MeDT -America/Metlakatla.generic.short=MeT -America/Metlakatla.standard.short=MeST -America/Mexico_City.daylight.short=CDT -America/Mexico_City.generic.short=CT -America/Mexico_City.standard.short=CST -America/Miquelon.daylight.short=PMDT -America/Miquelon.generic.short=PMT -America/Miquelon.standard.short=PMST -America/Moncton.daylight.short=ADT -America/Moncton.generic.short=AT -America/Moncton.standard.short=AST -America/Monterrey.daylight.short=CDT -America/Monterrey.generic.short=CT -America/Monterrey.standard.short=CST -America/Montevideo.daylight.short=UYST -America/Montevideo.generic.short=UYT -America/Montevideo.standard.short=UYT -America/Montreal.daylight.short=EDT -America/Montreal.generic.short=ET -America/Montreal.standard.short=EST -America/Montserrat.daylight.short=ADT -America/Montserrat.generic.short=AT -America/Montserrat.standard.short=AST -America/Nassau.daylight.short=EDT -America/Nassau.generic.short=ET -America/Nassau.standard.short=EST -America/New_York.daylight.short=EDT -America/New_York.generic.short=ET -America/New_York.standard.short=EST -America/Nipigon.daylight.short=EDT -America/Nipigon.generic.short=ET -America/Nipigon.standard.short=EST -America/Nome.daylight.short=AKDT -America/Nome.generic.short=AKT -America/Nome.standard.short=AKST -America/Noronha.daylight.short=FNST -America/Noronha.generic.short=FNT -America/Noronha.standard.short=FNT -America/North_Dakota/Beulah.daylight.short=CDT -America/North_Dakota/Beulah.generic.short=CT -America/North_Dakota/Beulah.standard.short=CST -America/North_Dakota/Center.daylight.short=CDT -America/North_Dakota/Center.generic.short=CT -America/North_Dakota/Center.standard.short=CST -America/North_Dakota/New_Salem.daylight.short=CDT -America/North_Dakota/New_Salem.generic.short=CT -America/North_Dakota/New_Salem.standard.short=CST -America/Ojinaga.daylight.short=MDT -America/Ojinaga.generic.short=MT -America/Ojinaga.standard.short=MST -America/Panama.daylight.short=EDT -America/Panama.generic.short=ET -America/Panama.standard.short=EST -America/Pangnirtung.daylight.short=EDT -America/Pangnirtung.generic.short=ET -America/Pangnirtung.standard.short=EST -America/Paramaribo.daylight.short=SRST -America/Paramaribo.generic.short=SRT -America/Paramaribo.standard.short=SRT -America/Phoenix.daylight.short=MDT -America/Phoenix.generic.short=MT -America/Phoenix.standard.short=MST -America/Port-au-Prince.daylight.short=EDT -America/Port-au-Prince.generic.short=ET -America/Port-au-Prince.standard.short=EST -America/Porto_Acre.daylight.short=ACST -America/Porto_Acre.generic.short=ACT -America/Porto_Acre.standard.short=ACT -America/Port_of_Spain.daylight.short=ADT -America/Port_of_Spain.generic.short=AT -America/Port_of_Spain.standard.short=AST -America/Porto_Velho.daylight.short=AMST -America/Porto_Velho.generic.short=AMT -America/Porto_Velho.standard.short=AMT -America/Puerto_Rico.daylight.short=ADT -America/Puerto_Rico.generic.short=AT -America/Puerto_Rico.standard.short=AST -America/Rainy_River.daylight.short=CDT -America/Rainy_River.generic.short=CT -America/Rainy_River.standard.short=CST -America/Rankin_Inlet.daylight.short=CDT -America/Rankin_Inlet.generic.short=CT -America/Rankin_Inlet.standard.short=CST -America/Recife.daylight.short=BRST -America/Recife.generic.short=BRT -America/Recife.standard.short=BRT -America/Regina.daylight.short=CDT -America/Regina.generic.short=CT -America/Regina.standard.short=CST -America/Resolute.daylight.short=CDT -America/Resolute.generic.short=CT -America/Resolute.standard.short=CST -America/Rio_Branco.daylight.short=ACST -America/Rio_Branco.generic.short=ACT -America/Rio_Branco.standard.short=ACT -America/Rosario.daylight.short=ARST -America/Rosario.generic.short=ART -America/Rosario.standard.short=ART -America/Santa_Isabel.daylight.short=PDT -America/Santa_Isabel.generic.short=PT -America/Santa_Isabel.standard.short=PST -America/Santarem.daylight.short=BRST -America/Santarem.generic.short=BRT -America/Santarem.standard.short=BRT -America/Santiago.daylight.short=CLST -America/Santiago.generic.short=CLT -America/Santiago.standard.short=CLT -America/Santo_Domingo.daylight.short=ADT -America/Santo_Domingo.generic.short=AT -America/Santo_Domingo.standard.short=AST -America/Sao_Paulo.daylight.short=BRST -America/Sao_Paulo.generic.short=BRT -America/Sao_Paulo.standard.short=BRT -America/Scoresbysund.daylight.short=EGST -America/Scoresbysund.generic.short=EGT -America/Scoresbysund.standard.short=EGT -America/Shiprock.daylight.short=MDT -America/Shiprock.generic.short=MT -America/Shiprock.standard.short=MST -America/Sitka.daylight.short=AKDT -America/Sitka.generic.short=AKT -America/Sitka.standard.short=AKST -America/St_Barthelemy.daylight.short=ADT -America/St_Barthelemy.generic.short=AT -America/St_Barthelemy.standard.short=AST -America/St_Johns.daylight.short=NDT -America/St_Johns.generic.short=NT -America/St_Johns.standard.short=NST -America/St_Kitts.daylight.short=ADT -America/St_Kitts.generic.short=AT -America/St_Kitts.standard.short=AST -America/St_Lucia.daylight.short=ADT -America/St_Lucia.generic.short=AT -America/St_Lucia.standard.short=AST -America/St_Thomas.daylight.short=ADT -America/St_Thomas.generic.short=AT -America/St_Thomas.standard.short=AST -America/St_Vincent.daylight.short=ADT -America/St_Vincent.generic.short=AT -America/St_Vincent.standard.short=AST -America/Swift_Current.daylight.short=CDT -America/Swift_Current.generic.short=CT -America/Swift_Current.standard.short=CST -America/Tegucigalpa.daylight.short=CDT -America/Tegucigalpa.generic.short=CT -America/Tegucigalpa.standard.short=CST -America/Thule.daylight.short=ADT -America/Thule.generic.short=AT -America/Thule.standard.short=AST -America/Thunder_Bay.daylight.short=EDT -America/Thunder_Bay.generic.short=ET -America/Thunder_Bay.standard.short=EST -America/Tijuana.daylight.short=PDT -America/Tijuana.generic.short=PT -America/Tijuana.standard.short=PST -America/Toronto.daylight.short=EDT -America/Toronto.generic.short=ET -America/Toronto.standard.short=EST -America/Tortola.daylight.short=ADT -America/Tortola.generic.short=AT -America/Tortola.standard.short=AST -America/Vancouver.daylight.short=PDT -America/Vancouver.generic.short=PT -America/Vancouver.standard.short=PST -America/Virgin.daylight.short=ADT -America/Virgin.generic.short=AT -America/Virgin.standard.short=AST -America/Whitehorse.daylight.short=PDT -America/Whitehorse.generic.short=PT -America/Whitehorse.standard.short=PST -America/Winnipeg.daylight.short=CDT -America/Winnipeg.generic.short=CT -America/Winnipeg.standard.short=CST -America/Yakutat.daylight.short=AKDT -America/Yakutat.generic.short=AKT -America/Yakutat.standard.short=AKST -America/Yellowknife.daylight.short=MDT -America/Yellowknife.generic.short=MT -America/Yellowknife.standard.short=MST -Antarctica/Casey.daylight.short=WST -Antarctica/Casey.generic.short=WT -Antarctica/Casey.standard.short=WST -Antarctica/Davis.daylight.short=DAVST -Antarctica/Davis.generic.short=DAVT -Antarctica/Davis.standard.short=DAVT -Antarctica/DumontDUrville.daylight.short=DDUST -Antarctica/DumontDUrville.generic.short=DDUT -Antarctica/DumontDUrville.standard.short=DDUT -Antarctica/Macquarie.daylight.short=MIST -Antarctica/Macquarie.generic.short=MIST -Antarctica/Macquarie.standard.short=MIST -Antarctica/Mawson.daylight.short=MAWST -Antarctica/Mawson.generic.short=MAWT -Antarctica/Mawson.standard.short=MAWT -Antarctica/McMurdo.daylight.short=NZDT -Antarctica/McMurdo.generic.short=NZT -Antarctica/McMurdo.standard.short=NZST -Antarctica/Palmer.daylight.short=CLST -Antarctica/Palmer.generic.short=CLT -Antarctica/Palmer.standard.short=CLT -Antarctica/Rothera.daylight.short=ROTST -Antarctica/Rothera.generic.short=ROTT -Antarctica/Rothera.standard.short=ROTT -Antarctica/South_Pole.daylight.short=NZDT -Antarctica/South_Pole.generic.short=NZT -Antarctica/South_Pole.standard.short=NZST -Antarctica/Syowa.daylight.short=SYOST -Antarctica/Syowa.generic.short=SYOT -Antarctica/Syowa.standard.short=SYOT -Antarctica/Vostok.daylight.short=VOSST -Antarctica/Vostok.generic.short=VOST -Antarctica/Vostok.standard.short=VOST -Arctic/Longyearbyen.daylight.short=CEST -Arctic/Longyearbyen.generic.short=CET -Arctic/Longyearbyen.standard.short=CET -ART.daylight.short=EEST -ART.generic.short=EET -ART.standard.short=EET -Asia/Aden.daylight.short=ADT -Asia/Aden.generic.short=AT -Asia/Aden.standard.short=AST -Asia/Almaty.daylight.short=ALMST -Asia/Almaty.generic.short=ALMT -Asia/Almaty.standard.short=ALMT -Asia/Amman.daylight.short=ADT -Asia/Amman.generic.short=AT -Asia/Amman.standard.short=AST -Asia/Anadyr.daylight.short=ANAST -Asia/Anadyr.generic.short=ANAT -Asia/Anadyr.standard.short=ANAT -Asia/Aqtau.daylight.short=AQTST -Asia/Aqtau.generic.short=AQTT -Asia/Aqtau.standard.short=AQTT -Asia/Aqtobe.daylight.short=AQTST -Asia/Aqtobe.generic.short=AQTT -Asia/Aqtobe.standard.short=AQTT -Asia/Ashgabat.daylight.short=TMST -Asia/Ashgabat.generic.short=TMT -Asia/Ashgabat.standard.short=TMT -Asia/Ashkhabad.daylight.short=TMST -Asia/Ashkhabad.generic.short=TMT -Asia/Ashkhabad.standard.short=TMT -Asia/Baghdad.daylight.short=ADT -Asia/Baghdad.generic.short=AT -Asia/Baghdad.standard.short=AST -Asia/Bahrain.daylight.short=ADT -Asia/Bahrain.generic.short=AT -Asia/Bahrain.standard.short=AST -Asia/Baku.daylight.short=AZST -Asia/Baku.generic.short=AZT -Asia/Baku.standard.short=AZT -Asia/Bangkok.daylight.short=ICST -Asia/Bangkok.generic.short=ICT -Asia/Bangkok.standard.short=ICT -Asia/Beirut.daylight.short=EEST -Asia/Beirut.generic.short=EET -Asia/Beirut.standard.short=EET -Asia/Bishkek.daylight.short=KGST -Asia/Bishkek.generic.short=KGT -Asia/Bishkek.standard.short=KGT -Asia/Brunei.daylight.short=BNST -Asia/Brunei.generic.short=BNT -Asia/Brunei.standard.short=BNT -Asia/Calcutta.daylight.short=IDT -Asia/Calcutta.generic.short=IT -Asia/Calcutta.standard.short=IST -Asia/Choibalsan.daylight.short=CHOST -Asia/Choibalsan.generic.short=CHOT -Asia/Choibalsan.standard.short=CHOT -Asia/Chongqing.daylight.short=CDT -Asia/Chongqing.generic.short=CT -Asia/Chongqing.standard.short=CST -Asia/Chungking.daylight.short=CDT -Asia/Chungking.generic.short=CT -Asia/Chungking.standard.short=CST -Asia/Colombo.daylight.short=IDT -Asia/Colombo.generic.short=IT -Asia/Colombo.standard.short=IST -Asia/Dacca.daylight.short=BDST -Asia/Dacca.generic.short=BDT -Asia/Dacca.standard.short=BDT -Asia/Damascus.daylight.short=EEST -Asia/Damascus.generic.short=EET -Asia/Damascus.standard.short=EET -Asia/Dhaka.daylight.short=BDST -Asia/Dhaka.generic.short=BDT -Asia/Dhaka.standard.short=BDT -Asia/Dili.daylight.short=TLST -Asia/Dili.generic.short=TLT -Asia/Dili.standard.short=TLT -Asia/Dubai.daylight.short=GDT -Asia/Dubai.generic.short=GT -Asia/Dubai.standard.short=GST -Asia/Dushanbe.daylight.short=TJST -Asia/Dushanbe.generic.short=TJT -Asia/Dushanbe.standard.short=TJT -Asia/Gaza.daylight.short=EEST -Asia/Gaza.generic.short=EET -Asia/Gaza.standard.short=EET -Asia/Harbin.daylight.short=CDT -Asia/Harbin.generic.short=CT -Asia/Harbin.standard.short=CST -Asia/Hebron.daylight.short=EEST -Asia/Hebron.generic.short=EET -Asia/Hebron.standard.short=EET -Asia/Ho_Chi_Minh.daylight.short=ICST -Asia/Ho_Chi_Minh.generic.short=ICT -Asia/Ho_Chi_Minh.standard.short=ICT -Asia/Hong_Kong.daylight.short=HKST -Asia/Hong_Kong.generic.short=HKT -Asia/Hong_Kong.standard.short=HKT -Asia/Hovd.daylight.short=HOVST -Asia/Hovd.generic.short=HOVT -Asia/Hovd.standard.short=HOVT -Asia/Irkutsk.daylight.short=IRKST -Asia/Irkutsk.generic.short=IRKT -Asia/Irkutsk.standard.short=IRKT -Asia/Istanbul.daylight.short=EEST -Asia/Istanbul.generic.short=EET -Asia/Istanbul.standard.short=EET -Asia/Jakarta.daylight.short=WIST -Asia/Jakarta.generic.short=WIB -Asia/Jakarta.standard.short=WIB -Asia/Jayapura.daylight.short=EIST -Asia/Jayapura.generic.short=WIT -Asia/Jayapura.standard.short=WIT -Asia/Jerusalem.daylight.short=IDT -Asia/Jerusalem.generic.short=IT -Asia/Jerusalem.standard.short=IST -Asia/Kabul.daylight.short=AFST -Asia/Kabul.generic.short=AFT -Asia/Kabul.standard.short=AFT -Asia/Kamchatka.daylight.short=PETST -Asia/Kamchatka.generic.short=PETT -Asia/Kamchatka.standard.short=PETT -Asia/Karachi.daylight.short=PKST -Asia/Karachi.generic.short=PKT -Asia/Karachi.standard.short=PKT -Asia/Kashgar.daylight.short=CDT -Asia/Kashgar.generic.short=CT -Asia/Kashgar.standard.short=CST -Asia/Kathmandu.daylight.short=NPST -Asia/Kathmandu.generic.short=NPT -Asia/Kathmandu.standard.short=NPT -Asia/Katmandu.daylight.short=NPST -Asia/Katmandu.generic.short=NPT -Asia/Katmandu.standard.short=NPT -Asia/Khandyga.daylight.short=YAKST -Asia/Khandyga.generic.short=YAKT -Asia/Khandyga.standard.short=YAKT -Asia/Kolkata.daylight.short=IDT -Asia/Kolkata.generic.short=IT -Asia/Kolkata.standard.short=IST -Asia/Krasnoyarsk.daylight.short=KRAST -Asia/Krasnoyarsk.generic.short=KRAT -Asia/Krasnoyarsk.standard.short=KRAT -Asia/Kuala_Lumpur.daylight.short=MYST -Asia/Kuala_Lumpur.generic.short=MYT -Asia/Kuala_Lumpur.standard.short=MYT -Asia/Kuching.daylight.short=MYST -Asia/Kuching.generic.short=MYT -Asia/Kuching.standard.short=MYT -Asia/Kuwait.daylight.short=ADT -Asia/Kuwait.generic.short=AT -Asia/Kuwait.standard.short=AST -Asia/Macao.daylight.short=CDT -Asia/Macao.generic.short=CT -Asia/Macao.standard.short=CST -Asia/Macau.daylight.short=CDT -Asia/Macau.generic.short=CT -Asia/Macau.standard.short=CST -Asia/Magadan.daylight.short=MAGST -Asia/Magadan.generic.short=MAGT -Asia/Magadan.standard.short=MAGT -Asia/Makassar.daylight.short=CIST -Asia/Makassar.generic.short=WITA -Asia/Makassar.standard.short=WITA -Asia/Manila.daylight.short=PHST -Asia/Manila.generic.short=PHT -Asia/Manila.standard.short=PHT -Asia/Muscat.daylight.short=GDT -Asia/Muscat.generic.short=GT -Asia/Muscat.standard.short=GST -Asia/Nicosia.daylight.short=EEST -Asia/Nicosia.generic.short=EET -Asia/Nicosia.standard.short=EET -Asia/Novokuznetsk.daylight.short=NOVST -Asia/Novokuznetsk.generic.short=NOVT -Asia/Novokuznetsk.standard.short=NOVT -Asia/Novosibirsk.daylight.short=NOVST -Asia/Novosibirsk.generic.short=NOVT -Asia/Novosibirsk.standard.short=NOVT -Asia/Omsk.daylight.short=OMSST -Asia/Omsk.generic.short=OMST -Asia/Omsk.standard.short=OMST -Asia/Oral.daylight.short=ORAST -Asia/Oral.generic.short=ORAT -Asia/Oral.standard.short=ORAT -Asia/Phnom_Penh.daylight.short=ICST -Asia/Phnom_Penh.generic.short=ICT -Asia/Phnom_Penh.standard.short=ICT -Asia/Pontianak.daylight.short=WIST -Asia/Pontianak.generic.short=WIB -Asia/Pontianak.standard.short=WIB -Asia/Pyongyang.daylight.short=KDT -Asia/Pyongyang.generic.short=KT -Asia/Pyongyang.standard.short=KST -Asia/Qatar.daylight.short=ADT -Asia/Qatar.generic.short=AT -Asia/Qatar.standard.short=AST -Asia/Qyzylorda.daylight.short=QYZST -Asia/Qyzylorda.generic.short=QYZT -Asia/Qyzylorda.standard.short=QYZT -Asia/Rangoon.daylight.short=MMST -Asia/Rangoon.generic.short=MMT -Asia/Rangoon.standard.short=MMT -Asia/Saigon.daylight.short=ICST -Asia/Saigon.generic.short=ICT -Asia/Saigon.standard.short=ICT -Asia/Sakhalin.daylight.short=SAKST -Asia/Sakhalin.generic.short=SAKT -Asia/Sakhalin.standard.short=SAKT -Asia/Samarkand.daylight.short=UZST -Asia/Samarkand.generic.short=UZT -Asia/Samarkand.standard.short=UZT -Asia/Seoul.daylight.short=KDT -Asia/Seoul.generic.short=KT -Asia/Seoul.standard.short=KST -Asia/Shanghai.daylight.short=CDT -Asia/Shanghai.generic.short=CT -Asia/Shanghai.standard.short=CST -Asia/Singapore.daylight.short=SGST -Asia/Singapore.generic.short=SGT -Asia/Singapore.standard.short=SGT -Asia/Taipei.daylight.short=CDT -Asia/Taipei.generic.short=CT -Asia/Taipei.standard.short=CST -Asia/Tashkent.daylight.short=UZST -Asia/Tashkent.generic.short=UZT -Asia/Tashkent.standard.short=UZT -Asia/Tbilisi.daylight.short=GEST -Asia/Tbilisi.generic.short=GET -Asia/Tbilisi.standard.short=GET -Asia/Tehran.daylight.short=IRDT -Asia/Tehran.generic.short=IRT -Asia/Tehran.standard.short=IRST -Asia/Tel_Aviv.daylight.short=IDT -Asia/Tel_Aviv.generic.short=IT -Asia/Tel_Aviv.standard.short=IST -Asia/Thimbu.daylight.short=BTST -Asia/Thimbu.generic.short=BTT -Asia/Thimbu.standard.short=BTT -Asia/Thimphu.daylight.short=BTST -Asia/Thimphu.generic.short=BTT -Asia/Thimphu.standard.short=BTT -Asia/Tokyo.daylight.short=JDT -Asia/Tokyo.generic.short=JT -Asia/Tokyo.standard.short=JST -Asia/Ujung_Pandang.daylight.short=CIST -Asia/Ujung_Pandang.generic.short=WITA -Asia/Ujung_Pandang.standard.short=WITA -Asia/Ulaanbaatar.daylight.short=ULAST -Asia/Ulaanbaatar.generic.short=ULAT -Asia/Ulaanbaatar.standard.short=ULAT -Asia/Ulan_Bator.daylight.short=ULAST -Asia/Ulan_Bator.generic.short=ULAT -Asia/Ulan_Bator.standard.short=ULAT -Asia/Urumqi.daylight.short=CDT -Asia/Urumqi.generic.short=CT -Asia/Urumqi.standard.short=CST -Asia/Ust-Nera.daylight.short=VLAST -Asia/Ust-Nera.generic.short=VLAT -Asia/Ust-Nera.standard.short=VLAT -Asia/Vientiane.daylight.short=ICST -Asia/Vientiane.generic.short=ICT -Asia/Vientiane.standard.short=ICT -Asia/Vladivostok.daylight.short=VLAST -Asia/Vladivostok.generic.short=VLAT -Asia/Vladivostok.standard.short=VLAT -Asia/Yakutsk.daylight.short=YAKST -Asia/Yakutsk.generic.short=YAKT -Asia/Yakutsk.standard.short=YAKT -Asia/Yekaterinburg.daylight.short=YEKST -Asia/Yekaterinburg.generic.short=YEKT -Asia/Yekaterinburg.standard.short=YEKT -Asia/Yerevan.daylight.short=AMST -Asia/Yerevan.generic.short=AMT -Asia/Yerevan.standard.short=AMT -AST.daylight.short=AKDT -AST.generic.short=AKT -AST.standard.short=AKST -Atlantic/Azores.daylight.short=AZOST -Atlantic/Azores.generic.short=AZOT -Atlantic/Azores.standard.short=AZOT -Atlantic/Bermuda.daylight.short=ADT -Atlantic/Bermuda.generic.short=AT -Atlantic/Bermuda.standard.short=AST -Atlantic/Canary.daylight.short=WEST -Atlantic/Canary.generic.short=WET -Atlantic/Canary.standard.short=WET -Atlantic/Cape_Verde.daylight.short=CVST -Atlantic/Cape_Verde.generic.short=CVT -Atlantic/Cape_Verde.standard.short=CVT -Atlantic/Faeroe.daylight.short=WEST -Atlantic/Faeroe.generic.short=WET -Atlantic/Faeroe.standard.short=WET -Atlantic/Faroe.daylight.short=WEST -Atlantic/Faroe.generic.short=WET -Atlantic/Faroe.standard.short=WET -Atlantic/Jan_Mayen.daylight.short=CEST -Atlantic/Jan_Mayen.generic.short=CET -Atlantic/Jan_Mayen.standard.short=CET -Atlantic/Madeira.daylight.short=WEST -Atlantic/Madeira.generic.short=WET -Atlantic/Madeira.standard.short=WET -Atlantic/Reykjavik.daylight.short=GMT -Atlantic/Reykjavik.generic.short=GMT -Atlantic/Reykjavik.standard.short=GMT -Atlantic/South_Georgia.daylight.short=GDT -Atlantic/South_Georgia.generic.short=GT -Atlantic/South_Georgia.standard.short=GST -Atlantic/Stanley.daylight.short=FKST -Atlantic/Stanley.generic.short=FKT -Atlantic/Stanley.standard.short=FKT -Atlantic/St_Helena.daylight.short=GMT -Atlantic/St_Helena.generic.short=GMT -Atlantic/St_Helena.standard.short=GMT -Australia/ACT.daylight.short=EST -Australia/ACT.generic.short=ET -Australia/ACT.standard.short=EST -Australia/Adelaide.daylight.short=CST -Australia/Adelaide.generic.short=CT -Australia/Adelaide.standard.short=CST -Australia/Brisbane.daylight.short=EST -Australia/Brisbane.generic.short=ET -Australia/Brisbane.standard.short=EST -Australia/Broken_Hill.daylight.short=CST -Australia/Broken_Hill.generic.short=CT -Australia/Broken_Hill.standard.short=CST -Australia/Canberra.daylight.short=EST -Australia/Canberra.generic.short=ET -Australia/Canberra.standard.short=EST -Australia/Currie.daylight.short=EST -Australia/Currie.generic.short=ET -Australia/Currie.standard.short=EST -Australia/Darwin.daylight.short=CST -Australia/Darwin.generic.short=CT -Australia/Darwin.standard.short=CST -Australia/Eucla.daylight.short=CWST -Australia/Eucla.generic.short=CWT -Australia/Eucla.standard.short=CWST -Australia/Hobart.daylight.short=EST -Australia/Hobart.generic.short=ET -Australia/Hobart.standard.short=EST -Australia/LHI.daylight.short=LHST -Australia/LHI.generic.short=LHT -Australia/LHI.standard.short=LHST -Australia/Lindeman.daylight.short=EST -Australia/Lindeman.generic.short=ET -Australia/Lindeman.standard.short=EST -Australia/Lord_Howe.daylight.short=LHST -Australia/Lord_Howe.generic.short=LHT -Australia/Lord_Howe.standard.short=LHST -Australia/Melbourne.daylight.short=EST -Australia/Melbourne.generic.short=ET -Australia/Melbourne.standard.short=EST -Australia/North.daylight.short=CST -Australia/North.generic.short=CT -Australia/North.standard.short=CST -Australia/NSW.daylight.short=EST -Australia/NSW.generic.short=ET -Australia/NSW.standard.short=EST -Australia/Perth.daylight.short=WST -Australia/Perth.generic.short=WT -Australia/Perth.standard.short=WST -Australia/Queensland.daylight.short=EST -Australia/Queensland.generic.short=ET -Australia/Queensland.standard.short=EST -Australia/South.daylight.short=CST -Australia/South.generic.short=CT -Australia/South.standard.short=CST -Australia/Sydney.daylight.short=EST -Australia/Sydney.generic.short=ET -Australia/Sydney.standard.short=EST -Australia/Tasmania.daylight.short=EST -Australia/Tasmania.generic.short=ET -Australia/Tasmania.standard.short=EST -Australia/Victoria.daylight.short=EST -Australia/Victoria.generic.short=ET -Australia/Victoria.standard.short=EST -Australia/West.daylight.short=WST -Australia/West.generic.short=WT -Australia/West.standard.short=WST -Australia/Yancowinna.daylight.short=CST -Australia/Yancowinna.generic.short=CT -Australia/Yancowinna.standard.short=CST -BET.daylight.short=BRST -BET.generic.short=BRT -BET.standard.short=BRT -Brazil/Acre.daylight.short=ACST -Brazil/Acre.generic.short=ACT -Brazil/Acre.standard.short=ACT -Brazil/DeNoronha.daylight.short=FNST -Brazil/DeNoronha.generic.short=FNT -Brazil/DeNoronha.standard.short=FNT -Brazil/East.daylight.short=BRST -Brazil/East.generic.short=BRT -Brazil/East.standard.short=BRT -Brazil/West.daylight.short=AMST -Brazil/West.generic.short=AMT -Brazil/West.standard.short=AMT -BST.daylight.short=BDST -BST.generic.short=BDT -BST.standard.short=BDT -Canada/Atlantic.daylight.short=ADT -Canada/Atlantic.generic.short=AT -Canada/Atlantic.standard.short=AST -Canada/Central.daylight.short=CDT -Canada/Central.generic.short=CT -Canada/Central.standard.short=CST -Canada/Eastern.daylight.short=EDT -Canada/Eastern.generic.short=ET -Canada/Eastern.standard.short=EST -Canada/East-Saskatchewan.daylight.short=CDT -Canada/East-Saskatchewan.generic.short=CT -Canada/East-Saskatchewan.standard.short=CST -Canada/Mountain.daylight.short=MDT -Canada/Mountain.generic.short=MT -Canada/Mountain.standard.short=MST -Canada/Newfoundland.daylight.short=NDT -Canada/Newfoundland.generic.short=NT -Canada/Newfoundland.standard.short=NST -Canada/Pacific.daylight.short=PDT -Canada/Pacific.generic.short=PT -Canada/Pacific.standard.short=PST -Canada/Saskatchewan.daylight.short=CDT -Canada/Saskatchewan.generic.short=CT -Canada/Saskatchewan.standard.short=CST -Canada/Yukon.daylight.short=PDT -Canada/Yukon.generic.short=PT -Canada/Yukon.standard.short=PST -CAT.daylight.short=CAST -CAT.generic.short=CAT -CAT.standard.short=CAT -CET.daylight.short=CEST -CET.generic.short=CET -CET.standard.short=CET -Chile/Continental.daylight.short=CLST -Chile/Continental.generic.short=CLT -Chile/Continental.standard.short=CLT -Chile/EasterIsland.daylight.short=EASST -Chile/EasterIsland.generic.short=EAST -Chile/EasterIsland.standard.short=EAST -CNT.daylight.short=NDT -CNT.generic.short=NT -CNT.standard.short=NST -CST6CDT.daylight.short=CDT -CST6CDT.generic.short=CT -CST6CDT.standard.short=CST -CST.daylight.short=CDT -CST.generic.short=CT -CST.standard.short=CST -CTT.daylight.short=CDT -CTT.generic.short=CT -CTT.standard.short=CST -Cuba.daylight.short=CDT -Cuba.generic.short=CT -Cuba.standard.short=CST -EAT.daylight.short=EAST -EAT.generic.short=EAT -EAT.standard.short=EAT -ECT.daylight.short=CEST -ECT.generic.short=CET -ECT.standard.short=CET -EET.daylight.short=EEST -EET.generic.short=EET -EET.standard.short=EET -Egypt.daylight.short=EEST -Egypt.generic.short=EET -Egypt.standard.short=EET -Eire.daylight.short=IST -Eire.generic.short=IT -Eire.standard.short=GMT -EST5EDT.daylight.short=EDT -EST5EDT.generic.short=ET -EST5EDT.standard.short=EST -EST.daylight.short=EDT -EST.generic.short=ET -EST.standard.short=EST -Etc/Greenwich.daylight.short=GMT -Etc/Greenwich.generic.short=GMT -Etc/Greenwich.standard.short=GMT -Etc/UCT.daylight.short=UTC -Etc/UCT.generic.short=UTC -Etc/UCT.standard.short=UTC -Etc/Universal.daylight.short=UTC -Etc/Universal.generic.short=UTC -Etc/Universal.standard.short=UTC -Etc/UTC.daylight.short=UTC -Etc/UTC.generic.short=UTC -Etc/UTC.standard.short=UTC -Etc/Zulu.daylight.short=UTC -Etc/Zulu.generic.short=UTC -Etc/Zulu.standard.short=UTC -Europe/Amsterdam.daylight.short=CEST -Europe/Amsterdam.generic.short=CET -Europe/Amsterdam.standard.short=CET -Europe/Andorra.daylight.short=CEST -Europe/Andorra.generic.short=CET -Europe/Andorra.standard.short=CET -Europe/Athens.daylight.short=EEST -Europe/Athens.generic.short=EET -Europe/Athens.standard.short=EET -Europe/Belfast.daylight.short=BST -Europe/Belfast.generic.short=BT -Europe/Belfast.standard.short=GMT -Europe/Belgrade.daylight.short=CEST -Europe/Belgrade.generic.short=CET -Europe/Belgrade.standard.short=CET -Europe/Berlin.daylight.short=CEST -Europe/Berlin.generic.short=CET -Europe/Berlin.standard.short=CET -Europe/Bratislava.daylight.short=CEST -Europe/Bratislava.generic.short=CET -Europe/Bratislava.standard.short=CET -Europe/Brussels.daylight.short=CEST -Europe/Brussels.generic.short=CET -Europe/Brussels.standard.short=CET -Europe/Bucharest.daylight.short=EEST -Europe/Bucharest.generic.short=EET -Europe/Bucharest.standard.short=EET -Europe/Budapest.daylight.short=CEST -Europe/Budapest.generic.short=CET -Europe/Budapest.standard.short=CET -Europe/Busingen.daylight.short=CEST -Europe/Busingen.generic.short=CET -Europe/Busingen.standard.short=CET -Europe/Chisinau.daylight.short=EEST -Europe/Chisinau.generic.short=EET -Europe/Chisinau.standard.short=EET -Europe/Copenhagen.daylight.short=CEST -Europe/Copenhagen.generic.short=CET -Europe/Copenhagen.standard.short=CET -Europe/Dublin.daylight.short=IST -Europe/Dublin.generic.short=IT -Europe/Dublin.standard.short=GMT -Europe/Gibraltar.daylight.short=CEST -Europe/Gibraltar.generic.short=CET -Europe/Gibraltar.standard.short=CET -Europe/Guernsey.daylight.short=BST -Europe/Guernsey.generic.short=BT -Europe/Guernsey.standard.short=GMT -Europe/Helsinki.daylight.short=EEST -Europe/Helsinki.generic.short=EET -Europe/Helsinki.standard.short=EET -Europe/Isle_of_Man.daylight.short=BST -Europe/Isle_of_Man.generic.short=BT -Europe/Isle_of_Man.standard.short=GMT -Europe/Istanbul.daylight.short=EEST -Europe/Istanbul.generic.short=EET -Europe/Istanbul.standard.short=EET -Europe/Jersey.daylight.short=BST -Europe/Jersey.generic.short=BT -Europe/Jersey.standard.short=GMT -Europe/Kaliningrad.daylight.short=FEST -Europe/Kaliningrad.generic.short=FET -Europe/Kaliningrad.standard.short=FET -Europe/Kiev.daylight.short=EEST -Europe/Kiev.generic.short=EET -Europe/Kiev.standard.short=EET -Europe/Lisbon.daylight.short=WEST -Europe/Lisbon.generic.short=WET -Europe/Lisbon.standard.short=WET -Europe/Ljubljana.daylight.short=CEST -Europe/Ljubljana.generic.short=CET -Europe/Ljubljana.standard.short=CET -Europe/London.daylight.short=BST -Europe/London.generic.short=BT -Europe/London.standard.short=GMT -Europe/Luxembourg.daylight.short=CEST -Europe/Luxembourg.generic.short=CET -Europe/Luxembourg.standard.short=CET -Europe/Madrid.daylight.short=CEST -Europe/Madrid.generic.short=CET -Europe/Madrid.standard.short=CET -Europe/Malta.daylight.short=CEST -Europe/Malta.generic.short=CET -Europe/Malta.standard.short=CET -Europe/Mariehamn.daylight.short=EEST -Europe/Mariehamn.generic.short=EET -Europe/Mariehamn.standard.short=EET -Europe/Minsk.daylight.short=FEST -Europe/Minsk.generic.short=FET -Europe/Minsk.standard.short=FET -Europe/Monaco.daylight.short=CEST -Europe/Monaco.generic.short=CET -Europe/Monaco.standard.short=CET -Europe/Moscow.daylight.short=MSD -Europe/Moscow.generic.short=MT -Europe/Moscow.standard.short=MSK -Europe/Nicosia.daylight.short=EEST -Europe/Nicosia.generic.short=EET -Europe/Nicosia.standard.short=EET -Europe/Oslo.daylight.short=CEST -Europe/Oslo.generic.short=CET -Europe/Oslo.standard.short=CET -Europe/Paris.daylight.short=CEST -Europe/Paris.generic.short=CET -Europe/Paris.standard.short=CET -Europe/Podgorica.daylight.short=CEST -Europe/Podgorica.generic.short=CET -Europe/Podgorica.standard.short=CET -Europe/Prague.daylight.short=CEST -Europe/Prague.generic.short=CET -Europe/Prague.standard.short=CET -Europe/Riga.daylight.short=EEST -Europe/Riga.generic.short=EET -Europe/Riga.standard.short=EET -Europe/Rome.daylight.short=CEST -Europe/Rome.generic.short=CET -Europe/Rome.standard.short=CET -Europe/Samara.daylight.short=SAMST -Europe/Samara.generic.short=SAMT -Europe/Samara.standard.short=SAMT -Europe/San_Marino.daylight.short=CEST -Europe/San_Marino.generic.short=CET -Europe/San_Marino.standard.short=CET -Europe/Sarajevo.daylight.short=CEST -Europe/Sarajevo.generic.short=CET -Europe/Sarajevo.standard.short=CET -Europe/Simferopol.daylight.short=EEST -Europe/Simferopol.generic.short=EET -Europe/Simferopol.standard.short=EET -Europe/Skopje.daylight.short=CEST -Europe/Skopje.generic.short=CET -Europe/Skopje.standard.short=CET -Europe/Sofia.daylight.short=EEST -Europe/Sofia.generic.short=EET -Europe/Sofia.standard.short=EET -Europe/Stockholm.daylight.short=CEST -Europe/Stockholm.generic.short=CET -Europe/Stockholm.standard.short=CET -Europe/Tallinn.daylight.short=EEST -Europe/Tallinn.generic.short=EET -Europe/Tallinn.standard.short=EET -Europe/Tirane.daylight.short=CEST -Europe/Tirane.generic.short=CET -Europe/Tirane.standard.short=CET -Europe/Tiraspol.daylight.short=EEST -Europe/Tiraspol.generic.short=EET -Europe/Tiraspol.standard.short=EET -Europe/Uzhgorod.daylight.short=EEST -Europe/Uzhgorod.generic.short=EET -Europe/Uzhgorod.standard.short=EET -Europe/Vaduz.daylight.short=CEST -Europe/Vaduz.generic.short=CET -Europe/Vaduz.standard.short=CET -Europe/Vatican.daylight.short=CEST -Europe/Vatican.generic.short=CET -Europe/Vatican.standard.short=CET -Europe/Vienna.daylight.short=CEST -Europe/Vienna.generic.short=CET -Europe/Vienna.standard.short=CET -Europe/Vilnius.daylight.short=EEST -Europe/Vilnius.generic.short=EET -Europe/Vilnius.standard.short=EET -Europe/Volgograd.daylight.short=VOLST -Europe/Volgograd.generic.short=VOLT -Europe/Volgograd.standard.short=VOLT -Europe/Warsaw.daylight.short=CEST -Europe/Warsaw.generic.short=CET -Europe/Warsaw.standard.short=CET -Europe/Zagreb.daylight.short=CEST -Europe/Zagreb.generic.short=CET -Europe/Zagreb.standard.short=CET -Europe/Zaporozhye.daylight.short=EEST -Europe/Zaporozhye.generic.short=EET -Europe/Zaporozhye.standard.short=EET -Europe/Zurich.daylight.short=CEST -Europe/Zurich.generic.short=CET -Europe/Zurich.standard.short=CET -GB.daylight.short=BST -GB-Eire.daylight.short=BST -GB-Eire.generic.short=BT -GB-Eire.standard.short=GMT -GB.generic.short=BT -GB.standard.short=GMT -GMT.daylight.short=GMT -GMT.generic.short=GMT -GMT.standard.short=GMT -Greenwich.daylight.short=GMT -Greenwich.generic.short=GMT -Greenwich.standard.short=GMT -Hongkong.daylight.short=HKST -Hongkong.generic.short=HKT -Hongkong.standard.short=HKT -HST.daylight.short=HDT -HST.generic.short=HT -HST.standard.short=HST -Iceland.daylight.short=GMT -Iceland.generic.short=GMT -Iceland.standard.short=GMT -IET.daylight.short=EDT -IET.generic.short=ET -IET.standard.short=EST -Indian/Antananarivo.daylight.short=EAST -Indian/Antananarivo.generic.short=EAT -Indian/Antananarivo.standard.short=EAT -Indian/Chagos.daylight.short=IOST -Indian/Chagos.generic.short=IOT -Indian/Chagos.standard.short=IOT -Indian/Christmas.daylight.short=CXST -Indian/Christmas.generic.short=CIT -Indian/Christmas.standard.short=CXT -Indian/Cocos.daylight.short=CCST -Indian/Cocos.generic.short=CCT -Indian/Cocos.standard.short=CCT -Indian/Comoro.daylight.short=EAST -Indian/Comoro.generic.short=EAT -Indian/Comoro.standard.short=EAT -Indian/Kerguelen.daylight.short=TFST -Indian/Kerguelen.generic.short=TFT -Indian/Kerguelen.standard.short=TFT -Indian/Mahe.daylight.short=SCST -Indian/Mahe.generic.short=SCT -Indian/Mahe.standard.short=SCT -Indian/Maldives.daylight.short=MVST -Indian/Maldives.generic.short=MVT -Indian/Maldives.standard.short=MVT -Indian/Mauritius.daylight.short=MUST -Indian/Mauritius.generic.short=MUT -Indian/Mauritius.standard.short=MUT -Indian/Mayotte.daylight.short=EAST -Indian/Mayotte.generic.short=EAT -Indian/Mayotte.standard.short=EAT -Indian/Reunion.daylight.short=REST -Indian/Reunion.generic.short=RET -Indian/Reunion.standard.short=RET -Iran.daylight.short=IRDT -Iran.generic.short=IRT -Iran.standard.short=IRST -Israel.daylight.short=IDT -Israel.generic.short=IT -Israel.standard.short=IST -IST.daylight.short=IDT -IST.generic.short=IT -IST.standard.short=IST -Jamaica.daylight.short=EDT -Jamaica.generic.short=ET -Jamaica.standard.short=EST -Japan.daylight.short=JDT -Japan.generic.short=JT -Japan.standard.short=JST -JST.daylight.short=JDT -JST.generic.short=JT -JST.standard.short=JST -Kwajalein.daylight.short=MHST -Kwajalein.generic.short=MHT -Kwajalein.standard.short=MHT -Libya.daylight.short=EEST -Libya.generic.short=EET -Libya.standard.short=EET -MET.daylight.short=MEST -MET.generic.short=MET -MET.standard.short=MET -Mexico/BajaNorte.daylight.short=PDT -Mexico/BajaNorte.generic.short=PT -Mexico/BajaNorte.standard.short=PST -Mexico/BajaSur.daylight.short=MDT -Mexico/BajaSur.generic.short=MT -Mexico/BajaSur.standard.short=MST -Mexico/General.daylight.short=CDT -Mexico/General.generic.short=CT -Mexico/General.standard.short=CST -MIT.daylight.short=WSDT -MIT.generic.short=WST -MIT.standard.short=WST -MST7MDT.daylight.short=MDT -MST7MDT.generic.short=MT -MST7MDT.standard.short=MST -MST.daylight.short=MDT -MST.generic.short=MT -MST.standard.short=MST -Navajo.daylight.short=MDT -Navajo.generic.short=MT -Navajo.standard.short=MST -NET.daylight.short=AMST -NET.generic.short=AMT -NET.standard.short=AMT -NST.daylight.short=NZDT -NST.generic.short=NZT -NST.standard.short=NZST -NZ-CHAT.daylight.short=CHADT -NZ-CHAT.generic.short=CHAT -NZ-CHAT.standard.short=CHAST -NZ.daylight.short=NZDT -NZ.generic.short=NZT -NZ.standard.short=NZST -Pacific/Apia.daylight.short=WSDT -Pacific/Apia.generic.short=WST -Pacific/Apia.standard.short=WST -Pacific/Auckland.daylight.short=NZDT -Pacific/Auckland.generic.short=NZT -Pacific/Auckland.standard.short=NZST -Pacific/Chatham.daylight.short=CHADT -Pacific/Chatham.generic.short=CHAT -Pacific/Chatham.standard.short=CHAST -Pacific/Chuuk.daylight.short=CHUST -Pacific/Chuuk.generic.short=CHUT -Pacific/Chuuk.standard.short=CHUT -Pacific/Easter.daylight.short=EASST -Pacific/Easter.generic.short=EAST -Pacific/Easter.standard.short=EAST -Pacific/Efate.daylight.short=VUST -Pacific/Efate.generic.short=VUT -Pacific/Efate.standard.short=VUT -Pacific/Enderbury.daylight.short=PHOST -Pacific/Enderbury.generic.short=PHOT -Pacific/Enderbury.standard.short=PHOT -Pacific/Fakaofo.daylight.short=TKST -Pacific/Fakaofo.generic.short=TKT -Pacific/Fakaofo.standard.short=TKT -Pacific/Fiji.daylight.short=FJST -Pacific/Fiji.generic.short=FJT -Pacific/Fiji.standard.short=FJT -Pacific/Funafuti.daylight.short=TVST -Pacific/Funafuti.generic.short=TVT -Pacific/Funafuti.standard.short=TVT -Pacific/Galapagos.daylight.short=GALST -Pacific/Galapagos.generic.short=GALT -Pacific/Galapagos.standard.short=GALT -Pacific/Gambier.daylight.short=GAMST -Pacific/Gambier.generic.short=GAMT -Pacific/Gambier.standard.short=GAMT -Pacific/Guadalcanal.daylight.short=SBST -Pacific/Guadalcanal.generic.short=SBT -Pacific/Guadalcanal.standard.short=SBT -Pacific/Guam.daylight.short=ChDT -Pacific/Guam.generic.short=ChT -Pacific/Guam.standard.short=ChST -Pacific/Honolulu.daylight.short=HDT -Pacific/Honolulu.generic.short=HT -Pacific/Honolulu.standard.short=HST -Pacific/Johnston.daylight.short=HDT -Pacific/Johnston.generic.short=HT -Pacific/Johnston.standard.short=HST -Pacific/Kiritimati.daylight.short=LINST -Pacific/Kiritimati.generic.short=LINT -Pacific/Kiritimati.standard.short=LINT -Pacific/Kosrae.daylight.short=KOSST -Pacific/Kosrae.generic.short=KOST -Pacific/Kosrae.standard.short=KOST -Pacific/Kwajalein.daylight.short=MHST -Pacific/Kwajalein.generic.short=MHT -Pacific/Kwajalein.standard.short=MHT -Pacific/Majuro.daylight.short=MHST -Pacific/Majuro.generic.short=MHT -Pacific/Majuro.standard.short=MHT -Pacific/Marquesas.daylight.short=MARST -Pacific/Marquesas.generic.short=MART -Pacific/Marquesas.standard.short=MART -Pacific/Midway.daylight.short=SDT -Pacific/Midway.generic.short=ST -Pacific/Midway.standard.short=SST -Pacific/Nauru.daylight.short=NRST -Pacific/Nauru.generic.short=NRT -Pacific/Nauru.standard.short=NRT -Pacific/Niue.daylight.short=NUST -Pacific/Niue.generic.short=NUT -Pacific/Niue.standard.short=NUT -Pacific/Norfolk.daylight.short=NFST -Pacific/Norfolk.generic.short=NFT -Pacific/Norfolk.standard.short=NFT -Pacific/Noumea.daylight.short=NCST -Pacific/Noumea.generic.short=NCT -Pacific/Noumea.standard.short=NCT -Pacific/Pago_Pago.daylight.short=SDT -Pacific/Pago_Pago.generic.short=ST -Pacific/Pago_Pago.standard.short=SST -Pacific/Palau.daylight.short=PWST -Pacific/Palau.generic.short=PWT -Pacific/Palau.standard.short=PWT -Pacific/Pitcairn.daylight.short=PDT -Pacific/Pitcairn.generic.short=PT -Pacific/Pitcairn.standard.short=PST -Pacific/Pohnpei.daylight.short=PONST -Pacific/Pohnpei.generic.short=PONT -Pacific/Pohnpei.standard.short=PONT -Pacific/Ponape.daylight.short=PONST -Pacific/Ponape.generic.short=PONT -Pacific/Ponape.standard.short=PONT -Pacific/Port_Moresby.daylight.short=PGST -Pacific/Port_Moresby.generic.short=PGT -Pacific/Port_Moresby.standard.short=PGT -Pacific/Rarotonga.daylight.short=CKHST -Pacific/Rarotonga.generic.short=CKT -Pacific/Rarotonga.standard.short=CKT -Pacific/Saipan.daylight.short=ChDT -Pacific/Saipan.generic.short=ChT -Pacific/Saipan.standard.short=ChST -Pacific/Samoa.daylight.short=SDT -Pacific/Samoa.generic.short=ST -Pacific/Samoa.standard.short=SST -Pacific/Tahiti.daylight.short=TAHST -Pacific/Tahiti.generic.short=TAHT -Pacific/Tahiti.standard.short=TAHT -Pacific/Tarawa.daylight.short=GILST -Pacific/Tarawa.generic.short=GILT -Pacific/Tarawa.standard.short=GILT -Pacific/Tongatapu.daylight.short=TOST -Pacific/Tongatapu.generic.short=TOT -Pacific/Tongatapu.standard.short=TOT -Pacific/Truk.daylight.short=CHUST -Pacific/Truk.generic.short=CHUT -Pacific/Truk.standard.short=CHUT -Pacific/Wake.daylight.short=WAKST -Pacific/Wake.generic.short=WAKT -Pacific/Wake.standard.short=WAKT -Pacific/Wallis.daylight.short=WFST -Pacific/Wallis.generic.short=WFT -Pacific/Wallis.standard.short=WFT -Pacific/Yap.daylight.short=CHUST -Pacific/Yap.generic.short=CHUT -Pacific/Yap.standard.short=CHUT -PLT.daylight.short=PKST -PLT.generic.short=PKT -PLT.standard.short=PKT -PNT.daylight.short=MDT -PNT.generic.short=MT -PNT.standard.short=MST -Poland.daylight.short=CEST -Poland.generic.short=CET -Poland.standard.short=CET -Portugal.daylight.short=WEST -Portugal.generic.short=WET -Portugal.standard.short=WET -PRC.daylight.short=CDT -PRC.generic.short=CT -PRC.standard.short=CST -PRT.daylight.short=ADT -PRT.generic.short=AT -PRT.standard.short=AST -PST8PDT.daylight.short=PDT -PST8PDT.generic.short=PT -PST8PDT.standard.short=PST -PST.daylight.short=PDT -PST.generic.short=PT -PST.standard.short=PST -ROK.daylight.short=KDT -ROK.generic.short=KT -ROK.standard.short=KST -Singapore.daylight.short=SGST -Singapore.generic.short=SGT -Singapore.standard.short=SGT -SST.daylight.short=SBST -SST.generic.short=SBT -SST.standard.short=SBT -SystemV/AST4ADT.daylight.short=ADT -SystemV/AST4ADT.generic.short=AT -SystemV/AST4ADT.standard.short=AST -SystemV/AST4.daylight.short=ADT -SystemV/AST4.generic.short=AT -SystemV/AST4.standard.short=AST -SystemV/CST6CDT.daylight.short=CDT -SystemV/CST6CDT.generic.short=CT -SystemV/CST6CDT.standard.short=CST -SystemV/CST6.daylight.short=CDT -SystemV/CST6.generic.short=CT -SystemV/CST6.standard.short=CST -SystemV/EST5.daylight.short=EDT -SystemV/EST5EDT.daylight.short=EDT -SystemV/EST5EDT.generic.short=ET -SystemV/EST5EDT.standard.short=EST -SystemV/EST5.generic.short=ET -SystemV/EST5.standard.short=EST -SystemV/HST10.daylight.short=HDT -SystemV/HST10.generic.short=HT -SystemV/HST10.standard.short=HST -SystemV/MST7.daylight.short=MDT -SystemV/MST7.generic.short=MT -SystemV/MST7MDT.daylight.short=MDT -SystemV/MST7MDT.generic.short=MT -SystemV/MST7MDT.standard.short=MST -SystemV/MST7.standard.short=MST -SystemV/PST8.daylight.short=PDT -SystemV/PST8.generic.short=PT -SystemV/PST8PDT.daylight.short=PDT -SystemV/PST8PDT.generic.short=PT -SystemV/PST8PDT.standard.short=PST -SystemV/PST8.standard.short=PST -SystemV/YST9.daylight.short=AKDT -SystemV/YST9.generic.short=AKT -SystemV/YST9.standard.short=AKST -SystemV/YST9YDT.daylight.short=AKDT -SystemV/YST9YDT.generic.short=AKT -SystemV/YST9YDT.standard.short=AKST -Turkey.daylight.short=EEST -Turkey.generic.short=EET -Turkey.standard.short=EET -UCT.daylight.short=UTC -UCT.generic.short=UTC -UCT.standard.short=UTC -Universal.daylight.short=UTC -Universal.generic.short=UTC -Universal.standard.short=UTC -US/Alaska.daylight.short=AKDT -US/Alaska.generic.short=AKT -US/Alaska.standard.short=AKST -US/Aleutian.daylight.short=HADT -US/Aleutian.generic.short=HAT -US/Aleutian.standard.short=HAST -US/Arizona.daylight.short=MDT -US/Arizona.generic.short=MT -US/Arizona.standard.short=MST -US/Central.daylight.short=CDT -US/Central.generic.short=CT -US/Central.standard.short=CST -US/Eastern.daylight.short=EDT -US/Eastern.generic.short=ET -US/Eastern.standard.short=EST -US/East-Indiana.daylight.short=EDT -US/East-Indiana.generic.short=ET -US/East-Indiana.standard.short=EST -US/Hawaii.daylight.short=HDT -US/Hawaii.generic.short=HT -US/Hawaii.standard.short=HST -US/Indiana-Starke.daylight.short=CDT -US/Indiana-Starke.generic.short=CT -US/Indiana-Starke.standard.short=CST -US/Michigan.daylight.short=EDT -US/Michigan.generic.short=ET -US/Michigan.standard.short=EST -US/Mountain.daylight.short=MDT -US/Mountain.generic.short=MT -US/Mountain.standard.short=MST -US/Pacific.daylight.short=PDT -US/Pacific.generic.short=PT -US/Pacific-New.daylight.short=PDT -US/Pacific-New.generic.short=PT -US/Pacific-New.standard.short=PST -US/Pacific.standard.short=PST -US/Samoa.daylight.short=SDT -US/Samoa.generic.short=ST -US/Samoa.standard.short=SST -UTC.daylight.short=UTC -UTC.generic.short=UTC -UTC.standard.short=UTC -VST.daylight.short=ICST -VST.generic.short=ICT -VST.standard.short=ICT -WET.daylight.short=WEST -WET.generic.short=WET -WET.standard.short=WET -W-SU.daylight.short=MSD -W-SU.generic.short=MT -W-SU.standard.short=MSK -Zulu.daylight.short=UTC -Zulu.generic.short=UTC -Zulu.standard.short=UTC diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_pt_BR.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_pt_BR.properties deleted file mode 100644 index 763311b50ca..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_pt_BR.properties +++ /dev/null @@ -1,651 +0,0 @@ -ACT.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Central (Territ\u00F3rio do Norte) -ACT.generic.long=Hor\u00E1rio Central (Territ\u00F3rio do Norte) -ACT.standard.long=Hor\u00E1rio-Padr\u00E3o Central (Territ\u00F3rio do Norte) -AET.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Nova Gales do Sul) -AET.generic.long=Hor\u00E1rio Oriental (Nova Gales do Sul) -AET.standard.long=Hor\u00E1rio-Padr\u00E3o Oriental (Nova Gales do Sul) -AGT.generic.long=Hor\u00E1rio da Argentina -ART.generic.long=Hor\u00E1rio da Europa Oriental -AST.generic.long=Hor\u00E1rio do Alasca -Africa/Abidjan.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Africa/Accra.generic.long=Fuso Hor\u00E1rio do Meridiano de Gana -Africa/Addis_Ababa.generic.long=Hor\u00E1rio do Leste da \u00C1frica -Africa/Algiers.generic.long=Hor\u00E1rio da Europa Central -Africa/Asmara.generic.long=Hor\u00E1rio do Leste da \u00C1frica -Africa/Asmera.generic.long=Hor\u00E1rio do Leste da \u00C1frica -Africa/Bamako.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Africa/Bangui.generic.long=Hor\u00E1rio da \u00C1frica Ocidental -Africa/Banjul.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Africa/Bissau.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Africa/Blantyre.generic.long=Hor\u00E1rio da \u00C1frica Central -Africa/Brazzaville.generic.long=Hor\u00E1rio da \u00C1frica Ocidental -Africa/Bujumbura.generic.long=Hor\u00E1rio da \u00C1frica Central -Africa/Cairo.generic.long=Hor\u00E1rio da Europa Oriental -Africa/Casablanca.generic.long=Hor\u00E1rio da Europa Ocidental -Africa/Ceuta.generic.long=Hor\u00E1rio da Europa Central -Africa/Conakry.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Africa/Dakar.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Africa/Dar_es_Salaam.generic.long=Hor\u00E1rio do Leste da \u00C1frica -Africa/Djibouti.generic.long=Hor\u00E1rio do Leste da \u00C1frica -Africa/Douala.generic.long=Hor\u00E1rio da \u00C1frica Ocidental -Africa/El_Aaiun.generic.long=Hor\u00E1rio da Europa Ocidental -Africa/Freetown.generic.long=Hor\u00E1rio de Serra Leoa -Africa/Gaborone.generic.long=Hor\u00E1rio da \u00C1frica Central -Africa/Harare.generic.long=Hor\u00E1rio da \u00C1frica Central -Africa/Johannesburg.generic.long=Hor\u00E1rio da \u00C1frica do Sul -Africa/Juba.generic.long=Hor\u00E1rio do Leste da \u00C1frica -Africa/Kampala.generic.long=Hor\u00E1rio do Leste da \u00C1frica -Africa/Khartoum.generic.long=Hor\u00E1rio do Leste da \u00C1frica -Africa/Kigali.generic.long=Hor\u00E1rio da \u00C1frica Central -Africa/Kinshasa.generic.long=Hor\u00E1rio da \u00C1frica Ocidental -Africa/Lagos.generic.long=Hor\u00E1rio da \u00C1frica Ocidental -Africa/Libreville.generic.long=Hor\u00E1rio da \u00C1frica Ocidental -Africa/Lome.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Africa/Luanda.generic.long=Hor\u00E1rio da \u00C1frica Ocidental -Africa/Lubumbashi.generic.long=Hor\u00E1rio da \u00C1frica Central -Africa/Lusaka.generic.long=Hor\u00E1rio da \u00C1frica Central -Africa/Malabo.generic.long=Hor\u00E1rio da \u00C1frica Ocidental -Africa/Maputo.generic.long=Hor\u00E1rio da \u00C1frica Central -Africa/Maseru.generic.long=Hor\u00E1rio da \u00C1frica do Sul -Africa/Mbabane.generic.long=Hor\u00E1rio da \u00C1frica do Sul -Africa/Mogadishu.generic.long=Hor\u00E1rio do Leste da \u00C1frica -Africa/Monrovia.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Africa/Nairobi.generic.long=Hor\u00E1rio do Leste da \u00C1frica -Africa/Ndjamena.generic.long=Hor\u00E1rio da \u00C1frica Ocidental -Africa/Niamey.generic.long=Hor\u00E1rio da \u00C1frica Ocidental -Africa/Nouakchott.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Africa/Ouagadougou.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Africa/Porto-Novo.generic.long=Hor\u00E1rio da \u00C1frica Ocidental -Africa/Sao_Tome.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Africa/Timbuktu.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Africa/Tripoli.generic.long=Hor\u00e1rio da Europa Oriental -Africa/Tunis.generic.long=Hor\u00E1rio da Europa Central -Africa/Windhoek.generic.long=Hor\u00E1rio da \u00C1frica Ocidental -America/Adak.generic.long=Hor\u00E1rio do Hava\u00ED-Aleutas -America/Anchorage.generic.long=Hor\u00E1rio do Alasca -America/Anguilla.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Antigua.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Araguaina.generic.long=Hor\u00E1rio de Bras\u00EDlia -America/Argentina/Buenos_Aires.generic.long=Hor\u00E1rio da Argentina -America/Argentina/Catamarca.generic.long=Hor\u00E1rio da Argentina -America/Argentina/ComodRivadavia.generic.long=Hor\u00E1rio da Argentina -America/Argentina/Cordoba.generic.long=Hor\u00E1rio da Argentina -America/Argentina/Jujuy.generic.long=Hor\u00E1rio da Argentina -America/Argentina/La_Rioja.generic.long=Hor\u00E1rio da Argentina -America/Argentina/Mendoza.generic.long=Hor\u00E1rio da Argentina -America/Argentina/Rio_Gallegos.generic.long=Hor\u00E1rio da Argentina -America/Argentina/Salta.generic.long=Hor\u00E1rio da Argentina -America/Argentina/San_Juan.generic.long=Hor\u00E1rio da Argentina -America/Argentina/San_Luis.generic.long=Hor\u00e1rio da Argentina -America/Argentina/Tucuman.generic.long=Hor\u00E1rio da Argentina -America/Argentina/Ushuaia.generic.long=Hor\u00E1rio da Argentina -America/Aruba.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Asuncion.generic.long=Hor\u00E1rio do Paraguai -America/Atikokan.generic.long=Hor\u00E1rio do Leste -America/Atka.generic.long=Hor\u00E1rio do Hava\u00ED-Aleutas -America/Bahia.generic.long=Hor\u00E1rio de Bras\u00EDlia -America/Bahia_Banderas.generic.long=Hor\u00E1rio Central -America/Barbados.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Belem.generic.long=Hor\u00E1rio de Bras\u00EDlia -America/Belize.generic.long=Hor\u00E1rio Central -America/Blanc-Sablon.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Boa_Vista.generic.long=Hor\u00E1rio do Amazonas -America/Bogota.generic.long=Hor\u00E1rio da Col\u00F4mbia -America/Boise.generic.long=Hor\u00E1rio das Montanhas Rochosas -America/Buenos_Aires.generic.long=Hor\u00E1rio da Argentina -America/Cambridge_Bay.generic.long=Hor\u00E1rio das Montanhas Rochosas -America/Campo_Grande.generic.long=Hor\u00E1rio do Amazonas -America/Cancun.generic.long=Hor\u00E1rio Central -America/Caracas.generic.long=Hor\u00E1rio da Venezuela -America/Catamarca.generic.long=Hor\u00E1rio da Argentina -America/Cayenne.generic.long=Hor\u00E1rio da Guiana Francesa -America/Cayman.generic.long=Hor\u00E1rio do Leste -America/Chicago.generic.long=Hor\u00E1rio Central -America/Chihuahua.generic.long=Hor\u00E1rio das Montanhas Rochosas -America/Coral_Harbour.generic.long=Hor\u00E1rio do Leste -America/Cordoba.generic.long=Hor\u00E1rio da Argentina -America/Costa_Rica.generic.long=Hor\u00E1rio Central -America/Creston.generic.long=Hor\u00E1rio das Montanhas Rochosas -America/Cuiaba.generic.long=Hor\u00E1rio do Amazonas -America/Curacao.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Danmarkshavn.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -America/Dawson.generic.long=Hor\u00E1rio do Pac\u00EDfico -America/Dawson_Creek.generic.long=Hor\u00E1rio das Montanhas Rochosas -America/Denver.generic.long=Hor\u00E1rio das Montanhas Rochosas -America/Detroit.generic.long=Hor\u00E1rio do Leste -America/Dominica.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Edmonton.generic.long=Hor\u00E1rio das Montanhas Rochosas -America/Eirunepe.generic.long=Fuso hor\u00e1rio do Acre -America/El_Salvador.generic.long=Hor\u00E1rio Central -America/Ensenada.generic.long=Hor\u00E1rio do Pac\u00EDfico -America/Fort_Wayne.generic.long=Hor\u00E1rio do Leste -America/Fortaleza.generic.long=Hor\u00E1rio de Bras\u00EDlia -America/Glace_Bay.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Godthab.generic.long=Hor\u00E1rio da Groenl\u00E2ndia Ocidental -America/Goose_Bay.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Grand_Turk.generic.long=Hor\u00E1rio do Leste -America/Grenada.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Guadeloupe.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Guatemala.generic.long=Hor\u00E1rio Central -America/Guayaquil.generic.long=Hor\u00E1rio do Equador -America/Guyana.generic.long=Hor\u00E1rios da Guiana -America/Halifax.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Havana.generic.long=Hor\u00E1rio de Cuba -America/Hermosillo.generic.long=Hor\u00E1rio das Montanhas Rochosas -America/Indiana/Indianapolis.generic.long=Hor\u00E1rio do Leste -America/Indiana/Knox.generic.long=Hor\u00E1rio Central -America/Indiana/Marengo.generic.long=Hor\u00E1rio do Leste -America/Indiana/Petersburg.generic.long=Hor\u00E1rio do Leste -America/Indiana/Tell_City.generic.long=Hor\u00E1rio Central -America/Indiana/Vevay.generic.long=Hor\u00E1rio do Leste -America/Indiana/Vincennes.generic.long=Hor\u00E1rio do Leste -America/Indiana/Winamac.generic.long=Hor\u00E1rio do Leste -America/Indianapolis.generic.long=Hor\u00E1rio do Leste -America/Inuvik.generic.long=Hor\u00E1rio das Montanhas Rochosas -America/Iqaluit.generic.long=Hor\u00E1rio do Leste -America/Jamaica.generic.long=Hor\u00E1rio do Leste -America/Jujuy.generic.long=Hor\u00E1rio da Argentina -America/Juneau.generic.long=Hor\u00E1rio do Alasca -America/Kentucky/Louisville.generic.long=Hor\u00E1rio do Leste -America/Kentucky/Monticello.generic.long=Hor\u00E1rio do Leste -America/Knox_IN.generic.long=Hor\u00E1rio Central -America/Kralendijk.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/La_Paz.generic.long=Hor\u00E1rio da Bol\u00EDvia -America/Lima.generic.long=Hor\u00E1rio do Peru -America/Los_Angeles.generic.long=Hor\u00E1rio do Pac\u00EDfico -America/Louisville.generic.long=Hor\u00E1rio do Leste -America/Lower_Princes.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Maceio.generic.long=Hor\u00E1rio de Bras\u00EDlia -America/Managua.generic.long=Hor\u00E1rio Central -America/Manaus.generic.long=Hor\u00E1rio do Amazonas -America/Marigot.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Martinique.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Matamoros.generic.long=Hor\u00E1rio Central -America/Mazatlan.generic.long=Hor\u00E1rio das Montanhas Rochosas -America/Mendoza.generic.long=Hor\u00E1rio da Argentina -America/Menominee.generic.long=Hor\u00E1rio Central -America/Merida.generic.long=Hor\u00E1rio Central -America/Metlakatla.daylight.long=Hor\u00E1rio de Luz Natural de Metlakatla -America/Metlakatla.generic.long=Hor\u00E1rio de Metlakatla -America/Metlakatla.standard.long=Hor\u00E1rio Padr\u00E3o de Metlakatla -America/Mexico_City.generic.long=Hor\u00E1rio Central -America/Miquelon.generic.long=Hor\u00E1rio de Saint Pierre e Miquelon -America/Moncton.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Monterrey.generic.long=Hor\u00E1rio Central -America/Montevideo.generic.long=Hor\u00E1rio do Uruguai -America/Montreal.generic.long=Hor\u00E1rio do Leste -America/Montserrat.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Nassau.generic.long=Hor\u00E1rio do Leste -America/New_York.generic.long=Hor\u00E1rio do Leste -America/Nipigon.generic.long=Hor\u00E1rio do Leste -America/Nome.generic.long=Hor\u00E1rio do Alasca -America/Noronha.generic.long=Hor\u00E1rio de Fernando de Noronha -America/North_Dakota/Beulah.generic.long=Hor\u00E1rio Central -America/North_Dakota/Center.generic.long=Hor\u00E1rio Central -America/North_Dakota/New_Salem.generic.long=Hor\u00E1rio Central -America/Ojinaga.generic.long=Hor\u00E1rio das Montanhas Rochosas -America/Panama.generic.long=Hor\u00E1rio do Leste -America/Pangnirtung.generic.long=Hor\u00E1rio do Leste -America/Paramaribo.generic.long=Hor\u00E1rio do Suriname -America/Phoenix.generic.long=Hor\u00E1rio das Montanhas Rochosas -America/Port-au-Prince.generic.long=Hor\u00E1rio do Leste -America/Port_of_Spain.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Porto_Acre.generic.long=Fuso hor\u00e1rio do Acre -America/Porto_Velho.generic.long=Hor\u00E1rio do Amazonas -America/Puerto_Rico.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Rainy_River.generic.long=Hor\u00E1rio Central -America/Rankin_Inlet.generic.long=Hor\u00E1rio Central -America/Recife.generic.long=Hor\u00E1rio de Bras\u00EDlia -America/Regina.generic.long=Hor\u00E1rio Central -America/Resolute.generic.long=Hor\u00E1rio Central -America/Rio_Branco.generic.long=Fuso hor\u00e1rio do Acre -America/Rosario.generic.long=Hor\u00E1rio da Argentina -America/Santa_Isabel.generic.long=Hor\u00E1rio do Pac\u00EDfico -America/Santarem.generic.long=Hor\u00E1rio de Bras\u00EDlia -America/Santiago.generic.long=Hor\u00E1rio do Chile -America/Santo_Domingo.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Sao_Paulo.generic.long=Hor\u00E1rio de Bras\u00EDlia -America/Scoresbysund.generic.long=Hor\u00E1rio da Groenl\u00E2ndia Oriental -America/Shiprock.generic.long=Hor\u00E1rio das Montanhas Rochosas -America/Sitka.generic.long=Hor\u00E1rio do Alasca -America/St_Barthelemy.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/St_Johns.generic.long=Hor\u00E1rio de Terra Nova -America/St_Kitts.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/St_Lucia.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/St_Thomas.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/St_Vincent.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Swift_Current.generic.long=Hor\u00E1rio Central -America/Tegucigalpa.generic.long=Hor\u00E1rio Central -America/Thule.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Thunder_Bay.generic.long=Hor\u00E1rio do Leste -America/Tijuana.generic.long=Hor\u00E1rio do Pac\u00EDfico -America/Toronto.generic.long=Hor\u00E1rio do Leste -America/Tortola.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Vancouver.generic.long=Hor\u00E1rio do Pac\u00EDfico -America/Virgin.generic.long=Hor\u00E1rio do Atl\u00E2ntico -America/Whitehorse.generic.long=Hor\u00E1rio do Pac\u00EDfico -America/Winnipeg.generic.long=Hor\u00E1rio Central -America/Yakutat.generic.long=Hor\u00E1rio do Alasca -America/Yellowknife.generic.long=Hor\u00E1rio das Montanhas Rochosas -Antarctica/Casey.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Ocidental (Austr\u00E1lia) -Antarctica/Casey.generic.long=Hor\u00E1rio Ocidental (Austr\u00E1lia) -Antarctica/Casey.standard.long=Hor\u00E1rio-Padr\u00E3o Ocidental (Austr\u00E1lia) -Antarctica/Davis.generic.long=Hor\u00E1rio de Davis -Antarctica/DumontDUrville.generic.long=Fuso Hor\u00E1rio de Dumont-d'Urville -Antarctica/Macquarie.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o da Ilha de Macquarie -Antarctica/Macquarie.generic.long=Fuso Hor\u00E1rio da Ilha de Macquarie -Antarctica/Macquarie.standard.long=Fuso Hor\u00E1rio da Ilha de Macquarie -Antarctica/Mawson.generic.long=Hor\u00E1rio de Mawson -Antarctica/McMurdo.generic.long=Hor\u00E1rio da Nova Zel\u00E2ndia -Antarctica/Palmer.generic.long=Hor\u00E1rio do Chile -Antarctica/Rothera.generic.long=Hor\u00E1rio de Rothera -Antarctica/South_Pole.generic.long=Hor\u00E1rio da Nova Zel\u00E2ndia -Antarctica/Syowa.generic.long=Hor\u00E1rio de Syowa -Antarctica/Vostok.generic.long=Hor\u00E1rio de Vostok -Arctic/Longyearbyen.generic.long=Hor\u00E1rio da Europa Central -Asia/Aden.generic.long=Hor\u00E1rio da Ar\u00E1bia -Asia/Almaty.generic.long=Hor\u00E1rio de Alma-Ata -Asia/Amman.generic.long=Hor\u00e1rio da Ar\u00e1bia -Asia/Anadyr.generic.long=Hor\u00E1rio de Anadyr -Asia/Aqtau.generic.long=Hor\u00E1rio de Aqtau -Asia/Aqtobe.generic.long=Hor\u00E1rio de Aqtobe -Asia/Ashgabat.generic.long=Hor\u00E1rio do Turcomenist\u00E3o -Asia/Ashkhabad.generic.long=Hor\u00E1rio do Turcomenist\u00E3o -Asia/Baghdad.generic.long=Hor\u00E1rio da Ar\u00E1bia -Asia/Bahrain.generic.long=Hor\u00E1rio da Ar\u00E1bia -Asia/Baku.generic.long=Hor\u00E1rio do Azerbaij\u00E3o -Asia/Bangkok.generic.long=Hor\u00E1rio da Indochina -Asia/Beirut.generic.long=Hor\u00E1rio da Europa Oriental -Asia/Bishkek.generic.long=Hor\u00E1rio do Quirguist\u00E3o -Asia/Brunei.generic.long=Hor\u00E1rio de Brunei -Asia/Calcutta.generic.long=Hor\u00E1rio da \u00CDndia -Asia/Choibalsan.generic.long=Hor\u00E1rio de Choibalsan -Asia/Chongqing.generic.long=Hor\u00E1rio da China -Asia/Chungking.generic.long=Hor\u00E1rio da China -Asia/Colombo.generic.long=Hor\u00E1rio da \u00CDndia -Asia/Dacca.generic.long=Hor\u00E1rio de Bangladesh -Asia/Damascus.generic.long=Hor\u00E1rio da Europa Oriental -Asia/Dhaka.generic.long=Hor\u00E1rio de Bangladesh -Asia/Dili.generic.long=Hor\u00E1rio do Timor-Leste -Asia/Dubai.generic.long=Hor\u00E1rio do Golfo -Asia/Dushanbe.generic.long=Hor\u00E1rio do Tadjiquist\u00E3o -Asia/Gaza.generic.long=Hor\u00E1rio da Europa Oriental -Asia/Harbin.generic.long=Hor\u00E1rio da China -Asia/Hebron.generic.long=Hor\u00E1rio da Europa Oriental -Asia/Ho_Chi_Minh.generic.long=Hor\u00E1rio da Indochina -Asia/Hong_Kong.generic.long=Hor\u00E1rio de Hong Kong -Asia/Hovd.generic.long=Hor\u00E1rio de Hovd -Asia/Irkutsk.generic.long=Hor\u00E1rio de Irkutsk -Asia/Istanbul.generic.long=Hor\u00E1rio da Europa Oriental -Asia/Jakarta.generic.long=Hor\u00E1rio da Indon\u00E9sia Ocidental -Asia/Jayapura.generic.long=Hor\u00E1rio da Indon\u00E9sia Oriental -Asia/Jerusalem.generic.long=Hor\u00E1rio de Israel -Asia/Kabul.generic.long=Hor\u00E1rio do Afeganist\u00E3o -Asia/Kamchatka.generic.long=Hor\u00E1rio de Petropavlovsk-Kamchatski -Asia/Karachi.generic.long=Hor\u00E1rio do Paquist\u00E3o -Asia/Kashgar.generic.long=Hor\u00E1rio da China -Asia/Kathmandu.generic.long=Hor\u00E1rio do Nepal -Asia/Katmandu.generic.long=Hor\u00E1rio do Nepal -Asia/Khandyga.daylight.long=Hor\u00E1rio de Ver\u00E3o de Khandyga -Asia/Khandyga.generic.long=Hor\u00E1rio de Khandyga -Asia/Khandyga.standard.long=Hor\u00E1rio de Khandyga -Asia/Kolkata.generic.long=Hor\u00E1rio da \u00CDndia -Asia/Krasnoyarsk.generic.long=Hor\u00E1rio de Krasnoyarsk -Asia/Kuala_Lumpur.generic.long=Hor\u00E1rio da Mal\u00E1sia -Asia/Kuching.generic.long=Hor\u00E1rio da Mal\u00E1sia -Asia/Kuwait.generic.long=Hor\u00E1rio da Ar\u00E1bia -Asia/Macao.generic.long=Hor\u00E1rio da China -Asia/Macau.generic.long=Hor\u00E1rio da China -Asia/Magadan.generic.long=Hor\u00E1rio de Magadan -Asia/Makassar.generic.long=Hor\u00E1rio da Indon\u00E9sia Central -Asia/Manila.generic.long=Hor\u00E1rio das Filipinas -Asia/Muscat.generic.long=Hor\u00E1rio do Golfo -Asia/Nicosia.generic.long=Hor\u00E1rio da Europa Oriental -Asia/Novokuznetsk.generic.long=Hor\u00E1rio de Novosibirsk -Asia/Novosibirsk.generic.long=Hor\u00E1rio de Novosibirsk -Asia/Omsk.generic.long=Hor\u00E1rio de Omsk -Asia/Oral.generic.long=Hor\u00E1rio de Uralsk -Asia/Phnom_Penh.generic.long=Hor\u00E1rio da Indochina -Asia/Pontianak.generic.long=Hor\u00E1rio da Indon\u00E9sia Ocidental -Asia/Pyongyang.generic.long=Hor\u00E1rio da Coreia -Asia/Qatar.generic.long=Hor\u00E1rio da Ar\u00E1bia -Asia/Qyzylorda.generic.long=Hor\u00E1rio de Qyzylorda -Asia/Rangoon.generic.long=Hor\u00E1rio de Mianmar -Asia/Saigon.generic.long=Hor\u00E1rio da Indochina -Asia/Sakhalin.generic.long=Hor\u00E1rio de Sakhalin -Asia/Samarkand.generic.long=Hor\u00E1rio do Uzbequist\u00E3o -Asia/Seoul.generic.long=Hor\u00E1rio da Coreia -Asia/Shanghai.generic.long=Hor\u00E1rio da China -Asia/Singapore.generic.long=Hor\u00E1rio de Cingapura -Asia/Taipei.generic.long=Hor\u00E1rio da China -Asia/Tashkent.generic.long=Hor\u00E1rio do Uzbequist\u00E3o -Asia/Tbilisi.generic.long=Hor\u00E1rio da Ge\u00F3rgia -Asia/Tehran.generic.long=Hor\u00E1rio do Ir\u00E3 -Asia/Tel_Aviv.generic.long=Hor\u00E1rio de Israel -Asia/Thimbu.generic.long=Hor\u00E1rio do But\u00E3o -Asia/Thimphu.generic.long=Hor\u00E1rio do But\u00E3o -Asia/Tokyo.generic.long=Hor\u00E1rio do Jap\u00E3o -Asia/Ujung_Pandang.generic.long=Hor\u00E1rio da Indon\u00E9sia Central -Asia/Ulaanbaatar.generic.long=Hor\u00E1rio de Ulaanbaatar -Asia/Ulan_Bator.generic.long=Hor\u00E1rio de Ulaanbaatar -Asia/Urumqi.generic.long=Hor\u00E1rio da China -Asia/Ust-Nera.daylight.long=Hor\u00E1rio de Ver\u00E3o de Ust-Nera -Asia/Ust-Nera.generic.long=Hor\u00E1rio de Ust-Nera -Asia/Ust-Nera.standard.long=Hor\u00E1rio de Ust-Nera -Asia/Vientiane.generic.long=Hor\u00E1rio da Indochina -Asia/Vladivostok.generic.long=Hor\u00E1rio de Vladivostok -Asia/Yakutsk.generic.long=Hor\u00E1rio de Yakutsk -Asia/Yekaterinburg.generic.long=Hor\u00E1rio de Yekaterinburg -Asia/Yerevan.generic.long=Hor\u00E1rio da Arm\u00EAnia -Atlantic/Azores.generic.long=Hor\u00E1rio de A\u00E7ores -Atlantic/Bermuda.generic.long=Hor\u00E1rio do Atl\u00E2ntico -Atlantic/Canary.generic.long=Hor\u00E1rio da Europa Ocidental -Atlantic/Cape_Verde.generic.long=Hor\u00E1rio de Cabo Verde -Atlantic/Faeroe.generic.long=Hor\u00E1rio da Europa Ocidental -Atlantic/Faroe.generic.long=Hor\u00E1rio da Europa Ocidental -Atlantic/Jan_Mayen.generic.long=Hor\u00E1rio da Europa Central -Atlantic/Madeira.generic.long=Hor\u00E1rio da Europa Ocidental -Atlantic/Reykjavik.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Atlantic/South_Georgia.generic.long=Hor\u00E1rio da Ge\u00F3rgia do Sul -Atlantic/St_Helena.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Atlantic/Stanley.generic.long=Hor\u00E1rio das Ilhas Malvinas -Australia/ACT.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Nova Gales do Sul) -Australia/ACT.generic.long=Hor\u00E1rio Oriental (Nova Gales do Sul) -Australia/ACT.standard.long=Hor\u00E1rio-Padr\u00E3o Oriental (Nova Gales do Sul) -Australia/Adelaide.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Central (Austr\u00E1lia do Sul) -Australia/Adelaide.generic.long=Hor\u00E1rio Central (Austr\u00E1lia do Sul) -Australia/Adelaide.standard.long=Hor\u00E1rio-Padr\u00E3o Central (Austr\u00E1lia do Sul) -Australia/Brisbane.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Queensland) -Australia/Brisbane.generic.long=Hor\u00E1rio do Leste (Queensland) -Australia/Brisbane.standard.long=Hor\u00E1rio-Padr\u00E3o do Leste (Queensland) -Australia/Broken_Hill.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Central (Austr\u00E1lia do Sul/Nova Gales do Sul) -Australia/Broken_Hill.generic.long=Hor\u00E1rio Central (Austr\u00E1lia do Sul/Nova Gales do Sul) -Australia/Broken_Hill.standard.long=Hor\u00E1rio-Padr\u00E3o Central (Austr\u00E1lia do Sul/Nova Gales do Sul) -Australia/Canberra.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Nova Gales do Sul) -Australia/Canberra.generic.long=Hor\u00E1rio Oriental (Nova Gales do Sul) -Australia/Canberra.standard.long=Hor\u00E1rio-Padr\u00E3o Oriental (Nova Gales do Sul) -Australia/Currie.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Nova Gales do Sul) -Australia/Currie.generic.long=Hor\u00E1rio Oriental (Nova Gales do Sul) -Australia/Currie.standard.long=Hor\u00E1rio-Padr\u00E3o Oriental (Nova Gales do Sul) -Australia/Darwin.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Central (Territ\u00F3rio do Norte) -Australia/Darwin.generic.long=Hor\u00E1rio Central (Territ\u00F3rio do Norte) -Australia/Darwin.standard.long=Hor\u00E1rio-Padr\u00E3o Central (Territ\u00F3rio do Norte) -Australia/Eucla.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Ocidental Central (Austr\u00E1lia) -Australia/Eucla.generic.long=Hor\u00E1rio Ocidental Central (Austr\u00E1lia) -Australia/Eucla.standard.long=Fuso Hor\u00E1rio Ocidental Central (Austr\u00E1lia) -Australia/Hobart.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Tasm\u00E2nia) -Australia/Hobart.generic.long=Hor\u00E1rio do Leste (Tasm\u00E2nia) -Australia/Hobart.standard.long=Hor\u00E1rio-Padr\u00E3o do Leste (Tasm\u00E2nia) -Australia/LHI.generic.long=Hor\u00E1rio de Lord Howe -Australia/Lindeman.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Queensland) -Australia/Lindeman.generic.long=Hor\u00E1rio do Leste (Queensland) -Australia/Lindeman.standard.long=Hor\u00E1rio-Padr\u00E3o do Leste (Queensland) -Australia/Lord_Howe.generic.long=Hor\u00E1rio de Lord Howe -Australia/Melbourne.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Victoria) -Australia/Melbourne.generic.long=Hor\u00E1rio do Leste (Victoria) -Australia/Melbourne.standard.long=Hor\u00E1rio-Padr\u00E3o do Leste (Victoria) -Australia/NSW.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Nova Gales do Sul) -Australia/NSW.generic.long=Hor\u00E1rio Oriental (Nova Gales do Sul) -Australia/NSW.standard.long=Hor\u00E1rio-Padr\u00E3o Oriental (Nova Gales do Sul) -Australia/North.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Central (Territ\u00F3rio do Norte) -Australia/North.generic.long=Hor\u00E1rio Central (Territ\u00F3rio do Norte) -Australia/North.standard.long=Hor\u00E1rio-Padr\u00E3o Central (Territ\u00F3rio do Norte) -Australia/Perth.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Ocidental (Austr\u00E1lia) -Australia/Perth.generic.long=Hor\u00E1rio Ocidental (Austr\u00E1lia) -Australia/Perth.standard.long=Hor\u00E1rio-Padr\u00E3o Ocidental (Austr\u00E1lia) -Australia/Queensland.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Queensland) -Australia/Queensland.generic.long=Hor\u00E1rio do Leste (Queensland) -Australia/Queensland.standard.long=Hor\u00E1rio-Padr\u00E3o do Leste (Queensland) -Australia/South.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Central (Austr\u00E1lia do Sul) -Australia/South.generic.long=Hor\u00E1rio Central (Austr\u00E1lia do Sul) -Australia/South.standard.long=Hor\u00E1rio-Padr\u00E3o Central (Austr\u00E1lia do Sul) -Australia/Sydney.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Nova Gales do Sul) -Australia/Sydney.generic.long=Hor\u00E1rio Oriental (Nova Gales do Sul) -Australia/Sydney.standard.long=Hor\u00E1rio-Padr\u00E3o Oriental (Nova Gales do Sul) -Australia/Tasmania.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Tasm\u00E2nia) -Australia/Tasmania.generic.long=Hor\u00E1rio do Leste (Tasm\u00E2nia) -Australia/Tasmania.standard.long=Hor\u00E1rio-Padr\u00E3o do Leste (Tasm\u00E2nia) -Australia/Victoria.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Victoria) -Australia/Victoria.generic.long=Hor\u00E1rio do Leste (Victoria) -Australia/Victoria.standard.long=Hor\u00E1rio-Padr\u00E3o do Leste (Victoria) -Australia/West.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Ocidental (Austr\u00E1lia) -Australia/West.generic.long=Hor\u00E1rio Ocidental (Austr\u00E1lia) -Australia/West.standard.long=Hor\u00E1rio-Padr\u00E3o Ocidental (Austr\u00E1lia) -Australia/Yancowinna.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Central (Austr\u00E1lia do Sul/Nova Gales do Sul) -Australia/Yancowinna.generic.long=Hor\u00E1rio Central (Austr\u00E1lia do Sul/Nova Gales do Sul) -Australia/Yancowinna.standard.long=Hor\u00E1rio-Padr\u00E3o Central (Austr\u00E1lia do Sul/Nova Gales do Sul) -BET.generic.long=Hor\u00E1rio de Bras\u00EDlia -BST.generic.long=Hor\u00E1rio de Bangladesh -Brazil/Acre.generic.long=Fuso hor\u00e1rio do Acre -Brazil/DeNoronha.generic.long=Hor\u00E1rio de Fernando de Noronha -Brazil/East.generic.long=Hor\u00E1rio de Bras\u00EDlia -Brazil/West.generic.long=Hor\u00E1rio do Amazonas -CAT.generic.long=Hor\u00E1rio da \u00C1frica Central -CET.generic.long=Hor\u00e1rio da Europa Central -CNT.generic.long=Hor\u00E1rio de Terra Nova -CST.generic.long=Hor\u00E1rio Central -CST6CDT.generic.long=Hor\u00e1rio Central -CTT.generic.long=Hor\u00E1rio da China -Canada/Atlantic.generic.long=Hor\u00E1rio do Atl\u00E2ntico -Canada/Central.generic.long=Hor\u00E1rio Central -Canada/East-Saskatchewan.generic.long=Hor\u00E1rio Central -Canada/Eastern.generic.long=Hor\u00E1rio do Leste -Canada/Mountain.generic.long=Hor\u00E1rio das Montanhas Rochosas -Canada/Newfoundland.generic.long=Hor\u00E1rio de Terra Nova -Canada/Pacific.generic.long=Hor\u00E1rio do Pac\u00EDfico -Canada/Saskatchewan.generic.long=Hor\u00E1rio Central -Canada/Yukon.generic.long=Hor\u00E1rio do Pac\u00EDfico -Chile/Continental.generic.long=Hor\u00E1rio do Chile -Chile/EasterIsland.generic.long=Hor\u00E1rio da Ilha de P\u00E1scoa -Cuba.generic.long=Hor\u00E1rio de Cuba -EAT.generic.long=Hor\u00E1rio do Leste da \u00C1frica -ECT.generic.long=Hor\u00E1rio da Europa Central -EET.generic.long=Hor\u00e1rio da Europa Oriental -EST.generic.long=Hor\u00e1rio do Leste -EST5EDT.generic.long=Hor\u00e1rio do Leste -Egypt.generic.long=Hor\u00E1rio da Europa Oriental -Eire.generic.long=Hor\u00E1rio da Rep\u00FAblica da Irlanda -Etc/Greenwich.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Etc/UCT.generic.long=Hor\u00E1rio Universal Coordenado -Etc/UTC.generic.long=Hor\u00E1rio Universal Coordenado -Etc/Universal.generic.long=Hor\u00E1rio Universal Coordenado -Etc/Zulu.generic.long=Hor\u00E1rio Universal Coordenado -Europe/Amsterdam.generic.long=Hor\u00E1rio da Europa Central -Europe/Andorra.generic.long=Hor\u00E1rio da Europa Central -Europe/Athens.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Belfast.generic.long=Hor\u00E1rio do Reino Unido -Europe/Belgrade.generic.long=Hor\u00E1rio da Europa Central -Europe/Berlin.generic.long=Hor\u00E1rio da Europa Central -Europe/Bratislava.generic.long=Hor\u00E1rio da Europa Central -Europe/Brussels.generic.long=Hor\u00E1rio da Europa Central -Europe/Bucharest.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Budapest.generic.long=Hor\u00E1rio da Europa Central -Europe/Busingen.generic.long=Hor\u00E1rio da Europa Central -Europe/Chisinau.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Copenhagen.generic.long=Hor\u00E1rio da Europa Central -Europe/Dublin.generic.long=Hor\u00E1rio da Rep\u00FAblica da Irlanda -Europe/Gibraltar.generic.long=Hor\u00E1rio da Europa Central -Europe/Guernsey.generic.long=Hor\u00E1rio do Reino Unido -Europe/Helsinki.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Isle_of_Man.generic.long=Hor\u00E1rio do Reino Unido -Europe/Istanbul.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Jersey.generic.long=Hor\u00E1rio do Reino Unido -Europe/Kaliningrad.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o do Extremo Leste Europeu -Europe/Kaliningrad.generic.long=Hor\u00E1rio do Extremo Leste Europeu (FET) -Europe/Kaliningrad.standard.long=Hor\u00E1rio do Extremo Leste Europeu (FET) -Europe/Kiev.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Lisbon.generic.long=Hor\u00E1rio da Europa Ocidental -Europe/Ljubljana.generic.long=Hor\u00E1rio da Europa Central -Europe/London.generic.long=Hor\u00E1rio do Reino Unido -Europe/Luxembourg.generic.long=Hor\u00E1rio da Europa Central -Europe/Madrid.generic.long=Hor\u00E1rio da Europa Central -Europe/Malta.generic.long=Hor\u00E1rio da Europa Central -Europe/Mariehamn.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Minsk.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o do Extremo Leste Europeu -Europe/Minsk.generic.long=Hor\u00E1rio do Extremo Leste Europeu (FET) -Europe/Minsk.standard.long=Hor\u00E1rio do Extremo Leste Europeu (FET) -Europe/Monaco.generic.long=Hor\u00E1rio da Europa Central -Europe/Moscow.generic.long=Hor\u00E1rio de Moscou -Europe/Nicosia.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Oslo.generic.long=Hor\u00E1rio da Europa Central -Europe/Paris.generic.long=Hor\u00E1rio da Europa Central -Europe/Podgorica.generic.long=Hor\u00E1rio da Europa Central -Europe/Prague.generic.long=Hor\u00E1rio da Europa Central -Europe/Riga.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Rome.generic.long=Hor\u00E1rio da Europa Central -Europe/Samara.generic.long=Hor\u00E1rio de Samara -Europe/San_Marino.generic.long=Hor\u00E1rio da Europa Central -Europe/Sarajevo.generic.long=Hor\u00E1rio da Europa Central -Europe/Simferopol.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Skopje.generic.long=Hor\u00E1rio da Europa Central -Europe/Sofia.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Stockholm.generic.long=Hor\u00E1rio da Europa Central -Europe/Tallinn.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Tirane.generic.long=Hor\u00E1rio da Europa Central -Europe/Tiraspol.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Uzhgorod.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Vaduz.generic.long=Hor\u00E1rio da Europa Central -Europe/Vatican.generic.long=Hor\u00E1rio da Europa Central -Europe/Vienna.generic.long=Hor\u00E1rio da Europa Central -Europe/Vilnius.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Volgograd.generic.long=Hor\u00E1rio de Volgogrado -Europe/Warsaw.generic.long=Hor\u00E1rio da Europa Central -Europe/Zagreb.generic.long=Hor\u00E1rio da Europa Central -Europe/Zaporozhye.generic.long=Hor\u00E1rio da Europa Oriental -Europe/Zurich.generic.long=Hor\u00E1rio da Europa Central -GB-Eire.generic.long=Hor\u00E1rio do Reino Unido -GB.generic.long=Hor\u00E1rio do Reino Unido -GMT.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Greenwich.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -HST.generic.long=Hor\u00e1rio do Hava\u00ed -Hongkong.generic.long=Hor\u00E1rio de Hong Kong -IET.generic.long=Hor\u00E1rio do Leste -IST.generic.long=Hor\u00E1rio da \u00CDndia -Iceland.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich -Indian/Antananarivo.generic.long=Hor\u00E1rio do Leste da \u00C1frica -Indian/Chagos.generic.long=Hor\u00E1rio do Territ\u00F3rio do Oceano \u00CDndico -Indian/Christmas.generic.long=Hor\u00E1rio da Ilha Christmas -Indian/Cocos.generic.long=Hor\u00E1rio das Ilhas Cocos -Indian/Comoro.generic.long=Hor\u00E1rio do Leste da \u00C1frica -Indian/Kerguelen.generic.long=Hor\u00E1rio do Territ\u00F3rio Franc\u00EAs no Sul da Ant\u00E1rtica -Indian/Mahe.generic.long=Hor\u00E1rio de Seychelles -Indian/Maldives.generic.long=Hor\u00E1rio das Maldivas -Indian/Mauritius.generic.long=Hor\u00E1rio de Maur\u00EDcio -Indian/Mayotte.generic.long=Hor\u00E1rio do Leste da \u00C1frica -Indian/Reunion.generic.long=Hor\u00E1rio das Ilhas Reuni\u00E3o -Iran.generic.long=Hor\u00E1rio do Ir\u00E3 -Israel.generic.long=Hor\u00E1rio de Israel -JST.generic.long=Hor\u00E1rio do Jap\u00E3o -Jamaica.generic.long=Hor\u00E1rio do Leste -Japan.generic.long=Hor\u00E1rio do Jap\u00E3o -Kwajalein.generic.long=Hor\u00E1rio das Ilhas Marshall -Libya.generic.long=Hor\u00e1rio da Europa Oriental -MET.generic.long=MET -MIT.generic.long=Fuso Hor\u00E1rio de Samoa Ocidental -MST.generic.long=Hor\u00e1rio das Montanhas Rochosas -MST7MDT.generic.long=Hor\u00e1rio das Montanhas Rochosas -Mexico/BajaNorte.generic.long=Hor\u00E1rio do Pac\u00EDfico -Mexico/BajaSur.generic.long=Hor\u00E1rio das Montanhas Rochosas -Mexico/General.generic.long=Hor\u00E1rio Central -NET.generic.long=Hor\u00E1rio da Arm\u00EAnia -NST.generic.long=Hor\u00E1rio da Nova Zel\u00E2ndia -NZ-CHAT.generic.long=Hor\u00E1rio de Chatham -NZ.generic.long=Hor\u00E1rio da Nova Zel\u00E2ndia -Navajo.generic.long=Hor\u00E1rio das Montanhas Rochosas -PLT.generic.long=Hor\u00E1rio do Paquist\u00E3o -PNT.generic.long=Hor\u00E1rio das Montanhas Rochosas -PRC.generic.long=Hor\u00E1rio da China -PRT.generic.long=Hor\u00E1rio do Atl\u00E2ntico -PST.generic.long=Hor\u00E1rio do Pac\u00EDfico -PST8PDT.generic.long=Hor\u00e1rio do Pac\u00edfico -Pacific/Apia.generic.long=Fuso Hor\u00E1rio de Samoa Ocidental -Pacific/Auckland.generic.long=Hor\u00E1rio da Nova Zel\u00E2ndia -Pacific/Chatham.generic.long=Hor\u00E1rio de Chatham -Pacific/Chuuk.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o de Chuuk -Pacific/Chuuk.generic.long=Fuso Hor\u00E1rio de Chuuk -Pacific/Chuuk.standard.long=Fuso Hor\u00E1rio de Chuuk -Pacific/Easter.generic.long=Hor\u00E1rio da Ilha de P\u00E1scoa -Pacific/Efate.generic.long=Hor\u00E1rio de Vanuatu -Pacific/Enderbury.generic.long=Hor\u00E1rio da Ilha Phoenix -Pacific/Fakaofo.generic.long=Hor\u00E1rio de Toquelau -Pacific/Fiji.generic.long=Hor\u00E1rio de Fiji -Pacific/Funafuti.generic.long=Hor\u00E1rio de Tuvalu -Pacific/Galapagos.generic.long=Hor\u00E1rio de Gal\u00E1pagos -Pacific/Gambier.generic.long=Hor\u00E1rio de Gambier -Pacific/Guadalcanal.generic.long=Hor\u00E1rio das Ilhas Salom\u00E3o -Pacific/Guam.generic.long=Hor\u00E1rio de Chamorro -Pacific/Honolulu.generic.long=Hor\u00E1rio do Hava\u00ED -Pacific/Johnston.generic.long=Hor\u00E1rio do Hava\u00ED -Pacific/Kiritimati.generic.long=Hor\u00E1rio das Ilhas Line -Pacific/Kosrae.generic.long=Hor\u00E1rio de Kosrae -Pacific/Kwajalein.generic.long=Hor\u00E1rio das Ilhas Marshall -Pacific/Majuro.generic.long=Hor\u00E1rio das Ilhas Marshall -Pacific/Marquesas.generic.long=Hor\u00E1rio das Ilhas Marquesas -Pacific/Midway.generic.long=Hor\u00E1rio da Samoa -Pacific/Nauru.generic.long=Hor\u00E1rio de Nauru -Pacific/Niue.generic.long=Hor\u00E1rio de Niue -Pacific/Norfolk.generic.long=Hor\u00E1rio de Norfolk -Pacific/Noumea.generic.long=Hor\u00E1rio da Nova Caled\u00F4nia -Pacific/Pago_Pago.generic.long=Hor\u00E1rio da Samoa -Pacific/Palau.generic.long=Hor\u00E1rio de Palau -Pacific/Pitcairn.generic.long=Hor\u00E1rio de Pitcairn -Pacific/Pohnpei.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o de Pohnpei -Pacific/Pohnpei.generic.long=Hor\u00E1rio de Ponape -Pacific/Pohnpei.standard.long=Fuso Hor\u00E1rio de Pohnpei -Pacific/Ponape.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o de Pohnpei -Pacific/Ponape.generic.long=Hor\u00E1rio de Ponape -Pacific/Ponape.standard.long=Fuso Hor\u00E1rio de Pohnpei -Pacific/Port_Moresby.generic.long=Hor\u00E1rio de Papua-Nova Guin\u00E9 -Pacific/Rarotonga.generic.long=Hor\u00E1rio das Ilhas Cook -Pacific/Saipan.generic.long=Hor\u00E1rio de Chamorro -Pacific/Samoa.generic.long=Hor\u00E1rio da Samoa -Pacific/Tahiti.generic.long=Hor\u00E1rio do Tahiti -Pacific/Tarawa.generic.long=Hor\u00E1rio das Ilhas Gilbert -Pacific/Tongatapu.generic.long=Hor\u00E1rio de Tonga -Pacific/Truk.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o de Chuuk -Pacific/Truk.generic.long=Fuso Hor\u00E1rio de Chuuk -Pacific/Truk.standard.long=Fuso Hor\u00E1rio de Chuuk -Pacific/Wake.generic.long=Hor\u00E1rio de Wake -Pacific/Wallis.generic.long=Hor\u00E1rio das Ilhas Wallis e Futuna -Pacific/Yap.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o de Chuuk -Pacific/Yap.generic.long=Fuso Hor\u00E1rio de Chuuk -Pacific/Yap.standard.long=Fuso Hor\u00E1rio de Chuuk -Poland.generic.long=Hor\u00E1rio da Europa Central -Portugal.generic.long=Hor\u00E1rio da Europa Ocidental -ROK.generic.long=Hor\u00E1rio da Coreia -SST.generic.long=Hor\u00E1rio das Ilhas Salom\u00E3o -Singapore.generic.long=Hor\u00E1rio de Cingapura -SystemV/AST4.generic.long=Hor\u00E1rio do Atl\u00E2ntico -SystemV/AST4ADT.generic.long=Hor\u00E1rio do Atl\u00E2ntico -SystemV/CST6.generic.long=Hor\u00E1rio Central -SystemV/CST6CDT.generic.long=Hor\u00E1rio Central -SystemV/EST5.generic.long=Hor\u00E1rio do Leste -SystemV/EST5EDT.generic.long=Hor\u00E1rio do Leste -SystemV/HST10.generic.long=Hor\u00E1rio do Hava\u00ED -SystemV/MST7.generic.long=Hor\u00E1rio das Montanhas Rochosas -SystemV/MST7MDT.generic.long=Hor\u00E1rio das Montanhas Rochosas -SystemV/PST8.generic.long=Hor\u00E1rio do Pac\u00EDfico -SystemV/PST8PDT.generic.long=Hor\u00E1rio do Pac\u00EDfico -SystemV/YST9.generic.long=Hor\u00E1rio do Alasca -SystemV/YST9YDT.generic.long=Hor\u00E1rio do Alasca -Turkey.generic.long=Hor\u00E1rio da Europa Oriental -UCT.generic.long=Hor\u00E1rio Universal Coordenado -US/Alaska.generic.long=Hor\u00E1rio do Alasca -US/Aleutian.generic.long=Hor\u00E1rio do Hava\u00ED-Aleutas -US/Arizona.generic.long=Hor\u00E1rio das Montanhas Rochosas -US/Central.generic.long=Hor\u00E1rio Central -US/East-Indiana.generic.long=Hor\u00E1rio do Leste -US/Eastern.generic.long=Hor\u00E1rio do Leste -US/Hawaii.generic.long=Hor\u00E1rio do Hava\u00ED -US/Indiana-Starke.generic.long=Hor\u00E1rio Central -US/Michigan.generic.long=Hor\u00E1rio do Leste -US/Mountain.generic.long=Hor\u00E1rio das Montanhas Rochosas -US/Pacific-New.generic.long=Hor\u00E1rio do Pac\u00EDfico -US/Pacific.generic.long=Hor\u00E1rio do Pac\u00EDfico -US/Samoa.generic.long=Hor\u00E1rio da Samoa -UTC.generic.long=Hor\u00E1rio Universal Coordenado -Universal.generic.long=Hor\u00E1rio Universal Coordenado -VST.generic.long=Hor\u00E1rio da Indochina -W-SU.generic.long=Hor\u00E1rio de Moscou -WET.generic.long=Hor\u00e1rio da Europa Ocidental -Zulu.generic.long=Hor\u00E1rio Universal Coordenado diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_pt_BR_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_pt_BR_short.properties deleted file mode 100644 index 095522a68d1..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_pt_BR_short.properties +++ /dev/null @@ -1,1743 +0,0 @@ -ACT.daylight.short=CST -ACT.generic.short=CT -ACT.standard.short=CST -AET.daylight.short=EST -AET.generic.short=ET -AET.standard.short=EST -Africa/Abidjan.daylight.short=GMT -Africa/Abidjan.generic.short=GMT -Africa/Abidjan.standard.short=GMT -Africa/Accra.daylight.short=GHST -Africa/Accra.generic.short=GMT -Africa/Accra.standard.short=GMT -Africa/Addis_Ababa.daylight.short=EAST -Africa/Addis_Ababa.generic.short=EAT -Africa/Addis_Ababa.standard.short=EAT -Africa/Algiers.daylight.short=CEST -Africa/Algiers.generic.short=CET -Africa/Algiers.standard.short=CET -Africa/Asmara.daylight.short=EAST -Africa/Asmara.generic.short=EAT -Africa/Asmara.standard.short=EAT -Africa/Asmera.daylight.short=EAST -Africa/Asmera.generic.short=EAT -Africa/Asmera.standard.short=EAT -Africa/Bamako.daylight.short=GMT -Africa/Bamako.generic.short=GMT -Africa/Bamako.standard.short=GMT -Africa/Bangui.daylight.short=WAST -Africa/Bangui.generic.short=WAT -Africa/Bangui.standard.short=WAT -Africa/Banjul.daylight.short=GMT -Africa/Banjul.generic.short=GMT -Africa/Banjul.standard.short=GMT -Africa/Bissau.daylight.short=GMT -Africa/Bissau.generic.short=GMT -Africa/Bissau.standard.short=GMT -Africa/Blantyre.daylight.short=CAST -Africa/Blantyre.generic.short=CAT -Africa/Blantyre.standard.short=CAT -Africa/Brazzaville.daylight.short=WAST -Africa/Brazzaville.generic.short=WAT -Africa/Brazzaville.standard.short=WAT -Africa/Bujumbura.daylight.short=CAST -Africa/Bujumbura.generic.short=CAT -Africa/Bujumbura.standard.short=CAT -Africa/Cairo.daylight.short=EEST -Africa/Cairo.generic.short=EET -Africa/Cairo.standard.short=EET -Africa/Casablanca.daylight.short=WEST -Africa/Casablanca.generic.short=WET -Africa/Casablanca.standard.short=WET -Africa/Ceuta.daylight.short=CEST -Africa/Ceuta.generic.short=CET -Africa/Ceuta.standard.short=CET -Africa/Conakry.daylight.short=GMT -Africa/Conakry.generic.short=GMT -Africa/Conakry.standard.short=GMT -Africa/Dakar.daylight.short=GMT -Africa/Dakar.generic.short=GMT -Africa/Dakar.standard.short=GMT -Africa/Dar_es_Salaam.daylight.short=EAST -Africa/Dar_es_Salaam.generic.short=EAT -Africa/Dar_es_Salaam.standard.short=EAT -Africa/Djibouti.daylight.short=EAST -Africa/Djibouti.generic.short=EAT -Africa/Djibouti.standard.short=EAT -Africa/Douala.daylight.short=WAST -Africa/Douala.generic.short=WAT -Africa/Douala.standard.short=WAT -Africa/El_Aaiun.daylight.short=WEST -Africa/El_Aaiun.generic.short=WET -Africa/El_Aaiun.standard.short=WET -Africa/Freetown.daylight.short=SLST -Africa/Freetown.generic.short=SLT -Africa/Freetown.standard.short=GMT -Africa/Gaborone.daylight.short=CAST -Africa/Gaborone.generic.short=CAT -Africa/Gaborone.standard.short=CAT -Africa/Harare.daylight.short=CAST -Africa/Harare.generic.short=CAT -Africa/Harare.standard.short=CAT -Africa/Johannesburg.daylight.short=SAST -Africa/Johannesburg.generic.short=SAT -Africa/Johannesburg.standard.short=SAST -Africa/Juba.daylight.short=EAST -Africa/Juba.generic.short=EAT -Africa/Juba.standard.short=EAT -Africa/Kampala.daylight.short=EAST -Africa/Kampala.generic.short=EAT -Africa/Kampala.standard.short=EAT -Africa/Khartoum.daylight.short=EAST -Africa/Khartoum.generic.short=EAT -Africa/Khartoum.standard.short=EAT -Africa/Kigali.daylight.short=CAST -Africa/Kigali.generic.short=CAT -Africa/Kigali.standard.short=CAT -Africa/Kinshasa.daylight.short=WAST -Africa/Kinshasa.generic.short=WAT -Africa/Kinshasa.standard.short=WAT -Africa/Lagos.daylight.short=WAST -Africa/Lagos.generic.short=WAT -Africa/Lagos.standard.short=WAT -Africa/Libreville.daylight.short=WAST -Africa/Libreville.generic.short=WAT -Africa/Libreville.standard.short=WAT -Africa/Lome.daylight.short=GMT -Africa/Lome.generic.short=GMT -Africa/Lome.standard.short=GMT -Africa/Luanda.daylight.short=WAST -Africa/Luanda.generic.short=WAT -Africa/Luanda.standard.short=WAT -Africa/Lubumbashi.daylight.short=CAST -Africa/Lubumbashi.generic.short=CAT -Africa/Lubumbashi.standard.short=CAT -Africa/Lusaka.daylight.short=CAST -Africa/Lusaka.generic.short=CAT -Africa/Lusaka.standard.short=CAT -Africa/Malabo.daylight.short=WAST -Africa/Malabo.generic.short=WAT -Africa/Malabo.standard.short=WAT -Africa/Maputo.daylight.short=CAST -Africa/Maputo.generic.short=CAT -Africa/Maputo.standard.short=CAT -Africa/Maseru.daylight.short=SAST -Africa/Maseru.generic.short=SAT -Africa/Maseru.standard.short=SAST -Africa/Mbabane.daylight.short=SAST -Africa/Mbabane.generic.short=SAT -Africa/Mbabane.standard.short=SAST -Africa/Mogadishu.daylight.short=EAST -Africa/Mogadishu.generic.short=EAT -Africa/Mogadishu.standard.short=EAT -Africa/Monrovia.daylight.short=GMT -Africa/Monrovia.generic.short=GMT -Africa/Monrovia.standard.short=GMT -Africa/Nairobi.daylight.short=EAST -Africa/Nairobi.generic.short=EAT -Africa/Nairobi.standard.short=EAT -Africa/Ndjamena.daylight.short=WAST -Africa/Ndjamena.generic.short=WAT -Africa/Ndjamena.standard.short=WAT -Africa/Niamey.daylight.short=WAST -Africa/Niamey.generic.short=WAT -Africa/Niamey.standard.short=WAT -Africa/Nouakchott.daylight.short=GMT -Africa/Nouakchott.generic.short=GMT -Africa/Nouakchott.standard.short=GMT -Africa/Ouagadougou.daylight.short=GMT -Africa/Ouagadougou.generic.short=GMT -Africa/Ouagadougou.standard.short=GMT -Africa/Porto-Novo.daylight.short=WAST -Africa/Porto-Novo.generic.short=WAT -Africa/Porto-Novo.standard.short=WAT -Africa/Sao_Tome.daylight.short=GMT -Africa/Sao_Tome.generic.short=GMT -Africa/Sao_Tome.standard.short=GMT -Africa/Timbuktu.daylight.short=GMT -Africa/Timbuktu.generic.short=GMT -Africa/Timbuktu.standard.short=GMT -Africa/Tripoli.daylight.short=EEST -Africa/Tripoli.generic.short=EET -Africa/Tripoli.standard.short=EET -Africa/Tunis.daylight.short=CEST -Africa/Tunis.generic.short=CET -Africa/Tunis.standard.short=CET -Africa/Windhoek.daylight.short=WAST -Africa/Windhoek.generic.short=WAT -Africa/Windhoek.standard.short=WAT -AGT.daylight.short=ARST -AGT.generic.short=ART -AGT.standard.short=ART -America/Adak.daylight.short=HADT -America/Adak.generic.short=HAT -America/Adak.standard.short=HAST -America/Anchorage.daylight.short=AKDT -America/Anchorage.generic.short=AKT -America/Anchorage.standard.short=AKST -America/Anguilla.daylight.short=ADT -America/Anguilla.generic.short=AT -America/Anguilla.standard.short=AST -America/Antigua.daylight.short=ADT -America/Antigua.generic.short=AT -America/Antigua.standard.short=AST -America/Araguaina.daylight.short=BRST -America/Araguaina.generic.short=BRT -America/Araguaina.standard.short=BRT -America/Argentina/Buenos_Aires.daylight.short=ARST -America/Argentina/Buenos_Aires.generic.short=ART -America/Argentina/Buenos_Aires.standard.short=ART -America/Argentina/Catamarca.daylight.short=ARST -America/Argentina/Catamarca.generic.short=ART -America/Argentina/Catamarca.standard.short=ART -America/Argentina/ComodRivadavia.daylight.short=ARST -America/Argentina/ComodRivadavia.generic.short=ART -America/Argentina/ComodRivadavia.standard.short=ART -America/Argentina/Cordoba.daylight.short=ARST -America/Argentina/Cordoba.generic.short=ART -America/Argentina/Cordoba.standard.short=ART -America/Argentina/Jujuy.daylight.short=ARST -America/Argentina/Jujuy.generic.short=ART -America/Argentina/Jujuy.standard.short=ART -America/Argentina/La_Rioja.daylight.short=ARST -America/Argentina/La_Rioja.generic.short=ART -America/Argentina/La_Rioja.standard.short=ART -America/Argentina/Mendoza.daylight.short=ARST -America/Argentina/Mendoza.generic.short=ART -America/Argentina/Mendoza.standard.short=ART -America/Argentina/Rio_Gallegos.daylight.short=ARST -America/Argentina/Rio_Gallegos.generic.short=ART -America/Argentina/Rio_Gallegos.standard.short=ART -America/Argentina/Salta.daylight.short=ARST -America/Argentina/Salta.generic.short=ART -America/Argentina/Salta.standard.short=ART -America/Argentina/San_Juan.daylight.short=ARST -America/Argentina/San_Juan.generic.short=ART -America/Argentina/San_Juan.standard.short=ART -America/Argentina/San_Luis.daylight.short=ARST -America/Argentina/San_Luis.generic.short=ART -America/Argentina/San_Luis.standard.short=ART -America/Argentina/Tucuman.daylight.short=ARST -America/Argentina/Tucuman.generic.short=ART -America/Argentina/Tucuman.standard.short=ART -America/Argentina/Ushuaia.daylight.short=ARST -America/Argentina/Ushuaia.generic.short=ART -America/Argentina/Ushuaia.standard.short=ART -America/Aruba.daylight.short=ADT -America/Aruba.generic.short=AT -America/Aruba.standard.short=AST -America/Asuncion.daylight.short=PYST -America/Asuncion.generic.short=PYT -America/Asuncion.standard.short=PYT -America/Atikokan.daylight.short=EDT -America/Atikokan.generic.short=ET -America/Atikokan.standard.short=EST -America/Atka.daylight.short=HADT -America/Atka.generic.short=HAT -America/Atka.standard.short=HAST -America/Bahia_Banderas.daylight.short=CDT -America/Bahia_Banderas.generic.short=CT -America/Bahia_Banderas.standard.short=CST -America/Bahia.daylight.short=BRST -America/Bahia.generic.short=BRT -America/Bahia.standard.short=BRT -America/Barbados.daylight.short=ADT -America/Barbados.generic.short=AT -America/Barbados.standard.short=AST -America/Belem.daylight.short=BRST -America/Belem.generic.short=BRT -America/Belem.standard.short=BRT -America/Belize.daylight.short=CDT -America/Belize.generic.short=CT -America/Belize.standard.short=CST -America/Blanc-Sablon.daylight.short=ADT -America/Blanc-Sablon.generic.short=AT -America/Blanc-Sablon.standard.short=AST -America/Boa_Vista.daylight.short=AMST -America/Boa_Vista.generic.short=AMT -America/Boa_Vista.standard.short=AMT -America/Bogota.daylight.short=COST -America/Bogota.generic.short=COT -America/Bogota.standard.short=COT -America/Boise.daylight.short=MDT -America/Boise.generic.short=MT -America/Boise.standard.short=MST -America/Buenos_Aires.daylight.short=ARST -America/Buenos_Aires.generic.short=ART -America/Buenos_Aires.standard.short=ART -America/Cambridge_Bay.daylight.short=MDT -America/Cambridge_Bay.generic.short=MT -America/Cambridge_Bay.standard.short=MST -America/Campo_Grande.daylight.short=AMST -America/Campo_Grande.generic.short=AMT -America/Campo_Grande.standard.short=AMT -America/Cancun.daylight.short=CDT -America/Cancun.generic.short=CT -America/Cancun.standard.short=CST -America/Caracas.daylight.short=VEST -America/Caracas.generic.short=VET -America/Caracas.standard.short=VET -America/Catamarca.daylight.short=ARST -America/Catamarca.generic.short=ART -America/Catamarca.standard.short=ART -America/Cayenne.daylight.short=GFST -America/Cayenne.generic.short=GFT -America/Cayenne.standard.short=GFT -America/Cayman.daylight.short=EDT -America/Cayman.generic.short=ET -America/Cayman.standard.short=EST -America/Chicago.daylight.short=CDT -America/Chicago.generic.short=CT -America/Chicago.standard.short=CST -America/Chihuahua.daylight.short=MDT -America/Chihuahua.generic.short=MT -America/Chihuahua.standard.short=MST -America/Coral_Harbour.daylight.short=EDT -America/Coral_Harbour.generic.short=ET -America/Coral_Harbour.standard.short=EST -America/Cordoba.daylight.short=ARST -America/Cordoba.generic.short=ART -America/Cordoba.standard.short=ART -America/Costa_Rica.daylight.short=CDT -America/Costa_Rica.generic.short=CT -America/Costa_Rica.standard.short=CST -America/Creston.daylight.short=MDT -America/Creston.generic.short=MT -America/Creston.standard.short=MST -America/Cuiaba.daylight.short=AMST -America/Cuiaba.generic.short=AMT -America/Cuiaba.standard.short=AMT -America/Curacao.daylight.short=ADT -America/Curacao.generic.short=AT -America/Curacao.standard.short=AST -America/Danmarkshavn.daylight.short=GMT -America/Danmarkshavn.generic.short=GMT -America/Danmarkshavn.standard.short=GMT -America/Dawson_Creek.daylight.short=MDT -America/Dawson_Creek.generic.short=MT -America/Dawson_Creek.standard.short=MST -America/Dawson.daylight.short=PDT -America/Dawson.generic.short=PT -America/Dawson.standard.short=PST -America/Denver.daylight.short=MDT -America/Denver.generic.short=MT -America/Denver.standard.short=MST -America/Detroit.daylight.short=EDT -America/Detroit.generic.short=ET -America/Detroit.standard.short=EST -America/Dominica.daylight.short=ADT -America/Dominica.generic.short=AT -America/Dominica.standard.short=AST -America/Edmonton.daylight.short=MDT -America/Edmonton.generic.short=MT -America/Edmonton.standard.short=MST -America/Eirunepe.daylight.short=ACST -America/Eirunepe.generic.short=ACT -America/Eirunepe.standard.short=ACT -America/El_Salvador.daylight.short=CDT -America/El_Salvador.generic.short=CT -America/El_Salvador.standard.short=CST -America/Ensenada.daylight.short=PDT -America/Ensenada.generic.short=PT -America/Ensenada.standard.short=PST -America/Fortaleza.daylight.short=BRST -America/Fortaleza.generic.short=BRT -America/Fortaleza.standard.short=BRT -America/Fort_Wayne.daylight.short=EDT -America/Fort_Wayne.generic.short=ET -America/Fort_Wayne.standard.short=EST -America/Glace_Bay.daylight.short=ADT -America/Glace_Bay.generic.short=AT -America/Glace_Bay.standard.short=AST -America/Godthab.daylight.short=WGST -America/Godthab.generic.short=WGT -America/Godthab.standard.short=WGT -America/Goose_Bay.daylight.short=ADT -America/Goose_Bay.generic.short=AT -America/Goose_Bay.standard.short=AST -America/Grand_Turk.daylight.short=EDT -America/Grand_Turk.generic.short=ET -America/Grand_Turk.standard.short=EST -America/Grenada.daylight.short=ADT -America/Grenada.generic.short=AT -America/Grenada.standard.short=AST -America/Guadeloupe.daylight.short=ADT -America/Guadeloupe.generic.short=AT -America/Guadeloupe.standard.short=AST -America/Guatemala.daylight.short=CDT -America/Guatemala.generic.short=CT -America/Guatemala.standard.short=CST -America/Guayaquil.daylight.short=ECST -America/Guayaquil.generic.short=ECT -America/Guayaquil.standard.short=ECT -America/Guyana.daylight.short=GYST -America/Guyana.generic.short=GYT -America/Guyana.standard.short=GYT -America/Halifax.daylight.short=ADT -America/Halifax.generic.short=AT -America/Halifax.standard.short=AST -America/Havana.daylight.short=CDT -America/Havana.generic.short=CT -America/Havana.standard.short=CST -America/Hermosillo.daylight.short=MDT -America/Hermosillo.generic.short=MT -America/Hermosillo.standard.short=MST -America/Indiana/Indianapolis.daylight.short=EDT -America/Indiana/Indianapolis.generic.short=ET -America/Indiana/Indianapolis.standard.short=EST -America/Indiana/Knox.daylight.short=CDT -America/Indiana/Knox.generic.short=CT -America/Indiana/Knox.standard.short=CST -America/Indiana/Marengo.daylight.short=EDT -America/Indiana/Marengo.generic.short=ET -America/Indiana/Marengo.standard.short=EST -America/Indiana/Petersburg.daylight.short=EDT -America/Indiana/Petersburg.generic.short=ET -America/Indiana/Petersburg.standard.short=EST -America/Indianapolis.daylight.short=EDT -America/Indianapolis.generic.short=ET -America/Indianapolis.standard.short=EST -America/Indiana/Tell_City.daylight.short=CDT -America/Indiana/Tell_City.generic.short=CT -America/Indiana/Tell_City.standard.short=CST -America/Indiana/Vevay.daylight.short=EDT -America/Indiana/Vevay.generic.short=ET -America/Indiana/Vevay.standard.short=EST -America/Indiana/Vincennes.daylight.short=EDT -America/Indiana/Vincennes.generic.short=ET -America/Indiana/Vincennes.standard.short=EST -America/Indiana/Winamac.daylight.short=EDT -America/Indiana/Winamac.generic.short=ET -America/Indiana/Winamac.standard.short=EST -America/Inuvik.daylight.short=MDT -America/Inuvik.generic.short=MT -America/Inuvik.standard.short=MST -America/Iqaluit.daylight.short=EDT -America/Iqaluit.generic.short=ET -America/Iqaluit.standard.short=EST -America/Jamaica.daylight.short=EDT -America/Jamaica.generic.short=ET -America/Jamaica.standard.short=EST -America/Jujuy.daylight.short=ARST -America/Jujuy.generic.short=ART -America/Jujuy.standard.short=ART -America/Juneau.daylight.short=AKDT -America/Juneau.generic.short=AKT -America/Juneau.standard.short=AKST -America/Kentucky/Louisville.daylight.short=EDT -America/Kentucky/Louisville.generic.short=ET -America/Kentucky/Louisville.standard.short=EST -America/Kentucky/Monticello.daylight.short=EDT -America/Kentucky/Monticello.generic.short=ET -America/Kentucky/Monticello.standard.short=EST -America/Knox_IN.daylight.short=CDT -America/Knox_IN.generic.short=CT -America/Knox_IN.standard.short=CST -America/Kralendijk.daylight.short=ADT -America/Kralendijk.generic.short=AT -America/Kralendijk.standard.short=AST -America/La_Paz.daylight.short=BOST -America/La_Paz.generic.short=BOT -America/La_Paz.standard.short=BOT -America/Lima.daylight.short=PEST -America/Lima.generic.short=PET -America/Lima.standard.short=PET -America/Los_Angeles.daylight.short=PDT -America/Los_Angeles.generic.short=PT -America/Los_Angeles.standard.short=PST -America/Louisville.daylight.short=EDT -America/Louisville.generic.short=ET -America/Louisville.standard.short=EST -America/Lower_Princes.daylight.short=ADT -America/Lower_Princes.generic.short=AT -America/Lower_Princes.standard.short=AST -America/Maceio.daylight.short=BRST -America/Maceio.generic.short=BRT -America/Maceio.standard.short=BRT -America/Managua.daylight.short=CDT -America/Managua.generic.short=CT -America/Managua.standard.short=CST -America/Manaus.daylight.short=AMST -America/Manaus.generic.short=AMT -America/Manaus.standard.short=AMT -America/Marigot.daylight.short=ADT -America/Marigot.generic.short=AT -America/Marigot.standard.short=AST -America/Martinique.daylight.short=ADT -America/Martinique.generic.short=AT -America/Martinique.standard.short=AST -America/Matamoros.daylight.short=CDT -America/Matamoros.generic.short=CT -America/Matamoros.standard.short=CST -America/Mazatlan.daylight.short=MDT -America/Mazatlan.generic.short=MT -America/Mazatlan.standard.short=MST -America/Mendoza.daylight.short=ARST -America/Mendoza.generic.short=ART -America/Mendoza.standard.short=ART -America/Menominee.daylight.short=CDT -America/Menominee.generic.short=CT -America/Menominee.standard.short=CST -America/Merida.daylight.short=CDT -America/Merida.generic.short=CT -America/Merida.standard.short=CST -America/Metlakatla.daylight.short=MeDT -America/Metlakatla.generic.short=MeT -America/Metlakatla.standard.short=MeST -America/Mexico_City.daylight.short=CDT -America/Mexico_City.generic.short=CT -America/Mexico_City.standard.short=CST -America/Miquelon.daylight.short=PMDT -America/Miquelon.generic.short=PMT -America/Miquelon.standard.short=PMST -America/Moncton.daylight.short=ADT -America/Moncton.generic.short=AT -America/Moncton.standard.short=AST -America/Monterrey.daylight.short=CDT -America/Monterrey.generic.short=CT -America/Monterrey.standard.short=CST -America/Montevideo.daylight.short=UYST -America/Montevideo.generic.short=UYT -America/Montevideo.standard.short=UYT -America/Montreal.daylight.short=EDT -America/Montreal.generic.short=ET -America/Montreal.standard.short=EST -America/Montserrat.daylight.short=ADT -America/Montserrat.generic.short=AT -America/Montserrat.standard.short=AST -America/Nassau.daylight.short=EDT -America/Nassau.generic.short=ET -America/Nassau.standard.short=EST -America/New_York.daylight.short=EDT -America/New_York.generic.short=ET -America/New_York.standard.short=EST -America/Nipigon.daylight.short=EDT -America/Nipigon.generic.short=ET -America/Nipigon.standard.short=EST -America/Nome.daylight.short=AKDT -America/Nome.generic.short=AKT -America/Nome.standard.short=AKST -America/Noronha.daylight.short=FNST -America/Noronha.generic.short=FNT -America/Noronha.standard.short=FNT -America/North_Dakota/Beulah.daylight.short=CDT -America/North_Dakota/Beulah.generic.short=CT -America/North_Dakota/Beulah.standard.short=CST -America/North_Dakota/Center.daylight.short=CDT -America/North_Dakota/Center.generic.short=CT -America/North_Dakota/Center.standard.short=CST -America/North_Dakota/New_Salem.daylight.short=CDT -America/North_Dakota/New_Salem.generic.short=CT -America/North_Dakota/New_Salem.standard.short=CST -America/Ojinaga.daylight.short=MDT -America/Ojinaga.generic.short=MT -America/Ojinaga.standard.short=MST -America/Panama.daylight.short=EDT -America/Panama.generic.short=ET -America/Panama.standard.short=EST -America/Pangnirtung.daylight.short=EDT -America/Pangnirtung.generic.short=ET -America/Pangnirtung.standard.short=EST -America/Paramaribo.daylight.short=SRST -America/Paramaribo.generic.short=SRT -America/Paramaribo.standard.short=SRT -America/Phoenix.daylight.short=MDT -America/Phoenix.generic.short=MT -America/Phoenix.standard.short=MST -America/Port-au-Prince.daylight.short=EDT -America/Port-au-Prince.generic.short=ET -America/Port-au-Prince.standard.short=EST -America/Porto_Acre.daylight.short=ACST -America/Porto_Acre.generic.short=ACT -America/Porto_Acre.standard.short=ACT -America/Port_of_Spain.daylight.short=ADT -America/Port_of_Spain.generic.short=AT -America/Port_of_Spain.standard.short=AST -America/Porto_Velho.daylight.short=AMST -America/Porto_Velho.generic.short=AMT -America/Porto_Velho.standard.short=AMT -America/Puerto_Rico.daylight.short=ADT -America/Puerto_Rico.generic.short=AT -America/Puerto_Rico.standard.short=AST -America/Rainy_River.daylight.short=CDT -America/Rainy_River.generic.short=CT -America/Rainy_River.standard.short=CST -America/Rankin_Inlet.daylight.short=CDT -America/Rankin_Inlet.generic.short=CT -America/Rankin_Inlet.standard.short=CST -America/Recife.daylight.short=BRST -America/Recife.generic.short=BRT -America/Recife.standard.short=BRT -America/Regina.daylight.short=CDT -America/Regina.generic.short=CT -America/Regina.standard.short=CST -America/Resolute.daylight.short=CDT -America/Resolute.generic.short=CT -America/Resolute.standard.short=CST -America/Rio_Branco.daylight.short=ACST -America/Rio_Branco.generic.short=ACT -America/Rio_Branco.standard.short=ACT -America/Rosario.daylight.short=ARST -America/Rosario.generic.short=ART -America/Rosario.standard.short=ART -America/Santa_Isabel.daylight.short=PDT -America/Santa_Isabel.generic.short=PT -America/Santa_Isabel.standard.short=PST -America/Santarem.daylight.short=BRST -America/Santarem.generic.short=BRT -America/Santarem.standard.short=BRT -America/Santiago.daylight.short=CLST -America/Santiago.generic.short=CLT -America/Santiago.standard.short=CLT -America/Santo_Domingo.daylight.short=ADT -America/Santo_Domingo.generic.short=AT -America/Santo_Domingo.standard.short=AST -America/Sao_Paulo.daylight.short=BRST -America/Sao_Paulo.generic.short=BRT -America/Sao_Paulo.standard.short=BRT -America/Scoresbysund.daylight.short=EGST -America/Scoresbysund.generic.short=EGT -America/Scoresbysund.standard.short=EGT -America/Shiprock.daylight.short=MDT -America/Shiprock.generic.short=MT -America/Shiprock.standard.short=MST -America/Sitka.daylight.short=AKDT -America/Sitka.generic.short=AKT -America/Sitka.standard.short=AKST -America/St_Barthelemy.daylight.short=ADT -America/St_Barthelemy.generic.short=AT -America/St_Barthelemy.standard.short=AST -America/St_Johns.daylight.short=NDT -America/St_Johns.generic.short=NT -America/St_Johns.standard.short=NST -America/St_Kitts.daylight.short=ADT -America/St_Kitts.generic.short=AT -America/St_Kitts.standard.short=AST -America/St_Lucia.daylight.short=ADT -America/St_Lucia.generic.short=AT -America/St_Lucia.standard.short=AST -America/St_Thomas.daylight.short=ADT -America/St_Thomas.generic.short=AT -America/St_Thomas.standard.short=AST -America/St_Vincent.daylight.short=ADT -America/St_Vincent.generic.short=AT -America/St_Vincent.standard.short=AST -America/Swift_Current.daylight.short=CDT -America/Swift_Current.generic.short=CT -America/Swift_Current.standard.short=CST -America/Tegucigalpa.daylight.short=CDT -America/Tegucigalpa.generic.short=CT -America/Tegucigalpa.standard.short=CST -America/Thule.daylight.short=ADT -America/Thule.generic.short=AT -America/Thule.standard.short=AST -America/Thunder_Bay.daylight.short=EDT -America/Thunder_Bay.generic.short=ET -America/Thunder_Bay.standard.short=EST -America/Tijuana.daylight.short=PDT -America/Tijuana.generic.short=PT -America/Tijuana.standard.short=PST -America/Toronto.daylight.short=EDT -America/Toronto.generic.short=ET -America/Toronto.standard.short=EST -America/Tortola.daylight.short=ADT -America/Tortola.generic.short=AT -America/Tortola.standard.short=AST -America/Vancouver.daylight.short=PDT -America/Vancouver.generic.short=PT -America/Vancouver.standard.short=PST -America/Virgin.daylight.short=ADT -America/Virgin.generic.short=AT -America/Virgin.standard.short=AST -America/Whitehorse.daylight.short=PDT -America/Whitehorse.generic.short=PT -America/Whitehorse.standard.short=PST -America/Winnipeg.daylight.short=CDT -America/Winnipeg.generic.short=CT -America/Winnipeg.standard.short=CST -America/Yakutat.daylight.short=AKDT -America/Yakutat.generic.short=AKT -America/Yakutat.standard.short=AKST -America/Yellowknife.daylight.short=MDT -America/Yellowknife.generic.short=MT -America/Yellowknife.standard.short=MST -Antarctica/Casey.daylight.short=WST -Antarctica/Casey.generic.short=WT -Antarctica/Casey.standard.short=WST -Antarctica/Davis.daylight.short=DAVST -Antarctica/Davis.generic.short=DAVT -Antarctica/Davis.standard.short=DAVT -Antarctica/DumontDUrville.daylight.short=DDUST -Antarctica/DumontDUrville.generic.short=DDUT -Antarctica/DumontDUrville.standard.short=DDUT -Antarctica/Macquarie.daylight.short=MIST -Antarctica/Macquarie.generic.short=MIST -Antarctica/Macquarie.standard.short=MIST -Antarctica/Mawson.daylight.short=MAWST -Antarctica/Mawson.generic.short=MAWT -Antarctica/Mawson.standard.short=MAWT -Antarctica/McMurdo.daylight.short=NZDT -Antarctica/McMurdo.generic.short=NZT -Antarctica/McMurdo.standard.short=NZST -Antarctica/Palmer.daylight.short=CLST -Antarctica/Palmer.generic.short=CLT -Antarctica/Palmer.standard.short=CLT -Antarctica/Rothera.daylight.short=ROTST -Antarctica/Rothera.generic.short=ROTT -Antarctica/Rothera.standard.short=ROTT -Antarctica/South_Pole.daylight.short=NZDT -Antarctica/South_Pole.generic.short=NZT -Antarctica/South_Pole.standard.short=NZST -Antarctica/Syowa.daylight.short=SYOST -Antarctica/Syowa.generic.short=SYOT -Antarctica/Syowa.standard.short=SYOT -Antarctica/Vostok.daylight.short=VOSST -Antarctica/Vostok.generic.short=VOST -Antarctica/Vostok.standard.short=VOST -Arctic/Longyearbyen.daylight.short=CEST -Arctic/Longyearbyen.generic.short=CET -Arctic/Longyearbyen.standard.short=CET -ART.daylight.short=EEST -ART.generic.short=EET -ART.standard.short=EET -Asia/Aden.daylight.short=ADT -Asia/Aden.generic.short=AT -Asia/Aden.standard.short=AST -Asia/Almaty.daylight.short=ALMST -Asia/Almaty.generic.short=ALMT -Asia/Almaty.standard.short=ALMT -Asia/Amman.daylight.short=ADT -Asia/Amman.generic.short=AT -Asia/Amman.standard.short=AST -Asia/Anadyr.daylight.short=ANAST -Asia/Anadyr.generic.short=ANAT -Asia/Anadyr.standard.short=ANAT -Asia/Aqtau.daylight.short=AQTST -Asia/Aqtau.generic.short=AQTT -Asia/Aqtau.standard.short=AQTT -Asia/Aqtobe.daylight.short=AQTST -Asia/Aqtobe.generic.short=AQTT -Asia/Aqtobe.standard.short=AQTT -Asia/Ashgabat.daylight.short=TMST -Asia/Ashgabat.generic.short=TMT -Asia/Ashgabat.standard.short=TMT -Asia/Ashkhabad.daylight.short=TMST -Asia/Ashkhabad.generic.short=TMT -Asia/Ashkhabad.standard.short=TMT -Asia/Baghdad.daylight.short=ADT -Asia/Baghdad.generic.short=AT -Asia/Baghdad.standard.short=AST -Asia/Bahrain.daylight.short=ADT -Asia/Bahrain.generic.short=AT -Asia/Bahrain.standard.short=AST -Asia/Baku.daylight.short=AZST -Asia/Baku.generic.short=AZT -Asia/Baku.standard.short=AZT -Asia/Bangkok.daylight.short=ICST -Asia/Bangkok.generic.short=ICT -Asia/Bangkok.standard.short=ICT -Asia/Beirut.daylight.short=EEST -Asia/Beirut.generic.short=EET -Asia/Beirut.standard.short=EET -Asia/Bishkek.daylight.short=KGST -Asia/Bishkek.generic.short=KGT -Asia/Bishkek.standard.short=KGT -Asia/Brunei.daylight.short=BNST -Asia/Brunei.generic.short=BNT -Asia/Brunei.standard.short=BNT -Asia/Calcutta.daylight.short=IDT -Asia/Calcutta.generic.short=IT -Asia/Calcutta.standard.short=IST -Asia/Choibalsan.daylight.short=CHOST -Asia/Choibalsan.generic.short=CHOT -Asia/Choibalsan.standard.short=CHOT -Asia/Chongqing.daylight.short=CDT -Asia/Chongqing.generic.short=CT -Asia/Chongqing.standard.short=CST -Asia/Chungking.daylight.short=CDT -Asia/Chungking.generic.short=CT -Asia/Chungking.standard.short=CST -Asia/Colombo.daylight.short=IDT -Asia/Colombo.generic.short=IT -Asia/Colombo.standard.short=IST -Asia/Dacca.daylight.short=BDST -Asia/Dacca.generic.short=BDT -Asia/Dacca.standard.short=BDT -Asia/Damascus.daylight.short=EEST -Asia/Damascus.generic.short=EET -Asia/Damascus.standard.short=EET -Asia/Dhaka.daylight.short=BDST -Asia/Dhaka.generic.short=BDT -Asia/Dhaka.standard.short=BDT -Asia/Dili.daylight.short=TLST -Asia/Dili.generic.short=TLT -Asia/Dili.standard.short=TLT -Asia/Dubai.daylight.short=GDT -Asia/Dubai.generic.short=GT -Asia/Dubai.standard.short=GST -Asia/Dushanbe.daylight.short=TJST -Asia/Dushanbe.generic.short=TJT -Asia/Dushanbe.standard.short=TJT -Asia/Gaza.daylight.short=EEST -Asia/Gaza.generic.short=EET -Asia/Gaza.standard.short=EET -Asia/Harbin.daylight.short=CDT -Asia/Harbin.generic.short=CT -Asia/Harbin.standard.short=CST -Asia/Hebron.daylight.short=EEST -Asia/Hebron.generic.short=EET -Asia/Hebron.standard.short=EET -Asia/Ho_Chi_Minh.daylight.short=ICST -Asia/Ho_Chi_Minh.generic.short=ICT -Asia/Ho_Chi_Minh.standard.short=ICT -Asia/Hong_Kong.daylight.short=HKST -Asia/Hong_Kong.generic.short=HKT -Asia/Hong_Kong.standard.short=HKT -Asia/Hovd.daylight.short=HOVST -Asia/Hovd.generic.short=HOVT -Asia/Hovd.standard.short=HOVT -Asia/Irkutsk.daylight.short=IRKST -Asia/Irkutsk.generic.short=IRKT -Asia/Irkutsk.standard.short=IRKT -Asia/Istanbul.daylight.short=EEST -Asia/Istanbul.generic.short=EET -Asia/Istanbul.standard.short=EET -Asia/Jakarta.daylight.short=WIST -Asia/Jakarta.generic.short=WIB -Asia/Jakarta.standard.short=WIB -Asia/Jayapura.daylight.short=EIST -Asia/Jayapura.generic.short=WIT -Asia/Jayapura.standard.short=WIT -Asia/Jerusalem.daylight.short=IDT -Asia/Jerusalem.generic.short=IT -Asia/Jerusalem.standard.short=IST -Asia/Kabul.daylight.short=AFST -Asia/Kabul.generic.short=AFT -Asia/Kabul.standard.short=AFT -Asia/Kamchatka.daylight.short=PETST -Asia/Kamchatka.generic.short=PETT -Asia/Kamchatka.standard.short=PETT -Asia/Karachi.daylight.short=PKST -Asia/Karachi.generic.short=PKT -Asia/Karachi.standard.short=PKT -Asia/Kashgar.daylight.short=CDT -Asia/Kashgar.generic.short=CT -Asia/Kashgar.standard.short=CST -Asia/Kathmandu.daylight.short=NPST -Asia/Kathmandu.generic.short=NPT -Asia/Kathmandu.standard.short=NPT -Asia/Katmandu.daylight.short=NPST -Asia/Katmandu.generic.short=NPT -Asia/Katmandu.standard.short=NPT -Asia/Khandyga.daylight.short=YAKST -Asia/Khandyga.generic.short=YAKT -Asia/Khandyga.standard.short=YAKT -Asia/Kolkata.daylight.short=IDT -Asia/Kolkata.generic.short=IT -Asia/Kolkata.standard.short=IST -Asia/Krasnoyarsk.daylight.short=KRAST -Asia/Krasnoyarsk.generic.short=KRAT -Asia/Krasnoyarsk.standard.short=KRAT -Asia/Kuala_Lumpur.daylight.short=MYST -Asia/Kuala_Lumpur.generic.short=MYT -Asia/Kuala_Lumpur.standard.short=MYT -Asia/Kuching.daylight.short=MYST -Asia/Kuching.generic.short=MYT -Asia/Kuching.standard.short=MYT -Asia/Kuwait.daylight.short=ADT -Asia/Kuwait.generic.short=AT -Asia/Kuwait.standard.short=AST -Asia/Macao.daylight.short=CDT -Asia/Macao.generic.short=CT -Asia/Macao.standard.short=CST -Asia/Macau.daylight.short=CDT -Asia/Macau.generic.short=CT -Asia/Macau.standard.short=CST -Asia/Magadan.daylight.short=MAGST -Asia/Magadan.generic.short=MAGT -Asia/Magadan.standard.short=MAGT -Asia/Makassar.daylight.short=CIST -Asia/Makassar.generic.short=WITA -Asia/Makassar.standard.short=WITA -Asia/Manila.daylight.short=PHST -Asia/Manila.generic.short=PHT -Asia/Manila.standard.short=PHT -Asia/Muscat.daylight.short=GDT -Asia/Muscat.generic.short=GT -Asia/Muscat.standard.short=GST -Asia/Nicosia.daylight.short=EEST -Asia/Nicosia.generic.short=EET -Asia/Nicosia.standard.short=EET -Asia/Novokuznetsk.daylight.short=NOVST -Asia/Novokuznetsk.generic.short=NOVT -Asia/Novokuznetsk.standard.short=NOVT -Asia/Novosibirsk.daylight.short=NOVST -Asia/Novosibirsk.generic.short=NOVT -Asia/Novosibirsk.standard.short=NOVT -Asia/Omsk.daylight.short=OMSST -Asia/Omsk.generic.short=OMST -Asia/Omsk.standard.short=OMST -Asia/Oral.daylight.short=ORAST -Asia/Oral.generic.short=ORAT -Asia/Oral.standard.short=ORAT -Asia/Phnom_Penh.daylight.short=ICST -Asia/Phnom_Penh.generic.short=ICT -Asia/Phnom_Penh.standard.short=ICT -Asia/Pontianak.daylight.short=WIST -Asia/Pontianak.generic.short=WIB -Asia/Pontianak.standard.short=WIB -Asia/Pyongyang.daylight.short=KDT -Asia/Pyongyang.generic.short=KT -Asia/Pyongyang.standard.short=KST -Asia/Qatar.daylight.short=ADT -Asia/Qatar.generic.short=AT -Asia/Qatar.standard.short=AST -Asia/Qyzylorda.daylight.short=QYZST -Asia/Qyzylorda.generic.short=QYZT -Asia/Qyzylorda.standard.short=QYZT -Asia/Rangoon.daylight.short=MMST -Asia/Rangoon.generic.short=MMT -Asia/Rangoon.standard.short=MMT -Asia/Saigon.daylight.short=ICST -Asia/Saigon.generic.short=ICT -Asia/Saigon.standard.short=ICT -Asia/Sakhalin.daylight.short=SAKST -Asia/Sakhalin.generic.short=SAKT -Asia/Sakhalin.standard.short=SAKT -Asia/Samarkand.daylight.short=UZST -Asia/Samarkand.generic.short=UZT -Asia/Samarkand.standard.short=UZT -Asia/Seoul.daylight.short=KDT -Asia/Seoul.generic.short=KT -Asia/Seoul.standard.short=KST -Asia/Shanghai.daylight.short=CDT -Asia/Shanghai.generic.short=CT -Asia/Shanghai.standard.short=CST -Asia/Singapore.daylight.short=SGST -Asia/Singapore.generic.short=SGT -Asia/Singapore.standard.short=SGT -Asia/Taipei.daylight.short=CDT -Asia/Taipei.generic.short=CT -Asia/Taipei.standard.short=CST -Asia/Tashkent.daylight.short=UZST -Asia/Tashkent.generic.short=UZT -Asia/Tashkent.standard.short=UZT -Asia/Tbilisi.daylight.short=GEST -Asia/Tbilisi.generic.short=GET -Asia/Tbilisi.standard.short=GET -Asia/Tehran.daylight.short=IRDT -Asia/Tehran.generic.short=IRT -Asia/Tehran.standard.short=IRST -Asia/Tel_Aviv.daylight.short=IDT -Asia/Tel_Aviv.generic.short=IT -Asia/Tel_Aviv.standard.short=IST -Asia/Thimbu.daylight.short=BTST -Asia/Thimbu.generic.short=BTT -Asia/Thimbu.standard.short=BTT -Asia/Thimphu.daylight.short=BTST -Asia/Thimphu.generic.short=BTT -Asia/Thimphu.standard.short=BTT -Asia/Tokyo.daylight.short=JDT -Asia/Tokyo.generic.short=JT -Asia/Tokyo.standard.short=JST -Asia/Ujung_Pandang.daylight.short=CIST -Asia/Ujung_Pandang.generic.short=WITA -Asia/Ujung_Pandang.standard.short=WITA -Asia/Ulaanbaatar.daylight.short=ULAST -Asia/Ulaanbaatar.generic.short=ULAT -Asia/Ulaanbaatar.standard.short=ULAT -Asia/Ulan_Bator.daylight.short=ULAST -Asia/Ulan_Bator.generic.short=ULAT -Asia/Ulan_Bator.standard.short=ULAT -Asia/Urumqi.daylight.short=CDT -Asia/Urumqi.generic.short=CT -Asia/Urumqi.standard.short=CST -Asia/Ust-Nera.daylight.short=VLAST -Asia/Ust-Nera.generic.short=VLAT -Asia/Ust-Nera.standard.short=VLAT -Asia/Vientiane.daylight.short=ICST -Asia/Vientiane.generic.short=ICT -Asia/Vientiane.standard.short=ICT -Asia/Vladivostok.daylight.short=VLAST -Asia/Vladivostok.generic.short=VLAT -Asia/Vladivostok.standard.short=VLAT -Asia/Yakutsk.daylight.short=YAKST -Asia/Yakutsk.generic.short=YAKT -Asia/Yakutsk.standard.short=YAKT -Asia/Yekaterinburg.daylight.short=YEKST -Asia/Yekaterinburg.generic.short=YEKT -Asia/Yekaterinburg.standard.short=YEKT -Asia/Yerevan.daylight.short=AMST -Asia/Yerevan.generic.short=AMT -Asia/Yerevan.standard.short=AMT -AST.daylight.short=AKDT -AST.generic.short=AKT -AST.standard.short=AKST -Atlantic/Azores.daylight.short=AZOST -Atlantic/Azores.generic.short=AZOT -Atlantic/Azores.standard.short=AZOT -Atlantic/Bermuda.daylight.short=ADT -Atlantic/Bermuda.generic.short=AT -Atlantic/Bermuda.standard.short=AST -Atlantic/Canary.daylight.short=WEST -Atlantic/Canary.generic.short=WET -Atlantic/Canary.standard.short=WET -Atlantic/Cape_Verde.daylight.short=CVST -Atlantic/Cape_Verde.generic.short=CVT -Atlantic/Cape_Verde.standard.short=CVT -Atlantic/Faeroe.daylight.short=WEST -Atlantic/Faeroe.generic.short=WET -Atlantic/Faeroe.standard.short=WET -Atlantic/Faroe.daylight.short=WEST -Atlantic/Faroe.generic.short=WET -Atlantic/Faroe.standard.short=WET -Atlantic/Jan_Mayen.daylight.short=CEST -Atlantic/Jan_Mayen.generic.short=CET -Atlantic/Jan_Mayen.standard.short=CET -Atlantic/Madeira.daylight.short=WEST -Atlantic/Madeira.generic.short=WET -Atlantic/Madeira.standard.short=WET -Atlantic/Reykjavik.daylight.short=GMT -Atlantic/Reykjavik.generic.short=GMT -Atlantic/Reykjavik.standard.short=GMT -Atlantic/South_Georgia.daylight.short=GDT -Atlantic/South_Georgia.generic.short=GT -Atlantic/South_Georgia.standard.short=GST -Atlantic/Stanley.daylight.short=FKST -Atlantic/Stanley.generic.short=FKT -Atlantic/Stanley.standard.short=FKT -Atlantic/St_Helena.daylight.short=GMT -Atlantic/St_Helena.generic.short=GMT -Atlantic/St_Helena.standard.short=GMT -Australia/ACT.daylight.short=EST -Australia/ACT.generic.short=ET -Australia/ACT.standard.short=EST -Australia/Adelaide.daylight.short=CST -Australia/Adelaide.generic.short=CT -Australia/Adelaide.standard.short=CST -Australia/Brisbane.daylight.short=EST -Australia/Brisbane.generic.short=ET -Australia/Brisbane.standard.short=EST -Australia/Broken_Hill.daylight.short=CST -Australia/Broken_Hill.generic.short=CT -Australia/Broken_Hill.standard.short=CST -Australia/Canberra.daylight.short=EST -Australia/Canberra.generic.short=ET -Australia/Canberra.standard.short=EST -Australia/Currie.daylight.short=EST -Australia/Currie.generic.short=ET -Australia/Currie.standard.short=EST -Australia/Darwin.daylight.short=CST -Australia/Darwin.generic.short=CT -Australia/Darwin.standard.short=CST -Australia/Eucla.daylight.short=CWST -Australia/Eucla.generic.short=CWT -Australia/Eucla.standard.short=CWST -Australia/Hobart.daylight.short=EST -Australia/Hobart.generic.short=ET -Australia/Hobart.standard.short=EST -Australia/LHI.daylight.short=LHST -Australia/LHI.generic.short=LHT -Australia/LHI.standard.short=LHST -Australia/Lindeman.daylight.short=EST -Australia/Lindeman.generic.short=ET -Australia/Lindeman.standard.short=EST -Australia/Lord_Howe.daylight.short=LHST -Australia/Lord_Howe.generic.short=LHT -Australia/Lord_Howe.standard.short=LHST -Australia/Melbourne.daylight.short=EST -Australia/Melbourne.generic.short=ET -Australia/Melbourne.standard.short=EST -Australia/North.daylight.short=CST -Australia/North.generic.short=CT -Australia/North.standard.short=CST -Australia/NSW.daylight.short=EST -Australia/NSW.generic.short=ET -Australia/NSW.standard.short=EST -Australia/Perth.daylight.short=WST -Australia/Perth.generic.short=WT -Australia/Perth.standard.short=WST -Australia/Queensland.daylight.short=EST -Australia/Queensland.generic.short=ET -Australia/Queensland.standard.short=EST -Australia/South.daylight.short=CST -Australia/South.generic.short=CT -Australia/South.standard.short=CST -Australia/Sydney.daylight.short=EST -Australia/Sydney.generic.short=ET -Australia/Sydney.standard.short=EST -Australia/Tasmania.daylight.short=EST -Australia/Tasmania.generic.short=ET -Australia/Tasmania.standard.short=EST -Australia/Victoria.daylight.short=EST -Australia/Victoria.generic.short=ET -Australia/Victoria.standard.short=EST -Australia/West.daylight.short=WST -Australia/West.generic.short=WT -Australia/West.standard.short=WST -Australia/Yancowinna.daylight.short=CST -Australia/Yancowinna.generic.short=CT -Australia/Yancowinna.standard.short=CST -BET.daylight.short=BRST -BET.generic.short=BRT -BET.standard.short=BRT -Brazil/Acre.daylight.short=ACST -Brazil/Acre.generic.short=ACT -Brazil/Acre.standard.short=ACT -Brazil/DeNoronha.daylight.short=FNST -Brazil/DeNoronha.generic.short=FNT -Brazil/DeNoronha.standard.short=FNT -Brazil/East.daylight.short=BRST -Brazil/East.generic.short=BRT -Brazil/East.standard.short=BRT -Brazil/West.daylight.short=AMST -Brazil/West.generic.short=AMT -Brazil/West.standard.short=AMT -BST.daylight.short=BDST -BST.generic.short=BDT -BST.standard.short=BDT -Canada/Atlantic.daylight.short=ADT -Canada/Atlantic.generic.short=AT -Canada/Atlantic.standard.short=AST -Canada/Central.daylight.short=CDT -Canada/Central.generic.short=CT -Canada/Central.standard.short=CST -Canada/Eastern.daylight.short=EDT -Canada/Eastern.generic.short=ET -Canada/Eastern.standard.short=EST -Canada/East-Saskatchewan.daylight.short=CDT -Canada/East-Saskatchewan.generic.short=CT -Canada/East-Saskatchewan.standard.short=CST -Canada/Mountain.daylight.short=MDT -Canada/Mountain.generic.short=MT -Canada/Mountain.standard.short=MST -Canada/Newfoundland.daylight.short=NDT -Canada/Newfoundland.generic.short=NT -Canada/Newfoundland.standard.short=NST -Canada/Pacific.daylight.short=PDT -Canada/Pacific.generic.short=PT -Canada/Pacific.standard.short=PST -Canada/Saskatchewan.daylight.short=CDT -Canada/Saskatchewan.generic.short=CT -Canada/Saskatchewan.standard.short=CST -Canada/Yukon.daylight.short=PDT -Canada/Yukon.generic.short=PT -Canada/Yukon.standard.short=PST -CAT.daylight.short=CAST -CAT.generic.short=CAT -CAT.standard.short=CAT -CET.daylight.short=CEST -CET.generic.short=CET -CET.standard.short=CET -Chile/Continental.daylight.short=CLST -Chile/Continental.generic.short=CLT -Chile/Continental.standard.short=CLT -Chile/EasterIsland.daylight.short=EASST -Chile/EasterIsland.generic.short=EAST -Chile/EasterIsland.standard.short=EAST -CNT.daylight.short=NDT -CNT.generic.short=NT -CNT.standard.short=NST -CST6CDT.daylight.short=CDT -CST6CDT.generic.short=CT -CST6CDT.standard.short=CST -CST.daylight.short=CDT -CST.generic.short=CT -CST.standard.short=CST -CTT.daylight.short=CDT -CTT.generic.short=CT -CTT.standard.short=CST -Cuba.daylight.short=CDT -Cuba.generic.short=CT -Cuba.standard.short=CST -EAT.daylight.short=EAST -EAT.generic.short=EAT -EAT.standard.short=EAT -ECT.daylight.short=CEST -ECT.generic.short=CET -ECT.standard.short=CET -EET.daylight.short=EEST -EET.generic.short=EET -EET.standard.short=EET -Egypt.daylight.short=EEST -Egypt.generic.short=EET -Egypt.standard.short=EET -Eire.daylight.short=IST -Eire.generic.short=IT -Eire.standard.short=GMT -EST5EDT.daylight.short=EDT -EST5EDT.generic.short=ET -EST5EDT.standard.short=EST -EST.daylight.short=EDT -EST.generic.short=ET -EST.standard.short=EST -Etc/Greenwich.daylight.short=GMT -Etc/Greenwich.generic.short=GMT -Etc/Greenwich.standard.short=GMT -Etc/UCT.daylight.short=UTC -Etc/UCT.generic.short=UTC -Etc/UCT.standard.short=UTC -Etc/Universal.daylight.short=UTC -Etc/Universal.generic.short=UTC -Etc/Universal.standard.short=UTC -Etc/UTC.daylight.short=UTC -Etc/UTC.generic.short=UTC -Etc/UTC.standard.short=UTC -Etc/Zulu.daylight.short=UTC -Etc/Zulu.generic.short=UTC -Etc/Zulu.standard.short=UTC -Europe/Amsterdam.daylight.short=CEST -Europe/Amsterdam.generic.short=CET -Europe/Amsterdam.standard.short=CET -Europe/Andorra.daylight.short=CEST -Europe/Andorra.generic.short=CET -Europe/Andorra.standard.short=CET -Europe/Athens.daylight.short=EEST -Europe/Athens.generic.short=EET -Europe/Athens.standard.short=EET -Europe/Belfast.daylight.short=BST -Europe/Belfast.generic.short=BT -Europe/Belfast.standard.short=GMT -Europe/Belgrade.daylight.short=CEST -Europe/Belgrade.generic.short=CET -Europe/Belgrade.standard.short=CET -Europe/Berlin.daylight.short=CEST -Europe/Berlin.generic.short=CET -Europe/Berlin.standard.short=CET -Europe/Bratislava.daylight.short=CEST -Europe/Bratislava.generic.short=CET -Europe/Bratislava.standard.short=CET -Europe/Brussels.daylight.short=CEST -Europe/Brussels.generic.short=CET -Europe/Brussels.standard.short=CET -Europe/Bucharest.daylight.short=EEST -Europe/Bucharest.generic.short=EET -Europe/Bucharest.standard.short=EET -Europe/Budapest.daylight.short=CEST -Europe/Budapest.generic.short=CET -Europe/Budapest.standard.short=CET -Europe/Busingen.daylight.short=CEST -Europe/Busingen.generic.short=CET -Europe/Busingen.standard.short=CET -Europe/Chisinau.daylight.short=EEST -Europe/Chisinau.generic.short=EET -Europe/Chisinau.standard.short=EET -Europe/Copenhagen.daylight.short=CEST -Europe/Copenhagen.generic.short=CET -Europe/Copenhagen.standard.short=CET -Europe/Dublin.daylight.short=IST -Europe/Dublin.generic.short=IT -Europe/Dublin.standard.short=GMT -Europe/Gibraltar.daylight.short=CEST -Europe/Gibraltar.generic.short=CET -Europe/Gibraltar.standard.short=CET -Europe/Guernsey.daylight.short=BST -Europe/Guernsey.generic.short=BT -Europe/Guernsey.standard.short=GMT -Europe/Helsinki.daylight.short=EEST -Europe/Helsinki.generic.short=EET -Europe/Helsinki.standard.short=EET -Europe/Isle_of_Man.daylight.short=BST -Europe/Isle_of_Man.generic.short=BT -Europe/Isle_of_Man.standard.short=GMT -Europe/Istanbul.daylight.short=EEST -Europe/Istanbul.generic.short=EET -Europe/Istanbul.standard.short=EET -Europe/Jersey.daylight.short=BST -Europe/Jersey.generic.short=BT -Europe/Jersey.standard.short=GMT -Europe/Kaliningrad.daylight.short=FEST -Europe/Kaliningrad.generic.short=FET -Europe/Kaliningrad.standard.short=FET -Europe/Kiev.daylight.short=EEST -Europe/Kiev.generic.short=EET -Europe/Kiev.standard.short=EET -Europe/Lisbon.daylight.short=WEST -Europe/Lisbon.generic.short=WET -Europe/Lisbon.standard.short=WET -Europe/Ljubljana.daylight.short=CEST -Europe/Ljubljana.generic.short=CET -Europe/Ljubljana.standard.short=CET -Europe/London.daylight.short=BST -Europe/London.generic.short=BT -Europe/London.standard.short=GMT -Europe/Luxembourg.daylight.short=CEST -Europe/Luxembourg.generic.short=CET -Europe/Luxembourg.standard.short=CET -Europe/Madrid.daylight.short=CEST -Europe/Madrid.generic.short=CET -Europe/Madrid.standard.short=CET -Europe/Malta.daylight.short=CEST -Europe/Malta.generic.short=CET -Europe/Malta.standard.short=CET -Europe/Mariehamn.daylight.short=EEST -Europe/Mariehamn.generic.short=EET -Europe/Mariehamn.standard.short=EET -Europe/Minsk.daylight.short=FEST -Europe/Minsk.generic.short=FET -Europe/Minsk.standard.short=FET -Europe/Monaco.daylight.short=CEST -Europe/Monaco.generic.short=CET -Europe/Monaco.standard.short=CET -Europe/Moscow.daylight.short=MSD -Europe/Moscow.generic.short=MT -Europe/Moscow.standard.short=MSK -Europe/Nicosia.daylight.short=EEST -Europe/Nicosia.generic.short=EET -Europe/Nicosia.standard.short=EET -Europe/Oslo.daylight.short=CEST -Europe/Oslo.generic.short=CET -Europe/Oslo.standard.short=CET -Europe/Paris.daylight.short=CEST -Europe/Paris.generic.short=CET -Europe/Paris.standard.short=CET -Europe/Podgorica.daylight.short=CEST -Europe/Podgorica.generic.short=CET -Europe/Podgorica.standard.short=CET -Europe/Prague.daylight.short=CEST -Europe/Prague.generic.short=CET -Europe/Prague.standard.short=CET -Europe/Riga.daylight.short=EEST -Europe/Riga.generic.short=EET -Europe/Riga.standard.short=EET -Europe/Rome.daylight.short=CEST -Europe/Rome.generic.short=CET -Europe/Rome.standard.short=CET -Europe/Samara.daylight.short=SAMST -Europe/Samara.generic.short=SAMT -Europe/Samara.standard.short=SAMT -Europe/San_Marino.daylight.short=CEST -Europe/San_Marino.generic.short=CET -Europe/San_Marino.standard.short=CET -Europe/Sarajevo.daylight.short=CEST -Europe/Sarajevo.generic.short=CET -Europe/Sarajevo.standard.short=CET -Europe/Simferopol.daylight.short=EEST -Europe/Simferopol.generic.short=EET -Europe/Simferopol.standard.short=EET -Europe/Skopje.daylight.short=CEST -Europe/Skopje.generic.short=CET -Europe/Skopje.standard.short=CET -Europe/Sofia.daylight.short=EEST -Europe/Sofia.generic.short=EET -Europe/Sofia.standard.short=EET -Europe/Stockholm.daylight.short=CEST -Europe/Stockholm.generic.short=CET -Europe/Stockholm.standard.short=CET -Europe/Tallinn.daylight.short=EEST -Europe/Tallinn.generic.short=EET -Europe/Tallinn.standard.short=EET -Europe/Tirane.daylight.short=CEST -Europe/Tirane.generic.short=CET -Europe/Tirane.standard.short=CET -Europe/Tiraspol.daylight.short=EEST -Europe/Tiraspol.generic.short=EET -Europe/Tiraspol.standard.short=EET -Europe/Uzhgorod.daylight.short=EEST -Europe/Uzhgorod.generic.short=EET -Europe/Uzhgorod.standard.short=EET -Europe/Vaduz.daylight.short=CEST -Europe/Vaduz.generic.short=CET -Europe/Vaduz.standard.short=CET -Europe/Vatican.daylight.short=CEST -Europe/Vatican.generic.short=CET -Europe/Vatican.standard.short=CET -Europe/Vienna.daylight.short=CEST -Europe/Vienna.generic.short=CET -Europe/Vienna.standard.short=CET -Europe/Vilnius.daylight.short=EEST -Europe/Vilnius.generic.short=EET -Europe/Vilnius.standard.short=EET -Europe/Volgograd.daylight.short=VOLST -Europe/Volgograd.generic.short=VOLT -Europe/Volgograd.standard.short=VOLT -Europe/Warsaw.daylight.short=CEST -Europe/Warsaw.generic.short=CET -Europe/Warsaw.standard.short=CET -Europe/Zagreb.daylight.short=CEST -Europe/Zagreb.generic.short=CET -Europe/Zagreb.standard.short=CET -Europe/Zaporozhye.daylight.short=EEST -Europe/Zaporozhye.generic.short=EET -Europe/Zaporozhye.standard.short=EET -Europe/Zurich.daylight.short=CEST -Europe/Zurich.generic.short=CET -Europe/Zurich.standard.short=CET -GB.daylight.short=BST -GB-Eire.daylight.short=BST -GB-Eire.generic.short=BT -GB-Eire.standard.short=GMT -GB.generic.short=BT -GB.standard.short=GMT -GMT.daylight.short=GMT -GMT.generic.short=GMT -GMT.standard.short=GMT -Greenwich.daylight.short=GMT -Greenwich.generic.short=GMT -Greenwich.standard.short=GMT -Hongkong.daylight.short=HKST -Hongkong.generic.short=HKT -Hongkong.standard.short=HKT -HST.daylight.short=HDT -HST.generic.short=HT -HST.standard.short=HST -Iceland.daylight.short=GMT -Iceland.generic.short=GMT -Iceland.standard.short=GMT -IET.daylight.short=EDT -IET.generic.short=ET -IET.standard.short=EST -Indian/Antananarivo.daylight.short=EAST -Indian/Antananarivo.generic.short=EAT -Indian/Antananarivo.standard.short=EAT -Indian/Chagos.daylight.short=IOST -Indian/Chagos.generic.short=IOT -Indian/Chagos.standard.short=IOT -Indian/Christmas.daylight.short=CXST -Indian/Christmas.generic.short=CIT -Indian/Christmas.standard.short=CXT -Indian/Cocos.daylight.short=CCST -Indian/Cocos.generic.short=CCT -Indian/Cocos.standard.short=CCT -Indian/Comoro.daylight.short=EAST -Indian/Comoro.generic.short=EAT -Indian/Comoro.standard.short=EAT -Indian/Kerguelen.daylight.short=TFST -Indian/Kerguelen.generic.short=TFT -Indian/Kerguelen.standard.short=TFT -Indian/Mahe.daylight.short=SCST -Indian/Mahe.generic.short=SCT -Indian/Mahe.standard.short=SCT -Indian/Maldives.daylight.short=MVST -Indian/Maldives.generic.short=MVT -Indian/Maldives.standard.short=MVT -Indian/Mauritius.daylight.short=MUST -Indian/Mauritius.generic.short=MUT -Indian/Mauritius.standard.short=MUT -Indian/Mayotte.daylight.short=EAST -Indian/Mayotte.generic.short=EAT -Indian/Mayotte.standard.short=EAT -Indian/Reunion.daylight.short=REST -Indian/Reunion.generic.short=RET -Indian/Reunion.standard.short=RET -Iran.daylight.short=IRDT -Iran.generic.short=IRT -Iran.standard.short=IRST -Israel.daylight.short=IDT -Israel.generic.short=IT -Israel.standard.short=IST -IST.daylight.short=IDT -IST.generic.short=IT -IST.standard.short=IST -Jamaica.daylight.short=EDT -Jamaica.generic.short=ET -Jamaica.standard.short=EST -Japan.daylight.short=JDT -Japan.generic.short=JT -Japan.standard.short=JST -JST.daylight.short=JDT -JST.generic.short=JT -JST.standard.short=JST -Kwajalein.daylight.short=MHST -Kwajalein.generic.short=MHT -Kwajalein.standard.short=MHT -Libya.daylight.short=EEST -Libya.generic.short=EET -Libya.standard.short=EET -MET.daylight.short=MEST -MET.generic.short=MET -MET.standard.short=MET -Mexico/BajaNorte.daylight.short=PDT -Mexico/BajaNorte.generic.short=PT -Mexico/BajaNorte.standard.short=PST -Mexico/BajaSur.daylight.short=MDT -Mexico/BajaSur.generic.short=MT -Mexico/BajaSur.standard.short=MST -Mexico/General.daylight.short=CDT -Mexico/General.generic.short=CT -Mexico/General.standard.short=CST -MIT.daylight.short=WSDT -MIT.generic.short=WST -MIT.standard.short=WST -MST7MDT.daylight.short=MDT -MST7MDT.generic.short=MT -MST7MDT.standard.short=MST -MST.daylight.short=MDT -MST.generic.short=MT -MST.standard.short=MST -Navajo.daylight.short=MDT -Navajo.generic.short=MT -Navajo.standard.short=MST -NET.daylight.short=AMST -NET.generic.short=AMT -NET.standard.short=AMT -NST.daylight.short=NZDT -NST.generic.short=NZT -NST.standard.short=NZST -NZ-CHAT.daylight.short=CHADT -NZ-CHAT.generic.short=CHAT -NZ-CHAT.standard.short=CHAST -NZ.daylight.short=NZDT -NZ.generic.short=NZT -NZ.standard.short=NZST -Pacific/Apia.daylight.short=WSDT -Pacific/Apia.generic.short=WST -Pacific/Apia.standard.short=WST -Pacific/Auckland.daylight.short=NZDT -Pacific/Auckland.generic.short=NZT -Pacific/Auckland.standard.short=NZST -Pacific/Chatham.daylight.short=CHADT -Pacific/Chatham.generic.short=CHAT -Pacific/Chatham.standard.short=CHAST -Pacific/Chuuk.daylight.short=CHUST -Pacific/Chuuk.generic.short=CHUT -Pacific/Chuuk.standard.short=CHUT -Pacific/Easter.daylight.short=EASST -Pacific/Easter.generic.short=EAST -Pacific/Easter.standard.short=EAST -Pacific/Efate.daylight.short=VUST -Pacific/Efate.generic.short=VUT -Pacific/Efate.standard.short=VUT -Pacific/Enderbury.daylight.short=PHOST -Pacific/Enderbury.generic.short=PHOT -Pacific/Enderbury.standard.short=PHOT -Pacific/Fakaofo.daylight.short=TKST -Pacific/Fakaofo.generic.short=TKT -Pacific/Fakaofo.standard.short=TKT -Pacific/Fiji.daylight.short=FJST -Pacific/Fiji.generic.short=FJT -Pacific/Fiji.standard.short=FJT -Pacific/Funafuti.daylight.short=TVST -Pacific/Funafuti.generic.short=TVT -Pacific/Funafuti.standard.short=TVT -Pacific/Galapagos.daylight.short=GALST -Pacific/Galapagos.generic.short=GALT -Pacific/Galapagos.standard.short=GALT -Pacific/Gambier.daylight.short=GAMST -Pacific/Gambier.generic.short=GAMT -Pacific/Gambier.standard.short=GAMT -Pacific/Guadalcanal.daylight.short=SBST -Pacific/Guadalcanal.generic.short=SBT -Pacific/Guadalcanal.standard.short=SBT -Pacific/Guam.daylight.short=ChDT -Pacific/Guam.generic.short=ChT -Pacific/Guam.standard.short=ChST -Pacific/Honolulu.daylight.short=HDT -Pacific/Honolulu.generic.short=HT -Pacific/Honolulu.standard.short=HST -Pacific/Johnston.daylight.short=HDT -Pacific/Johnston.generic.short=HT -Pacific/Johnston.standard.short=HST -Pacific/Kiritimati.daylight.short=LINST -Pacific/Kiritimati.generic.short=LINT -Pacific/Kiritimati.standard.short=LINT -Pacific/Kosrae.daylight.short=KOSST -Pacific/Kosrae.generic.short=KOST -Pacific/Kosrae.standard.short=KOST -Pacific/Kwajalein.daylight.short=MHST -Pacific/Kwajalein.generic.short=MHT -Pacific/Kwajalein.standard.short=MHT -Pacific/Majuro.daylight.short=MHST -Pacific/Majuro.generic.short=MHT -Pacific/Majuro.standard.short=MHT -Pacific/Marquesas.daylight.short=MARST -Pacific/Marquesas.generic.short=MART -Pacific/Marquesas.standard.short=MART -Pacific/Midway.daylight.short=SDT -Pacific/Midway.generic.short=ST -Pacific/Midway.standard.short=SST -Pacific/Nauru.daylight.short=NRST -Pacific/Nauru.generic.short=NRT -Pacific/Nauru.standard.short=NRT -Pacific/Niue.daylight.short=NUST -Pacific/Niue.generic.short=NUT -Pacific/Niue.standard.short=NUT -Pacific/Norfolk.daylight.short=NFST -Pacific/Norfolk.generic.short=NFT -Pacific/Norfolk.standard.short=NFT -Pacific/Noumea.daylight.short=NCST -Pacific/Noumea.generic.short=NCT -Pacific/Noumea.standard.short=NCT -Pacific/Pago_Pago.daylight.short=SDT -Pacific/Pago_Pago.generic.short=ST -Pacific/Pago_Pago.standard.short=SST -Pacific/Palau.daylight.short=PWST -Pacific/Palau.generic.short=PWT -Pacific/Palau.standard.short=PWT -Pacific/Pitcairn.daylight.short=PDT -Pacific/Pitcairn.generic.short=PT -Pacific/Pitcairn.standard.short=PST -Pacific/Pohnpei.daylight.short=PONST -Pacific/Pohnpei.generic.short=PONT -Pacific/Pohnpei.standard.short=PONT -Pacific/Ponape.daylight.short=PONST -Pacific/Ponape.generic.short=PONT -Pacific/Ponape.standard.short=PONT -Pacific/Port_Moresby.daylight.short=PGST -Pacific/Port_Moresby.generic.short=PGT -Pacific/Port_Moresby.standard.short=PGT -Pacific/Rarotonga.daylight.short=CKHST -Pacific/Rarotonga.generic.short=CKT -Pacific/Rarotonga.standard.short=CKT -Pacific/Saipan.daylight.short=ChDT -Pacific/Saipan.generic.short=ChT -Pacific/Saipan.standard.short=ChST -Pacific/Samoa.daylight.short=SDT -Pacific/Samoa.generic.short=ST -Pacific/Samoa.standard.short=SST -Pacific/Tahiti.daylight.short=TAHST -Pacific/Tahiti.generic.short=TAHT -Pacific/Tahiti.standard.short=TAHT -Pacific/Tarawa.daylight.short=GILST -Pacific/Tarawa.generic.short=GILT -Pacific/Tarawa.standard.short=GILT -Pacific/Tongatapu.daylight.short=TOST -Pacific/Tongatapu.generic.short=TOT -Pacific/Tongatapu.standard.short=TOT -Pacific/Truk.daylight.short=CHUST -Pacific/Truk.generic.short=CHUT -Pacific/Truk.standard.short=CHUT -Pacific/Wake.daylight.short=WAKST -Pacific/Wake.generic.short=WAKT -Pacific/Wake.standard.short=WAKT -Pacific/Wallis.daylight.short=WFST -Pacific/Wallis.generic.short=WFT -Pacific/Wallis.standard.short=WFT -Pacific/Yap.daylight.short=CHUST -Pacific/Yap.generic.short=CHUT -Pacific/Yap.standard.short=CHUT -PLT.daylight.short=PKST -PLT.generic.short=PKT -PLT.standard.short=PKT -PNT.daylight.short=MDT -PNT.generic.short=MT -PNT.standard.short=MST -Poland.daylight.short=CEST -Poland.generic.short=CET -Poland.standard.short=CET -Portugal.daylight.short=WEST -Portugal.generic.short=WET -Portugal.standard.short=WET -PRC.daylight.short=CDT -PRC.generic.short=CT -PRC.standard.short=CST -PRT.daylight.short=ADT -PRT.generic.short=AT -PRT.standard.short=AST -PST8PDT.daylight.short=PDT -PST8PDT.generic.short=PT -PST8PDT.standard.short=PST -PST.daylight.short=PDT -PST.generic.short=PT -PST.standard.short=PST -ROK.daylight.short=KDT -ROK.generic.short=KT -ROK.standard.short=KST -Singapore.daylight.short=SGST -Singapore.generic.short=SGT -Singapore.standard.short=SGT -SST.daylight.short=SBST -SST.generic.short=SBT -SST.standard.short=SBT -SystemV/AST4ADT.daylight.short=ADT -SystemV/AST4ADT.generic.short=AT -SystemV/AST4ADT.standard.short=AST -SystemV/AST4.daylight.short=ADT -SystemV/AST4.generic.short=AT -SystemV/AST4.standard.short=AST -SystemV/CST6CDT.daylight.short=CDT -SystemV/CST6CDT.generic.short=CT -SystemV/CST6CDT.standard.short=CST -SystemV/CST6.daylight.short=CDT -SystemV/CST6.generic.short=CT -SystemV/CST6.standard.short=CST -SystemV/EST5.daylight.short=EDT -SystemV/EST5EDT.daylight.short=EDT -SystemV/EST5EDT.generic.short=ET -SystemV/EST5EDT.standard.short=EST -SystemV/EST5.generic.short=ET -SystemV/EST5.standard.short=EST -SystemV/HST10.daylight.short=HDT -SystemV/HST10.generic.short=HT -SystemV/HST10.standard.short=HST -SystemV/MST7.daylight.short=MDT -SystemV/MST7.generic.short=MT -SystemV/MST7MDT.daylight.short=MDT -SystemV/MST7MDT.generic.short=MT -SystemV/MST7MDT.standard.short=MST -SystemV/MST7.standard.short=MST -SystemV/PST8.daylight.short=PDT -SystemV/PST8.generic.short=PT -SystemV/PST8PDT.daylight.short=PDT -SystemV/PST8PDT.generic.short=PT -SystemV/PST8PDT.standard.short=PST -SystemV/PST8.standard.short=PST -SystemV/YST9.daylight.short=AKDT -SystemV/YST9.generic.short=AKT -SystemV/YST9.standard.short=AKST -SystemV/YST9YDT.daylight.short=AKDT -SystemV/YST9YDT.generic.short=AKT -SystemV/YST9YDT.standard.short=AKST -Turkey.daylight.short=EEST -Turkey.generic.short=EET -Turkey.standard.short=EET -UCT.daylight.short=UTC -UCT.generic.short=UTC -UCT.standard.short=UTC -Universal.daylight.short=UTC -Universal.generic.short=UTC -Universal.standard.short=UTC -US/Alaska.daylight.short=AKDT -US/Alaska.generic.short=AKT -US/Alaska.standard.short=AKST -US/Aleutian.daylight.short=HADT -US/Aleutian.generic.short=HAT -US/Aleutian.standard.short=HAST -US/Arizona.daylight.short=MDT -US/Arizona.generic.short=MT -US/Arizona.standard.short=MST -US/Central.daylight.short=CDT -US/Central.generic.short=CT -US/Central.standard.short=CST -US/Eastern.daylight.short=EDT -US/Eastern.generic.short=ET -US/Eastern.standard.short=EST -US/East-Indiana.daylight.short=EDT -US/East-Indiana.generic.short=ET -US/East-Indiana.standard.short=EST -US/Hawaii.daylight.short=HDT -US/Hawaii.generic.short=HT -US/Hawaii.standard.short=HST -US/Indiana-Starke.daylight.short=CDT -US/Indiana-Starke.generic.short=CT -US/Indiana-Starke.standard.short=CST -US/Michigan.daylight.short=EDT -US/Michigan.generic.short=ET -US/Michigan.standard.short=EST -US/Mountain.daylight.short=MDT -US/Mountain.generic.short=MT -US/Mountain.standard.short=MST -US/Pacific.daylight.short=PDT -US/Pacific.generic.short=PT -US/Pacific-New.daylight.short=PDT -US/Pacific-New.generic.short=PT -US/Pacific-New.standard.short=PST -US/Pacific.standard.short=PST -US/Samoa.daylight.short=SDT -US/Samoa.generic.short=ST -US/Samoa.standard.short=SST -UTC.daylight.short=UTC -UTC.generic.short=UTC -UTC.standard.short=UTC -VST.daylight.short=ICST -VST.generic.short=ICT -VST.standard.short=ICT -WET.daylight.short=WEST -WET.generic.short=WET -WET.standard.short=WET -W-SU.daylight.short=MSD -W-SU.generic.short=MT -W-SU.standard.short=MSK -Zulu.daylight.short=UTC -Zulu.generic.short=UTC -Zulu.standard.short=UTC diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_short.properties deleted file mode 100644 index 095522a68d1..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_short.properties +++ /dev/null @@ -1,1743 +0,0 @@ -ACT.daylight.short=CST -ACT.generic.short=CT -ACT.standard.short=CST -AET.daylight.short=EST -AET.generic.short=ET -AET.standard.short=EST -Africa/Abidjan.daylight.short=GMT -Africa/Abidjan.generic.short=GMT -Africa/Abidjan.standard.short=GMT -Africa/Accra.daylight.short=GHST -Africa/Accra.generic.short=GMT -Africa/Accra.standard.short=GMT -Africa/Addis_Ababa.daylight.short=EAST -Africa/Addis_Ababa.generic.short=EAT -Africa/Addis_Ababa.standard.short=EAT -Africa/Algiers.daylight.short=CEST -Africa/Algiers.generic.short=CET -Africa/Algiers.standard.short=CET -Africa/Asmara.daylight.short=EAST -Africa/Asmara.generic.short=EAT -Africa/Asmara.standard.short=EAT -Africa/Asmera.daylight.short=EAST -Africa/Asmera.generic.short=EAT -Africa/Asmera.standard.short=EAT -Africa/Bamako.daylight.short=GMT -Africa/Bamako.generic.short=GMT -Africa/Bamako.standard.short=GMT -Africa/Bangui.daylight.short=WAST -Africa/Bangui.generic.short=WAT -Africa/Bangui.standard.short=WAT -Africa/Banjul.daylight.short=GMT -Africa/Banjul.generic.short=GMT -Africa/Banjul.standard.short=GMT -Africa/Bissau.daylight.short=GMT -Africa/Bissau.generic.short=GMT -Africa/Bissau.standard.short=GMT -Africa/Blantyre.daylight.short=CAST -Africa/Blantyre.generic.short=CAT -Africa/Blantyre.standard.short=CAT -Africa/Brazzaville.daylight.short=WAST -Africa/Brazzaville.generic.short=WAT -Africa/Brazzaville.standard.short=WAT -Africa/Bujumbura.daylight.short=CAST -Africa/Bujumbura.generic.short=CAT -Africa/Bujumbura.standard.short=CAT -Africa/Cairo.daylight.short=EEST -Africa/Cairo.generic.short=EET -Africa/Cairo.standard.short=EET -Africa/Casablanca.daylight.short=WEST -Africa/Casablanca.generic.short=WET -Africa/Casablanca.standard.short=WET -Africa/Ceuta.daylight.short=CEST -Africa/Ceuta.generic.short=CET -Africa/Ceuta.standard.short=CET -Africa/Conakry.daylight.short=GMT -Africa/Conakry.generic.short=GMT -Africa/Conakry.standard.short=GMT -Africa/Dakar.daylight.short=GMT -Africa/Dakar.generic.short=GMT -Africa/Dakar.standard.short=GMT -Africa/Dar_es_Salaam.daylight.short=EAST -Africa/Dar_es_Salaam.generic.short=EAT -Africa/Dar_es_Salaam.standard.short=EAT -Africa/Djibouti.daylight.short=EAST -Africa/Djibouti.generic.short=EAT -Africa/Djibouti.standard.short=EAT -Africa/Douala.daylight.short=WAST -Africa/Douala.generic.short=WAT -Africa/Douala.standard.short=WAT -Africa/El_Aaiun.daylight.short=WEST -Africa/El_Aaiun.generic.short=WET -Africa/El_Aaiun.standard.short=WET -Africa/Freetown.daylight.short=SLST -Africa/Freetown.generic.short=SLT -Africa/Freetown.standard.short=GMT -Africa/Gaborone.daylight.short=CAST -Africa/Gaborone.generic.short=CAT -Africa/Gaborone.standard.short=CAT -Africa/Harare.daylight.short=CAST -Africa/Harare.generic.short=CAT -Africa/Harare.standard.short=CAT -Africa/Johannesburg.daylight.short=SAST -Africa/Johannesburg.generic.short=SAT -Africa/Johannesburg.standard.short=SAST -Africa/Juba.daylight.short=EAST -Africa/Juba.generic.short=EAT -Africa/Juba.standard.short=EAT -Africa/Kampala.daylight.short=EAST -Africa/Kampala.generic.short=EAT -Africa/Kampala.standard.short=EAT -Africa/Khartoum.daylight.short=EAST -Africa/Khartoum.generic.short=EAT -Africa/Khartoum.standard.short=EAT -Africa/Kigali.daylight.short=CAST -Africa/Kigali.generic.short=CAT -Africa/Kigali.standard.short=CAT -Africa/Kinshasa.daylight.short=WAST -Africa/Kinshasa.generic.short=WAT -Africa/Kinshasa.standard.short=WAT -Africa/Lagos.daylight.short=WAST -Africa/Lagos.generic.short=WAT -Africa/Lagos.standard.short=WAT -Africa/Libreville.daylight.short=WAST -Africa/Libreville.generic.short=WAT -Africa/Libreville.standard.short=WAT -Africa/Lome.daylight.short=GMT -Africa/Lome.generic.short=GMT -Africa/Lome.standard.short=GMT -Africa/Luanda.daylight.short=WAST -Africa/Luanda.generic.short=WAT -Africa/Luanda.standard.short=WAT -Africa/Lubumbashi.daylight.short=CAST -Africa/Lubumbashi.generic.short=CAT -Africa/Lubumbashi.standard.short=CAT -Africa/Lusaka.daylight.short=CAST -Africa/Lusaka.generic.short=CAT -Africa/Lusaka.standard.short=CAT -Africa/Malabo.daylight.short=WAST -Africa/Malabo.generic.short=WAT -Africa/Malabo.standard.short=WAT -Africa/Maputo.daylight.short=CAST -Africa/Maputo.generic.short=CAT -Africa/Maputo.standard.short=CAT -Africa/Maseru.daylight.short=SAST -Africa/Maseru.generic.short=SAT -Africa/Maseru.standard.short=SAST -Africa/Mbabane.daylight.short=SAST -Africa/Mbabane.generic.short=SAT -Africa/Mbabane.standard.short=SAST -Africa/Mogadishu.daylight.short=EAST -Africa/Mogadishu.generic.short=EAT -Africa/Mogadishu.standard.short=EAT -Africa/Monrovia.daylight.short=GMT -Africa/Monrovia.generic.short=GMT -Africa/Monrovia.standard.short=GMT -Africa/Nairobi.daylight.short=EAST -Africa/Nairobi.generic.short=EAT -Africa/Nairobi.standard.short=EAT -Africa/Ndjamena.daylight.short=WAST -Africa/Ndjamena.generic.short=WAT -Africa/Ndjamena.standard.short=WAT -Africa/Niamey.daylight.short=WAST -Africa/Niamey.generic.short=WAT -Africa/Niamey.standard.short=WAT -Africa/Nouakchott.daylight.short=GMT -Africa/Nouakchott.generic.short=GMT -Africa/Nouakchott.standard.short=GMT -Africa/Ouagadougou.daylight.short=GMT -Africa/Ouagadougou.generic.short=GMT -Africa/Ouagadougou.standard.short=GMT -Africa/Porto-Novo.daylight.short=WAST -Africa/Porto-Novo.generic.short=WAT -Africa/Porto-Novo.standard.short=WAT -Africa/Sao_Tome.daylight.short=GMT -Africa/Sao_Tome.generic.short=GMT -Africa/Sao_Tome.standard.short=GMT -Africa/Timbuktu.daylight.short=GMT -Africa/Timbuktu.generic.short=GMT -Africa/Timbuktu.standard.short=GMT -Africa/Tripoli.daylight.short=EEST -Africa/Tripoli.generic.short=EET -Africa/Tripoli.standard.short=EET -Africa/Tunis.daylight.short=CEST -Africa/Tunis.generic.short=CET -Africa/Tunis.standard.short=CET -Africa/Windhoek.daylight.short=WAST -Africa/Windhoek.generic.short=WAT -Africa/Windhoek.standard.short=WAT -AGT.daylight.short=ARST -AGT.generic.short=ART -AGT.standard.short=ART -America/Adak.daylight.short=HADT -America/Adak.generic.short=HAT -America/Adak.standard.short=HAST -America/Anchorage.daylight.short=AKDT -America/Anchorage.generic.short=AKT -America/Anchorage.standard.short=AKST -America/Anguilla.daylight.short=ADT -America/Anguilla.generic.short=AT -America/Anguilla.standard.short=AST -America/Antigua.daylight.short=ADT -America/Antigua.generic.short=AT -America/Antigua.standard.short=AST -America/Araguaina.daylight.short=BRST -America/Araguaina.generic.short=BRT -America/Araguaina.standard.short=BRT -America/Argentina/Buenos_Aires.daylight.short=ARST -America/Argentina/Buenos_Aires.generic.short=ART -America/Argentina/Buenos_Aires.standard.short=ART -America/Argentina/Catamarca.daylight.short=ARST -America/Argentina/Catamarca.generic.short=ART -America/Argentina/Catamarca.standard.short=ART -America/Argentina/ComodRivadavia.daylight.short=ARST -America/Argentina/ComodRivadavia.generic.short=ART -America/Argentina/ComodRivadavia.standard.short=ART -America/Argentina/Cordoba.daylight.short=ARST -America/Argentina/Cordoba.generic.short=ART -America/Argentina/Cordoba.standard.short=ART -America/Argentina/Jujuy.daylight.short=ARST -America/Argentina/Jujuy.generic.short=ART -America/Argentina/Jujuy.standard.short=ART -America/Argentina/La_Rioja.daylight.short=ARST -America/Argentina/La_Rioja.generic.short=ART -America/Argentina/La_Rioja.standard.short=ART -America/Argentina/Mendoza.daylight.short=ARST -America/Argentina/Mendoza.generic.short=ART -America/Argentina/Mendoza.standard.short=ART -America/Argentina/Rio_Gallegos.daylight.short=ARST -America/Argentina/Rio_Gallegos.generic.short=ART -America/Argentina/Rio_Gallegos.standard.short=ART -America/Argentina/Salta.daylight.short=ARST -America/Argentina/Salta.generic.short=ART -America/Argentina/Salta.standard.short=ART -America/Argentina/San_Juan.daylight.short=ARST -America/Argentina/San_Juan.generic.short=ART -America/Argentina/San_Juan.standard.short=ART -America/Argentina/San_Luis.daylight.short=ARST -America/Argentina/San_Luis.generic.short=ART -America/Argentina/San_Luis.standard.short=ART -America/Argentina/Tucuman.daylight.short=ARST -America/Argentina/Tucuman.generic.short=ART -America/Argentina/Tucuman.standard.short=ART -America/Argentina/Ushuaia.daylight.short=ARST -America/Argentina/Ushuaia.generic.short=ART -America/Argentina/Ushuaia.standard.short=ART -America/Aruba.daylight.short=ADT -America/Aruba.generic.short=AT -America/Aruba.standard.short=AST -America/Asuncion.daylight.short=PYST -America/Asuncion.generic.short=PYT -America/Asuncion.standard.short=PYT -America/Atikokan.daylight.short=EDT -America/Atikokan.generic.short=ET -America/Atikokan.standard.short=EST -America/Atka.daylight.short=HADT -America/Atka.generic.short=HAT -America/Atka.standard.short=HAST -America/Bahia_Banderas.daylight.short=CDT -America/Bahia_Banderas.generic.short=CT -America/Bahia_Banderas.standard.short=CST -America/Bahia.daylight.short=BRST -America/Bahia.generic.short=BRT -America/Bahia.standard.short=BRT -America/Barbados.daylight.short=ADT -America/Barbados.generic.short=AT -America/Barbados.standard.short=AST -America/Belem.daylight.short=BRST -America/Belem.generic.short=BRT -America/Belem.standard.short=BRT -America/Belize.daylight.short=CDT -America/Belize.generic.short=CT -America/Belize.standard.short=CST -America/Blanc-Sablon.daylight.short=ADT -America/Blanc-Sablon.generic.short=AT -America/Blanc-Sablon.standard.short=AST -America/Boa_Vista.daylight.short=AMST -America/Boa_Vista.generic.short=AMT -America/Boa_Vista.standard.short=AMT -America/Bogota.daylight.short=COST -America/Bogota.generic.short=COT -America/Bogota.standard.short=COT -America/Boise.daylight.short=MDT -America/Boise.generic.short=MT -America/Boise.standard.short=MST -America/Buenos_Aires.daylight.short=ARST -America/Buenos_Aires.generic.short=ART -America/Buenos_Aires.standard.short=ART -America/Cambridge_Bay.daylight.short=MDT -America/Cambridge_Bay.generic.short=MT -America/Cambridge_Bay.standard.short=MST -America/Campo_Grande.daylight.short=AMST -America/Campo_Grande.generic.short=AMT -America/Campo_Grande.standard.short=AMT -America/Cancun.daylight.short=CDT -America/Cancun.generic.short=CT -America/Cancun.standard.short=CST -America/Caracas.daylight.short=VEST -America/Caracas.generic.short=VET -America/Caracas.standard.short=VET -America/Catamarca.daylight.short=ARST -America/Catamarca.generic.short=ART -America/Catamarca.standard.short=ART -America/Cayenne.daylight.short=GFST -America/Cayenne.generic.short=GFT -America/Cayenne.standard.short=GFT -America/Cayman.daylight.short=EDT -America/Cayman.generic.short=ET -America/Cayman.standard.short=EST -America/Chicago.daylight.short=CDT -America/Chicago.generic.short=CT -America/Chicago.standard.short=CST -America/Chihuahua.daylight.short=MDT -America/Chihuahua.generic.short=MT -America/Chihuahua.standard.short=MST -America/Coral_Harbour.daylight.short=EDT -America/Coral_Harbour.generic.short=ET -America/Coral_Harbour.standard.short=EST -America/Cordoba.daylight.short=ARST -America/Cordoba.generic.short=ART -America/Cordoba.standard.short=ART -America/Costa_Rica.daylight.short=CDT -America/Costa_Rica.generic.short=CT -America/Costa_Rica.standard.short=CST -America/Creston.daylight.short=MDT -America/Creston.generic.short=MT -America/Creston.standard.short=MST -America/Cuiaba.daylight.short=AMST -America/Cuiaba.generic.short=AMT -America/Cuiaba.standard.short=AMT -America/Curacao.daylight.short=ADT -America/Curacao.generic.short=AT -America/Curacao.standard.short=AST -America/Danmarkshavn.daylight.short=GMT -America/Danmarkshavn.generic.short=GMT -America/Danmarkshavn.standard.short=GMT -America/Dawson_Creek.daylight.short=MDT -America/Dawson_Creek.generic.short=MT -America/Dawson_Creek.standard.short=MST -America/Dawson.daylight.short=PDT -America/Dawson.generic.short=PT -America/Dawson.standard.short=PST -America/Denver.daylight.short=MDT -America/Denver.generic.short=MT -America/Denver.standard.short=MST -America/Detroit.daylight.short=EDT -America/Detroit.generic.short=ET -America/Detroit.standard.short=EST -America/Dominica.daylight.short=ADT -America/Dominica.generic.short=AT -America/Dominica.standard.short=AST -America/Edmonton.daylight.short=MDT -America/Edmonton.generic.short=MT -America/Edmonton.standard.short=MST -America/Eirunepe.daylight.short=ACST -America/Eirunepe.generic.short=ACT -America/Eirunepe.standard.short=ACT -America/El_Salvador.daylight.short=CDT -America/El_Salvador.generic.short=CT -America/El_Salvador.standard.short=CST -America/Ensenada.daylight.short=PDT -America/Ensenada.generic.short=PT -America/Ensenada.standard.short=PST -America/Fortaleza.daylight.short=BRST -America/Fortaleza.generic.short=BRT -America/Fortaleza.standard.short=BRT -America/Fort_Wayne.daylight.short=EDT -America/Fort_Wayne.generic.short=ET -America/Fort_Wayne.standard.short=EST -America/Glace_Bay.daylight.short=ADT -America/Glace_Bay.generic.short=AT -America/Glace_Bay.standard.short=AST -America/Godthab.daylight.short=WGST -America/Godthab.generic.short=WGT -America/Godthab.standard.short=WGT -America/Goose_Bay.daylight.short=ADT -America/Goose_Bay.generic.short=AT -America/Goose_Bay.standard.short=AST -America/Grand_Turk.daylight.short=EDT -America/Grand_Turk.generic.short=ET -America/Grand_Turk.standard.short=EST -America/Grenada.daylight.short=ADT -America/Grenada.generic.short=AT -America/Grenada.standard.short=AST -America/Guadeloupe.daylight.short=ADT -America/Guadeloupe.generic.short=AT -America/Guadeloupe.standard.short=AST -America/Guatemala.daylight.short=CDT -America/Guatemala.generic.short=CT -America/Guatemala.standard.short=CST -America/Guayaquil.daylight.short=ECST -America/Guayaquil.generic.short=ECT -America/Guayaquil.standard.short=ECT -America/Guyana.daylight.short=GYST -America/Guyana.generic.short=GYT -America/Guyana.standard.short=GYT -America/Halifax.daylight.short=ADT -America/Halifax.generic.short=AT -America/Halifax.standard.short=AST -America/Havana.daylight.short=CDT -America/Havana.generic.short=CT -America/Havana.standard.short=CST -America/Hermosillo.daylight.short=MDT -America/Hermosillo.generic.short=MT -America/Hermosillo.standard.short=MST -America/Indiana/Indianapolis.daylight.short=EDT -America/Indiana/Indianapolis.generic.short=ET -America/Indiana/Indianapolis.standard.short=EST -America/Indiana/Knox.daylight.short=CDT -America/Indiana/Knox.generic.short=CT -America/Indiana/Knox.standard.short=CST -America/Indiana/Marengo.daylight.short=EDT -America/Indiana/Marengo.generic.short=ET -America/Indiana/Marengo.standard.short=EST -America/Indiana/Petersburg.daylight.short=EDT -America/Indiana/Petersburg.generic.short=ET -America/Indiana/Petersburg.standard.short=EST -America/Indianapolis.daylight.short=EDT -America/Indianapolis.generic.short=ET -America/Indianapolis.standard.short=EST -America/Indiana/Tell_City.daylight.short=CDT -America/Indiana/Tell_City.generic.short=CT -America/Indiana/Tell_City.standard.short=CST -America/Indiana/Vevay.daylight.short=EDT -America/Indiana/Vevay.generic.short=ET -America/Indiana/Vevay.standard.short=EST -America/Indiana/Vincennes.daylight.short=EDT -America/Indiana/Vincennes.generic.short=ET -America/Indiana/Vincennes.standard.short=EST -America/Indiana/Winamac.daylight.short=EDT -America/Indiana/Winamac.generic.short=ET -America/Indiana/Winamac.standard.short=EST -America/Inuvik.daylight.short=MDT -America/Inuvik.generic.short=MT -America/Inuvik.standard.short=MST -America/Iqaluit.daylight.short=EDT -America/Iqaluit.generic.short=ET -America/Iqaluit.standard.short=EST -America/Jamaica.daylight.short=EDT -America/Jamaica.generic.short=ET -America/Jamaica.standard.short=EST -America/Jujuy.daylight.short=ARST -America/Jujuy.generic.short=ART -America/Jujuy.standard.short=ART -America/Juneau.daylight.short=AKDT -America/Juneau.generic.short=AKT -America/Juneau.standard.short=AKST -America/Kentucky/Louisville.daylight.short=EDT -America/Kentucky/Louisville.generic.short=ET -America/Kentucky/Louisville.standard.short=EST -America/Kentucky/Monticello.daylight.short=EDT -America/Kentucky/Monticello.generic.short=ET -America/Kentucky/Monticello.standard.short=EST -America/Knox_IN.daylight.short=CDT -America/Knox_IN.generic.short=CT -America/Knox_IN.standard.short=CST -America/Kralendijk.daylight.short=ADT -America/Kralendijk.generic.short=AT -America/Kralendijk.standard.short=AST -America/La_Paz.daylight.short=BOST -America/La_Paz.generic.short=BOT -America/La_Paz.standard.short=BOT -America/Lima.daylight.short=PEST -America/Lima.generic.short=PET -America/Lima.standard.short=PET -America/Los_Angeles.daylight.short=PDT -America/Los_Angeles.generic.short=PT -America/Los_Angeles.standard.short=PST -America/Louisville.daylight.short=EDT -America/Louisville.generic.short=ET -America/Louisville.standard.short=EST -America/Lower_Princes.daylight.short=ADT -America/Lower_Princes.generic.short=AT -America/Lower_Princes.standard.short=AST -America/Maceio.daylight.short=BRST -America/Maceio.generic.short=BRT -America/Maceio.standard.short=BRT -America/Managua.daylight.short=CDT -America/Managua.generic.short=CT -America/Managua.standard.short=CST -America/Manaus.daylight.short=AMST -America/Manaus.generic.short=AMT -America/Manaus.standard.short=AMT -America/Marigot.daylight.short=ADT -America/Marigot.generic.short=AT -America/Marigot.standard.short=AST -America/Martinique.daylight.short=ADT -America/Martinique.generic.short=AT -America/Martinique.standard.short=AST -America/Matamoros.daylight.short=CDT -America/Matamoros.generic.short=CT -America/Matamoros.standard.short=CST -America/Mazatlan.daylight.short=MDT -America/Mazatlan.generic.short=MT -America/Mazatlan.standard.short=MST -America/Mendoza.daylight.short=ARST -America/Mendoza.generic.short=ART -America/Mendoza.standard.short=ART -America/Menominee.daylight.short=CDT -America/Menominee.generic.short=CT -America/Menominee.standard.short=CST -America/Merida.daylight.short=CDT -America/Merida.generic.short=CT -America/Merida.standard.short=CST -America/Metlakatla.daylight.short=MeDT -America/Metlakatla.generic.short=MeT -America/Metlakatla.standard.short=MeST -America/Mexico_City.daylight.short=CDT -America/Mexico_City.generic.short=CT -America/Mexico_City.standard.short=CST -America/Miquelon.daylight.short=PMDT -America/Miquelon.generic.short=PMT -America/Miquelon.standard.short=PMST -America/Moncton.daylight.short=ADT -America/Moncton.generic.short=AT -America/Moncton.standard.short=AST -America/Monterrey.daylight.short=CDT -America/Monterrey.generic.short=CT -America/Monterrey.standard.short=CST -America/Montevideo.daylight.short=UYST -America/Montevideo.generic.short=UYT -America/Montevideo.standard.short=UYT -America/Montreal.daylight.short=EDT -America/Montreal.generic.short=ET -America/Montreal.standard.short=EST -America/Montserrat.daylight.short=ADT -America/Montserrat.generic.short=AT -America/Montserrat.standard.short=AST -America/Nassau.daylight.short=EDT -America/Nassau.generic.short=ET -America/Nassau.standard.short=EST -America/New_York.daylight.short=EDT -America/New_York.generic.short=ET -America/New_York.standard.short=EST -America/Nipigon.daylight.short=EDT -America/Nipigon.generic.short=ET -America/Nipigon.standard.short=EST -America/Nome.daylight.short=AKDT -America/Nome.generic.short=AKT -America/Nome.standard.short=AKST -America/Noronha.daylight.short=FNST -America/Noronha.generic.short=FNT -America/Noronha.standard.short=FNT -America/North_Dakota/Beulah.daylight.short=CDT -America/North_Dakota/Beulah.generic.short=CT -America/North_Dakota/Beulah.standard.short=CST -America/North_Dakota/Center.daylight.short=CDT -America/North_Dakota/Center.generic.short=CT -America/North_Dakota/Center.standard.short=CST -America/North_Dakota/New_Salem.daylight.short=CDT -America/North_Dakota/New_Salem.generic.short=CT -America/North_Dakota/New_Salem.standard.short=CST -America/Ojinaga.daylight.short=MDT -America/Ojinaga.generic.short=MT -America/Ojinaga.standard.short=MST -America/Panama.daylight.short=EDT -America/Panama.generic.short=ET -America/Panama.standard.short=EST -America/Pangnirtung.daylight.short=EDT -America/Pangnirtung.generic.short=ET -America/Pangnirtung.standard.short=EST -America/Paramaribo.daylight.short=SRST -America/Paramaribo.generic.short=SRT -America/Paramaribo.standard.short=SRT -America/Phoenix.daylight.short=MDT -America/Phoenix.generic.short=MT -America/Phoenix.standard.short=MST -America/Port-au-Prince.daylight.short=EDT -America/Port-au-Prince.generic.short=ET -America/Port-au-Prince.standard.short=EST -America/Porto_Acre.daylight.short=ACST -America/Porto_Acre.generic.short=ACT -America/Porto_Acre.standard.short=ACT -America/Port_of_Spain.daylight.short=ADT -America/Port_of_Spain.generic.short=AT -America/Port_of_Spain.standard.short=AST -America/Porto_Velho.daylight.short=AMST -America/Porto_Velho.generic.short=AMT -America/Porto_Velho.standard.short=AMT -America/Puerto_Rico.daylight.short=ADT -America/Puerto_Rico.generic.short=AT -America/Puerto_Rico.standard.short=AST -America/Rainy_River.daylight.short=CDT -America/Rainy_River.generic.short=CT -America/Rainy_River.standard.short=CST -America/Rankin_Inlet.daylight.short=CDT -America/Rankin_Inlet.generic.short=CT -America/Rankin_Inlet.standard.short=CST -America/Recife.daylight.short=BRST -America/Recife.generic.short=BRT -America/Recife.standard.short=BRT -America/Regina.daylight.short=CDT -America/Regina.generic.short=CT -America/Regina.standard.short=CST -America/Resolute.daylight.short=CDT -America/Resolute.generic.short=CT -America/Resolute.standard.short=CST -America/Rio_Branco.daylight.short=ACST -America/Rio_Branco.generic.short=ACT -America/Rio_Branco.standard.short=ACT -America/Rosario.daylight.short=ARST -America/Rosario.generic.short=ART -America/Rosario.standard.short=ART -America/Santa_Isabel.daylight.short=PDT -America/Santa_Isabel.generic.short=PT -America/Santa_Isabel.standard.short=PST -America/Santarem.daylight.short=BRST -America/Santarem.generic.short=BRT -America/Santarem.standard.short=BRT -America/Santiago.daylight.short=CLST -America/Santiago.generic.short=CLT -America/Santiago.standard.short=CLT -America/Santo_Domingo.daylight.short=ADT -America/Santo_Domingo.generic.short=AT -America/Santo_Domingo.standard.short=AST -America/Sao_Paulo.daylight.short=BRST -America/Sao_Paulo.generic.short=BRT -America/Sao_Paulo.standard.short=BRT -America/Scoresbysund.daylight.short=EGST -America/Scoresbysund.generic.short=EGT -America/Scoresbysund.standard.short=EGT -America/Shiprock.daylight.short=MDT -America/Shiprock.generic.short=MT -America/Shiprock.standard.short=MST -America/Sitka.daylight.short=AKDT -America/Sitka.generic.short=AKT -America/Sitka.standard.short=AKST -America/St_Barthelemy.daylight.short=ADT -America/St_Barthelemy.generic.short=AT -America/St_Barthelemy.standard.short=AST -America/St_Johns.daylight.short=NDT -America/St_Johns.generic.short=NT -America/St_Johns.standard.short=NST -America/St_Kitts.daylight.short=ADT -America/St_Kitts.generic.short=AT -America/St_Kitts.standard.short=AST -America/St_Lucia.daylight.short=ADT -America/St_Lucia.generic.short=AT -America/St_Lucia.standard.short=AST -America/St_Thomas.daylight.short=ADT -America/St_Thomas.generic.short=AT -America/St_Thomas.standard.short=AST -America/St_Vincent.daylight.short=ADT -America/St_Vincent.generic.short=AT -America/St_Vincent.standard.short=AST -America/Swift_Current.daylight.short=CDT -America/Swift_Current.generic.short=CT -America/Swift_Current.standard.short=CST -America/Tegucigalpa.daylight.short=CDT -America/Tegucigalpa.generic.short=CT -America/Tegucigalpa.standard.short=CST -America/Thule.daylight.short=ADT -America/Thule.generic.short=AT -America/Thule.standard.short=AST -America/Thunder_Bay.daylight.short=EDT -America/Thunder_Bay.generic.short=ET -America/Thunder_Bay.standard.short=EST -America/Tijuana.daylight.short=PDT -America/Tijuana.generic.short=PT -America/Tijuana.standard.short=PST -America/Toronto.daylight.short=EDT -America/Toronto.generic.short=ET -America/Toronto.standard.short=EST -America/Tortola.daylight.short=ADT -America/Tortola.generic.short=AT -America/Tortola.standard.short=AST -America/Vancouver.daylight.short=PDT -America/Vancouver.generic.short=PT -America/Vancouver.standard.short=PST -America/Virgin.daylight.short=ADT -America/Virgin.generic.short=AT -America/Virgin.standard.short=AST -America/Whitehorse.daylight.short=PDT -America/Whitehorse.generic.short=PT -America/Whitehorse.standard.short=PST -America/Winnipeg.daylight.short=CDT -America/Winnipeg.generic.short=CT -America/Winnipeg.standard.short=CST -America/Yakutat.daylight.short=AKDT -America/Yakutat.generic.short=AKT -America/Yakutat.standard.short=AKST -America/Yellowknife.daylight.short=MDT -America/Yellowknife.generic.short=MT -America/Yellowknife.standard.short=MST -Antarctica/Casey.daylight.short=WST -Antarctica/Casey.generic.short=WT -Antarctica/Casey.standard.short=WST -Antarctica/Davis.daylight.short=DAVST -Antarctica/Davis.generic.short=DAVT -Antarctica/Davis.standard.short=DAVT -Antarctica/DumontDUrville.daylight.short=DDUST -Antarctica/DumontDUrville.generic.short=DDUT -Antarctica/DumontDUrville.standard.short=DDUT -Antarctica/Macquarie.daylight.short=MIST -Antarctica/Macquarie.generic.short=MIST -Antarctica/Macquarie.standard.short=MIST -Antarctica/Mawson.daylight.short=MAWST -Antarctica/Mawson.generic.short=MAWT -Antarctica/Mawson.standard.short=MAWT -Antarctica/McMurdo.daylight.short=NZDT -Antarctica/McMurdo.generic.short=NZT -Antarctica/McMurdo.standard.short=NZST -Antarctica/Palmer.daylight.short=CLST -Antarctica/Palmer.generic.short=CLT -Antarctica/Palmer.standard.short=CLT -Antarctica/Rothera.daylight.short=ROTST -Antarctica/Rothera.generic.short=ROTT -Antarctica/Rothera.standard.short=ROTT -Antarctica/South_Pole.daylight.short=NZDT -Antarctica/South_Pole.generic.short=NZT -Antarctica/South_Pole.standard.short=NZST -Antarctica/Syowa.daylight.short=SYOST -Antarctica/Syowa.generic.short=SYOT -Antarctica/Syowa.standard.short=SYOT -Antarctica/Vostok.daylight.short=VOSST -Antarctica/Vostok.generic.short=VOST -Antarctica/Vostok.standard.short=VOST -Arctic/Longyearbyen.daylight.short=CEST -Arctic/Longyearbyen.generic.short=CET -Arctic/Longyearbyen.standard.short=CET -ART.daylight.short=EEST -ART.generic.short=EET -ART.standard.short=EET -Asia/Aden.daylight.short=ADT -Asia/Aden.generic.short=AT -Asia/Aden.standard.short=AST -Asia/Almaty.daylight.short=ALMST -Asia/Almaty.generic.short=ALMT -Asia/Almaty.standard.short=ALMT -Asia/Amman.daylight.short=ADT -Asia/Amman.generic.short=AT -Asia/Amman.standard.short=AST -Asia/Anadyr.daylight.short=ANAST -Asia/Anadyr.generic.short=ANAT -Asia/Anadyr.standard.short=ANAT -Asia/Aqtau.daylight.short=AQTST -Asia/Aqtau.generic.short=AQTT -Asia/Aqtau.standard.short=AQTT -Asia/Aqtobe.daylight.short=AQTST -Asia/Aqtobe.generic.short=AQTT -Asia/Aqtobe.standard.short=AQTT -Asia/Ashgabat.daylight.short=TMST -Asia/Ashgabat.generic.short=TMT -Asia/Ashgabat.standard.short=TMT -Asia/Ashkhabad.daylight.short=TMST -Asia/Ashkhabad.generic.short=TMT -Asia/Ashkhabad.standard.short=TMT -Asia/Baghdad.daylight.short=ADT -Asia/Baghdad.generic.short=AT -Asia/Baghdad.standard.short=AST -Asia/Bahrain.daylight.short=ADT -Asia/Bahrain.generic.short=AT -Asia/Bahrain.standard.short=AST -Asia/Baku.daylight.short=AZST -Asia/Baku.generic.short=AZT -Asia/Baku.standard.short=AZT -Asia/Bangkok.daylight.short=ICST -Asia/Bangkok.generic.short=ICT -Asia/Bangkok.standard.short=ICT -Asia/Beirut.daylight.short=EEST -Asia/Beirut.generic.short=EET -Asia/Beirut.standard.short=EET -Asia/Bishkek.daylight.short=KGST -Asia/Bishkek.generic.short=KGT -Asia/Bishkek.standard.short=KGT -Asia/Brunei.daylight.short=BNST -Asia/Brunei.generic.short=BNT -Asia/Brunei.standard.short=BNT -Asia/Calcutta.daylight.short=IDT -Asia/Calcutta.generic.short=IT -Asia/Calcutta.standard.short=IST -Asia/Choibalsan.daylight.short=CHOST -Asia/Choibalsan.generic.short=CHOT -Asia/Choibalsan.standard.short=CHOT -Asia/Chongqing.daylight.short=CDT -Asia/Chongqing.generic.short=CT -Asia/Chongqing.standard.short=CST -Asia/Chungking.daylight.short=CDT -Asia/Chungking.generic.short=CT -Asia/Chungking.standard.short=CST -Asia/Colombo.daylight.short=IDT -Asia/Colombo.generic.short=IT -Asia/Colombo.standard.short=IST -Asia/Dacca.daylight.short=BDST -Asia/Dacca.generic.short=BDT -Asia/Dacca.standard.short=BDT -Asia/Damascus.daylight.short=EEST -Asia/Damascus.generic.short=EET -Asia/Damascus.standard.short=EET -Asia/Dhaka.daylight.short=BDST -Asia/Dhaka.generic.short=BDT -Asia/Dhaka.standard.short=BDT -Asia/Dili.daylight.short=TLST -Asia/Dili.generic.short=TLT -Asia/Dili.standard.short=TLT -Asia/Dubai.daylight.short=GDT -Asia/Dubai.generic.short=GT -Asia/Dubai.standard.short=GST -Asia/Dushanbe.daylight.short=TJST -Asia/Dushanbe.generic.short=TJT -Asia/Dushanbe.standard.short=TJT -Asia/Gaza.daylight.short=EEST -Asia/Gaza.generic.short=EET -Asia/Gaza.standard.short=EET -Asia/Harbin.daylight.short=CDT -Asia/Harbin.generic.short=CT -Asia/Harbin.standard.short=CST -Asia/Hebron.daylight.short=EEST -Asia/Hebron.generic.short=EET -Asia/Hebron.standard.short=EET -Asia/Ho_Chi_Minh.daylight.short=ICST -Asia/Ho_Chi_Minh.generic.short=ICT -Asia/Ho_Chi_Minh.standard.short=ICT -Asia/Hong_Kong.daylight.short=HKST -Asia/Hong_Kong.generic.short=HKT -Asia/Hong_Kong.standard.short=HKT -Asia/Hovd.daylight.short=HOVST -Asia/Hovd.generic.short=HOVT -Asia/Hovd.standard.short=HOVT -Asia/Irkutsk.daylight.short=IRKST -Asia/Irkutsk.generic.short=IRKT -Asia/Irkutsk.standard.short=IRKT -Asia/Istanbul.daylight.short=EEST -Asia/Istanbul.generic.short=EET -Asia/Istanbul.standard.short=EET -Asia/Jakarta.daylight.short=WIST -Asia/Jakarta.generic.short=WIB -Asia/Jakarta.standard.short=WIB -Asia/Jayapura.daylight.short=EIST -Asia/Jayapura.generic.short=WIT -Asia/Jayapura.standard.short=WIT -Asia/Jerusalem.daylight.short=IDT -Asia/Jerusalem.generic.short=IT -Asia/Jerusalem.standard.short=IST -Asia/Kabul.daylight.short=AFST -Asia/Kabul.generic.short=AFT -Asia/Kabul.standard.short=AFT -Asia/Kamchatka.daylight.short=PETST -Asia/Kamchatka.generic.short=PETT -Asia/Kamchatka.standard.short=PETT -Asia/Karachi.daylight.short=PKST -Asia/Karachi.generic.short=PKT -Asia/Karachi.standard.short=PKT -Asia/Kashgar.daylight.short=CDT -Asia/Kashgar.generic.short=CT -Asia/Kashgar.standard.short=CST -Asia/Kathmandu.daylight.short=NPST -Asia/Kathmandu.generic.short=NPT -Asia/Kathmandu.standard.short=NPT -Asia/Katmandu.daylight.short=NPST -Asia/Katmandu.generic.short=NPT -Asia/Katmandu.standard.short=NPT -Asia/Khandyga.daylight.short=YAKST -Asia/Khandyga.generic.short=YAKT -Asia/Khandyga.standard.short=YAKT -Asia/Kolkata.daylight.short=IDT -Asia/Kolkata.generic.short=IT -Asia/Kolkata.standard.short=IST -Asia/Krasnoyarsk.daylight.short=KRAST -Asia/Krasnoyarsk.generic.short=KRAT -Asia/Krasnoyarsk.standard.short=KRAT -Asia/Kuala_Lumpur.daylight.short=MYST -Asia/Kuala_Lumpur.generic.short=MYT -Asia/Kuala_Lumpur.standard.short=MYT -Asia/Kuching.daylight.short=MYST -Asia/Kuching.generic.short=MYT -Asia/Kuching.standard.short=MYT -Asia/Kuwait.daylight.short=ADT -Asia/Kuwait.generic.short=AT -Asia/Kuwait.standard.short=AST -Asia/Macao.daylight.short=CDT -Asia/Macao.generic.short=CT -Asia/Macao.standard.short=CST -Asia/Macau.daylight.short=CDT -Asia/Macau.generic.short=CT -Asia/Macau.standard.short=CST -Asia/Magadan.daylight.short=MAGST -Asia/Magadan.generic.short=MAGT -Asia/Magadan.standard.short=MAGT -Asia/Makassar.daylight.short=CIST -Asia/Makassar.generic.short=WITA -Asia/Makassar.standard.short=WITA -Asia/Manila.daylight.short=PHST -Asia/Manila.generic.short=PHT -Asia/Manila.standard.short=PHT -Asia/Muscat.daylight.short=GDT -Asia/Muscat.generic.short=GT -Asia/Muscat.standard.short=GST -Asia/Nicosia.daylight.short=EEST -Asia/Nicosia.generic.short=EET -Asia/Nicosia.standard.short=EET -Asia/Novokuznetsk.daylight.short=NOVST -Asia/Novokuznetsk.generic.short=NOVT -Asia/Novokuznetsk.standard.short=NOVT -Asia/Novosibirsk.daylight.short=NOVST -Asia/Novosibirsk.generic.short=NOVT -Asia/Novosibirsk.standard.short=NOVT -Asia/Omsk.daylight.short=OMSST -Asia/Omsk.generic.short=OMST -Asia/Omsk.standard.short=OMST -Asia/Oral.daylight.short=ORAST -Asia/Oral.generic.short=ORAT -Asia/Oral.standard.short=ORAT -Asia/Phnom_Penh.daylight.short=ICST -Asia/Phnom_Penh.generic.short=ICT -Asia/Phnom_Penh.standard.short=ICT -Asia/Pontianak.daylight.short=WIST -Asia/Pontianak.generic.short=WIB -Asia/Pontianak.standard.short=WIB -Asia/Pyongyang.daylight.short=KDT -Asia/Pyongyang.generic.short=KT -Asia/Pyongyang.standard.short=KST -Asia/Qatar.daylight.short=ADT -Asia/Qatar.generic.short=AT -Asia/Qatar.standard.short=AST -Asia/Qyzylorda.daylight.short=QYZST -Asia/Qyzylorda.generic.short=QYZT -Asia/Qyzylorda.standard.short=QYZT -Asia/Rangoon.daylight.short=MMST -Asia/Rangoon.generic.short=MMT -Asia/Rangoon.standard.short=MMT -Asia/Saigon.daylight.short=ICST -Asia/Saigon.generic.short=ICT -Asia/Saigon.standard.short=ICT -Asia/Sakhalin.daylight.short=SAKST -Asia/Sakhalin.generic.short=SAKT -Asia/Sakhalin.standard.short=SAKT -Asia/Samarkand.daylight.short=UZST -Asia/Samarkand.generic.short=UZT -Asia/Samarkand.standard.short=UZT -Asia/Seoul.daylight.short=KDT -Asia/Seoul.generic.short=KT -Asia/Seoul.standard.short=KST -Asia/Shanghai.daylight.short=CDT -Asia/Shanghai.generic.short=CT -Asia/Shanghai.standard.short=CST -Asia/Singapore.daylight.short=SGST -Asia/Singapore.generic.short=SGT -Asia/Singapore.standard.short=SGT -Asia/Taipei.daylight.short=CDT -Asia/Taipei.generic.short=CT -Asia/Taipei.standard.short=CST -Asia/Tashkent.daylight.short=UZST -Asia/Tashkent.generic.short=UZT -Asia/Tashkent.standard.short=UZT -Asia/Tbilisi.daylight.short=GEST -Asia/Tbilisi.generic.short=GET -Asia/Tbilisi.standard.short=GET -Asia/Tehran.daylight.short=IRDT -Asia/Tehran.generic.short=IRT -Asia/Tehran.standard.short=IRST -Asia/Tel_Aviv.daylight.short=IDT -Asia/Tel_Aviv.generic.short=IT -Asia/Tel_Aviv.standard.short=IST -Asia/Thimbu.daylight.short=BTST -Asia/Thimbu.generic.short=BTT -Asia/Thimbu.standard.short=BTT -Asia/Thimphu.daylight.short=BTST -Asia/Thimphu.generic.short=BTT -Asia/Thimphu.standard.short=BTT -Asia/Tokyo.daylight.short=JDT -Asia/Tokyo.generic.short=JT -Asia/Tokyo.standard.short=JST -Asia/Ujung_Pandang.daylight.short=CIST -Asia/Ujung_Pandang.generic.short=WITA -Asia/Ujung_Pandang.standard.short=WITA -Asia/Ulaanbaatar.daylight.short=ULAST -Asia/Ulaanbaatar.generic.short=ULAT -Asia/Ulaanbaatar.standard.short=ULAT -Asia/Ulan_Bator.daylight.short=ULAST -Asia/Ulan_Bator.generic.short=ULAT -Asia/Ulan_Bator.standard.short=ULAT -Asia/Urumqi.daylight.short=CDT -Asia/Urumqi.generic.short=CT -Asia/Urumqi.standard.short=CST -Asia/Ust-Nera.daylight.short=VLAST -Asia/Ust-Nera.generic.short=VLAT -Asia/Ust-Nera.standard.short=VLAT -Asia/Vientiane.daylight.short=ICST -Asia/Vientiane.generic.short=ICT -Asia/Vientiane.standard.short=ICT -Asia/Vladivostok.daylight.short=VLAST -Asia/Vladivostok.generic.short=VLAT -Asia/Vladivostok.standard.short=VLAT -Asia/Yakutsk.daylight.short=YAKST -Asia/Yakutsk.generic.short=YAKT -Asia/Yakutsk.standard.short=YAKT -Asia/Yekaterinburg.daylight.short=YEKST -Asia/Yekaterinburg.generic.short=YEKT -Asia/Yekaterinburg.standard.short=YEKT -Asia/Yerevan.daylight.short=AMST -Asia/Yerevan.generic.short=AMT -Asia/Yerevan.standard.short=AMT -AST.daylight.short=AKDT -AST.generic.short=AKT -AST.standard.short=AKST -Atlantic/Azores.daylight.short=AZOST -Atlantic/Azores.generic.short=AZOT -Atlantic/Azores.standard.short=AZOT -Atlantic/Bermuda.daylight.short=ADT -Atlantic/Bermuda.generic.short=AT -Atlantic/Bermuda.standard.short=AST -Atlantic/Canary.daylight.short=WEST -Atlantic/Canary.generic.short=WET -Atlantic/Canary.standard.short=WET -Atlantic/Cape_Verde.daylight.short=CVST -Atlantic/Cape_Verde.generic.short=CVT -Atlantic/Cape_Verde.standard.short=CVT -Atlantic/Faeroe.daylight.short=WEST -Atlantic/Faeroe.generic.short=WET -Atlantic/Faeroe.standard.short=WET -Atlantic/Faroe.daylight.short=WEST -Atlantic/Faroe.generic.short=WET -Atlantic/Faroe.standard.short=WET -Atlantic/Jan_Mayen.daylight.short=CEST -Atlantic/Jan_Mayen.generic.short=CET -Atlantic/Jan_Mayen.standard.short=CET -Atlantic/Madeira.daylight.short=WEST -Atlantic/Madeira.generic.short=WET -Atlantic/Madeira.standard.short=WET -Atlantic/Reykjavik.daylight.short=GMT -Atlantic/Reykjavik.generic.short=GMT -Atlantic/Reykjavik.standard.short=GMT -Atlantic/South_Georgia.daylight.short=GDT -Atlantic/South_Georgia.generic.short=GT -Atlantic/South_Georgia.standard.short=GST -Atlantic/Stanley.daylight.short=FKST -Atlantic/Stanley.generic.short=FKT -Atlantic/Stanley.standard.short=FKT -Atlantic/St_Helena.daylight.short=GMT -Atlantic/St_Helena.generic.short=GMT -Atlantic/St_Helena.standard.short=GMT -Australia/ACT.daylight.short=EST -Australia/ACT.generic.short=ET -Australia/ACT.standard.short=EST -Australia/Adelaide.daylight.short=CST -Australia/Adelaide.generic.short=CT -Australia/Adelaide.standard.short=CST -Australia/Brisbane.daylight.short=EST -Australia/Brisbane.generic.short=ET -Australia/Brisbane.standard.short=EST -Australia/Broken_Hill.daylight.short=CST -Australia/Broken_Hill.generic.short=CT -Australia/Broken_Hill.standard.short=CST -Australia/Canberra.daylight.short=EST -Australia/Canberra.generic.short=ET -Australia/Canberra.standard.short=EST -Australia/Currie.daylight.short=EST -Australia/Currie.generic.short=ET -Australia/Currie.standard.short=EST -Australia/Darwin.daylight.short=CST -Australia/Darwin.generic.short=CT -Australia/Darwin.standard.short=CST -Australia/Eucla.daylight.short=CWST -Australia/Eucla.generic.short=CWT -Australia/Eucla.standard.short=CWST -Australia/Hobart.daylight.short=EST -Australia/Hobart.generic.short=ET -Australia/Hobart.standard.short=EST -Australia/LHI.daylight.short=LHST -Australia/LHI.generic.short=LHT -Australia/LHI.standard.short=LHST -Australia/Lindeman.daylight.short=EST -Australia/Lindeman.generic.short=ET -Australia/Lindeman.standard.short=EST -Australia/Lord_Howe.daylight.short=LHST -Australia/Lord_Howe.generic.short=LHT -Australia/Lord_Howe.standard.short=LHST -Australia/Melbourne.daylight.short=EST -Australia/Melbourne.generic.short=ET -Australia/Melbourne.standard.short=EST -Australia/North.daylight.short=CST -Australia/North.generic.short=CT -Australia/North.standard.short=CST -Australia/NSW.daylight.short=EST -Australia/NSW.generic.short=ET -Australia/NSW.standard.short=EST -Australia/Perth.daylight.short=WST -Australia/Perth.generic.short=WT -Australia/Perth.standard.short=WST -Australia/Queensland.daylight.short=EST -Australia/Queensland.generic.short=ET -Australia/Queensland.standard.short=EST -Australia/South.daylight.short=CST -Australia/South.generic.short=CT -Australia/South.standard.short=CST -Australia/Sydney.daylight.short=EST -Australia/Sydney.generic.short=ET -Australia/Sydney.standard.short=EST -Australia/Tasmania.daylight.short=EST -Australia/Tasmania.generic.short=ET -Australia/Tasmania.standard.short=EST -Australia/Victoria.daylight.short=EST -Australia/Victoria.generic.short=ET -Australia/Victoria.standard.short=EST -Australia/West.daylight.short=WST -Australia/West.generic.short=WT -Australia/West.standard.short=WST -Australia/Yancowinna.daylight.short=CST -Australia/Yancowinna.generic.short=CT -Australia/Yancowinna.standard.short=CST -BET.daylight.short=BRST -BET.generic.short=BRT -BET.standard.short=BRT -Brazil/Acre.daylight.short=ACST -Brazil/Acre.generic.short=ACT -Brazil/Acre.standard.short=ACT -Brazil/DeNoronha.daylight.short=FNST -Brazil/DeNoronha.generic.short=FNT -Brazil/DeNoronha.standard.short=FNT -Brazil/East.daylight.short=BRST -Brazil/East.generic.short=BRT -Brazil/East.standard.short=BRT -Brazil/West.daylight.short=AMST -Brazil/West.generic.short=AMT -Brazil/West.standard.short=AMT -BST.daylight.short=BDST -BST.generic.short=BDT -BST.standard.short=BDT -Canada/Atlantic.daylight.short=ADT -Canada/Atlantic.generic.short=AT -Canada/Atlantic.standard.short=AST -Canada/Central.daylight.short=CDT -Canada/Central.generic.short=CT -Canada/Central.standard.short=CST -Canada/Eastern.daylight.short=EDT -Canada/Eastern.generic.short=ET -Canada/Eastern.standard.short=EST -Canada/East-Saskatchewan.daylight.short=CDT -Canada/East-Saskatchewan.generic.short=CT -Canada/East-Saskatchewan.standard.short=CST -Canada/Mountain.daylight.short=MDT -Canada/Mountain.generic.short=MT -Canada/Mountain.standard.short=MST -Canada/Newfoundland.daylight.short=NDT -Canada/Newfoundland.generic.short=NT -Canada/Newfoundland.standard.short=NST -Canada/Pacific.daylight.short=PDT -Canada/Pacific.generic.short=PT -Canada/Pacific.standard.short=PST -Canada/Saskatchewan.daylight.short=CDT -Canada/Saskatchewan.generic.short=CT -Canada/Saskatchewan.standard.short=CST -Canada/Yukon.daylight.short=PDT -Canada/Yukon.generic.short=PT -Canada/Yukon.standard.short=PST -CAT.daylight.short=CAST -CAT.generic.short=CAT -CAT.standard.short=CAT -CET.daylight.short=CEST -CET.generic.short=CET -CET.standard.short=CET -Chile/Continental.daylight.short=CLST -Chile/Continental.generic.short=CLT -Chile/Continental.standard.short=CLT -Chile/EasterIsland.daylight.short=EASST -Chile/EasterIsland.generic.short=EAST -Chile/EasterIsland.standard.short=EAST -CNT.daylight.short=NDT -CNT.generic.short=NT -CNT.standard.short=NST -CST6CDT.daylight.short=CDT -CST6CDT.generic.short=CT -CST6CDT.standard.short=CST -CST.daylight.short=CDT -CST.generic.short=CT -CST.standard.short=CST -CTT.daylight.short=CDT -CTT.generic.short=CT -CTT.standard.short=CST -Cuba.daylight.short=CDT -Cuba.generic.short=CT -Cuba.standard.short=CST -EAT.daylight.short=EAST -EAT.generic.short=EAT -EAT.standard.short=EAT -ECT.daylight.short=CEST -ECT.generic.short=CET -ECT.standard.short=CET -EET.daylight.short=EEST -EET.generic.short=EET -EET.standard.short=EET -Egypt.daylight.short=EEST -Egypt.generic.short=EET -Egypt.standard.short=EET -Eire.daylight.short=IST -Eire.generic.short=IT -Eire.standard.short=GMT -EST5EDT.daylight.short=EDT -EST5EDT.generic.short=ET -EST5EDT.standard.short=EST -EST.daylight.short=EDT -EST.generic.short=ET -EST.standard.short=EST -Etc/Greenwich.daylight.short=GMT -Etc/Greenwich.generic.short=GMT -Etc/Greenwich.standard.short=GMT -Etc/UCT.daylight.short=UTC -Etc/UCT.generic.short=UTC -Etc/UCT.standard.short=UTC -Etc/Universal.daylight.short=UTC -Etc/Universal.generic.short=UTC -Etc/Universal.standard.short=UTC -Etc/UTC.daylight.short=UTC -Etc/UTC.generic.short=UTC -Etc/UTC.standard.short=UTC -Etc/Zulu.daylight.short=UTC -Etc/Zulu.generic.short=UTC -Etc/Zulu.standard.short=UTC -Europe/Amsterdam.daylight.short=CEST -Europe/Amsterdam.generic.short=CET -Europe/Amsterdam.standard.short=CET -Europe/Andorra.daylight.short=CEST -Europe/Andorra.generic.short=CET -Europe/Andorra.standard.short=CET -Europe/Athens.daylight.short=EEST -Europe/Athens.generic.short=EET -Europe/Athens.standard.short=EET -Europe/Belfast.daylight.short=BST -Europe/Belfast.generic.short=BT -Europe/Belfast.standard.short=GMT -Europe/Belgrade.daylight.short=CEST -Europe/Belgrade.generic.short=CET -Europe/Belgrade.standard.short=CET -Europe/Berlin.daylight.short=CEST -Europe/Berlin.generic.short=CET -Europe/Berlin.standard.short=CET -Europe/Bratislava.daylight.short=CEST -Europe/Bratislava.generic.short=CET -Europe/Bratislava.standard.short=CET -Europe/Brussels.daylight.short=CEST -Europe/Brussels.generic.short=CET -Europe/Brussels.standard.short=CET -Europe/Bucharest.daylight.short=EEST -Europe/Bucharest.generic.short=EET -Europe/Bucharest.standard.short=EET -Europe/Budapest.daylight.short=CEST -Europe/Budapest.generic.short=CET -Europe/Budapest.standard.short=CET -Europe/Busingen.daylight.short=CEST -Europe/Busingen.generic.short=CET -Europe/Busingen.standard.short=CET -Europe/Chisinau.daylight.short=EEST -Europe/Chisinau.generic.short=EET -Europe/Chisinau.standard.short=EET -Europe/Copenhagen.daylight.short=CEST -Europe/Copenhagen.generic.short=CET -Europe/Copenhagen.standard.short=CET -Europe/Dublin.daylight.short=IST -Europe/Dublin.generic.short=IT -Europe/Dublin.standard.short=GMT -Europe/Gibraltar.daylight.short=CEST -Europe/Gibraltar.generic.short=CET -Europe/Gibraltar.standard.short=CET -Europe/Guernsey.daylight.short=BST -Europe/Guernsey.generic.short=BT -Europe/Guernsey.standard.short=GMT -Europe/Helsinki.daylight.short=EEST -Europe/Helsinki.generic.short=EET -Europe/Helsinki.standard.short=EET -Europe/Isle_of_Man.daylight.short=BST -Europe/Isle_of_Man.generic.short=BT -Europe/Isle_of_Man.standard.short=GMT -Europe/Istanbul.daylight.short=EEST -Europe/Istanbul.generic.short=EET -Europe/Istanbul.standard.short=EET -Europe/Jersey.daylight.short=BST -Europe/Jersey.generic.short=BT -Europe/Jersey.standard.short=GMT -Europe/Kaliningrad.daylight.short=FEST -Europe/Kaliningrad.generic.short=FET -Europe/Kaliningrad.standard.short=FET -Europe/Kiev.daylight.short=EEST -Europe/Kiev.generic.short=EET -Europe/Kiev.standard.short=EET -Europe/Lisbon.daylight.short=WEST -Europe/Lisbon.generic.short=WET -Europe/Lisbon.standard.short=WET -Europe/Ljubljana.daylight.short=CEST -Europe/Ljubljana.generic.short=CET -Europe/Ljubljana.standard.short=CET -Europe/London.daylight.short=BST -Europe/London.generic.short=BT -Europe/London.standard.short=GMT -Europe/Luxembourg.daylight.short=CEST -Europe/Luxembourg.generic.short=CET -Europe/Luxembourg.standard.short=CET -Europe/Madrid.daylight.short=CEST -Europe/Madrid.generic.short=CET -Europe/Madrid.standard.short=CET -Europe/Malta.daylight.short=CEST -Europe/Malta.generic.short=CET -Europe/Malta.standard.short=CET -Europe/Mariehamn.daylight.short=EEST -Europe/Mariehamn.generic.short=EET -Europe/Mariehamn.standard.short=EET -Europe/Minsk.daylight.short=FEST -Europe/Minsk.generic.short=FET -Europe/Minsk.standard.short=FET -Europe/Monaco.daylight.short=CEST -Europe/Monaco.generic.short=CET -Europe/Monaco.standard.short=CET -Europe/Moscow.daylight.short=MSD -Europe/Moscow.generic.short=MT -Europe/Moscow.standard.short=MSK -Europe/Nicosia.daylight.short=EEST -Europe/Nicosia.generic.short=EET -Europe/Nicosia.standard.short=EET -Europe/Oslo.daylight.short=CEST -Europe/Oslo.generic.short=CET -Europe/Oslo.standard.short=CET -Europe/Paris.daylight.short=CEST -Europe/Paris.generic.short=CET -Europe/Paris.standard.short=CET -Europe/Podgorica.daylight.short=CEST -Europe/Podgorica.generic.short=CET -Europe/Podgorica.standard.short=CET -Europe/Prague.daylight.short=CEST -Europe/Prague.generic.short=CET -Europe/Prague.standard.short=CET -Europe/Riga.daylight.short=EEST -Europe/Riga.generic.short=EET -Europe/Riga.standard.short=EET -Europe/Rome.daylight.short=CEST -Europe/Rome.generic.short=CET -Europe/Rome.standard.short=CET -Europe/Samara.daylight.short=SAMST -Europe/Samara.generic.short=SAMT -Europe/Samara.standard.short=SAMT -Europe/San_Marino.daylight.short=CEST -Europe/San_Marino.generic.short=CET -Europe/San_Marino.standard.short=CET -Europe/Sarajevo.daylight.short=CEST -Europe/Sarajevo.generic.short=CET -Europe/Sarajevo.standard.short=CET -Europe/Simferopol.daylight.short=EEST -Europe/Simferopol.generic.short=EET -Europe/Simferopol.standard.short=EET -Europe/Skopje.daylight.short=CEST -Europe/Skopje.generic.short=CET -Europe/Skopje.standard.short=CET -Europe/Sofia.daylight.short=EEST -Europe/Sofia.generic.short=EET -Europe/Sofia.standard.short=EET -Europe/Stockholm.daylight.short=CEST -Europe/Stockholm.generic.short=CET -Europe/Stockholm.standard.short=CET -Europe/Tallinn.daylight.short=EEST -Europe/Tallinn.generic.short=EET -Europe/Tallinn.standard.short=EET -Europe/Tirane.daylight.short=CEST -Europe/Tirane.generic.short=CET -Europe/Tirane.standard.short=CET -Europe/Tiraspol.daylight.short=EEST -Europe/Tiraspol.generic.short=EET -Europe/Tiraspol.standard.short=EET -Europe/Uzhgorod.daylight.short=EEST -Europe/Uzhgorod.generic.short=EET -Europe/Uzhgorod.standard.short=EET -Europe/Vaduz.daylight.short=CEST -Europe/Vaduz.generic.short=CET -Europe/Vaduz.standard.short=CET -Europe/Vatican.daylight.short=CEST -Europe/Vatican.generic.short=CET -Europe/Vatican.standard.short=CET -Europe/Vienna.daylight.short=CEST -Europe/Vienna.generic.short=CET -Europe/Vienna.standard.short=CET -Europe/Vilnius.daylight.short=EEST -Europe/Vilnius.generic.short=EET -Europe/Vilnius.standard.short=EET -Europe/Volgograd.daylight.short=VOLST -Europe/Volgograd.generic.short=VOLT -Europe/Volgograd.standard.short=VOLT -Europe/Warsaw.daylight.short=CEST -Europe/Warsaw.generic.short=CET -Europe/Warsaw.standard.short=CET -Europe/Zagreb.daylight.short=CEST -Europe/Zagreb.generic.short=CET -Europe/Zagreb.standard.short=CET -Europe/Zaporozhye.daylight.short=EEST -Europe/Zaporozhye.generic.short=EET -Europe/Zaporozhye.standard.short=EET -Europe/Zurich.daylight.short=CEST -Europe/Zurich.generic.short=CET -Europe/Zurich.standard.short=CET -GB.daylight.short=BST -GB-Eire.daylight.short=BST -GB-Eire.generic.short=BT -GB-Eire.standard.short=GMT -GB.generic.short=BT -GB.standard.short=GMT -GMT.daylight.short=GMT -GMT.generic.short=GMT -GMT.standard.short=GMT -Greenwich.daylight.short=GMT -Greenwich.generic.short=GMT -Greenwich.standard.short=GMT -Hongkong.daylight.short=HKST -Hongkong.generic.short=HKT -Hongkong.standard.short=HKT -HST.daylight.short=HDT -HST.generic.short=HT -HST.standard.short=HST -Iceland.daylight.short=GMT -Iceland.generic.short=GMT -Iceland.standard.short=GMT -IET.daylight.short=EDT -IET.generic.short=ET -IET.standard.short=EST -Indian/Antananarivo.daylight.short=EAST -Indian/Antananarivo.generic.short=EAT -Indian/Antananarivo.standard.short=EAT -Indian/Chagos.daylight.short=IOST -Indian/Chagos.generic.short=IOT -Indian/Chagos.standard.short=IOT -Indian/Christmas.daylight.short=CXST -Indian/Christmas.generic.short=CIT -Indian/Christmas.standard.short=CXT -Indian/Cocos.daylight.short=CCST -Indian/Cocos.generic.short=CCT -Indian/Cocos.standard.short=CCT -Indian/Comoro.daylight.short=EAST -Indian/Comoro.generic.short=EAT -Indian/Comoro.standard.short=EAT -Indian/Kerguelen.daylight.short=TFST -Indian/Kerguelen.generic.short=TFT -Indian/Kerguelen.standard.short=TFT -Indian/Mahe.daylight.short=SCST -Indian/Mahe.generic.short=SCT -Indian/Mahe.standard.short=SCT -Indian/Maldives.daylight.short=MVST -Indian/Maldives.generic.short=MVT -Indian/Maldives.standard.short=MVT -Indian/Mauritius.daylight.short=MUST -Indian/Mauritius.generic.short=MUT -Indian/Mauritius.standard.short=MUT -Indian/Mayotte.daylight.short=EAST -Indian/Mayotte.generic.short=EAT -Indian/Mayotte.standard.short=EAT -Indian/Reunion.daylight.short=REST -Indian/Reunion.generic.short=RET -Indian/Reunion.standard.short=RET -Iran.daylight.short=IRDT -Iran.generic.short=IRT -Iran.standard.short=IRST -Israel.daylight.short=IDT -Israel.generic.short=IT -Israel.standard.short=IST -IST.daylight.short=IDT -IST.generic.short=IT -IST.standard.short=IST -Jamaica.daylight.short=EDT -Jamaica.generic.short=ET -Jamaica.standard.short=EST -Japan.daylight.short=JDT -Japan.generic.short=JT -Japan.standard.short=JST -JST.daylight.short=JDT -JST.generic.short=JT -JST.standard.short=JST -Kwajalein.daylight.short=MHST -Kwajalein.generic.short=MHT -Kwajalein.standard.short=MHT -Libya.daylight.short=EEST -Libya.generic.short=EET -Libya.standard.short=EET -MET.daylight.short=MEST -MET.generic.short=MET -MET.standard.short=MET -Mexico/BajaNorte.daylight.short=PDT -Mexico/BajaNorte.generic.short=PT -Mexico/BajaNorte.standard.short=PST -Mexico/BajaSur.daylight.short=MDT -Mexico/BajaSur.generic.short=MT -Mexico/BajaSur.standard.short=MST -Mexico/General.daylight.short=CDT -Mexico/General.generic.short=CT -Mexico/General.standard.short=CST -MIT.daylight.short=WSDT -MIT.generic.short=WST -MIT.standard.short=WST -MST7MDT.daylight.short=MDT -MST7MDT.generic.short=MT -MST7MDT.standard.short=MST -MST.daylight.short=MDT -MST.generic.short=MT -MST.standard.short=MST -Navajo.daylight.short=MDT -Navajo.generic.short=MT -Navajo.standard.short=MST -NET.daylight.short=AMST -NET.generic.short=AMT -NET.standard.short=AMT -NST.daylight.short=NZDT -NST.generic.short=NZT -NST.standard.short=NZST -NZ-CHAT.daylight.short=CHADT -NZ-CHAT.generic.short=CHAT -NZ-CHAT.standard.short=CHAST -NZ.daylight.short=NZDT -NZ.generic.short=NZT -NZ.standard.short=NZST -Pacific/Apia.daylight.short=WSDT -Pacific/Apia.generic.short=WST -Pacific/Apia.standard.short=WST -Pacific/Auckland.daylight.short=NZDT -Pacific/Auckland.generic.short=NZT -Pacific/Auckland.standard.short=NZST -Pacific/Chatham.daylight.short=CHADT -Pacific/Chatham.generic.short=CHAT -Pacific/Chatham.standard.short=CHAST -Pacific/Chuuk.daylight.short=CHUST -Pacific/Chuuk.generic.short=CHUT -Pacific/Chuuk.standard.short=CHUT -Pacific/Easter.daylight.short=EASST -Pacific/Easter.generic.short=EAST -Pacific/Easter.standard.short=EAST -Pacific/Efate.daylight.short=VUST -Pacific/Efate.generic.short=VUT -Pacific/Efate.standard.short=VUT -Pacific/Enderbury.daylight.short=PHOST -Pacific/Enderbury.generic.short=PHOT -Pacific/Enderbury.standard.short=PHOT -Pacific/Fakaofo.daylight.short=TKST -Pacific/Fakaofo.generic.short=TKT -Pacific/Fakaofo.standard.short=TKT -Pacific/Fiji.daylight.short=FJST -Pacific/Fiji.generic.short=FJT -Pacific/Fiji.standard.short=FJT -Pacific/Funafuti.daylight.short=TVST -Pacific/Funafuti.generic.short=TVT -Pacific/Funafuti.standard.short=TVT -Pacific/Galapagos.daylight.short=GALST -Pacific/Galapagos.generic.short=GALT -Pacific/Galapagos.standard.short=GALT -Pacific/Gambier.daylight.short=GAMST -Pacific/Gambier.generic.short=GAMT -Pacific/Gambier.standard.short=GAMT -Pacific/Guadalcanal.daylight.short=SBST -Pacific/Guadalcanal.generic.short=SBT -Pacific/Guadalcanal.standard.short=SBT -Pacific/Guam.daylight.short=ChDT -Pacific/Guam.generic.short=ChT -Pacific/Guam.standard.short=ChST -Pacific/Honolulu.daylight.short=HDT -Pacific/Honolulu.generic.short=HT -Pacific/Honolulu.standard.short=HST -Pacific/Johnston.daylight.short=HDT -Pacific/Johnston.generic.short=HT -Pacific/Johnston.standard.short=HST -Pacific/Kiritimati.daylight.short=LINST -Pacific/Kiritimati.generic.short=LINT -Pacific/Kiritimati.standard.short=LINT -Pacific/Kosrae.daylight.short=KOSST -Pacific/Kosrae.generic.short=KOST -Pacific/Kosrae.standard.short=KOST -Pacific/Kwajalein.daylight.short=MHST -Pacific/Kwajalein.generic.short=MHT -Pacific/Kwajalein.standard.short=MHT -Pacific/Majuro.daylight.short=MHST -Pacific/Majuro.generic.short=MHT -Pacific/Majuro.standard.short=MHT -Pacific/Marquesas.daylight.short=MARST -Pacific/Marquesas.generic.short=MART -Pacific/Marquesas.standard.short=MART -Pacific/Midway.daylight.short=SDT -Pacific/Midway.generic.short=ST -Pacific/Midway.standard.short=SST -Pacific/Nauru.daylight.short=NRST -Pacific/Nauru.generic.short=NRT -Pacific/Nauru.standard.short=NRT -Pacific/Niue.daylight.short=NUST -Pacific/Niue.generic.short=NUT -Pacific/Niue.standard.short=NUT -Pacific/Norfolk.daylight.short=NFST -Pacific/Norfolk.generic.short=NFT -Pacific/Norfolk.standard.short=NFT -Pacific/Noumea.daylight.short=NCST -Pacific/Noumea.generic.short=NCT -Pacific/Noumea.standard.short=NCT -Pacific/Pago_Pago.daylight.short=SDT -Pacific/Pago_Pago.generic.short=ST -Pacific/Pago_Pago.standard.short=SST -Pacific/Palau.daylight.short=PWST -Pacific/Palau.generic.short=PWT -Pacific/Palau.standard.short=PWT -Pacific/Pitcairn.daylight.short=PDT -Pacific/Pitcairn.generic.short=PT -Pacific/Pitcairn.standard.short=PST -Pacific/Pohnpei.daylight.short=PONST -Pacific/Pohnpei.generic.short=PONT -Pacific/Pohnpei.standard.short=PONT -Pacific/Ponape.daylight.short=PONST -Pacific/Ponape.generic.short=PONT -Pacific/Ponape.standard.short=PONT -Pacific/Port_Moresby.daylight.short=PGST -Pacific/Port_Moresby.generic.short=PGT -Pacific/Port_Moresby.standard.short=PGT -Pacific/Rarotonga.daylight.short=CKHST -Pacific/Rarotonga.generic.short=CKT -Pacific/Rarotonga.standard.short=CKT -Pacific/Saipan.daylight.short=ChDT -Pacific/Saipan.generic.short=ChT -Pacific/Saipan.standard.short=ChST -Pacific/Samoa.daylight.short=SDT -Pacific/Samoa.generic.short=ST -Pacific/Samoa.standard.short=SST -Pacific/Tahiti.daylight.short=TAHST -Pacific/Tahiti.generic.short=TAHT -Pacific/Tahiti.standard.short=TAHT -Pacific/Tarawa.daylight.short=GILST -Pacific/Tarawa.generic.short=GILT -Pacific/Tarawa.standard.short=GILT -Pacific/Tongatapu.daylight.short=TOST -Pacific/Tongatapu.generic.short=TOT -Pacific/Tongatapu.standard.short=TOT -Pacific/Truk.daylight.short=CHUST -Pacific/Truk.generic.short=CHUT -Pacific/Truk.standard.short=CHUT -Pacific/Wake.daylight.short=WAKST -Pacific/Wake.generic.short=WAKT -Pacific/Wake.standard.short=WAKT -Pacific/Wallis.daylight.short=WFST -Pacific/Wallis.generic.short=WFT -Pacific/Wallis.standard.short=WFT -Pacific/Yap.daylight.short=CHUST -Pacific/Yap.generic.short=CHUT -Pacific/Yap.standard.short=CHUT -PLT.daylight.short=PKST -PLT.generic.short=PKT -PLT.standard.short=PKT -PNT.daylight.short=MDT -PNT.generic.short=MT -PNT.standard.short=MST -Poland.daylight.short=CEST -Poland.generic.short=CET -Poland.standard.short=CET -Portugal.daylight.short=WEST -Portugal.generic.short=WET -Portugal.standard.short=WET -PRC.daylight.short=CDT -PRC.generic.short=CT -PRC.standard.short=CST -PRT.daylight.short=ADT -PRT.generic.short=AT -PRT.standard.short=AST -PST8PDT.daylight.short=PDT -PST8PDT.generic.short=PT -PST8PDT.standard.short=PST -PST.daylight.short=PDT -PST.generic.short=PT -PST.standard.short=PST -ROK.daylight.short=KDT -ROK.generic.short=KT -ROK.standard.short=KST -Singapore.daylight.short=SGST -Singapore.generic.short=SGT -Singapore.standard.short=SGT -SST.daylight.short=SBST -SST.generic.short=SBT -SST.standard.short=SBT -SystemV/AST4ADT.daylight.short=ADT -SystemV/AST4ADT.generic.short=AT -SystemV/AST4ADT.standard.short=AST -SystemV/AST4.daylight.short=ADT -SystemV/AST4.generic.short=AT -SystemV/AST4.standard.short=AST -SystemV/CST6CDT.daylight.short=CDT -SystemV/CST6CDT.generic.short=CT -SystemV/CST6CDT.standard.short=CST -SystemV/CST6.daylight.short=CDT -SystemV/CST6.generic.short=CT -SystemV/CST6.standard.short=CST -SystemV/EST5.daylight.short=EDT -SystemV/EST5EDT.daylight.short=EDT -SystemV/EST5EDT.generic.short=ET -SystemV/EST5EDT.standard.short=EST -SystemV/EST5.generic.short=ET -SystemV/EST5.standard.short=EST -SystemV/HST10.daylight.short=HDT -SystemV/HST10.generic.short=HT -SystemV/HST10.standard.short=HST -SystemV/MST7.daylight.short=MDT -SystemV/MST7.generic.short=MT -SystemV/MST7MDT.daylight.short=MDT -SystemV/MST7MDT.generic.short=MT -SystemV/MST7MDT.standard.short=MST -SystemV/MST7.standard.short=MST -SystemV/PST8.daylight.short=PDT -SystemV/PST8.generic.short=PT -SystemV/PST8PDT.daylight.short=PDT -SystemV/PST8PDT.generic.short=PT -SystemV/PST8PDT.standard.short=PST -SystemV/PST8.standard.short=PST -SystemV/YST9.daylight.short=AKDT -SystemV/YST9.generic.short=AKT -SystemV/YST9.standard.short=AKST -SystemV/YST9YDT.daylight.short=AKDT -SystemV/YST9YDT.generic.short=AKT -SystemV/YST9YDT.standard.short=AKST -Turkey.daylight.short=EEST -Turkey.generic.short=EET -Turkey.standard.short=EET -UCT.daylight.short=UTC -UCT.generic.short=UTC -UCT.standard.short=UTC -Universal.daylight.short=UTC -Universal.generic.short=UTC -Universal.standard.short=UTC -US/Alaska.daylight.short=AKDT -US/Alaska.generic.short=AKT -US/Alaska.standard.short=AKST -US/Aleutian.daylight.short=HADT -US/Aleutian.generic.short=HAT -US/Aleutian.standard.short=HAST -US/Arizona.daylight.short=MDT -US/Arizona.generic.short=MT -US/Arizona.standard.short=MST -US/Central.daylight.short=CDT -US/Central.generic.short=CT -US/Central.standard.short=CST -US/Eastern.daylight.short=EDT -US/Eastern.generic.short=ET -US/Eastern.standard.short=EST -US/East-Indiana.daylight.short=EDT -US/East-Indiana.generic.short=ET -US/East-Indiana.standard.short=EST -US/Hawaii.daylight.short=HDT -US/Hawaii.generic.short=HT -US/Hawaii.standard.short=HST -US/Indiana-Starke.daylight.short=CDT -US/Indiana-Starke.generic.short=CT -US/Indiana-Starke.standard.short=CST -US/Michigan.daylight.short=EDT -US/Michigan.generic.short=ET -US/Michigan.standard.short=EST -US/Mountain.daylight.short=MDT -US/Mountain.generic.short=MT -US/Mountain.standard.short=MST -US/Pacific.daylight.short=PDT -US/Pacific.generic.short=PT -US/Pacific-New.daylight.short=PDT -US/Pacific-New.generic.short=PT -US/Pacific-New.standard.short=PST -US/Pacific.standard.short=PST -US/Samoa.daylight.short=SDT -US/Samoa.generic.short=ST -US/Samoa.standard.short=SST -UTC.daylight.short=UTC -UTC.generic.short=UTC -UTC.standard.short=UTC -VST.daylight.short=ICST -VST.generic.short=ICT -VST.standard.short=ICT -WET.daylight.short=WEST -WET.generic.short=WET -WET.standard.short=WET -W-SU.daylight.short=MSD -W-SU.generic.short=MT -W-SU.standard.short=MSK -Zulu.daylight.short=UTC -Zulu.generic.short=UTC -Zulu.standard.short=UTC diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_sv.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_sv.properties deleted file mode 100644 index e1db445c4a4..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_sv.properties +++ /dev/null @@ -1,651 +0,0 @@ -ACT.daylight.long=Central sommartid (Nordterritoriet) -ACT.generic.long=Central tid (Nordterritoriet) -ACT.standard.long=Central standardtid (Nordterritoriet) -AET.daylight.long=\u00D6stlig sommartid (New South Wales) -AET.generic.long=\u00D6stlig tid (New South Wales) -AET.standard.long=\u00D6stlig standardtid (New South Wales) -AGT.generic.long=Argentinsk tid -ART.generic.long=\u00D6steuropeisk tid -AST.generic.long=Alaskisk tid -Africa/Abidjan.generic.long=Greenwichtid -Africa/Accra.generic.long=Ghana, normaltid -Africa/Addis_Ababa.generic.long=\u00D6stafrikansk tid -Africa/Algiers.generic.long=Centraleuropeisk tid -Africa/Asmara.generic.long=\u00D6stafrikansk tid -Africa/Asmera.generic.long=\u00D6stafrikansk tid -Africa/Bamako.generic.long=Greenwichtid -Africa/Bangui.generic.long=V\u00E4stafrikansk tid -Africa/Banjul.generic.long=Greenwichtid -Africa/Bissau.generic.long=Greenwichtid -Africa/Blantyre.generic.long=Centralafrikansk tid -Africa/Brazzaville.generic.long=V\u00E4stafrikansk tid -Africa/Bujumbura.generic.long=Centralafrikansk tid -Africa/Cairo.generic.long=\u00D6steuropeisk tid -Africa/Casablanca.generic.long=V\u00E4steuropeisk tid -Africa/Ceuta.generic.long=Centraleuropeisk tid -Africa/Conakry.generic.long=Greenwichtid -Africa/Dakar.generic.long=Greenwichtid -Africa/Dar_es_Salaam.generic.long=\u00D6stafrikansk tid -Africa/Djibouti.generic.long=\u00D6stafrikansk tid -Africa/Douala.generic.long=V\u00E4stafrikansk tid -Africa/El_Aaiun.generic.long=V\u00E4steuropeisk tid -Africa/Freetown.generic.long=Sierra Leone-tid -Africa/Gaborone.generic.long=Centralafrikansk tid -Africa/Harare.generic.long=Centralafrikansk tid -Africa/Johannesburg.generic.long=Sydafrikansk tid -Africa/Juba.generic.long=\u00D6stafrikansk tid -Africa/Kampala.generic.long=\u00D6stafrikansk tid -Africa/Khartoum.generic.long=\u00D6stafrikansk tid -Africa/Kigali.generic.long=Centralafrikansk tid -Africa/Kinshasa.generic.long=V\u00E4stafrikansk tid -Africa/Lagos.generic.long=V\u00E4stafrikansk tid -Africa/Libreville.generic.long=V\u00E4stafrikansk tid -Africa/Lome.generic.long=Greenwichtid -Africa/Luanda.generic.long=V\u00E4stafrikansk tid -Africa/Lubumbashi.generic.long=Centralafrikansk tid -Africa/Lusaka.generic.long=Centralafrikansk tid -Africa/Malabo.generic.long=V\u00E4stafrikansk tid -Africa/Maputo.generic.long=Centralafrikansk tid -Africa/Maseru.generic.long=Sydafrikansk tid -Africa/Mbabane.generic.long=Sydafrikansk tid -Africa/Mogadishu.generic.long=\u00D6stafrikansk tid -Africa/Monrovia.generic.long=Greenwichtid -Africa/Nairobi.generic.long=\u00D6stafrikansk tid -Africa/Ndjamena.generic.long=V\u00E4stafrikansk tid -Africa/Niamey.generic.long=V\u00E4stafrikansk tid -Africa/Nouakchott.generic.long=Greenwichtid -Africa/Ouagadougou.generic.long=Greenwichtid -Africa/Porto-Novo.generic.long=V\u00E4stafrikansk tid -Africa/Sao_Tome.generic.long=Greenwichtid -Africa/Timbuktu.generic.long=Greenwichtid -Africa/Tripoli.generic.long=\u00d6steuropeisk tid -Africa/Tunis.generic.long=Centraleuropeisk tid -Africa/Windhoek.generic.long=V\u00E4stafrikansk tid -America/Adak.generic.long=Hawaiiansk-aleutisk tid -America/Anchorage.generic.long=Alaskisk tid -America/Anguilla.generic.long=Atlantisk tid -America/Antigua.generic.long=Atlantisk tid -America/Araguaina.generic.long=Brasiliansk tid -America/Argentina/Buenos_Aires.generic.long=Argentinsk tid -America/Argentina/Catamarca.generic.long=Argentinsk tid -America/Argentina/ComodRivadavia.generic.long=Argentinsk tid -America/Argentina/Cordoba.generic.long=Argentinsk tid -America/Argentina/Jujuy.generic.long=Argentinsk tid -America/Argentina/La_Rioja.generic.long=Argentinsk tid -America/Argentina/Mendoza.generic.long=Argentinsk tid -America/Argentina/Rio_Gallegos.generic.long=Argentinsk tid -America/Argentina/Salta.generic.long=Argentinsk tid -America/Argentina/San_Juan.generic.long=Argentinsk tid -America/Argentina/San_Luis.generic.long=Argentinsk tid -America/Argentina/Tucuman.generic.long=Argentinsk tid -America/Argentina/Ushuaia.generic.long=Argentinsk tid -America/Aruba.generic.long=Atlantisk tid -America/Asuncion.generic.long=Paraguayansk tid -America/Atikokan.generic.long=\u00D6stlig tid -America/Atka.generic.long=Hawaiiansk-aleutisk tid -America/Bahia.generic.long=Brasiliansk tid -America/Bahia_Banderas.generic.long=Central tid -America/Barbados.generic.long=Atlantisk tid -America/Belem.generic.long=Brasiliansk tid -America/Belize.generic.long=Central tid -America/Blanc-Sablon.generic.long=Atlantisk tid -America/Boa_Vista.generic.long=Amazonas-tid -America/Bogota.generic.long=Kolombiansk tid -America/Boise.generic.long=Mountain-tid -America/Buenos_Aires.generic.long=Argentinsk tid -America/Cambridge_Bay.generic.long=Mountain-tid -America/Campo_Grande.generic.long=Amazonas-tid -America/Cancun.generic.long=Central tid -America/Caracas.generic.long=Venezuelansk tid -America/Catamarca.generic.long=Argentinsk tid -America/Cayenne.generic.long=Franska Guyana-tid -America/Cayman.generic.long=\u00D6stlig tid -America/Chicago.generic.long=Central tid -America/Chihuahua.generic.long=Mountain-tid -America/Coral_Harbour.generic.long=\u00D6stlig tid -America/Cordoba.generic.long=Argentinsk tid -America/Costa_Rica.generic.long=Central tid -America/Creston.generic.long=Mountain-tid -America/Cuiaba.generic.long=Amazonas-tid -America/Curacao.generic.long=Atlantisk tid -America/Danmarkshavn.generic.long=Greenwichtid -America/Dawson.generic.long=Stillahavet -America/Dawson_Creek.generic.long=Mountain-tid -America/Denver.generic.long=Mountain-tid -America/Detroit.generic.long=\u00D6stlig tid -America/Dominica.generic.long=Atlantisk tid -America/Edmonton.generic.long=Mountain-tid -America/Eirunepe.generic.long=Acre, normaltid -America/El_Salvador.generic.long=Central tid -America/Ensenada.generic.long=Stillahavet -America/Fort_Wayne.generic.long=\u00D6stlig tid -America/Fortaleza.generic.long=Brasiliansk tid -America/Glace_Bay.generic.long=Atlantisk tid -America/Godthab.generic.long=V\u00E4stgr\u00F6nl\u00E4ndsk tid -America/Goose_Bay.generic.long=Atlantisk tid -America/Grand_Turk.generic.long=\u00D6stlig tid -America/Grenada.generic.long=Atlantisk tid -America/Guadeloupe.generic.long=Atlantisk tid -America/Guatemala.generic.long=Central tid -America/Guayaquil.generic.long=Ecuadoriansk tid -America/Guyana.generic.long=Guyansk tid -America/Halifax.generic.long=Atlantisk tid -America/Havana.generic.long=Kubansk tid -America/Hermosillo.generic.long=Mountain-tid -America/Indiana/Indianapolis.generic.long=\u00D6stlig tid -America/Indiana/Knox.generic.long=Central tid -America/Indiana/Marengo.generic.long=\u00D6stlig tid -America/Indiana/Petersburg.generic.long=\u00D6stlig tid -America/Indiana/Tell_City.generic.long=Central tid -America/Indiana/Vevay.generic.long=\u00D6stlig tid -America/Indiana/Vincennes.generic.long=\u00D6stlig tid -America/Indiana/Winamac.generic.long=\u00D6stlig tid -America/Indianapolis.generic.long=\u00D6stlig tid -America/Inuvik.generic.long=Mountain-tid -America/Iqaluit.generic.long=\u00D6stlig tid -America/Jamaica.generic.long=\u00D6stlig tid -America/Jujuy.generic.long=Argentinsk tid -America/Juneau.generic.long=Alaskisk tid -America/Kentucky/Louisville.generic.long=\u00D6stlig tid -America/Kentucky/Monticello.generic.long=\u00D6stlig tid -America/Knox_IN.generic.long=Central tid -America/Kralendijk.generic.long=Atlantisk tid -America/La_Paz.generic.long=Boliviansk tid -America/Lima.generic.long=Peruansk tid -America/Los_Angeles.generic.long=Stillahavet -America/Louisville.generic.long=\u00D6stlig tid -America/Lower_Princes.generic.long=Atlantisk tid -America/Maceio.generic.long=Brasiliansk tid -America/Managua.generic.long=Central tid -America/Manaus.generic.long=Amazonas-tid -America/Marigot.generic.long=Atlantisk tid -America/Martinique.generic.long=Atlantisk tid -America/Matamoros.generic.long=Central tid -America/Mazatlan.generic.long=Mountain-tid -America/Mendoza.generic.long=Argentinsk tid -America/Menominee.generic.long=Central tid -America/Merida.generic.long=Central tid -America/Metlakatla.daylight.long=Metlakatla, sommartid -America/Metlakatla.generic.long=Metlakatla-tid -America/Metlakatla.standard.long=Metlakatla, normaltid -America/Mexico_City.generic.long=Central tid -America/Miquelon.generic.long=Saint-Pierre och Miquelons tid -America/Moncton.generic.long=Atlantisk tid -America/Monterrey.generic.long=Central tid -America/Montevideo.generic.long=Uruguayansk tid -America/Montreal.generic.long=\u00D6stlig tid -America/Montserrat.generic.long=Atlantisk tid -America/Nassau.generic.long=\u00D6stlig tid -America/New_York.generic.long=\u00D6stlig tid -America/Nipigon.generic.long=\u00D6stlig tid -America/Nome.generic.long=Alaskisk tid -America/Noronha.generic.long=Fernando de Noronha-tid -America/North_Dakota/Beulah.generic.long=Central tid -America/North_Dakota/Center.generic.long=Central tid -America/North_Dakota/New_Salem.generic.long=Central tid -America/Ojinaga.generic.long=Mountain-tid -America/Panama.generic.long=\u00D6stlig tid -America/Pangnirtung.generic.long=\u00D6stlig tid -America/Paramaribo.generic.long=Surinamsk tid -America/Phoenix.generic.long=Mountain-tid -America/Port-au-Prince.generic.long=\u00D6stlig tid -America/Port_of_Spain.generic.long=Atlantisk tid -America/Porto_Acre.generic.long=Acre, normaltid -America/Porto_Velho.generic.long=Amazonas-tid -America/Puerto_Rico.generic.long=Atlantisk tid -America/Rainy_River.generic.long=Central tid -America/Rankin_Inlet.generic.long=Central tid -America/Recife.generic.long=Brasiliansk tid -America/Regina.generic.long=Central tid -America/Resolute.generic.long=Central tid -America/Rio_Branco.generic.long=Acre, normaltid -America/Rosario.generic.long=Argentinsk tid -America/Santa_Isabel.generic.long=Stillahavet -America/Santarem.generic.long=Brasiliansk tid -America/Santiago.generic.long=Chilensk tid -America/Santo_Domingo.generic.long=Atlantisk tid -America/Sao_Paulo.generic.long=Brasiliansk tid -America/Scoresbysund.generic.long=\u00D6stgr\u00F6nl\u00E4ndsk tid -America/Shiprock.generic.long=Mountain-tid -America/Sitka.generic.long=Alaskisk tid -America/St_Barthelemy.generic.long=Atlantisk tid -America/St_Johns.generic.long=Newfoundl\u00E4ndsk tid -America/St_Kitts.generic.long=Atlantisk tid -America/St_Lucia.generic.long=Atlantisk tid -America/St_Thomas.generic.long=Atlantisk tid -America/St_Vincent.generic.long=Atlantisk tid -America/Swift_Current.generic.long=Central tid -America/Tegucigalpa.generic.long=Central tid -America/Thule.generic.long=Atlantisk tid -America/Thunder_Bay.generic.long=\u00D6stlig tid -America/Tijuana.generic.long=Stillahavet -America/Toronto.generic.long=\u00D6stlig tid -America/Tortola.generic.long=Atlantisk tid -America/Vancouver.generic.long=Stillahavet -America/Virgin.generic.long=Atlantisk tid -America/Whitehorse.generic.long=Stillahavet -America/Winnipeg.generic.long=Central tid -America/Yakutat.generic.long=Alaskisk tid -America/Yellowknife.generic.long=Mountain-tid -Antarctica/Casey.daylight.long=V\u00E4stlig sommartid (Australien) -Antarctica/Casey.generic.long=V\u00E4stlig tid (Australien) -Antarctica/Casey.standard.long=Western Standard Time (Australien) -Antarctica/Davis.generic.long=Davis-tid -Antarctica/DumontDUrville.generic.long=Dumont-d'Urville-tid -Antarctica/Macquarie.daylight.long=Macquarie\u00F6n, sommartid -Antarctica/Macquarie.generic.long=Macquarie\u00F6n, normaltid -Antarctica/Macquarie.standard.long=Macquarie\u00F6n, normaltid -Antarctica/Mawson.generic.long=Mawson-tid -Antarctica/McMurdo.generic.long=Nyzeel\u00E4ndsk tid -Antarctica/Palmer.generic.long=Chilensk tid -Antarctica/Rothera.generic.long=Rothera-tid -Antarctica/South_Pole.generic.long=Nyzeel\u00E4ndsk tid -Antarctica/Syowa.generic.long=Syowa-tid -Antarctica/Vostok.generic.long=Vostok-tid -Arctic/Longyearbyen.generic.long=Centraleuropeisk tid -Asia/Aden.generic.long=Arabisk tid -Asia/Almaty.generic.long=Alma-Ata-tid -Asia/Amman.generic.long=Arabisk tid -Asia/Anadyr.generic.long=Anadyr-tid -Asia/Aqtau.generic.long=Aqtau-tid -Asia/Aqtobe.generic.long=Aqtobe-tid -Asia/Ashgabat.generic.long=Turkmensk tid -Asia/Ashkhabad.generic.long=Turkmensk tid -Asia/Baghdad.generic.long=Arabisk tid -Asia/Bahrain.generic.long=Arabisk tid -Asia/Baku.generic.long=Azerbajdzjansk tid -Asia/Bangkok.generic.long=Indokinesisk tid -Asia/Beirut.generic.long=\u00D6steuropeisk tid -Asia/Bishkek.generic.long=Kirgizisk tid -Asia/Brunei.generic.long=Bruneisk tid -Asia/Calcutta.generic.long=Indisk tid -Asia/Choibalsan.generic.long=Choibalsan-tid -Asia/Chongqing.generic.long=Kinesisk tid -Asia/Chungking.generic.long=Kinesisk tid -Asia/Colombo.generic.long=Indisk tid -Asia/Dacca.generic.long=Bangladeshisk tid -Asia/Damascus.generic.long=\u00D6steuropeisk tid -Asia/Dhaka.generic.long=Bangladeshisk tid -Asia/Dili.generic.long=\u00D6sttimor, normaltid -Asia/Dubai.generic.long=Golfens tid -Asia/Dushanbe.generic.long=Tadzjikisk tid -Asia/Gaza.generic.long=\u00D6steuropeisk tid -Asia/Harbin.generic.long=Kinesisk tid -Asia/Hebron.generic.long=\u00D6steuropeisk tid -Asia/Ho_Chi_Minh.generic.long=Indokinesisk tid -Asia/Hong_Kong.generic.long=Hongkong-tid -Asia/Hovd.generic.long=Hovd-tid -Asia/Irkutsk.generic.long=Irkutsk-tid -Asia/Istanbul.generic.long=\u00D6steuropeisk tid -Asia/Jakarta.generic.long=V\u00E4stindonesisk tid -Asia/Jayapura.generic.long=\u00D6stindonesisk tid -Asia/Jerusalem.generic.long=Israelisk tid -Asia/Kabul.generic.long=Afghansk tid -Asia/Kamchatka.generic.long=Petropavlovsk-Kamtjatskij-tid -Asia/Karachi.generic.long=Pakistansk tid -Asia/Kashgar.generic.long=Kinesisk tid -Asia/Kathmandu.generic.long=Nepalesisk tid -Asia/Katmandu.generic.long=Nepalesisk tid -Asia/Khandyga.daylight.long=Khandyga, sommartid -Asia/Khandyga.generic.long=Khandyga, normaltid -Asia/Khandyga.standard.long=Khandyga, normaltid -Asia/Kolkata.generic.long=Indisk tid -Asia/Krasnoyarsk.generic.long=Krasnojarsk-tid -Asia/Kuala_Lumpur.generic.long=Malaysisk tid -Asia/Kuching.generic.long=Malaysisk tid -Asia/Kuwait.generic.long=Arabisk tid -Asia/Macao.generic.long=Kinesisk tid -Asia/Macau.generic.long=Kinesisk tid -Asia/Magadan.generic.long=Magadan-tid -Asia/Makassar.generic.long=Centralindonesisk tid -Asia/Manila.generic.long=Filippinsk tid -Asia/Muscat.generic.long=Golfens tid -Asia/Nicosia.generic.long=\u00D6steuropeisk tid -Asia/Novokuznetsk.generic.long=Sibirisk tid -Asia/Novosibirsk.generic.long=Sibirisk tid -Asia/Omsk.generic.long=Omsk-tid -Asia/Oral.generic.long=Oral-tid -Asia/Phnom_Penh.generic.long=Indokinesisk tid -Asia/Pontianak.generic.long=V\u00E4stindonesisk tid -Asia/Pyongyang.generic.long=Koreansk tid -Asia/Qatar.generic.long=Arabisk tid -Asia/Qyzylorda.generic.long=Qyzylorda-tid -Asia/Rangoon.generic.long=Myanmar-tid -Asia/Saigon.generic.long=Indokinesisk tid -Asia/Sakhalin.generic.long=Sakhalin-tid -Asia/Samarkand.generic.long=Uzbekisk tid -Asia/Seoul.generic.long=Koreansk tid -Asia/Shanghai.generic.long=Kinesisk tid -Asia/Singapore.generic.long=Singapore-tid -Asia/Taipei.generic.long=Kinesisk tid -Asia/Tashkent.generic.long=Uzbekisk tid -Asia/Tbilisi.generic.long=Georgisk tid -Asia/Tehran.generic.long=Iransk tid -Asia/Tel_Aviv.generic.long=Israelisk tid -Asia/Thimbu.generic.long=Bhutanesisk tid -Asia/Thimphu.generic.long=Bhutanesisk tid -Asia/Tokyo.generic.long=Japansk tid -Asia/Ujung_Pandang.generic.long=Centralindonesisk tid -Asia/Ulaanbaatar.generic.long=Ulaanbaatar-tid -Asia/Ulan_Bator.generic.long=Ulaanbaatar-tid -Asia/Urumqi.generic.long=Kinesisk tid -Asia/Ust-Nera.daylight.long=Ust-Nera, sommartid -Asia/Ust-Nera.generic.long=Ust-Nera, normaltid -Asia/Ust-Nera.standard.long=Ust-Nera, normaltid -Asia/Vientiane.generic.long=Indokinesisk tid -Asia/Vladivostok.generic.long=Vladivostok-tid -Asia/Yakutsk.generic.long=Jakutsk-tid -Asia/Yekaterinburg.generic.long=Jekaterinburg-tid -Asia/Yerevan.generic.long=Armenisk tid -Atlantic/Azores.generic.long=Azorerna-tid -Atlantic/Bermuda.generic.long=Atlantisk tid -Atlantic/Canary.generic.long=V\u00E4steuropeisk tid -Atlantic/Cape_Verde.generic.long=Kap Verde-tid -Atlantic/Faeroe.generic.long=V\u00E4steuropeisk tid -Atlantic/Faroe.generic.long=V\u00E4steuropeisk tid -Atlantic/Jan_Mayen.generic.long=Centraleuropeisk tid -Atlantic/Madeira.generic.long=V\u00E4steuropeisk tid -Atlantic/Reykjavik.generic.long=Greenwichtid -Atlantic/South_Georgia.generic.long=Sydgeorgisk tid -Atlantic/St_Helena.generic.long=Greenwichtid -Atlantic/Stanley.generic.long=Falklands\u00F6arna-tid -Australia/ACT.daylight.long=\u00D6stlig sommartid (New South Wales) -Australia/ACT.generic.long=\u00D6stlig tid (New South Wales) -Australia/ACT.standard.long=\u00D6stlig standardtid (New South Wales) -Australia/Adelaide.daylight.long=Central sommartid (South Australia) -Australia/Adelaide.generic.long=Central tid (Sydaustralien) -Australia/Adelaide.standard.long=Central standardtid (Sydaustralien) -Australia/Brisbane.daylight.long=\u00D6stlig sommartid (Queensland) -Australia/Brisbane.generic.long=\u00D6stlig tid (Queensland) -Australia/Brisbane.standard.long=\u00D6stlig standardtid (Queensland) -Australia/Broken_Hill.daylight.long=Central sommartid (South Australia/New South Wales) -Australia/Broken_Hill.generic.long=Central tid (Sydaustralien/New South Wales) -Australia/Broken_Hill.standard.long=Central standardtid (Sydaustralien/New South Wales) -Australia/Canberra.daylight.long=\u00D6stlig sommartid (New South Wales) -Australia/Canberra.generic.long=\u00D6stlig tid (New South Wales) -Australia/Canberra.standard.long=\u00D6stlig standardtid (New South Wales) -Australia/Currie.daylight.long=\u00D6stlig sommartid (New South Wales) -Australia/Currie.generic.long=\u00D6stlig tid (New South Wales) -Australia/Currie.standard.long=\u00D6stlig standardtid (New South Wales) -Australia/Darwin.daylight.long=Central sommartid (Nordterritoriet) -Australia/Darwin.generic.long=Central tid (Nordterritoriet) -Australia/Darwin.standard.long=Central standardtid (Nordterritoriet) -Australia/Eucla.daylight.long=Central v\u00E4stlig sommartid (Australien) -Australia/Eucla.generic.long=Central v\u00E4stlig tid (Australien) -Australia/Eucla.standard.long=Central v\u00E4stlig normaltid (Australien) -Australia/Hobart.daylight.long=\u00D6stlig sommartid (Tasmanien) -Australia/Hobart.generic.long=\u00D6stlig tid (Tasmania) -Australia/Hobart.standard.long=\u00D6stlig standardtid (Tasmania) -Australia/LHI.generic.long=Lord Howe-tid -Australia/Lindeman.daylight.long=\u00D6stlig sommartid (Queensland) -Australia/Lindeman.generic.long=\u00D6stlig tid (Queensland) -Australia/Lindeman.standard.long=\u00D6stlig standardtid (Queensland) -Australia/Lord_Howe.generic.long=Lord Howe-tid -Australia/Melbourne.daylight.long=\u00D6stlig sommartid (Victoria) -Australia/Melbourne.generic.long=\u00D6stlig tid (Victoria) -Australia/Melbourne.standard.long=\u00D6stlig standardtid (Victoria) -Australia/NSW.daylight.long=\u00D6stlig sommartid (New South Wales) -Australia/NSW.generic.long=\u00D6stlig tid (New South Wales) -Australia/NSW.standard.long=\u00D6stlig standardtid (New South Wales) -Australia/North.daylight.long=Central sommartid (Nordterritoriet) -Australia/North.generic.long=Central tid (Nordterritoriet) -Australia/North.standard.long=Central standardtid (Nordterritoriet) -Australia/Perth.daylight.long=V\u00E4stlig sommartid (Australien) -Australia/Perth.generic.long=V\u00E4stlig tid (Australien) -Australia/Perth.standard.long=Western Standard Time (Australien) -Australia/Queensland.daylight.long=\u00D6stlig sommartid (Queensland) -Australia/Queensland.generic.long=\u00D6stlig tid (Queensland) -Australia/Queensland.standard.long=\u00D6stlig standardtid (Queensland) -Australia/South.daylight.long=Central sommartid (South Australia) -Australia/South.generic.long=Central tid (Sydaustralien) -Australia/South.standard.long=Central standardtid (Sydaustralien) -Australia/Sydney.daylight.long=\u00D6stlig sommartid (New South Wales) -Australia/Sydney.generic.long=\u00D6stlig tid (New South Wales) -Australia/Sydney.standard.long=\u00D6stlig standardtid (New South Wales) -Australia/Tasmania.daylight.long=\u00D6stlig sommartid (Tasmanien) -Australia/Tasmania.generic.long=\u00D6stlig tid (Tasmania) -Australia/Tasmania.standard.long=\u00D6stlig standardtid (Tasmania) -Australia/Victoria.daylight.long=\u00D6stlig sommartid (Victoria) -Australia/Victoria.generic.long=\u00D6stlig tid (Victoria) -Australia/Victoria.standard.long=\u00D6stlig standardtid (Victoria) -Australia/West.daylight.long=V\u00E4stlig sommartid (Australien) -Australia/West.generic.long=V\u00E4stlig tid (Australien) -Australia/West.standard.long=Western Standard Time (Australien) -Australia/Yancowinna.daylight.long=Central sommartid (South Australia/New South Wales) -Australia/Yancowinna.generic.long=Central tid (Sydaustralien/New South Wales) -Australia/Yancowinna.standard.long=Central standardtid (Sydaustralien/New South Wales) -BET.generic.long=Brasiliansk tid -BST.generic.long=Bangladeshisk tid -Brazil/Acre.generic.long=Acre, normaltid -Brazil/DeNoronha.generic.long=Fernando de Noronha-tid -Brazil/East.generic.long=Brasiliansk tid -Brazil/West.generic.long=Amazonas-tid -CAT.generic.long=Centralafrikansk tid -CET.generic.long=Centraleuropeisk tid -CNT.generic.long=Newfoundl\u00E4ndsk tid -CST.generic.long=Central tid -CST6CDT.generic.long=Central tid -CTT.generic.long=Kinesisk tid -Canada/Atlantic.generic.long=Atlantisk tid -Canada/Central.generic.long=Central tid -Canada/East-Saskatchewan.generic.long=Central tid -Canada/Eastern.generic.long=\u00D6stlig tid -Canada/Mountain.generic.long=Mountain-tid -Canada/Newfoundland.generic.long=Newfoundl\u00E4ndsk tid -Canada/Pacific.generic.long=Stillahavet -Canada/Saskatchewan.generic.long=Central tid -Canada/Yukon.generic.long=Stillahavet -Chile/Continental.generic.long=Chilensk tid -Chile/EasterIsland.generic.long=P\u00E5sk\u00F6n-tid -Cuba.generic.long=Kubansk tid -EAT.generic.long=\u00D6stafrikansk tid -ECT.generic.long=Centraleuropeisk tid -EET.generic.long=\u00d6steuropeisk tid -EST.generic.long=\u00d6stlig tid -EST5EDT.generic.long=\u00d6stlig tid -Egypt.generic.long=\u00D6steuropeisk tid -Eire.generic.long=Irl\u00E4ndsk tid -Etc/Greenwich.generic.long=Greenwichtid -Etc/UCT.generic.long=UTC (koordinerad v\u00E4rldstid) -Etc/UTC.generic.long=UTC (koordinerad v\u00E4rldstid) -Etc/Universal.generic.long=UTC (koordinerad v\u00E4rldstid) -Etc/Zulu.generic.long=UTC (koordinerad v\u00E4rldstid) -Europe/Amsterdam.generic.long=Centraleuropeisk tid -Europe/Andorra.generic.long=Centraleuropeisk tid -Europe/Athens.generic.long=\u00D6steuropeisk tid -Europe/Belfast.generic.long=Brittisk tid -Europe/Belgrade.generic.long=Centraleuropeisk tid -Europe/Berlin.generic.long=Centraleuropeisk tid -Europe/Bratislava.generic.long=Centraleuropeisk tid -Europe/Brussels.generic.long=Centraleuropeisk tid -Europe/Bucharest.generic.long=\u00D6steuropeisk tid -Europe/Budapest.generic.long=Centraleuropeisk tid -Europe/Busingen.generic.long=Centraleuropeisk tid -Europe/Chisinau.generic.long=\u00D6steuropeisk tid -Europe/Copenhagen.generic.long=Centraleuropeisk tid -Europe/Dublin.generic.long=Irl\u00E4ndsk tid -Europe/Gibraltar.generic.long=Centraleuropeisk tid -Europe/Guernsey.generic.long=Brittisk tid -Europe/Helsinki.generic.long=\u00D6steuropeisk tid -Europe/Isle_of_Man.generic.long=Brittisk tid -Europe/Istanbul.generic.long=\u00D6steuropeisk tid -Europe/Jersey.generic.long=Brittisk tid -Europe/Kaliningrad.daylight.long=\u00D6steuropeisk sommartid -Europe/Kaliningrad.generic.long=Kaliningradtid -Europe/Kaliningrad.standard.long=Kaliningradtid -Europe/Kiev.generic.long=\u00D6steuropeisk tid -Europe/Lisbon.generic.long=V\u00E4steuropeisk tid -Europe/Ljubljana.generic.long=Centraleuropeisk tid -Europe/London.generic.long=Brittisk tid -Europe/Luxembourg.generic.long=Centraleuropeisk tid -Europe/Madrid.generic.long=Centraleuropeisk tid -Europe/Malta.generic.long=Centraleuropeisk tid -Europe/Mariehamn.generic.long=\u00D6steuropeisk tid -Europe/Minsk.daylight.long=\u00D6steuropeisk sommartid -Europe/Minsk.generic.long=Kaliningradtid -Europe/Minsk.standard.long=Kaliningradtid -Europe/Monaco.generic.long=Centraleuropeisk tid -Europe/Moscow.generic.long=Moskvas tid -Europe/Nicosia.generic.long=\u00D6steuropeisk tid -Europe/Oslo.generic.long=Centraleuropeisk tid -Europe/Paris.generic.long=Centraleuropeisk tid -Europe/Podgorica.generic.long=Centraleuropeisk tid -Europe/Prague.generic.long=Centraleuropeisk tid -Europe/Riga.generic.long=\u00D6steuropeisk tid -Europe/Rome.generic.long=Centraleuropeisk tid -Europe/Samara.generic.long=Samara-tid -Europe/San_Marino.generic.long=Centraleuropeisk tid -Europe/Sarajevo.generic.long=Centraleuropeisk tid -Europe/Simferopol.generic.long=\u00D6steuropeisk tid -Europe/Skopje.generic.long=Centraleuropeisk tid -Europe/Sofia.generic.long=\u00D6steuropeisk tid -Europe/Stockholm.generic.long=Centraleuropeisk tid -Europe/Tallinn.generic.long=\u00D6steuropeisk tid -Europe/Tirane.generic.long=Centraleuropeisk tid -Europe/Tiraspol.generic.long=\u00D6steuropeisk tid -Europe/Uzhgorod.generic.long=\u00D6steuropeisk tid -Europe/Vaduz.generic.long=Centraleuropeisk tid -Europe/Vatican.generic.long=Centraleuropeisk tid -Europe/Vienna.generic.long=Centraleuropeisk tid -Europe/Vilnius.generic.long=\u00D6steuropeisk tid -Europe/Volgograd.generic.long=Volgograd, normaltid -Europe/Warsaw.generic.long=Centraleuropeisk tid -Europe/Zagreb.generic.long=Centraleuropeisk tid -Europe/Zaporozhye.generic.long=\u00D6steuropeisk tid -Europe/Zurich.generic.long=Centraleuropeisk tid -GB-Eire.generic.long=Brittisk tid -GB.generic.long=Brittisk tid -GMT.generic.long=Greenwichtid -Greenwich.generic.long=Greenwichtid -HST.generic.long=Hawaiiansk tid -Hongkong.generic.long=Hongkong-tid -IET.generic.long=\u00D6stlig tid -IST.generic.long=Indisk tid -Iceland.generic.long=Greenwichtid -Indian/Antananarivo.generic.long=\u00D6stafrikansk tid -Indian/Chagos.generic.long=Indiska Ocean\u00F6arna-tid -Indian/Christmas.generic.long=Jul\u00F6n-tid -Indian/Cocos.generic.long=Kokos\u00F6arna-tid -Indian/Comoro.generic.long=\u00D6stafrikansk tid -Indian/Kerguelen.generic.long=Franska s\u00F6dra och antarktiska \u00F6arna-tid -Indian/Mahe.generic.long=Seychellisk tid -Indian/Maldives.generic.long=Maldivisk tid -Indian/Mauritius.generic.long=Mauritiansk tid -Indian/Mayotte.generic.long=\u00D6stafrikansk tid -Indian/Reunion.generic.long=Reunion-tid -Iran.generic.long=Iransk tid -Israel.generic.long=Israelisk tid -JST.generic.long=Japansk tid -Jamaica.generic.long=\u00D6stlig tid -Japan.generic.long=Japansk tid -Kwajalein.generic.long=Marshall\u00F6arna-tid -Libya.generic.long=\u00d6steuropeisk tid -MET.generic.long=MET -MIT.generic.long=V\u00E4stsamoansk tid -MST.generic.long=Mountain-tid -MST7MDT.generic.long=Mountain-tid -Mexico/BajaNorte.generic.long=Stillahavet -Mexico/BajaSur.generic.long=Mountain-tid -Mexico/General.generic.long=Central tid -NET.generic.long=Armenisk tid -NST.generic.long=Nyzeel\u00E4ndsk tid -NZ-CHAT.generic.long=Chathams tid -NZ.generic.long=Nyzeel\u00E4ndsk tid -Navajo.generic.long=Mountain-tid -PLT.generic.long=Pakistansk tid -PNT.generic.long=Mountain-tid -PRC.generic.long=Kinesisk tid -PRT.generic.long=Atlantisk tid -PST.generic.long=Stillahavet -PST8PDT.generic.long=Stillahavet -Pacific/Apia.generic.long=V\u00E4stsamoansk tid -Pacific/Auckland.generic.long=Nyzeel\u00E4ndsk tid -Pacific/Chatham.generic.long=Chathams tid -Pacific/Chuuk.daylight.long=Chuuk, sommartid -Pacific/Chuuk.generic.long=Chuuk, normaltid -Pacific/Chuuk.standard.long=Chuuk, normaltid -Pacific/Easter.generic.long=P\u00E5sk\u00F6n-tid -Pacific/Efate.generic.long=Vanuatu-tid -Pacific/Enderbury.generic.long=Phoenix\u00F6arna-tid -Pacific/Fakaofo.generic.long=Tokelau-tid -Pacific/Fiji.generic.long=Fijiansk tid -Pacific/Funafuti.generic.long=Tuvalu-tid -Pacific/Galapagos.generic.long=Galapagos-tid -Pacific/Gambier.generic.long=Gambier\u00F6arna-tid -Pacific/Guadalcanal.generic.long=Salomon\u00F6arna-tid -Pacific/Guam.generic.long=Chamorros tid -Pacific/Honolulu.generic.long=Hawaiiansk tid -Pacific/Johnston.generic.long=Hawaiiansk tid -Pacific/Kiritimati.generic.long=Line Islands-tid -Pacific/Kosrae.generic.long=Kosrae-tid -Pacific/Kwajalein.generic.long=Marshall\u00F6arna-tid -Pacific/Majuro.generic.long=Marshall\u00F6arna-tid -Pacific/Marquesas.generic.long=Marquesas\u00F6arna-tid -Pacific/Midway.generic.long=Samoansk tid -Pacific/Nauru.generic.long=Nauruansk tid -Pacific/Niue.generic.long=Niue-tid -Pacific/Norfolk.generic.long=Norfolk-tid -Pacific/Noumea.generic.long=Nya Kaledonien-tid -Pacific/Pago_Pago.generic.long=Samoansk tid -Pacific/Palau.generic.long=Palau-tid -Pacific/Pitcairn.generic.long=Pitcairn-tid -Pacific/Pohnpei.daylight.long=Pohnpei, sommartid -Pacific/Pohnpei.generic.long=Ponape-tid -Pacific/Pohnpei.standard.long=Pohnpei, normaltid -Pacific/Ponape.daylight.long=Pohnpei, sommartid -Pacific/Ponape.generic.long=Ponape-tid -Pacific/Ponape.standard.long=Pohnpei, normaltid -Pacific/Port_Moresby.generic.long=Papua Nya Guinea-tid -Pacific/Rarotonga.generic.long=Cook\u00F6arna-tid -Pacific/Saipan.generic.long=Chamorros tid -Pacific/Samoa.generic.long=Samoansk tid -Pacific/Tahiti.generic.long=Tahiti-tid -Pacific/Tarawa.generic.long=Gilbert\u00F6arna-tid -Pacific/Tongatapu.generic.long=Tonga-tid -Pacific/Truk.daylight.long=Chuuk, sommartid -Pacific/Truk.generic.long=Chuuk, normaltid -Pacific/Truk.standard.long=Chuuk, normaltid -Pacific/Wake.generic.long=Wake-tid -Pacific/Wallis.generic.long=Wallis- och Futuna\u00F6arna-tid -Pacific/Yap.daylight.long=Chuuk, sommartid -Pacific/Yap.generic.long=Chuuk, normaltid -Pacific/Yap.standard.long=Chuuk, normaltid -Poland.generic.long=Centraleuropeisk tid -Portugal.generic.long=V\u00E4steuropeisk tid -ROK.generic.long=Koreansk tid -SST.generic.long=Salomon\u00F6arna-tid -Singapore.generic.long=Singapore-tid -SystemV/AST4.generic.long=Atlantisk tid -SystemV/AST4ADT.generic.long=Atlantisk tid -SystemV/CST6.generic.long=Central tid -SystemV/CST6CDT.generic.long=Central tid -SystemV/EST5.generic.long=\u00D6stlig tid -SystemV/EST5EDT.generic.long=\u00D6stlig tid -SystemV/HST10.generic.long=Hawaiiansk tid -SystemV/MST7.generic.long=Mountain-tid -SystemV/MST7MDT.generic.long=Mountain-tid -SystemV/PST8.generic.long=Stillahavet -SystemV/PST8PDT.generic.long=Stillahavet -SystemV/YST9.generic.long=Alaskisk tid -SystemV/YST9YDT.generic.long=Alaskisk tid -Turkey.generic.long=\u00D6steuropeisk tid -UCT.generic.long=UTC (koordinerad v\u00E4rldstid) -US/Alaska.generic.long=Alaskisk tid -US/Aleutian.generic.long=Hawaiiansk-aleutisk tid -US/Arizona.generic.long=Mountain-tid -US/Central.generic.long=Central tid -US/East-Indiana.generic.long=\u00D6stlig tid -US/Eastern.generic.long=\u00D6stlig tid -US/Hawaii.generic.long=Hawaiiansk tid -US/Indiana-Starke.generic.long=Central tid -US/Michigan.generic.long=\u00D6stlig tid -US/Mountain.generic.long=Mountain-tid -US/Pacific-New.generic.long=Stillahavet -US/Pacific.generic.long=Stillahavet -US/Samoa.generic.long=Samoansk tid -UTC.generic.long=UTC (koordinerad v\u00E4rldstid) -Universal.generic.long=UTC (koordinerad v\u00E4rldstid) -VST.generic.long=Indokinesisk tid -W-SU.generic.long=Moskvas tid -WET.generic.long=V\u00e4steuropeisk tid -Zulu.generic.long=UTC (koordinerad v\u00E4rldstid) diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_sv_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_sv_short.properties deleted file mode 100644 index 095522a68d1..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_sv_short.properties +++ /dev/null @@ -1,1743 +0,0 @@ -ACT.daylight.short=CST -ACT.generic.short=CT -ACT.standard.short=CST -AET.daylight.short=EST -AET.generic.short=ET -AET.standard.short=EST -Africa/Abidjan.daylight.short=GMT -Africa/Abidjan.generic.short=GMT -Africa/Abidjan.standard.short=GMT -Africa/Accra.daylight.short=GHST -Africa/Accra.generic.short=GMT -Africa/Accra.standard.short=GMT -Africa/Addis_Ababa.daylight.short=EAST -Africa/Addis_Ababa.generic.short=EAT -Africa/Addis_Ababa.standard.short=EAT -Africa/Algiers.daylight.short=CEST -Africa/Algiers.generic.short=CET -Africa/Algiers.standard.short=CET -Africa/Asmara.daylight.short=EAST -Africa/Asmara.generic.short=EAT -Africa/Asmara.standard.short=EAT -Africa/Asmera.daylight.short=EAST -Africa/Asmera.generic.short=EAT -Africa/Asmera.standard.short=EAT -Africa/Bamako.daylight.short=GMT -Africa/Bamako.generic.short=GMT -Africa/Bamako.standard.short=GMT -Africa/Bangui.daylight.short=WAST -Africa/Bangui.generic.short=WAT -Africa/Bangui.standard.short=WAT -Africa/Banjul.daylight.short=GMT -Africa/Banjul.generic.short=GMT -Africa/Banjul.standard.short=GMT -Africa/Bissau.daylight.short=GMT -Africa/Bissau.generic.short=GMT -Africa/Bissau.standard.short=GMT -Africa/Blantyre.daylight.short=CAST -Africa/Blantyre.generic.short=CAT -Africa/Blantyre.standard.short=CAT -Africa/Brazzaville.daylight.short=WAST -Africa/Brazzaville.generic.short=WAT -Africa/Brazzaville.standard.short=WAT -Africa/Bujumbura.daylight.short=CAST -Africa/Bujumbura.generic.short=CAT -Africa/Bujumbura.standard.short=CAT -Africa/Cairo.daylight.short=EEST -Africa/Cairo.generic.short=EET -Africa/Cairo.standard.short=EET -Africa/Casablanca.daylight.short=WEST -Africa/Casablanca.generic.short=WET -Africa/Casablanca.standard.short=WET -Africa/Ceuta.daylight.short=CEST -Africa/Ceuta.generic.short=CET -Africa/Ceuta.standard.short=CET -Africa/Conakry.daylight.short=GMT -Africa/Conakry.generic.short=GMT -Africa/Conakry.standard.short=GMT -Africa/Dakar.daylight.short=GMT -Africa/Dakar.generic.short=GMT -Africa/Dakar.standard.short=GMT -Africa/Dar_es_Salaam.daylight.short=EAST -Africa/Dar_es_Salaam.generic.short=EAT -Africa/Dar_es_Salaam.standard.short=EAT -Africa/Djibouti.daylight.short=EAST -Africa/Djibouti.generic.short=EAT -Africa/Djibouti.standard.short=EAT -Africa/Douala.daylight.short=WAST -Africa/Douala.generic.short=WAT -Africa/Douala.standard.short=WAT -Africa/El_Aaiun.daylight.short=WEST -Africa/El_Aaiun.generic.short=WET -Africa/El_Aaiun.standard.short=WET -Africa/Freetown.daylight.short=SLST -Africa/Freetown.generic.short=SLT -Africa/Freetown.standard.short=GMT -Africa/Gaborone.daylight.short=CAST -Africa/Gaborone.generic.short=CAT -Africa/Gaborone.standard.short=CAT -Africa/Harare.daylight.short=CAST -Africa/Harare.generic.short=CAT -Africa/Harare.standard.short=CAT -Africa/Johannesburg.daylight.short=SAST -Africa/Johannesburg.generic.short=SAT -Africa/Johannesburg.standard.short=SAST -Africa/Juba.daylight.short=EAST -Africa/Juba.generic.short=EAT -Africa/Juba.standard.short=EAT -Africa/Kampala.daylight.short=EAST -Africa/Kampala.generic.short=EAT -Africa/Kampala.standard.short=EAT -Africa/Khartoum.daylight.short=EAST -Africa/Khartoum.generic.short=EAT -Africa/Khartoum.standard.short=EAT -Africa/Kigali.daylight.short=CAST -Africa/Kigali.generic.short=CAT -Africa/Kigali.standard.short=CAT -Africa/Kinshasa.daylight.short=WAST -Africa/Kinshasa.generic.short=WAT -Africa/Kinshasa.standard.short=WAT -Africa/Lagos.daylight.short=WAST -Africa/Lagos.generic.short=WAT -Africa/Lagos.standard.short=WAT -Africa/Libreville.daylight.short=WAST -Africa/Libreville.generic.short=WAT -Africa/Libreville.standard.short=WAT -Africa/Lome.daylight.short=GMT -Africa/Lome.generic.short=GMT -Africa/Lome.standard.short=GMT -Africa/Luanda.daylight.short=WAST -Africa/Luanda.generic.short=WAT -Africa/Luanda.standard.short=WAT -Africa/Lubumbashi.daylight.short=CAST -Africa/Lubumbashi.generic.short=CAT -Africa/Lubumbashi.standard.short=CAT -Africa/Lusaka.daylight.short=CAST -Africa/Lusaka.generic.short=CAT -Africa/Lusaka.standard.short=CAT -Africa/Malabo.daylight.short=WAST -Africa/Malabo.generic.short=WAT -Africa/Malabo.standard.short=WAT -Africa/Maputo.daylight.short=CAST -Africa/Maputo.generic.short=CAT -Africa/Maputo.standard.short=CAT -Africa/Maseru.daylight.short=SAST -Africa/Maseru.generic.short=SAT -Africa/Maseru.standard.short=SAST -Africa/Mbabane.daylight.short=SAST -Africa/Mbabane.generic.short=SAT -Africa/Mbabane.standard.short=SAST -Africa/Mogadishu.daylight.short=EAST -Africa/Mogadishu.generic.short=EAT -Africa/Mogadishu.standard.short=EAT -Africa/Monrovia.daylight.short=GMT -Africa/Monrovia.generic.short=GMT -Africa/Monrovia.standard.short=GMT -Africa/Nairobi.daylight.short=EAST -Africa/Nairobi.generic.short=EAT -Africa/Nairobi.standard.short=EAT -Africa/Ndjamena.daylight.short=WAST -Africa/Ndjamena.generic.short=WAT -Africa/Ndjamena.standard.short=WAT -Africa/Niamey.daylight.short=WAST -Africa/Niamey.generic.short=WAT -Africa/Niamey.standard.short=WAT -Africa/Nouakchott.daylight.short=GMT -Africa/Nouakchott.generic.short=GMT -Africa/Nouakchott.standard.short=GMT -Africa/Ouagadougou.daylight.short=GMT -Africa/Ouagadougou.generic.short=GMT -Africa/Ouagadougou.standard.short=GMT -Africa/Porto-Novo.daylight.short=WAST -Africa/Porto-Novo.generic.short=WAT -Africa/Porto-Novo.standard.short=WAT -Africa/Sao_Tome.daylight.short=GMT -Africa/Sao_Tome.generic.short=GMT -Africa/Sao_Tome.standard.short=GMT -Africa/Timbuktu.daylight.short=GMT -Africa/Timbuktu.generic.short=GMT -Africa/Timbuktu.standard.short=GMT -Africa/Tripoli.daylight.short=EEST -Africa/Tripoli.generic.short=EET -Africa/Tripoli.standard.short=EET -Africa/Tunis.daylight.short=CEST -Africa/Tunis.generic.short=CET -Africa/Tunis.standard.short=CET -Africa/Windhoek.daylight.short=WAST -Africa/Windhoek.generic.short=WAT -Africa/Windhoek.standard.short=WAT -AGT.daylight.short=ARST -AGT.generic.short=ART -AGT.standard.short=ART -America/Adak.daylight.short=HADT -America/Adak.generic.short=HAT -America/Adak.standard.short=HAST -America/Anchorage.daylight.short=AKDT -America/Anchorage.generic.short=AKT -America/Anchorage.standard.short=AKST -America/Anguilla.daylight.short=ADT -America/Anguilla.generic.short=AT -America/Anguilla.standard.short=AST -America/Antigua.daylight.short=ADT -America/Antigua.generic.short=AT -America/Antigua.standard.short=AST -America/Araguaina.daylight.short=BRST -America/Araguaina.generic.short=BRT -America/Araguaina.standard.short=BRT -America/Argentina/Buenos_Aires.daylight.short=ARST -America/Argentina/Buenos_Aires.generic.short=ART -America/Argentina/Buenos_Aires.standard.short=ART -America/Argentina/Catamarca.daylight.short=ARST -America/Argentina/Catamarca.generic.short=ART -America/Argentina/Catamarca.standard.short=ART -America/Argentina/ComodRivadavia.daylight.short=ARST -America/Argentina/ComodRivadavia.generic.short=ART -America/Argentina/ComodRivadavia.standard.short=ART -America/Argentina/Cordoba.daylight.short=ARST -America/Argentina/Cordoba.generic.short=ART -America/Argentina/Cordoba.standard.short=ART -America/Argentina/Jujuy.daylight.short=ARST -America/Argentina/Jujuy.generic.short=ART -America/Argentina/Jujuy.standard.short=ART -America/Argentina/La_Rioja.daylight.short=ARST -America/Argentina/La_Rioja.generic.short=ART -America/Argentina/La_Rioja.standard.short=ART -America/Argentina/Mendoza.daylight.short=ARST -America/Argentina/Mendoza.generic.short=ART -America/Argentina/Mendoza.standard.short=ART -America/Argentina/Rio_Gallegos.daylight.short=ARST -America/Argentina/Rio_Gallegos.generic.short=ART -America/Argentina/Rio_Gallegos.standard.short=ART -America/Argentina/Salta.daylight.short=ARST -America/Argentina/Salta.generic.short=ART -America/Argentina/Salta.standard.short=ART -America/Argentina/San_Juan.daylight.short=ARST -America/Argentina/San_Juan.generic.short=ART -America/Argentina/San_Juan.standard.short=ART -America/Argentina/San_Luis.daylight.short=ARST -America/Argentina/San_Luis.generic.short=ART -America/Argentina/San_Luis.standard.short=ART -America/Argentina/Tucuman.daylight.short=ARST -America/Argentina/Tucuman.generic.short=ART -America/Argentina/Tucuman.standard.short=ART -America/Argentina/Ushuaia.daylight.short=ARST -America/Argentina/Ushuaia.generic.short=ART -America/Argentina/Ushuaia.standard.short=ART -America/Aruba.daylight.short=ADT -America/Aruba.generic.short=AT -America/Aruba.standard.short=AST -America/Asuncion.daylight.short=PYST -America/Asuncion.generic.short=PYT -America/Asuncion.standard.short=PYT -America/Atikokan.daylight.short=EDT -America/Atikokan.generic.short=ET -America/Atikokan.standard.short=EST -America/Atka.daylight.short=HADT -America/Atka.generic.short=HAT -America/Atka.standard.short=HAST -America/Bahia_Banderas.daylight.short=CDT -America/Bahia_Banderas.generic.short=CT -America/Bahia_Banderas.standard.short=CST -America/Bahia.daylight.short=BRST -America/Bahia.generic.short=BRT -America/Bahia.standard.short=BRT -America/Barbados.daylight.short=ADT -America/Barbados.generic.short=AT -America/Barbados.standard.short=AST -America/Belem.daylight.short=BRST -America/Belem.generic.short=BRT -America/Belem.standard.short=BRT -America/Belize.daylight.short=CDT -America/Belize.generic.short=CT -America/Belize.standard.short=CST -America/Blanc-Sablon.daylight.short=ADT -America/Blanc-Sablon.generic.short=AT -America/Blanc-Sablon.standard.short=AST -America/Boa_Vista.daylight.short=AMST -America/Boa_Vista.generic.short=AMT -America/Boa_Vista.standard.short=AMT -America/Bogota.daylight.short=COST -America/Bogota.generic.short=COT -America/Bogota.standard.short=COT -America/Boise.daylight.short=MDT -America/Boise.generic.short=MT -America/Boise.standard.short=MST -America/Buenos_Aires.daylight.short=ARST -America/Buenos_Aires.generic.short=ART -America/Buenos_Aires.standard.short=ART -America/Cambridge_Bay.daylight.short=MDT -America/Cambridge_Bay.generic.short=MT -America/Cambridge_Bay.standard.short=MST -America/Campo_Grande.daylight.short=AMST -America/Campo_Grande.generic.short=AMT -America/Campo_Grande.standard.short=AMT -America/Cancun.daylight.short=CDT -America/Cancun.generic.short=CT -America/Cancun.standard.short=CST -America/Caracas.daylight.short=VEST -America/Caracas.generic.short=VET -America/Caracas.standard.short=VET -America/Catamarca.daylight.short=ARST -America/Catamarca.generic.short=ART -America/Catamarca.standard.short=ART -America/Cayenne.daylight.short=GFST -America/Cayenne.generic.short=GFT -America/Cayenne.standard.short=GFT -America/Cayman.daylight.short=EDT -America/Cayman.generic.short=ET -America/Cayman.standard.short=EST -America/Chicago.daylight.short=CDT -America/Chicago.generic.short=CT -America/Chicago.standard.short=CST -America/Chihuahua.daylight.short=MDT -America/Chihuahua.generic.short=MT -America/Chihuahua.standard.short=MST -America/Coral_Harbour.daylight.short=EDT -America/Coral_Harbour.generic.short=ET -America/Coral_Harbour.standard.short=EST -America/Cordoba.daylight.short=ARST -America/Cordoba.generic.short=ART -America/Cordoba.standard.short=ART -America/Costa_Rica.daylight.short=CDT -America/Costa_Rica.generic.short=CT -America/Costa_Rica.standard.short=CST -America/Creston.daylight.short=MDT -America/Creston.generic.short=MT -America/Creston.standard.short=MST -America/Cuiaba.daylight.short=AMST -America/Cuiaba.generic.short=AMT -America/Cuiaba.standard.short=AMT -America/Curacao.daylight.short=ADT -America/Curacao.generic.short=AT -America/Curacao.standard.short=AST -America/Danmarkshavn.daylight.short=GMT -America/Danmarkshavn.generic.short=GMT -America/Danmarkshavn.standard.short=GMT -America/Dawson_Creek.daylight.short=MDT -America/Dawson_Creek.generic.short=MT -America/Dawson_Creek.standard.short=MST -America/Dawson.daylight.short=PDT -America/Dawson.generic.short=PT -America/Dawson.standard.short=PST -America/Denver.daylight.short=MDT -America/Denver.generic.short=MT -America/Denver.standard.short=MST -America/Detroit.daylight.short=EDT -America/Detroit.generic.short=ET -America/Detroit.standard.short=EST -America/Dominica.daylight.short=ADT -America/Dominica.generic.short=AT -America/Dominica.standard.short=AST -America/Edmonton.daylight.short=MDT -America/Edmonton.generic.short=MT -America/Edmonton.standard.short=MST -America/Eirunepe.daylight.short=ACST -America/Eirunepe.generic.short=ACT -America/Eirunepe.standard.short=ACT -America/El_Salvador.daylight.short=CDT -America/El_Salvador.generic.short=CT -America/El_Salvador.standard.short=CST -America/Ensenada.daylight.short=PDT -America/Ensenada.generic.short=PT -America/Ensenada.standard.short=PST -America/Fortaleza.daylight.short=BRST -America/Fortaleza.generic.short=BRT -America/Fortaleza.standard.short=BRT -America/Fort_Wayne.daylight.short=EDT -America/Fort_Wayne.generic.short=ET -America/Fort_Wayne.standard.short=EST -America/Glace_Bay.daylight.short=ADT -America/Glace_Bay.generic.short=AT -America/Glace_Bay.standard.short=AST -America/Godthab.daylight.short=WGST -America/Godthab.generic.short=WGT -America/Godthab.standard.short=WGT -America/Goose_Bay.daylight.short=ADT -America/Goose_Bay.generic.short=AT -America/Goose_Bay.standard.short=AST -America/Grand_Turk.daylight.short=EDT -America/Grand_Turk.generic.short=ET -America/Grand_Turk.standard.short=EST -America/Grenada.daylight.short=ADT -America/Grenada.generic.short=AT -America/Grenada.standard.short=AST -America/Guadeloupe.daylight.short=ADT -America/Guadeloupe.generic.short=AT -America/Guadeloupe.standard.short=AST -America/Guatemala.daylight.short=CDT -America/Guatemala.generic.short=CT -America/Guatemala.standard.short=CST -America/Guayaquil.daylight.short=ECST -America/Guayaquil.generic.short=ECT -America/Guayaquil.standard.short=ECT -America/Guyana.daylight.short=GYST -America/Guyana.generic.short=GYT -America/Guyana.standard.short=GYT -America/Halifax.daylight.short=ADT -America/Halifax.generic.short=AT -America/Halifax.standard.short=AST -America/Havana.daylight.short=CDT -America/Havana.generic.short=CT -America/Havana.standard.short=CST -America/Hermosillo.daylight.short=MDT -America/Hermosillo.generic.short=MT -America/Hermosillo.standard.short=MST -America/Indiana/Indianapolis.daylight.short=EDT -America/Indiana/Indianapolis.generic.short=ET -America/Indiana/Indianapolis.standard.short=EST -America/Indiana/Knox.daylight.short=CDT -America/Indiana/Knox.generic.short=CT -America/Indiana/Knox.standard.short=CST -America/Indiana/Marengo.daylight.short=EDT -America/Indiana/Marengo.generic.short=ET -America/Indiana/Marengo.standard.short=EST -America/Indiana/Petersburg.daylight.short=EDT -America/Indiana/Petersburg.generic.short=ET -America/Indiana/Petersburg.standard.short=EST -America/Indianapolis.daylight.short=EDT -America/Indianapolis.generic.short=ET -America/Indianapolis.standard.short=EST -America/Indiana/Tell_City.daylight.short=CDT -America/Indiana/Tell_City.generic.short=CT -America/Indiana/Tell_City.standard.short=CST -America/Indiana/Vevay.daylight.short=EDT -America/Indiana/Vevay.generic.short=ET -America/Indiana/Vevay.standard.short=EST -America/Indiana/Vincennes.daylight.short=EDT -America/Indiana/Vincennes.generic.short=ET -America/Indiana/Vincennes.standard.short=EST -America/Indiana/Winamac.daylight.short=EDT -America/Indiana/Winamac.generic.short=ET -America/Indiana/Winamac.standard.short=EST -America/Inuvik.daylight.short=MDT -America/Inuvik.generic.short=MT -America/Inuvik.standard.short=MST -America/Iqaluit.daylight.short=EDT -America/Iqaluit.generic.short=ET -America/Iqaluit.standard.short=EST -America/Jamaica.daylight.short=EDT -America/Jamaica.generic.short=ET -America/Jamaica.standard.short=EST -America/Jujuy.daylight.short=ARST -America/Jujuy.generic.short=ART -America/Jujuy.standard.short=ART -America/Juneau.daylight.short=AKDT -America/Juneau.generic.short=AKT -America/Juneau.standard.short=AKST -America/Kentucky/Louisville.daylight.short=EDT -America/Kentucky/Louisville.generic.short=ET -America/Kentucky/Louisville.standard.short=EST -America/Kentucky/Monticello.daylight.short=EDT -America/Kentucky/Monticello.generic.short=ET -America/Kentucky/Monticello.standard.short=EST -America/Knox_IN.daylight.short=CDT -America/Knox_IN.generic.short=CT -America/Knox_IN.standard.short=CST -America/Kralendijk.daylight.short=ADT -America/Kralendijk.generic.short=AT -America/Kralendijk.standard.short=AST -America/La_Paz.daylight.short=BOST -America/La_Paz.generic.short=BOT -America/La_Paz.standard.short=BOT -America/Lima.daylight.short=PEST -America/Lima.generic.short=PET -America/Lima.standard.short=PET -America/Los_Angeles.daylight.short=PDT -America/Los_Angeles.generic.short=PT -America/Los_Angeles.standard.short=PST -America/Louisville.daylight.short=EDT -America/Louisville.generic.short=ET -America/Louisville.standard.short=EST -America/Lower_Princes.daylight.short=ADT -America/Lower_Princes.generic.short=AT -America/Lower_Princes.standard.short=AST -America/Maceio.daylight.short=BRST -America/Maceio.generic.short=BRT -America/Maceio.standard.short=BRT -America/Managua.daylight.short=CDT -America/Managua.generic.short=CT -America/Managua.standard.short=CST -America/Manaus.daylight.short=AMST -America/Manaus.generic.short=AMT -America/Manaus.standard.short=AMT -America/Marigot.daylight.short=ADT -America/Marigot.generic.short=AT -America/Marigot.standard.short=AST -America/Martinique.daylight.short=ADT -America/Martinique.generic.short=AT -America/Martinique.standard.short=AST -America/Matamoros.daylight.short=CDT -America/Matamoros.generic.short=CT -America/Matamoros.standard.short=CST -America/Mazatlan.daylight.short=MDT -America/Mazatlan.generic.short=MT -America/Mazatlan.standard.short=MST -America/Mendoza.daylight.short=ARST -America/Mendoza.generic.short=ART -America/Mendoza.standard.short=ART -America/Menominee.daylight.short=CDT -America/Menominee.generic.short=CT -America/Menominee.standard.short=CST -America/Merida.daylight.short=CDT -America/Merida.generic.short=CT -America/Merida.standard.short=CST -America/Metlakatla.daylight.short=MeDT -America/Metlakatla.generic.short=MeT -America/Metlakatla.standard.short=MeST -America/Mexico_City.daylight.short=CDT -America/Mexico_City.generic.short=CT -America/Mexico_City.standard.short=CST -America/Miquelon.daylight.short=PMDT -America/Miquelon.generic.short=PMT -America/Miquelon.standard.short=PMST -America/Moncton.daylight.short=ADT -America/Moncton.generic.short=AT -America/Moncton.standard.short=AST -America/Monterrey.daylight.short=CDT -America/Monterrey.generic.short=CT -America/Monterrey.standard.short=CST -America/Montevideo.daylight.short=UYST -America/Montevideo.generic.short=UYT -America/Montevideo.standard.short=UYT -America/Montreal.daylight.short=EDT -America/Montreal.generic.short=ET -America/Montreal.standard.short=EST -America/Montserrat.daylight.short=ADT -America/Montserrat.generic.short=AT -America/Montserrat.standard.short=AST -America/Nassau.daylight.short=EDT -America/Nassau.generic.short=ET -America/Nassau.standard.short=EST -America/New_York.daylight.short=EDT -America/New_York.generic.short=ET -America/New_York.standard.short=EST -America/Nipigon.daylight.short=EDT -America/Nipigon.generic.short=ET -America/Nipigon.standard.short=EST -America/Nome.daylight.short=AKDT -America/Nome.generic.short=AKT -America/Nome.standard.short=AKST -America/Noronha.daylight.short=FNST -America/Noronha.generic.short=FNT -America/Noronha.standard.short=FNT -America/North_Dakota/Beulah.daylight.short=CDT -America/North_Dakota/Beulah.generic.short=CT -America/North_Dakota/Beulah.standard.short=CST -America/North_Dakota/Center.daylight.short=CDT -America/North_Dakota/Center.generic.short=CT -America/North_Dakota/Center.standard.short=CST -America/North_Dakota/New_Salem.daylight.short=CDT -America/North_Dakota/New_Salem.generic.short=CT -America/North_Dakota/New_Salem.standard.short=CST -America/Ojinaga.daylight.short=MDT -America/Ojinaga.generic.short=MT -America/Ojinaga.standard.short=MST -America/Panama.daylight.short=EDT -America/Panama.generic.short=ET -America/Panama.standard.short=EST -America/Pangnirtung.daylight.short=EDT -America/Pangnirtung.generic.short=ET -America/Pangnirtung.standard.short=EST -America/Paramaribo.daylight.short=SRST -America/Paramaribo.generic.short=SRT -America/Paramaribo.standard.short=SRT -America/Phoenix.daylight.short=MDT -America/Phoenix.generic.short=MT -America/Phoenix.standard.short=MST -America/Port-au-Prince.daylight.short=EDT -America/Port-au-Prince.generic.short=ET -America/Port-au-Prince.standard.short=EST -America/Porto_Acre.daylight.short=ACST -America/Porto_Acre.generic.short=ACT -America/Porto_Acre.standard.short=ACT -America/Port_of_Spain.daylight.short=ADT -America/Port_of_Spain.generic.short=AT -America/Port_of_Spain.standard.short=AST -America/Porto_Velho.daylight.short=AMST -America/Porto_Velho.generic.short=AMT -America/Porto_Velho.standard.short=AMT -America/Puerto_Rico.daylight.short=ADT -America/Puerto_Rico.generic.short=AT -America/Puerto_Rico.standard.short=AST -America/Rainy_River.daylight.short=CDT -America/Rainy_River.generic.short=CT -America/Rainy_River.standard.short=CST -America/Rankin_Inlet.daylight.short=CDT -America/Rankin_Inlet.generic.short=CT -America/Rankin_Inlet.standard.short=CST -America/Recife.daylight.short=BRST -America/Recife.generic.short=BRT -America/Recife.standard.short=BRT -America/Regina.daylight.short=CDT -America/Regina.generic.short=CT -America/Regina.standard.short=CST -America/Resolute.daylight.short=CDT -America/Resolute.generic.short=CT -America/Resolute.standard.short=CST -America/Rio_Branco.daylight.short=ACST -America/Rio_Branco.generic.short=ACT -America/Rio_Branco.standard.short=ACT -America/Rosario.daylight.short=ARST -America/Rosario.generic.short=ART -America/Rosario.standard.short=ART -America/Santa_Isabel.daylight.short=PDT -America/Santa_Isabel.generic.short=PT -America/Santa_Isabel.standard.short=PST -America/Santarem.daylight.short=BRST -America/Santarem.generic.short=BRT -America/Santarem.standard.short=BRT -America/Santiago.daylight.short=CLST -America/Santiago.generic.short=CLT -America/Santiago.standard.short=CLT -America/Santo_Domingo.daylight.short=ADT -America/Santo_Domingo.generic.short=AT -America/Santo_Domingo.standard.short=AST -America/Sao_Paulo.daylight.short=BRST -America/Sao_Paulo.generic.short=BRT -America/Sao_Paulo.standard.short=BRT -America/Scoresbysund.daylight.short=EGST -America/Scoresbysund.generic.short=EGT -America/Scoresbysund.standard.short=EGT -America/Shiprock.daylight.short=MDT -America/Shiprock.generic.short=MT -America/Shiprock.standard.short=MST -America/Sitka.daylight.short=AKDT -America/Sitka.generic.short=AKT -America/Sitka.standard.short=AKST -America/St_Barthelemy.daylight.short=ADT -America/St_Barthelemy.generic.short=AT -America/St_Barthelemy.standard.short=AST -America/St_Johns.daylight.short=NDT -America/St_Johns.generic.short=NT -America/St_Johns.standard.short=NST -America/St_Kitts.daylight.short=ADT -America/St_Kitts.generic.short=AT -America/St_Kitts.standard.short=AST -America/St_Lucia.daylight.short=ADT -America/St_Lucia.generic.short=AT -America/St_Lucia.standard.short=AST -America/St_Thomas.daylight.short=ADT -America/St_Thomas.generic.short=AT -America/St_Thomas.standard.short=AST -America/St_Vincent.daylight.short=ADT -America/St_Vincent.generic.short=AT -America/St_Vincent.standard.short=AST -America/Swift_Current.daylight.short=CDT -America/Swift_Current.generic.short=CT -America/Swift_Current.standard.short=CST -America/Tegucigalpa.daylight.short=CDT -America/Tegucigalpa.generic.short=CT -America/Tegucigalpa.standard.short=CST -America/Thule.daylight.short=ADT -America/Thule.generic.short=AT -America/Thule.standard.short=AST -America/Thunder_Bay.daylight.short=EDT -America/Thunder_Bay.generic.short=ET -America/Thunder_Bay.standard.short=EST -America/Tijuana.daylight.short=PDT -America/Tijuana.generic.short=PT -America/Tijuana.standard.short=PST -America/Toronto.daylight.short=EDT -America/Toronto.generic.short=ET -America/Toronto.standard.short=EST -America/Tortola.daylight.short=ADT -America/Tortola.generic.short=AT -America/Tortola.standard.short=AST -America/Vancouver.daylight.short=PDT -America/Vancouver.generic.short=PT -America/Vancouver.standard.short=PST -America/Virgin.daylight.short=ADT -America/Virgin.generic.short=AT -America/Virgin.standard.short=AST -America/Whitehorse.daylight.short=PDT -America/Whitehorse.generic.short=PT -America/Whitehorse.standard.short=PST -America/Winnipeg.daylight.short=CDT -America/Winnipeg.generic.short=CT -America/Winnipeg.standard.short=CST -America/Yakutat.daylight.short=AKDT -America/Yakutat.generic.short=AKT -America/Yakutat.standard.short=AKST -America/Yellowknife.daylight.short=MDT -America/Yellowknife.generic.short=MT -America/Yellowknife.standard.short=MST -Antarctica/Casey.daylight.short=WST -Antarctica/Casey.generic.short=WT -Antarctica/Casey.standard.short=WST -Antarctica/Davis.daylight.short=DAVST -Antarctica/Davis.generic.short=DAVT -Antarctica/Davis.standard.short=DAVT -Antarctica/DumontDUrville.daylight.short=DDUST -Antarctica/DumontDUrville.generic.short=DDUT -Antarctica/DumontDUrville.standard.short=DDUT -Antarctica/Macquarie.daylight.short=MIST -Antarctica/Macquarie.generic.short=MIST -Antarctica/Macquarie.standard.short=MIST -Antarctica/Mawson.daylight.short=MAWST -Antarctica/Mawson.generic.short=MAWT -Antarctica/Mawson.standard.short=MAWT -Antarctica/McMurdo.daylight.short=NZDT -Antarctica/McMurdo.generic.short=NZT -Antarctica/McMurdo.standard.short=NZST -Antarctica/Palmer.daylight.short=CLST -Antarctica/Palmer.generic.short=CLT -Antarctica/Palmer.standard.short=CLT -Antarctica/Rothera.daylight.short=ROTST -Antarctica/Rothera.generic.short=ROTT -Antarctica/Rothera.standard.short=ROTT -Antarctica/South_Pole.daylight.short=NZDT -Antarctica/South_Pole.generic.short=NZT -Antarctica/South_Pole.standard.short=NZST -Antarctica/Syowa.daylight.short=SYOST -Antarctica/Syowa.generic.short=SYOT -Antarctica/Syowa.standard.short=SYOT -Antarctica/Vostok.daylight.short=VOSST -Antarctica/Vostok.generic.short=VOST -Antarctica/Vostok.standard.short=VOST -Arctic/Longyearbyen.daylight.short=CEST -Arctic/Longyearbyen.generic.short=CET -Arctic/Longyearbyen.standard.short=CET -ART.daylight.short=EEST -ART.generic.short=EET -ART.standard.short=EET -Asia/Aden.daylight.short=ADT -Asia/Aden.generic.short=AT -Asia/Aden.standard.short=AST -Asia/Almaty.daylight.short=ALMST -Asia/Almaty.generic.short=ALMT -Asia/Almaty.standard.short=ALMT -Asia/Amman.daylight.short=ADT -Asia/Amman.generic.short=AT -Asia/Amman.standard.short=AST -Asia/Anadyr.daylight.short=ANAST -Asia/Anadyr.generic.short=ANAT -Asia/Anadyr.standard.short=ANAT -Asia/Aqtau.daylight.short=AQTST -Asia/Aqtau.generic.short=AQTT -Asia/Aqtau.standard.short=AQTT -Asia/Aqtobe.daylight.short=AQTST -Asia/Aqtobe.generic.short=AQTT -Asia/Aqtobe.standard.short=AQTT -Asia/Ashgabat.daylight.short=TMST -Asia/Ashgabat.generic.short=TMT -Asia/Ashgabat.standard.short=TMT -Asia/Ashkhabad.daylight.short=TMST -Asia/Ashkhabad.generic.short=TMT -Asia/Ashkhabad.standard.short=TMT -Asia/Baghdad.daylight.short=ADT -Asia/Baghdad.generic.short=AT -Asia/Baghdad.standard.short=AST -Asia/Bahrain.daylight.short=ADT -Asia/Bahrain.generic.short=AT -Asia/Bahrain.standard.short=AST -Asia/Baku.daylight.short=AZST -Asia/Baku.generic.short=AZT -Asia/Baku.standard.short=AZT -Asia/Bangkok.daylight.short=ICST -Asia/Bangkok.generic.short=ICT -Asia/Bangkok.standard.short=ICT -Asia/Beirut.daylight.short=EEST -Asia/Beirut.generic.short=EET -Asia/Beirut.standard.short=EET -Asia/Bishkek.daylight.short=KGST -Asia/Bishkek.generic.short=KGT -Asia/Bishkek.standard.short=KGT -Asia/Brunei.daylight.short=BNST -Asia/Brunei.generic.short=BNT -Asia/Brunei.standard.short=BNT -Asia/Calcutta.daylight.short=IDT -Asia/Calcutta.generic.short=IT -Asia/Calcutta.standard.short=IST -Asia/Choibalsan.daylight.short=CHOST -Asia/Choibalsan.generic.short=CHOT -Asia/Choibalsan.standard.short=CHOT -Asia/Chongqing.daylight.short=CDT -Asia/Chongqing.generic.short=CT -Asia/Chongqing.standard.short=CST -Asia/Chungking.daylight.short=CDT -Asia/Chungking.generic.short=CT -Asia/Chungking.standard.short=CST -Asia/Colombo.daylight.short=IDT -Asia/Colombo.generic.short=IT -Asia/Colombo.standard.short=IST -Asia/Dacca.daylight.short=BDST -Asia/Dacca.generic.short=BDT -Asia/Dacca.standard.short=BDT -Asia/Damascus.daylight.short=EEST -Asia/Damascus.generic.short=EET -Asia/Damascus.standard.short=EET -Asia/Dhaka.daylight.short=BDST -Asia/Dhaka.generic.short=BDT -Asia/Dhaka.standard.short=BDT -Asia/Dili.daylight.short=TLST -Asia/Dili.generic.short=TLT -Asia/Dili.standard.short=TLT -Asia/Dubai.daylight.short=GDT -Asia/Dubai.generic.short=GT -Asia/Dubai.standard.short=GST -Asia/Dushanbe.daylight.short=TJST -Asia/Dushanbe.generic.short=TJT -Asia/Dushanbe.standard.short=TJT -Asia/Gaza.daylight.short=EEST -Asia/Gaza.generic.short=EET -Asia/Gaza.standard.short=EET -Asia/Harbin.daylight.short=CDT -Asia/Harbin.generic.short=CT -Asia/Harbin.standard.short=CST -Asia/Hebron.daylight.short=EEST -Asia/Hebron.generic.short=EET -Asia/Hebron.standard.short=EET -Asia/Ho_Chi_Minh.daylight.short=ICST -Asia/Ho_Chi_Minh.generic.short=ICT -Asia/Ho_Chi_Minh.standard.short=ICT -Asia/Hong_Kong.daylight.short=HKST -Asia/Hong_Kong.generic.short=HKT -Asia/Hong_Kong.standard.short=HKT -Asia/Hovd.daylight.short=HOVST -Asia/Hovd.generic.short=HOVT -Asia/Hovd.standard.short=HOVT -Asia/Irkutsk.daylight.short=IRKST -Asia/Irkutsk.generic.short=IRKT -Asia/Irkutsk.standard.short=IRKT -Asia/Istanbul.daylight.short=EEST -Asia/Istanbul.generic.short=EET -Asia/Istanbul.standard.short=EET -Asia/Jakarta.daylight.short=WIST -Asia/Jakarta.generic.short=WIB -Asia/Jakarta.standard.short=WIB -Asia/Jayapura.daylight.short=EIST -Asia/Jayapura.generic.short=WIT -Asia/Jayapura.standard.short=WIT -Asia/Jerusalem.daylight.short=IDT -Asia/Jerusalem.generic.short=IT -Asia/Jerusalem.standard.short=IST -Asia/Kabul.daylight.short=AFST -Asia/Kabul.generic.short=AFT -Asia/Kabul.standard.short=AFT -Asia/Kamchatka.daylight.short=PETST -Asia/Kamchatka.generic.short=PETT -Asia/Kamchatka.standard.short=PETT -Asia/Karachi.daylight.short=PKST -Asia/Karachi.generic.short=PKT -Asia/Karachi.standard.short=PKT -Asia/Kashgar.daylight.short=CDT -Asia/Kashgar.generic.short=CT -Asia/Kashgar.standard.short=CST -Asia/Kathmandu.daylight.short=NPST -Asia/Kathmandu.generic.short=NPT -Asia/Kathmandu.standard.short=NPT -Asia/Katmandu.daylight.short=NPST -Asia/Katmandu.generic.short=NPT -Asia/Katmandu.standard.short=NPT -Asia/Khandyga.daylight.short=YAKST -Asia/Khandyga.generic.short=YAKT -Asia/Khandyga.standard.short=YAKT -Asia/Kolkata.daylight.short=IDT -Asia/Kolkata.generic.short=IT -Asia/Kolkata.standard.short=IST -Asia/Krasnoyarsk.daylight.short=KRAST -Asia/Krasnoyarsk.generic.short=KRAT -Asia/Krasnoyarsk.standard.short=KRAT -Asia/Kuala_Lumpur.daylight.short=MYST -Asia/Kuala_Lumpur.generic.short=MYT -Asia/Kuala_Lumpur.standard.short=MYT -Asia/Kuching.daylight.short=MYST -Asia/Kuching.generic.short=MYT -Asia/Kuching.standard.short=MYT -Asia/Kuwait.daylight.short=ADT -Asia/Kuwait.generic.short=AT -Asia/Kuwait.standard.short=AST -Asia/Macao.daylight.short=CDT -Asia/Macao.generic.short=CT -Asia/Macao.standard.short=CST -Asia/Macau.daylight.short=CDT -Asia/Macau.generic.short=CT -Asia/Macau.standard.short=CST -Asia/Magadan.daylight.short=MAGST -Asia/Magadan.generic.short=MAGT -Asia/Magadan.standard.short=MAGT -Asia/Makassar.daylight.short=CIST -Asia/Makassar.generic.short=WITA -Asia/Makassar.standard.short=WITA -Asia/Manila.daylight.short=PHST -Asia/Manila.generic.short=PHT -Asia/Manila.standard.short=PHT -Asia/Muscat.daylight.short=GDT -Asia/Muscat.generic.short=GT -Asia/Muscat.standard.short=GST -Asia/Nicosia.daylight.short=EEST -Asia/Nicosia.generic.short=EET -Asia/Nicosia.standard.short=EET -Asia/Novokuznetsk.daylight.short=NOVST -Asia/Novokuznetsk.generic.short=NOVT -Asia/Novokuznetsk.standard.short=NOVT -Asia/Novosibirsk.daylight.short=NOVST -Asia/Novosibirsk.generic.short=NOVT -Asia/Novosibirsk.standard.short=NOVT -Asia/Omsk.daylight.short=OMSST -Asia/Omsk.generic.short=OMST -Asia/Omsk.standard.short=OMST -Asia/Oral.daylight.short=ORAST -Asia/Oral.generic.short=ORAT -Asia/Oral.standard.short=ORAT -Asia/Phnom_Penh.daylight.short=ICST -Asia/Phnom_Penh.generic.short=ICT -Asia/Phnom_Penh.standard.short=ICT -Asia/Pontianak.daylight.short=WIST -Asia/Pontianak.generic.short=WIB -Asia/Pontianak.standard.short=WIB -Asia/Pyongyang.daylight.short=KDT -Asia/Pyongyang.generic.short=KT -Asia/Pyongyang.standard.short=KST -Asia/Qatar.daylight.short=ADT -Asia/Qatar.generic.short=AT -Asia/Qatar.standard.short=AST -Asia/Qyzylorda.daylight.short=QYZST -Asia/Qyzylorda.generic.short=QYZT -Asia/Qyzylorda.standard.short=QYZT -Asia/Rangoon.daylight.short=MMST -Asia/Rangoon.generic.short=MMT -Asia/Rangoon.standard.short=MMT -Asia/Saigon.daylight.short=ICST -Asia/Saigon.generic.short=ICT -Asia/Saigon.standard.short=ICT -Asia/Sakhalin.daylight.short=SAKST -Asia/Sakhalin.generic.short=SAKT -Asia/Sakhalin.standard.short=SAKT -Asia/Samarkand.daylight.short=UZST -Asia/Samarkand.generic.short=UZT -Asia/Samarkand.standard.short=UZT -Asia/Seoul.daylight.short=KDT -Asia/Seoul.generic.short=KT -Asia/Seoul.standard.short=KST -Asia/Shanghai.daylight.short=CDT -Asia/Shanghai.generic.short=CT -Asia/Shanghai.standard.short=CST -Asia/Singapore.daylight.short=SGST -Asia/Singapore.generic.short=SGT -Asia/Singapore.standard.short=SGT -Asia/Taipei.daylight.short=CDT -Asia/Taipei.generic.short=CT -Asia/Taipei.standard.short=CST -Asia/Tashkent.daylight.short=UZST -Asia/Tashkent.generic.short=UZT -Asia/Tashkent.standard.short=UZT -Asia/Tbilisi.daylight.short=GEST -Asia/Tbilisi.generic.short=GET -Asia/Tbilisi.standard.short=GET -Asia/Tehran.daylight.short=IRDT -Asia/Tehran.generic.short=IRT -Asia/Tehran.standard.short=IRST -Asia/Tel_Aviv.daylight.short=IDT -Asia/Tel_Aviv.generic.short=IT -Asia/Tel_Aviv.standard.short=IST -Asia/Thimbu.daylight.short=BTST -Asia/Thimbu.generic.short=BTT -Asia/Thimbu.standard.short=BTT -Asia/Thimphu.daylight.short=BTST -Asia/Thimphu.generic.short=BTT -Asia/Thimphu.standard.short=BTT -Asia/Tokyo.daylight.short=JDT -Asia/Tokyo.generic.short=JT -Asia/Tokyo.standard.short=JST -Asia/Ujung_Pandang.daylight.short=CIST -Asia/Ujung_Pandang.generic.short=WITA -Asia/Ujung_Pandang.standard.short=WITA -Asia/Ulaanbaatar.daylight.short=ULAST -Asia/Ulaanbaatar.generic.short=ULAT -Asia/Ulaanbaatar.standard.short=ULAT -Asia/Ulan_Bator.daylight.short=ULAST -Asia/Ulan_Bator.generic.short=ULAT -Asia/Ulan_Bator.standard.short=ULAT -Asia/Urumqi.daylight.short=CDT -Asia/Urumqi.generic.short=CT -Asia/Urumqi.standard.short=CST -Asia/Ust-Nera.daylight.short=VLAST -Asia/Ust-Nera.generic.short=VLAT -Asia/Ust-Nera.standard.short=VLAT -Asia/Vientiane.daylight.short=ICST -Asia/Vientiane.generic.short=ICT -Asia/Vientiane.standard.short=ICT -Asia/Vladivostok.daylight.short=VLAST -Asia/Vladivostok.generic.short=VLAT -Asia/Vladivostok.standard.short=VLAT -Asia/Yakutsk.daylight.short=YAKST -Asia/Yakutsk.generic.short=YAKT -Asia/Yakutsk.standard.short=YAKT -Asia/Yekaterinburg.daylight.short=YEKST -Asia/Yekaterinburg.generic.short=YEKT -Asia/Yekaterinburg.standard.short=YEKT -Asia/Yerevan.daylight.short=AMST -Asia/Yerevan.generic.short=AMT -Asia/Yerevan.standard.short=AMT -AST.daylight.short=AKDT -AST.generic.short=AKT -AST.standard.short=AKST -Atlantic/Azores.daylight.short=AZOST -Atlantic/Azores.generic.short=AZOT -Atlantic/Azores.standard.short=AZOT -Atlantic/Bermuda.daylight.short=ADT -Atlantic/Bermuda.generic.short=AT -Atlantic/Bermuda.standard.short=AST -Atlantic/Canary.daylight.short=WEST -Atlantic/Canary.generic.short=WET -Atlantic/Canary.standard.short=WET -Atlantic/Cape_Verde.daylight.short=CVST -Atlantic/Cape_Verde.generic.short=CVT -Atlantic/Cape_Verde.standard.short=CVT -Atlantic/Faeroe.daylight.short=WEST -Atlantic/Faeroe.generic.short=WET -Atlantic/Faeroe.standard.short=WET -Atlantic/Faroe.daylight.short=WEST -Atlantic/Faroe.generic.short=WET -Atlantic/Faroe.standard.short=WET -Atlantic/Jan_Mayen.daylight.short=CEST -Atlantic/Jan_Mayen.generic.short=CET -Atlantic/Jan_Mayen.standard.short=CET -Atlantic/Madeira.daylight.short=WEST -Atlantic/Madeira.generic.short=WET -Atlantic/Madeira.standard.short=WET -Atlantic/Reykjavik.daylight.short=GMT -Atlantic/Reykjavik.generic.short=GMT -Atlantic/Reykjavik.standard.short=GMT -Atlantic/South_Georgia.daylight.short=GDT -Atlantic/South_Georgia.generic.short=GT -Atlantic/South_Georgia.standard.short=GST -Atlantic/Stanley.daylight.short=FKST -Atlantic/Stanley.generic.short=FKT -Atlantic/Stanley.standard.short=FKT -Atlantic/St_Helena.daylight.short=GMT -Atlantic/St_Helena.generic.short=GMT -Atlantic/St_Helena.standard.short=GMT -Australia/ACT.daylight.short=EST -Australia/ACT.generic.short=ET -Australia/ACT.standard.short=EST -Australia/Adelaide.daylight.short=CST -Australia/Adelaide.generic.short=CT -Australia/Adelaide.standard.short=CST -Australia/Brisbane.daylight.short=EST -Australia/Brisbane.generic.short=ET -Australia/Brisbane.standard.short=EST -Australia/Broken_Hill.daylight.short=CST -Australia/Broken_Hill.generic.short=CT -Australia/Broken_Hill.standard.short=CST -Australia/Canberra.daylight.short=EST -Australia/Canberra.generic.short=ET -Australia/Canberra.standard.short=EST -Australia/Currie.daylight.short=EST -Australia/Currie.generic.short=ET -Australia/Currie.standard.short=EST -Australia/Darwin.daylight.short=CST -Australia/Darwin.generic.short=CT -Australia/Darwin.standard.short=CST -Australia/Eucla.daylight.short=CWST -Australia/Eucla.generic.short=CWT -Australia/Eucla.standard.short=CWST -Australia/Hobart.daylight.short=EST -Australia/Hobart.generic.short=ET -Australia/Hobart.standard.short=EST -Australia/LHI.daylight.short=LHST -Australia/LHI.generic.short=LHT -Australia/LHI.standard.short=LHST -Australia/Lindeman.daylight.short=EST -Australia/Lindeman.generic.short=ET -Australia/Lindeman.standard.short=EST -Australia/Lord_Howe.daylight.short=LHST -Australia/Lord_Howe.generic.short=LHT -Australia/Lord_Howe.standard.short=LHST -Australia/Melbourne.daylight.short=EST -Australia/Melbourne.generic.short=ET -Australia/Melbourne.standard.short=EST -Australia/North.daylight.short=CST -Australia/North.generic.short=CT -Australia/North.standard.short=CST -Australia/NSW.daylight.short=EST -Australia/NSW.generic.short=ET -Australia/NSW.standard.short=EST -Australia/Perth.daylight.short=WST -Australia/Perth.generic.short=WT -Australia/Perth.standard.short=WST -Australia/Queensland.daylight.short=EST -Australia/Queensland.generic.short=ET -Australia/Queensland.standard.short=EST -Australia/South.daylight.short=CST -Australia/South.generic.short=CT -Australia/South.standard.short=CST -Australia/Sydney.daylight.short=EST -Australia/Sydney.generic.short=ET -Australia/Sydney.standard.short=EST -Australia/Tasmania.daylight.short=EST -Australia/Tasmania.generic.short=ET -Australia/Tasmania.standard.short=EST -Australia/Victoria.daylight.short=EST -Australia/Victoria.generic.short=ET -Australia/Victoria.standard.short=EST -Australia/West.daylight.short=WST -Australia/West.generic.short=WT -Australia/West.standard.short=WST -Australia/Yancowinna.daylight.short=CST -Australia/Yancowinna.generic.short=CT -Australia/Yancowinna.standard.short=CST -BET.daylight.short=BRST -BET.generic.short=BRT -BET.standard.short=BRT -Brazil/Acre.daylight.short=ACST -Brazil/Acre.generic.short=ACT -Brazil/Acre.standard.short=ACT -Brazil/DeNoronha.daylight.short=FNST -Brazil/DeNoronha.generic.short=FNT -Brazil/DeNoronha.standard.short=FNT -Brazil/East.daylight.short=BRST -Brazil/East.generic.short=BRT -Brazil/East.standard.short=BRT -Brazil/West.daylight.short=AMST -Brazil/West.generic.short=AMT -Brazil/West.standard.short=AMT -BST.daylight.short=BDST -BST.generic.short=BDT -BST.standard.short=BDT -Canada/Atlantic.daylight.short=ADT -Canada/Atlantic.generic.short=AT -Canada/Atlantic.standard.short=AST -Canada/Central.daylight.short=CDT -Canada/Central.generic.short=CT -Canada/Central.standard.short=CST -Canada/Eastern.daylight.short=EDT -Canada/Eastern.generic.short=ET -Canada/Eastern.standard.short=EST -Canada/East-Saskatchewan.daylight.short=CDT -Canada/East-Saskatchewan.generic.short=CT -Canada/East-Saskatchewan.standard.short=CST -Canada/Mountain.daylight.short=MDT -Canada/Mountain.generic.short=MT -Canada/Mountain.standard.short=MST -Canada/Newfoundland.daylight.short=NDT -Canada/Newfoundland.generic.short=NT -Canada/Newfoundland.standard.short=NST -Canada/Pacific.daylight.short=PDT -Canada/Pacific.generic.short=PT -Canada/Pacific.standard.short=PST -Canada/Saskatchewan.daylight.short=CDT -Canada/Saskatchewan.generic.short=CT -Canada/Saskatchewan.standard.short=CST -Canada/Yukon.daylight.short=PDT -Canada/Yukon.generic.short=PT -Canada/Yukon.standard.short=PST -CAT.daylight.short=CAST -CAT.generic.short=CAT -CAT.standard.short=CAT -CET.daylight.short=CEST -CET.generic.short=CET -CET.standard.short=CET -Chile/Continental.daylight.short=CLST -Chile/Continental.generic.short=CLT -Chile/Continental.standard.short=CLT -Chile/EasterIsland.daylight.short=EASST -Chile/EasterIsland.generic.short=EAST -Chile/EasterIsland.standard.short=EAST -CNT.daylight.short=NDT -CNT.generic.short=NT -CNT.standard.short=NST -CST6CDT.daylight.short=CDT -CST6CDT.generic.short=CT -CST6CDT.standard.short=CST -CST.daylight.short=CDT -CST.generic.short=CT -CST.standard.short=CST -CTT.daylight.short=CDT -CTT.generic.short=CT -CTT.standard.short=CST -Cuba.daylight.short=CDT -Cuba.generic.short=CT -Cuba.standard.short=CST -EAT.daylight.short=EAST -EAT.generic.short=EAT -EAT.standard.short=EAT -ECT.daylight.short=CEST -ECT.generic.short=CET -ECT.standard.short=CET -EET.daylight.short=EEST -EET.generic.short=EET -EET.standard.short=EET -Egypt.daylight.short=EEST -Egypt.generic.short=EET -Egypt.standard.short=EET -Eire.daylight.short=IST -Eire.generic.short=IT -Eire.standard.short=GMT -EST5EDT.daylight.short=EDT -EST5EDT.generic.short=ET -EST5EDT.standard.short=EST -EST.daylight.short=EDT -EST.generic.short=ET -EST.standard.short=EST -Etc/Greenwich.daylight.short=GMT -Etc/Greenwich.generic.short=GMT -Etc/Greenwich.standard.short=GMT -Etc/UCT.daylight.short=UTC -Etc/UCT.generic.short=UTC -Etc/UCT.standard.short=UTC -Etc/Universal.daylight.short=UTC -Etc/Universal.generic.short=UTC -Etc/Universal.standard.short=UTC -Etc/UTC.daylight.short=UTC -Etc/UTC.generic.short=UTC -Etc/UTC.standard.short=UTC -Etc/Zulu.daylight.short=UTC -Etc/Zulu.generic.short=UTC -Etc/Zulu.standard.short=UTC -Europe/Amsterdam.daylight.short=CEST -Europe/Amsterdam.generic.short=CET -Europe/Amsterdam.standard.short=CET -Europe/Andorra.daylight.short=CEST -Europe/Andorra.generic.short=CET -Europe/Andorra.standard.short=CET -Europe/Athens.daylight.short=EEST -Europe/Athens.generic.short=EET -Europe/Athens.standard.short=EET -Europe/Belfast.daylight.short=BST -Europe/Belfast.generic.short=BT -Europe/Belfast.standard.short=GMT -Europe/Belgrade.daylight.short=CEST -Europe/Belgrade.generic.short=CET -Europe/Belgrade.standard.short=CET -Europe/Berlin.daylight.short=CEST -Europe/Berlin.generic.short=CET -Europe/Berlin.standard.short=CET -Europe/Bratislava.daylight.short=CEST -Europe/Bratislava.generic.short=CET -Europe/Bratislava.standard.short=CET -Europe/Brussels.daylight.short=CEST -Europe/Brussels.generic.short=CET -Europe/Brussels.standard.short=CET -Europe/Bucharest.daylight.short=EEST -Europe/Bucharest.generic.short=EET -Europe/Bucharest.standard.short=EET -Europe/Budapest.daylight.short=CEST -Europe/Budapest.generic.short=CET -Europe/Budapest.standard.short=CET -Europe/Busingen.daylight.short=CEST -Europe/Busingen.generic.short=CET -Europe/Busingen.standard.short=CET -Europe/Chisinau.daylight.short=EEST -Europe/Chisinau.generic.short=EET -Europe/Chisinau.standard.short=EET -Europe/Copenhagen.daylight.short=CEST -Europe/Copenhagen.generic.short=CET -Europe/Copenhagen.standard.short=CET -Europe/Dublin.daylight.short=IST -Europe/Dublin.generic.short=IT -Europe/Dublin.standard.short=GMT -Europe/Gibraltar.daylight.short=CEST -Europe/Gibraltar.generic.short=CET -Europe/Gibraltar.standard.short=CET -Europe/Guernsey.daylight.short=BST -Europe/Guernsey.generic.short=BT -Europe/Guernsey.standard.short=GMT -Europe/Helsinki.daylight.short=EEST -Europe/Helsinki.generic.short=EET -Europe/Helsinki.standard.short=EET -Europe/Isle_of_Man.daylight.short=BST -Europe/Isle_of_Man.generic.short=BT -Europe/Isle_of_Man.standard.short=GMT -Europe/Istanbul.daylight.short=EEST -Europe/Istanbul.generic.short=EET -Europe/Istanbul.standard.short=EET -Europe/Jersey.daylight.short=BST -Europe/Jersey.generic.short=BT -Europe/Jersey.standard.short=GMT -Europe/Kaliningrad.daylight.short=FEST -Europe/Kaliningrad.generic.short=FET -Europe/Kaliningrad.standard.short=FET -Europe/Kiev.daylight.short=EEST -Europe/Kiev.generic.short=EET -Europe/Kiev.standard.short=EET -Europe/Lisbon.daylight.short=WEST -Europe/Lisbon.generic.short=WET -Europe/Lisbon.standard.short=WET -Europe/Ljubljana.daylight.short=CEST -Europe/Ljubljana.generic.short=CET -Europe/Ljubljana.standard.short=CET -Europe/London.daylight.short=BST -Europe/London.generic.short=BT -Europe/London.standard.short=GMT -Europe/Luxembourg.daylight.short=CEST -Europe/Luxembourg.generic.short=CET -Europe/Luxembourg.standard.short=CET -Europe/Madrid.daylight.short=CEST -Europe/Madrid.generic.short=CET -Europe/Madrid.standard.short=CET -Europe/Malta.daylight.short=CEST -Europe/Malta.generic.short=CET -Europe/Malta.standard.short=CET -Europe/Mariehamn.daylight.short=EEST -Europe/Mariehamn.generic.short=EET -Europe/Mariehamn.standard.short=EET -Europe/Minsk.daylight.short=FEST -Europe/Minsk.generic.short=FET -Europe/Minsk.standard.short=FET -Europe/Monaco.daylight.short=CEST -Europe/Monaco.generic.short=CET -Europe/Monaco.standard.short=CET -Europe/Moscow.daylight.short=MSD -Europe/Moscow.generic.short=MT -Europe/Moscow.standard.short=MSK -Europe/Nicosia.daylight.short=EEST -Europe/Nicosia.generic.short=EET -Europe/Nicosia.standard.short=EET -Europe/Oslo.daylight.short=CEST -Europe/Oslo.generic.short=CET -Europe/Oslo.standard.short=CET -Europe/Paris.daylight.short=CEST -Europe/Paris.generic.short=CET -Europe/Paris.standard.short=CET -Europe/Podgorica.daylight.short=CEST -Europe/Podgorica.generic.short=CET -Europe/Podgorica.standard.short=CET -Europe/Prague.daylight.short=CEST -Europe/Prague.generic.short=CET -Europe/Prague.standard.short=CET -Europe/Riga.daylight.short=EEST -Europe/Riga.generic.short=EET -Europe/Riga.standard.short=EET -Europe/Rome.daylight.short=CEST -Europe/Rome.generic.short=CET -Europe/Rome.standard.short=CET -Europe/Samara.daylight.short=SAMST -Europe/Samara.generic.short=SAMT -Europe/Samara.standard.short=SAMT -Europe/San_Marino.daylight.short=CEST -Europe/San_Marino.generic.short=CET -Europe/San_Marino.standard.short=CET -Europe/Sarajevo.daylight.short=CEST -Europe/Sarajevo.generic.short=CET -Europe/Sarajevo.standard.short=CET -Europe/Simferopol.daylight.short=EEST -Europe/Simferopol.generic.short=EET -Europe/Simferopol.standard.short=EET -Europe/Skopje.daylight.short=CEST -Europe/Skopje.generic.short=CET -Europe/Skopje.standard.short=CET -Europe/Sofia.daylight.short=EEST -Europe/Sofia.generic.short=EET -Europe/Sofia.standard.short=EET -Europe/Stockholm.daylight.short=CEST -Europe/Stockholm.generic.short=CET -Europe/Stockholm.standard.short=CET -Europe/Tallinn.daylight.short=EEST -Europe/Tallinn.generic.short=EET -Europe/Tallinn.standard.short=EET -Europe/Tirane.daylight.short=CEST -Europe/Tirane.generic.short=CET -Europe/Tirane.standard.short=CET -Europe/Tiraspol.daylight.short=EEST -Europe/Tiraspol.generic.short=EET -Europe/Tiraspol.standard.short=EET -Europe/Uzhgorod.daylight.short=EEST -Europe/Uzhgorod.generic.short=EET -Europe/Uzhgorod.standard.short=EET -Europe/Vaduz.daylight.short=CEST -Europe/Vaduz.generic.short=CET -Europe/Vaduz.standard.short=CET -Europe/Vatican.daylight.short=CEST -Europe/Vatican.generic.short=CET -Europe/Vatican.standard.short=CET -Europe/Vienna.daylight.short=CEST -Europe/Vienna.generic.short=CET -Europe/Vienna.standard.short=CET -Europe/Vilnius.daylight.short=EEST -Europe/Vilnius.generic.short=EET -Europe/Vilnius.standard.short=EET -Europe/Volgograd.daylight.short=VOLST -Europe/Volgograd.generic.short=VOLT -Europe/Volgograd.standard.short=VOLT -Europe/Warsaw.daylight.short=CEST -Europe/Warsaw.generic.short=CET -Europe/Warsaw.standard.short=CET -Europe/Zagreb.daylight.short=CEST -Europe/Zagreb.generic.short=CET -Europe/Zagreb.standard.short=CET -Europe/Zaporozhye.daylight.short=EEST -Europe/Zaporozhye.generic.short=EET -Europe/Zaporozhye.standard.short=EET -Europe/Zurich.daylight.short=CEST -Europe/Zurich.generic.short=CET -Europe/Zurich.standard.short=CET -GB.daylight.short=BST -GB-Eire.daylight.short=BST -GB-Eire.generic.short=BT -GB-Eire.standard.short=GMT -GB.generic.short=BT -GB.standard.short=GMT -GMT.daylight.short=GMT -GMT.generic.short=GMT -GMT.standard.short=GMT -Greenwich.daylight.short=GMT -Greenwich.generic.short=GMT -Greenwich.standard.short=GMT -Hongkong.daylight.short=HKST -Hongkong.generic.short=HKT -Hongkong.standard.short=HKT -HST.daylight.short=HDT -HST.generic.short=HT -HST.standard.short=HST -Iceland.daylight.short=GMT -Iceland.generic.short=GMT -Iceland.standard.short=GMT -IET.daylight.short=EDT -IET.generic.short=ET -IET.standard.short=EST -Indian/Antananarivo.daylight.short=EAST -Indian/Antananarivo.generic.short=EAT -Indian/Antananarivo.standard.short=EAT -Indian/Chagos.daylight.short=IOST -Indian/Chagos.generic.short=IOT -Indian/Chagos.standard.short=IOT -Indian/Christmas.daylight.short=CXST -Indian/Christmas.generic.short=CIT -Indian/Christmas.standard.short=CXT -Indian/Cocos.daylight.short=CCST -Indian/Cocos.generic.short=CCT -Indian/Cocos.standard.short=CCT -Indian/Comoro.daylight.short=EAST -Indian/Comoro.generic.short=EAT -Indian/Comoro.standard.short=EAT -Indian/Kerguelen.daylight.short=TFST -Indian/Kerguelen.generic.short=TFT -Indian/Kerguelen.standard.short=TFT -Indian/Mahe.daylight.short=SCST -Indian/Mahe.generic.short=SCT -Indian/Mahe.standard.short=SCT -Indian/Maldives.daylight.short=MVST -Indian/Maldives.generic.short=MVT -Indian/Maldives.standard.short=MVT -Indian/Mauritius.daylight.short=MUST -Indian/Mauritius.generic.short=MUT -Indian/Mauritius.standard.short=MUT -Indian/Mayotte.daylight.short=EAST -Indian/Mayotte.generic.short=EAT -Indian/Mayotte.standard.short=EAT -Indian/Reunion.daylight.short=REST -Indian/Reunion.generic.short=RET -Indian/Reunion.standard.short=RET -Iran.daylight.short=IRDT -Iran.generic.short=IRT -Iran.standard.short=IRST -Israel.daylight.short=IDT -Israel.generic.short=IT -Israel.standard.short=IST -IST.daylight.short=IDT -IST.generic.short=IT -IST.standard.short=IST -Jamaica.daylight.short=EDT -Jamaica.generic.short=ET -Jamaica.standard.short=EST -Japan.daylight.short=JDT -Japan.generic.short=JT -Japan.standard.short=JST -JST.daylight.short=JDT -JST.generic.short=JT -JST.standard.short=JST -Kwajalein.daylight.short=MHST -Kwajalein.generic.short=MHT -Kwajalein.standard.short=MHT -Libya.daylight.short=EEST -Libya.generic.short=EET -Libya.standard.short=EET -MET.daylight.short=MEST -MET.generic.short=MET -MET.standard.short=MET -Mexico/BajaNorte.daylight.short=PDT -Mexico/BajaNorte.generic.short=PT -Mexico/BajaNorte.standard.short=PST -Mexico/BajaSur.daylight.short=MDT -Mexico/BajaSur.generic.short=MT -Mexico/BajaSur.standard.short=MST -Mexico/General.daylight.short=CDT -Mexico/General.generic.short=CT -Mexico/General.standard.short=CST -MIT.daylight.short=WSDT -MIT.generic.short=WST -MIT.standard.short=WST -MST7MDT.daylight.short=MDT -MST7MDT.generic.short=MT -MST7MDT.standard.short=MST -MST.daylight.short=MDT -MST.generic.short=MT -MST.standard.short=MST -Navajo.daylight.short=MDT -Navajo.generic.short=MT -Navajo.standard.short=MST -NET.daylight.short=AMST -NET.generic.short=AMT -NET.standard.short=AMT -NST.daylight.short=NZDT -NST.generic.short=NZT -NST.standard.short=NZST -NZ-CHAT.daylight.short=CHADT -NZ-CHAT.generic.short=CHAT -NZ-CHAT.standard.short=CHAST -NZ.daylight.short=NZDT -NZ.generic.short=NZT -NZ.standard.short=NZST -Pacific/Apia.daylight.short=WSDT -Pacific/Apia.generic.short=WST -Pacific/Apia.standard.short=WST -Pacific/Auckland.daylight.short=NZDT -Pacific/Auckland.generic.short=NZT -Pacific/Auckland.standard.short=NZST -Pacific/Chatham.daylight.short=CHADT -Pacific/Chatham.generic.short=CHAT -Pacific/Chatham.standard.short=CHAST -Pacific/Chuuk.daylight.short=CHUST -Pacific/Chuuk.generic.short=CHUT -Pacific/Chuuk.standard.short=CHUT -Pacific/Easter.daylight.short=EASST -Pacific/Easter.generic.short=EAST -Pacific/Easter.standard.short=EAST -Pacific/Efate.daylight.short=VUST -Pacific/Efate.generic.short=VUT -Pacific/Efate.standard.short=VUT -Pacific/Enderbury.daylight.short=PHOST -Pacific/Enderbury.generic.short=PHOT -Pacific/Enderbury.standard.short=PHOT -Pacific/Fakaofo.daylight.short=TKST -Pacific/Fakaofo.generic.short=TKT -Pacific/Fakaofo.standard.short=TKT -Pacific/Fiji.daylight.short=FJST -Pacific/Fiji.generic.short=FJT -Pacific/Fiji.standard.short=FJT -Pacific/Funafuti.daylight.short=TVST -Pacific/Funafuti.generic.short=TVT -Pacific/Funafuti.standard.short=TVT -Pacific/Galapagos.daylight.short=GALST -Pacific/Galapagos.generic.short=GALT -Pacific/Galapagos.standard.short=GALT -Pacific/Gambier.daylight.short=GAMST -Pacific/Gambier.generic.short=GAMT -Pacific/Gambier.standard.short=GAMT -Pacific/Guadalcanal.daylight.short=SBST -Pacific/Guadalcanal.generic.short=SBT -Pacific/Guadalcanal.standard.short=SBT -Pacific/Guam.daylight.short=ChDT -Pacific/Guam.generic.short=ChT -Pacific/Guam.standard.short=ChST -Pacific/Honolulu.daylight.short=HDT -Pacific/Honolulu.generic.short=HT -Pacific/Honolulu.standard.short=HST -Pacific/Johnston.daylight.short=HDT -Pacific/Johnston.generic.short=HT -Pacific/Johnston.standard.short=HST -Pacific/Kiritimati.daylight.short=LINST -Pacific/Kiritimati.generic.short=LINT -Pacific/Kiritimati.standard.short=LINT -Pacific/Kosrae.daylight.short=KOSST -Pacific/Kosrae.generic.short=KOST -Pacific/Kosrae.standard.short=KOST -Pacific/Kwajalein.daylight.short=MHST -Pacific/Kwajalein.generic.short=MHT -Pacific/Kwajalein.standard.short=MHT -Pacific/Majuro.daylight.short=MHST -Pacific/Majuro.generic.short=MHT -Pacific/Majuro.standard.short=MHT -Pacific/Marquesas.daylight.short=MARST -Pacific/Marquesas.generic.short=MART -Pacific/Marquesas.standard.short=MART -Pacific/Midway.daylight.short=SDT -Pacific/Midway.generic.short=ST -Pacific/Midway.standard.short=SST -Pacific/Nauru.daylight.short=NRST -Pacific/Nauru.generic.short=NRT -Pacific/Nauru.standard.short=NRT -Pacific/Niue.daylight.short=NUST -Pacific/Niue.generic.short=NUT -Pacific/Niue.standard.short=NUT -Pacific/Norfolk.daylight.short=NFST -Pacific/Norfolk.generic.short=NFT -Pacific/Norfolk.standard.short=NFT -Pacific/Noumea.daylight.short=NCST -Pacific/Noumea.generic.short=NCT -Pacific/Noumea.standard.short=NCT -Pacific/Pago_Pago.daylight.short=SDT -Pacific/Pago_Pago.generic.short=ST -Pacific/Pago_Pago.standard.short=SST -Pacific/Palau.daylight.short=PWST -Pacific/Palau.generic.short=PWT -Pacific/Palau.standard.short=PWT -Pacific/Pitcairn.daylight.short=PDT -Pacific/Pitcairn.generic.short=PT -Pacific/Pitcairn.standard.short=PST -Pacific/Pohnpei.daylight.short=PONST -Pacific/Pohnpei.generic.short=PONT -Pacific/Pohnpei.standard.short=PONT -Pacific/Ponape.daylight.short=PONST -Pacific/Ponape.generic.short=PONT -Pacific/Ponape.standard.short=PONT -Pacific/Port_Moresby.daylight.short=PGST -Pacific/Port_Moresby.generic.short=PGT -Pacific/Port_Moresby.standard.short=PGT -Pacific/Rarotonga.daylight.short=CKHST -Pacific/Rarotonga.generic.short=CKT -Pacific/Rarotonga.standard.short=CKT -Pacific/Saipan.daylight.short=ChDT -Pacific/Saipan.generic.short=ChT -Pacific/Saipan.standard.short=ChST -Pacific/Samoa.daylight.short=SDT -Pacific/Samoa.generic.short=ST -Pacific/Samoa.standard.short=SST -Pacific/Tahiti.daylight.short=TAHST -Pacific/Tahiti.generic.short=TAHT -Pacific/Tahiti.standard.short=TAHT -Pacific/Tarawa.daylight.short=GILST -Pacific/Tarawa.generic.short=GILT -Pacific/Tarawa.standard.short=GILT -Pacific/Tongatapu.daylight.short=TOST -Pacific/Tongatapu.generic.short=TOT -Pacific/Tongatapu.standard.short=TOT -Pacific/Truk.daylight.short=CHUST -Pacific/Truk.generic.short=CHUT -Pacific/Truk.standard.short=CHUT -Pacific/Wake.daylight.short=WAKST -Pacific/Wake.generic.short=WAKT -Pacific/Wake.standard.short=WAKT -Pacific/Wallis.daylight.short=WFST -Pacific/Wallis.generic.short=WFT -Pacific/Wallis.standard.short=WFT -Pacific/Yap.daylight.short=CHUST -Pacific/Yap.generic.short=CHUT -Pacific/Yap.standard.short=CHUT -PLT.daylight.short=PKST -PLT.generic.short=PKT -PLT.standard.short=PKT -PNT.daylight.short=MDT -PNT.generic.short=MT -PNT.standard.short=MST -Poland.daylight.short=CEST -Poland.generic.short=CET -Poland.standard.short=CET -Portugal.daylight.short=WEST -Portugal.generic.short=WET -Portugal.standard.short=WET -PRC.daylight.short=CDT -PRC.generic.short=CT -PRC.standard.short=CST -PRT.daylight.short=ADT -PRT.generic.short=AT -PRT.standard.short=AST -PST8PDT.daylight.short=PDT -PST8PDT.generic.short=PT -PST8PDT.standard.short=PST -PST.daylight.short=PDT -PST.generic.short=PT -PST.standard.short=PST -ROK.daylight.short=KDT -ROK.generic.short=KT -ROK.standard.short=KST -Singapore.daylight.short=SGST -Singapore.generic.short=SGT -Singapore.standard.short=SGT -SST.daylight.short=SBST -SST.generic.short=SBT -SST.standard.short=SBT -SystemV/AST4ADT.daylight.short=ADT -SystemV/AST4ADT.generic.short=AT -SystemV/AST4ADT.standard.short=AST -SystemV/AST4.daylight.short=ADT -SystemV/AST4.generic.short=AT -SystemV/AST4.standard.short=AST -SystemV/CST6CDT.daylight.short=CDT -SystemV/CST6CDT.generic.short=CT -SystemV/CST6CDT.standard.short=CST -SystemV/CST6.daylight.short=CDT -SystemV/CST6.generic.short=CT -SystemV/CST6.standard.short=CST -SystemV/EST5.daylight.short=EDT -SystemV/EST5EDT.daylight.short=EDT -SystemV/EST5EDT.generic.short=ET -SystemV/EST5EDT.standard.short=EST -SystemV/EST5.generic.short=ET -SystemV/EST5.standard.short=EST -SystemV/HST10.daylight.short=HDT -SystemV/HST10.generic.short=HT -SystemV/HST10.standard.short=HST -SystemV/MST7.daylight.short=MDT -SystemV/MST7.generic.short=MT -SystemV/MST7MDT.daylight.short=MDT -SystemV/MST7MDT.generic.short=MT -SystemV/MST7MDT.standard.short=MST -SystemV/MST7.standard.short=MST -SystemV/PST8.daylight.short=PDT -SystemV/PST8.generic.short=PT -SystemV/PST8PDT.daylight.short=PDT -SystemV/PST8PDT.generic.short=PT -SystemV/PST8PDT.standard.short=PST -SystemV/PST8.standard.short=PST -SystemV/YST9.daylight.short=AKDT -SystemV/YST9.generic.short=AKT -SystemV/YST9.standard.short=AKST -SystemV/YST9YDT.daylight.short=AKDT -SystemV/YST9YDT.generic.short=AKT -SystemV/YST9YDT.standard.short=AKST -Turkey.daylight.short=EEST -Turkey.generic.short=EET -Turkey.standard.short=EET -UCT.daylight.short=UTC -UCT.generic.short=UTC -UCT.standard.short=UTC -Universal.daylight.short=UTC -Universal.generic.short=UTC -Universal.standard.short=UTC -US/Alaska.daylight.short=AKDT -US/Alaska.generic.short=AKT -US/Alaska.standard.short=AKST -US/Aleutian.daylight.short=HADT -US/Aleutian.generic.short=HAT -US/Aleutian.standard.short=HAST -US/Arizona.daylight.short=MDT -US/Arizona.generic.short=MT -US/Arizona.standard.short=MST -US/Central.daylight.short=CDT -US/Central.generic.short=CT -US/Central.standard.short=CST -US/Eastern.daylight.short=EDT -US/Eastern.generic.short=ET -US/Eastern.standard.short=EST -US/East-Indiana.daylight.short=EDT -US/East-Indiana.generic.short=ET -US/East-Indiana.standard.short=EST -US/Hawaii.daylight.short=HDT -US/Hawaii.generic.short=HT -US/Hawaii.standard.short=HST -US/Indiana-Starke.daylight.short=CDT -US/Indiana-Starke.generic.short=CT -US/Indiana-Starke.standard.short=CST -US/Michigan.daylight.short=EDT -US/Michigan.generic.short=ET -US/Michigan.standard.short=EST -US/Mountain.daylight.short=MDT -US/Mountain.generic.short=MT -US/Mountain.standard.short=MST -US/Pacific.daylight.short=PDT -US/Pacific.generic.short=PT -US/Pacific-New.daylight.short=PDT -US/Pacific-New.generic.short=PT -US/Pacific-New.standard.short=PST -US/Pacific.standard.short=PST -US/Samoa.daylight.short=SDT -US/Samoa.generic.short=ST -US/Samoa.standard.short=SST -UTC.daylight.short=UTC -UTC.generic.short=UTC -UTC.standard.short=UTC -VST.daylight.short=ICST -VST.generic.short=ICT -VST.standard.short=ICT -WET.daylight.short=WEST -WET.generic.short=WET -WET.standard.short=WET -W-SU.daylight.short=MSD -W-SU.generic.short=MT -W-SU.standard.short=MSK -Zulu.daylight.short=UTC -Zulu.generic.short=UTC -Zulu.standard.short=UTC diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_CN.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_CN.properties deleted file mode 100644 index 62ccf2936e0..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_CN.properties +++ /dev/null @@ -1,651 +0,0 @@ -ACT.daylight.long=\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5317\u9886\u5730) -ACT.generic.long=\u4E2D\u90E8\u65F6\u95F4 (\u5317\u90E8\u5730\u533A) -ACT.standard.long=\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5317\u9886\u5730) -AET.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u65B0\u5357\u5A01\u5C14\u65AF) -AET.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF) -AET.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF) -AGT.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -ART.generic.long=\u4E1C\u6B27\u65F6\u95F4 -AST.generic.long=\u963F\u62C9\u65AF\u52A0\u65F6\u95F4 -Africa/Abidjan.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Africa/Accra.generic.long=\u52A0\u7EB3\u65F6\u95F4 -Africa/Addis_Ababa.generic.long=\u4E1C\u975E\u65F6\u95F4 -Africa/Algiers.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Africa/Asmara.generic.long=\u4E1C\u975E\u65F6\u95F4 -Africa/Asmera.generic.long=\u4E1C\u975E\u65F6\u95F4 -Africa/Bamako.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Africa/Bangui.generic.long=\u897F\u975E\u65F6\u95F4 -Africa/Banjul.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Africa/Bissau.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Africa/Blantyre.generic.long=\u4E2D\u975E\u65F6\u95F4 -Africa/Brazzaville.generic.long=\u897F\u975E\u65F6\u95F4 -Africa/Bujumbura.generic.long=\u4E2D\u975E\u65F6\u95F4 -Africa/Cairo.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Africa/Casablanca.generic.long=\u897F\u6B27\u65F6\u95F4 -Africa/Ceuta.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Africa/Conakry.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Africa/Dakar.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Africa/Dar_es_Salaam.generic.long=\u4E1C\u975E\u65F6\u95F4 -Africa/Djibouti.generic.long=\u4E1C\u975E\u65F6\u95F4 -Africa/Douala.generic.long=\u897F\u975E\u65F6\u95F4 -Africa/El_Aaiun.generic.long=\u897F\u6B27\u65F6\u95F4 -Africa/Freetown.generic.long=\u585E\u62C9\u91CC\u6602\u65F6\u95F4 -Africa/Gaborone.generic.long=\u4E2D\u975E\u65F6\u95F4 -Africa/Harare.generic.long=\u4E2D\u975E\u65F6\u95F4 -Africa/Johannesburg.generic.long=\u5357\u975E\u65F6\u95F4 -Africa/Juba.generic.long=\u4E1C\u975E\u65F6\u95F4 -Africa/Kampala.generic.long=\u4E1C\u975E\u65F6\u95F4 -Africa/Khartoum.generic.long=\u4E1C\u975E\u65F6\u95F4 -Africa/Kigali.generic.long=\u4E2D\u975E\u65F6\u95F4 -Africa/Kinshasa.generic.long=\u897F\u975E\u65F6\u95F4 -Africa/Lagos.generic.long=\u897F\u975E\u65F6\u95F4 -Africa/Libreville.generic.long=\u897F\u975E\u65F6\u95F4 -Africa/Lome.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Africa/Luanda.generic.long=\u897F\u975E\u65F6\u95F4 -Africa/Lubumbashi.generic.long=\u4E2D\u975E\u65F6\u95F4 -Africa/Lusaka.generic.long=\u4E2D\u975E\u65F6\u95F4 -Africa/Malabo.generic.long=\u897F\u975E\u65F6\u95F4 -Africa/Maputo.generic.long=\u4E2D\u975E\u65F6\u95F4 -Africa/Maseru.generic.long=\u5357\u975E\u65F6\u95F4 -Africa/Mbabane.generic.long=\u5357\u975E\u65F6\u95F4 -Africa/Mogadishu.generic.long=\u4E1C\u975E\u65F6\u95F4 -Africa/Monrovia.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Africa/Nairobi.generic.long=\u4E1C\u975E\u65F6\u95F4 -Africa/Ndjamena.generic.long=\u897F\u975E\u65F6\u95F4 -Africa/Niamey.generic.long=\u897F\u975E\u65F6\u95F4 -Africa/Nouakchott.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Africa/Ouagadougou.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Africa/Porto-Novo.generic.long=\u897F\u975E\u65F6\u95F4 -Africa/Sao_Tome.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Africa/Timbuktu.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Africa/Tripoli.generic.long=\u4e1c\u6b27\u65f6\u95f4 -Africa/Tunis.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Africa/Windhoek.generic.long=\u897F\u975E\u65F6\u95F4 -America/Adak.generic.long=\u590F\u5A01\u5937-\u963F\u7559\u7533\u65F6\u95F4 -America/Anchorage.generic.long=\u963F\u62C9\u65AF\u52A0\u65F6\u95F4 -America/Anguilla.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Antigua.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Araguaina.generic.long=\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4 -America/Argentina/Buenos_Aires.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Argentina/Catamarca.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Argentina/ComodRivadavia.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Argentina/Cordoba.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Argentina/Jujuy.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Argentina/La_Rioja.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Argentina/Mendoza.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Argentina/Rio_Gallegos.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Argentina/Salta.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Argentina/San_Juan.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Argentina/San_Luis.generic.long=\u963f\u6839\u5ef7\u65f6\u95f4 -America/Argentina/Tucuman.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Argentina/Ushuaia.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Aruba.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Asuncion.generic.long=\u5DF4\u62C9\u572D\u65F6\u95F4 -America/Atikokan.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Atka.generic.long=\u590F\u5A01\u5937-\u963F\u7559\u7533\u65F6\u95F4 -America/Bahia.generic.long=\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4 -America/Bahia_Banderas.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Barbados.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Belem.generic.long=\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4 -America/Belize.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Blanc-Sablon.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Boa_Vista.generic.long=\u4E9A\u9A6C\u900A\u65F6\u95F4 -America/Bogota.generic.long=\u54E5\u4F26\u6BD4\u4E9A\u65F6\u95F4 -America/Boise.generic.long=\u5C71\u5730\u65F6\u95F4 -America/Buenos_Aires.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Cambridge_Bay.generic.long=\u5C71\u5730\u65F6\u95F4 -America/Campo_Grande.generic.long=\u4E9A\u9A6C\u900A\u65F6\u95F4 -America/Cancun.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Caracas.generic.long=\u59D4\u5185\u745E\u62C9\u65F6\u95F4 -America/Catamarca.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Cayenne.generic.long=\u6CD5\u5C5E\u572D\u4E9A\u90A3\u65F6\u95F4 -America/Cayman.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Chicago.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Chihuahua.generic.long=\u5C71\u5730\u65F6\u95F4 -America/Coral_Harbour.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Cordoba.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Costa_Rica.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Creston.generic.long=\u5C71\u5730\u65F6\u95F4 -America/Cuiaba.generic.long=\u4E9A\u9A6C\u900A\u65F6\u95F4 -America/Curacao.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Danmarkshavn.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -America/Dawson.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4 -America/Dawson_Creek.generic.long=\u5C71\u5730\u65F6\u95F4 -America/Denver.generic.long=\u5C71\u5730\u65F6\u95F4 -America/Detroit.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Dominica.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Edmonton.generic.long=\u5C71\u5730\u65F6\u95F4 -America/Eirunepe.generic.long=Acre \u65f6\u95f4 -America/El_Salvador.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Ensenada.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4 -America/Fort_Wayne.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Fortaleza.generic.long=\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4 -America/Glace_Bay.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Godthab.generic.long=\u897F\u683C\u6797\u5170\u5C9B\u65F6\u95F4 -America/Goose_Bay.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Grand_Turk.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Grenada.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Guadeloupe.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Guatemala.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Guayaquil.generic.long=\u5384\u74DC\u591A\u5C14\u65F6\u95F4 -America/Guyana.generic.long=\u572D\u4E9A\u90A3\u65F6\u95F4 -America/Halifax.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Havana.generic.long=\u53E4\u5DF4\u65F6\u95F4 -America/Hermosillo.generic.long=\u5C71\u5730\u65F6\u95F4 -America/Indiana/Indianapolis.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Indiana/Knox.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Indiana/Marengo.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Indiana/Petersburg.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Indiana/Tell_City.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Indiana/Vevay.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Indiana/Vincennes.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Indiana/Winamac.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Indianapolis.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Inuvik.generic.long=\u5C71\u5730\u65F6\u95F4 -America/Iqaluit.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Jamaica.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Jujuy.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Juneau.generic.long=\u963F\u62C9\u65AF\u52A0\u65F6\u95F4 -America/Kentucky/Louisville.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Kentucky/Monticello.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Knox_IN.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Kralendijk.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/La_Paz.generic.long=\u73BB\u5229\u7EF4\u4E9A\u65F6\u95F4 -America/Lima.generic.long=\u79D8\u9C81\u65F6\u95F4 -America/Los_Angeles.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4 -America/Louisville.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Lower_Princes.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Maceio.generic.long=\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4 -America/Managua.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Manaus.generic.long=\u4E9A\u9A6C\u900A\u65F6\u95F4 -America/Marigot.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Martinique.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Matamoros.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Mazatlan.generic.long=\u5C71\u5730\u65F6\u95F4 -America/Mendoza.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Menominee.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Merida.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Metlakatla.daylight.long=\u6885\u7279\u62C9\u5361\u7279\u62C9\u590F\u4EE4\u65F6 -America/Metlakatla.generic.long=\u6885\u7279\u62C9\u5361\u7279\u62C9\u65F6\u95F4 -America/Metlakatla.standard.long=\u6885\u7279\u62C9\u5361\u7279\u62C9\u6807\u51C6\u65F6\u95F4 -America/Mexico_City.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Miquelon.generic.long=\u76AE\u57C3\u5C14\u548C\u5BC6\u514B\u9686\u5C9B\u65F6\u95F4 -America/Moncton.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Monterrey.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Montevideo.generic.long=\u4E4C\u62C9\u572D\u65F6\u95F4 -America/Montreal.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Montserrat.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Nassau.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/New_York.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Nipigon.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Nome.generic.long=\u963F\u62C9\u65AF\u52A0\u65F6\u95F4 -America/Noronha.generic.long=\u8D39\u5C14\u5357\u591A\u5FB7\u8BFA\u7F57\u5C3C\u4E9A\u65F6\u95F4 -America/North_Dakota/Beulah.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/North_Dakota/Center.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/North_Dakota/New_Salem.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Ojinaga.generic.long=\u5C71\u5730\u65F6\u95F4 -America/Panama.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Pangnirtung.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Paramaribo.generic.long=\u82CF\u5229\u5357\u65F6\u95F4 -America/Phoenix.generic.long=\u5C71\u5730\u65F6\u95F4 -America/Port-au-Prince.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Port_of_Spain.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Porto_Acre.generic.long=Acre \u65f6\u95f4 -America/Porto_Velho.generic.long=\u4E9A\u9A6C\u900A\u65F6\u95F4 -America/Puerto_Rico.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Rainy_River.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Rankin_Inlet.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Recife.generic.long=\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4 -America/Regina.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Resolute.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Rio_Branco.generic.long=Acre \u65f6\u95f4 -America/Rosario.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4 -America/Santa_Isabel.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4 -America/Santarem.generic.long=\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4 -America/Santiago.generic.long=\u667A\u5229\u65F6\u95F4 -America/Santo_Domingo.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Sao_Paulo.generic.long=\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4 -America/Scoresbysund.generic.long=\u4E1C\u683C\u6797\u5C9B\u65F6\u95F4 -America/Shiprock.generic.long=\u5C71\u5730\u65F6\u95F4 -America/Sitka.generic.long=\u963F\u62C9\u65AF\u52A0\u65F6\u95F4 -America/St_Barthelemy.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/St_Johns.generic.long=\u7EBD\u82AC\u5170\u65F6\u95F4 -America/St_Kitts.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/St_Lucia.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/St_Thomas.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/St_Vincent.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Swift_Current.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Tegucigalpa.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Thule.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Thunder_Bay.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Tijuana.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4 -America/Toronto.generic.long=\u4E1C\u90E8\u65F6\u95F4 -America/Tortola.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Vancouver.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4 -America/Virgin.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -America/Whitehorse.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4 -America/Winnipeg.generic.long=\u4E2D\u90E8\u65F6\u95F4 -America/Yakutat.generic.long=\u963F\u62C9\u65AF\u52A0\u65F6\u95F4 -America/Yellowknife.generic.long=\u5C71\u5730\u65F6\u95F4 -Antarctica/Casey.daylight.long=\u897F\u90E8\u590F\u4EE4\u65F6 (\u6FB3\u5927\u5229\u4E9A) -Antarctica/Casey.generic.long=\u897F\u90E8\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A) -Antarctica/Casey.standard.long=\u897F\u90E8\u6807\u51C6\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A) -Antarctica/Davis.generic.long=\u6234\u7EF4\u65AF\u65F6\u95F4 -Antarctica/DumontDUrville.generic.long=Dumont-d'Urville \u65F6\u95F4 -Antarctica/Macquarie.daylight.long=\u9EA6\u5938\u91CC\u5C9B\u590F\u4EE4\u65F6 -Antarctica/Macquarie.generic.long=\u9EA6\u5938\u91CC\u5C9B\u65F6\u95F4 -Antarctica/Macquarie.standard.long=\u9EA6\u5938\u91CC\u5C9B\u65F6\u95F4 -Antarctica/Mawson.generic.long=\u83AB\u68EE\u65F6\u95F4 -Antarctica/McMurdo.generic.long=\u65B0\u897F\u5170\u65F6\u95F4 -Antarctica/Palmer.generic.long=\u667A\u5229\u65F6\u95F4 -Antarctica/Rothera.generic.long=\u7F57\u745F\u62C9\u65F6\u95F4 -Antarctica/South_Pole.generic.long=\u65B0\u897F\u5170\u65F6\u95F4 -Antarctica/Syowa.generic.long=Syowa \u65F6\u95F4 -Antarctica/Vostok.generic.long=\u83AB\u65AF\u6258\u514B\u65F6\u95F4 -Arctic/Longyearbyen.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Asia/Aden.generic.long=\u963F\u62C9\u4F2F\u534A\u5C9B\u65F6\u95F4 -Asia/Almaty.generic.long=Alma-Ata \u65F6\u95F4 -Asia/Amman.generic.long=\u963f\u62c9\u4f2f\u534a\u5c9b\u65f6\u95f4 -Asia/Anadyr.generic.long=\u963F\u90A3\u5E95\u6CB3\u65F6\u95F4 -Asia/Aqtau.generic.long=Aqtau \u65F6\u95F4 -Asia/Aqtobe.generic.long=Aqtobe \u65F6\u95F4 -Asia/Ashgabat.generic.long=\u571F\u5E93\u66FC\u65F6\u95F4 -Asia/Ashkhabad.generic.long=\u571F\u5E93\u66FC\u65F6\u95F4 -Asia/Baghdad.generic.long=\u963F\u62C9\u4F2F\u534A\u5C9B\u65F6\u95F4 -Asia/Bahrain.generic.long=\u963F\u62C9\u4F2F\u534A\u5C9B\u65F6\u95F4 -Asia/Baku.generic.long=\u4E9A\u585E\u62DC\u7136\u65F6\u95F4 -Asia/Bangkok.generic.long=\u5370\u5EA6\u652F\u90A3\u65F6\u95F4 -Asia/Beirut.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Asia/Bishkek.generic.long=\u5409\u5C14\u5409\u65AF\u65AF\u5766\u65F6\u95F4 -Asia/Brunei.generic.long=\u6587\u83B1\u65F6\u95F4 -Asia/Calcutta.generic.long=\u5370\u5EA6\u65F6\u95F4 -Asia/Choibalsan.generic.long=Choibalsan \u65F6\u95F4 -Asia/Chongqing.generic.long=\u4E2D\u56FD\u65F6\u95F4 -Asia/Chungking.generic.long=\u4E2D\u56FD\u65F6\u95F4 -Asia/Colombo.generic.long=\u5370\u5EA6\u65F6\u95F4 -Asia/Dacca.generic.long=\u5B5F\u52A0\u62C9\u65F6\u95F4 -Asia/Damascus.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Asia/Dhaka.generic.long=\u5B5F\u52A0\u62C9\u65F6\u95F4 -Asia/Dili.generic.long=\u4E1C\u5E1D\u6C76\u65F6\u95F4 -Asia/Dubai.generic.long=\u6D77\u6E7E\u65F6\u95F4 -Asia/Dushanbe.generic.long=\u5854\u5409\u514B\u65AF\u5766\u65F6\u95F4 -Asia/Gaza.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Asia/Harbin.generic.long=\u4E2D\u56FD\u65F6\u95F4 -Asia/Hebron.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Asia/Ho_Chi_Minh.generic.long=\u5370\u5EA6\u652F\u90A3\u65F6\u95F4 -Asia/Hong_Kong.generic.long=\u9999\u6E2F\u65F6\u95F4 -Asia/Hovd.generic.long=\u79D1\u5E03\u591A\u65F6\u95F4 -Asia/Irkutsk.generic.long=\u4F0A\u5C14\u5E93\u6B21\u514B\u65F6\u95F4 -Asia/Istanbul.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Asia/Jakarta.generic.long=\u897F\u5370\u5EA6\u5C3C\u897F\u4E9A\u65F6\u95F4 -Asia/Jayapura.generic.long=\u4E1C\u5370\u5EA6\u5C3C\u897F\u4E9A\u65F6\u95F4 -Asia/Jerusalem.generic.long=\u4EE5\u8272\u5217\u65F6\u95F4 -Asia/Kabul.generic.long=\u963F\u5BCC\u6C57\u65F6\u95F4 -Asia/Kamchatka.generic.long=\u5F7C\u5F97\u7F57\u5DF4\u752B\u6D1B\u592B\u65AF\u514B\u65F6\u95F4 -Asia/Karachi.generic.long=\u5DF4\u57FA\u65AF\u5766\u65F6\u95F4 -Asia/Kashgar.generic.long=\u4E2D\u56FD\u65F6\u95F4 -Asia/Kathmandu.generic.long=\u5C3C\u6CCA\u5C14\u65F6\u95F4 -Asia/Katmandu.generic.long=\u5C3C\u6CCA\u5C14\u65F6\u95F4 -Asia/Khandyga.daylight.long=\u6C49\u5FB7\u52A0\u590F\u4EE4\u65F6 -Asia/Khandyga.generic.long=\u6C49\u5FB7\u52A0\u65F6\u95F4 -Asia/Khandyga.standard.long=\u6C49\u5FB7\u52A0\u65F6\u95F4 -Asia/Kolkata.generic.long=\u5370\u5EA6\u65F6\u95F4 -Asia/Krasnoyarsk.generic.long=\u514B\u62C9\u65AF\u8BFA\u4E9A\u5C14\u65AF\u514B\u65F6\u95F4 -Asia/Kuala_Lumpur.generic.long=\u9A6C\u6765\u897F\u4E9A\u65F6\u95F4 -Asia/Kuching.generic.long=\u9A6C\u6765\u897F\u4E9A\u65F6\u95F4 -Asia/Kuwait.generic.long=\u963F\u62C9\u4F2F\u534A\u5C9B\u65F6\u95F4 -Asia/Macao.generic.long=\u4E2D\u56FD\u65F6\u95F4 -Asia/Macau.generic.long=\u4E2D\u56FD\u65F6\u95F4 -Asia/Magadan.generic.long=Magadan \u65F6\u95F4 -Asia/Makassar.generic.long=\u4E2D\u90E8\u5370\u5EA6\u5C3C\u897F\u4E9A\u65F6\u95F4 -Asia/Manila.generic.long=\u83F2\u5F8B\u5BBE\u65F6\u95F4 -Asia/Muscat.generic.long=\u6D77\u6E7E\u65F6\u95F4 -Asia/Nicosia.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Asia/Novokuznetsk.generic.long=Novosibirsk \u65F6\u95F4 -Asia/Novosibirsk.generic.long=Novosibirsk \u65F6\u95F4 -Asia/Omsk.generic.long=\u9102\u6728\u65AF\u514B\u65F6\u95F4 -Asia/Oral.generic.long=Oral \u65F6\u95F4 -Asia/Phnom_Penh.generic.long=\u5370\u5EA6\u652F\u90A3\u65F6\u95F4 -Asia/Pontianak.generic.long=\u897F\u5370\u5EA6\u5C3C\u897F\u4E9A\u65F6\u95F4 -Asia/Pyongyang.generic.long=\u97E9\u56FD\u65F6\u95F4 -Asia/Qatar.generic.long=\u963F\u62C9\u4F2F\u534A\u5C9B\u65F6\u95F4 -Asia/Qyzylorda.generic.long=Qyzylorda \u65F6\u95F4 -Asia/Rangoon.generic.long=\u7F05\u7538\u65F6\u95F4 -Asia/Saigon.generic.long=\u5370\u5EA6\u652F\u90A3\u65F6\u95F4 -Asia/Sakhalin.generic.long=\u5E93\u9875\u5C9B\u65F6\u95F4 -Asia/Samarkand.generic.long=\u4E4C\u5179\u522B\u514B\u65AF\u5766\u65F6\u95F4 -Asia/Seoul.generic.long=\u97E9\u56FD\u65F6\u95F4 -Asia/Shanghai.generic.long=\u4E2D\u56FD\u65F6\u95F4 -Asia/Singapore.generic.long=\u65B0\u52A0\u5761\u65F6\u95F4 -Asia/Taipei.generic.long=\u4E2D\u56FD\u65F6\u95F4 -Asia/Tashkent.generic.long=\u4E4C\u5179\u522B\u514B\u65AF\u5766\u65F6\u95F4 -Asia/Tbilisi.generic.long=\u4E54\u6CBB\u4E9A\u65F6\u95F4 -Asia/Tehran.generic.long=\u4F0A\u6717\u65F6\u95F4 -Asia/Tel_Aviv.generic.long=\u4EE5\u8272\u5217\u65F6\u95F4 -Asia/Thimbu.generic.long=\u4E0D\u4E39\u65F6\u95F4 -Asia/Thimphu.generic.long=\u4E0D\u4E39\u65F6\u95F4 -Asia/Tokyo.generic.long=\u65E5\u672C\u65F6\u95F4 -Asia/Ujung_Pandang.generic.long=\u4E2D\u90E8\u5370\u5EA6\u5C3C\u897F\u4E9A\u65F6\u95F4 -Asia/Ulaanbaatar.generic.long=\u5E93\u4F26\u65F6\u95F4 -Asia/Ulan_Bator.generic.long=\u5E93\u4F26\u65F6\u95F4 -Asia/Urumqi.generic.long=\u4E2D\u56FD\u65F6\u95F4 -Asia/Ust-Nera.daylight.long=\u4E4C\u65AF\u5B63\u6D85\u62C9\u590F\u4EE4\u65F6 -Asia/Ust-Nera.generic.long=\u4E4C\u65AF\u5B63\u6D85\u62C9\u65F6\u95F4 -Asia/Ust-Nera.standard.long=\u4E4C\u65AF\u5B63\u6D85\u62C9\u65F6\u95F4 -Asia/Vientiane.generic.long=\u5370\u5EA6\u652F\u90A3\u65F6\u95F4 -Asia/Vladivostok.generic.long=\u6D77\u53C2\u5D34\u65F6\u95F4 -Asia/Yakutsk.generic.long=\u4E9A\u5E93\u6B21\u514B\u65F6\u95F4 -Asia/Yekaterinburg.generic.long=Yekaterinburg \u65F6\u95F4 -Asia/Yerevan.generic.long=\u4E9A\u7F8E\u5C3C\u4E9A\u65F6\u95F4 -Atlantic/Azores.generic.long=\u4E9A\u901F\u5C14\u7FA4\u5C9B\u65F6\u95F4 -Atlantic/Bermuda.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -Atlantic/Canary.generic.long=\u897F\u6B27\u65F6\u95F4 -Atlantic/Cape_Verde.generic.long=\u4F5B\u5FB7\u89D2\u65F6\u95F4 -Atlantic/Faeroe.generic.long=\u897F\u6B27\u65F6\u95F4 -Atlantic/Faroe.generic.long=\u897F\u6B27\u65F6\u95F4 -Atlantic/Jan_Mayen.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Atlantic/Madeira.generic.long=\u897F\u6B27\u65F6\u95F4 -Atlantic/Reykjavik.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Atlantic/South_Georgia.generic.long=\u5357\u4E54\u6CBB\u4E9A\u5C9B\u65F6\u95F4 -Atlantic/St_Helena.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Atlantic/Stanley.generic.long=\u798F\u514B\u5170\u7FA4\u5C9B\u65F6\u95F4 -Australia/ACT.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/ACT.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/ACT.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/Adelaide.daylight.long=\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5357\u6FB3\u5927\u5229\u4E9A) -Australia/Adelaide.generic.long=\u4E2D\u90E8\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A) -Australia/Adelaide.standard.long=\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A) -Australia/Brisbane.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u6606\u58EB\u5170) -Australia/Brisbane.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u6606\u58EB\u5170) -Australia/Brisbane.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u6606\u58EB\u5170) -Australia/Broken_Hill.daylight.long=\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/Broken_Hill.generic.long=\u4E2D\u90E8\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/Broken_Hill.standard.long=\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/Canberra.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/Canberra.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/Canberra.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/Currie.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/Currie.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/Currie.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/Darwin.daylight.long=\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5317\u9886\u5730) -Australia/Darwin.generic.long=\u4E2D\u90E8\u65F6\u95F4 (\u5317\u90E8\u5730\u533A) -Australia/Darwin.standard.long=\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5317\u9886\u5730) -Australia/Eucla.daylight.long=\u4E2D\u897F\u90E8\u590F\u4EE4\u65F6 (\u6FB3\u5927\u5229\u4E9A) -Australia/Eucla.generic.long=\u4E2D\u897F\u90E8\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A) -Australia/Eucla.standard.long=\u4E2D\u897F\u90E8\u6807\u51C6\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A) -Australia/Hobart.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u5854\u65AF\u9A6C\u5C3C\u4E9A) -Australia/Hobart.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u5854\u65AF\u9A6C\u5C3C\u4E9A) -Australia/Hobart.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u5854\u65AF\u9A6C\u5C3C\u4E9A) -Australia/LHI.generic.long=\u8C6A\u516C\u65F6\u95F4 -Australia/Lindeman.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u6606\u58EB\u5170) -Australia/Lindeman.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u6606\u58EB\u5170) -Australia/Lindeman.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u6606\u58EB\u5170) -Australia/Lord_Howe.generic.long=\u8C6A\u516C\u65F6\u95F4 -Australia/Melbourne.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u7EF4\u591A\u5229\u4E9A) -Australia/Melbourne.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u7EF4\u591A\u5229\u4E9A) -Australia/Melbourne.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u7EF4\u591A\u5229\u4E9A) -Australia/NSW.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/NSW.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/NSW.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/North.daylight.long=\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5317\u9886\u5730) -Australia/North.generic.long=\u4E2D\u90E8\u65F6\u95F4 (\u5317\u90E8\u5730\u533A) -Australia/North.standard.long=\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5317\u9886\u5730) -Australia/Perth.daylight.long=\u897F\u90E8\u590F\u4EE4\u65F6 (\u6FB3\u5927\u5229\u4E9A) -Australia/Perth.generic.long=\u897F\u90E8\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A) -Australia/Perth.standard.long=\u897F\u90E8\u6807\u51C6\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A) -Australia/Queensland.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u6606\u58EB\u5170) -Australia/Queensland.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u6606\u58EB\u5170) -Australia/Queensland.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u6606\u58EB\u5170) -Australia/South.daylight.long=\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5357\u6FB3\u5927\u5229\u4E9A) -Australia/South.generic.long=\u4E2D\u90E8\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A) -Australia/South.standard.long=\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A) -Australia/Sydney.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/Sydney.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/Sydney.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/Tasmania.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u5854\u65AF\u9A6C\u5C3C\u4E9A) -Australia/Tasmania.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u5854\u65AF\u9A6C\u5C3C\u4E9A) -Australia/Tasmania.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u5854\u65AF\u9A6C\u5C3C\u4E9A) -Australia/Victoria.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u7EF4\u591A\u5229\u4E9A) -Australia/Victoria.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u7EF4\u591A\u5229\u4E9A) -Australia/Victoria.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u7EF4\u591A\u5229\u4E9A) -Australia/West.daylight.long=\u897F\u90E8\u590F\u4EE4\u65F6 (\u6FB3\u5927\u5229\u4E9A) -Australia/West.generic.long=\u897F\u90E8\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A) -Australia/West.standard.long=\u897F\u90E8\u6807\u51C6\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A) -Australia/Yancowinna.daylight.long=\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/Yancowinna.generic.long=\u4E2D\u90E8\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF) -Australia/Yancowinna.standard.long=\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF) -BET.generic.long=\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4 -BST.generic.long=\u5B5F\u52A0\u62C9\u65F6\u95F4 -Brazil/Acre.generic.long=Acre \u65f6\u95f4 -Brazil/DeNoronha.generic.long=\u8D39\u5C14\u5357\u591A\u5FB7\u8BFA\u7F57\u5C3C\u4E9A\u65F6\u95F4 -Brazil/East.generic.long=\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4 -Brazil/West.generic.long=\u4E9A\u9A6C\u900A\u65F6\u95F4 -CAT.generic.long=\u4E2D\u975E\u65F6\u95F4 -CET.generic.long=\u4e2d\u6b27\u65f6\u95f4 -CNT.generic.long=\u7EBD\u82AC\u5170\u65F6\u95F4 -CST.generic.long=\u4E2D\u90E8\u65F6\u95F4 -CST6CDT.generic.long=\u4e2d\u90e8\u65f6\u95f4 -CTT.generic.long=\u4E2D\u56FD\u65F6\u95F4 -Canada/Atlantic.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -Canada/Central.generic.long=\u4E2D\u90E8\u65F6\u95F4 -Canada/East-Saskatchewan.generic.long=\u4E2D\u90E8\u65F6\u95F4 -Canada/Eastern.generic.long=\u4E1C\u90E8\u65F6\u95F4 -Canada/Mountain.generic.long=\u5C71\u5730\u65F6\u95F4 -Canada/Newfoundland.generic.long=\u7EBD\u82AC\u5170\u65F6\u95F4 -Canada/Pacific.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4 -Canada/Saskatchewan.generic.long=\u4E2D\u90E8\u65F6\u95F4 -Canada/Yukon.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4 -Chile/Continental.generic.long=\u667A\u5229\u65F6\u95F4 -Chile/EasterIsland.generic.long=\u590D\u6D3B\u5C9B\u65F6\u95F4 -Cuba.generic.long=\u53E4\u5DF4\u65F6\u95F4 -EAT.generic.long=\u4E1C\u975E\u65F6\u95F4 -ECT.generic.long=\u4E2D\u6B27\u65F6\u95F4 -EET.generic.long=\u4e1c\u6b27\u65f6\u95f4 -EST.generic.long=\u4e1c\u90e8\u65f6\u95f4 -EST5EDT.generic.long=\u4e1c\u90e8\u65f6\u95f4 -Egypt.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Eire.generic.long=\u7231\u5C14\u5170\u65F6\u95F4 -Etc/Greenwich.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Etc/UCT.generic.long=\u534F\u8C03\u4E16\u754C\u65F6\u95F4 -Etc/UTC.generic.long=\u534F\u8C03\u4E16\u754C\u65F6\u95F4 -Etc/Universal.generic.long=\u534F\u8C03\u4E16\u754C\u65F6\u95F4 -Etc/Zulu.generic.long=\u534F\u8C03\u4E16\u754C\u65F6\u95F4 -Europe/Amsterdam.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Andorra.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Athens.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Belfast.generic.long=\u82F1\u56FD\u65F6\u95F4 -Europe/Belgrade.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Berlin.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Bratislava.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Brussels.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Bucharest.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Budapest.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Busingen.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Chisinau.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Copenhagen.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Dublin.generic.long=\u7231\u5C14\u5170\u65F6\u95F4 -Europe/Gibraltar.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Guernsey.generic.long=\u82F1\u56FD\u65F6\u95F4 -Europe/Helsinki.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Isle_of_Man.generic.long=\u82F1\u56FD\u65F6\u95F4 -Europe/Istanbul.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Jersey.generic.long=\u82F1\u56FD\u65F6\u95F4 -Europe/Kaliningrad.daylight.long=\u8FDC\u4E1C\u6B27\u590F\u4EE4\u65F6 -Europe/Kaliningrad.generic.long=\u8FDC\u4E1C\u6B27\u65F6\u95F4 -Europe/Kaliningrad.standard.long=\u8FDC\u4E1C\u6B27\u65F6\u95F4 -Europe/Kiev.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Lisbon.generic.long=\u897F\u6B27\u65F6\u95F4 -Europe/Ljubljana.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/London.generic.long=\u82F1\u56FD\u65F6\u95F4 -Europe/Luxembourg.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Madrid.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Malta.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Mariehamn.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Minsk.daylight.long=\u8FDC\u4E1C\u6B27\u590F\u4EE4\u65F6 -Europe/Minsk.generic.long=\u8FDC\u4E1C\u6B27\u65F6\u95F4 -Europe/Minsk.standard.long=\u8FDC\u4E1C\u6B27\u65F6\u95F4 -Europe/Monaco.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Moscow.generic.long=\u83AB\u65AF\u79D1\u65F6\u95F4 -Europe/Nicosia.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Oslo.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Paris.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Podgorica.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Prague.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Riga.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Rome.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Samara.generic.long=\u6C99\u9A6C\u62C9\u65F6\u95F4 -Europe/San_Marino.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Sarajevo.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Simferopol.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Skopje.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Sofia.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Stockholm.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Tallinn.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Tirane.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Tiraspol.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Uzhgorod.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Vaduz.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Vatican.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Vienna.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Vilnius.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Volgograd.generic.long=\u4F0F\u5C14\u52A0\u683C\u52D2\u65F6\u95F4 -Europe/Warsaw.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Zagreb.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Europe/Zaporozhye.generic.long=\u4E1C\u6B27\u65F6\u95F4 -Europe/Zurich.generic.long=\u4E2D\u6B27\u65F6\u95F4 -GB-Eire.generic.long=\u82F1\u56FD\u65F6\u95F4 -GB.generic.long=\u82F1\u56FD\u65F6\u95F4 -GMT.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Greenwich.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -HST.generic.long=\u590f\u5a01\u5937\u65f6\u95f4 -Hongkong.generic.long=\u9999\u6E2F\u65F6\u95F4 -IET.generic.long=\u4E1C\u90E8\u65F6\u95F4 -IST.generic.long=\u5370\u5EA6\u65F6\u95F4 -Iceland.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4 -Indian/Antananarivo.generic.long=\u4E1C\u975E\u65F6\u95F4 -Indian/Chagos.generic.long=\u5370\u5EA6\u6D0B\u5730\u5E26\u65F6\u95F4 -Indian/Christmas.generic.long=\u5723\u8BDE\u5C9B\u65F6\u95F4 -Indian/Cocos.generic.long=\u53EF\u53EF\u65AF\u7FA4\u5C9B\u65F6\u95F4 -Indian/Comoro.generic.long=\u4E1C\u975E\u65F6\u95F4 -Indian/Kerguelen.generic.long=\u6CD5\u5C5E\u5357\u6781\u65F6\u95F4 -Indian/Mahe.generic.long=\u585E\u5E2D\u5C14\u7FA4\u5C9B\u65F6\u95F4 -Indian/Maldives.generic.long=\u9A6C\u5C14\u4EE3\u592B\u65F6\u95F4 -Indian/Mauritius.generic.long=\u6469\u91CC\u897F\u65AF\u65F6\u95F4 -Indian/Mayotte.generic.long=\u4E1C\u975E\u65F6\u95F4 -Indian/Reunion.generic.long=\u7559\u5C3C\u65FA\u5C9B\u65F6\u95F4 -Iran.generic.long=\u4F0A\u6717\u65F6\u95F4 -Israel.generic.long=\u4EE5\u8272\u5217\u65F6\u95F4 -JST.generic.long=\u65E5\u672C\u65F6\u95F4 -Jamaica.generic.long=\u4E1C\u90E8\u65F6\u95F4 -Japan.generic.long=\u65E5\u672C\u65F6\u95F4 -Kwajalein.generic.long=\u9A6C\u7ECD\u5C14\u7FA4\u5C9B\u65F6\u95F4 -Libya.generic.long=\u4e1c\u6b27\u65f6\u95f4 -MET.generic.long=MET -MIT.generic.long=\u897F\u8428\u6469\u4E9A\u65F6\u95F4 -MST.generic.long=\u5c71\u5730\u65f6\u95f4 -MST7MDT.generic.long=\u5c71\u5730\u65f6\u95f4 -Mexico/BajaNorte.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4 -Mexico/BajaSur.generic.long=\u5C71\u5730\u65F6\u95F4 -Mexico/General.generic.long=\u4E2D\u90E8\u65F6\u95F4 -NET.generic.long=\u4E9A\u7F8E\u5C3C\u4E9A\u65F6\u95F4 -NST.generic.long=\u65B0\u897F\u5170\u65F6\u95F4 -NZ-CHAT.generic.long=\u67E5\u5854\u59C6\u65F6\u95F4 -NZ.generic.long=\u65B0\u897F\u5170\u65F6\u95F4 -Navajo.generic.long=\u5C71\u5730\u65F6\u95F4 -PLT.generic.long=\u5DF4\u57FA\u65AF\u5766\u65F6\u95F4 -PNT.generic.long=\u5C71\u5730\u65F6\u95F4 -PRC.generic.long=\u4E2D\u56FD\u65F6\u95F4 -PRT.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -PST.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4 -PST8PDT.generic.long=\u592a\u5e73\u6d0b\u65f6\u95f4 -Pacific/Apia.generic.long=\u897F\u8428\u6469\u4E9A\u65F6\u95F4 -Pacific/Auckland.generic.long=\u65B0\u897F\u5170\u65F6\u95F4 -Pacific/Chatham.generic.long=\u67E5\u5854\u59C6\u65F6\u95F4 -Pacific/Chuuk.daylight.long=\u4E18\u514B\u590F\u4EE4\u65F6 -Pacific/Chuuk.generic.long=\u4E18\u514B\u65F6\u95F4 -Pacific/Chuuk.standard.long=\u4E18\u514B\u65F6\u95F4 -Pacific/Easter.generic.long=\u590D\u6D3B\u5C9B\u65F6\u95F4 -Pacific/Efate.generic.long=\u74E6\u5974\u963F\u56FE\u65F6\u95F4 -Pacific/Enderbury.generic.long=\u83F2\u5C3C\u514B\u65AF\u7FA4\u5C9B\u65F6\u95F4 -Pacific/Fakaofo.generic.long=\u6258\u514B\u52B3\u7FA4\u5C9B\u65F6\u95F4 -Pacific/Fiji.generic.long=\u6590\u6D4E\u65F6\u95F4 -Pacific/Funafuti.generic.long=\u5410\u9C81\u74E6\u65F6\u95F4 -Pacific/Galapagos.generic.long=\u52A0\u62C9\u5DF4\u54E5\u65F6\u95F4 -Pacific/Gambier.generic.long=\u5188\u6BD4\u4E9A\u65F6\u95F4 -Pacific/Guadalcanal.generic.long=\u6240\u7F57\u95E8\u7FA4\u5C9B\u65F6\u95F4 -Pacific/Guam.generic.long=\u67E5\u6469\u6D1B\u65F6\u95F4 -Pacific/Honolulu.generic.long=\u590F\u5A01\u5937\u65F6\u95F4 -Pacific/Johnston.generic.long=\u590F\u5A01\u5937\u65F6\u95F4 -Pacific/Kiritimati.generic.long=Line \u5C9B\u65F6\u95F4 -Pacific/Kosrae.generic.long=Kosrae \u65F6\u95F4 -Pacific/Kwajalein.generic.long=\u9A6C\u7ECD\u5C14\u7FA4\u5C9B\u65F6\u95F4 -Pacific/Majuro.generic.long=\u9A6C\u7ECD\u5C14\u7FA4\u5C9B\u65F6\u95F4 -Pacific/Marquesas.generic.long=\u9A6C\u514B\u8428\u65AF\u65F6\u95F4 -Pacific/Midway.generic.long=\u8428\u6469\u4E9A\u65F6\u95F4 -Pacific/Nauru.generic.long=\u8BFA\u9C81\u65F6\u95F4 -Pacific/Niue.generic.long=\u7EBD\u5A01\u5C9B\u65F6\u95F4 -Pacific/Norfolk.generic.long=\u8BFA\u798F\u514B\u65F6\u95F4 -Pacific/Noumea.generic.long=\u65B0\u52A0\u52D2\u591A\u5C3C\u4E9A\u65F6\u95F4 -Pacific/Pago_Pago.generic.long=\u8428\u6469\u4E9A\u65F6\u95F4 -Pacific/Palau.generic.long=\u5E1B\u7409\u65F6\u95F4 -Pacific/Pitcairn.generic.long=\u76AE\u7279\u51EF\u6069\u65F6\u95F4 -Pacific/Pohnpei.daylight.long=\u6CE2\u7EB3\u4F69\u590F\u4EE4\u65F6 -Pacific/Pohnpei.generic.long=\u6CE2\u7EB3\u4F69\u65F6\u95F4 -Pacific/Pohnpei.standard.long=\u6CE2\u7EB3\u4F69\u65F6\u95F4 -Pacific/Ponape.daylight.long=\u6CE2\u7EB3\u4F69\u590F\u4EE4\u65F6 -Pacific/Ponape.generic.long=\u6CE2\u7EB3\u4F69\u65F6\u95F4 -Pacific/Ponape.standard.long=\u6CE2\u7EB3\u4F69\u65F6\u95F4 -Pacific/Port_Moresby.generic.long=\u5DF4\u5E03\u4E9A\u65B0\u51E0\u5185\u4E9A\u65F6\u95F4 -Pacific/Rarotonga.generic.long=\u5E93\u514B\u7FA4\u5C9B\u65F6\u95F4 -Pacific/Saipan.generic.long=\u67E5\u6469\u6D1B\u65F6\u95F4 -Pacific/Samoa.generic.long=\u8428\u6469\u4E9A\u65F6\u95F4 -Pacific/Tahiti.generic.long=\u5927\u6EAA\u5730\u5C9B\u65F6\u95F4 -Pacific/Tarawa.generic.long=\u5409\u4F2F\u7279\u7FA4\u5C9B\u65F6\u95F4 -Pacific/Tongatapu.generic.long=\u4E1C\u52A0\u65F6\u95F4 -Pacific/Truk.daylight.long=\u4E18\u514B\u590F\u4EE4\u65F6 -Pacific/Truk.generic.long=\u4E18\u514B\u65F6\u95F4 -Pacific/Truk.standard.long=\u4E18\u514B\u65F6\u95F4 -Pacific/Wake.generic.long=\u5A01\u514B\u65F6\u95F4 -Pacific/Wallis.generic.long=\u74E6\u5229\u65AF\u53CA\u798F\u675C\u7EB3\u7FA4\u5C9B\u65F6\u95F4 -Pacific/Yap.daylight.long=\u4E18\u514B\u590F\u4EE4\u65F6 -Pacific/Yap.generic.long=\u4E18\u514B\u65F6\u95F4 -Pacific/Yap.standard.long=\u4E18\u514B\u65F6\u95F4 -Poland.generic.long=\u4E2D\u6B27\u65F6\u95F4 -Portugal.generic.long=\u897F\u6B27\u65F6\u95F4 -ROK.generic.long=\u97E9\u56FD\u65F6\u95F4 -SST.generic.long=\u6240\u7F57\u95E8\u7FA4\u5C9B\u65F6\u95F4 -Singapore.generic.long=\u65B0\u52A0\u5761\u65F6\u95F4 -SystemV/AST4.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -SystemV/AST4ADT.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4 -SystemV/CST6.generic.long=\u4E2D\u90E8\u65F6\u95F4 -SystemV/CST6CDT.generic.long=\u4E2D\u90E8\u65F6\u95F4 -SystemV/EST5.generic.long=\u4E1C\u90E8\u65F6\u95F4 -SystemV/EST5EDT.generic.long=\u4E1C\u90E8\u65F6\u95F4 -SystemV/HST10.generic.long=\u590F\u5A01\u5937\u65F6\u95F4 -SystemV/MST7.generic.long=\u5C71\u5730\u65F6\u95F4 -SystemV/MST7MDT.generic.long=\u5C71\u5730\u65F6\u95F4 -SystemV/PST8.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4 -SystemV/PST8PDT.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4 -SystemV/YST9.generic.long=\u963F\u62C9\u65AF\u52A0\u65F6\u95F4 -SystemV/YST9YDT.generic.long=\u963F\u62C9\u65AF\u52A0\u65F6\u95F4 -Turkey.generic.long=\u4E1C\u6B27\u65F6\u95F4 -UCT.generic.long=\u534F\u8C03\u4E16\u754C\u65F6\u95F4 -US/Alaska.generic.long=\u963F\u62C9\u65AF\u52A0\u65F6\u95F4 -US/Aleutian.generic.long=\u590F\u5A01\u5937-\u963F\u7559\u7533\u65F6\u95F4 -US/Arizona.generic.long=\u5C71\u5730\u65F6\u95F4 -US/Central.generic.long=\u4E2D\u90E8\u65F6\u95F4 -US/East-Indiana.generic.long=\u4E1C\u90E8\u65F6\u95F4 -US/Eastern.generic.long=\u4E1C\u90E8\u65F6\u95F4 -US/Hawaii.generic.long=\u590F\u5A01\u5937\u65F6\u95F4 -US/Indiana-Starke.generic.long=\u4E2D\u90E8\u65F6\u95F4 -US/Michigan.generic.long=\u4E1C\u90E8\u65F6\u95F4 -US/Mountain.generic.long=\u5C71\u5730\u65F6\u95F4 -US/Pacific-New.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4 -US/Pacific.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4 -US/Samoa.generic.long=\u8428\u6469\u4E9A\u65F6\u95F4 -UTC.generic.long=\u534F\u8C03\u4E16\u754C\u65F6\u95F4 -Universal.generic.long=\u534F\u8C03\u4E16\u754C\u65F6\u95F4 -VST.generic.long=\u5370\u5EA6\u652F\u90A3\u65F6\u95F4 -W-SU.generic.long=\u83AB\u65AF\u79D1\u65F6\u95F4 -WET.generic.long=\u897f\u6b27\u65f6\u95f4 -Zulu.generic.long=\u534F\u8C03\u4E16\u754C\u65F6\u95F4 diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_CN_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_CN_short.properties deleted file mode 100644 index 095522a68d1..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_CN_short.properties +++ /dev/null @@ -1,1743 +0,0 @@ -ACT.daylight.short=CST -ACT.generic.short=CT -ACT.standard.short=CST -AET.daylight.short=EST -AET.generic.short=ET -AET.standard.short=EST -Africa/Abidjan.daylight.short=GMT -Africa/Abidjan.generic.short=GMT -Africa/Abidjan.standard.short=GMT -Africa/Accra.daylight.short=GHST -Africa/Accra.generic.short=GMT -Africa/Accra.standard.short=GMT -Africa/Addis_Ababa.daylight.short=EAST -Africa/Addis_Ababa.generic.short=EAT -Africa/Addis_Ababa.standard.short=EAT -Africa/Algiers.daylight.short=CEST -Africa/Algiers.generic.short=CET -Africa/Algiers.standard.short=CET -Africa/Asmara.daylight.short=EAST -Africa/Asmara.generic.short=EAT -Africa/Asmara.standard.short=EAT -Africa/Asmera.daylight.short=EAST -Africa/Asmera.generic.short=EAT -Africa/Asmera.standard.short=EAT -Africa/Bamako.daylight.short=GMT -Africa/Bamako.generic.short=GMT -Africa/Bamako.standard.short=GMT -Africa/Bangui.daylight.short=WAST -Africa/Bangui.generic.short=WAT -Africa/Bangui.standard.short=WAT -Africa/Banjul.daylight.short=GMT -Africa/Banjul.generic.short=GMT -Africa/Banjul.standard.short=GMT -Africa/Bissau.daylight.short=GMT -Africa/Bissau.generic.short=GMT -Africa/Bissau.standard.short=GMT -Africa/Blantyre.daylight.short=CAST -Africa/Blantyre.generic.short=CAT -Africa/Blantyre.standard.short=CAT -Africa/Brazzaville.daylight.short=WAST -Africa/Brazzaville.generic.short=WAT -Africa/Brazzaville.standard.short=WAT -Africa/Bujumbura.daylight.short=CAST -Africa/Bujumbura.generic.short=CAT -Africa/Bujumbura.standard.short=CAT -Africa/Cairo.daylight.short=EEST -Africa/Cairo.generic.short=EET -Africa/Cairo.standard.short=EET -Africa/Casablanca.daylight.short=WEST -Africa/Casablanca.generic.short=WET -Africa/Casablanca.standard.short=WET -Africa/Ceuta.daylight.short=CEST -Africa/Ceuta.generic.short=CET -Africa/Ceuta.standard.short=CET -Africa/Conakry.daylight.short=GMT -Africa/Conakry.generic.short=GMT -Africa/Conakry.standard.short=GMT -Africa/Dakar.daylight.short=GMT -Africa/Dakar.generic.short=GMT -Africa/Dakar.standard.short=GMT -Africa/Dar_es_Salaam.daylight.short=EAST -Africa/Dar_es_Salaam.generic.short=EAT -Africa/Dar_es_Salaam.standard.short=EAT -Africa/Djibouti.daylight.short=EAST -Africa/Djibouti.generic.short=EAT -Africa/Djibouti.standard.short=EAT -Africa/Douala.daylight.short=WAST -Africa/Douala.generic.short=WAT -Africa/Douala.standard.short=WAT -Africa/El_Aaiun.daylight.short=WEST -Africa/El_Aaiun.generic.short=WET -Africa/El_Aaiun.standard.short=WET -Africa/Freetown.daylight.short=SLST -Africa/Freetown.generic.short=SLT -Africa/Freetown.standard.short=GMT -Africa/Gaborone.daylight.short=CAST -Africa/Gaborone.generic.short=CAT -Africa/Gaborone.standard.short=CAT -Africa/Harare.daylight.short=CAST -Africa/Harare.generic.short=CAT -Africa/Harare.standard.short=CAT -Africa/Johannesburg.daylight.short=SAST -Africa/Johannesburg.generic.short=SAT -Africa/Johannesburg.standard.short=SAST -Africa/Juba.daylight.short=EAST -Africa/Juba.generic.short=EAT -Africa/Juba.standard.short=EAT -Africa/Kampala.daylight.short=EAST -Africa/Kampala.generic.short=EAT -Africa/Kampala.standard.short=EAT -Africa/Khartoum.daylight.short=EAST -Africa/Khartoum.generic.short=EAT -Africa/Khartoum.standard.short=EAT -Africa/Kigali.daylight.short=CAST -Africa/Kigali.generic.short=CAT -Africa/Kigali.standard.short=CAT -Africa/Kinshasa.daylight.short=WAST -Africa/Kinshasa.generic.short=WAT -Africa/Kinshasa.standard.short=WAT -Africa/Lagos.daylight.short=WAST -Africa/Lagos.generic.short=WAT -Africa/Lagos.standard.short=WAT -Africa/Libreville.daylight.short=WAST -Africa/Libreville.generic.short=WAT -Africa/Libreville.standard.short=WAT -Africa/Lome.daylight.short=GMT -Africa/Lome.generic.short=GMT -Africa/Lome.standard.short=GMT -Africa/Luanda.daylight.short=WAST -Africa/Luanda.generic.short=WAT -Africa/Luanda.standard.short=WAT -Africa/Lubumbashi.daylight.short=CAST -Africa/Lubumbashi.generic.short=CAT -Africa/Lubumbashi.standard.short=CAT -Africa/Lusaka.daylight.short=CAST -Africa/Lusaka.generic.short=CAT -Africa/Lusaka.standard.short=CAT -Africa/Malabo.daylight.short=WAST -Africa/Malabo.generic.short=WAT -Africa/Malabo.standard.short=WAT -Africa/Maputo.daylight.short=CAST -Africa/Maputo.generic.short=CAT -Africa/Maputo.standard.short=CAT -Africa/Maseru.daylight.short=SAST -Africa/Maseru.generic.short=SAT -Africa/Maseru.standard.short=SAST -Africa/Mbabane.daylight.short=SAST -Africa/Mbabane.generic.short=SAT -Africa/Mbabane.standard.short=SAST -Africa/Mogadishu.daylight.short=EAST -Africa/Mogadishu.generic.short=EAT -Africa/Mogadishu.standard.short=EAT -Africa/Monrovia.daylight.short=GMT -Africa/Monrovia.generic.short=GMT -Africa/Monrovia.standard.short=GMT -Africa/Nairobi.daylight.short=EAST -Africa/Nairobi.generic.short=EAT -Africa/Nairobi.standard.short=EAT -Africa/Ndjamena.daylight.short=WAST -Africa/Ndjamena.generic.short=WAT -Africa/Ndjamena.standard.short=WAT -Africa/Niamey.daylight.short=WAST -Africa/Niamey.generic.short=WAT -Africa/Niamey.standard.short=WAT -Africa/Nouakchott.daylight.short=GMT -Africa/Nouakchott.generic.short=GMT -Africa/Nouakchott.standard.short=GMT -Africa/Ouagadougou.daylight.short=GMT -Africa/Ouagadougou.generic.short=GMT -Africa/Ouagadougou.standard.short=GMT -Africa/Porto-Novo.daylight.short=WAST -Africa/Porto-Novo.generic.short=WAT -Africa/Porto-Novo.standard.short=WAT -Africa/Sao_Tome.daylight.short=GMT -Africa/Sao_Tome.generic.short=GMT -Africa/Sao_Tome.standard.short=GMT -Africa/Timbuktu.daylight.short=GMT -Africa/Timbuktu.generic.short=GMT -Africa/Timbuktu.standard.short=GMT -Africa/Tripoli.daylight.short=EEST -Africa/Tripoli.generic.short=EET -Africa/Tripoli.standard.short=EET -Africa/Tunis.daylight.short=CEST -Africa/Tunis.generic.short=CET -Africa/Tunis.standard.short=CET -Africa/Windhoek.daylight.short=WAST -Africa/Windhoek.generic.short=WAT -Africa/Windhoek.standard.short=WAT -AGT.daylight.short=ARST -AGT.generic.short=ART -AGT.standard.short=ART -America/Adak.daylight.short=HADT -America/Adak.generic.short=HAT -America/Adak.standard.short=HAST -America/Anchorage.daylight.short=AKDT -America/Anchorage.generic.short=AKT -America/Anchorage.standard.short=AKST -America/Anguilla.daylight.short=ADT -America/Anguilla.generic.short=AT -America/Anguilla.standard.short=AST -America/Antigua.daylight.short=ADT -America/Antigua.generic.short=AT -America/Antigua.standard.short=AST -America/Araguaina.daylight.short=BRST -America/Araguaina.generic.short=BRT -America/Araguaina.standard.short=BRT -America/Argentina/Buenos_Aires.daylight.short=ARST -America/Argentina/Buenos_Aires.generic.short=ART -America/Argentina/Buenos_Aires.standard.short=ART -America/Argentina/Catamarca.daylight.short=ARST -America/Argentina/Catamarca.generic.short=ART -America/Argentina/Catamarca.standard.short=ART -America/Argentina/ComodRivadavia.daylight.short=ARST -America/Argentina/ComodRivadavia.generic.short=ART -America/Argentina/ComodRivadavia.standard.short=ART -America/Argentina/Cordoba.daylight.short=ARST -America/Argentina/Cordoba.generic.short=ART -America/Argentina/Cordoba.standard.short=ART -America/Argentina/Jujuy.daylight.short=ARST -America/Argentina/Jujuy.generic.short=ART -America/Argentina/Jujuy.standard.short=ART -America/Argentina/La_Rioja.daylight.short=ARST -America/Argentina/La_Rioja.generic.short=ART -America/Argentina/La_Rioja.standard.short=ART -America/Argentina/Mendoza.daylight.short=ARST -America/Argentina/Mendoza.generic.short=ART -America/Argentina/Mendoza.standard.short=ART -America/Argentina/Rio_Gallegos.daylight.short=ARST -America/Argentina/Rio_Gallegos.generic.short=ART -America/Argentina/Rio_Gallegos.standard.short=ART -America/Argentina/Salta.daylight.short=ARST -America/Argentina/Salta.generic.short=ART -America/Argentina/Salta.standard.short=ART -America/Argentina/San_Juan.daylight.short=ARST -America/Argentina/San_Juan.generic.short=ART -America/Argentina/San_Juan.standard.short=ART -America/Argentina/San_Luis.daylight.short=ARST -America/Argentina/San_Luis.generic.short=ART -America/Argentina/San_Luis.standard.short=ART -America/Argentina/Tucuman.daylight.short=ARST -America/Argentina/Tucuman.generic.short=ART -America/Argentina/Tucuman.standard.short=ART -America/Argentina/Ushuaia.daylight.short=ARST -America/Argentina/Ushuaia.generic.short=ART -America/Argentina/Ushuaia.standard.short=ART -America/Aruba.daylight.short=ADT -America/Aruba.generic.short=AT -America/Aruba.standard.short=AST -America/Asuncion.daylight.short=PYST -America/Asuncion.generic.short=PYT -America/Asuncion.standard.short=PYT -America/Atikokan.daylight.short=EDT -America/Atikokan.generic.short=ET -America/Atikokan.standard.short=EST -America/Atka.daylight.short=HADT -America/Atka.generic.short=HAT -America/Atka.standard.short=HAST -America/Bahia_Banderas.daylight.short=CDT -America/Bahia_Banderas.generic.short=CT -America/Bahia_Banderas.standard.short=CST -America/Bahia.daylight.short=BRST -America/Bahia.generic.short=BRT -America/Bahia.standard.short=BRT -America/Barbados.daylight.short=ADT -America/Barbados.generic.short=AT -America/Barbados.standard.short=AST -America/Belem.daylight.short=BRST -America/Belem.generic.short=BRT -America/Belem.standard.short=BRT -America/Belize.daylight.short=CDT -America/Belize.generic.short=CT -America/Belize.standard.short=CST -America/Blanc-Sablon.daylight.short=ADT -America/Blanc-Sablon.generic.short=AT -America/Blanc-Sablon.standard.short=AST -America/Boa_Vista.daylight.short=AMST -America/Boa_Vista.generic.short=AMT -America/Boa_Vista.standard.short=AMT -America/Bogota.daylight.short=COST -America/Bogota.generic.short=COT -America/Bogota.standard.short=COT -America/Boise.daylight.short=MDT -America/Boise.generic.short=MT -America/Boise.standard.short=MST -America/Buenos_Aires.daylight.short=ARST -America/Buenos_Aires.generic.short=ART -America/Buenos_Aires.standard.short=ART -America/Cambridge_Bay.daylight.short=MDT -America/Cambridge_Bay.generic.short=MT -America/Cambridge_Bay.standard.short=MST -America/Campo_Grande.daylight.short=AMST -America/Campo_Grande.generic.short=AMT -America/Campo_Grande.standard.short=AMT -America/Cancun.daylight.short=CDT -America/Cancun.generic.short=CT -America/Cancun.standard.short=CST -America/Caracas.daylight.short=VEST -America/Caracas.generic.short=VET -America/Caracas.standard.short=VET -America/Catamarca.daylight.short=ARST -America/Catamarca.generic.short=ART -America/Catamarca.standard.short=ART -America/Cayenne.daylight.short=GFST -America/Cayenne.generic.short=GFT -America/Cayenne.standard.short=GFT -America/Cayman.daylight.short=EDT -America/Cayman.generic.short=ET -America/Cayman.standard.short=EST -America/Chicago.daylight.short=CDT -America/Chicago.generic.short=CT -America/Chicago.standard.short=CST -America/Chihuahua.daylight.short=MDT -America/Chihuahua.generic.short=MT -America/Chihuahua.standard.short=MST -America/Coral_Harbour.daylight.short=EDT -America/Coral_Harbour.generic.short=ET -America/Coral_Harbour.standard.short=EST -America/Cordoba.daylight.short=ARST -America/Cordoba.generic.short=ART -America/Cordoba.standard.short=ART -America/Costa_Rica.daylight.short=CDT -America/Costa_Rica.generic.short=CT -America/Costa_Rica.standard.short=CST -America/Creston.daylight.short=MDT -America/Creston.generic.short=MT -America/Creston.standard.short=MST -America/Cuiaba.daylight.short=AMST -America/Cuiaba.generic.short=AMT -America/Cuiaba.standard.short=AMT -America/Curacao.daylight.short=ADT -America/Curacao.generic.short=AT -America/Curacao.standard.short=AST -America/Danmarkshavn.daylight.short=GMT -America/Danmarkshavn.generic.short=GMT -America/Danmarkshavn.standard.short=GMT -America/Dawson_Creek.daylight.short=MDT -America/Dawson_Creek.generic.short=MT -America/Dawson_Creek.standard.short=MST -America/Dawson.daylight.short=PDT -America/Dawson.generic.short=PT -America/Dawson.standard.short=PST -America/Denver.daylight.short=MDT -America/Denver.generic.short=MT -America/Denver.standard.short=MST -America/Detroit.daylight.short=EDT -America/Detroit.generic.short=ET -America/Detroit.standard.short=EST -America/Dominica.daylight.short=ADT -America/Dominica.generic.short=AT -America/Dominica.standard.short=AST -America/Edmonton.daylight.short=MDT -America/Edmonton.generic.short=MT -America/Edmonton.standard.short=MST -America/Eirunepe.daylight.short=ACST -America/Eirunepe.generic.short=ACT -America/Eirunepe.standard.short=ACT -America/El_Salvador.daylight.short=CDT -America/El_Salvador.generic.short=CT -America/El_Salvador.standard.short=CST -America/Ensenada.daylight.short=PDT -America/Ensenada.generic.short=PT -America/Ensenada.standard.short=PST -America/Fortaleza.daylight.short=BRST -America/Fortaleza.generic.short=BRT -America/Fortaleza.standard.short=BRT -America/Fort_Wayne.daylight.short=EDT -America/Fort_Wayne.generic.short=ET -America/Fort_Wayne.standard.short=EST -America/Glace_Bay.daylight.short=ADT -America/Glace_Bay.generic.short=AT -America/Glace_Bay.standard.short=AST -America/Godthab.daylight.short=WGST -America/Godthab.generic.short=WGT -America/Godthab.standard.short=WGT -America/Goose_Bay.daylight.short=ADT -America/Goose_Bay.generic.short=AT -America/Goose_Bay.standard.short=AST -America/Grand_Turk.daylight.short=EDT -America/Grand_Turk.generic.short=ET -America/Grand_Turk.standard.short=EST -America/Grenada.daylight.short=ADT -America/Grenada.generic.short=AT -America/Grenada.standard.short=AST -America/Guadeloupe.daylight.short=ADT -America/Guadeloupe.generic.short=AT -America/Guadeloupe.standard.short=AST -America/Guatemala.daylight.short=CDT -America/Guatemala.generic.short=CT -America/Guatemala.standard.short=CST -America/Guayaquil.daylight.short=ECST -America/Guayaquil.generic.short=ECT -America/Guayaquil.standard.short=ECT -America/Guyana.daylight.short=GYST -America/Guyana.generic.short=GYT -America/Guyana.standard.short=GYT -America/Halifax.daylight.short=ADT -America/Halifax.generic.short=AT -America/Halifax.standard.short=AST -America/Havana.daylight.short=CDT -America/Havana.generic.short=CT -America/Havana.standard.short=CST -America/Hermosillo.daylight.short=MDT -America/Hermosillo.generic.short=MT -America/Hermosillo.standard.short=MST -America/Indiana/Indianapolis.daylight.short=EDT -America/Indiana/Indianapolis.generic.short=ET -America/Indiana/Indianapolis.standard.short=EST -America/Indiana/Knox.daylight.short=CDT -America/Indiana/Knox.generic.short=CT -America/Indiana/Knox.standard.short=CST -America/Indiana/Marengo.daylight.short=EDT -America/Indiana/Marengo.generic.short=ET -America/Indiana/Marengo.standard.short=EST -America/Indiana/Petersburg.daylight.short=EDT -America/Indiana/Petersburg.generic.short=ET -America/Indiana/Petersburg.standard.short=EST -America/Indianapolis.daylight.short=EDT -America/Indianapolis.generic.short=ET -America/Indianapolis.standard.short=EST -America/Indiana/Tell_City.daylight.short=CDT -America/Indiana/Tell_City.generic.short=CT -America/Indiana/Tell_City.standard.short=CST -America/Indiana/Vevay.daylight.short=EDT -America/Indiana/Vevay.generic.short=ET -America/Indiana/Vevay.standard.short=EST -America/Indiana/Vincennes.daylight.short=EDT -America/Indiana/Vincennes.generic.short=ET -America/Indiana/Vincennes.standard.short=EST -America/Indiana/Winamac.daylight.short=EDT -America/Indiana/Winamac.generic.short=ET -America/Indiana/Winamac.standard.short=EST -America/Inuvik.daylight.short=MDT -America/Inuvik.generic.short=MT -America/Inuvik.standard.short=MST -America/Iqaluit.daylight.short=EDT -America/Iqaluit.generic.short=ET -America/Iqaluit.standard.short=EST -America/Jamaica.daylight.short=EDT -America/Jamaica.generic.short=ET -America/Jamaica.standard.short=EST -America/Jujuy.daylight.short=ARST -America/Jujuy.generic.short=ART -America/Jujuy.standard.short=ART -America/Juneau.daylight.short=AKDT -America/Juneau.generic.short=AKT -America/Juneau.standard.short=AKST -America/Kentucky/Louisville.daylight.short=EDT -America/Kentucky/Louisville.generic.short=ET -America/Kentucky/Louisville.standard.short=EST -America/Kentucky/Monticello.daylight.short=EDT -America/Kentucky/Monticello.generic.short=ET -America/Kentucky/Monticello.standard.short=EST -America/Knox_IN.daylight.short=CDT -America/Knox_IN.generic.short=CT -America/Knox_IN.standard.short=CST -America/Kralendijk.daylight.short=ADT -America/Kralendijk.generic.short=AT -America/Kralendijk.standard.short=AST -America/La_Paz.daylight.short=BOST -America/La_Paz.generic.short=BOT -America/La_Paz.standard.short=BOT -America/Lima.daylight.short=PEST -America/Lima.generic.short=PET -America/Lima.standard.short=PET -America/Los_Angeles.daylight.short=PDT -America/Los_Angeles.generic.short=PT -America/Los_Angeles.standard.short=PST -America/Louisville.daylight.short=EDT -America/Louisville.generic.short=ET -America/Louisville.standard.short=EST -America/Lower_Princes.daylight.short=ADT -America/Lower_Princes.generic.short=AT -America/Lower_Princes.standard.short=AST -America/Maceio.daylight.short=BRST -America/Maceio.generic.short=BRT -America/Maceio.standard.short=BRT -America/Managua.daylight.short=CDT -America/Managua.generic.short=CT -America/Managua.standard.short=CST -America/Manaus.daylight.short=AMST -America/Manaus.generic.short=AMT -America/Manaus.standard.short=AMT -America/Marigot.daylight.short=ADT -America/Marigot.generic.short=AT -America/Marigot.standard.short=AST -America/Martinique.daylight.short=ADT -America/Martinique.generic.short=AT -America/Martinique.standard.short=AST -America/Matamoros.daylight.short=CDT -America/Matamoros.generic.short=CT -America/Matamoros.standard.short=CST -America/Mazatlan.daylight.short=MDT -America/Mazatlan.generic.short=MT -America/Mazatlan.standard.short=MST -America/Mendoza.daylight.short=ARST -America/Mendoza.generic.short=ART -America/Mendoza.standard.short=ART -America/Menominee.daylight.short=CDT -America/Menominee.generic.short=CT -America/Menominee.standard.short=CST -America/Merida.daylight.short=CDT -America/Merida.generic.short=CT -America/Merida.standard.short=CST -America/Metlakatla.daylight.short=MeDT -America/Metlakatla.generic.short=MeT -America/Metlakatla.standard.short=MeST -America/Mexico_City.daylight.short=CDT -America/Mexico_City.generic.short=CT -America/Mexico_City.standard.short=CST -America/Miquelon.daylight.short=PMDT -America/Miquelon.generic.short=PMT -America/Miquelon.standard.short=PMST -America/Moncton.daylight.short=ADT -America/Moncton.generic.short=AT -America/Moncton.standard.short=AST -America/Monterrey.daylight.short=CDT -America/Monterrey.generic.short=CT -America/Monterrey.standard.short=CST -America/Montevideo.daylight.short=UYST -America/Montevideo.generic.short=UYT -America/Montevideo.standard.short=UYT -America/Montreal.daylight.short=EDT -America/Montreal.generic.short=ET -America/Montreal.standard.short=EST -America/Montserrat.daylight.short=ADT -America/Montserrat.generic.short=AT -America/Montserrat.standard.short=AST -America/Nassau.daylight.short=EDT -America/Nassau.generic.short=ET -America/Nassau.standard.short=EST -America/New_York.daylight.short=EDT -America/New_York.generic.short=ET -America/New_York.standard.short=EST -America/Nipigon.daylight.short=EDT -America/Nipigon.generic.short=ET -America/Nipigon.standard.short=EST -America/Nome.daylight.short=AKDT -America/Nome.generic.short=AKT -America/Nome.standard.short=AKST -America/Noronha.daylight.short=FNST -America/Noronha.generic.short=FNT -America/Noronha.standard.short=FNT -America/North_Dakota/Beulah.daylight.short=CDT -America/North_Dakota/Beulah.generic.short=CT -America/North_Dakota/Beulah.standard.short=CST -America/North_Dakota/Center.daylight.short=CDT -America/North_Dakota/Center.generic.short=CT -America/North_Dakota/Center.standard.short=CST -America/North_Dakota/New_Salem.daylight.short=CDT -America/North_Dakota/New_Salem.generic.short=CT -America/North_Dakota/New_Salem.standard.short=CST -America/Ojinaga.daylight.short=MDT -America/Ojinaga.generic.short=MT -America/Ojinaga.standard.short=MST -America/Panama.daylight.short=EDT -America/Panama.generic.short=ET -America/Panama.standard.short=EST -America/Pangnirtung.daylight.short=EDT -America/Pangnirtung.generic.short=ET -America/Pangnirtung.standard.short=EST -America/Paramaribo.daylight.short=SRST -America/Paramaribo.generic.short=SRT -America/Paramaribo.standard.short=SRT -America/Phoenix.daylight.short=MDT -America/Phoenix.generic.short=MT -America/Phoenix.standard.short=MST -America/Port-au-Prince.daylight.short=EDT -America/Port-au-Prince.generic.short=ET -America/Port-au-Prince.standard.short=EST -America/Porto_Acre.daylight.short=ACST -America/Porto_Acre.generic.short=ACT -America/Porto_Acre.standard.short=ACT -America/Port_of_Spain.daylight.short=ADT -America/Port_of_Spain.generic.short=AT -America/Port_of_Spain.standard.short=AST -America/Porto_Velho.daylight.short=AMST -America/Porto_Velho.generic.short=AMT -America/Porto_Velho.standard.short=AMT -America/Puerto_Rico.daylight.short=ADT -America/Puerto_Rico.generic.short=AT -America/Puerto_Rico.standard.short=AST -America/Rainy_River.daylight.short=CDT -America/Rainy_River.generic.short=CT -America/Rainy_River.standard.short=CST -America/Rankin_Inlet.daylight.short=CDT -America/Rankin_Inlet.generic.short=CT -America/Rankin_Inlet.standard.short=CST -America/Recife.daylight.short=BRST -America/Recife.generic.short=BRT -America/Recife.standard.short=BRT -America/Regina.daylight.short=CDT -America/Regina.generic.short=CT -America/Regina.standard.short=CST -America/Resolute.daylight.short=CDT -America/Resolute.generic.short=CT -America/Resolute.standard.short=CST -America/Rio_Branco.daylight.short=ACST -America/Rio_Branco.generic.short=ACT -America/Rio_Branco.standard.short=ACT -America/Rosario.daylight.short=ARST -America/Rosario.generic.short=ART -America/Rosario.standard.short=ART -America/Santa_Isabel.daylight.short=PDT -America/Santa_Isabel.generic.short=PT -America/Santa_Isabel.standard.short=PST -America/Santarem.daylight.short=BRST -America/Santarem.generic.short=BRT -America/Santarem.standard.short=BRT -America/Santiago.daylight.short=CLST -America/Santiago.generic.short=CLT -America/Santiago.standard.short=CLT -America/Santo_Domingo.daylight.short=ADT -America/Santo_Domingo.generic.short=AT -America/Santo_Domingo.standard.short=AST -America/Sao_Paulo.daylight.short=BRST -America/Sao_Paulo.generic.short=BRT -America/Sao_Paulo.standard.short=BRT -America/Scoresbysund.daylight.short=EGST -America/Scoresbysund.generic.short=EGT -America/Scoresbysund.standard.short=EGT -America/Shiprock.daylight.short=MDT -America/Shiprock.generic.short=MT -America/Shiprock.standard.short=MST -America/Sitka.daylight.short=AKDT -America/Sitka.generic.short=AKT -America/Sitka.standard.short=AKST -America/St_Barthelemy.daylight.short=ADT -America/St_Barthelemy.generic.short=AT -America/St_Barthelemy.standard.short=AST -America/St_Johns.daylight.short=NDT -America/St_Johns.generic.short=NT -America/St_Johns.standard.short=NST -America/St_Kitts.daylight.short=ADT -America/St_Kitts.generic.short=AT -America/St_Kitts.standard.short=AST -America/St_Lucia.daylight.short=ADT -America/St_Lucia.generic.short=AT -America/St_Lucia.standard.short=AST -America/St_Thomas.daylight.short=ADT -America/St_Thomas.generic.short=AT -America/St_Thomas.standard.short=AST -America/St_Vincent.daylight.short=ADT -America/St_Vincent.generic.short=AT -America/St_Vincent.standard.short=AST -America/Swift_Current.daylight.short=CDT -America/Swift_Current.generic.short=CT -America/Swift_Current.standard.short=CST -America/Tegucigalpa.daylight.short=CDT -America/Tegucigalpa.generic.short=CT -America/Tegucigalpa.standard.short=CST -America/Thule.daylight.short=ADT -America/Thule.generic.short=AT -America/Thule.standard.short=AST -America/Thunder_Bay.daylight.short=EDT -America/Thunder_Bay.generic.short=ET -America/Thunder_Bay.standard.short=EST -America/Tijuana.daylight.short=PDT -America/Tijuana.generic.short=PT -America/Tijuana.standard.short=PST -America/Toronto.daylight.short=EDT -America/Toronto.generic.short=ET -America/Toronto.standard.short=EST -America/Tortola.daylight.short=ADT -America/Tortola.generic.short=AT -America/Tortola.standard.short=AST -America/Vancouver.daylight.short=PDT -America/Vancouver.generic.short=PT -America/Vancouver.standard.short=PST -America/Virgin.daylight.short=ADT -America/Virgin.generic.short=AT -America/Virgin.standard.short=AST -America/Whitehorse.daylight.short=PDT -America/Whitehorse.generic.short=PT -America/Whitehorse.standard.short=PST -America/Winnipeg.daylight.short=CDT -America/Winnipeg.generic.short=CT -America/Winnipeg.standard.short=CST -America/Yakutat.daylight.short=AKDT -America/Yakutat.generic.short=AKT -America/Yakutat.standard.short=AKST -America/Yellowknife.daylight.short=MDT -America/Yellowknife.generic.short=MT -America/Yellowknife.standard.short=MST -Antarctica/Casey.daylight.short=WST -Antarctica/Casey.generic.short=WT -Antarctica/Casey.standard.short=WST -Antarctica/Davis.daylight.short=DAVST -Antarctica/Davis.generic.short=DAVT -Antarctica/Davis.standard.short=DAVT -Antarctica/DumontDUrville.daylight.short=DDUST -Antarctica/DumontDUrville.generic.short=DDUT -Antarctica/DumontDUrville.standard.short=DDUT -Antarctica/Macquarie.daylight.short=MIST -Antarctica/Macquarie.generic.short=MIST -Antarctica/Macquarie.standard.short=MIST -Antarctica/Mawson.daylight.short=MAWST -Antarctica/Mawson.generic.short=MAWT -Antarctica/Mawson.standard.short=MAWT -Antarctica/McMurdo.daylight.short=NZDT -Antarctica/McMurdo.generic.short=NZT -Antarctica/McMurdo.standard.short=NZST -Antarctica/Palmer.daylight.short=CLST -Antarctica/Palmer.generic.short=CLT -Antarctica/Palmer.standard.short=CLT -Antarctica/Rothera.daylight.short=ROTST -Antarctica/Rothera.generic.short=ROTT -Antarctica/Rothera.standard.short=ROTT -Antarctica/South_Pole.daylight.short=NZDT -Antarctica/South_Pole.generic.short=NZT -Antarctica/South_Pole.standard.short=NZST -Antarctica/Syowa.daylight.short=SYOST -Antarctica/Syowa.generic.short=SYOT -Antarctica/Syowa.standard.short=SYOT -Antarctica/Vostok.daylight.short=VOSST -Antarctica/Vostok.generic.short=VOST -Antarctica/Vostok.standard.short=VOST -Arctic/Longyearbyen.daylight.short=CEST -Arctic/Longyearbyen.generic.short=CET -Arctic/Longyearbyen.standard.short=CET -ART.daylight.short=EEST -ART.generic.short=EET -ART.standard.short=EET -Asia/Aden.daylight.short=ADT -Asia/Aden.generic.short=AT -Asia/Aden.standard.short=AST -Asia/Almaty.daylight.short=ALMST -Asia/Almaty.generic.short=ALMT -Asia/Almaty.standard.short=ALMT -Asia/Amman.daylight.short=ADT -Asia/Amman.generic.short=AT -Asia/Amman.standard.short=AST -Asia/Anadyr.daylight.short=ANAST -Asia/Anadyr.generic.short=ANAT -Asia/Anadyr.standard.short=ANAT -Asia/Aqtau.daylight.short=AQTST -Asia/Aqtau.generic.short=AQTT -Asia/Aqtau.standard.short=AQTT -Asia/Aqtobe.daylight.short=AQTST -Asia/Aqtobe.generic.short=AQTT -Asia/Aqtobe.standard.short=AQTT -Asia/Ashgabat.daylight.short=TMST -Asia/Ashgabat.generic.short=TMT -Asia/Ashgabat.standard.short=TMT -Asia/Ashkhabad.daylight.short=TMST -Asia/Ashkhabad.generic.short=TMT -Asia/Ashkhabad.standard.short=TMT -Asia/Baghdad.daylight.short=ADT -Asia/Baghdad.generic.short=AT -Asia/Baghdad.standard.short=AST -Asia/Bahrain.daylight.short=ADT -Asia/Bahrain.generic.short=AT -Asia/Bahrain.standard.short=AST -Asia/Baku.daylight.short=AZST -Asia/Baku.generic.short=AZT -Asia/Baku.standard.short=AZT -Asia/Bangkok.daylight.short=ICST -Asia/Bangkok.generic.short=ICT -Asia/Bangkok.standard.short=ICT -Asia/Beirut.daylight.short=EEST -Asia/Beirut.generic.short=EET -Asia/Beirut.standard.short=EET -Asia/Bishkek.daylight.short=KGST -Asia/Bishkek.generic.short=KGT -Asia/Bishkek.standard.short=KGT -Asia/Brunei.daylight.short=BNST -Asia/Brunei.generic.short=BNT -Asia/Brunei.standard.short=BNT -Asia/Calcutta.daylight.short=IDT -Asia/Calcutta.generic.short=IT -Asia/Calcutta.standard.short=IST -Asia/Choibalsan.daylight.short=CHOST -Asia/Choibalsan.generic.short=CHOT -Asia/Choibalsan.standard.short=CHOT -Asia/Chongqing.daylight.short=CDT -Asia/Chongqing.generic.short=CT -Asia/Chongqing.standard.short=CST -Asia/Chungking.daylight.short=CDT -Asia/Chungking.generic.short=CT -Asia/Chungking.standard.short=CST -Asia/Colombo.daylight.short=IDT -Asia/Colombo.generic.short=IT -Asia/Colombo.standard.short=IST -Asia/Dacca.daylight.short=BDST -Asia/Dacca.generic.short=BDT -Asia/Dacca.standard.short=BDT -Asia/Damascus.daylight.short=EEST -Asia/Damascus.generic.short=EET -Asia/Damascus.standard.short=EET -Asia/Dhaka.daylight.short=BDST -Asia/Dhaka.generic.short=BDT -Asia/Dhaka.standard.short=BDT -Asia/Dili.daylight.short=TLST -Asia/Dili.generic.short=TLT -Asia/Dili.standard.short=TLT -Asia/Dubai.daylight.short=GDT -Asia/Dubai.generic.short=GT -Asia/Dubai.standard.short=GST -Asia/Dushanbe.daylight.short=TJST -Asia/Dushanbe.generic.short=TJT -Asia/Dushanbe.standard.short=TJT -Asia/Gaza.daylight.short=EEST -Asia/Gaza.generic.short=EET -Asia/Gaza.standard.short=EET -Asia/Harbin.daylight.short=CDT -Asia/Harbin.generic.short=CT -Asia/Harbin.standard.short=CST -Asia/Hebron.daylight.short=EEST -Asia/Hebron.generic.short=EET -Asia/Hebron.standard.short=EET -Asia/Ho_Chi_Minh.daylight.short=ICST -Asia/Ho_Chi_Minh.generic.short=ICT -Asia/Ho_Chi_Minh.standard.short=ICT -Asia/Hong_Kong.daylight.short=HKST -Asia/Hong_Kong.generic.short=HKT -Asia/Hong_Kong.standard.short=HKT -Asia/Hovd.daylight.short=HOVST -Asia/Hovd.generic.short=HOVT -Asia/Hovd.standard.short=HOVT -Asia/Irkutsk.daylight.short=IRKST -Asia/Irkutsk.generic.short=IRKT -Asia/Irkutsk.standard.short=IRKT -Asia/Istanbul.daylight.short=EEST -Asia/Istanbul.generic.short=EET -Asia/Istanbul.standard.short=EET -Asia/Jakarta.daylight.short=WIST -Asia/Jakarta.generic.short=WIB -Asia/Jakarta.standard.short=WIB -Asia/Jayapura.daylight.short=EIST -Asia/Jayapura.generic.short=WIT -Asia/Jayapura.standard.short=WIT -Asia/Jerusalem.daylight.short=IDT -Asia/Jerusalem.generic.short=IT -Asia/Jerusalem.standard.short=IST -Asia/Kabul.daylight.short=AFST -Asia/Kabul.generic.short=AFT -Asia/Kabul.standard.short=AFT -Asia/Kamchatka.daylight.short=PETST -Asia/Kamchatka.generic.short=PETT -Asia/Kamchatka.standard.short=PETT -Asia/Karachi.daylight.short=PKST -Asia/Karachi.generic.short=PKT -Asia/Karachi.standard.short=PKT -Asia/Kashgar.daylight.short=CDT -Asia/Kashgar.generic.short=CT -Asia/Kashgar.standard.short=CST -Asia/Kathmandu.daylight.short=NPST -Asia/Kathmandu.generic.short=NPT -Asia/Kathmandu.standard.short=NPT -Asia/Katmandu.daylight.short=NPST -Asia/Katmandu.generic.short=NPT -Asia/Katmandu.standard.short=NPT -Asia/Khandyga.daylight.short=YAKST -Asia/Khandyga.generic.short=YAKT -Asia/Khandyga.standard.short=YAKT -Asia/Kolkata.daylight.short=IDT -Asia/Kolkata.generic.short=IT -Asia/Kolkata.standard.short=IST -Asia/Krasnoyarsk.daylight.short=KRAST -Asia/Krasnoyarsk.generic.short=KRAT -Asia/Krasnoyarsk.standard.short=KRAT -Asia/Kuala_Lumpur.daylight.short=MYST -Asia/Kuala_Lumpur.generic.short=MYT -Asia/Kuala_Lumpur.standard.short=MYT -Asia/Kuching.daylight.short=MYST -Asia/Kuching.generic.short=MYT -Asia/Kuching.standard.short=MYT -Asia/Kuwait.daylight.short=ADT -Asia/Kuwait.generic.short=AT -Asia/Kuwait.standard.short=AST -Asia/Macao.daylight.short=CDT -Asia/Macao.generic.short=CT -Asia/Macao.standard.short=CST -Asia/Macau.daylight.short=CDT -Asia/Macau.generic.short=CT -Asia/Macau.standard.short=CST -Asia/Magadan.daylight.short=MAGST -Asia/Magadan.generic.short=MAGT -Asia/Magadan.standard.short=MAGT -Asia/Makassar.daylight.short=CIST -Asia/Makassar.generic.short=WITA -Asia/Makassar.standard.short=WITA -Asia/Manila.daylight.short=PHST -Asia/Manila.generic.short=PHT -Asia/Manila.standard.short=PHT -Asia/Muscat.daylight.short=GDT -Asia/Muscat.generic.short=GT -Asia/Muscat.standard.short=GST -Asia/Nicosia.daylight.short=EEST -Asia/Nicosia.generic.short=EET -Asia/Nicosia.standard.short=EET -Asia/Novokuznetsk.daylight.short=NOVST -Asia/Novokuznetsk.generic.short=NOVT -Asia/Novokuznetsk.standard.short=NOVT -Asia/Novosibirsk.daylight.short=NOVST -Asia/Novosibirsk.generic.short=NOVT -Asia/Novosibirsk.standard.short=NOVT -Asia/Omsk.daylight.short=OMSST -Asia/Omsk.generic.short=OMST -Asia/Omsk.standard.short=OMST -Asia/Oral.daylight.short=ORAST -Asia/Oral.generic.short=ORAT -Asia/Oral.standard.short=ORAT -Asia/Phnom_Penh.daylight.short=ICST -Asia/Phnom_Penh.generic.short=ICT -Asia/Phnom_Penh.standard.short=ICT -Asia/Pontianak.daylight.short=WIST -Asia/Pontianak.generic.short=WIB -Asia/Pontianak.standard.short=WIB -Asia/Pyongyang.daylight.short=KDT -Asia/Pyongyang.generic.short=KT -Asia/Pyongyang.standard.short=KST -Asia/Qatar.daylight.short=ADT -Asia/Qatar.generic.short=AT -Asia/Qatar.standard.short=AST -Asia/Qyzylorda.daylight.short=QYZST -Asia/Qyzylorda.generic.short=QYZT -Asia/Qyzylorda.standard.short=QYZT -Asia/Rangoon.daylight.short=MMST -Asia/Rangoon.generic.short=MMT -Asia/Rangoon.standard.short=MMT -Asia/Saigon.daylight.short=ICST -Asia/Saigon.generic.short=ICT -Asia/Saigon.standard.short=ICT -Asia/Sakhalin.daylight.short=SAKST -Asia/Sakhalin.generic.short=SAKT -Asia/Sakhalin.standard.short=SAKT -Asia/Samarkand.daylight.short=UZST -Asia/Samarkand.generic.short=UZT -Asia/Samarkand.standard.short=UZT -Asia/Seoul.daylight.short=KDT -Asia/Seoul.generic.short=KT -Asia/Seoul.standard.short=KST -Asia/Shanghai.daylight.short=CDT -Asia/Shanghai.generic.short=CT -Asia/Shanghai.standard.short=CST -Asia/Singapore.daylight.short=SGST -Asia/Singapore.generic.short=SGT -Asia/Singapore.standard.short=SGT -Asia/Taipei.daylight.short=CDT -Asia/Taipei.generic.short=CT -Asia/Taipei.standard.short=CST -Asia/Tashkent.daylight.short=UZST -Asia/Tashkent.generic.short=UZT -Asia/Tashkent.standard.short=UZT -Asia/Tbilisi.daylight.short=GEST -Asia/Tbilisi.generic.short=GET -Asia/Tbilisi.standard.short=GET -Asia/Tehran.daylight.short=IRDT -Asia/Tehran.generic.short=IRT -Asia/Tehran.standard.short=IRST -Asia/Tel_Aviv.daylight.short=IDT -Asia/Tel_Aviv.generic.short=IT -Asia/Tel_Aviv.standard.short=IST -Asia/Thimbu.daylight.short=BTST -Asia/Thimbu.generic.short=BTT -Asia/Thimbu.standard.short=BTT -Asia/Thimphu.daylight.short=BTST -Asia/Thimphu.generic.short=BTT -Asia/Thimphu.standard.short=BTT -Asia/Tokyo.daylight.short=JDT -Asia/Tokyo.generic.short=JT -Asia/Tokyo.standard.short=JST -Asia/Ujung_Pandang.daylight.short=CIST -Asia/Ujung_Pandang.generic.short=WITA -Asia/Ujung_Pandang.standard.short=WITA -Asia/Ulaanbaatar.daylight.short=ULAST -Asia/Ulaanbaatar.generic.short=ULAT -Asia/Ulaanbaatar.standard.short=ULAT -Asia/Ulan_Bator.daylight.short=ULAST -Asia/Ulan_Bator.generic.short=ULAT -Asia/Ulan_Bator.standard.short=ULAT -Asia/Urumqi.daylight.short=CDT -Asia/Urumqi.generic.short=CT -Asia/Urumqi.standard.short=CST -Asia/Ust-Nera.daylight.short=VLAST -Asia/Ust-Nera.generic.short=VLAT -Asia/Ust-Nera.standard.short=VLAT -Asia/Vientiane.daylight.short=ICST -Asia/Vientiane.generic.short=ICT -Asia/Vientiane.standard.short=ICT -Asia/Vladivostok.daylight.short=VLAST -Asia/Vladivostok.generic.short=VLAT -Asia/Vladivostok.standard.short=VLAT -Asia/Yakutsk.daylight.short=YAKST -Asia/Yakutsk.generic.short=YAKT -Asia/Yakutsk.standard.short=YAKT -Asia/Yekaterinburg.daylight.short=YEKST -Asia/Yekaterinburg.generic.short=YEKT -Asia/Yekaterinburg.standard.short=YEKT -Asia/Yerevan.daylight.short=AMST -Asia/Yerevan.generic.short=AMT -Asia/Yerevan.standard.short=AMT -AST.daylight.short=AKDT -AST.generic.short=AKT -AST.standard.short=AKST -Atlantic/Azores.daylight.short=AZOST -Atlantic/Azores.generic.short=AZOT -Atlantic/Azores.standard.short=AZOT -Atlantic/Bermuda.daylight.short=ADT -Atlantic/Bermuda.generic.short=AT -Atlantic/Bermuda.standard.short=AST -Atlantic/Canary.daylight.short=WEST -Atlantic/Canary.generic.short=WET -Atlantic/Canary.standard.short=WET -Atlantic/Cape_Verde.daylight.short=CVST -Atlantic/Cape_Verde.generic.short=CVT -Atlantic/Cape_Verde.standard.short=CVT -Atlantic/Faeroe.daylight.short=WEST -Atlantic/Faeroe.generic.short=WET -Atlantic/Faeroe.standard.short=WET -Atlantic/Faroe.daylight.short=WEST -Atlantic/Faroe.generic.short=WET -Atlantic/Faroe.standard.short=WET -Atlantic/Jan_Mayen.daylight.short=CEST -Atlantic/Jan_Mayen.generic.short=CET -Atlantic/Jan_Mayen.standard.short=CET -Atlantic/Madeira.daylight.short=WEST -Atlantic/Madeira.generic.short=WET -Atlantic/Madeira.standard.short=WET -Atlantic/Reykjavik.daylight.short=GMT -Atlantic/Reykjavik.generic.short=GMT -Atlantic/Reykjavik.standard.short=GMT -Atlantic/South_Georgia.daylight.short=GDT -Atlantic/South_Georgia.generic.short=GT -Atlantic/South_Georgia.standard.short=GST -Atlantic/Stanley.daylight.short=FKST -Atlantic/Stanley.generic.short=FKT -Atlantic/Stanley.standard.short=FKT -Atlantic/St_Helena.daylight.short=GMT -Atlantic/St_Helena.generic.short=GMT -Atlantic/St_Helena.standard.short=GMT -Australia/ACT.daylight.short=EST -Australia/ACT.generic.short=ET -Australia/ACT.standard.short=EST -Australia/Adelaide.daylight.short=CST -Australia/Adelaide.generic.short=CT -Australia/Adelaide.standard.short=CST -Australia/Brisbane.daylight.short=EST -Australia/Brisbane.generic.short=ET -Australia/Brisbane.standard.short=EST -Australia/Broken_Hill.daylight.short=CST -Australia/Broken_Hill.generic.short=CT -Australia/Broken_Hill.standard.short=CST -Australia/Canberra.daylight.short=EST -Australia/Canberra.generic.short=ET -Australia/Canberra.standard.short=EST -Australia/Currie.daylight.short=EST -Australia/Currie.generic.short=ET -Australia/Currie.standard.short=EST -Australia/Darwin.daylight.short=CST -Australia/Darwin.generic.short=CT -Australia/Darwin.standard.short=CST -Australia/Eucla.daylight.short=CWST -Australia/Eucla.generic.short=CWT -Australia/Eucla.standard.short=CWST -Australia/Hobart.daylight.short=EST -Australia/Hobart.generic.short=ET -Australia/Hobart.standard.short=EST -Australia/LHI.daylight.short=LHST -Australia/LHI.generic.short=LHT -Australia/LHI.standard.short=LHST -Australia/Lindeman.daylight.short=EST -Australia/Lindeman.generic.short=ET -Australia/Lindeman.standard.short=EST -Australia/Lord_Howe.daylight.short=LHST -Australia/Lord_Howe.generic.short=LHT -Australia/Lord_Howe.standard.short=LHST -Australia/Melbourne.daylight.short=EST -Australia/Melbourne.generic.short=ET -Australia/Melbourne.standard.short=EST -Australia/North.daylight.short=CST -Australia/North.generic.short=CT -Australia/North.standard.short=CST -Australia/NSW.daylight.short=EST -Australia/NSW.generic.short=ET -Australia/NSW.standard.short=EST -Australia/Perth.daylight.short=WST -Australia/Perth.generic.short=WT -Australia/Perth.standard.short=WST -Australia/Queensland.daylight.short=EST -Australia/Queensland.generic.short=ET -Australia/Queensland.standard.short=EST -Australia/South.daylight.short=CST -Australia/South.generic.short=CT -Australia/South.standard.short=CST -Australia/Sydney.daylight.short=EST -Australia/Sydney.generic.short=ET -Australia/Sydney.standard.short=EST -Australia/Tasmania.daylight.short=EST -Australia/Tasmania.generic.short=ET -Australia/Tasmania.standard.short=EST -Australia/Victoria.daylight.short=EST -Australia/Victoria.generic.short=ET -Australia/Victoria.standard.short=EST -Australia/West.daylight.short=WST -Australia/West.generic.short=WT -Australia/West.standard.short=WST -Australia/Yancowinna.daylight.short=CST -Australia/Yancowinna.generic.short=CT -Australia/Yancowinna.standard.short=CST -BET.daylight.short=BRST -BET.generic.short=BRT -BET.standard.short=BRT -Brazil/Acre.daylight.short=ACST -Brazil/Acre.generic.short=ACT -Brazil/Acre.standard.short=ACT -Brazil/DeNoronha.daylight.short=FNST -Brazil/DeNoronha.generic.short=FNT -Brazil/DeNoronha.standard.short=FNT -Brazil/East.daylight.short=BRST -Brazil/East.generic.short=BRT -Brazil/East.standard.short=BRT -Brazil/West.daylight.short=AMST -Brazil/West.generic.short=AMT -Brazil/West.standard.short=AMT -BST.daylight.short=BDST -BST.generic.short=BDT -BST.standard.short=BDT -Canada/Atlantic.daylight.short=ADT -Canada/Atlantic.generic.short=AT -Canada/Atlantic.standard.short=AST -Canada/Central.daylight.short=CDT -Canada/Central.generic.short=CT -Canada/Central.standard.short=CST -Canada/Eastern.daylight.short=EDT -Canada/Eastern.generic.short=ET -Canada/Eastern.standard.short=EST -Canada/East-Saskatchewan.daylight.short=CDT -Canada/East-Saskatchewan.generic.short=CT -Canada/East-Saskatchewan.standard.short=CST -Canada/Mountain.daylight.short=MDT -Canada/Mountain.generic.short=MT -Canada/Mountain.standard.short=MST -Canada/Newfoundland.daylight.short=NDT -Canada/Newfoundland.generic.short=NT -Canada/Newfoundland.standard.short=NST -Canada/Pacific.daylight.short=PDT -Canada/Pacific.generic.short=PT -Canada/Pacific.standard.short=PST -Canada/Saskatchewan.daylight.short=CDT -Canada/Saskatchewan.generic.short=CT -Canada/Saskatchewan.standard.short=CST -Canada/Yukon.daylight.short=PDT -Canada/Yukon.generic.short=PT -Canada/Yukon.standard.short=PST -CAT.daylight.short=CAST -CAT.generic.short=CAT -CAT.standard.short=CAT -CET.daylight.short=CEST -CET.generic.short=CET -CET.standard.short=CET -Chile/Continental.daylight.short=CLST -Chile/Continental.generic.short=CLT -Chile/Continental.standard.short=CLT -Chile/EasterIsland.daylight.short=EASST -Chile/EasterIsland.generic.short=EAST -Chile/EasterIsland.standard.short=EAST -CNT.daylight.short=NDT -CNT.generic.short=NT -CNT.standard.short=NST -CST6CDT.daylight.short=CDT -CST6CDT.generic.short=CT -CST6CDT.standard.short=CST -CST.daylight.short=CDT -CST.generic.short=CT -CST.standard.short=CST -CTT.daylight.short=CDT -CTT.generic.short=CT -CTT.standard.short=CST -Cuba.daylight.short=CDT -Cuba.generic.short=CT -Cuba.standard.short=CST -EAT.daylight.short=EAST -EAT.generic.short=EAT -EAT.standard.short=EAT -ECT.daylight.short=CEST -ECT.generic.short=CET -ECT.standard.short=CET -EET.daylight.short=EEST -EET.generic.short=EET -EET.standard.short=EET -Egypt.daylight.short=EEST -Egypt.generic.short=EET -Egypt.standard.short=EET -Eire.daylight.short=IST -Eire.generic.short=IT -Eire.standard.short=GMT -EST5EDT.daylight.short=EDT -EST5EDT.generic.short=ET -EST5EDT.standard.short=EST -EST.daylight.short=EDT -EST.generic.short=ET -EST.standard.short=EST -Etc/Greenwich.daylight.short=GMT -Etc/Greenwich.generic.short=GMT -Etc/Greenwich.standard.short=GMT -Etc/UCT.daylight.short=UTC -Etc/UCT.generic.short=UTC -Etc/UCT.standard.short=UTC -Etc/Universal.daylight.short=UTC -Etc/Universal.generic.short=UTC -Etc/Universal.standard.short=UTC -Etc/UTC.daylight.short=UTC -Etc/UTC.generic.short=UTC -Etc/UTC.standard.short=UTC -Etc/Zulu.daylight.short=UTC -Etc/Zulu.generic.short=UTC -Etc/Zulu.standard.short=UTC -Europe/Amsterdam.daylight.short=CEST -Europe/Amsterdam.generic.short=CET -Europe/Amsterdam.standard.short=CET -Europe/Andorra.daylight.short=CEST -Europe/Andorra.generic.short=CET -Europe/Andorra.standard.short=CET -Europe/Athens.daylight.short=EEST -Europe/Athens.generic.short=EET -Europe/Athens.standard.short=EET -Europe/Belfast.daylight.short=BST -Europe/Belfast.generic.short=BT -Europe/Belfast.standard.short=GMT -Europe/Belgrade.daylight.short=CEST -Europe/Belgrade.generic.short=CET -Europe/Belgrade.standard.short=CET -Europe/Berlin.daylight.short=CEST -Europe/Berlin.generic.short=CET -Europe/Berlin.standard.short=CET -Europe/Bratislava.daylight.short=CEST -Europe/Bratislava.generic.short=CET -Europe/Bratislava.standard.short=CET -Europe/Brussels.daylight.short=CEST -Europe/Brussels.generic.short=CET -Europe/Brussels.standard.short=CET -Europe/Bucharest.daylight.short=EEST -Europe/Bucharest.generic.short=EET -Europe/Bucharest.standard.short=EET -Europe/Budapest.daylight.short=CEST -Europe/Budapest.generic.short=CET -Europe/Budapest.standard.short=CET -Europe/Busingen.daylight.short=CEST -Europe/Busingen.generic.short=CET -Europe/Busingen.standard.short=CET -Europe/Chisinau.daylight.short=EEST -Europe/Chisinau.generic.short=EET -Europe/Chisinau.standard.short=EET -Europe/Copenhagen.daylight.short=CEST -Europe/Copenhagen.generic.short=CET -Europe/Copenhagen.standard.short=CET -Europe/Dublin.daylight.short=IST -Europe/Dublin.generic.short=IT -Europe/Dublin.standard.short=GMT -Europe/Gibraltar.daylight.short=CEST -Europe/Gibraltar.generic.short=CET -Europe/Gibraltar.standard.short=CET -Europe/Guernsey.daylight.short=BST -Europe/Guernsey.generic.short=BT -Europe/Guernsey.standard.short=GMT -Europe/Helsinki.daylight.short=EEST -Europe/Helsinki.generic.short=EET -Europe/Helsinki.standard.short=EET -Europe/Isle_of_Man.daylight.short=BST -Europe/Isle_of_Man.generic.short=BT -Europe/Isle_of_Man.standard.short=GMT -Europe/Istanbul.daylight.short=EEST -Europe/Istanbul.generic.short=EET -Europe/Istanbul.standard.short=EET -Europe/Jersey.daylight.short=BST -Europe/Jersey.generic.short=BT -Europe/Jersey.standard.short=GMT -Europe/Kaliningrad.daylight.short=FEST -Europe/Kaliningrad.generic.short=FET -Europe/Kaliningrad.standard.short=FET -Europe/Kiev.daylight.short=EEST -Europe/Kiev.generic.short=EET -Europe/Kiev.standard.short=EET -Europe/Lisbon.daylight.short=WEST -Europe/Lisbon.generic.short=WET -Europe/Lisbon.standard.short=WET -Europe/Ljubljana.daylight.short=CEST -Europe/Ljubljana.generic.short=CET -Europe/Ljubljana.standard.short=CET -Europe/London.daylight.short=BST -Europe/London.generic.short=BT -Europe/London.standard.short=GMT -Europe/Luxembourg.daylight.short=CEST -Europe/Luxembourg.generic.short=CET -Europe/Luxembourg.standard.short=CET -Europe/Madrid.daylight.short=CEST -Europe/Madrid.generic.short=CET -Europe/Madrid.standard.short=CET -Europe/Malta.daylight.short=CEST -Europe/Malta.generic.short=CET -Europe/Malta.standard.short=CET -Europe/Mariehamn.daylight.short=EEST -Europe/Mariehamn.generic.short=EET -Europe/Mariehamn.standard.short=EET -Europe/Minsk.daylight.short=FEST -Europe/Minsk.generic.short=FET -Europe/Minsk.standard.short=FET -Europe/Monaco.daylight.short=CEST -Europe/Monaco.generic.short=CET -Europe/Monaco.standard.short=CET -Europe/Moscow.daylight.short=MSD -Europe/Moscow.generic.short=MT -Europe/Moscow.standard.short=MSK -Europe/Nicosia.daylight.short=EEST -Europe/Nicosia.generic.short=EET -Europe/Nicosia.standard.short=EET -Europe/Oslo.daylight.short=CEST -Europe/Oslo.generic.short=CET -Europe/Oslo.standard.short=CET -Europe/Paris.daylight.short=CEST -Europe/Paris.generic.short=CET -Europe/Paris.standard.short=CET -Europe/Podgorica.daylight.short=CEST -Europe/Podgorica.generic.short=CET -Europe/Podgorica.standard.short=CET -Europe/Prague.daylight.short=CEST -Europe/Prague.generic.short=CET -Europe/Prague.standard.short=CET -Europe/Riga.daylight.short=EEST -Europe/Riga.generic.short=EET -Europe/Riga.standard.short=EET -Europe/Rome.daylight.short=CEST -Europe/Rome.generic.short=CET -Europe/Rome.standard.short=CET -Europe/Samara.daylight.short=SAMST -Europe/Samara.generic.short=SAMT -Europe/Samara.standard.short=SAMT -Europe/San_Marino.daylight.short=CEST -Europe/San_Marino.generic.short=CET -Europe/San_Marino.standard.short=CET -Europe/Sarajevo.daylight.short=CEST -Europe/Sarajevo.generic.short=CET -Europe/Sarajevo.standard.short=CET -Europe/Simferopol.daylight.short=EEST -Europe/Simferopol.generic.short=EET -Europe/Simferopol.standard.short=EET -Europe/Skopje.daylight.short=CEST -Europe/Skopje.generic.short=CET -Europe/Skopje.standard.short=CET -Europe/Sofia.daylight.short=EEST -Europe/Sofia.generic.short=EET -Europe/Sofia.standard.short=EET -Europe/Stockholm.daylight.short=CEST -Europe/Stockholm.generic.short=CET -Europe/Stockholm.standard.short=CET -Europe/Tallinn.daylight.short=EEST -Europe/Tallinn.generic.short=EET -Europe/Tallinn.standard.short=EET -Europe/Tirane.daylight.short=CEST -Europe/Tirane.generic.short=CET -Europe/Tirane.standard.short=CET -Europe/Tiraspol.daylight.short=EEST -Europe/Tiraspol.generic.short=EET -Europe/Tiraspol.standard.short=EET -Europe/Uzhgorod.daylight.short=EEST -Europe/Uzhgorod.generic.short=EET -Europe/Uzhgorod.standard.short=EET -Europe/Vaduz.daylight.short=CEST -Europe/Vaduz.generic.short=CET -Europe/Vaduz.standard.short=CET -Europe/Vatican.daylight.short=CEST -Europe/Vatican.generic.short=CET -Europe/Vatican.standard.short=CET -Europe/Vienna.daylight.short=CEST -Europe/Vienna.generic.short=CET -Europe/Vienna.standard.short=CET -Europe/Vilnius.daylight.short=EEST -Europe/Vilnius.generic.short=EET -Europe/Vilnius.standard.short=EET -Europe/Volgograd.daylight.short=VOLST -Europe/Volgograd.generic.short=VOLT -Europe/Volgograd.standard.short=VOLT -Europe/Warsaw.daylight.short=CEST -Europe/Warsaw.generic.short=CET -Europe/Warsaw.standard.short=CET -Europe/Zagreb.daylight.short=CEST -Europe/Zagreb.generic.short=CET -Europe/Zagreb.standard.short=CET -Europe/Zaporozhye.daylight.short=EEST -Europe/Zaporozhye.generic.short=EET -Europe/Zaporozhye.standard.short=EET -Europe/Zurich.daylight.short=CEST -Europe/Zurich.generic.short=CET -Europe/Zurich.standard.short=CET -GB.daylight.short=BST -GB-Eire.daylight.short=BST -GB-Eire.generic.short=BT -GB-Eire.standard.short=GMT -GB.generic.short=BT -GB.standard.short=GMT -GMT.daylight.short=GMT -GMT.generic.short=GMT -GMT.standard.short=GMT -Greenwich.daylight.short=GMT -Greenwich.generic.short=GMT -Greenwich.standard.short=GMT -Hongkong.daylight.short=HKST -Hongkong.generic.short=HKT -Hongkong.standard.short=HKT -HST.daylight.short=HDT -HST.generic.short=HT -HST.standard.short=HST -Iceland.daylight.short=GMT -Iceland.generic.short=GMT -Iceland.standard.short=GMT -IET.daylight.short=EDT -IET.generic.short=ET -IET.standard.short=EST -Indian/Antananarivo.daylight.short=EAST -Indian/Antananarivo.generic.short=EAT -Indian/Antananarivo.standard.short=EAT -Indian/Chagos.daylight.short=IOST -Indian/Chagos.generic.short=IOT -Indian/Chagos.standard.short=IOT -Indian/Christmas.daylight.short=CXST -Indian/Christmas.generic.short=CIT -Indian/Christmas.standard.short=CXT -Indian/Cocos.daylight.short=CCST -Indian/Cocos.generic.short=CCT -Indian/Cocos.standard.short=CCT -Indian/Comoro.daylight.short=EAST -Indian/Comoro.generic.short=EAT -Indian/Comoro.standard.short=EAT -Indian/Kerguelen.daylight.short=TFST -Indian/Kerguelen.generic.short=TFT -Indian/Kerguelen.standard.short=TFT -Indian/Mahe.daylight.short=SCST -Indian/Mahe.generic.short=SCT -Indian/Mahe.standard.short=SCT -Indian/Maldives.daylight.short=MVST -Indian/Maldives.generic.short=MVT -Indian/Maldives.standard.short=MVT -Indian/Mauritius.daylight.short=MUST -Indian/Mauritius.generic.short=MUT -Indian/Mauritius.standard.short=MUT -Indian/Mayotte.daylight.short=EAST -Indian/Mayotte.generic.short=EAT -Indian/Mayotte.standard.short=EAT -Indian/Reunion.daylight.short=REST -Indian/Reunion.generic.short=RET -Indian/Reunion.standard.short=RET -Iran.daylight.short=IRDT -Iran.generic.short=IRT -Iran.standard.short=IRST -Israel.daylight.short=IDT -Israel.generic.short=IT -Israel.standard.short=IST -IST.daylight.short=IDT -IST.generic.short=IT -IST.standard.short=IST -Jamaica.daylight.short=EDT -Jamaica.generic.short=ET -Jamaica.standard.short=EST -Japan.daylight.short=JDT -Japan.generic.short=JT -Japan.standard.short=JST -JST.daylight.short=JDT -JST.generic.short=JT -JST.standard.short=JST -Kwajalein.daylight.short=MHST -Kwajalein.generic.short=MHT -Kwajalein.standard.short=MHT -Libya.daylight.short=EEST -Libya.generic.short=EET -Libya.standard.short=EET -MET.daylight.short=MEST -MET.generic.short=MET -MET.standard.short=MET -Mexico/BajaNorte.daylight.short=PDT -Mexico/BajaNorte.generic.short=PT -Mexico/BajaNorte.standard.short=PST -Mexico/BajaSur.daylight.short=MDT -Mexico/BajaSur.generic.short=MT -Mexico/BajaSur.standard.short=MST -Mexico/General.daylight.short=CDT -Mexico/General.generic.short=CT -Mexico/General.standard.short=CST -MIT.daylight.short=WSDT -MIT.generic.short=WST -MIT.standard.short=WST -MST7MDT.daylight.short=MDT -MST7MDT.generic.short=MT -MST7MDT.standard.short=MST -MST.daylight.short=MDT -MST.generic.short=MT -MST.standard.short=MST -Navajo.daylight.short=MDT -Navajo.generic.short=MT -Navajo.standard.short=MST -NET.daylight.short=AMST -NET.generic.short=AMT -NET.standard.short=AMT -NST.daylight.short=NZDT -NST.generic.short=NZT -NST.standard.short=NZST -NZ-CHAT.daylight.short=CHADT -NZ-CHAT.generic.short=CHAT -NZ-CHAT.standard.short=CHAST -NZ.daylight.short=NZDT -NZ.generic.short=NZT -NZ.standard.short=NZST -Pacific/Apia.daylight.short=WSDT -Pacific/Apia.generic.short=WST -Pacific/Apia.standard.short=WST -Pacific/Auckland.daylight.short=NZDT -Pacific/Auckland.generic.short=NZT -Pacific/Auckland.standard.short=NZST -Pacific/Chatham.daylight.short=CHADT -Pacific/Chatham.generic.short=CHAT -Pacific/Chatham.standard.short=CHAST -Pacific/Chuuk.daylight.short=CHUST -Pacific/Chuuk.generic.short=CHUT -Pacific/Chuuk.standard.short=CHUT -Pacific/Easter.daylight.short=EASST -Pacific/Easter.generic.short=EAST -Pacific/Easter.standard.short=EAST -Pacific/Efate.daylight.short=VUST -Pacific/Efate.generic.short=VUT -Pacific/Efate.standard.short=VUT -Pacific/Enderbury.daylight.short=PHOST -Pacific/Enderbury.generic.short=PHOT -Pacific/Enderbury.standard.short=PHOT -Pacific/Fakaofo.daylight.short=TKST -Pacific/Fakaofo.generic.short=TKT -Pacific/Fakaofo.standard.short=TKT -Pacific/Fiji.daylight.short=FJST -Pacific/Fiji.generic.short=FJT -Pacific/Fiji.standard.short=FJT -Pacific/Funafuti.daylight.short=TVST -Pacific/Funafuti.generic.short=TVT -Pacific/Funafuti.standard.short=TVT -Pacific/Galapagos.daylight.short=GALST -Pacific/Galapagos.generic.short=GALT -Pacific/Galapagos.standard.short=GALT -Pacific/Gambier.daylight.short=GAMST -Pacific/Gambier.generic.short=GAMT -Pacific/Gambier.standard.short=GAMT -Pacific/Guadalcanal.daylight.short=SBST -Pacific/Guadalcanal.generic.short=SBT -Pacific/Guadalcanal.standard.short=SBT -Pacific/Guam.daylight.short=ChDT -Pacific/Guam.generic.short=ChT -Pacific/Guam.standard.short=ChST -Pacific/Honolulu.daylight.short=HDT -Pacific/Honolulu.generic.short=HT -Pacific/Honolulu.standard.short=HST -Pacific/Johnston.daylight.short=HDT -Pacific/Johnston.generic.short=HT -Pacific/Johnston.standard.short=HST -Pacific/Kiritimati.daylight.short=LINST -Pacific/Kiritimati.generic.short=LINT -Pacific/Kiritimati.standard.short=LINT -Pacific/Kosrae.daylight.short=KOSST -Pacific/Kosrae.generic.short=KOST -Pacific/Kosrae.standard.short=KOST -Pacific/Kwajalein.daylight.short=MHST -Pacific/Kwajalein.generic.short=MHT -Pacific/Kwajalein.standard.short=MHT -Pacific/Majuro.daylight.short=MHST -Pacific/Majuro.generic.short=MHT -Pacific/Majuro.standard.short=MHT -Pacific/Marquesas.daylight.short=MARST -Pacific/Marquesas.generic.short=MART -Pacific/Marquesas.standard.short=MART -Pacific/Midway.daylight.short=SDT -Pacific/Midway.generic.short=ST -Pacific/Midway.standard.short=SST -Pacific/Nauru.daylight.short=NRST -Pacific/Nauru.generic.short=NRT -Pacific/Nauru.standard.short=NRT -Pacific/Niue.daylight.short=NUST -Pacific/Niue.generic.short=NUT -Pacific/Niue.standard.short=NUT -Pacific/Norfolk.daylight.short=NFST -Pacific/Norfolk.generic.short=NFT -Pacific/Norfolk.standard.short=NFT -Pacific/Noumea.daylight.short=NCST -Pacific/Noumea.generic.short=NCT -Pacific/Noumea.standard.short=NCT -Pacific/Pago_Pago.daylight.short=SDT -Pacific/Pago_Pago.generic.short=ST -Pacific/Pago_Pago.standard.short=SST -Pacific/Palau.daylight.short=PWST -Pacific/Palau.generic.short=PWT -Pacific/Palau.standard.short=PWT -Pacific/Pitcairn.daylight.short=PDT -Pacific/Pitcairn.generic.short=PT -Pacific/Pitcairn.standard.short=PST -Pacific/Pohnpei.daylight.short=PONST -Pacific/Pohnpei.generic.short=PONT -Pacific/Pohnpei.standard.short=PONT -Pacific/Ponape.daylight.short=PONST -Pacific/Ponape.generic.short=PONT -Pacific/Ponape.standard.short=PONT -Pacific/Port_Moresby.daylight.short=PGST -Pacific/Port_Moresby.generic.short=PGT -Pacific/Port_Moresby.standard.short=PGT -Pacific/Rarotonga.daylight.short=CKHST -Pacific/Rarotonga.generic.short=CKT -Pacific/Rarotonga.standard.short=CKT -Pacific/Saipan.daylight.short=ChDT -Pacific/Saipan.generic.short=ChT -Pacific/Saipan.standard.short=ChST -Pacific/Samoa.daylight.short=SDT -Pacific/Samoa.generic.short=ST -Pacific/Samoa.standard.short=SST -Pacific/Tahiti.daylight.short=TAHST -Pacific/Tahiti.generic.short=TAHT -Pacific/Tahiti.standard.short=TAHT -Pacific/Tarawa.daylight.short=GILST -Pacific/Tarawa.generic.short=GILT -Pacific/Tarawa.standard.short=GILT -Pacific/Tongatapu.daylight.short=TOST -Pacific/Tongatapu.generic.short=TOT -Pacific/Tongatapu.standard.short=TOT -Pacific/Truk.daylight.short=CHUST -Pacific/Truk.generic.short=CHUT -Pacific/Truk.standard.short=CHUT -Pacific/Wake.daylight.short=WAKST -Pacific/Wake.generic.short=WAKT -Pacific/Wake.standard.short=WAKT -Pacific/Wallis.daylight.short=WFST -Pacific/Wallis.generic.short=WFT -Pacific/Wallis.standard.short=WFT -Pacific/Yap.daylight.short=CHUST -Pacific/Yap.generic.short=CHUT -Pacific/Yap.standard.short=CHUT -PLT.daylight.short=PKST -PLT.generic.short=PKT -PLT.standard.short=PKT -PNT.daylight.short=MDT -PNT.generic.short=MT -PNT.standard.short=MST -Poland.daylight.short=CEST -Poland.generic.short=CET -Poland.standard.short=CET -Portugal.daylight.short=WEST -Portugal.generic.short=WET -Portugal.standard.short=WET -PRC.daylight.short=CDT -PRC.generic.short=CT -PRC.standard.short=CST -PRT.daylight.short=ADT -PRT.generic.short=AT -PRT.standard.short=AST -PST8PDT.daylight.short=PDT -PST8PDT.generic.short=PT -PST8PDT.standard.short=PST -PST.daylight.short=PDT -PST.generic.short=PT -PST.standard.short=PST -ROK.daylight.short=KDT -ROK.generic.short=KT -ROK.standard.short=KST -Singapore.daylight.short=SGST -Singapore.generic.short=SGT -Singapore.standard.short=SGT -SST.daylight.short=SBST -SST.generic.short=SBT -SST.standard.short=SBT -SystemV/AST4ADT.daylight.short=ADT -SystemV/AST4ADT.generic.short=AT -SystemV/AST4ADT.standard.short=AST -SystemV/AST4.daylight.short=ADT -SystemV/AST4.generic.short=AT -SystemV/AST4.standard.short=AST -SystemV/CST6CDT.daylight.short=CDT -SystemV/CST6CDT.generic.short=CT -SystemV/CST6CDT.standard.short=CST -SystemV/CST6.daylight.short=CDT -SystemV/CST6.generic.short=CT -SystemV/CST6.standard.short=CST -SystemV/EST5.daylight.short=EDT -SystemV/EST5EDT.daylight.short=EDT -SystemV/EST5EDT.generic.short=ET -SystemV/EST5EDT.standard.short=EST -SystemV/EST5.generic.short=ET -SystemV/EST5.standard.short=EST -SystemV/HST10.daylight.short=HDT -SystemV/HST10.generic.short=HT -SystemV/HST10.standard.short=HST -SystemV/MST7.daylight.short=MDT -SystemV/MST7.generic.short=MT -SystemV/MST7MDT.daylight.short=MDT -SystemV/MST7MDT.generic.short=MT -SystemV/MST7MDT.standard.short=MST -SystemV/MST7.standard.short=MST -SystemV/PST8.daylight.short=PDT -SystemV/PST8.generic.short=PT -SystemV/PST8PDT.daylight.short=PDT -SystemV/PST8PDT.generic.short=PT -SystemV/PST8PDT.standard.short=PST -SystemV/PST8.standard.short=PST -SystemV/YST9.daylight.short=AKDT -SystemV/YST9.generic.short=AKT -SystemV/YST9.standard.short=AKST -SystemV/YST9YDT.daylight.short=AKDT -SystemV/YST9YDT.generic.short=AKT -SystemV/YST9YDT.standard.short=AKST -Turkey.daylight.short=EEST -Turkey.generic.short=EET -Turkey.standard.short=EET -UCT.daylight.short=UTC -UCT.generic.short=UTC -UCT.standard.short=UTC -Universal.daylight.short=UTC -Universal.generic.short=UTC -Universal.standard.short=UTC -US/Alaska.daylight.short=AKDT -US/Alaska.generic.short=AKT -US/Alaska.standard.short=AKST -US/Aleutian.daylight.short=HADT -US/Aleutian.generic.short=HAT -US/Aleutian.standard.short=HAST -US/Arizona.daylight.short=MDT -US/Arizona.generic.short=MT -US/Arizona.standard.short=MST -US/Central.daylight.short=CDT -US/Central.generic.short=CT -US/Central.standard.short=CST -US/Eastern.daylight.short=EDT -US/Eastern.generic.short=ET -US/Eastern.standard.short=EST -US/East-Indiana.daylight.short=EDT -US/East-Indiana.generic.short=ET -US/East-Indiana.standard.short=EST -US/Hawaii.daylight.short=HDT -US/Hawaii.generic.short=HT -US/Hawaii.standard.short=HST -US/Indiana-Starke.daylight.short=CDT -US/Indiana-Starke.generic.short=CT -US/Indiana-Starke.standard.short=CST -US/Michigan.daylight.short=EDT -US/Michigan.generic.short=ET -US/Michigan.standard.short=EST -US/Mountain.daylight.short=MDT -US/Mountain.generic.short=MT -US/Mountain.standard.short=MST -US/Pacific.daylight.short=PDT -US/Pacific.generic.short=PT -US/Pacific-New.daylight.short=PDT -US/Pacific-New.generic.short=PT -US/Pacific-New.standard.short=PST -US/Pacific.standard.short=PST -US/Samoa.daylight.short=SDT -US/Samoa.generic.short=ST -US/Samoa.standard.short=SST -UTC.daylight.short=UTC -UTC.generic.short=UTC -UTC.standard.short=UTC -VST.daylight.short=ICST -VST.generic.short=ICT -VST.standard.short=ICT -WET.daylight.short=WEST -WET.generic.short=WET -WET.standard.short=WET -W-SU.daylight.short=MSD -W-SU.generic.short=MT -W-SU.standard.short=MSK -Zulu.daylight.short=UTC -Zulu.generic.short=UTC -Zulu.standard.short=UTC diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_TW.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_TW.properties deleted file mode 100644 index a9b77a60a66..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_TW.properties +++ /dev/null @@ -1,651 +0,0 @@ -ACT.daylight.long=\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340) -ACT.generic.long=\u6FB3\u5927\u5229\u4E9E\u4E2D\u90E8\u6642\u9593 (\u5317\u65B9\u5340\u57DF) -ACT.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340) -AET.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -AET.generic.long=\u6771\u90E8\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -AET.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -AGT.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -ART.generic.long=\u6771\u6B50\u6642\u9593 -AST.generic.long=\u963F\u62C9\u65AF\u52A0\u6642\u9593 -Africa/Abidjan.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Africa/Accra.generic.long=\u8FE6\u7D0D\u6642\u9593 -Africa/Addis_Ababa.generic.long=\u6771\u975E\u6642\u9593 -Africa/Algiers.generic.long=\u4E2D\u6B50\u6642\u9593 -Africa/Asmara.generic.long=\u6771\u975E\u6642\u9593 -Africa/Asmera.generic.long=\u6771\u975E\u6642\u9593 -Africa/Bamako.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Africa/Bangui.generic.long=\u897F\u975E\u6642\u9593 -Africa/Banjul.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Africa/Bissau.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Africa/Blantyre.generic.long=\u4E2D\u975E\u6642\u9593 -Africa/Brazzaville.generic.long=\u897F\u975E\u6642\u9593 -Africa/Bujumbura.generic.long=\u4E2D\u975E\u6642\u9593 -Africa/Cairo.generic.long=\u6771\u6B50\u6642\u9593 -Africa/Casablanca.generic.long=\u897F\u6B50\u6642\u9593 -Africa/Ceuta.generic.long=\u4E2D\u6B50\u6642\u9593 -Africa/Conakry.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Africa/Dakar.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Africa/Dar_es_Salaam.generic.long=\u6771\u975E\u6642\u9593 -Africa/Djibouti.generic.long=\u6771\u975E\u6642\u9593 -Africa/Douala.generic.long=\u897F\u975E\u6642\u9593 -Africa/El_Aaiun.generic.long=\u897F\u6B50\u6642\u9593 -Africa/Freetown.generic.long=\u7345\u5B50\u5C71\u6642\u9593 -Africa/Gaborone.generic.long=\u4E2D\u975E\u6642\u9593 -Africa/Harare.generic.long=\u4E2D\u975E\u6642\u9593 -Africa/Johannesburg.generic.long=\u5357\u975E\u6642\u9593 -Africa/Juba.generic.long=\u6771\u975E\u6642\u9593 -Africa/Kampala.generic.long=\u6771\u975E\u6642\u9593 -Africa/Khartoum.generic.long=\u6771\u975E\u6642\u9593 -Africa/Kigali.generic.long=\u4E2D\u975E\u6642\u9593 -Africa/Kinshasa.generic.long=\u897F\u975E\u6642\u9593 -Africa/Lagos.generic.long=\u897F\u975E\u6642\u9593 -Africa/Libreville.generic.long=\u897F\u975E\u6642\u9593 -Africa/Lome.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Africa/Luanda.generic.long=\u897F\u975E\u6642\u9593 -Africa/Lubumbashi.generic.long=\u4E2D\u975E\u6642\u9593 -Africa/Lusaka.generic.long=\u4E2D\u975E\u6642\u9593 -Africa/Malabo.generic.long=\u897F\u975E\u6642\u9593 -Africa/Maputo.generic.long=\u4E2D\u975E\u6642\u9593 -Africa/Maseru.generic.long=\u5357\u975E\u6642\u9593 -Africa/Mbabane.generic.long=\u5357\u975E\u6642\u9593 -Africa/Mogadishu.generic.long=\u6771\u975E\u6642\u9593 -Africa/Monrovia.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Africa/Nairobi.generic.long=\u6771\u975E\u6642\u9593 -Africa/Ndjamena.generic.long=\u897F\u975E\u6642\u9593 -Africa/Niamey.generic.long=\u897F\u975E\u6642\u9593 -Africa/Nouakchott.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Africa/Ouagadougou.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Africa/Porto-Novo.generic.long=\u897F\u975E\u6642\u9593 -Africa/Sao_Tome.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Africa/Timbuktu.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Africa/Tripoli.generic.long=\u6771\u6b50\u6642\u9593 -Africa/Tunis.generic.long=\u4E2D\u6B50\u6642\u9593 -Africa/Windhoek.generic.long=\u897F\u975E\u6642\u9593 -America/Adak.generic.long=\u590F\u5A01\u5937-\u963F\u7559\u7533\u6642\u9593 -America/Anchorage.generic.long=\u963F\u62C9\u65AF\u52A0\u6642\u9593 -America/Anguilla.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Antigua.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Araguaina.generic.long=\u5DF4\u897F\u5229\u4E9E\u6642\u9593 -America/Argentina/Buenos_Aires.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Argentina/Catamarca.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Argentina/ComodRivadavia.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Argentina/Cordoba.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Argentina/Jujuy.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Argentina/La_Rioja.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Argentina/Mendoza.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Argentina/Rio_Gallegos.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Argentina/Salta.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Argentina/San_Juan.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Argentina/San_Luis.generic.long=\u963f\u6839\u5ef7\u6642\u9593 -America/Argentina/Tucuman.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Argentina/Ushuaia.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Aruba.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Asuncion.generic.long=\u5DF4\u62C9\u572D\u6642\u9593 -America/Atikokan.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Atka.generic.long=\u590F\u5A01\u5937-\u963F\u7559\u7533\u6642\u9593 -America/Bahia.generic.long=\u5DF4\u897F\u5229\u4E9E\u6642\u9593 -America/Bahia_Banderas.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Barbados.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Belem.generic.long=\u5DF4\u897F\u5229\u4E9E\u6642\u9593 -America/Belize.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Blanc-Sablon.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Boa_Vista.generic.long=\u4E9E\u99AC\u905C\u6642\u9593 -America/Bogota.generic.long=\u54E5\u502B\u6BD4\u4E9E\u6642\u9593 -America/Boise.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -America/Buenos_Aires.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Cambridge_Bay.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -America/Campo_Grande.generic.long=\u4E9E\u99AC\u905C\u6642\u9593 -America/Cancun.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Caracas.generic.long=\u59D4\u5167\u745E\u62C9\u6642\u9593 -America/Catamarca.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Cayenne.generic.long=\u6CD5\u5C6C\u572D\u4E9E\u90A3\u6642\u9593 -America/Cayman.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Chicago.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Chihuahua.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -America/Coral_Harbour.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Cordoba.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Costa_Rica.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Creston.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -America/Cuiaba.generic.long=\u4E9E\u99AC\u905C\u6642\u9593 -America/Curacao.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Danmarkshavn.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -America/Dawson.generic.long=\u592A\u5E73\u6D0B\u6642\u9593 -America/Dawson_Creek.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -America/Denver.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -America/Detroit.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Dominica.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Edmonton.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -America/Eirunepe.generic.long=Acre \u6642\u9593 -America/El_Salvador.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Ensenada.generic.long=\u592A\u5E73\u6D0B\u6642\u9593 -America/Fort_Wayne.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Fortaleza.generic.long=\u5DF4\u897F\u5229\u4E9E\u6642\u9593 -America/Glace_Bay.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Godthab.generic.long=\u897F\u683C\u9675\u862D\u6642\u9593 -America/Goose_Bay.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Grand_Turk.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Grenada.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Guadeloupe.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Guatemala.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Guayaquil.generic.long=\u5384\u74DC\u591A\u723E\u6642\u9593 -America/Guyana.generic.long=\u84CB\u4E9E\u90A3\u6642\u9593 -America/Halifax.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Havana.generic.long=\u53E4\u5DF4\u6642\u9593 -America/Hermosillo.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -America/Indiana/Indianapolis.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Indiana/Knox.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Indiana/Marengo.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Indiana/Petersburg.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Indiana/Tell_City.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Indiana/Vevay.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Indiana/Vincennes.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Indiana/Winamac.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Indianapolis.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Inuvik.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -America/Iqaluit.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Jamaica.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Jujuy.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Juneau.generic.long=\u963F\u62C9\u65AF\u52A0\u6642\u9593 -America/Kentucky/Louisville.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Kentucky/Monticello.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Knox_IN.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Kralendijk.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/La_Paz.generic.long=\u73BB\u5229\u7DAD\u4E9E\u6642\u9593 -America/Lima.generic.long=\u7955\u9B6F\u6642\u9593 -America/Los_Angeles.generic.long=\u592A\u5E73\u6D0B\u6642\u9593 -America/Louisville.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Lower_Princes.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Maceio.generic.long=\u5DF4\u897F\u5229\u4E9E\u6642\u9593 -America/Managua.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Manaus.generic.long=\u4E9E\u99AC\u905C\u6642\u9593 -America/Marigot.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Martinique.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Matamoros.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Mazatlan.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -America/Mendoza.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Menominee.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Merida.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Metlakatla.daylight.long=\u6885\u7279\u62C9\u5361\u7279\u62C9\u65E5\u5149\u7BC0\u7D04\u6642\u9593 -America/Metlakatla.generic.long=\u6885\u7279\u62C9\u5361\u7279\u62C9\u6642\u9593 -America/Metlakatla.standard.long=\u6885\u7279\u62C9\u5361\u7279\u62C9\u6A19\u6E96\u6642\u9593 -America/Mexico_City.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Miquelon.generic.long=\u8056\u5F7C\u5FB7\u8207\u5BC6\u555F\u5D19\u6642\u9593 -America/Moncton.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Monterrey.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Montevideo.generic.long=\u70CF\u62C9\u572D\u6642\u9593 -America/Montreal.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Montserrat.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Nassau.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/New_York.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Nipigon.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Nome.generic.long=\u963F\u62C9\u65AF\u52A0\u6642\u9593 -America/Noronha.generic.long=\u8CBB\u723E\u5357\u591A-\u8FEA\u8AFE\u7F85\u5C3C\u4E9E\u6642\u9593 -America/North_Dakota/Beulah.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/North_Dakota/Center.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/North_Dakota/New_Salem.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Ojinaga.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -America/Panama.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Pangnirtung.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Paramaribo.generic.long=\u8607\u5229\u5357\u6642\u9593 -America/Phoenix.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -America/Port-au-Prince.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Port_of_Spain.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Porto_Acre.generic.long=Acre \u6642\u9593 -America/Porto_Velho.generic.long=\u4E9E\u99AC\u905C\u6642\u9593 -America/Puerto_Rico.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Rainy_River.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Rankin_Inlet.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Recife.generic.long=\u5DF4\u897F\u5229\u4E9E\u6642\u9593 -America/Regina.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Resolute.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Rio_Branco.generic.long=Acre \u6642\u9593 -America/Rosario.generic.long=\u963F\u6839\u5EF7\u6642\u9593 -America/Santa_Isabel.generic.long=\u592A\u5E73\u6D0B\u6642\u9593 -America/Santarem.generic.long=\u5DF4\u897F\u5229\u4E9E\u6642\u9593 -America/Santiago.generic.long=\u667A\u5229\u6642\u9593 -America/Santo_Domingo.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Sao_Paulo.generic.long=\u5DF4\u897F\u5229\u4E9E\u6642\u9593 -America/Scoresbysund.generic.long=\u6771\u683C\u9675\u862D\u6642\u9593 -America/Shiprock.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -America/Sitka.generic.long=\u963F\u62C9\u65AF\u52A0\u6642\u9593 -America/St_Barthelemy.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/St_Johns.generic.long=\u7D10\u82AC\u862D\u6642\u9593 -America/St_Kitts.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/St_Lucia.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/St_Thomas.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/St_Vincent.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Swift_Current.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Tegucigalpa.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Thule.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Thunder_Bay.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Tijuana.generic.long=\u592A\u5E73\u6D0B\u6642\u9593 -America/Toronto.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -America/Tortola.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Vancouver.generic.long=\u592A\u5E73\u6D0B\u6642\u9593 -America/Virgin.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -America/Whitehorse.generic.long=\u592A\u5E73\u6D0B\u6642\u9593 -America/Winnipeg.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -America/Yakutat.generic.long=\u963F\u62C9\u65AF\u52A0\u6642\u9593 -America/Yellowknife.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -Antarctica/Casey.daylight.long=\u897F\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E) -Antarctica/Casey.generic.long=\u897F\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E) -Antarctica/Casey.standard.long=\u897F\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E) -Antarctica/Davis.generic.long=\u81FA\u7DAD\u65AF\u6642\u9593 -Antarctica/DumontDUrville.generic.long=Dumont-d'Urville \u6642\u9593 -Antarctica/Macquarie.daylight.long=\u9EA5\u5938\u5229\u5CF6\u590F\u4EE4\u6642\u9593 -Antarctica/Macquarie.generic.long=\u9EA5\u5938\u5229\u5CF6\u6642\u9593 -Antarctica/Macquarie.standard.long=\u9EA5\u5938\u5229\u5CF6\u6642\u9593 -Antarctica/Mawson.generic.long=\u83AB\u68EE\u6642\u9593 -Antarctica/McMurdo.generic.long=\u7D10\u897F\u862D\u6642\u9593 -Antarctica/Palmer.generic.long=\u667A\u5229\u6642\u9593 -Antarctica/Rothera.generic.long=\u7F85\u897F\u62C9\u6642\u9593 -Antarctica/South_Pole.generic.long=\u7D10\u897F\u862D\u6642\u9593 -Antarctica/Syowa.generic.long=\u5915\u6B50\u74E6 (Syowa) \u6642\u9593 -Antarctica/Vostok.generic.long=\u4F5B\u65AF\u6258 (Vostok) \u6642\u9593 -Arctic/Longyearbyen.generic.long=\u4E2D\u6B50\u6642\u9593 -Asia/Aden.generic.long=\u963F\u62C9\u4F2F\u6642\u9593 -Asia/Almaty.generic.long=\u963F\u62C9\u6728\u5716\u6642\u9593 -Asia/Amman.generic.long=\u963f\u62c9\u4f2f\u6642\u9593 -Asia/Anadyr.generic.long=\u963F\u90A3\u5E95\u6CB3\u6642\u9593 -Asia/Aqtau.generic.long=\u963F\u514B\u5957\u6642\u9593 -Asia/Aqtobe.generic.long=\u963F\u514B\u6258\u5225\u6642\u9593 -Asia/Ashgabat.generic.long=\u571F\u5EAB\u66FC\u6642\u9593 -Asia/Ashkhabad.generic.long=\u571F\u5EAB\u66FC\u6642\u9593 -Asia/Baghdad.generic.long=\u963F\u62C9\u4F2F\u6642\u9593 -Asia/Bahrain.generic.long=\u963F\u62C9\u4F2F\u6642\u9593 -Asia/Baku.generic.long=\u4E9E\u585E\u62DC\u7136\u6642\u9593 -Asia/Bangkok.generic.long=\u5370\u5EA6\u652F\u90A3\u6642\u9593 -Asia/Beirut.generic.long=\u6771\u6B50\u6642\u9593 -Asia/Bishkek.generic.long=\u5409\u723E\u5409\u65AF\u6642\u9593 -Asia/Brunei.generic.long=\u6C76\u840A\u6642\u9593 -Asia/Calcutta.generic.long=\u5370\u5EA6\u6642\u9593 -Asia/Choibalsan.generic.long=\u5DE7\u5DF4\u5C71 (Choibalsan) \u6642\u9593 -Asia/Chongqing.generic.long=\u4E2D\u570B\u6642\u9593 -Asia/Chungking.generic.long=\u4E2D\u570B\u6642\u9593 -Asia/Colombo.generic.long=\u5370\u5EA6\u6642\u9593 -Asia/Dacca.generic.long=\u5B5F\u52A0\u62C9\u6642\u9593 -Asia/Damascus.generic.long=\u6771\u6B50\u6642\u9593 -Asia/Dhaka.generic.long=\u5B5F\u52A0\u62C9\u6642\u9593 -Asia/Dili.generic.long=\u6771\u5E1D\u6C76\u6642\u9593 -Asia/Dubai.generic.long=\u6CE2\u65AF\u7063\u6642\u9593 -Asia/Dushanbe.generic.long=\u5854\u5409\u514B\u6642\u9593 -Asia/Gaza.generic.long=\u6771\u6B50\u6642\u9593 -Asia/Harbin.generic.long=\u4E2D\u570B\u6642\u9593 -Asia/Hebron.generic.long=\u6771\u6B50\u6642\u9593 -Asia/Ho_Chi_Minh.generic.long=\u5370\u5EA6\u652F\u90A3\u6642\u9593 -Asia/Hong_Kong.generic.long=\u9999\u6E2F\u6642\u9593 -Asia/Hovd.generic.long=\u4FAF\u5FB7 (Hovd) \u6642\u9593 -Asia/Irkutsk.generic.long=\u4F0A\u723E\u5EAB\u6B21\u514B\u6642\u9593 -Asia/Istanbul.generic.long=\u6771\u6B50\u6642\u9593 -Asia/Jakarta.generic.long=\u897F\u5370\u5C3C\u6642\u9593 -Asia/Jayapura.generic.long=\u6771\u5370\u5EA6\u5C3C\u897F\u4E9E\u6642\u9593 -Asia/Jerusalem.generic.long=\u4EE5\u8272\u5217\u6642\u9593 -Asia/Kabul.generic.long=\u963F\u5BCC\u6C57\u6642\u9593 -Asia/Kamchatka.generic.long=Petropavlovsk-Kamchatski \u6642\u9593 -Asia/Karachi.generic.long=\u5DF4\u57FA\u65AF\u5766\u6642\u9593 -Asia/Kashgar.generic.long=\u4E2D\u570B\u6642\u9593 -Asia/Kathmandu.generic.long=\u5C3C\u6CCA\u723E\u6642\u9593 -Asia/Katmandu.generic.long=\u5C3C\u6CCA\u723E\u6642\u9593 -Asia/Khandyga.daylight.long=\u6F22\u5730\u52A0 (Khandyga) \u590F\u4EE4\u6642\u9593 -Asia/Khandyga.generic.long=\u6F22\u5730\u52A0 (Khandyga) \u6642\u9593 -Asia/Khandyga.standard.long=\u6F22\u5730\u52A0 (Khandyga) \u6642\u9593 -Asia/Kolkata.generic.long=\u5370\u5EA6\u6642\u9593 -Asia/Krasnoyarsk.generic.long=\u514B\u62C9\u65AF\u8AFE\u4E9E\u723E\u65AF\u514B\u6642\u9593 -Asia/Kuala_Lumpur.generic.long=\u99AC\u4F86\u897F\u4E9E\u6642\u9593 -Asia/Kuching.generic.long=\u99AC\u4F86\u897F\u4E9E\u6642\u9593 -Asia/Kuwait.generic.long=\u963F\u62C9\u4F2F\u6642\u9593 -Asia/Macao.generic.long=\u4E2D\u570B\u6642\u9593 -Asia/Macau.generic.long=\u4E2D\u570B\u6642\u9593 -Asia/Magadan.generic.long=\u99AC\u52A0\u4E39\u6642\u9593 -Asia/Makassar.generic.long=\u4E2D\u5370\u5EA6\u5C3C\u897F\u4E9E\u6642\u9593 -Asia/Manila.generic.long=\u83F2\u5F8B\u8CD3\u6642\u9593 -Asia/Muscat.generic.long=\u6CE2\u65AF\u7063\u6642\u9593 -Asia/Nicosia.generic.long=\u6771\u6B50\u6642\u9593 -Asia/Novokuznetsk.generic.long=\u65B0\u897F\u4F2F\u5229\u4E9E\u6642\u9593 -Asia/Novosibirsk.generic.long=\u65B0\u897F\u4F2F\u5229\u4E9E\u6642\u9593 -Asia/Omsk.generic.long=\u6B50\u59C6\u65AF\u514B (Omsk) \u6642\u9593 -Asia/Oral.generic.long=\u6B50\u4F5B\u6642\u9593 -Asia/Phnom_Penh.generic.long=\u5370\u5EA6\u652F\u90A3\u6642\u9593 -Asia/Pontianak.generic.long=\u897F\u5370\u5C3C\u6642\u9593 -Asia/Pyongyang.generic.long=\u97D3\u570B\u6642\u9593 -Asia/Qatar.generic.long=\u963F\u62C9\u4F2F\u6642\u9593 -Asia/Qyzylorda.generic.long=\u514B\u5B5C\u6D1B\u723E\u9054\u6642\u9593 -Asia/Rangoon.generic.long=\u7DEC\u7538\u6642\u9593 -Asia/Saigon.generic.long=\u5370\u5EA6\u652F\u90A3\u6642\u9593 -Asia/Sakhalin.generic.long=\u5EAB\u9801\u5CF6\u6642\u9593 -Asia/Samarkand.generic.long=\u70CF\u8332\u5225\u514B\u65AF\u5766\u6642\u9593 -Asia/Seoul.generic.long=\u97D3\u570B\u6642\u9593 -Asia/Shanghai.generic.long=\u4E2D\u570B\u6642\u9593 -Asia/Singapore.generic.long=\u65B0\u52A0\u5761\u6642\u9593 -Asia/Taipei.generic.long=\u53f0\u7063\u6642\u9593 -Asia/Tashkent.generic.long=\u70CF\u8332\u5225\u514B\u65AF\u5766\u6642\u9593 -Asia/Tbilisi.generic.long=\u55AC\u6CBB\u4E9E\u6642\u9593 -Asia/Tehran.generic.long=\u4F0A\u6717\u6642\u9593 -Asia/Tel_Aviv.generic.long=\u4EE5\u8272\u5217\u6642\u9593 -Asia/Thimbu.generic.long=\u4E0D\u4E39\u6642\u9593 -Asia/Thimphu.generic.long=\u4E0D\u4E39\u6642\u9593 -Asia/Tokyo.generic.long=\u65E5\u672C\u6642\u9593 -Asia/Ujung_Pandang.generic.long=\u4E2D\u5370\u5EA6\u5C3C\u897F\u4E9E\u6642\u9593 -Asia/Ulaanbaatar.generic.long=\u5EAB\u502B\u6642\u9593 -Asia/Ulan_Bator.generic.long=\u5EAB\u502B\u6642\u9593 -Asia/Urumqi.generic.long=\u4E2D\u570B\u6642\u9593 -Asia/Ust-Nera.daylight.long=\u70CF\u65AF\u5167\u62C9 (Ust-Nera) \u590F\u4EE4\u6642\u9593 -Asia/Ust-Nera.generic.long=\u70CF\u65AF\u5167\u62C9 (Ust-Nera) \u6642\u9593 -Asia/Ust-Nera.standard.long=\u70CF\u65AF\u5167\u62C9 (Ust-Nera) \u6642\u9593 -Asia/Vientiane.generic.long=\u5370\u5EA6\u652F\u90A3\u6642\u9593 -Asia/Vladivostok.generic.long=\u6D77\u53C3\u5D34\u6642\u9593 -Asia/Yakutsk.generic.long=\u4E9E\u5EAB\u6B21\u514B\u6642\u9593 -Asia/Yekaterinburg.generic.long=\u8449\u5361\u6377\u7433\u5821\u6642\u9593 -Asia/Yerevan.generic.long=\u4E9E\u7F8E\u5C3C\u4E9E\u6642\u9593 -Atlantic/Azores.generic.long=\u4E9E\u901F\u723E\u7FA4\u5CF6\u6642\u9593 -Atlantic/Bermuda.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -Atlantic/Canary.generic.long=\u897F\u6B50\u6642\u9593 -Atlantic/Cape_Verde.generic.long=\u4F5B\u5FB7\u89D2\u6642\u9593 -Atlantic/Faeroe.generic.long=\u897F\u6B50\u6642\u9593 -Atlantic/Faroe.generic.long=\u897F\u6B50\u6642\u9593 -Atlantic/Jan_Mayen.generic.long=\u4E2D\u6B50\u6642\u9593 -Atlantic/Madeira.generic.long=\u897F\u6B50\u6642\u9593 -Atlantic/Reykjavik.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Atlantic/South_Georgia.generic.long=\u5357\u55AC\u6CBB\u4E9E\u6642\u9593 -Atlantic/St_Helena.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Atlantic/Stanley.generic.long=\u798F\u514B\u862D\u7FA4\u5CF6\u6642\u9593 -Australia/ACT.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -Australia/ACT.generic.long=\u6771\u90E8\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -Australia/ACT.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -Australia/Adelaide.daylight.long=\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340) -Australia/Adelaide.generic.long=\u4E2D\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u90E8) -Australia/Adelaide.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u90E8) -Australia/Brisbane.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u6606\u58EB\u862D) -Australia/Brisbane.generic.long=\u6771\u90E8\u6642\u9593 (\u6606\u58EB\u862D) -Australia/Brisbane.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u6606\u58EB\u862D) -Australia/Broken_Hill.daylight.long=\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340/\u65B0\u5357\u5A01\u723E\u65AF) -Australia/Broken_Hill.generic.long=\u4E2D\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u90E8/\u65B0\u5357\u5A01\u723E\u65AF) -Australia/Broken_Hill.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340/\u65B0\u5357\u5A01\u723E\u65AF) -Australia/Canberra.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -Australia/Canberra.generic.long=\u6771\u90E8\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -Australia/Canberra.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -Australia/Currie.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -Australia/Currie.generic.long=\u6771\u90E8\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -Australia/Currie.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -Australia/Darwin.daylight.long=\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340) -Australia/Darwin.generic.long=\u6FB3\u5927\u5229\u4E9E\u4E2D\u90E8\u6642\u9593 (\u5317\u65B9\u5340\u57DF) -Australia/Darwin.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340) -Australia/Eucla.daylight.long=\u4E2D\u897F\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E) -Australia/Eucla.generic.long=\u4E2D\u897F\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E) -Australia/Eucla.standard.long=\u4E2D\u897F\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E) -Australia/Hobart.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u5854\u65AF\u6885\u5C3C\u4E9E\u5CF6) -Australia/Hobart.generic.long=\u6FB3\u5927\u5229\u4E9E\u6771\u90E8\u6642\u9593 (\u5854\u65AF\u99AC\u5C3C\u4E9E\u5CF6) -Australia/Hobart.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u5854\u65AF\u6885\u5C3C\u4E9E\u5CF6) -Australia/LHI.generic.long=\u8C6A\u52F3\u7235\u5CF6\u6642\u9593 -Australia/Lindeman.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u6606\u58EB\u862D) -Australia/Lindeman.generic.long=\u6771\u90E8\u6642\u9593 (\u6606\u58EB\u862D) -Australia/Lindeman.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u6606\u58EB\u862D) -Australia/Lord_Howe.generic.long=\u8C6A\u52F3\u7235\u5CF6\u6642\u9593 -Australia/Melbourne.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E\u90A6) -Australia/Melbourne.generic.long=\u6771\u90E8\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E) -Australia/Melbourne.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E\u90A6) -Australia/NSW.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -Australia/NSW.generic.long=\u6771\u90E8\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -Australia/NSW.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -Australia/North.daylight.long=\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340) -Australia/North.generic.long=\u6FB3\u5927\u5229\u4E9E\u4E2D\u90E8\u6642\u9593 (\u5317\u65B9\u5340\u57DF) -Australia/North.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340) -Australia/Perth.daylight.long=\u897F\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E) -Australia/Perth.generic.long=\u897F\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E) -Australia/Perth.standard.long=\u897F\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E) -Australia/Queensland.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u6606\u58EB\u862D) -Australia/Queensland.generic.long=\u6771\u90E8\u6642\u9593 (\u6606\u58EB\u862D) -Australia/Queensland.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u6606\u58EB\u862D) -Australia/South.daylight.long=\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340) -Australia/South.generic.long=\u4E2D\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u90E8) -Australia/South.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u90E8) -Australia/Sydney.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -Australia/Sydney.generic.long=\u6771\u90E8\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -Australia/Sydney.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF) -Australia/Tasmania.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u5854\u65AF\u6885\u5C3C\u4E9E\u5CF6) -Australia/Tasmania.generic.long=\u6FB3\u5927\u5229\u4E9E\u6771\u90E8\u6642\u9593 (\u5854\u65AF\u99AC\u5C3C\u4E9E\u5CF6) -Australia/Tasmania.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u5854\u65AF\u6885\u5C3C\u4E9E\u5CF6) -Australia/Victoria.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E\u90A6) -Australia/Victoria.generic.long=\u6771\u90E8\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E) -Australia/Victoria.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E\u90A6) -Australia/West.daylight.long=\u897F\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E) -Australia/West.generic.long=\u897F\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E) -Australia/West.standard.long=\u897F\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E) -Australia/Yancowinna.daylight.long=\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340/\u65B0\u5357\u5A01\u723E\u65AF) -Australia/Yancowinna.generic.long=\u4E2D\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u90E8/\u65B0\u5357\u5A01\u723E\u65AF) -Australia/Yancowinna.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340/\u65B0\u5357\u5A01\u723E\u65AF) -BET.generic.long=\u5DF4\u897F\u5229\u4E9E\u6642\u9593 -BST.generic.long=\u5B5F\u52A0\u62C9\u6642\u9593 -Brazil/Acre.generic.long=Acre \u6642\u9593 -Brazil/DeNoronha.generic.long=\u8CBB\u723E\u5357\u591A-\u8FEA\u8AFE\u7F85\u5C3C\u4E9E\u6642\u9593 -Brazil/East.generic.long=\u5DF4\u897F\u5229\u4E9E\u6642\u9593 -Brazil/West.generic.long=\u4E9E\u99AC\u905C\u6642\u9593 -CAT.generic.long=\u4E2D\u975E\u6642\u9593 -CET.generic.long=\u4e2d\u6b50\u6642\u9593 -CNT.generic.long=\u7D10\u82AC\u862D\u6642\u9593 -CST.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -CST6CDT.generic.long=\u7f8e\u570b\u4e2d\u90e8\u6642\u9593 -CTT.generic.long=\u4E2D\u570B\u6642\u9593 -Canada/Atlantic.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -Canada/Central.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -Canada/East-Saskatchewan.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -Canada/Eastern.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -Canada/Mountain.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -Canada/Newfoundland.generic.long=\u7D10\u82AC\u862D\u6642\u9593 -Canada/Pacific.generic.long=\u592A\u5E73\u6D0B\u6642\u9593 -Canada/Saskatchewan.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -Canada/Yukon.generic.long=\u592A\u5E73\u6D0B\u6642\u9593 -Chile/Continental.generic.long=\u667A\u5229\u6642\u9593 -Chile/EasterIsland.generic.long=\u5FA9\u6D3B\u5CF6\u6642\u9593 -Cuba.generic.long=\u53E4\u5DF4\u6642\u9593 -EAT.generic.long=\u6771\u975E\u6642\u9593 -ECT.generic.long=\u4E2D\u6B50\u6642\u9593 -EET.generic.long=\u6771\u6b50\u6642\u9593 -EST.generic.long=\u7f8e\u570b\u6771\u90e8\u6642\u9593 -EST5EDT.generic.long=\u7f8e\u570b\u6771\u90e8\u6642\u9593 -Egypt.generic.long=\u6771\u6B50\u6642\u9593 -Eire.generic.long=\u611B\u723E\u862D\u6587\u6642\u9593 -Etc/Greenwich.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Etc/UCT.generic.long=\u5354\u8ABF\u4E16\u754C\u6642\u9593 -Etc/UTC.generic.long=\u5354\u8ABF\u4E16\u754C\u6642\u9593 -Etc/Universal.generic.long=\u5354\u8ABF\u4E16\u754C\u6642\u9593 -Etc/Zulu.generic.long=\u5354\u8ABF\u4E16\u754C\u6642\u9593 -Europe/Amsterdam.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Andorra.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Athens.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Belfast.generic.long=\u82F1\u570B\u6642\u9593 -Europe/Belgrade.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Berlin.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Bratislava.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Brussels.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Bucharest.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Budapest.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Busingen.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Chisinau.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Copenhagen.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Dublin.generic.long=\u611B\u723E\u862D\u6587\u6642\u9593 -Europe/Gibraltar.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Guernsey.generic.long=\u82F1\u570B\u6642\u9593 -Europe/Helsinki.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Isle_of_Man.generic.long=\u82F1\u570B\u6642\u9593 -Europe/Istanbul.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Jersey.generic.long=\u82F1\u570B\u6642\u9593 -Europe/Kaliningrad.daylight.long=\u6771\u6B50\u5167\u9678\u590F\u4EE4\u6642\u9593 -Europe/Kaliningrad.generic.long=\u6771\u6B50\u5167\u9678\u6642\u9593 -Europe/Kaliningrad.standard.long=\u6771\u6B50\u5167\u9678\u6642\u9593 -Europe/Kiev.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Lisbon.generic.long=\u897F\u6B50\u6642\u9593 -Europe/Ljubljana.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/London.generic.long=\u82F1\u570B\u6642\u9593 -Europe/Luxembourg.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Madrid.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Malta.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Mariehamn.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Minsk.daylight.long=\u6771\u6B50\u5167\u9678\u590F\u4EE4\u6642\u9593 -Europe/Minsk.generic.long=\u6771\u6B50\u5167\u9678\u6642\u9593 -Europe/Minsk.standard.long=\u6771\u6B50\u5167\u9678\u6642\u9593 -Europe/Monaco.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Moscow.generic.long=\u83AB\u65AF\u79D1\u6642\u9593 -Europe/Nicosia.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Oslo.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Paris.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Podgorica.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Prague.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Riga.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Rome.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Samara.generic.long=\u6C99\u99AC\u62C9\u6642\u9593 -Europe/San_Marino.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Sarajevo.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Simferopol.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Skopje.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Sofia.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Stockholm.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Tallinn.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Tirane.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Tiraspol.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Uzhgorod.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Vaduz.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Vatican.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Vienna.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Vilnius.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Volgograd.generic.long=\u4F0F\u723E\u52A0\u683C\u52D2\u6642\u9593 -Europe/Warsaw.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Zagreb.generic.long=\u4E2D\u6B50\u6642\u9593 -Europe/Zaporozhye.generic.long=\u6771\u6B50\u6642\u9593 -Europe/Zurich.generic.long=\u4E2D\u6B50\u6642\u9593 -GB-Eire.generic.long=\u82F1\u570B\u6642\u9593 -GB.generic.long=\u82F1\u570B\u6642\u9593 -GMT.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Greenwich.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -HST.generic.long=\u590f\u5a01\u5937\u6642\u9593 -Hongkong.generic.long=\u9999\u6E2F\u6642\u9593 -IET.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -IST.generic.long=\u5370\u5EA6\u6642\u9593 -Iceland.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593 -Indian/Antananarivo.generic.long=\u6771\u975E\u6642\u9593 -Indian/Chagos.generic.long=\u82F1\u5C6C\u5370\u5EA6\u6D0B\u5730\u5340 -Indian/Christmas.generic.long=\u8056\u8A95\u5CF6\u6642\u9593 -Indian/Cocos.generic.long=\u53EF\u53EF\u65AF\u7FA4\u5CF6\u6642\u9593 -Indian/Comoro.generic.long=\u6771\u975E\u6642\u9593 -Indian/Kerguelen.generic.long=\u6CD5\u570B\u5357\u534A\u7403\u53CA\u5357\u6975\u5C6C\u5730\u6642\u9593 -Indian/Mahe.generic.long=\u585E\u5E2D\u723E\u7FA4\u5CF6\u6642\u9593 -Indian/Maldives.generic.long=\u99AC\u723E\u5730\u592B\u6642\u9593 -Indian/Mauritius.generic.long=\u6469\u91CC\u897F\u65AF\u6642\u9593 -Indian/Mayotte.generic.long=\u6771\u975E\u6642\u9593 -Indian/Reunion.generic.long=\u7559\u5C3C\u65FA\u5CF6\u6642\u9593 -Iran.generic.long=\u4F0A\u6717\u6642\u9593 -Israel.generic.long=\u4EE5\u8272\u5217\u6642\u9593 -JST.generic.long=\u65E5\u672C\u6642\u9593 -Jamaica.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -Japan.generic.long=\u65E5\u672C\u6642\u9593 -Kwajalein.generic.long=\u99AC\u7D39\u723E\u7FA4\u5CF6\u6642\u9593 -Libya.generic.long=\u6771\u6b50\u6642\u9593 -MET.generic.long=MET -MIT.generic.long=\u897F\u85A9\u6469\u4E9E\u6642\u9593 -MST.generic.long=\u7f8e\u570b\u5c71\u5340\u6642\u9593 -MST7MDT.generic.long=\u7f8e\u570b\u5c71\u5340\u6642\u9593 -Mexico/BajaNorte.generic.long=\u592A\u5E73\u6D0B\u6642\u9593 -Mexico/BajaSur.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -Mexico/General.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -NET.generic.long=\u4E9E\u7F8E\u5C3C\u4E9E\u6642\u9593 -NST.generic.long=\u7D10\u897F\u862D\u6642\u9593 -NZ-CHAT.generic.long=\u67E5\u5766\u6642\u9593 -NZ.generic.long=\u7D10\u897F\u862D\u6642\u9593 -Navajo.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -PLT.generic.long=\u5DF4\u57FA\u65AF\u5766\u6642\u9593 -PNT.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -PRC.generic.long=\u4E2D\u570B\u6642\u9593 -PRT.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -PST.generic.long=\u592A\u5E73\u6D0B\u6642\u9593 -PST8PDT.generic.long=\u592a\u5e73\u6d0b\u6642\u9593 -Pacific/Apia.generic.long=\u897F\u85A9\u6469\u4E9E\u6642\u9593 -Pacific/Auckland.generic.long=\u7D10\u897F\u862D\u6642\u9593 -Pacific/Chatham.generic.long=\u67E5\u5766\u6642\u9593 -Pacific/Chuuk.daylight.long=\u695A\u514B\u590F\u4EE4\u6642\u9593 -Pacific/Chuuk.generic.long=\u695A\u514B\u6642\u9593 -Pacific/Chuuk.standard.long=\u695A\u514B\u6642\u9593 -Pacific/Easter.generic.long=\u5FA9\u6D3B\u5CF6\u6642\u9593 -Pacific/Efate.generic.long=\u74E6\u5974\u963F\u5716\u6642\u9593 -Pacific/Enderbury.generic.long=\u83F2\u5C3C\u514B\u65AF\u7FA4\u5CF6\u6642\u9593 -Pacific/Fakaofo.generic.long=\u6258\u514B\u52DE\u7FA4\u5CF6\u6642\u9593 -Pacific/Fiji.generic.long=\u6590\u6FDF\u6642\u9593 -Pacific/Funafuti.generic.long=\u5410\u74E6\u9B6F\u6642\u9593 -Pacific/Galapagos.generic.long=\u52A0\u62C9\u5DF4\u54E5\u6642\u9593 -Pacific/Gambier.generic.long=\u7518\u6BD4\u723E\u6642\u9593 -Pacific/Guadalcanal.generic.long=\u6240\u7F85\u9580\u7FA4\u5CF6\u6642\u9593 -Pacific/Guam.generic.long=\u67E5\u83AB\u7F85\u6642\u9593 -Pacific/Honolulu.generic.long=\u590F\u5A01\u5937\u6642\u9593 -Pacific/Johnston.generic.long=\u590F\u5A01\u5937\u6642\u9593 -Pacific/Kiritimati.generic.long=\u5217\u5DBC\u7FA4\u5CF6\u6642\u9593 -Pacific/Kosrae.generic.long=Kosrae \u6642\u9593 -Pacific/Kwajalein.generic.long=\u99AC\u7D39\u723E\u7FA4\u5CF6\u6642\u9593 -Pacific/Majuro.generic.long=\u99AC\u7D39\u723E\u7FA4\u5CF6\u6642\u9593 -Pacific/Marquesas.generic.long=\u99AC\u514B\u85A9\u65AF\u6642\u9593 -Pacific/Midway.generic.long=\u85A9\u6469\u4E9E\u6642\u9593 -Pacific/Nauru.generic.long=\u8AFE\u9B6F\u6642\u9593 -Pacific/Niue.generic.long=\u7D10\u5A01\u5CF6\u6642\u9593 -Pacific/Norfolk.generic.long=\u8AFE\u798F\u514B\u6642\u9593 -Pacific/Noumea.generic.long=\u65B0\u52A0\u52D2\u591A\u5C3C\u4E9E\u6642\u9593 -Pacific/Pago_Pago.generic.long=\u85A9\u6469\u4E9E\u6642\u9593 -Pacific/Palau.generic.long=\u5E1B\u7409\u6642\u9593 -Pacific/Pitcairn.generic.long=\u76AE\u7279\u5EB7\u6642\u9593 -Pacific/Pohnpei.daylight.long=\u6CE2\u7D0D\u4F69\u590F\u4EE4\u6642\u9593 -Pacific/Pohnpei.generic.long=\u6CE2\u7D0D\u4F69\u5CF6\u6642\u9593 -Pacific/Pohnpei.standard.long=\u6CE2\u7D0D\u4F69\u6642\u9593 -Pacific/Ponape.daylight.long=\u6CE2\u7D0D\u4F69\u590F\u4EE4\u6642\u9593 -Pacific/Ponape.generic.long=\u6CE2\u7D0D\u4F69\u5CF6\u6642\u9593 -Pacific/Ponape.standard.long=\u6CE2\u7D0D\u4F69\u6642\u9593 -Pacific/Port_Moresby.generic.long=\u5DF4\u5E03\u4E9E\u65B0\u5E7E\u5167\u4E9E\u6642\u9593 -Pacific/Rarotonga.generic.long=\u5EAB\u514B\u7FA4\u5CF6\u6642\u9593 -Pacific/Saipan.generic.long=\u67E5\u83AB\u7F85\u6642\u9593 -Pacific/Samoa.generic.long=\u85A9\u6469\u4E9E\u6642\u9593 -Pacific/Tahiti.generic.long=\u5927\u6EAA\u5730\u6642\u9593 -Pacific/Tarawa.generic.long=\u5409\u4F2F\u7279\u7FA4\u5CF6\u6642\u9593 -Pacific/Tongatapu.generic.long=\u6771\u52A0\u6642\u9593 -Pacific/Truk.daylight.long=\u695A\u514B\u590F\u4EE4\u6642\u9593 -Pacific/Truk.generic.long=\u695A\u514B\u6642\u9593 -Pacific/Truk.standard.long=\u695A\u514B\u6642\u9593 -Pacific/Wake.generic.long=\u5A01\u514B\u6642\u9593 -Pacific/Wallis.generic.long=\u74E6\u5229\u65AF\u53CA\u798F\u675C\u7D0D\u7FA4\u5CF6\u6642\u9593 -Pacific/Yap.daylight.long=\u695A\u514B\u590F\u4EE4\u6642\u9593 -Pacific/Yap.generic.long=\u695A\u514B\u6642\u9593 -Pacific/Yap.standard.long=\u695A\u514B\u6642\u9593 -Poland.generic.long=\u4E2D\u6B50\u6642\u9593 -Portugal.generic.long=\u897F\u6B50\u6642\u9593 -ROK.generic.long=\u97D3\u570B\u6642\u9593 -SST.generic.long=\u6240\u7F85\u9580\u7FA4\u5CF6\u6642\u9593 -Singapore.generic.long=\u65B0\u52A0\u5761\u6642\u9593 -SystemV/AST4.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -SystemV/AST4ADT.generic.long=\u5927\u897F\u6D0B\u6642\u9593 -SystemV/CST6.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -SystemV/CST6CDT.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -SystemV/EST5.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -SystemV/EST5EDT.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -SystemV/HST10.generic.long=\u590F\u5A01\u5937\u6642\u9593 -SystemV/MST7.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -SystemV/MST7MDT.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -SystemV/PST8.generic.long=\u592A\u5E73\u6D0B\u6642\u9593 -SystemV/PST8PDT.generic.long=\u592A\u5E73\u6D0B\u6642\u9593 -SystemV/YST9.generic.long=\u963F\u62C9\u65AF\u52A0\u6642\u9593 -SystemV/YST9YDT.generic.long=\u963F\u62C9\u65AF\u52A0\u6642\u9593 -Turkey.generic.long=\u6771\u6B50\u6642\u9593 -UCT.generic.long=\u5354\u8ABF\u4E16\u754C\u6642\u9593 -US/Alaska.generic.long=\u963F\u62C9\u65AF\u52A0\u6642\u9593 -US/Aleutian.generic.long=\u590F\u5A01\u5937-\u963F\u7559\u7533\u6642\u9593 -US/Arizona.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -US/Central.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -US/East-Indiana.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -US/Eastern.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -US/Hawaii.generic.long=\u590F\u5A01\u5937\u6642\u9593 -US/Indiana-Starke.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593 -US/Michigan.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593 -US/Mountain.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593 -US/Pacific-New.generic.long=\u592A\u5E73\u6D0B\u6642\u9593 -US/Pacific.generic.long=\u592A\u5E73\u6D0B\u6642\u9593 -US/Samoa.generic.long=\u85A9\u6469\u4E9E\u6642\u9593 -UTC.generic.long=\u5354\u8ABF\u4E16\u754C\u6642\u9593 -Universal.generic.long=\u5354\u8ABF\u4E16\u754C\u6642\u9593 -VST.generic.long=\u5370\u5EA6\u652F\u90A3\u6642\u9593 -W-SU.generic.long=\u83AB\u65AF\u79D1\u6642\u9593 -WET.generic.long=\u897f\u6b50\u6642\u9593 -Zulu.generic.long=\u5354\u8ABF\u4E16\u754C\u6642\u9593 diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_TW_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_TW_short.properties deleted file mode 100644 index c2de6fde89e..00000000000 --- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_TW_short.properties +++ /dev/null @@ -1,1743 +0,0 @@ -ACT.daylight.short=CST -ACT.generic.short=CT -ACT.standard.short=CST -AET.daylight.short=EST -AET.generic.short=ET -AET.standard.short=EST -Africa/Abidjan.daylight.short=GMT -Africa/Abidjan.generic.short=GMT -Africa/Abidjan.standard.short=GMT -Africa/Accra.daylight.short=GHST -Africa/Accra.generic.short=GMT -Africa/Accra.standard.short=GMT -Africa/Addis_Ababa.daylight.short=EAST -Africa/Addis_Ababa.generic.short=EAT -Africa/Addis_Ababa.standard.short=EAT -Africa/Algiers.daylight.short=CEST -Africa/Algiers.generic.short=CET -Africa/Algiers.standard.short=CET -Africa/Asmara.daylight.short=EAST -Africa/Asmara.generic.short=EAT -Africa/Asmara.standard.short=EAT -Africa/Asmera.daylight.short=EAST -Africa/Asmera.generic.short=EAT -Africa/Asmera.standard.short=EAT -Africa/Bamako.daylight.short=GMT -Africa/Bamako.generic.short=GMT -Africa/Bamako.standard.short=GMT -Africa/Bangui.daylight.short=WAST -Africa/Bangui.generic.short=WAT -Africa/Bangui.standard.short=WAT -Africa/Banjul.daylight.short=GMT -Africa/Banjul.generic.short=GMT -Africa/Banjul.standard.short=GMT -Africa/Bissau.daylight.short=GMT -Africa/Bissau.generic.short=GMT -Africa/Bissau.standard.short=GMT -Africa/Blantyre.daylight.short=CAST -Africa/Blantyre.generic.short=CAT -Africa/Blantyre.standard.short=CAT -Africa/Brazzaville.daylight.short=WAST -Africa/Brazzaville.generic.short=WAT -Africa/Brazzaville.standard.short=WAT -Africa/Bujumbura.daylight.short=CAST -Africa/Bujumbura.generic.short=CAT -Africa/Bujumbura.standard.short=CAT -Africa/Cairo.daylight.short=EEST -Africa/Cairo.generic.short=EET -Africa/Cairo.standard.short=EET -Africa/Casablanca.daylight.short=WEST -Africa/Casablanca.generic.short=WET -Africa/Casablanca.standard.short=WET -Africa/Ceuta.daylight.short=CEST -Africa/Ceuta.generic.short=CET -Africa/Ceuta.standard.short=CET -Africa/Conakry.daylight.short=GMT -Africa/Conakry.generic.short=GMT -Africa/Conakry.standard.short=GMT -Africa/Dakar.daylight.short=GMT -Africa/Dakar.generic.short=GMT -Africa/Dakar.standard.short=GMT -Africa/Dar_es_Salaam.daylight.short=EAST -Africa/Dar_es_Salaam.generic.short=EAT -Africa/Dar_es_Salaam.standard.short=EAT -Africa/Djibouti.daylight.short=EAST -Africa/Djibouti.generic.short=EAT -Africa/Djibouti.standard.short=EAT -Africa/Douala.daylight.short=WAST -Africa/Douala.generic.short=WAT -Africa/Douala.standard.short=WAT -Africa/El_Aaiun.daylight.short=WEST -Africa/El_Aaiun.generic.short=WET -Africa/El_Aaiun.standard.short=WET -Africa/Freetown.daylight.short=SLST -Africa/Freetown.generic.short=SLT -Africa/Freetown.standard.short=GMT -Africa/Gaborone.daylight.short=CAST -Africa/Gaborone.generic.short=CAT -Africa/Gaborone.standard.short=CAT -Africa/Harare.daylight.short=CAST -Africa/Harare.generic.short=CAT -Africa/Harare.standard.short=CAT -Africa/Johannesburg.daylight.short=SAST -Africa/Johannesburg.generic.short=SAT -Africa/Johannesburg.standard.short=SAST -Africa/Juba.daylight.short=EAST -Africa/Juba.generic.short=EAT -Africa/Juba.standard.short=EAT -Africa/Kampala.daylight.short=EAST -Africa/Kampala.generic.short=EAT -Africa/Kampala.standard.short=EAT -Africa/Khartoum.daylight.short=EAST -Africa/Khartoum.generic.short=EAT -Africa/Khartoum.standard.short=EAT -Africa/Kigali.daylight.short=CAST -Africa/Kigali.generic.short=CAT -Africa/Kigali.standard.short=CAT -Africa/Kinshasa.daylight.short=WAST -Africa/Kinshasa.generic.short=WAT -Africa/Kinshasa.standard.short=WAT -Africa/Lagos.daylight.short=WAST -Africa/Lagos.generic.short=WAT -Africa/Lagos.standard.short=WAT -Africa/Libreville.daylight.short=WAST -Africa/Libreville.generic.short=WAT -Africa/Libreville.standard.short=WAT -Africa/Lome.daylight.short=GMT -Africa/Lome.generic.short=GMT -Africa/Lome.standard.short=GMT -Africa/Luanda.daylight.short=WAST -Africa/Luanda.generic.short=WAT -Africa/Luanda.standard.short=WAT -Africa/Lubumbashi.daylight.short=CAST -Africa/Lubumbashi.generic.short=CAT -Africa/Lubumbashi.standard.short=CAT -Africa/Lusaka.daylight.short=CAST -Africa/Lusaka.generic.short=CAT -Africa/Lusaka.standard.short=CAT -Africa/Malabo.daylight.short=WAST -Africa/Malabo.generic.short=WAT -Africa/Malabo.standard.short=WAT -Africa/Maputo.daylight.short=CAST -Africa/Maputo.generic.short=CAT -Africa/Maputo.standard.short=CAT -Africa/Maseru.daylight.short=SAST -Africa/Maseru.generic.short=SAT -Africa/Maseru.standard.short=SAST -Africa/Mbabane.daylight.short=SAST -Africa/Mbabane.generic.short=SAT -Africa/Mbabane.standard.short=SAST -Africa/Mogadishu.daylight.short=EAST -Africa/Mogadishu.generic.short=EAT -Africa/Mogadishu.standard.short=EAT -Africa/Monrovia.daylight.short=GMT -Africa/Monrovia.generic.short=GMT -Africa/Monrovia.standard.short=GMT -Africa/Nairobi.daylight.short=EAST -Africa/Nairobi.generic.short=EAT -Africa/Nairobi.standard.short=EAT -Africa/Ndjamena.daylight.short=WAST -Africa/Ndjamena.generic.short=WAT -Africa/Ndjamena.standard.short=WAT -Africa/Niamey.daylight.short=WAST -Africa/Niamey.generic.short=WAT -Africa/Niamey.standard.short=WAT -Africa/Nouakchott.daylight.short=GMT -Africa/Nouakchott.generic.short=GMT -Africa/Nouakchott.standard.short=GMT -Africa/Ouagadougou.daylight.short=GMT -Africa/Ouagadougou.generic.short=GMT -Africa/Ouagadougou.standard.short=GMT -Africa/Porto-Novo.daylight.short=WAST -Africa/Porto-Novo.generic.short=WAT -Africa/Porto-Novo.standard.short=WAT -Africa/Sao_Tome.daylight.short=GMT -Africa/Sao_Tome.generic.short=GMT -Africa/Sao_Tome.standard.short=GMT -Africa/Timbuktu.daylight.short=GMT -Africa/Timbuktu.generic.short=GMT -Africa/Timbuktu.standard.short=GMT -Africa/Tripoli.daylight.short=EEST -Africa/Tripoli.generic.short=EET -Africa/Tripoli.standard.short=EET -Africa/Tunis.daylight.short=CEST -Africa/Tunis.generic.short=CET -Africa/Tunis.standard.short=CET -Africa/Windhoek.daylight.short=WAST -Africa/Windhoek.generic.short=WAT -Africa/Windhoek.standard.short=WAT -AGT.daylight.short=ARST -AGT.generic.short=ART -AGT.standard.short=ART -America/Adak.daylight.short=HADT -America/Adak.generic.short=HAT -America/Adak.standard.short=HAST -America/Anchorage.daylight.short=AKDT -America/Anchorage.generic.short=AKT -America/Anchorage.standard.short=AKST -America/Anguilla.daylight.short=ADT -America/Anguilla.generic.short=AT -America/Anguilla.standard.short=AST -America/Antigua.daylight.short=ADT -America/Antigua.generic.short=AT -America/Antigua.standard.short=AST -America/Araguaina.daylight.short=BRST -America/Araguaina.generic.short=BRT -America/Araguaina.standard.short=BRT -America/Argentina/Buenos_Aires.daylight.short=ARST -America/Argentina/Buenos_Aires.generic.short=ART -America/Argentina/Buenos_Aires.standard.short=ART -America/Argentina/Catamarca.daylight.short=ARST -America/Argentina/Catamarca.generic.short=ART -America/Argentina/Catamarca.standard.short=ART -America/Argentina/ComodRivadavia.daylight.short=ARST -America/Argentina/ComodRivadavia.generic.short=ART -America/Argentina/ComodRivadavia.standard.short=ART -America/Argentina/Cordoba.daylight.short=ARST -America/Argentina/Cordoba.generic.short=ART -America/Argentina/Cordoba.standard.short=ART -America/Argentina/Jujuy.daylight.short=ARST -America/Argentina/Jujuy.generic.short=ART -America/Argentina/Jujuy.standard.short=ART -America/Argentina/La_Rioja.daylight.short=ARST -America/Argentina/La_Rioja.generic.short=ART -America/Argentina/La_Rioja.standard.short=ART -America/Argentina/Mendoza.daylight.short=ARST -America/Argentina/Mendoza.generic.short=ART -America/Argentina/Mendoza.standard.short=ART -America/Argentina/Rio_Gallegos.daylight.short=ARST -America/Argentina/Rio_Gallegos.generic.short=ART -America/Argentina/Rio_Gallegos.standard.short=ART -America/Argentina/Salta.daylight.short=ARST -America/Argentina/Salta.generic.short=ART -America/Argentina/Salta.standard.short=ART -America/Argentina/San_Juan.daylight.short=ARST -America/Argentina/San_Juan.generic.short=ART -America/Argentina/San_Juan.standard.short=ART -America/Argentina/San_Luis.daylight.short=ARST -America/Argentina/San_Luis.generic.short=ART -America/Argentina/San_Luis.standard.short=ART -America/Argentina/Tucuman.daylight.short=ARST -America/Argentina/Tucuman.generic.short=ART -America/Argentina/Tucuman.standard.short=ART -America/Argentina/Ushuaia.daylight.short=ARST -America/Argentina/Ushuaia.generic.short=ART -America/Argentina/Ushuaia.standard.short=ART -America/Aruba.daylight.short=ADT -America/Aruba.generic.short=AT -America/Aruba.standard.short=AST -America/Asuncion.daylight.short=PYST -America/Asuncion.generic.short=PYT -America/Asuncion.standard.short=PYT -America/Atikokan.daylight.short=EDT -America/Atikokan.generic.short=ET -America/Atikokan.standard.short=EST -America/Atka.daylight.short=HADT -America/Atka.generic.short=HAT -America/Atka.standard.short=HAST -America/Bahia_Banderas.daylight.short=CDT -America/Bahia_Banderas.generic.short=CT -America/Bahia_Banderas.standard.short=CST -America/Bahia.daylight.short=BRST -America/Bahia.generic.short=BRT -America/Bahia.standard.short=BRT -America/Barbados.daylight.short=ADT -America/Barbados.generic.short=AT -America/Barbados.standard.short=AST -America/Belem.daylight.short=BRST -America/Belem.generic.short=BRT -America/Belem.standard.short=BRT -America/Belize.daylight.short=CDT -America/Belize.generic.short=CT -America/Belize.standard.short=CST -America/Blanc-Sablon.daylight.short=ADT -America/Blanc-Sablon.generic.short=AT -America/Blanc-Sablon.standard.short=AST -America/Boa_Vista.daylight.short=AMST -America/Boa_Vista.generic.short=AMT -America/Boa_Vista.standard.short=AMT -America/Bogota.daylight.short=COST -America/Bogota.generic.short=COT -America/Bogota.standard.short=COT -America/Boise.daylight.short=MDT -America/Boise.generic.short=MT -America/Boise.standard.short=MST -America/Buenos_Aires.daylight.short=ARST -America/Buenos_Aires.generic.short=ART -America/Buenos_Aires.standard.short=ART -America/Cambridge_Bay.daylight.short=MDT -America/Cambridge_Bay.generic.short=MT -America/Cambridge_Bay.standard.short=MST -America/Campo_Grande.daylight.short=AMST -America/Campo_Grande.generic.short=AMT -America/Campo_Grande.standard.short=AMT -America/Cancun.daylight.short=CDT -America/Cancun.generic.short=CT -America/Cancun.standard.short=CST -America/Caracas.daylight.short=VEST -America/Caracas.generic.short=VET -America/Caracas.standard.short=VET -America/Catamarca.daylight.short=ARST -America/Catamarca.generic.short=ART -America/Catamarca.standard.short=ART -America/Cayenne.daylight.short=GFST -America/Cayenne.generic.short=GFT -America/Cayenne.standard.short=GFT -America/Cayman.daylight.short=EDT -America/Cayman.generic.short=ET -America/Cayman.standard.short=EST -America/Chicago.daylight.short=CDT -America/Chicago.generic.short=CT -America/Chicago.standard.short=CST -America/Chihuahua.daylight.short=MDT -America/Chihuahua.generic.short=MT -America/Chihuahua.standard.short=MST -America/Coral_Harbour.daylight.short=EDT -America/Coral_Harbour.generic.short=ET -America/Coral_Harbour.standard.short=EST -America/Cordoba.daylight.short=ARST -America/Cordoba.generic.short=ART -America/Cordoba.standard.short=ART -America/Costa_Rica.daylight.short=CDT -America/Costa_Rica.generic.short=CT -America/Costa_Rica.standard.short=CST -America/Creston.daylight.short=MDT -America/Creston.generic.short=MT -America/Creston.standard.short=MST -America/Cuiaba.daylight.short=AMST -America/Cuiaba.generic.short=AMT -America/Cuiaba.standard.short=AMT -America/Curacao.daylight.short=ADT -America/Curacao.generic.short=AT -America/Curacao.standard.short=AST -America/Danmarkshavn.daylight.short=GMT -America/Danmarkshavn.generic.short=GMT -America/Danmarkshavn.standard.short=GMT -America/Dawson_Creek.daylight.short=MDT -America/Dawson_Creek.generic.short=MT -America/Dawson_Creek.standard.short=MST -America/Dawson.daylight.short=PDT -America/Dawson.generic.short=PT -America/Dawson.standard.short=PST -America/Denver.daylight.short=MDT -America/Denver.generic.short=MT -America/Denver.standard.short=MST -America/Detroit.daylight.short=EDT -America/Detroit.generic.short=ET -America/Detroit.standard.short=EST -America/Dominica.daylight.short=ADT -America/Dominica.generic.short=AT -America/Dominica.standard.short=AST -America/Edmonton.daylight.short=MDT -America/Edmonton.generic.short=MT -America/Edmonton.standard.short=MST -America/Eirunepe.daylight.short=ACST -America/Eirunepe.generic.short=ACT -America/Eirunepe.standard.short=ACT -America/El_Salvador.daylight.short=CDT -America/El_Salvador.generic.short=CT -America/El_Salvador.standard.short=CST -America/Ensenada.daylight.short=PDT -America/Ensenada.generic.short=PT -America/Ensenada.standard.short=PST -America/Fortaleza.daylight.short=BRST -America/Fortaleza.generic.short=BRT -America/Fortaleza.standard.short=BRT -America/Fort_Wayne.daylight.short=EDT -America/Fort_Wayne.generic.short=ET -America/Fort_Wayne.standard.short=EST -America/Glace_Bay.daylight.short=ADT -America/Glace_Bay.generic.short=AT -America/Glace_Bay.standard.short=AST -America/Godthab.daylight.short=WGST -America/Godthab.generic.short=WGT -America/Godthab.standard.short=WGT -America/Goose_Bay.daylight.short=ADT -America/Goose_Bay.generic.short=AT -America/Goose_Bay.standard.short=AST -America/Grand_Turk.daylight.short=EDT -America/Grand_Turk.generic.short=ET -America/Grand_Turk.standard.short=EST -America/Grenada.daylight.short=ADT -America/Grenada.generic.short=AT -America/Grenada.standard.short=AST -America/Guadeloupe.daylight.short=ADT -America/Guadeloupe.generic.short=AT -America/Guadeloupe.standard.short=AST -America/Guatemala.daylight.short=CDT -America/Guatemala.generic.short=CT -America/Guatemala.standard.short=CST -America/Guayaquil.daylight.short=ECST -America/Guayaquil.generic.short=ECT -America/Guayaquil.standard.short=ECT -America/Guyana.daylight.short=GYST -America/Guyana.generic.short=GYT -America/Guyana.standard.short=GYT -America/Halifax.daylight.short=ADT -America/Halifax.generic.short=AT -America/Halifax.standard.short=AST -America/Havana.daylight.short=CDT -America/Havana.generic.short=CT -America/Havana.standard.short=CST -America/Hermosillo.daylight.short=MDT -America/Hermosillo.generic.short=MT -America/Hermosillo.standard.short=MST -America/Indiana/Indianapolis.daylight.short=EDT -America/Indiana/Indianapolis.generic.short=ET -America/Indiana/Indianapolis.standard.short=EST -America/Indiana/Knox.daylight.short=CDT -America/Indiana/Knox.generic.short=CT -America/Indiana/Knox.standard.short=CST -America/Indiana/Marengo.daylight.short=EDT -America/Indiana/Marengo.generic.short=ET -America/Indiana/Marengo.standard.short=EST -America/Indiana/Petersburg.daylight.short=EDT -America/Indiana/Petersburg.generic.short=ET -America/Indiana/Petersburg.standard.short=EST -America/Indianapolis.daylight.short=EDT -America/Indianapolis.generic.short=ET -America/Indianapolis.standard.short=EST -America/Indiana/Tell_City.daylight.short=CDT -America/Indiana/Tell_City.generic.short=CT -America/Indiana/Tell_City.standard.short=CST -America/Indiana/Vevay.daylight.short=EDT -America/Indiana/Vevay.generic.short=ET -America/Indiana/Vevay.standard.short=EST -America/Indiana/Vincennes.daylight.short=EDT -America/Indiana/Vincennes.generic.short=ET -America/Indiana/Vincennes.standard.short=EST -America/Indiana/Winamac.daylight.short=EDT -America/Indiana/Winamac.generic.short=ET -America/Indiana/Winamac.standard.short=EST -America/Inuvik.daylight.short=MDT -America/Inuvik.generic.short=MT -America/Inuvik.standard.short=MST -America/Iqaluit.daylight.short=EDT -America/Iqaluit.generic.short=ET -America/Iqaluit.standard.short=EST -America/Jamaica.daylight.short=EDT -America/Jamaica.generic.short=ET -America/Jamaica.standard.short=EST -America/Jujuy.daylight.short=ARST -America/Jujuy.generic.short=ART -America/Jujuy.standard.short=ART -America/Juneau.daylight.short=AKDT -America/Juneau.generic.short=AKT -America/Juneau.standard.short=AKST -America/Kentucky/Louisville.daylight.short=EDT -America/Kentucky/Louisville.generic.short=ET -America/Kentucky/Louisville.standard.short=EST -America/Kentucky/Monticello.daylight.short=EDT -America/Kentucky/Monticello.generic.short=ET -America/Kentucky/Monticello.standard.short=EST -America/Knox_IN.daylight.short=CDT -America/Knox_IN.generic.short=CT -America/Knox_IN.standard.short=CST -America/Kralendijk.daylight.short=ADT -America/Kralendijk.generic.short=AT -America/Kralendijk.standard.short=AST -America/La_Paz.daylight.short=BOST -America/La_Paz.generic.short=BOT -America/La_Paz.standard.short=BOT -America/Lima.daylight.short=PEST -America/Lima.generic.short=PET -America/Lima.standard.short=PET -America/Los_Angeles.daylight.short=PDT -America/Los_Angeles.generic.short=PT -America/Los_Angeles.standard.short=PST -America/Louisville.daylight.short=EDT -America/Louisville.generic.short=ET -America/Louisville.standard.short=EST -America/Lower_Princes.daylight.short=ADT -America/Lower_Princes.generic.short=AT -America/Lower_Princes.standard.short=AST -America/Maceio.daylight.short=BRST -America/Maceio.generic.short=BRT -America/Maceio.standard.short=BRT -America/Managua.daylight.short=CDT -America/Managua.generic.short=CT -America/Managua.standard.short=CST -America/Manaus.daylight.short=AMST -America/Manaus.generic.short=AMT -America/Manaus.standard.short=AMT -America/Marigot.daylight.short=ADT -America/Marigot.generic.short=AT -America/Marigot.standard.short=AST -America/Martinique.daylight.short=ADT -America/Martinique.generic.short=AT -America/Martinique.standard.short=AST -America/Matamoros.daylight.short=CDT -America/Matamoros.generic.short=CT -America/Matamoros.standard.short=CST -America/Mazatlan.daylight.short=MDT -America/Mazatlan.generic.short=MT -America/Mazatlan.standard.short=MST -America/Mendoza.daylight.short=ARST -America/Mendoza.generic.short=ART -America/Mendoza.standard.short=ART -America/Menominee.daylight.short=CDT -America/Menominee.generic.short=CT -America/Menominee.standard.short=CST -America/Merida.daylight.short=CDT -America/Merida.generic.short=CT -America/Merida.standard.short=CST -America/Metlakatla.daylight.short=MeDT -America/Metlakatla.generic.short=MeT -America/Metlakatla.standard.short=MeST -America/Mexico_City.daylight.short=CDT -America/Mexico_City.generic.short=CT -America/Mexico_City.standard.short=CST -America/Miquelon.daylight.short=PMDT -America/Miquelon.generic.short=PMT -America/Miquelon.standard.short=PMST -America/Moncton.daylight.short=ADT -America/Moncton.generic.short=AT -America/Moncton.standard.short=AST -America/Monterrey.daylight.short=CDT -America/Monterrey.generic.short=CT -America/Monterrey.standard.short=CST -America/Montevideo.daylight.short=UYST -America/Montevideo.generic.short=UYT -America/Montevideo.standard.short=UYT -America/Montreal.daylight.short=EDT -America/Montreal.generic.short=ET -America/Montreal.standard.short=EST -America/Montserrat.daylight.short=ADT -America/Montserrat.generic.short=AT -America/Montserrat.standard.short=AST -America/Nassau.daylight.short=EDT -America/Nassau.generic.short=ET -America/Nassau.standard.short=EST -America/New_York.daylight.short=EDT -America/New_York.generic.short=ET -America/New_York.standard.short=EST -America/Nipigon.daylight.short=EDT -America/Nipigon.generic.short=ET -America/Nipigon.standard.short=EST -America/Nome.daylight.short=AKDT -America/Nome.generic.short=AKT -America/Nome.standard.short=AKST -America/Noronha.daylight.short=FNST -America/Noronha.generic.short=FNT -America/Noronha.standard.short=FNT -America/North_Dakota/Beulah.daylight.short=CDT -America/North_Dakota/Beulah.generic.short=CT -America/North_Dakota/Beulah.standard.short=CST -America/North_Dakota/Center.daylight.short=CDT -America/North_Dakota/Center.generic.short=CT -America/North_Dakota/Center.standard.short=CST -America/North_Dakota/New_Salem.daylight.short=CDT -America/North_Dakota/New_Salem.generic.short=CT -America/North_Dakota/New_Salem.standard.short=CST -America/Ojinaga.daylight.short=MDT -America/Ojinaga.generic.short=MT -America/Ojinaga.standard.short=MST -America/Panama.daylight.short=EDT -America/Panama.generic.short=ET -America/Panama.standard.short=EST -America/Pangnirtung.daylight.short=EDT -America/Pangnirtung.generic.short=ET -America/Pangnirtung.standard.short=EST -America/Paramaribo.daylight.short=SRST -America/Paramaribo.generic.short=SRT -America/Paramaribo.standard.short=SRT -America/Phoenix.daylight.short=MDT -America/Phoenix.generic.short=MT -America/Phoenix.standard.short=MST -America/Port-au-Prince.daylight.short=EDT -America/Port-au-Prince.generic.short=ET -America/Port-au-Prince.standard.short=EST -America/Porto_Acre.daylight.short=ACST -America/Porto_Acre.generic.short=ACT -America/Porto_Acre.standard.short=ACT -America/Port_of_Spain.daylight.short=ADT -America/Port_of_Spain.generic.short=AT -America/Port_of_Spain.standard.short=AST -America/Porto_Velho.daylight.short=AMST -America/Porto_Velho.generic.short=AMT -America/Porto_Velho.standard.short=AMT -America/Puerto_Rico.daylight.short=ADT -America/Puerto_Rico.generic.short=AT -America/Puerto_Rico.standard.short=AST -America/Rainy_River.daylight.short=CDT -America/Rainy_River.generic.short=CT -America/Rainy_River.standard.short=CST -America/Rankin_Inlet.daylight.short=CDT -America/Rankin_Inlet.generic.short=CT -America/Rankin_Inlet.standard.short=CST -America/Recife.daylight.short=BRST -America/Recife.generic.short=BRT -America/Recife.standard.short=BRT -America/Regina.daylight.short=CDT -America/Regina.generic.short=CT -America/Regina.standard.short=CST -America/Resolute.daylight.short=CDT -America/Resolute.generic.short=CT -America/Resolute.standard.short=CST -America/Rio_Branco.daylight.short=ACST -America/Rio_Branco.generic.short=ACT -America/Rio_Branco.standard.short=ACT -America/Rosario.daylight.short=ARST -America/Rosario.generic.short=ART -America/Rosario.standard.short=ART -America/Santa_Isabel.daylight.short=PDT -America/Santa_Isabel.generic.short=PT -America/Santa_Isabel.standard.short=PST -America/Santarem.daylight.short=BRST -America/Santarem.generic.short=BRT -America/Santarem.standard.short=BRT -America/Santiago.daylight.short=CLST -America/Santiago.generic.short=CLT -America/Santiago.standard.short=CLT -America/Santo_Domingo.daylight.short=ADT -America/Santo_Domingo.generic.short=AT -America/Santo_Domingo.standard.short=AST -America/Sao_Paulo.daylight.short=BRST -America/Sao_Paulo.generic.short=BRT -America/Sao_Paulo.standard.short=BRT -America/Scoresbysund.daylight.short=EGST -America/Scoresbysund.generic.short=EGT -America/Scoresbysund.standard.short=EGT -America/Shiprock.daylight.short=MDT -America/Shiprock.generic.short=MT -America/Shiprock.standard.short=MST -America/Sitka.daylight.short=AKDT -America/Sitka.generic.short=AKT -America/Sitka.standard.short=AKST -America/St_Barthelemy.daylight.short=ADT -America/St_Barthelemy.generic.short=AT -America/St_Barthelemy.standard.short=AST -America/St_Johns.daylight.short=NDT -America/St_Johns.generic.short=NT -America/St_Johns.standard.short=NST -America/St_Kitts.daylight.short=ADT -America/St_Kitts.generic.short=AT -America/St_Kitts.standard.short=AST -America/St_Lucia.daylight.short=ADT -America/St_Lucia.generic.short=AT -America/St_Lucia.standard.short=AST -America/St_Thomas.daylight.short=ADT -America/St_Thomas.generic.short=AT -America/St_Thomas.standard.short=AST -America/St_Vincent.daylight.short=ADT -America/St_Vincent.generic.short=AT -America/St_Vincent.standard.short=AST -America/Swift_Current.daylight.short=CDT -America/Swift_Current.generic.short=CT -America/Swift_Current.standard.short=CST -America/Tegucigalpa.daylight.short=CDT -America/Tegucigalpa.generic.short=CT -America/Tegucigalpa.standard.short=CST -America/Thule.daylight.short=ADT -America/Thule.generic.short=AT -America/Thule.standard.short=AST -America/Thunder_Bay.daylight.short=EDT -America/Thunder_Bay.generic.short=ET -America/Thunder_Bay.standard.short=EST -America/Tijuana.daylight.short=PDT -America/Tijuana.generic.short=PT -America/Tijuana.standard.short=PST -America/Toronto.daylight.short=EDT -America/Toronto.generic.short=ET -America/Toronto.standard.short=EST -America/Tortola.daylight.short=ADT -America/Tortola.generic.short=AT -America/Tortola.standard.short=AST -America/Vancouver.daylight.short=PDT -America/Vancouver.generic.short=PT -America/Vancouver.standard.short=PST -America/Virgin.daylight.short=ADT -America/Virgin.generic.short=AT -America/Virgin.standard.short=AST -America/Whitehorse.daylight.short=PDT -America/Whitehorse.generic.short=PT -America/Whitehorse.standard.short=PST -America/Winnipeg.daylight.short=CDT -America/Winnipeg.generic.short=CT -America/Winnipeg.standard.short=CST -America/Yakutat.daylight.short=AKDT -America/Yakutat.generic.short=AKT -America/Yakutat.standard.short=AKST -America/Yellowknife.daylight.short=MDT -America/Yellowknife.generic.short=MT -America/Yellowknife.standard.short=MST -Antarctica/Casey.daylight.short=WST -Antarctica/Casey.generic.short=WT -Antarctica/Casey.standard.short=WST -Antarctica/Davis.daylight.short=DAVST -Antarctica/Davis.generic.short=DAVT -Antarctica/Davis.standard.short=DAVT -Antarctica/DumontDUrville.daylight.short=DDUST -Antarctica/DumontDUrville.generic.short=DDUT -Antarctica/DumontDUrville.standard.short=DDUT -Antarctica/Macquarie.daylight.short=MIST -Antarctica/Macquarie.generic.short=MIST -Antarctica/Macquarie.standard.short=MIST -Antarctica/Mawson.daylight.short=MAWST -Antarctica/Mawson.generic.short=MAWT -Antarctica/Mawson.standard.short=MAWT -Antarctica/McMurdo.daylight.short=NZDT -Antarctica/McMurdo.generic.short=NZT -Antarctica/McMurdo.standard.short=NZST -Antarctica/Palmer.daylight.short=CLST -Antarctica/Palmer.generic.short=CLT -Antarctica/Palmer.standard.short=CLT -Antarctica/Rothera.daylight.short=ROTST -Antarctica/Rothera.generic.short=ROTT -Antarctica/Rothera.standard.short=ROTT -Antarctica/South_Pole.daylight.short=NZDT -Antarctica/South_Pole.generic.short=NZT -Antarctica/South_Pole.standard.short=NZST -Antarctica/Syowa.daylight.short=SYOST -Antarctica/Syowa.generic.short=SYOT -Antarctica/Syowa.standard.short=SYOT -Antarctica/Vostok.daylight.short=VOSST -Antarctica/Vostok.generic.short=VOST -Antarctica/Vostok.standard.short=VOST -Arctic/Longyearbyen.daylight.short=CEST -Arctic/Longyearbyen.generic.short=CET -Arctic/Longyearbyen.standard.short=CET -ART.daylight.short=EEST -ART.generic.short=EET -ART.standard.short=EET -Asia/Aden.daylight.short=ADT -Asia/Aden.generic.short=AT -Asia/Aden.standard.short=AST -Asia/Almaty.daylight.short=ALMST -Asia/Almaty.generic.short=ALMT -Asia/Almaty.standard.short=ALMT -Asia/Amman.daylight.short=ADT -Asia/Amman.generic.short=AT -Asia/Amman.standard.short=AST -Asia/Anadyr.daylight.short=ANAST -Asia/Anadyr.generic.short=ANAT -Asia/Anadyr.standard.short=ANAT -Asia/Aqtau.daylight.short=AQTST -Asia/Aqtau.generic.short=AQTT -Asia/Aqtau.standard.short=AQTT -Asia/Aqtobe.daylight.short=AQTST -Asia/Aqtobe.generic.short=AQTT -Asia/Aqtobe.standard.short=AQTT -Asia/Ashgabat.daylight.short=TMST -Asia/Ashgabat.generic.short=TMT -Asia/Ashgabat.standard.short=TMT -Asia/Ashkhabad.daylight.short=TMST -Asia/Ashkhabad.generic.short=TMT -Asia/Ashkhabad.standard.short=TMT -Asia/Baghdad.daylight.short=ADT -Asia/Baghdad.generic.short=AT -Asia/Baghdad.standard.short=AST -Asia/Bahrain.daylight.short=ADT -Asia/Bahrain.generic.short=AT -Asia/Bahrain.standard.short=AST -Asia/Baku.daylight.short=AZST -Asia/Baku.generic.short=AZT -Asia/Baku.standard.short=AZT -Asia/Bangkok.daylight.short=ICST -Asia/Bangkok.generic.short=ICT -Asia/Bangkok.standard.short=ICT -Asia/Beirut.daylight.short=EEST -Asia/Beirut.generic.short=EET -Asia/Beirut.standard.short=EET -Asia/Bishkek.daylight.short=KGST -Asia/Bishkek.generic.short=KGT -Asia/Bishkek.standard.short=KGT -Asia/Brunei.daylight.short=BNST -Asia/Brunei.generic.short=BNT -Asia/Brunei.standard.short=BNT -Asia/Calcutta.daylight.short=IDT -Asia/Calcutta.generic.short=IT -Asia/Calcutta.standard.short=IST -Asia/Choibalsan.daylight.short=CHOST -Asia/Choibalsan.generic.short=CHOT -Asia/Choibalsan.standard.short=CHOT -Asia/Chongqing.daylight.short=CDT -Asia/Chongqing.generic.short=CT -Asia/Chongqing.standard.short=CST -Asia/Chungking.daylight.short=CDT -Asia/Chungking.generic.short=CT -Asia/Chungking.standard.short=CST -Asia/Colombo.daylight.short=IDT -Asia/Colombo.generic.short=IT -Asia/Colombo.standard.short=IST -Asia/Dacca.daylight.short=BDST -Asia/Dacca.generic.short=BDT -Asia/Dacca.standard.short=BDT -Asia/Damascus.daylight.short=EEST -Asia/Damascus.generic.short=EET -Asia/Damascus.standard.short=EET -Asia/Dhaka.daylight.short=BDST -Asia/Dhaka.generic.short=BDT -Asia/Dhaka.standard.short=BDT -Asia/Dili.daylight.short=TLST -Asia/Dili.generic.short=TLT -Asia/Dili.standard.short=TLT -Asia/Dubai.daylight.short=GDT -Asia/Dubai.generic.short=GT -Asia/Dubai.standard.short=GST -Asia/Dushanbe.daylight.short=TJST -Asia/Dushanbe.generic.short=TJT -Asia/Dushanbe.standard.short=TJT -Asia/Gaza.daylight.short=EEST -Asia/Gaza.generic.short=EET -Asia/Gaza.standard.short=EET -Asia/Harbin.daylight.short=CDT -Asia/Harbin.generic.short=CT -Asia/Harbin.standard.short=CST -Asia/Hebron.daylight.short=EEST -Asia/Hebron.generic.short=EET -Asia/Hebron.standard.short=EET -Asia/Ho_Chi_Minh.daylight.short=ICST -Asia/Ho_Chi_Minh.generic.short=ICT -Asia/Ho_Chi_Minh.standard.short=ICT -Asia/Hong_Kong.daylight.short=HKST -Asia/Hong_Kong.generic.short=HKT -Asia/Hong_Kong.standard.short=HKT -Asia/Hovd.daylight.short=HOVST -Asia/Hovd.generic.short=HOVT -Asia/Hovd.standard.short=HOVT -Asia/Irkutsk.daylight.short=IRKST -Asia/Irkutsk.generic.short=IRKT -Asia/Irkutsk.standard.short=IRKT -Asia/Istanbul.daylight.short=EEST -Asia/Istanbul.generic.short=EET -Asia/Istanbul.standard.short=EET -Asia/Jakarta.daylight.short=WIST -Asia/Jakarta.generic.short=WIB -Asia/Jakarta.standard.short=WIB -Asia/Jayapura.daylight.short=EIST -Asia/Jayapura.generic.short=WIT -Asia/Jayapura.standard.short=WIT -Asia/Jerusalem.daylight.short=IDT -Asia/Jerusalem.generic.short=IT -Asia/Jerusalem.standard.short=IST -Asia/Kabul.daylight.short=AFST -Asia/Kabul.generic.short=AFT -Asia/Kabul.standard.short=AFT -Asia/Kamchatka.daylight.short=PETST -Asia/Kamchatka.generic.short=PETT -Asia/Kamchatka.standard.short=PETT -Asia/Karachi.daylight.short=PKST -Asia/Karachi.generic.short=PKT -Asia/Karachi.standard.short=PKT -Asia/Kashgar.daylight.short=CDT -Asia/Kashgar.generic.short=CT -Asia/Kashgar.standard.short=CST -Asia/Kathmandu.daylight.short=NPST -Asia/Kathmandu.generic.short=NPT -Asia/Kathmandu.standard.short=NPT -Asia/Katmandu.daylight.short=NPST -Asia/Katmandu.generic.short=NPT -Asia/Katmandu.standard.short=NPT -Asia/Khandyga.daylight.short=YAKST -Asia/Khandyga.generic.short=YAKT -Asia/Khandyga.standard.short=YAKT -Asia/Kolkata.daylight.short=IDT -Asia/Kolkata.generic.short=IT -Asia/Kolkata.standard.short=IST -Asia/Krasnoyarsk.daylight.short=KRAST -Asia/Krasnoyarsk.generic.short=KRAT -Asia/Krasnoyarsk.standard.short=KRAT -Asia/Kuala_Lumpur.daylight.short=MYST -Asia/Kuala_Lumpur.generic.short=MYT -Asia/Kuala_Lumpur.standard.short=MYT -Asia/Kuching.daylight.short=MYST -Asia/Kuching.generic.short=MYT -Asia/Kuching.standard.short=MYT -Asia/Kuwait.daylight.short=ADT -Asia/Kuwait.generic.short=AT -Asia/Kuwait.standard.short=AST -Asia/Macao.daylight.short=CDT -Asia/Macao.generic.short=CT -Asia/Macao.standard.short=CST -Asia/Macau.daylight.short=CDT -Asia/Macau.generic.short=CT -Asia/Macau.standard.short=CST -Asia/Magadan.daylight.short=MAGST -Asia/Magadan.generic.short=MAGT -Asia/Magadan.standard.short=MAGT -Asia/Makassar.daylight.short=CIST -Asia/Makassar.generic.short=WITA -Asia/Makassar.standard.short=WITA -Asia/Manila.daylight.short=PHST -Asia/Manila.generic.short=PHT -Asia/Manila.standard.short=PHT -Asia/Muscat.daylight.short=GDT -Asia/Muscat.generic.short=GT -Asia/Muscat.standard.short=GST -Asia/Nicosia.daylight.short=EEST -Asia/Nicosia.generic.short=EET -Asia/Nicosia.standard.short=EET -Asia/Novokuznetsk.daylight.short=NOVST -Asia/Novokuznetsk.generic.short=NOVT -Asia/Novokuznetsk.standard.short=NOVT -Asia/Novosibirsk.daylight.short=NOVST -Asia/Novosibirsk.generic.short=NOVT -Asia/Novosibirsk.standard.short=NOVT -Asia/Omsk.daylight.short=OMSST -Asia/Omsk.generic.short=OMST -Asia/Omsk.standard.short=OMST -Asia/Oral.daylight.short=ORAST -Asia/Oral.generic.short=ORAT -Asia/Oral.standard.short=ORAT -Asia/Phnom_Penh.daylight.short=ICST -Asia/Phnom_Penh.generic.short=ICT -Asia/Phnom_Penh.standard.short=ICT -Asia/Pontianak.daylight.short=WIST -Asia/Pontianak.generic.short=WIB -Asia/Pontianak.standard.short=WIB -Asia/Pyongyang.daylight.short=KDT -Asia/Pyongyang.generic.short=KT -Asia/Pyongyang.standard.short=KST -Asia/Qatar.daylight.short=ADT -Asia/Qatar.generic.short=AT -Asia/Qatar.standard.short=AST -Asia/Qyzylorda.daylight.short=QYZST -Asia/Qyzylorda.generic.short=QYZT -Asia/Qyzylorda.standard.short=QYZT -Asia/Rangoon.daylight.short=MMST -Asia/Rangoon.generic.short=MMT -Asia/Rangoon.standard.short=MMT -Asia/Saigon.daylight.short=ICST -Asia/Saigon.generic.short=ICT -Asia/Saigon.standard.short=ICT -Asia/Sakhalin.daylight.short=SAKST -Asia/Sakhalin.generic.short=SAKT -Asia/Sakhalin.standard.short=SAKT -Asia/Samarkand.daylight.short=UZST -Asia/Samarkand.generic.short=UZT -Asia/Samarkand.standard.short=UZT -Asia/Seoul.daylight.short=KDT -Asia/Seoul.generic.short=KT -Asia/Seoul.standard.short=KST -Asia/Shanghai.daylight.short=CDT -Asia/Shanghai.generic.short=CT -Asia/Shanghai.standard.short=CST -Asia/Singapore.daylight.short=SGST -Asia/Singapore.generic.short=SGT -Asia/Singapore.standard.short=SGT -Asia/Taipei.daylight.short=TDT -Asia/Taipei.generic.short=TT -Asia/Taipei.standard.short=TST -Asia/Tashkent.daylight.short=UZST -Asia/Tashkent.generic.short=UZT -Asia/Tashkent.standard.short=UZT -Asia/Tbilisi.daylight.short=GEST -Asia/Tbilisi.generic.short=GET -Asia/Tbilisi.standard.short=GET -Asia/Tehran.daylight.short=IRDT -Asia/Tehran.generic.short=IRT -Asia/Tehran.standard.short=IRST -Asia/Tel_Aviv.daylight.short=IDT -Asia/Tel_Aviv.generic.short=IT -Asia/Tel_Aviv.standard.short=IST -Asia/Thimbu.daylight.short=BTST -Asia/Thimbu.generic.short=BTT -Asia/Thimbu.standard.short=BTT -Asia/Thimphu.daylight.short=BTST -Asia/Thimphu.generic.short=BTT -Asia/Thimphu.standard.short=BTT -Asia/Tokyo.daylight.short=JDT -Asia/Tokyo.generic.short=JT -Asia/Tokyo.standard.short=JST -Asia/Ujung_Pandang.daylight.short=CIST -Asia/Ujung_Pandang.generic.short=WITA -Asia/Ujung_Pandang.standard.short=WITA -Asia/Ulaanbaatar.daylight.short=ULAST -Asia/Ulaanbaatar.generic.short=ULAT -Asia/Ulaanbaatar.standard.short=ULAT -Asia/Ulan_Bator.daylight.short=ULAST -Asia/Ulan_Bator.generic.short=ULAT -Asia/Ulan_Bator.standard.short=ULAT -Asia/Urumqi.daylight.short=CDT -Asia/Urumqi.generic.short=CT -Asia/Urumqi.standard.short=CST -Asia/Ust-Nera.daylight.short=VLAST -Asia/Ust-Nera.generic.short=VLAT -Asia/Ust-Nera.standard.short=VLAT -Asia/Vientiane.daylight.short=ICST -Asia/Vientiane.generic.short=ICT -Asia/Vientiane.standard.short=ICT -Asia/Vladivostok.daylight.short=VLAST -Asia/Vladivostok.generic.short=VLAT -Asia/Vladivostok.standard.short=VLAT -Asia/Yakutsk.daylight.short=YAKST -Asia/Yakutsk.generic.short=YAKT -Asia/Yakutsk.standard.short=YAKT -Asia/Yekaterinburg.daylight.short=YEKST -Asia/Yekaterinburg.generic.short=YEKT -Asia/Yekaterinburg.standard.short=YEKT -Asia/Yerevan.daylight.short=AMST -Asia/Yerevan.generic.short=AMT -Asia/Yerevan.standard.short=AMT -AST.daylight.short=AKDT -AST.generic.short=AKT -AST.standard.short=AKST -Atlantic/Azores.daylight.short=AZOST -Atlantic/Azores.generic.short=AZOT -Atlantic/Azores.standard.short=AZOT -Atlantic/Bermuda.daylight.short=ADT -Atlantic/Bermuda.generic.short=AT -Atlantic/Bermuda.standard.short=AST -Atlantic/Canary.daylight.short=WEST -Atlantic/Canary.generic.short=WET -Atlantic/Canary.standard.short=WET -Atlantic/Cape_Verde.daylight.short=CVST -Atlantic/Cape_Verde.generic.short=CVT -Atlantic/Cape_Verde.standard.short=CVT -Atlantic/Faeroe.daylight.short=WEST -Atlantic/Faeroe.generic.short=WET -Atlantic/Faeroe.standard.short=WET -Atlantic/Faroe.daylight.short=WEST -Atlantic/Faroe.generic.short=WET -Atlantic/Faroe.standard.short=WET -Atlantic/Jan_Mayen.daylight.short=CEST -Atlantic/Jan_Mayen.generic.short=CET -Atlantic/Jan_Mayen.standard.short=CET -Atlantic/Madeira.daylight.short=WEST -Atlantic/Madeira.generic.short=WET -Atlantic/Madeira.standard.short=WET -Atlantic/Reykjavik.daylight.short=GMT -Atlantic/Reykjavik.generic.short=GMT -Atlantic/Reykjavik.standard.short=GMT -Atlantic/South_Georgia.daylight.short=GDT -Atlantic/South_Georgia.generic.short=GT -Atlantic/South_Georgia.standard.short=GST -Atlantic/Stanley.daylight.short=FKST -Atlantic/Stanley.generic.short=FKT -Atlantic/Stanley.standard.short=FKT -Atlantic/St_Helena.daylight.short=GMT -Atlantic/St_Helena.generic.short=GMT -Atlantic/St_Helena.standard.short=GMT -Australia/ACT.daylight.short=EST -Australia/ACT.generic.short=ET -Australia/ACT.standard.short=EST -Australia/Adelaide.daylight.short=CST -Australia/Adelaide.generic.short=CT -Australia/Adelaide.standard.short=CST -Australia/Brisbane.daylight.short=EST -Australia/Brisbane.generic.short=ET -Australia/Brisbane.standard.short=EST -Australia/Broken_Hill.daylight.short=CST -Australia/Broken_Hill.generic.short=CT -Australia/Broken_Hill.standard.short=CST -Australia/Canberra.daylight.short=EST -Australia/Canberra.generic.short=ET -Australia/Canberra.standard.short=EST -Australia/Currie.daylight.short=EST -Australia/Currie.generic.short=ET -Australia/Currie.standard.short=EST -Australia/Darwin.daylight.short=CST -Australia/Darwin.generic.short=CT -Australia/Darwin.standard.short=CST -Australia/Eucla.daylight.short=CWST -Australia/Eucla.generic.short=CWT -Australia/Eucla.standard.short=CWST -Australia/Hobart.daylight.short=EST -Australia/Hobart.generic.short=ET -Australia/Hobart.standard.short=EST -Australia/LHI.daylight.short=LHST -Australia/LHI.generic.short=LHT -Australia/LHI.standard.short=LHST -Australia/Lindeman.daylight.short=EST -Australia/Lindeman.generic.short=ET -Australia/Lindeman.standard.short=EST -Australia/Lord_Howe.daylight.short=LHST -Australia/Lord_Howe.generic.short=LHT -Australia/Lord_Howe.standard.short=LHST -Australia/Melbourne.daylight.short=EST -Australia/Melbourne.generic.short=ET -Australia/Melbourne.standard.short=EST -Australia/North.daylight.short=CST -Australia/North.generic.short=CT -Australia/North.standard.short=CST -Australia/NSW.daylight.short=EST -Australia/NSW.generic.short=ET -Australia/NSW.standard.short=EST -Australia/Perth.daylight.short=WST -Australia/Perth.generic.short=WT -Australia/Perth.standard.short=WST -Australia/Queensland.daylight.short=EST -Australia/Queensland.generic.short=ET -Australia/Queensland.standard.short=EST -Australia/South.daylight.short=CST -Australia/South.generic.short=CT -Australia/South.standard.short=CST -Australia/Sydney.daylight.short=EST -Australia/Sydney.generic.short=ET -Australia/Sydney.standard.short=EST -Australia/Tasmania.daylight.short=EST -Australia/Tasmania.generic.short=ET -Australia/Tasmania.standard.short=EST -Australia/Victoria.daylight.short=EST -Australia/Victoria.generic.short=ET -Australia/Victoria.standard.short=EST -Australia/West.daylight.short=WST -Australia/West.generic.short=WT -Australia/West.standard.short=WST -Australia/Yancowinna.daylight.short=CST -Australia/Yancowinna.generic.short=CT -Australia/Yancowinna.standard.short=CST -BET.daylight.short=BRST -BET.generic.short=BRT -BET.standard.short=BRT -Brazil/Acre.daylight.short=ACST -Brazil/Acre.generic.short=ACT -Brazil/Acre.standard.short=ACT -Brazil/DeNoronha.daylight.short=FNST -Brazil/DeNoronha.generic.short=FNT -Brazil/DeNoronha.standard.short=FNT -Brazil/East.daylight.short=BRST -Brazil/East.generic.short=BRT -Brazil/East.standard.short=BRT -Brazil/West.daylight.short=AMST -Brazil/West.generic.short=AMT -Brazil/West.standard.short=AMT -BST.daylight.short=BDST -BST.generic.short=BDT -BST.standard.short=BDT -Canada/Atlantic.daylight.short=ADT -Canada/Atlantic.generic.short=AT -Canada/Atlantic.standard.short=AST -Canada/Central.daylight.short=CDT -Canada/Central.generic.short=CT -Canada/Central.standard.short=CST -Canada/Eastern.daylight.short=EDT -Canada/Eastern.generic.short=ET -Canada/Eastern.standard.short=EST -Canada/East-Saskatchewan.daylight.short=CDT -Canada/East-Saskatchewan.generic.short=CT -Canada/East-Saskatchewan.standard.short=CST -Canada/Mountain.daylight.short=MDT -Canada/Mountain.generic.short=MT -Canada/Mountain.standard.short=MST -Canada/Newfoundland.daylight.short=NDT -Canada/Newfoundland.generic.short=NT -Canada/Newfoundland.standard.short=NST -Canada/Pacific.daylight.short=PDT -Canada/Pacific.generic.short=PT -Canada/Pacific.standard.short=PST -Canada/Saskatchewan.daylight.short=CDT -Canada/Saskatchewan.generic.short=CT -Canada/Saskatchewan.standard.short=CST -Canada/Yukon.daylight.short=PDT -Canada/Yukon.generic.short=PT -Canada/Yukon.standard.short=PST -CAT.daylight.short=CAST -CAT.generic.short=CAT -CAT.standard.short=CAT -CET.daylight.short=CEST -CET.generic.short=CET -CET.standard.short=CET -Chile/Continental.daylight.short=CLST -Chile/Continental.generic.short=CLT -Chile/Continental.standard.short=CLT -Chile/EasterIsland.daylight.short=EASST -Chile/EasterIsland.generic.short=EAST -Chile/EasterIsland.standard.short=EAST -CNT.daylight.short=NDT -CNT.generic.short=NT -CNT.standard.short=NST -CST6CDT.daylight.short=CDT -CST6CDT.generic.short=CT -CST6CDT.standard.short=CST -CST.daylight.short=CDT -CST.generic.short=CT -CST.standard.short=CST -CTT.daylight.short=CDT -CTT.generic.short=CT -CTT.standard.short=CST -Cuba.daylight.short=CDT -Cuba.generic.short=CT -Cuba.standard.short=CST -EAT.daylight.short=EAST -EAT.generic.short=EAT -EAT.standard.short=EAT -ECT.daylight.short=CEST -ECT.generic.short=CET -ECT.standard.short=CET -EET.daylight.short=EEST -EET.generic.short=EET -EET.standard.short=EET -Egypt.daylight.short=EEST -Egypt.generic.short=EET -Egypt.standard.short=EET -Eire.daylight.short=IST -Eire.generic.short=IT -Eire.standard.short=GMT -EST5EDT.daylight.short=EDT -EST5EDT.generic.short=ET -EST5EDT.standard.short=EST -EST.daylight.short=EDT -EST.generic.short=ET -EST.standard.short=EST -Etc/Greenwich.daylight.short=GMT -Etc/Greenwich.generic.short=GMT -Etc/Greenwich.standard.short=GMT -Etc/UCT.daylight.short=UTC -Etc/UCT.generic.short=UTC -Etc/UCT.standard.short=UTC -Etc/Universal.daylight.short=UTC -Etc/Universal.generic.short=UTC -Etc/Universal.standard.short=UTC -Etc/UTC.daylight.short=UTC -Etc/UTC.generic.short=UTC -Etc/UTC.standard.short=UTC -Etc/Zulu.daylight.short=UTC -Etc/Zulu.generic.short=UTC -Etc/Zulu.standard.short=UTC -Europe/Amsterdam.daylight.short=CEST -Europe/Amsterdam.generic.short=CET -Europe/Amsterdam.standard.short=CET -Europe/Andorra.daylight.short=CEST -Europe/Andorra.generic.short=CET -Europe/Andorra.standard.short=CET -Europe/Athens.daylight.short=EEST -Europe/Athens.generic.short=EET -Europe/Athens.standard.short=EET -Europe/Belfast.daylight.short=BST -Europe/Belfast.generic.short=BT -Europe/Belfast.standard.short=GMT -Europe/Belgrade.daylight.short=CEST -Europe/Belgrade.generic.short=CET -Europe/Belgrade.standard.short=CET -Europe/Berlin.daylight.short=CEST -Europe/Berlin.generic.short=CET -Europe/Berlin.standard.short=CET -Europe/Bratislava.daylight.short=CEST -Europe/Bratislava.generic.short=CET -Europe/Bratislava.standard.short=CET -Europe/Brussels.daylight.short=CEST -Europe/Brussels.generic.short=CET -Europe/Brussels.standard.short=CET -Europe/Bucharest.daylight.short=EEST -Europe/Bucharest.generic.short=EET -Europe/Bucharest.standard.short=EET -Europe/Budapest.daylight.short=CEST -Europe/Budapest.generic.short=CET -Europe/Budapest.standard.short=CET -Europe/Busingen.daylight.short=CEST -Europe/Busingen.generic.short=CET -Europe/Busingen.standard.short=CET -Europe/Chisinau.daylight.short=EEST -Europe/Chisinau.generic.short=EET -Europe/Chisinau.standard.short=EET -Europe/Copenhagen.daylight.short=CEST -Europe/Copenhagen.generic.short=CET -Europe/Copenhagen.standard.short=CET -Europe/Dublin.daylight.short=IST -Europe/Dublin.generic.short=IT -Europe/Dublin.standard.short=GMT -Europe/Gibraltar.daylight.short=CEST -Europe/Gibraltar.generic.short=CET -Europe/Gibraltar.standard.short=CET -Europe/Guernsey.daylight.short=BST -Europe/Guernsey.generic.short=BT -Europe/Guernsey.standard.short=GMT -Europe/Helsinki.daylight.short=EEST -Europe/Helsinki.generic.short=EET -Europe/Helsinki.standard.short=EET -Europe/Isle_of_Man.daylight.short=BST -Europe/Isle_of_Man.generic.short=BT -Europe/Isle_of_Man.standard.short=GMT -Europe/Istanbul.daylight.short=EEST -Europe/Istanbul.generic.short=EET -Europe/Istanbul.standard.short=EET -Europe/Jersey.daylight.short=BST -Europe/Jersey.generic.short=BT -Europe/Jersey.standard.short=GMT -Europe/Kaliningrad.daylight.short=FEST -Europe/Kaliningrad.generic.short=FET -Europe/Kaliningrad.standard.short=FET -Europe/Kiev.daylight.short=EEST -Europe/Kiev.generic.short=EET -Europe/Kiev.standard.short=EET -Europe/Lisbon.daylight.short=WEST -Europe/Lisbon.generic.short=WET -Europe/Lisbon.standard.short=WET -Europe/Ljubljana.daylight.short=CEST -Europe/Ljubljana.generic.short=CET -Europe/Ljubljana.standard.short=CET -Europe/London.daylight.short=BST -Europe/London.generic.short=BT -Europe/London.standard.short=GMT -Europe/Luxembourg.daylight.short=CEST -Europe/Luxembourg.generic.short=CET -Europe/Luxembourg.standard.short=CET -Europe/Madrid.daylight.short=CEST -Europe/Madrid.generic.short=CET -Europe/Madrid.standard.short=CET -Europe/Malta.daylight.short=CEST -Europe/Malta.generic.short=CET -Europe/Malta.standard.short=CET -Europe/Mariehamn.daylight.short=EEST -Europe/Mariehamn.generic.short=EET -Europe/Mariehamn.standard.short=EET -Europe/Minsk.daylight.short=FEST -Europe/Minsk.generic.short=FET -Europe/Minsk.standard.short=FET -Europe/Monaco.daylight.short=CEST -Europe/Monaco.generic.short=CET -Europe/Monaco.standard.short=CET -Europe/Moscow.daylight.short=MSD -Europe/Moscow.generic.short=MT -Europe/Moscow.standard.short=MSK -Europe/Nicosia.daylight.short=EEST -Europe/Nicosia.generic.short=EET -Europe/Nicosia.standard.short=EET -Europe/Oslo.daylight.short=CEST -Europe/Oslo.generic.short=CET -Europe/Oslo.standard.short=CET -Europe/Paris.daylight.short=CEST -Europe/Paris.generic.short=CET -Europe/Paris.standard.short=CET -Europe/Podgorica.daylight.short=CEST -Europe/Podgorica.generic.short=CET -Europe/Podgorica.standard.short=CET -Europe/Prague.daylight.short=CEST -Europe/Prague.generic.short=CET -Europe/Prague.standard.short=CET -Europe/Riga.daylight.short=EEST -Europe/Riga.generic.short=EET -Europe/Riga.standard.short=EET -Europe/Rome.daylight.short=CEST -Europe/Rome.generic.short=CET -Europe/Rome.standard.short=CET -Europe/Samara.daylight.short=SAMST -Europe/Samara.generic.short=SAMT -Europe/Samara.standard.short=SAMT -Europe/San_Marino.daylight.short=CEST -Europe/San_Marino.generic.short=CET -Europe/San_Marino.standard.short=CET -Europe/Sarajevo.daylight.short=CEST -Europe/Sarajevo.generic.short=CET -Europe/Sarajevo.standard.short=CET -Europe/Simferopol.daylight.short=EEST -Europe/Simferopol.generic.short=EET -Europe/Simferopol.standard.short=EET -Europe/Skopje.daylight.short=CEST -Europe/Skopje.generic.short=CET -Europe/Skopje.standard.short=CET -Europe/Sofia.daylight.short=EEST -Europe/Sofia.generic.short=EET -Europe/Sofia.standard.short=EET -Europe/Stockholm.daylight.short=CEST -Europe/Stockholm.generic.short=CET -Europe/Stockholm.standard.short=CET -Europe/Tallinn.daylight.short=EEST -Europe/Tallinn.generic.short=EET -Europe/Tallinn.standard.short=EET -Europe/Tirane.daylight.short=CEST -Europe/Tirane.generic.short=CET -Europe/Tirane.standard.short=CET -Europe/Tiraspol.daylight.short=EEST -Europe/Tiraspol.generic.short=EET -Europe/Tiraspol.standard.short=EET -Europe/Uzhgorod.daylight.short=EEST -Europe/Uzhgorod.generic.short=EET -Europe/Uzhgorod.standard.short=EET -Europe/Vaduz.daylight.short=CEST -Europe/Vaduz.generic.short=CET -Europe/Vaduz.standard.short=CET -Europe/Vatican.daylight.short=CEST -Europe/Vatican.generic.short=CET -Europe/Vatican.standard.short=CET -Europe/Vienna.daylight.short=CEST -Europe/Vienna.generic.short=CET -Europe/Vienna.standard.short=CET -Europe/Vilnius.daylight.short=EEST -Europe/Vilnius.generic.short=EET -Europe/Vilnius.standard.short=EET -Europe/Volgograd.daylight.short=VOLST -Europe/Volgograd.generic.short=VOLT -Europe/Volgograd.standard.short=VOLT -Europe/Warsaw.daylight.short=CEST -Europe/Warsaw.generic.short=CET -Europe/Warsaw.standard.short=CET -Europe/Zagreb.daylight.short=CEST -Europe/Zagreb.generic.short=CET -Europe/Zagreb.standard.short=CET -Europe/Zaporozhye.daylight.short=EEST -Europe/Zaporozhye.generic.short=EET -Europe/Zaporozhye.standard.short=EET -Europe/Zurich.daylight.short=CEST -Europe/Zurich.generic.short=CET -Europe/Zurich.standard.short=CET -GB.daylight.short=BST -GB-Eire.daylight.short=BST -GB-Eire.generic.short=BT -GB-Eire.standard.short=GMT -GB.generic.short=BT -GB.standard.short=GMT -GMT.daylight.short=GMT -GMT.generic.short=GMT -GMT.standard.short=GMT -Greenwich.daylight.short=GMT -Greenwich.generic.short=GMT -Greenwich.standard.short=GMT -Hongkong.daylight.short=HKST -Hongkong.generic.short=HKT -Hongkong.standard.short=HKT -HST.daylight.short=HDT -HST.generic.short=HT -HST.standard.short=HST -Iceland.daylight.short=GMT -Iceland.generic.short=GMT -Iceland.standard.short=GMT -IET.daylight.short=EDT -IET.generic.short=ET -IET.standard.short=EST -Indian/Antananarivo.daylight.short=EAST -Indian/Antananarivo.generic.short=EAT -Indian/Antananarivo.standard.short=EAT -Indian/Chagos.daylight.short=IOST -Indian/Chagos.generic.short=IOT -Indian/Chagos.standard.short=IOT -Indian/Christmas.daylight.short=CXST -Indian/Christmas.generic.short=CIT -Indian/Christmas.standard.short=CXT -Indian/Cocos.daylight.short=CCST -Indian/Cocos.generic.short=CCT -Indian/Cocos.standard.short=CCT -Indian/Comoro.daylight.short=EAST -Indian/Comoro.generic.short=EAT -Indian/Comoro.standard.short=EAT -Indian/Kerguelen.daylight.short=TFST -Indian/Kerguelen.generic.short=TFT -Indian/Kerguelen.standard.short=TFT -Indian/Mahe.daylight.short=SCST -Indian/Mahe.generic.short=SCT -Indian/Mahe.standard.short=SCT -Indian/Maldives.daylight.short=MVST -Indian/Maldives.generic.short=MVT -Indian/Maldives.standard.short=MVT -Indian/Mauritius.daylight.short=MUST -Indian/Mauritius.generic.short=MUT -Indian/Mauritius.standard.short=MUT -Indian/Mayotte.daylight.short=EAST -Indian/Mayotte.generic.short=EAT -Indian/Mayotte.standard.short=EAT -Indian/Reunion.daylight.short=REST -Indian/Reunion.generic.short=RET -Indian/Reunion.standard.short=RET -Iran.daylight.short=IRDT -Iran.generic.short=IRT -Iran.standard.short=IRST -Israel.daylight.short=IDT -Israel.generic.short=IT -Israel.standard.short=IST -IST.daylight.short=IDT -IST.generic.short=IT -IST.standard.short=IST -Jamaica.daylight.short=EDT -Jamaica.generic.short=ET -Jamaica.standard.short=EST -Japan.daylight.short=JDT -Japan.generic.short=JT -Japan.standard.short=JST -JST.daylight.short=JDT -JST.generic.short=JT -JST.standard.short=JST -Kwajalein.daylight.short=MHST -Kwajalein.generic.short=MHT -Kwajalein.standard.short=MHT -Libya.daylight.short=EEST -Libya.generic.short=EET -Libya.standard.short=EET -MET.daylight.short=MEST -MET.generic.short=MET -MET.standard.short=MET -Mexico/BajaNorte.daylight.short=PDT -Mexico/BajaNorte.generic.short=PT -Mexico/BajaNorte.standard.short=PST -Mexico/BajaSur.daylight.short=MDT -Mexico/BajaSur.generic.short=MT -Mexico/BajaSur.standard.short=MST -Mexico/General.daylight.short=CDT -Mexico/General.generic.short=CT -Mexico/General.standard.short=CST -MIT.daylight.short=WSDT -MIT.generic.short=WST -MIT.standard.short=WST -MST7MDT.daylight.short=MDT -MST7MDT.generic.short=MT -MST7MDT.standard.short=MST -MST.daylight.short=MDT -MST.generic.short=MT -MST.standard.short=MST -Navajo.daylight.short=MDT -Navajo.generic.short=MT -Navajo.standard.short=MST -NET.daylight.short=AMST -NET.generic.short=AMT -NET.standard.short=AMT -NST.daylight.short=NZDT -NST.generic.short=NZT -NST.standard.short=NZST -NZ-CHAT.daylight.short=CHADT -NZ-CHAT.generic.short=CHAT -NZ-CHAT.standard.short=CHAST -NZ.daylight.short=NZDT -NZ.generic.short=NZT -NZ.standard.short=NZST -Pacific/Apia.daylight.short=WSDT -Pacific/Apia.generic.short=WST -Pacific/Apia.standard.short=WST -Pacific/Auckland.daylight.short=NZDT -Pacific/Auckland.generic.short=NZT -Pacific/Auckland.standard.short=NZST -Pacific/Chatham.daylight.short=CHADT -Pacific/Chatham.generic.short=CHAT -Pacific/Chatham.standard.short=CHAST -Pacific/Chuuk.daylight.short=CHUST -Pacific/Chuuk.generic.short=CHUT -Pacific/Chuuk.standard.short=CHUT -Pacific/Easter.daylight.short=EASST -Pacific/Easter.generic.short=EAST -Pacific/Easter.standard.short=EAST -Pacific/Efate.daylight.short=VUST -Pacific/Efate.generic.short=VUT -Pacific/Efate.standard.short=VUT -Pacific/Enderbury.daylight.short=PHOST -Pacific/Enderbury.generic.short=PHOT -Pacific/Enderbury.standard.short=PHOT -Pacific/Fakaofo.daylight.short=TKST -Pacific/Fakaofo.generic.short=TKT -Pacific/Fakaofo.standard.short=TKT -Pacific/Fiji.daylight.short=FJST -Pacific/Fiji.generic.short=FJT -Pacific/Fiji.standard.short=FJT -Pacific/Funafuti.daylight.short=TVST -Pacific/Funafuti.generic.short=TVT -Pacific/Funafuti.standard.short=TVT -Pacific/Galapagos.daylight.short=GALST -Pacific/Galapagos.generic.short=GALT -Pacific/Galapagos.standard.short=GALT -Pacific/Gambier.daylight.short=GAMST -Pacific/Gambier.generic.short=GAMT -Pacific/Gambier.standard.short=GAMT -Pacific/Guadalcanal.daylight.short=SBST -Pacific/Guadalcanal.generic.short=SBT -Pacific/Guadalcanal.standard.short=SBT -Pacific/Guam.daylight.short=ChDT -Pacific/Guam.generic.short=ChT -Pacific/Guam.standard.short=ChST -Pacific/Honolulu.daylight.short=HDT -Pacific/Honolulu.generic.short=HT -Pacific/Honolulu.standard.short=HST -Pacific/Johnston.daylight.short=HDT -Pacific/Johnston.generic.short=HT -Pacific/Johnston.standard.short=HST -Pacific/Kiritimati.daylight.short=LINST -Pacific/Kiritimati.generic.short=LINT -Pacific/Kiritimati.standard.short=LINT -Pacific/Kosrae.daylight.short=KOSST -Pacific/Kosrae.generic.short=KOST -Pacific/Kosrae.standard.short=KOST -Pacific/Kwajalein.daylight.short=MHST -Pacific/Kwajalein.generic.short=MHT -Pacific/Kwajalein.standard.short=MHT -Pacific/Majuro.daylight.short=MHST -Pacific/Majuro.generic.short=MHT -Pacific/Majuro.standard.short=MHT -Pacific/Marquesas.daylight.short=MARST -Pacific/Marquesas.generic.short=MART -Pacific/Marquesas.standard.short=MART -Pacific/Midway.daylight.short=SDT -Pacific/Midway.generic.short=ST -Pacific/Midway.standard.short=SST -Pacific/Nauru.daylight.short=NRST -Pacific/Nauru.generic.short=NRT -Pacific/Nauru.standard.short=NRT -Pacific/Niue.daylight.short=NUST -Pacific/Niue.generic.short=NUT -Pacific/Niue.standard.short=NUT -Pacific/Norfolk.daylight.short=NFST -Pacific/Norfolk.generic.short=NFT -Pacific/Norfolk.standard.short=NFT -Pacific/Noumea.daylight.short=NCST -Pacific/Noumea.generic.short=NCT -Pacific/Noumea.standard.short=NCT -Pacific/Pago_Pago.daylight.short=SDT -Pacific/Pago_Pago.generic.short=ST -Pacific/Pago_Pago.standard.short=SST -Pacific/Palau.daylight.short=PWST -Pacific/Palau.generic.short=PWT -Pacific/Palau.standard.short=PWT -Pacific/Pitcairn.daylight.short=PDT -Pacific/Pitcairn.generic.short=PT -Pacific/Pitcairn.standard.short=PST -Pacific/Pohnpei.daylight.short=PONST -Pacific/Pohnpei.generic.short=PONT -Pacific/Pohnpei.standard.short=PONT -Pacific/Ponape.daylight.short=PONST -Pacific/Ponape.generic.short=PONT -Pacific/Ponape.standard.short=PONT -Pacific/Port_Moresby.daylight.short=PGST -Pacific/Port_Moresby.generic.short=PGT -Pacific/Port_Moresby.standard.short=PGT -Pacific/Rarotonga.daylight.short=CKHST -Pacific/Rarotonga.generic.short=CKT -Pacific/Rarotonga.standard.short=CKT -Pacific/Saipan.daylight.short=ChDT -Pacific/Saipan.generic.short=ChT -Pacific/Saipan.standard.short=ChST -Pacific/Samoa.daylight.short=SDT -Pacific/Samoa.generic.short=ST -Pacific/Samoa.standard.short=SST -Pacific/Tahiti.daylight.short=TAHST -Pacific/Tahiti.generic.short=TAHT -Pacific/Tahiti.standard.short=TAHT -Pacific/Tarawa.daylight.short=GILST -Pacific/Tarawa.generic.short=GILT -Pacific/Tarawa.standard.short=GILT -Pacific/Tongatapu.daylight.short=TOST -Pacific/Tongatapu.generic.short=TOT -Pacific/Tongatapu.standard.short=TOT -Pacific/Truk.daylight.short=CHUST -Pacific/Truk.generic.short=CHUT -Pacific/Truk.standard.short=CHUT -Pacific/Wake.daylight.short=WAKST -Pacific/Wake.generic.short=WAKT -Pacific/Wake.standard.short=WAKT -Pacific/Wallis.daylight.short=WFST -Pacific/Wallis.generic.short=WFT -Pacific/Wallis.standard.short=WFT -Pacific/Yap.daylight.short=CHUST -Pacific/Yap.generic.short=CHUT -Pacific/Yap.standard.short=CHUT -PLT.daylight.short=PKST -PLT.generic.short=PKT -PLT.standard.short=PKT -PNT.daylight.short=MDT -PNT.generic.short=MT -PNT.standard.short=MST -Poland.daylight.short=CEST -Poland.generic.short=CET -Poland.standard.short=CET -Portugal.daylight.short=WEST -Portugal.generic.short=WET -Portugal.standard.short=WET -PRC.daylight.short=CDT -PRC.generic.short=CT -PRC.standard.short=CST -PRT.daylight.short=ADT -PRT.generic.short=AT -PRT.standard.short=AST -PST8PDT.daylight.short=PDT -PST8PDT.generic.short=PT -PST8PDT.standard.short=PST -PST.daylight.short=PDT -PST.generic.short=PT -PST.standard.short=PST -ROK.daylight.short=KDT -ROK.generic.short=KT -ROK.standard.short=KST -Singapore.daylight.short=SGST -Singapore.generic.short=SGT -Singapore.standard.short=SGT -SST.daylight.short=SBST -SST.generic.short=SBT -SST.standard.short=SBT -SystemV/AST4ADT.daylight.short=ADT -SystemV/AST4ADT.generic.short=AT -SystemV/AST4ADT.standard.short=AST -SystemV/AST4.daylight.short=ADT -SystemV/AST4.generic.short=AT -SystemV/AST4.standard.short=AST -SystemV/CST6CDT.daylight.short=CDT -SystemV/CST6CDT.generic.short=CT -SystemV/CST6CDT.standard.short=CST -SystemV/CST6.daylight.short=CDT -SystemV/CST6.generic.short=CT -SystemV/CST6.standard.short=CST -SystemV/EST5.daylight.short=EDT -SystemV/EST5EDT.daylight.short=EDT -SystemV/EST5EDT.generic.short=ET -SystemV/EST5EDT.standard.short=EST -SystemV/EST5.generic.short=ET -SystemV/EST5.standard.short=EST -SystemV/HST10.daylight.short=HDT -SystemV/HST10.generic.short=HT -SystemV/HST10.standard.short=HST -SystemV/MST7.daylight.short=MDT -SystemV/MST7.generic.short=MT -SystemV/MST7MDT.daylight.short=MDT -SystemV/MST7MDT.generic.short=MT -SystemV/MST7MDT.standard.short=MST -SystemV/MST7.standard.short=MST -SystemV/PST8.daylight.short=PDT -SystemV/PST8.generic.short=PT -SystemV/PST8PDT.daylight.short=PDT -SystemV/PST8PDT.generic.short=PT -SystemV/PST8PDT.standard.short=PST -SystemV/PST8.standard.short=PST -SystemV/YST9.daylight.short=AKDT -SystemV/YST9.generic.short=AKT -SystemV/YST9.standard.short=AKST -SystemV/YST9YDT.daylight.short=AKDT -SystemV/YST9YDT.generic.short=AKT -SystemV/YST9YDT.standard.short=AKST -Turkey.daylight.short=EEST -Turkey.generic.short=EET -Turkey.standard.short=EET -UCT.daylight.short=UTC -UCT.generic.short=UTC -UCT.standard.short=UTC -Universal.daylight.short=UTC -Universal.generic.short=UTC -Universal.standard.short=UTC -US/Alaska.daylight.short=AKDT -US/Alaska.generic.short=AKT -US/Alaska.standard.short=AKST -US/Aleutian.daylight.short=HADT -US/Aleutian.generic.short=HAT -US/Aleutian.standard.short=HAST -US/Arizona.daylight.short=MDT -US/Arizona.generic.short=MT -US/Arizona.standard.short=MST -US/Central.daylight.short=CDT -US/Central.generic.short=CT -US/Central.standard.short=CST -US/Eastern.daylight.short=EDT -US/Eastern.generic.short=ET -US/Eastern.standard.short=EST -US/East-Indiana.daylight.short=EDT -US/East-Indiana.generic.short=ET -US/East-Indiana.standard.short=EST -US/Hawaii.daylight.short=HDT -US/Hawaii.generic.short=HT -US/Hawaii.standard.short=HST -US/Indiana-Starke.daylight.short=CDT -US/Indiana-Starke.generic.short=CT -US/Indiana-Starke.standard.short=CST -US/Michigan.daylight.short=EDT -US/Michigan.generic.short=ET -US/Michigan.standard.short=EST -US/Mountain.daylight.short=MDT -US/Mountain.generic.short=MT -US/Mountain.standard.short=MST -US/Pacific.daylight.short=PDT -US/Pacific.generic.short=PT -US/Pacific-New.daylight.short=PDT -US/Pacific-New.generic.short=PT -US/Pacific-New.standard.short=PST -US/Pacific.standard.short=PST -US/Samoa.daylight.short=SDT -US/Samoa.generic.short=ST -US/Samoa.standard.short=SST -UTC.daylight.short=UTC -UTC.generic.short=UTC -UTC.standard.short=UTC -VST.daylight.short=ICST -VST.generic.short=ICT -VST.standard.short=ICT -WET.daylight.short=WEST -WET.generic.short=WET -WET.standard.short=WET -W-SU.daylight.short=MSD -W-SU.generic.short=MT -W-SU.standard.short=MSK -Zulu.daylight.short=UTC -Zulu.generic.short=UTC -Zulu.standard.short=UTC diff --git a/jdk/test/tools/launcher/ExecutionEnvironment.java b/jdk/test/tools/launcher/ExecutionEnvironment.java index fac9c968363..f78649f364c 100644 --- a/jdk/test/tools/launcher/ExecutionEnvironment.java +++ b/jdk/test/tools/launcher/ExecutionEnvironment.java @@ -62,7 +62,9 @@ import java.util.Map; public class ExecutionEnvironment extends TestHelper { static final String LD_LIBRARY_PATH = TestHelper.isMacOSX ? "DYLD_LIBRARY_PATH" - : "LD_LIBRARY_PATH"; + : TestHelper.isAIX + ? "LIBPATH" + : "LD_LIBRARY_PATH"; static final String LD_LIBRARY_PATH_32 = LD_LIBRARY_PATH + "_32"; static final String LD_LIBRARY_PATH_64 = LD_LIBRARY_PATH + "_64"; @@ -134,7 +136,19 @@ public class ExecutionEnvironment extends TestHelper { for (String x : LD_PATH_STRINGS) { if (!tr.contains(x)) { - flagError(tr, "FAIL: did not get <" + x + ">"); + if (TestHelper.isAIX && x.startsWith(LD_LIBRARY_PATH)) { + // AIX does not support the '-rpath' linker options so the + // launchers have to prepend the jdk library path to 'LIBPATH'. + String aixLibPath = LD_LIBRARY_PATH + "=" + + System.getenv(LD_LIBRARY_PATH) + + System.getProperty("path.separator") + LD_LIBRARY_PATH_VALUE; + if (!tr.matches(aixLibPath)) { + flagError(tr, "FAIL: did not get <" + aixLibPath + ">"); + } + } + else { + flagError(tr, "FAIL: did not get <" + x + ">"); + } } } } @@ -170,7 +184,7 @@ public class ExecutionEnvironment extends TestHelper { Map env = new HashMap<>(); - if (TestHelper.isLinux || TestHelper.isMacOSX) { + if (TestHelper.isLinux || TestHelper.isMacOSX || TestHelper.isAIX) { for (String x : LD_PATH_STRINGS) { String pairs[] = x.split("="); env.put(pairs[0], pairs[1]); diff --git a/jdk/test/tools/launcher/Settings.java b/jdk/test/tools/launcher/Settings.java index 57a9ca64447..16fd29b0b16 100644 --- a/jdk/test/tools/launcher/Settings.java +++ b/jdk/test/tools/launcher/Settings.java @@ -73,16 +73,20 @@ public class Settings extends TestHelper { } static void runTestOptionDefault() throws IOException { + String stackSize = "256"; // in kb + if (getArch().equals("ppc64")) { + stackSize = "800"; + } TestResult tr = null; tr = doExec(javaCmd, "-Xms64m", "-Xmx512m", - "-Xss256k", "-XshowSettings", "-jar", testJar.getAbsolutePath()); + "-Xss" + stackSize + "k", "-XshowSettings", "-jar", testJar.getAbsolutePath()); containsAllOptions(tr); if (!tr.isOK()) { System.out.println(tr.status); throw new RuntimeException("test fails"); } tr = doExec(javaCmd, "-Xms65536k", "-Xmx712m", - "-Xss256000", "-XshowSettings", "-jar", testJar.getAbsolutePath()); + "-Xss" + stackSize + "000", "-XshowSettings", "-jar", testJar.getAbsolutePath()); containsAllOptions(tr); if (!tr.isOK()) { System.out.println(tr.status); diff --git a/jdk/test/tools/launcher/TestHelper.java b/jdk/test/tools/launcher/TestHelper.java index da23181a3f6..40737320d52 100644 --- a/jdk/test/tools/launcher/TestHelper.java +++ b/jdk/test/tools/launcher/TestHelper.java @@ -92,6 +92,8 @@ public class TestHelper { System.getProperty("os.name", "unknown").startsWith("SunOS"); static final boolean isLinux = System.getProperty("os.name", "unknown").startsWith("Linux"); + static final boolean isAIX = + System.getProperty("os.name", "unknown").startsWith("AIX"); static final String LIBJVM = isWindows ? "jvm.dll" : "libjvm" + (isMacOSX ? ".dylib" : ".so"); diff --git a/jdk/test/tools/launcher/VersionCheck.java b/jdk/test/tools/launcher/VersionCheck.java index f43c210a9bf..a31ba57a4a4 100644 --- a/jdk/test/tools/launcher/VersionCheck.java +++ b/jdk/test/tools/launcher/VersionCheck.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, 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 @@ -23,7 +23,7 @@ /** * @test - * @bug 6545058 6611182 + * @bug 6545058 6611182 8016209 * @summary validate and test -version, -fullversion, and internal, as well as * sanity checks if a tool can be launched. * @compile VersionCheck.java diff --git a/jdk/test/tools/pack200/PackTestZip64.java b/jdk/test/tools/pack200/PackTestZip64.java new file mode 100644 index 00000000000..edfeb5a92d8 --- /dev/null +++ b/jdk/test/tools/pack200/PackTestZip64.java @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2014, 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. + */ +import java.io.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Enumeration; +import java.util.List; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; +import java.util.jar.JarInputStream; +import java.util.jar.JarOutputStream; +import java.util.zip.ZipEntry; +/* + * @test + * @bug 8029646 + * @summary tests that native unpacker produces the same result as Java one + * @compile -XDignore.symbol.file Utils.java PackTestZip64.java + * @run main PackTestZip64 + * @author kizune + */ + +public class PackTestZip64 { + public static void main(String... args) throws Exception { + testPacking(); + Utils.cleanup(); + } + + // 1KB buffer is enough to copy jar content + private static final byte[] BUFFER = new byte[1024]; + + static void testPacking() throws IOException { + // make a copy of the test specimen to local directory + File testFile = new File("tools_java.jar"); + // Add a large number of small files to the golden jar + generateLargeJar(testFile, Utils.locateJar("golden.jar")); + + List cmdsList = new ArrayList<>(); + + // Repack file to get the Java-based result + cmdsList.add(Utils.getPack200Cmd()); + cmdsList.add("--repack"); + cmdsList.add(testFile.getName()); + Utils.runExec(cmdsList); + cmdsList.clear(); + + // Pack file with pack200 and unpack in with unpack200 + File packedFile = new File("tools.pack.gz"); + cmdsList.add(Utils.getPack200Cmd()); + cmdsList.add(packedFile.getName()); + cmdsList.add(testFile.getName()); + Utils.runExec(cmdsList); + cmdsList.clear(); + + File unpackedFile = new File("tools_native.jar"); + cmdsList.add(Utils.getUnpack200Cmd()); + cmdsList.add(packedFile.getName()); + cmdsList.add(unpackedFile.getName()); + Utils.runExec(cmdsList); + + // Compare files binary + compareTwoFiles(testFile, unpackedFile); + + // Cleaning up generated files + testFile.delete(); + packedFile.delete(); + unpackedFile.delete(); + } + + static void compareTwoFiles(File src, File dst) throws IOException { + if (!src.exists()) { + throw new IOException("File " + src.getName() + " does not exist!"); + } + + if(!dst.exists()) { + throw new IOException("File " + dst.getName() + " does not exist!"); + } + + BufferedInputStream srcis, dstis; + srcis = new BufferedInputStream(new FileInputStream(src)); + dstis = new BufferedInputStream(new FileInputStream(dst)); + + int s = 0, d, pos = 0; + while (s != -1) { // Checking of just one result for EOF is enough + s = srcis.read(); + d = dstis.read(); + + if (s != d) { + throw new IOException("Files are differ starting at position: " + + Integer.toHexString(pos)); + } + + pos++; + } + + srcis.close(); + dstis.close(); + } + + static void generateLargeJar(File result, File source) throws IOException { + if (result.exists()) { + result.delete(); + } + + try (JarOutputStream copyTo = new JarOutputStream(new FileOutputStream(result)); + JarFile srcJar = new JarFile(source)) { + + for (JarEntry je : Collections.list(srcJar.entries())) { + copyTo.putNextEntry(je); + if (!je.isDirectory()) { + copyStream(srcJar.getInputStream(je), copyTo); + } + copyTo.closeEntry(); + } + + int many = Short.MAX_VALUE * 2 + 2; + + for (int i = 0 ; i < many ; i++) { + JarEntry e = new JarEntry("F-" + i + ".txt"); + copyTo.putNextEntry(e); + } + copyTo.flush(); + copyTo.close(); + } + } + + static void copyStream(InputStream in, OutputStream out) throws IOException { + int bytesRead; + while ((bytesRead = in.read(BUFFER))!= -1) { + out.write(BUFFER, 0, bytesRead); + } + } +} diff --git a/langtools/.hgtags b/langtools/.hgtags index 87ec29040c5..7713b53738e 100644 --- a/langtools/.hgtags +++ b/langtools/.hgtags @@ -244,3 +244,4 @@ af6244ba81b6b8d1bf4ab06587a2067e021e4570 jdk8-b111 b3d7e86a06474fe5100a7b15a95eaa10d41509a6 jdk8-b120 afe63d41c699e0e2ee910ef20c41b60603c852a1 jdk9-b00 077c12d527fb5531c59666c1f84000fc1245a260 jdk9-b01 +f2c58a337c8aaa1ce84dfa8a8e8c5d4c8c1e12fa jdk9-b02 diff --git a/langtools/make/BuildLangtools.gmk b/langtools/make/BuildLangtools.gmk index 0ffcb31bcca..f59ef574f4d 100644 --- a/langtools/make/BuildLangtools.gmk +++ b/langtools/make/BuildLangtools.gmk @@ -27,179 +27,21 @@ default: all include $(SPEC) -include MakeBase.gmk -include JavaCompilation.gmk -# The BOOT_JAVAC setup uses the bootdir compiler to compile the tools -# and the bootstrap javac, to be run by the bootdir jvm. -$(eval $(call SetupJavaCompiler,BOOT_JAVAC, \ - JAVAC := $(JAVAC), \ - SERVER_DIR := $(SJAVAC_SERVER_DIR), \ - SERVER_JVM := $(SJAVAC_SERVER_JAVA), \ - FLAGS := -XDignore.symbol.file=true -g -Xlint:all$(COMMA)-deprecation -Werror)) +gensrc-langtools: + +$(MAKE) -f $(LANGTOOLS_TOPDIR)/make/GensrcLangtools.gmk -# javax.tools.JavaCompilerTool isn't really a suffix but this gets the file copied. -RESOURCE_SUFFIXES := .gif .xml .css .js javax.tools.JavaCompilerTool +interim-langtools: gensrc-langtools + +$(MAKE) -f $(LANGTOOLS_TOPDIR)/make/CompileInterim.gmk -# Now setup the compilation of the properties compilation tool. You can depend -# upon $(BUILD_TOOLS) to trigger a compilation of the tools. Note that we -# add src/share/classes to the sourcepath. This is necessary since the GenStubs -# program needs to be linked and run towards the new javac sources. -$(eval $(call SetupJavaCompilation,BUILD_TOOLS, \ - SETUP := BOOT_JAVAC, \ - DISABLE_SJAVAC := true, \ - ADD_JAVAC_FLAGS := -Xprefer:source, \ - SRC := $(LANGTOOLS_TOPDIR)/make/tools $(LANGTOOLS_TOPDIR)/src/share/classes, \ - INCLUDES := compileproperties genstubs, \ - BIN := $(LANGTOOLS_OUTPUTDIR)/btclasses)) +genstubs-langtools: interim-langtools + +$(MAKE) -f $(LANGTOOLS_TOPDIR)/make/GenstubsLangtools.gmk -# The compileprops tools compiles a properties file into a resource bundle. -TOOL_COMPILEPROPS_CMD := $(JAVA) -cp $(LANGTOOLS_OUTPUTDIR)/btclasses compileproperties.CompileProperties -quiet +compile-langtools: gensrc-langtools interim-langtools genstubs-langtools + +$(MAKE) -f $(LANGTOOLS_TOPDIR)/make/CompileLangtools.gmk -# Lookup the properties that need to be compiled into resource bundles. -PROPSOURCES := $(shell $(FIND) $(LANGTOOLS_TOPDIR)/src/share/classes -name "*.properties") +all: compile-langtools -# Strip away prefix and suffix, leaving for example only: "com/sun/tools/javac/resources/javac_zh_CN" -PROPPATHS := $(patsubst $(LANGTOOLS_TOPDIR)/src/share/classes/%.properties, %, $(PROPSOURCES)) +.PHONY: default all +.PHONY: gensrc-langtools interim-langtools genstubs-langtools compile-langtools -# Generate the list of java files to be created. -PROPJAVAS := $(patsubst %, $(LANGTOOLS_OUTPUTDIR)/gensrc/%.java, $(PROPPATHS)) - -# Generate the package dirs for the tobe generated java files. -PROPDIRS := $(dir $(PROPJAVAS)) - -# Now generate a sequence of "-compile ...javac_zh_CN.properties ...javac_zh_CN.java java.util.ListResourceBundle" -# suitable to be fed into the CompileProperties command. -PROPCMDLINE := $(subst _SPACE_, $(SPACE), $(join $(addprefix -compile_SPACE_, $(PROPSOURCES)), \ - $(addsuffix _SPACE_java.util.ListResourceBundle, $(addprefix _SPACE_$(LANGTOOLS_OUTPUTDIR)/gensrc/, $(addsuffix .java, $(PROPPATHS)))))) - -# Now setup the rule for the generation of the resource bundles. -$(LANGTOOLS_OUTPUTDIR)/gensrc/_the_props.d: $(PROPSOURCES) $(BUILD_TOOLS) - $(RM) -r $(@D)/* - $(MKDIR) -p $(@D) $(PROPDIRS) - $(PRINTF) "jdk=$(JDK_VERSION)\nfull=$(FULL_VERSION)\nrelease=$(RELEASE)\n" > $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javah/resources/version.properties - $(PRINTF) "jdk=$(JDK_VERSION)\nfull=$(FULL_VERSION)\nrelease=$(RELEASE)\n" > $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javap/resources/version.properties - $(PRINTF) "jdk=$(JDK_VERSION)\nfull=$(FULL_VERSION)\nrelease=$(RELEASE)\n" > $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javac/resources/version.properties - $(PRINTF) "jdk=$(JDK_VERSION)\nfull=$(FULL_VERSION)\nrelease=$(RELEASE)\n" > $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/jdeps/resources/version.properties - $(PRINTF) "jdk=$(JDK_VERSION)\nfull=$(FULL_VERSION)\nrelease=$(RELEASE)\n" > $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javadoc/resources/version.properties - $(ECHO) Compiling $(words $(PROPSOURCES) v1 v2 v3) properties into resource bundles - $(TOOL_COMPILEPROPS_CMD) $(PROPCMDLINE) \ - -compile $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javah/resources/version.properties \ - $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javah/resources/version.java \ - java.util.ListResourceBundle \ - -compile $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javap/resources/version.properties \ - $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javap/resources/version.java \ - java.util.ListResourceBundle \ - -compile $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javac/resources/version.properties \ - $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javac/resources/version.java \ - java.util.ListResourceBundle \ - -compile $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/jdeps/resources/version.properties \ - $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/jdeps/resources/version.java \ - java.util.ListResourceBundle \ - -compile $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javadoc/resources/version.properties \ - $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javadoc/resources/version.java \ - java.util.ListResourceBundle - $(ECHO) PROPS_ARE_CREATED = yes > $@ - -# Trigger the generation of the resource bundles. After the resource bundles have -# been compiled, then the makefile will restart and the newly created java files -# will become part of the build further along in the makefile. --include $(LANGTOOLS_OUTPUTDIR)/gensrc/_the_props.d - -ifeq ($(PROPS_ARE_CREATED), yes) - # Setup the rules to build a dist/bootstrap/lib/javac.jar, ie a smaller intermediate javac - # that can be compiled with an old javac. The intermediate javac is then used - # to compile javac again and to build the complete new jdk. - $(eval $(call SetupJavaCompilation,BUILD_BOOTSTRAP_LANGTOOLS, \ - SETUP := BOOT_JAVAC, \ - DISABLE_SJAVAC := true, \ - SRC := $(LANGTOOLS_TOPDIR)/src/share/classes $(LANGTOOLS_OUTPUTDIR)/gensrc, \ - EXCLUDES := com/sun/tools/javac/nio, \ - COPY := $(RESOURCE_SUFFIXES), \ - BIN := $(LANGTOOLS_OUTPUTDIR)/btclasses/bootstrap)) - - $(eval $(call SetupArchive,ARCHIVE_BOOTSTRAP_JAVAC, $(BUILD_BOOTSTRAP_LANGTOOLS), \ - SRCS := $(LANGTOOLS_OUTPUTDIR)/btclasses/bootstrap, \ - JAR := $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar, \ - SUFFIXES := .class $(RESOURCE_SUFFIXES))) - - # GenStubs is used to bootstrap any dependencies from javac to the new JDK that is not - # yet built. It is currently not needed but might be again in the future. The following - # exercises the functionality to verify that it works. - TOOL_GENSTUBS_CMD = $(JAVA) \ - "-Xbootclasspath/p:$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar" \ - -classpath $(LANGTOOLS_OUTPUTDIR)/btclasses \ - genstubs.GenStubs - - # We fetch source from the JDK... - JDKS = $(JDK_TOPDIR)/src/share/classes - - # Build the list of classes to generate stubs from. java/util/function/Predicate.java isn't - # currently needed, but is used as a demo for now. - - STUBSOURCES := $(shell $(FIND) $(JDKS) -name "*.java" | $(GREP) \ - -e "$(JDKS)/java/util/function/Predicate.java") - - # Rewrite the file names into class names because the GenStubs tool require this. - STUBCLASSES := $(subst /,., $(patsubst $(JDKS)/%.java, %, $(STUBSOURCES))) - - # Now setup the build recipe for genstubs. - $(LANGTOOLS_OUTPUTDIR)/genstubs/_the_stubs.d: $(STUBSOURCES) $(BUILD_TOOLS) \ - $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar \ - $(LANGTOOLS_OUTPUTDIR)/gensrc/_the_props.d - $(MKDIR) -p $(@D) - $(MKDIR) -p $(LANGTOOLS_OUTPUTDIR)/tmpstubs - $(ECHO) $(LOG_INFO) Generating stubs from JDK sources. - ($(TOOL_GENSTUBS_CMD) -s $(LANGTOOLS_OUTPUTDIR)/tmpstubs -sourcepath $(JDKS) $(STUBCLASSES) && $(ECHO) STUBS_ARE_CREATED = yes > $@) - if $(DIFF) -x "_the*" -rq $(LANGTOOLS_OUTPUTDIR)/tmpstubs $(LANGTOOLS_OUTPUTDIR)/genstubs > /dev/null 2>&1; then \ - $(ECHO) $(LOG_INFO) No changes in the stubs!; \ - $(RM) -r $(LANGTOOLS_OUTPUTDIR)/tmpstubs; \ - else \ - $(ECHO) $(LOG_INFO) Changes in stubs detected!; \ - $(RM) -r $(@D); \ - $(MV) $(LANGTOOLS_OUTPUTDIR)/tmpstubs $(@D); \ - fi - $(ECHO) STUBS_ARE_CREATED = yes > $@ - - # Trigger a generation of the genstubs java source code and a restart - # of the makefile to make sure that the following build setup use the - # newly created java files. - -include $(LANGTOOLS_OUTPUTDIR)/genstubs/_the_stubs.d - - ifeq ($(STUBS_ARE_CREATED), yes) - # Setup a compiler configuration using the intermediate javac in dist/bootstrap/lib/javac.jar - # that generates code for the new jdk that is being built. - # The code compiled by this compiler setup, cannot necessarily be run with the bootstrap jvm. - $(eval $(call SetupJavaCompiler,GENERATE_NEWBYTECODE, \ - JVM := $(JAVA), \ - JAVAC := "-Xbootclasspath/p:$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar" \ - -cp $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar \ - com.sun.tools.javac.Main, \ - FLAGS := -XDignore.symbol.file=true -Xlint:all$(COMMA)-deprecation -Werror, \ - SERVER_DIR := $(SJAVAC_SERVER_DIR), \ - SERVER_JVM := $(SJAVAC_SERVER_JAVA))) - - $(eval $(call SetupJavaCompilation,BUILD_FULL_JAVAC, \ - SETUP := GENERATE_NEWBYTECODE, \ - SRC := $(LANGTOOLS_TOPDIR)/src/share/classes $(LANGTOOLS_OUTPUTDIR)/gensrc \ - $(LANGTOOLS_OUTPUTDIR)/genstubs, \ - EXCLUDES := java/util java/io java/nio, \ - COPY := $(RESOURCE_SUFFIXES), \ - BIN := $(LANGTOOLS_OUTPUTDIR)/classes)) - - $(eval $(call SetupArchive,ARCHIVE_FULL_JAVAC, $(BUILD_FULL_JAVAC), \ - SETUP := GENERATE_NEWBYTECODE, \ - SRCS := $(LANGTOOLS_OUTPUTDIR)/classes, \ - SUFFIXES := .class $(RESOURCE_SUFFIXES), \ - JAR := $(LANGTOOLS_OUTPUTDIR)/dist/lib/classes.jar)) - - $(eval $(call SetupZipArchive,ZIP_FULL_JAVAC_SOURCE, \ - SRC := $(LANGTOOLS_TOPDIR)/src/share/classes $(LANGTOOLS_OUTPUTDIR)/gensrc, \ - ZIP := $(LANGTOOLS_OUTPUTDIR)/dist/lib/src.zip)) - - all: $(LANGTOOLS_OUTPUTDIR)/dist/lib/classes.jar \ - $(LANGTOOLS_OUTPUTDIR)/dist/lib/src.zip \ - $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar - - endif -endif diff --git a/langtools/make/CommonLangtools.gmk b/langtools/make/CommonLangtools.gmk new file mode 100644 index 00000000000..f32a0ac2ab7 --- /dev/null +++ b/langtools/make/CommonLangtools.gmk @@ -0,0 +1,35 @@ +# +# Copyright (c) 2014, 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. +# + +# The BOOT_JAVAC setup uses the boot jdk compiler to compile the tools +# and the interim javac, to be run by the boot jdk. +$(eval $(call SetupJavaCompiler,BOOT_JAVAC, \ + JAVAC := $(JAVAC), \ + SERVER_DIR := $(SJAVAC_SERVER_DIR), \ + SERVER_JVM := $(SJAVAC_SERVER_JAVA), \ + FLAGS := -XDignore.symbol.file=true -g -Xlint:all$(COMMA)-deprecation -Werror)) + +# javax.tools.JavaCompilerTool isn't really a suffix but this gets the file copied. +RESOURCE_SUFFIXES := .gif .xml .css .js javax.tools.JavaCompilerTool diff --git a/langtools/make/CompileInterim.gmk b/langtools/make/CompileInterim.gmk new file mode 100644 index 00000000000..b425dc932b5 --- /dev/null +++ b/langtools/make/CompileInterim.gmk @@ -0,0 +1,50 @@ +# +# Copyright (c) 2014, 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. +# + +# This must be the first rule +default: all + +include $(SPEC) +include MakeBase.gmk +include JavaCompilation.gmk + +include CommonLangtools.gmk + +# Setup the rules to build the interim langtools jar, which is compiled by +# the boot javac and can be run on the boot jdk. This will be used to compile +# the rest of the product. Include the Genstubs build tool in this compilation +# as it will be used together with the interim javac. +$(eval $(call SetupJavaCompilation,BUILD_INTERIM_LANGTOOLS, \ + SETUP := BOOT_JAVAC, \ + DISABLE_SJAVAC := true, \ + SRC := $(LANGTOOLS_TOPDIR)/src/share/classes \ + $(LANGTOOLS_OUTPUTDIR)/gensrc \ + $(LANGTOOLS_TOPDIR)/make/tools, \ + EXCLUDES := com/sun/tools/javac/nio compileproperties anttasks crules, \ + COPY := $(RESOURCE_SUFFIXES), \ + BIN := $(LANGTOOLS_OUTPUTDIR)/interim_classes, \ + JAR := $(INTERIM_LANGTOOLS_JAR))) + +all: $(BUILD_INTERIM_LANGTOOLS) diff --git a/langtools/make/CompileLangtools.gmk b/langtools/make/CompileLangtools.gmk new file mode 100644 index 00000000000..d15be9dde6a --- /dev/null +++ b/langtools/make/CompileLangtools.gmk @@ -0,0 +1,62 @@ +# +# Copyright (c) 2014, 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. +# + +# This must be the first rule +default: all + +include $(SPEC) +include MakeBase.gmk +include JavaCompilation.gmk + +include CommonLangtools.gmk + +# Setup a compiler configuration using javac from the interim langtools jar +# that generates code for the new jdk that is being built. The code compiled +# by this compiler setup, cannot necessarily be run with the bootstrap jvm. +$(eval $(call SetupJavaCompiler,GENERATE_NEWBYTECODE, \ + JVM := $(JAVA), \ + JAVAC := $(NEW_JAVAC), \ + FLAGS := -XDignore.symbol.file=true -Xlint:all$(COMMA)-deprecation -Werror, \ + SERVER_DIR := $(SJAVAC_SERVER_DIR), \ + SERVER_JVM := $(SJAVAC_SERVER_JAVA))) + +$(eval $(call SetupJavaCompilation,BUILD_FULL_LANGTOOLS, \ + SETUP := GENERATE_NEWBYTECODE, \ + SRC := $(LANGTOOLS_TOPDIR)/src/share/classes \ + $(LANGTOOLS_OUTPUTDIR)/gensrc \ + $(LANGTOOLS_OUTPUTDIR)/genstubs, \ + EXCLUDES := java/util java/io java/nio, \ + COPY := $(RESOURCE_SUFFIXES), \ + BIN := $(LANGTOOLS_OUTPUTDIR)/classes, \ + JAR := $(LANGTOOLS_OUTPUTDIR)/dist/lib/classes.jar)) + +# Construct the source zip separately to avoid picking up the genstubs sources. +$(eval $(call SetupZipArchive,ZIP_FULL_LANGTOOLS_SOURCE, \ + SRC := $(LANGTOOLS_TOPDIR)/src/share/classes $(LANGTOOLS_OUTPUTDIR)/gensrc, \ + ZIP := $(LANGTOOLS_OUTPUTDIR)/dist/lib/src.zip)) + +all: \ + $(BUILD_FULL_LANGTOOLS) \ + $(ZIP_FULL_LANGTOOLS_SOURCE) diff --git a/langtools/make/GensrcLangtools.gmk b/langtools/make/GensrcLangtools.gmk new file mode 100644 index 00000000000..e361a18cb10 --- /dev/null +++ b/langtools/make/GensrcLangtools.gmk @@ -0,0 +1,111 @@ +# +# Copyright (c) 2014, 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. +# + +# This must be the first rule +default: all + +include $(SPEC) +include MakeBase.gmk +include JavaCompilation.gmk + +include CommonLangtools.gmk + +################################################################################ +# Setup the compilation of the properties compilation tool. You can depend +# upon $(BUILD_TOOLS) to trigger a compilation of the tools. Note that we +# add src/share/classes to the sourcepath. This is necessary since the GenStubs +# program needs to be linked and run with the new javac sources. +$(eval $(call SetupJavaCompilation,BUILD_TOOLS, \ + SETUP := BOOT_JAVAC, \ + DISABLE_SJAVAC := true, \ + ADD_JAVAC_FLAGS := -Xprefer:source, \ + SRC := $(LANGTOOLS_TOPDIR)/make/tools, \ + INCLUDES := compileproperties, \ + BIN := $(LANGTOOLS_OUTPUTDIR)/buildtools_classes)) + +################################################################################ +# The compileprops tools compiles a properties file into a resource bundle. +TOOL_COMPILEPROPS_CMD := $(JAVA) -cp $(LANGTOOLS_OUTPUTDIR)/buildtools_classes \ + compileproperties.CompileProperties -quiet + +# Lookup the properties that need to be compiled into resource bundles. +PROPSOURCES := $(shell $(FIND) $(LANGTOOLS_TOPDIR)/src/share/classes -name "*.properties") + +# Strip away prefix and suffix, leaving for example only: +# "com/sun/tools/javac/resources/javac_zh_CN" +PROPPATHS := $(patsubst $(LANGTOOLS_TOPDIR)/src/share/classes/%.properties, %, $(PROPSOURCES)) + +# Generate the list of java files to be created. +PROPJAVAS := $(patsubst %, $(LANGTOOLS_OUTPUTDIR)/gensrc/%.java, $(PROPPATHS)) + +# Generate the package dirs for the tobe generated java files. +PROPDIRS := $(dir $(PROPJAVAS)) + +# Now generate a sequence of: +# "-compile ...javac_zh_CN.properties ...javac_zh_CN.java java.util.ListResourceBundle" +# suitable to be fed into the CompileProperties command. +PROPCMDLINE := $(subst _SPACE_, $(SPACE), \ + $(join $(addprefix -compile_SPACE_, $(PROPSOURCES)), \ + $(addsuffix _SPACE_java.util.ListResourceBundle, \ + $(addprefix _SPACE_$(LANGTOOLS_OUTPUTDIR)/gensrc/, \ + $(addsuffix .java, $(PROPPATHS)))))) + +# Now setup the rule for the generation of the resource bundles. +$(LANGTOOLS_OUTPUTDIR)/gensrc/_the_props: $(PROPSOURCES) $(BUILD_TOOLS) + $(RM) -r $(@D)/* + $(MKDIR) -p $(@D) $(PROPDIRS) + $(PRINTF) "jdk=$(JDK_VERSION)\nfull=$(FULL_VERSION)\nrelease=$(RELEASE)\n" \ + > $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javah/resources/version.properties + $(PRINTF) "jdk=$(JDK_VERSION)\nfull=$(FULL_VERSION)\nrelease=$(RELEASE)\n" \ + > $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javap/resources/version.properties + $(PRINTF) "jdk=$(JDK_VERSION)\nfull=$(FULL_VERSION)\nrelease=$(RELEASE)\n" \ + > $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javac/resources/version.properties + $(PRINTF) "jdk=$(JDK_VERSION)\nfull=$(FULL_VERSION)\nrelease=$(RELEASE)\n" \ + > $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/jdeps/resources/version.properties + $(PRINTF) "jdk=$(JDK_VERSION)\nfull=$(FULL_VERSION)\nrelease=$(RELEASE)\n" \ + > $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javadoc/resources/version.properties + $(ECHO) Compiling $(words $(PROPSOURCES) javah javap javac jdeps javadoc) \ + properties into resource bundles + $(TOOL_COMPILEPROPS_CMD) $(PROPCMDLINE) \ + -compile $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javah/resources/version.properties \ + $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javah/resources/version.java \ + java.util.ListResourceBundle \ + -compile $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javap/resources/version.properties \ + $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javap/resources/version.java \ + java.util.ListResourceBundle \ + -compile $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javac/resources/version.properties \ + $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javac/resources/version.java \ + java.util.ListResourceBundle \ + -compile $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/jdeps/resources/version.properties \ + $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/jdeps/resources/version.java \ + java.util.ListResourceBundle \ + -compile $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javadoc/resources/version.properties \ + $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javadoc/resources/version.java \ + java.util.ListResourceBundle + $(TOUCH) $@ + +all: $(LANGTOOLS_OUTPUTDIR)/gensrc/_the_props + +################################################################################ diff --git a/langtools/make/GenstubsLangtools.gmk b/langtools/make/GenstubsLangtools.gmk new file mode 100644 index 00000000000..f7605ffc4f2 --- /dev/null +++ b/langtools/make/GenstubsLangtools.gmk @@ -0,0 +1,70 @@ +# +# Copyright (c) 2014, 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. +# + +# This must be the first rule +default: all + +include $(SPEC) +include MakeBase.gmk + +include CommonLangtools.gmk + +# GenStubs is used to bootstrap any dependencies from javac to the new JDK that is not +# yet built. It is currently not needed but might be again in the future. The following +# exercises the functionality to verify that it works. +TOOL_GENSTUBS_CMD = $(JAVA) \ + "-Xbootclasspath/p:$(INTERIM_LANGTOOLS_JAR)" \ + genstubs.GenStubs + +# We fetch source from the JDK... +JDKS := $(JDK_TOPDIR)/src/share/classes + +# Build the list of classes to generate stubs from. java/util/function/Predicate.java isn't +# currently needed, but is used as a demo for now. + +STUBSOURCES := $(shell $(FIND) $(JDKS) -name "*.java" | $(GREP) \ + -e "$(JDKS)/java/util/function/Predicate.java") + +# Rewrite the file names into class names because the GenStubs tool require this. +STUBCLASSES := $(subst /,., $(patsubst $(JDKS)/%.java, %, $(STUBSOURCES))) + +# Now setup the build recipe for genstubs. +$(LANGTOOLS_OUTPUTDIR)/genstubs/_the_stubs: $(STUBSOURCES) + $(MKDIR) -p $(@D) + $(MKDIR) -p $(LANGTOOLS_OUTPUTDIR)/tmpstubs + $(ECHO) $(LOG_INFO) Generating stubs from JDK sources. + $(TOOL_GENSTUBS_CMD) -s $(LANGTOOLS_OUTPUTDIR)/tmpstubs -sourcepath $(JDKS) $(STUBCLASSES) + if $(DIFF) -x "_the*" -rq $(LANGTOOLS_OUTPUTDIR)/tmpstubs $(LANGTOOLS_OUTPUTDIR)/genstubs \ + > /dev/null 2>&1; then \ + $(ECHO) $(LOG_INFO) No changes in the stubs!; \ + $(RM) -r $(LANGTOOLS_OUTPUTDIR)/tmpstubs; \ + else \ + $(ECHO) $(LOG_INFO) Changes in stubs detected!; \ + $(RM) -r $(@D); \ + $(MV) $(LANGTOOLS_OUTPUTDIR)/tmpstubs $(@D); \ + fi + $(TOUCH) $@ + +all: $(LANGTOOLS_OUTPUTDIR)/genstubs/_the_stubs diff --git a/langtools/src/share/classes/com/sun/tools/classfile/Attribute.java b/langtools/src/share/classes/com/sun/tools/classfile/Attribute.java index 2688036a7f5..ce5ec7076b1 100644 --- a/langtools/src/share/classes/com/sun/tools/classfile/Attribute.java +++ b/langtools/src/share/classes/com/sun/tools/classfile/Attribute.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -71,10 +71,6 @@ public abstract class Attribute { // defer init of standardAttributeClasses until after options set up } - public void setCompat(boolean compat) { - this.compat = compat; - } - public Attribute createAttribute(ClassReader cr, int name_index, byte[] data) throws IOException { if (standardAttributes == null) { @@ -109,9 +105,10 @@ public abstract class Attribute { protected void init() { standardAttributes = new HashMap<>(); standardAttributes.put(AnnotationDefault, AnnotationDefault_attribute.class); - standardAttributes.put(BootstrapMethods, BootstrapMethods_attribute.class); + standardAttributes.put(BootstrapMethods, BootstrapMethods_attribute.class); standardAttributes.put(CharacterRangeTable, CharacterRangeTable_attribute.class); standardAttributes.put(Code, Code_attribute.class); + standardAttributes.put(CompilationID, CompilationID_attribute.class); standardAttributes.put(ConstantValue, ConstantValue_attribute.class); standardAttributes.put(Deprecated, Deprecated_attribute.class); standardAttributes.put(EnclosingMethod, EnclosingMethod_attribute.class); @@ -120,29 +117,23 @@ public abstract class Attribute { standardAttributes.put(LineNumberTable, LineNumberTable_attribute.class); standardAttributes.put(LocalVariableTable, LocalVariableTable_attribute.class); standardAttributes.put(LocalVariableTypeTable, LocalVariableTypeTable_attribute.class); - - if (!compat) { // old javap does not recognize recent attributes - standardAttributes.put(MethodParameters, MethodParameters_attribute.class); - standardAttributes.put(CompilationID, CompilationID_attribute.class); - standardAttributes.put(RuntimeInvisibleAnnotations, RuntimeInvisibleAnnotations_attribute.class); - standardAttributes.put(RuntimeInvisibleParameterAnnotations, RuntimeInvisibleParameterAnnotations_attribute.class); - standardAttributes.put(RuntimeVisibleAnnotations, RuntimeVisibleAnnotations_attribute.class); - standardAttributes.put(RuntimeVisibleParameterAnnotations, RuntimeVisibleParameterAnnotations_attribute.class); - standardAttributes.put(RuntimeVisibleTypeAnnotations, RuntimeVisibleTypeAnnotations_attribute.class); - standardAttributes.put(RuntimeInvisibleTypeAnnotations, RuntimeInvisibleTypeAnnotations_attribute.class); - standardAttributes.put(Signature, Signature_attribute.class); - standardAttributes.put(SourceID, SourceID_attribute.class); - } - + standardAttributes.put(MethodParameters, MethodParameters_attribute.class); + standardAttributes.put(RuntimeInvisibleAnnotations, RuntimeInvisibleAnnotations_attribute.class); + standardAttributes.put(RuntimeInvisibleParameterAnnotations, RuntimeInvisibleParameterAnnotations_attribute.class); + standardAttributes.put(RuntimeVisibleAnnotations, RuntimeVisibleAnnotations_attribute.class); + standardAttributes.put(RuntimeVisibleParameterAnnotations, RuntimeVisibleParameterAnnotations_attribute.class); + standardAttributes.put(RuntimeVisibleTypeAnnotations, RuntimeVisibleTypeAnnotations_attribute.class); + standardAttributes.put(RuntimeInvisibleTypeAnnotations, RuntimeInvisibleTypeAnnotations_attribute.class); + standardAttributes.put(Signature, Signature_attribute.class); standardAttributes.put(SourceDebugExtension, SourceDebugExtension_attribute.class); standardAttributes.put(SourceFile, SourceFile_attribute.class); + standardAttributes.put(SourceID, SourceID_attribute.class); standardAttributes.put(StackMap, StackMap_attribute.class); standardAttributes.put(StackMapTable, StackMapTable_attribute.class); standardAttributes.put(Synthetic, Synthetic_attribute.class); } private Map> standardAttributes; - private boolean compat; // don't support recent attrs in compatibility mode } public static Attribute read(ClassReader cr) throws IOException { diff --git a/langtools/src/share/classes/com/sun/tools/javac/code/SymbolMetadata.java b/langtools/src/share/classes/com/sun/tools/javac/code/SymbolMetadata.java index 3622c5a45a8..f41dae9f5cf 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/code/SymbolMetadata.java +++ b/langtools/src/share/classes/com/sun/tools/javac/code/SymbolMetadata.java @@ -425,11 +425,15 @@ public class SymbolMetadata { private final List placeholderFor; private final Symbol on; - public Placeholder(Annotate.AnnotateRepeatedContext ctx, List placeholderFor, Symbol on) { + public Placeholder(Annotate.AnnotateRepeatedContext ctx, + List placeholderFor, Symbol on) { super(on.type, List.>nil(), - ctx.isTypeCompound ? - ((Attribute.TypeCompound)placeholderFor.head).position : - new TypeAnnotationPosition()); + ctx.isTypeCompound ? + ((Attribute.TypeCompound)placeholderFor.head).position : + // TODO: Eventually, we will need to get rid of this + // use of unknown, either by using null, or by + // throwing an assertion failure here. + TypeAnnotationPosition.unknown); this.ctx = ctx; this.placeholderFor = placeholderFor; this.on = on; diff --git a/langtools/src/share/classes/com/sun/tools/javac/code/TypeAnnotationPosition.java b/langtools/src/share/classes/com/sun/tools/javac/code/TypeAnnotationPosition.java index c481ea5d3e0..0845f121ab8 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/code/TypeAnnotationPosition.java +++ b/langtools/src/share/classes/com/sun/tools/javac/code/TypeAnnotationPosition.java @@ -119,13 +119,20 @@ public class TypeAnnotationPosition { } } - public TargetType type = TargetType.UNKNOWN; + public static final List emptyPath = List.nil(); + + // NOTE: All of these will be converted to final fields eventually. + + public final TargetType type; // For generic/array types. - public List location = List.nil(); + + // This field is in the process of being made final. Do not + // introduce new mutations. + public List location; // Tree position. - public int pos = -1; + public final int pos; // For type casts, type tests, new, locals (as start_pc), // and method and constructor reference type arguments. @@ -138,13 +145,17 @@ public class TypeAnnotationPosition { public int[] lvarIndex = null; // For type parameter bound - public int bound_index = Integer.MIN_VALUE; + public final int bound_index; // For type parameter and method parameter - public int parameter_index = Integer.MIN_VALUE; + public final int parameter_index; // For class extends, implements, and throws clauses - public int type_index = Integer.MIN_VALUE; + + // This field is effectively final. However, it needs to be + // modified by Gen for the time being. Do not introduce new + // mutations. + public int type_index; // For exception parameters, index into exception table. // In com.sun.tools.javac.jvm.Gen.genCatch we first set the type_index @@ -156,9 +167,10 @@ public class TypeAnnotationPosition { // If this type annotation is within a lambda expression, // store a pointer to the lambda expression tree in order // to allow a later translation to the right method. - public JCLambda onLambda = null; + public final JCLambda onLambda; - public TypeAnnotationPosition() {} + // NOTE: This constructor will eventually go away, and be replaced + // by static builder methods. @Override public String toString() { @@ -323,4 +335,847 @@ public class TypeAnnotationPosition { } return loc.toList(); } + + // These methods are the new preferred way to create + // TypeAnnotationPositions + + // Never make this a public constructor without creating a builder. + private TypeAnnotationPosition(final TargetType ttype, + final int pos, + final int parameter_index, + final JCLambda onLambda, + final int type_index, + final int bound_index, + final List location) { + Assert.checkNonNull(location); + this.type = ttype; + this.pos = pos; + this.parameter_index = parameter_index; + this.onLambda = onLambda; + this.type_index = type_index; + this.bound_index = bound_index; + this.location = location; + } + + /** + * Create a {@code TypeAnnotationPosition} for a method return. + * + * @param location The type path. + * @param onLambda The lambda for this parameter. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + methodReturn(final List location, + final JCLambda onLambda, + final int pos) { + return new TypeAnnotationPosition(TargetType.METHOD_RETURN, pos, + Integer.MIN_VALUE, onLambda, + Integer.MIN_VALUE, Integer.MIN_VALUE, + location); + } + + /** + * Create a {@code TypeAnnotationPosition} for a method return. + * + * @param location The type path. + */ + public static TypeAnnotationPosition + methodReturn(final List location) { + return methodReturn(location, null, -1); + } + + /** + * Create a {@code TypeAnnotationPosition} for a method return. + * + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition methodReturn(final int pos) { + return methodReturn(emptyPath, null, pos); + } + + /** + * Create a {@code TypeAnnotationPosition} for a method receiver. + * + * @param location The type path. + * @param onLambda The lambda for this parameter. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + methodReceiver(final List location, + final JCLambda onLambda, + final int pos) { + return new TypeAnnotationPosition(TargetType.METHOD_RECEIVER, pos, + Integer.MIN_VALUE, onLambda, + Integer.MIN_VALUE, Integer.MIN_VALUE, + location); + } + + /** + * Create a {@code TypeAnnotationPosition} for a method receiver. + * + * @param location The type path. + */ + public static TypeAnnotationPosition + methodReceiver(final List location) { + return methodReceiver(location, null, -1); + } + + /** + * Create a {@code TypeAnnotationPosition} for a method receiver. + * + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition methodReceiver(final int pos) { + return methodReceiver(emptyPath, null, pos); + } + + /** + * Create a {@code TypeAnnotationPosition} for a method formal parameter. + * + * @param location The type path. + * @param onLambda The lambda for this parameter. + * @param index The index of the parameter. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + methodParameter(final List location, + final JCLambda onLambda, + final int parameter_index, + final int pos) { + return new TypeAnnotationPosition(TargetType.METHOD_FORMAL_PARAMETER, + pos, parameter_index, onLambda, + Integer.MIN_VALUE, Integer.MIN_VALUE, + location); + } + + /** + * Create a {@code TypeAnnotationPosition} for a method formal parameter. + * + * @param onLambda The lambda for this parameter. + * @param index The index of the parameter. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + methodParameter(final JCLambda onLambda, + final int parameter_index, + final int pos) { + return methodParameter(emptyPath, onLambda, + parameter_index, pos); + } + + /** + * Create a {@code TypeAnnotationPosition} for a method formal parameter. + * + * @param index The index of the parameter. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + methodParameter(final int parameter_index, + final int pos) { + return methodParameter(null, parameter_index, pos); + } + + /** + * Create a {@code TypeAnnotationPosition} for a method formal parameter. + * + * @param location The type path. + * @param index The index of the parameter. + */ + public static TypeAnnotationPosition + methodParameter(final List location, + final int parameter_index) { + return methodParameter(location, null, parameter_index, -1); + } + + /** + * Create a {@code TypeAnnotationPosition} for a method reference. + * + * @param location The type path. + * @param onLambda The lambda for this method reference. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + methodRef(final List location, + final JCLambda onLambda, + final int pos) { + return new TypeAnnotationPosition(TargetType.METHOD_REFERENCE, pos, + Integer.MIN_VALUE, onLambda, + Integer.MIN_VALUE, Integer.MIN_VALUE, + location); + } + + /** + * Create a {@code TypeAnnotationPosition} for a method reference. + * + * @param location The type path. + * @param onLambda The lambda for this method reference. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + methodRef(final List location) { + return methodRef(location, null, -1); + } + + /** + * Create a {@code TypeAnnotationPosition} for a constructor reference. + * + * @param location The type path. + * @param onLambda The lambda for this constructor reference. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + constructorRef(final List location, + final JCLambda onLambda, + final int pos) { + return new TypeAnnotationPosition(TargetType.CONSTRUCTOR_REFERENCE, pos, + Integer.MIN_VALUE, onLambda, + Integer.MIN_VALUE, Integer.MIN_VALUE, + location); + } + + /** + * Create a {@code TypeAnnotationPosition} for a constructor reference. + * + * @param location The type path. + * @param onLambda The lambda for this constructor reference. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + constructorRef(final List location) { + return constructorRef(location, null, -1); + } + + /** + * Create a {@code TypeAnnotationPosition} for a field. + * + * @param location The type path. + * @param onLambda The lambda for this variable. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + field(final List location, + final JCLambda onLambda, + final int pos) { + return new TypeAnnotationPosition(TargetType.FIELD, pos, + Integer.MIN_VALUE, onLambda, + Integer.MIN_VALUE, Integer.MIN_VALUE, + location); + } + + /** + * Create a {@code TypeAnnotationPosition} for a field. + * + * @param location The type path. + */ + public static TypeAnnotationPosition + field(final List location) { + return field(location, null, -1); + } + + /** + * Create a {@code TypeAnnotationPosition} for a field. + * + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition field(final int pos) { + return field(emptyPath, null, pos); + } + + /** + * Create a {@code TypeAnnotationPosition} for a local variable. + * + * @param location The type path. + * @param onLambda The lambda for this variable. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + localVariable(final List location, + final JCLambda onLambda, + final int pos) { + return new TypeAnnotationPosition(TargetType.LOCAL_VARIABLE, pos, + Integer.MIN_VALUE, onLambda, + Integer.MIN_VALUE, Integer.MIN_VALUE, + location); + } + + /** + * Create a {@code TypeAnnotationPosition} for a local variable. + * + * @param onLambda The lambda for this variable. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + localVariable(final JCLambda onLambda, + final int pos) { + return localVariable(emptyPath, onLambda, pos); + } + + /** + * Create a {@code TypeAnnotationPosition} for a local variable. + * + * @param location The type path. + */ + public static TypeAnnotationPosition + localVariable(final List location) { + return localVariable(location, null, -1); + } + + /** + * Create a {@code TypeAnnotationPosition} for an exception parameter. + * + * @param location The type path. + * @param onLambda The lambda for this parameter. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + exceptionParameter(final List location, + final JCLambda onLambda, + final int pos) { + return new TypeAnnotationPosition(TargetType.EXCEPTION_PARAMETER, pos, + Integer.MIN_VALUE, onLambda, + Integer.MIN_VALUE, Integer.MIN_VALUE, + location); + } + + /** + * Create a {@code TypeAnnotationPosition} for an exception parameter. + * + * @param onLambda The lambda for this parameter. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + exceptionParameter(final JCLambda onLambda, + final int pos) { + return exceptionParameter(emptyPath, onLambda, pos); + } + + /** + * Create a {@code TypeAnnotationPosition} for an exception parameter. + * + * @param location The type path. + */ + public static TypeAnnotationPosition + exceptionParameter(final List location) { + return exceptionParameter(location, null, -1); + } + + + /** + * Create a {@code TypeAnnotationPosition} for a resource variable. + * + * @param location The type path. + * @param onLambda The lambda for this variable. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + resourceVariable(final List location, + final JCLambda onLambda, + final int pos) { + return new TypeAnnotationPosition(TargetType.RESOURCE_VARIABLE, pos, + Integer.MIN_VALUE, onLambda, + Integer.MIN_VALUE, Integer.MIN_VALUE, + location); + } + + /** + * Create a {@code TypeAnnotationPosition} for a resource variable. + * + * @param onLambda The lambda for this variable. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + resourceVariable(final JCLambda onLambda, + final int pos) { + return resourceVariable(emptyPath, onLambda, pos); + } + + /** + * Create a {@code TypeAnnotationPosition} for a resource variable. + * + * @param location The type path. + * @param onLambda The lambda for this variable. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + resourceVariable(final List location) { + return resourceVariable(location, null, -1); + } + + /** + * Create a {@code TypeAnnotationPosition} for a new. + * + * @param location The type path. + * @param onLambda The lambda for this variable. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + newObj(final List location, + final JCLambda onLambda, + final int pos) { + return new TypeAnnotationPosition(TargetType.NEW, pos, + Integer.MIN_VALUE, onLambda, + Integer.MIN_VALUE, Integer.MIN_VALUE, + location); + } + + /** + * Create a {@code TypeAnnotationPosition} for a new. + * + * @param location The type path. + * @param onLambda The lambda for this variable. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition newObj(final int pos) { + return newObj(emptyPath, null, pos); + } + + /** + * Create a {@code TypeAnnotationPosition} for a new. + * + * @param location The type path. + * @param onLambda The lambda for this variable. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + newObj(final List location) { + return newObj(location, null, -1); + } + + /** + * Create a {@code TypeAnnotationPosition} for a class extension. + * + * @param location The type path. + * @param onLambda The lambda for this variable. + * @param type_index The index of the interface. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + classExtends(final List location, + final JCLambda onLambda, + final int type_index, + final int pos) { + return new TypeAnnotationPosition(TargetType.CLASS_EXTENDS, pos, + Integer.MIN_VALUE, onLambda, + type_index, Integer.MIN_VALUE, + location); + } + + /** + * Create a {@code TypeAnnotationPosition} for a class extension. + * + * @param location The type path. + * @param onLambda The lambda for this variable. + * @param type_index The index of the interface. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + classExtends(final List location, + final JCLambda onLambda, + final int pos) { + return classExtends(location, onLambda, -1, pos); + } + + /** + * Create a {@code TypeAnnotationPosition} for a class extension. + * + * @param location The type path. + * @param type_index The index of the interface. + */ + public static TypeAnnotationPosition + classExtends(final List location, + final int type_index) { + return classExtends(location, null, type_index, -1); + } + + /** + * Create a {@code TypeAnnotationPosition} for a class extension. + * + * @param type_index The index of the interface. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition classExtends(final int type_index, + final int pos) { + return classExtends(emptyPath, null, type_index, pos); + } + + /** + * Create a {@code TypeAnnotationPosition} for a class extension. + * + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition classExtends(final int pos) { + return classExtends(-1, pos); + } + + /** + * Create a {@code TypeAnnotationPosition} for an instanceof. + * + * @param location The type path. + * @param onLambda The lambda for this variable. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + instanceOf(final List location, + final JCLambda onLambda, + final int pos) { + return new TypeAnnotationPosition(TargetType.INSTANCEOF, pos, + Integer.MIN_VALUE, onLambda, + Integer.MIN_VALUE, Integer.MIN_VALUE, + location); + } + /** + * Create a {@code TypeAnnotationPosition} for an instanceof. + * + * @param location The type path. + * @param onLambda The lambda for this variable. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + instanceOf(final List location) { + return instanceOf(location, null, -1); + } + + /** + * Create a {@code TypeAnnotationPosition} for a type cast. + * + * @param location The type path. + * @param onLambda The lambda for this variable. + * @param type_index The index into an intersection type. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + typeCast(final List location, + final JCLambda onLambda, + final int type_index, + final int pos) { + return new TypeAnnotationPosition(TargetType.CAST, pos, + Integer.MIN_VALUE, onLambda, + type_index, Integer.MIN_VALUE, + location); + } + + /** + * Create a {@code TypeAnnotationPosition} for a type cast. + * + * @param location The type path. + * @param onLambda The lambda for this variable. + * @param type_index The index into an intersection type. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + typeCast(final List location, + final int type_index) { + return typeCast(location, null, type_index, -1); + } + + /** + * Create a {@code TypeAnnotationPosition} for a method + * invocation type argument. + * + * @param location The type path. + * @param onLambda The lambda for this variable. + * @param type_index The index of the type argument. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + methodInvocationTypeArg(final List location, + final JCLambda onLambda, + final int type_index, + final int pos) { + return new TypeAnnotationPosition(TargetType.METHOD_INVOCATION_TYPE_ARGUMENT, + pos, Integer.MIN_VALUE, onLambda, + type_index, Integer.MIN_VALUE, + location); + } + + /** + * Create a {@code TypeAnnotationPosition} for a method + * invocation type argument. + * + * @param location The type path. + * @param type_index The index of the type argument. + */ + public static TypeAnnotationPosition + methodInvocationTypeArg(final List location, + final int type_index) { + return methodInvocationTypeArg(location, null, type_index, -1); + } + + /** + * Create a {@code TypeAnnotationPosition} for a constructor + * invocation type argument. + * + * @param location The type path. + * @param onLambda The lambda for this variable. + * @param type_index The index of the type argument. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + constructorInvocationTypeArg(final List location, + final JCLambda onLambda, + final int type_index, + final int pos) { + return new TypeAnnotationPosition(TargetType.CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT, + pos, Integer.MIN_VALUE, onLambda, + type_index, Integer.MIN_VALUE, + location); + } + + /** + * Create a {@code TypeAnnotationPosition} for a constructor + * invocation type argument. + * + * @param location The type path. + * @param type_index The index of the type argument. + */ + public static TypeAnnotationPosition + constructorInvocationTypeArg(final List location, + final int type_index) { + return constructorInvocationTypeArg(location, null, type_index, -1); + } + + /** + * Create a {@code TypeAnnotationPosition} for a type parameter. + * + * @param location The type path. + * @param onLambda The lambda for this variable. + * @param parameter_index The index of the type parameter. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + typeParameter(final List location, + final JCLambda onLambda, + final int parameter_index, + final int pos) { + return new TypeAnnotationPosition(TargetType.CLASS_TYPE_PARAMETER, pos, + parameter_index, onLambda, + Integer.MIN_VALUE, Integer.MIN_VALUE, + location); + } + + /** + * Create a {@code TypeAnnotationPosition} for a type parameter. + * + * @param location The type path. + * @param onLambda The lambda for this variable. + * @param parameter_index The index of the type parameter. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + typeParameter(final List location, + final int parameter_index) { + return typeParameter(location, null, parameter_index, -1); + } + + /** + * Create a {@code TypeAnnotationPosition} for a method type parameter. + * + * @param location The type path. + * @param onLambda The lambda for this variable. + * @param parameter_index The index of the type parameter. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + methodTypeParameter(final List location, + final JCLambda onLambda, + final int parameter_index, + final int pos) { + return new TypeAnnotationPosition(TargetType.METHOD_TYPE_PARAMETER, + pos, parameter_index, onLambda, + Integer.MIN_VALUE, Integer.MIN_VALUE, + location); + } + + /** + * Create a {@code TypeAnnotationPosition} for a method type parameter. + * + * @param location The type path. + * @param parameter_index The index of the type parameter. + */ + public static TypeAnnotationPosition + methodTypeParameter(final List location, + final int parameter_index) { + return methodTypeParameter(location, null, parameter_index, -1); + } + + /** + * Create a {@code TypeAnnotationPosition} for a throws clause. + * + * @param location The type path. + * @param onLambda The lambda for this variable. + * @param type_index The index of the exception. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + methodThrows(final List location, + final JCLambda onLambda, + final int type_index, + final int pos) { + return new TypeAnnotationPosition(TargetType.THROWS, pos, + Integer.MIN_VALUE, onLambda, + type_index, Integer.MIN_VALUE, + location); + } + + /** + * Create a {@code TypeAnnotationPosition} for a throws clause. + * + * @param location The type path. + * @param type_index The index of the exception. + */ + public static TypeAnnotationPosition + methodThrows(final List location, + final int type_index) { + return methodThrows(location, null, type_index, -1); + } + + /** + * Create a {@code TypeAnnotationPosition} for a method reference + * type argument. + * + * @param location The type path. + * @param onLambda The lambda for this variable. + * @param parameter_index The index of the type argument. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + methodRefTypeArg(final List location, + final JCLambda onLambda, + final int type_index, + final int pos) { + return new TypeAnnotationPosition(TargetType.METHOD_REFERENCE_TYPE_ARGUMENT, + pos, Integer.MIN_VALUE, onLambda, + type_index, Integer.MIN_VALUE, + location); + } + + /** + * Create a {@code TypeAnnotationPosition} for a method reference + * type argument. + * + * @param location The type path. + * @param onLambda The lambda for this variable. + * @param parameter_index The index of the type argument. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + methodRefTypeArg(final List location, + final int type_index) { + return methodRefTypeArg(location, null, type_index, -1); + } + + /** + * Create a {@code TypeAnnotationPosition} for a constructor reference + * type argument. + * + * @param location The type path. + * @param onLambda The lambda for this variable. + * @param parameter_index The index of the type argument. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + constructorRefTypeArg(final List location, + final JCLambda onLambda, + final int type_index, + final int pos) { + return new TypeAnnotationPosition(TargetType.CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT, + pos, Integer.MIN_VALUE, onLambda, + type_index, Integer.MIN_VALUE, + location); + } + + /** + * Create a {@code TypeAnnotationPosition} for a constructor reference + * type argument. + * + * @param location The type path. + * @param parameter_index The index of the type argument. + */ + public static TypeAnnotationPosition + constructorRefTypeArg(final List location, + final int type_index) { + return constructorRefTypeArg(location, null, type_index, -1); + } + + /** + * Create a {@code TypeAnnotationPosition} for a type parameter bound. + * + * @param location The type path. + * @param onLambda The lambda for this variable. + * @param parameter_index The index of the type parameter. + * @param bound_index The index of the type parameter bound. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + typeParameterBound(final List location, + final JCLambda onLambda, + final int parameter_index, + final int bound_index, + final int pos) { + return new TypeAnnotationPosition(TargetType.CLASS_TYPE_PARAMETER_BOUND, + pos, parameter_index, onLambda, + Integer.MIN_VALUE, bound_index, + location); + } + + /** + * Create a {@code TypeAnnotationPosition} for a type parameter bound. + * + * @param location The type path. + * @param parameter_index The index of the type parameter. + * @param bound_index The index of the type parameter bound. + */ + public static TypeAnnotationPosition + typeParameterBound(final List location, + final int parameter_index, + final int bound_index) { + return typeParameterBound(location, null, parameter_index, + bound_index, -1); + } + + /** + * Create a {@code TypeAnnotationPosition} for a method type + * parameter bound. + * + * @param location The type path. + * @param onLambda The lambda for this variable. + * @param parameter_index The index of the type parameter. + * @param bound_index The index of the type parameter bound. + * @param pos The position from the associated tree node. + */ + public static TypeAnnotationPosition + methodTypeParameterBound(final List location, + final JCLambda onLambda, + final int parameter_index, + final int bound_index, + final int pos) { + return new TypeAnnotationPosition(TargetType.METHOD_TYPE_PARAMETER_BOUND, + pos, parameter_index, onLambda, + Integer.MIN_VALUE, bound_index, + location); + } + + /** + * Create a {@code TypeAnnotationPosition} for a method type + * parameter bound. + * + * @param location The type path. + * @param parameter_index The index of the type parameter. + * @param bound_index The index of the type parameter bound. + */ + public static TypeAnnotationPosition + methodTypeParameterBound(final List location, + final int parameter_index, + final int bound_index) { + return methodTypeParameterBound(location, null, parameter_index, + bound_index, -1); + } + + // Consider this deprecated on arrival. We eventually want to get + // rid of this value altogether. Do not use it for anything new. + public static final TypeAnnotationPosition unknown = + new TypeAnnotationPosition(TargetType.UNKNOWN, -1, + Integer.MIN_VALUE, null, + Integer.MIN_VALUE, Integer.MIN_VALUE, + emptyPath); } diff --git a/langtools/src/share/classes/com/sun/tools/javac/code/TypeAnnotations.java b/langtools/src/share/classes/com/sun/tools/javac/code/TypeAnnotations.java index 1ed8f161a7d..88bbf4b7830 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/code/TypeAnnotations.java +++ b/langtools/src/share/classes/com/sun/tools/javac/code/TypeAnnotations.java @@ -663,8 +663,15 @@ public class TypeAnnotations { * type annotations: determine the type annotation positions. */ - private void resolveFrame(JCTree tree, JCTree frame, - List path, TypeAnnotationPosition p) { + // This method is considered deprecated, and will be removed + // in the near future. Don't use it for anything new. + private TypeAnnotationPosition + resolveFrame(JCTree tree, + JCTree frame, + List path, + JCLambda currentLambda, + int outer_type_index, + ListBuffer location) { /* System.out.println("Resolving tree: " + tree + " kind: " + tree.getKind()); System.out.println(" Framing tree: " + frame + " kind: " + frame.getKind()); @@ -675,87 +682,101 @@ public class TypeAnnotations { switch (frame.getKind()) { case TYPE_CAST: - JCTypeCast frameTC = (JCTypeCast) frame; - p.type = TargetType.CAST; - if (frameTC.clazz.hasTag(Tag.TYPEINTERSECTION)) { - // This case was already handled by INTERSECTION_TYPE - } else { - p.type_index = 0; - } - p.pos = frame.pos; - return; + return TypeAnnotationPosition.typeCast(location.toList(), + currentLambda, + outer_type_index, + frame.pos); case INSTANCE_OF: - p.type = TargetType.INSTANCEOF; - p.pos = frame.pos; - return; + return TypeAnnotationPosition.instanceOf(location.toList(), + currentLambda, + frame.pos); case NEW_CLASS: - JCNewClass frameNewClass = (JCNewClass) frame; + final JCNewClass frameNewClass = (JCNewClass) frame; if (frameNewClass.def != null) { // Special handling for anonymous class instantiations - JCClassDecl frameClassDecl = frameNewClass.def; + final JCClassDecl frameClassDecl = frameNewClass.def; if (frameClassDecl.extending == tree) { - p.type = TargetType.CLASS_EXTENDS; - p.type_index = -1; + return TypeAnnotationPosition + .classExtends(location.toList(), currentLambda, + frame.pos); } else if (frameClassDecl.implementing.contains(tree)) { - p.type = TargetType.CLASS_EXTENDS; - p.type_index = frameClassDecl.implementing.indexOf(tree); + final int type_index = + frameClassDecl.implementing.indexOf(tree); + return TypeAnnotationPosition + .classExtends(location.toList(), currentLambda, + type_index, frame.pos); } else { // In contrast to CLASS below, typarams cannot occur here. - Assert.error("Could not determine position of tree " + tree + - " within frame " + frame); + throw new AssertionError("Could not determine position of tree " + tree + + " within frame " + frame); } } else if (frameNewClass.typeargs.contains(tree)) { - p.type = TargetType.CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT; - p.type_index = frameNewClass.typeargs.indexOf(tree); + final int type_index = + frameNewClass.typeargs.indexOf(tree); + return TypeAnnotationPosition + .constructorInvocationTypeArg(location.toList(), + currentLambda, + type_index, + frame.pos); } else { - p.type = TargetType.NEW; + return TypeAnnotationPosition + .newObj(location.toList(), currentLambda, + frame.pos); } - p.pos = frame.pos; - return; case NEW_ARRAY: - p.type = TargetType.NEW; - p.pos = frame.pos; - return; + return TypeAnnotationPosition + .newObj(location.toList(), currentLambda, frame.pos); case ANNOTATION_TYPE: case CLASS: case ENUM: case INTERFACE: - p.pos = frame.pos; if (((JCClassDecl)frame).extending == tree) { - p.type = TargetType.CLASS_EXTENDS; - p.type_index = -1; + return TypeAnnotationPosition + .classExtends(location.toList(), currentLambda, + frame.pos); } else if (((JCClassDecl)frame).implementing.contains(tree)) { - p.type = TargetType.CLASS_EXTENDS; - p.type_index = ((JCClassDecl)frame).implementing.indexOf(tree); + final int type_index = + ((JCClassDecl)frame).implementing.indexOf(tree); + return TypeAnnotationPosition + .classExtends(location.toList(), currentLambda, + type_index, frame.pos); } else if (((JCClassDecl)frame).typarams.contains(tree)) { - p.type = TargetType.CLASS_TYPE_PARAMETER; - p.parameter_index = ((JCClassDecl)frame).typarams.indexOf(tree); + final int parameter_index = + ((JCClassDecl)frame).typarams.indexOf(tree); + return TypeAnnotationPosition + .typeParameter(location.toList(), currentLambda, + parameter_index, frame.pos); } else { - Assert.error("Could not determine position of tree " + tree + - " within frame " + frame); + throw new AssertionError("Could not determine position of tree " + + tree + " within frame " + frame); } - return; case METHOD: { - JCMethodDecl frameMethod = (JCMethodDecl) frame; - p.pos = frame.pos; + final JCMethodDecl frameMethod = (JCMethodDecl) frame; if (frameMethod.thrown.contains(tree)) { - p.type = TargetType.THROWS; - p.type_index = frameMethod.thrown.indexOf(tree); + final int type_index = frameMethod.thrown.indexOf(tree); + return TypeAnnotationPosition + .methodThrows(location.toList(), currentLambda, + type_index, frame.pos); } else if (frameMethod.restype == tree) { - p.type = TargetType.METHOD_RETURN; + return TypeAnnotationPosition + .methodReturn(location.toList(), currentLambda, + frame.pos); } else if (frameMethod.typarams.contains(tree)) { - p.type = TargetType.METHOD_TYPE_PARAMETER; - p.parameter_index = frameMethod.typarams.indexOf(tree); + final int parameter_index = + frameMethod.typarams.indexOf(tree); + return TypeAnnotationPosition + .methodTypeParameter(location.toList(), + currentLambda, + parameter_index, frame.pos); } else { - Assert.error("Could not determine position of tree " + tree + - " within frame " + frame); + throw new AssertionError("Could not determine position of tree " + tree + + " within frame " + frame); } - return; } case PARAMETERIZED_TYPE: { @@ -766,25 +787,30 @@ public class TypeAnnotations { } else if (((JCTypeApply)frame).arguments.contains(tree)) { JCTypeApply taframe = (JCTypeApply) frame; int arg = taframe.arguments.indexOf(tree); - p.location = p.location.prepend(new TypePathEntry(TypePathEntryKind.TYPE_ARGUMENT, arg)); + location = location.prepend( + new TypePathEntry(TypePathEntryKind.TYPE_ARGUMENT, + arg)); Type typeToUse; - if (newPath.tail != null && newPath.tail.head.hasTag(Tag.NEWCLASS)) { - // If we are within an anonymous class instantiation, use its type, - // because it contains a correctly nested type. + if (newPath.tail != null && + newPath.tail.head.hasTag(Tag.NEWCLASS)) { + // If we are within an anonymous class + // instantiation, use its type, because it + // contains a correctly nested type. typeToUse = newPath.tail.head.type; } else { typeToUse = taframe.type; } - locateNestedTypes(typeToUse, p); + location = locateNestedTypes(typeToUse, location); } else { - Assert.error("Could not determine type argument position of tree " + tree + - " within frame " + frame); + throw new AssertionError("Could not determine type argument position of tree " + tree + + " within frame " + frame); } - resolveFrame(newPath.head, newPath.tail.head, newPath, p); - return; + return resolveFrame(newPath.head, newPath.tail.head, + newPath, currentLambda, + outer_type_index, location); } case MEMBER_REFERENCE: { @@ -793,117 +819,140 @@ public class TypeAnnotations { if (mrframe.expr == tree) { switch (mrframe.mode) { case INVOKE: - p.type = TargetType.METHOD_REFERENCE; - break; + return TypeAnnotationPosition + .methodRef(location.toList(), currentLambda, + frame.pos); case NEW: - p.type = TargetType.CONSTRUCTOR_REFERENCE; - break; + return TypeAnnotationPosition + .constructorRef(location.toList(), + currentLambda, + frame.pos); default: - Assert.error("Unknown method reference mode " + mrframe.mode + - " for tree " + tree + " within frame " + frame); + throw new AssertionError("Unknown method reference mode " + mrframe.mode + + " for tree " + tree + " within frame " + frame); } - p.pos = frame.pos; } else if (mrframe.typeargs != null && mrframe.typeargs.contains(tree)) { - int arg = mrframe.typeargs.indexOf(tree); - p.type_index = arg; + final int type_index = mrframe.typeargs.indexOf(tree); switch (mrframe.mode) { case INVOKE: - p.type = TargetType.METHOD_REFERENCE_TYPE_ARGUMENT; - break; + return TypeAnnotationPosition + .methodRefTypeArg(location.toList(), + currentLambda, + type_index, frame.pos); case NEW: - p.type = TargetType.CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT; - break; + return TypeAnnotationPosition + .constructorRefTypeArg(location.toList(), + currentLambda, + type_index, frame.pos); default: - Assert.error("Unknown method reference mode " + mrframe.mode + - " for tree " + tree + " within frame " + frame); + throw new AssertionError("Unknown method reference mode " + mrframe.mode + + " for tree " + tree + " within frame " + frame); } - p.pos = frame.pos; } else { - Assert.error("Could not determine type argument position of tree " + tree + - " within frame " + frame); + throw new AssertionError("Could not determine type argument position of tree " + tree + + " within frame " + frame); } - return; } case ARRAY_TYPE: { - ListBuffer index = new ListBuffer<>(); - index = index.append(TypePathEntry.ARRAY); + location = location.prepend(TypePathEntry.ARRAY); List newPath = path.tail; while (true) { JCTree npHead = newPath.tail.head; if (npHead.hasTag(JCTree.Tag.TYPEARRAY)) { newPath = newPath.tail; - index = index.append(TypePathEntry.ARRAY); + location = location.prepend(TypePathEntry.ARRAY); } else if (npHead.hasTag(JCTree.Tag.ANNOTATED_TYPE)) { newPath = newPath.tail; } else { break; } } - p.location = p.location.prependList(index.toList()); - resolveFrame(newPath.head, newPath.tail.head, newPath, p); - return; + return resolveFrame(newPath.head, newPath.tail.head, + newPath, currentLambda, + outer_type_index, location); } case TYPE_PARAMETER: if (path.tail.tail.head.hasTag(JCTree.Tag.CLASSDEF)) { - JCClassDecl clazz = (JCClassDecl)path.tail.tail.head; - p.type = TargetType.CLASS_TYPE_PARAMETER_BOUND; - p.parameter_index = clazz.typarams.indexOf(path.tail.head); - p.bound_index = ((JCTypeParameter)frame).bounds.indexOf(tree); - if (((JCTypeParameter)frame).bounds.get(0).type.isInterface()) { - // Account for an implicit Object as bound 0 - p.bound_index += 1; - } + final JCClassDecl clazz = + (JCClassDecl)path.tail.tail.head; + final int parameter_index = + clazz.typarams.indexOf(path.tail.head); + final int bound_index = + ((JCTypeParameter)frame).bounds.get(0) + .type.isInterface() ? + ((JCTypeParameter)frame).bounds.indexOf(tree) + 1: + ((JCTypeParameter)frame).bounds.indexOf(tree); + return TypeAnnotationPosition + .typeParameterBound(location.toList(), + currentLambda, + parameter_index, bound_index, + frame.pos); } else if (path.tail.tail.head.hasTag(JCTree.Tag.METHODDEF)) { - JCMethodDecl method = (JCMethodDecl)path.tail.tail.head; - p.type = TargetType.METHOD_TYPE_PARAMETER_BOUND; - p.parameter_index = method.typarams.indexOf(path.tail.head); - p.bound_index = ((JCTypeParameter)frame).bounds.indexOf(tree); - if (((JCTypeParameter)frame).bounds.get(0).type.isInterface()) { - // Account for an implicit Object as bound 0 - p.bound_index += 1; - } + final JCMethodDecl method = + (JCMethodDecl)path.tail.tail.head; + final int parameter_index = + method.typarams.indexOf(path.tail.head); + final int bound_index = + ((JCTypeParameter)frame).bounds.get(0) + .type.isInterface() ? + ((JCTypeParameter)frame).bounds.indexOf(tree) + 1: + ((JCTypeParameter)frame).bounds.indexOf(tree); + return TypeAnnotationPosition + .methodTypeParameterBound(location.toList(), + currentLambda, + parameter_index, + bound_index, + frame.pos); } else { - Assert.error("Could not determine position of tree " + tree + - " within frame " + frame); + throw new AssertionError("Could not determine position of tree " + tree + + " within frame " + frame); } - p.pos = frame.pos; - return; case VARIABLE: VarSymbol v = ((JCVariableDecl)frame).sym; - p.pos = frame.pos; - switch (v.getKind()) { - case LOCAL_VARIABLE: - p.type = TargetType.LOCAL_VARIABLE; - break; - case FIELD: - p.type = TargetType.FIELD; - break; - case PARAMETER: - if (v.getQualifiedName().equals(names._this)) { - // TODO: Intro a separate ElementKind? - p.type = TargetType.METHOD_RECEIVER; - } else { - p.type = TargetType.METHOD_FORMAL_PARAMETER; - p.parameter_index = methodParamIndex(path, frame); - } - break; - case EXCEPTION_PARAMETER: - p.type = TargetType.EXCEPTION_PARAMETER; - break; - case RESOURCE_VARIABLE: - p.type = TargetType.RESOURCE_VARIABLE; - break; - default: - Assert.error("Found unexpected type annotation for variable: " + v + " with kind: " + v.getKind()); - } if (v.getKind() != ElementKind.FIELD) { v.owner.appendUniqueTypeAttributes(v.getRawTypeAttributes()); } - return; + switch (v.getKind()) { + case LOCAL_VARIABLE: + return TypeAnnotationPosition + .localVariable(location.toList(), currentLambda, + frame.pos); + case FIELD: + return TypeAnnotationPosition.field(location.toList(), + currentLambda, + frame.pos); + case PARAMETER: + if (v.getQualifiedName().equals(names._this)) { + return TypeAnnotationPosition + .methodReceiver(location.toList(), + currentLambda, + frame.pos); + } else { + final int parameter_index = + methodParamIndex(path, frame); + return TypeAnnotationPosition + .methodParameter(location.toList(), + currentLambda, + parameter_index, + frame.pos); + } + case EXCEPTION_PARAMETER: + return TypeAnnotationPosition + .exceptionParameter(location.toList(), + currentLambda, + frame.pos); + case RESOURCE_VARIABLE: + return TypeAnnotationPosition + .resourceVariable(location.toList(), + currentLambda, + frame.pos); + default: + throw new AssertionError("Found unexpected type annotation for variable: " + v + " with kind: " + v.getKind()); + } case ANNOTATED_TYPE: { if (frame == tree) { @@ -912,11 +961,7 @@ public class TypeAnnotations { // not care about inner types. JCAnnotatedType atypetree = (JCAnnotatedType) frame; final Type utype = atypetree.underlyingType.type; - if (utype == null) { - // This might happen during DeferredAttr; - // we will be back later. - return; - } + Assert.checkNonNull(utype); Symbol tsym = utype.tsym; if (tsym.getKind().equals(ElementKind.TYPE_PARAMETER) || utype.getKind().equals(TypeKind.WILDCARD) || @@ -925,83 +970,89 @@ public class TypeAnnotations { // class/method as enclosing elements. // There is actually nothing to do for them. } else { - locateNestedTypes(utype, p); + location = locateNestedTypes(utype, location); } } List newPath = path.tail; - resolveFrame(newPath.head, newPath.tail.head, newPath, p); - return; + return resolveFrame(newPath.head, newPath.tail.head, + newPath, currentLambda, + outer_type_index, location); } case UNION_TYPE: { List newPath = path.tail; - resolveFrame(newPath.head, newPath.tail.head, newPath, p); - return; + return resolveFrame(newPath.head, newPath.tail.head, + newPath, currentLambda, + outer_type_index, location); } case INTERSECTION_TYPE: { JCTypeIntersection isect = (JCTypeIntersection)frame; - p.type_index = isect.bounds.indexOf(tree); - List newPath = path.tail; - resolveFrame(newPath.head, newPath.tail.head, newPath, p); - return; + final List newPath = path.tail; + return resolveFrame(newPath.head, newPath.tail.head, + newPath, currentLambda, + isect.bounds.indexOf(tree), location); } case METHOD_INVOCATION: { JCMethodInvocation invocation = (JCMethodInvocation)frame; if (!invocation.typeargs.contains(tree)) { - Assert.error("{" + tree + "} is not an argument in the invocation: " + invocation); + throw new AssertionError("{" + tree + "} is not an argument in the invocation: " + invocation); } MethodSymbol exsym = (MethodSymbol) TreeInfo.symbol(invocation.getMethodSelect()); + final int type_index = invocation.typeargs.indexOf(tree); if (exsym == null) { - Assert.error("could not determine symbol for {" + invocation + "}"); + throw new AssertionError("could not determine symbol for {" + invocation + "}"); } else if (exsym.isConstructor()) { - p.type = TargetType.CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT; + return TypeAnnotationPosition + .constructorInvocationTypeArg(location.toList(), + currentLambda, + type_index, + invocation.pos); } else { - p.type = TargetType.METHOD_INVOCATION_TYPE_ARGUMENT; + return TypeAnnotationPosition + .methodInvocationTypeArg(location.toList(), + currentLambda, + type_index, + invocation.pos); } - p.pos = invocation.pos; - p.type_index = invocation.typeargs.indexOf(tree); - return; } case EXTENDS_WILDCARD: case SUPER_WILDCARD: { // Annotations in wildcard bounds - p.location = p.location.prepend(TypePathEntry.WILDCARD); - List newPath = path.tail; - resolveFrame(newPath.head, newPath.tail.head, newPath, p); - return; + final List newPath = path.tail; + return resolveFrame(newPath.head, newPath.tail.head, + newPath, currentLambda, + outer_type_index, + location.prepend(TypePathEntry.WILDCARD)); } case MEMBER_SELECT: { - List newPath = path.tail; - resolveFrame(newPath.head, newPath.tail.head, newPath, p); - return; + final List newPath = path.tail; + return resolveFrame(newPath.head, newPath.tail.head, + newPath, currentLambda, + outer_type_index, location); } default: - Assert.error("Unresolved frame: " + frame + " of kind: " + frame.getKind() + - "\n Looking for tree: " + tree); - return; + throw new AssertionError("Unresolved frame: " + frame + + " of kind: " + frame.getKind() + + "\n Looking for tree: " + tree); } } - private void locateNestedTypes(Type type, TypeAnnotationPosition p) { - // The number of "steps" to get from the full type to the - // left-most outer type. - ListBuffer depth = new ListBuffer<>(); - + private ListBuffer + locateNestedTypes(Type type, + ListBuffer depth) { Type encl = type.getEnclosingType(); while (encl != null && encl.getKind() != TypeKind.NONE && encl.getKind() != TypeKind.ERROR) { - depth = depth.append(TypePathEntry.INNER_TYPE); + depth = depth.prepend(TypePathEntry.INNER_TYPE); encl = encl.getEnclosingType(); } - if (depth.nonEmpty()) { - p.location = p.location.prependList(depth.toList()); - } + return depth; } private int methodParamIndex(List path, JCTree param) { @@ -1052,18 +1103,18 @@ public class TypeAnnotations { } if (sigOnly) { if (!tree.mods.annotations.isEmpty()) { - // Nothing to do for separateAnnotationsKinds if - // there are no annotations of either kind. - TypeAnnotationPosition pos = new TypeAnnotationPosition(); - pos.type = TargetType.METHOD_RETURN; if (tree.sym.isConstructor()) { - pos.pos = tree.pos; - // Use null to mark that the annotations go with the symbol. + final TypeAnnotationPosition pos = + TypeAnnotationPosition.methodReturn(tree.pos); + // Use null to mark that the annotations go + // with the symbol. separateAnnotationsKinds(tree, null, tree.sym, pos); } else { - pos.pos = tree.restype.pos; - separateAnnotationsKinds(tree.restype, tree.sym.type.getReturnType(), - tree.sym, pos); + final TypeAnnotationPosition pos = + TypeAnnotationPosition.methodReturn(tree.restype.pos); + separateAnnotationsKinds(tree.restype, + tree.sym.type.getReturnType(), + tree.sym, pos); } } if (tree.recvparam != null && tree.recvparam.sym != null && @@ -1071,22 +1122,22 @@ public class TypeAnnotations { // Nothing to do for separateAnnotationsKinds if // there are no annotations of either kind. // TODO: make sure there are no declaration annotations. - TypeAnnotationPosition pos = new TypeAnnotationPosition(); - pos.type = TargetType.METHOD_RECEIVER; - pos.pos = tree.recvparam.vartype.pos; - separateAnnotationsKinds(tree.recvparam.vartype, tree.recvparam.sym.type, - tree.recvparam.sym, pos); + final TypeAnnotationPosition pos = + TypeAnnotationPosition.methodReceiver(tree.recvparam.vartype.pos); + separateAnnotationsKinds(tree.recvparam.vartype, + tree.recvparam.sym.type, + tree.recvparam.sym, pos); } int i = 0; for (JCVariableDecl param : tree.params) { if (!param.mods.annotations.isEmpty()) { // Nothing to do for separateAnnotationsKinds if // there are no annotations of either kind. - TypeAnnotationPosition pos = new TypeAnnotationPosition(); - pos.type = TargetType.METHOD_FORMAL_PARAMETER; - pos.parameter_index = i; - pos.pos = param.vartype.pos; - separateAnnotationsKinds(param.vartype, param.sym.type, param.sym, pos); + final TypeAnnotationPosition pos = + TypeAnnotationPosition.methodParameter(i, param.vartype.pos); + separateAnnotationsKinds(param.vartype, + param.sym.type, + param.sym, pos); } ++i; } @@ -1123,11 +1174,9 @@ public class TypeAnnotations { if (!param.mods.annotations.isEmpty()) { // Nothing to do for separateAnnotationsKinds if // there are no annotations of either kind. - TypeAnnotationPosition pos = new TypeAnnotationPosition(); - pos.type = TargetType.METHOD_FORMAL_PARAMETER; - pos.parameter_index = i; - pos.pos = param.vartype.pos; - pos.onLambda = tree; + final TypeAnnotationPosition pos = + TypeAnnotationPosition.methodParameter(tree, i, + param.vartype.pos); separateAnnotationsKinds(param.vartype, param.sym.type, param.sym, pos); } ++i; @@ -1157,28 +1206,24 @@ public class TypeAnnotations { // Parameters are handled in visitMethodDef or visitLambda. } else if (tree.sym.getKind() == ElementKind.FIELD) { if (sigOnly) { - TypeAnnotationPosition pos = new TypeAnnotationPosition(); - pos.type = TargetType.FIELD; - pos.pos = tree.pos; + TypeAnnotationPosition pos = + TypeAnnotationPosition.field(tree.pos); separateAnnotationsKinds(tree.vartype, tree.sym.type, tree.sym, pos); } } else if (tree.sym.getKind() == ElementKind.LOCAL_VARIABLE) { - TypeAnnotationPosition pos = new TypeAnnotationPosition(); - pos.type = TargetType.LOCAL_VARIABLE; - pos.pos = tree.pos; - pos.onLambda = currentLambda; + final TypeAnnotationPosition pos = + TypeAnnotationPosition.localVariable(currentLambda, + tree.pos); separateAnnotationsKinds(tree.vartype, tree.sym.type, tree.sym, pos); } else if (tree.sym.getKind() == ElementKind.EXCEPTION_PARAMETER) { - TypeAnnotationPosition pos = new TypeAnnotationPosition(); - pos.type = TargetType.EXCEPTION_PARAMETER; - pos.pos = tree.pos; - pos.onLambda = currentLambda; + final TypeAnnotationPosition pos = + TypeAnnotationPosition.exceptionParameter(currentLambda, + tree.pos); separateAnnotationsKinds(tree.vartype, tree.sym.type, tree.sym, pos); } else if (tree.sym.getKind() == ElementKind.RESOURCE_VARIABLE) { - TypeAnnotationPosition pos = new TypeAnnotationPosition(); - pos.type = TargetType.RESOURCE_VARIABLE; - pos.pos = tree.pos; - pos.onLambda = currentLambda; + final TypeAnnotationPosition pos = + TypeAnnotationPosition.resourceVariable(currentLambda, + tree.pos); separateAnnotationsKinds(tree.vartype, tree.sym.type, tree.sym, pos); } else if (tree.sym.getKind() == ElementKind.ENUM_CONSTANT) { // No type annotations can occur here. @@ -1222,7 +1267,8 @@ public class TypeAnnotations { private void copyNewClassAnnotationsToOwner(JCNewClass tree) { Symbol sym = tree.def.sym; - TypeAnnotationPosition pos = new TypeAnnotationPosition(); + final TypeAnnotationPosition pos = + TypeAnnotationPosition.newObj(tree.pos); ListBuffer newattrs = new ListBuffer<>(); for (Attribute.TypeCompound old : sym.getRawTypeAttributes()) { @@ -1230,8 +1276,6 @@ public class TypeAnnotations { pos)); } - pos.type = TargetType.NEW; - pos.pos = tree.pos; sym.owner.appendUniqueTypeAttributes(newattrs.toList()); } @@ -1240,16 +1284,16 @@ public class TypeAnnotations { if (tree.def != null && !tree.def.mods.annotations.isEmpty()) { JCClassDecl classdecl = tree.def; - TypeAnnotationPosition pos = new TypeAnnotationPosition(); - pos.type = TargetType.CLASS_EXTENDS; - pos.pos = tree.pos; + TypeAnnotationPosition pos; + if (classdecl.extending == tree.clazz) { - pos.type_index = -1; + pos = TypeAnnotationPosition.classExtends(tree.pos); } else if (classdecl.implementing.contains(tree.clazz)) { - pos.type_index = classdecl.implementing.indexOf(tree.clazz); + final int index = classdecl.implementing.indexOf(tree.clazz); + pos = TypeAnnotationPosition.classExtends(index, tree.pos); } else { // In contrast to CLASS elsewhere, typarams cannot occur here. - Assert.error("Could not determine position of tree " + tree); + throw new AssertionError("Could not determine position of tree " + tree); } Type before = classdecl.sym.type; separateAnnotationsKinds(classdecl, tree.clazz.type, classdecl.sym, pos); @@ -1277,14 +1321,16 @@ public class TypeAnnotations { // handle annotations associated with dimensions for (int i = 0; i < dimAnnosCount; ++i) { - TypeAnnotationPosition p = new TypeAnnotationPosition(); - p.pos = tree.pos; - p.onLambda = currentLambda; - p.type = TargetType.NEW; + ListBuffer location = + new ListBuffer(); if (i != 0) { depth = depth.append(TypePathEntry.ARRAY); - p.location = p.location.appendList(depth.toList()); + location = location.appendList(depth.toList()); } + final TypeAnnotationPosition p = + TypeAnnotationPosition.newObj(location.toList(), + currentLambda, + tree.pos); setTypeAnnotationPos(tree.dimAnnotations.get(i), p); } @@ -1297,12 +1343,14 @@ public class TypeAnnotations { while (elemType != null) { if (elemType.hasTag(JCTree.Tag.ANNOTATED_TYPE)) { JCAnnotatedType at = (JCAnnotatedType)elemType; - TypeAnnotationPosition p = new TypeAnnotationPosition(); - p.type = TargetType.NEW; - p.pos = tree.pos; - p.onLambda = currentLambda; - locateNestedTypes(elemType.type, p); - p.location = p.location.prependList(depth.toList()); + final ListBuffer locationbuf = + locateNestedTypes(elemType.type, + new ListBuffer()); + final List location = + locationbuf.toList().prependList(depth.toList()); + final TypeAnnotationPosition p = + TypeAnnotationPosition.newObj(location, currentLambda, + tree.pos); setTypeAnnotationPos(at.annotations, p); elemType = at.underlyingType; } else if (elemType.hasTag(JCTree.Tag.TYPEARRAY)) { @@ -1324,9 +1372,9 @@ public class TypeAnnotations { System.err.println(" tree: " + tree + " kind: " + tree.getKind()); System.err.println(" frame: " + frame + " kind: " + frame.getKind()); */ - TypeAnnotationPosition p = new TypeAnnotationPosition(); - p.onLambda = currentLambda; - resolveFrame(tree, frame, frames.toList(), p); + final TypeAnnotationPosition p = + resolveFrame(tree, frame, frames.toList(), currentLambda, 0, + new ListBuffer()); setTypeAnnotationPos(annotations, p); } } diff --git a/langtools/src/share/classes/com/sun/tools/javac/comp/Annotate.java b/langtools/src/share/classes/com/sun/tools/javac/comp/Annotate.java index 981d94f4250..fe0b39a885b 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/comp/Annotate.java +++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Annotate.java @@ -299,7 +299,13 @@ public class Annotate { if (typeAnnotation) { if (a.attribute == null || !(a.attribute instanceof Attribute.TypeCompound)) { // Create a new TypeCompound - Attribute.TypeCompound tc = new Attribute.TypeCompound(a.type, buf.toList(), new TypeAnnotationPosition()); + + Attribute.TypeCompound tc = + new Attribute.TypeCompound(a.type, buf.toList(), + // TODO: Eventually, we will get rid of this use of + // unknown, because we'll get a position from + // MemberEnter (task 8027262). + TypeAnnotationPosition.unknown); a.attribute = tc; return tc; } else { diff --git a/langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java b/langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java index 62eca2c52aa..d8841c3be78 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java +++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java @@ -4078,11 +4078,9 @@ public class Attr extends JCTree.Visitor { @Override public void run() { List compounds = fromAnnotations(annotations); - if (annotations.size() == compounds.size()) { - // All annotations were successfully converted into compounds + Assert.check(annotations.size() == compounds.size()); tree.type = tree.type.unannotatedType().annotatedType(compounds); } - } }); } @@ -4093,18 +4091,8 @@ public class Attr extends JCTree.Visitor { ListBuffer buf = new ListBuffer<>(); for (JCAnnotation anno : annotations) { - if (anno.attribute != null) { - // TODO: this null-check is only needed for an obscure - // ordering issue, where annotate.flush is called when - // the attribute is not set yet. For an example failure - // try the referenceinfos/NestedTypes.java test. - // Any better solutions? - buf.append((Attribute.TypeCompound) anno.attribute); - } - // Eventually we will want to throw an exception here, but - // we can't do that just yet, because it gets triggered - // when attempting to attach an annotation that isn't - // defined. + Assert.checkNonNull(anno.attribute); + buf.append((Attribute.TypeCompound) anno.attribute); } return buf.toList(); } @@ -4661,10 +4649,19 @@ public class Attr extends JCTree.Visitor { private void initTypeIfNeeded(JCTree that) { if (that.type == null) { - that.type = syms.unknownType; + if (that.hasTag(METHODDEF)) { + that.type = dummyMethodType(); + } else { + that.type = syms.unknownType; + } } } + private Type dummyMethodType() { + return new MethodType(List.nil(), syms.unknownType, + List.nil(), syms.methodClass); + } + @Override public void scan(JCTree tree) { if (tree == null) return; @@ -4720,7 +4717,8 @@ public class Attr extends JCTree.Visitor { @Override public void visitNewClass(JCNewClass that) { if (that.constructor == null) { - that.constructor = new MethodSymbol(0, names.init, syms.unknownType, syms.noSymbol); + that.constructor = new MethodSymbol(0, names.init, + dummyMethodType(), syms.noSymbol); } if (that.constructorType == null) { that.constructorType = syms.unknownType; @@ -4730,22 +4728,28 @@ public class Attr extends JCTree.Visitor { @Override public void visitAssignop(JCAssignOp that) { - if (that.operator == null) - that.operator = new OperatorSymbol(names.empty, syms.unknownType, -1, syms.noSymbol); + if (that.operator == null) { + that.operator = new OperatorSymbol(names.empty, dummyMethodType(), + -1, syms.noSymbol); + } super.visitAssignop(that); } @Override public void visitBinary(JCBinary that) { - if (that.operator == null) - that.operator = new OperatorSymbol(names.empty, syms.unknownType, -1, syms.noSymbol); + if (that.operator == null) { + that.operator = new OperatorSymbol(names.empty, dummyMethodType(), + -1, syms.noSymbol); + } super.visitBinary(that); } @Override public void visitUnary(JCUnary that) { - if (that.operator == null) - that.operator = new OperatorSymbol(names.empty, syms.unknownType, -1, syms.noSymbol); + if (that.operator == null) { + that.operator = new OperatorSymbol(names.empty, dummyMethodType(), + -1, syms.noSymbol); + } super.visitUnary(that); } @@ -4761,7 +4765,8 @@ public class Attr extends JCTree.Visitor { public void visitReference(JCMemberReference that) { super.visitReference(that); if (that.sym == null) { - that.sym = new MethodSymbol(0, names.empty, syms.unknownType, syms.noSymbol); + that.sym = new MethodSymbol(0, names.empty, dummyMethodType(), + syms.noSymbol); } if (that.targets == null) { that.targets = List.nil(); diff --git a/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java b/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java index 13e09823d3d..e44c6ddc586 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java +++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -2778,7 +2778,7 @@ public class Check { validateDocumented(t.tsym, s, pos); validateInherited(t.tsym, s, pos); validateTarget(t.tsym, s, pos); - validateDefault(t.tsym, s, pos); + validateDefault(t.tsym, pos); } private void validateValue(TypeSymbol container, TypeSymbol contained, DiagnosticPosition pos) { @@ -2897,7 +2897,9 @@ public class Check { /** Checks that s is a subset of t, with respect to ElementType - * semantics, specifically {ANNOTATION_TYPE} is a subset of {TYPE} + * semantics, specifically {ANNOTATION_TYPE} is a subset of {TYPE}, + * and {TYPE_USE} covers the set {ANNOTATION_TYPE, TYPE, TYPE_USE, + * TYPE_PARAMETER}. */ private boolean isTargetSubsetOf(Set s, Set t) { // Check that all elements in s are present in t @@ -2910,6 +2912,12 @@ public class Check { } else if (n1 == names.TYPE && n2 == names.ANNOTATION_TYPE) { currentElementOk = true; break; + } else if (n1 == names.TYPE_USE && + (n2 == names.TYPE || + n2 == names.ANNOTATION_TYPE || + n2 == names.TYPE_PARAMETER)) { + currentElementOk = true; + break; } } if (!currentElementOk) @@ -2918,7 +2926,7 @@ public class Check { return true; } - private void validateDefault(Symbol container, Symbol contained, DiagnosticPosition pos) { + private void validateDefault(Symbol container, DiagnosticPosition pos) { // validate that all other elements of containing type has defaults Scope scope = container.members(); for(Symbol elm : scope.getElements()) { diff --git a/langtools/src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java b/langtools/src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java index c30744645ff..5714524afeb 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java +++ b/langtools/src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2014, 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 @@ -96,6 +96,9 @@ public class LambdaToMethod extends TreeTranslator { /** dump statistics about lambda code generation */ private boolean dumpLambdaToMethodStats; + /** force serializable representation, for stress testing **/ + private final boolean forceSerializable; + /** Flag for alternate metafactories indicating the lambda object is intended to be serializable */ public static final int FLAG_SERIALIZABLE = 1 << 0; @@ -130,6 +133,7 @@ public class LambdaToMethod extends TreeTranslator { Options options = Options.instance(context); dumpLambdaToMethodStats = options.isSet("dumpLambdaToMethodStats"); attr = Attr.instance(context); + forceSerializable = options.isSet("forceSerializable"); } // @@ -1692,6 +1696,9 @@ public class LambdaToMethod extends TreeTranslator { /** does this functional expression require serialization support? */ boolean isSerializable() { + if (forceSerializable) { + return true; + } for (Type target : tree.targets) { if (types.asSuper(target, syms.serializableType.tsym) != null) { return true; diff --git a/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java b/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java index 76a81f72e70..ba6fc9e4cf1 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java +++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java @@ -1469,26 +1469,46 @@ public class ClassReader { if (!TargetType.isValidTargetTypeValue(tag)) throw this.badClassFile("bad.type.annotation.value", String.format("0x%02X", tag)); - TypeAnnotationPosition position = new TypeAnnotationPosition(); TargetType type = TargetType.fromTargetTypeValue(tag); - position.type = type; - switch (type) { // instanceof - case INSTANCEOF: + case INSTANCEOF: { + final int offset = nextChar(); + final TypeAnnotationPosition position = + TypeAnnotationPosition.instanceOf(readTypePath()); + position.offset = offset; + return position; + } // new expression - case NEW: + case NEW: { + final int offset = nextChar(); + final TypeAnnotationPosition position = + TypeAnnotationPosition.newObj(readTypePath()); + position.offset = offset; + return position; + } // constructor/method reference receiver - case CONSTRUCTOR_REFERENCE: - case METHOD_REFERENCE: - position.offset = nextChar(); - break; + case CONSTRUCTOR_REFERENCE: { + final int offset = nextChar(); + final TypeAnnotationPosition position = + TypeAnnotationPosition.constructorRef(readTypePath()); + position.offset = offset; + return position; + } + case METHOD_REFERENCE: { + final int offset = nextChar(); + final TypeAnnotationPosition position = + TypeAnnotationPosition.methodRef(readTypePath()); + position.offset = offset; + return position; + } // local variable - case LOCAL_VARIABLE: - // resource variable - case RESOURCE_VARIABLE: - int table_length = nextChar(); + case LOCAL_VARIABLE: { + final int table_length = nextChar(); + final TypeAnnotationPosition position = + TypeAnnotationPosition.localVariable(readTypePath()); + position.lvarOffset = new int[table_length]; position.lvarLength = new int[table_length]; position.lvarIndex = new int[table_length]; @@ -1498,67 +1518,142 @@ public class ClassReader { position.lvarLength[i] = nextChar(); position.lvarIndex[i] = nextChar(); } - break; + return position; + } + // resource variable + case RESOURCE_VARIABLE: { + final int table_length = nextChar(); + final TypeAnnotationPosition position = + TypeAnnotationPosition.resourceVariable(readTypePath()); + + position.lvarOffset = new int[table_length]; + position.lvarLength = new int[table_length]; + position.lvarIndex = new int[table_length]; + + for (int i = 0; i < table_length; ++i) { + position.lvarOffset[i] = nextChar(); + position.lvarLength[i] = nextChar(); + position.lvarIndex[i] = nextChar(); + } + return position; + } // exception parameter - case EXCEPTION_PARAMETER: - position.exception_index = nextChar(); - break; + case EXCEPTION_PARAMETER: { + final int exception_index = nextChar(); + final TypeAnnotationPosition position = + TypeAnnotationPosition.exceptionParameter(readTypePath()); + position.exception_index = exception_index; + return position; + } // method receiver case METHOD_RECEIVER: - // Do nothing - break; + return TypeAnnotationPosition.methodReceiver(readTypePath()); // type parameter - case CLASS_TYPE_PARAMETER: - case METHOD_TYPE_PARAMETER: - position.parameter_index = nextByte(); - break; + case CLASS_TYPE_PARAMETER: { + final int parameter_index = nextByte(); + return TypeAnnotationPosition + .typeParameter(readTypePath(), parameter_index); + } + case METHOD_TYPE_PARAMETER: { + final int parameter_index = nextByte(); + return TypeAnnotationPosition + .methodTypeParameter(readTypePath(), parameter_index); + } // type parameter bound - case CLASS_TYPE_PARAMETER_BOUND: - case METHOD_TYPE_PARAMETER_BOUND: - position.parameter_index = nextByte(); - position.bound_index = nextByte(); - break; + case CLASS_TYPE_PARAMETER_BOUND: { + final int parameter_index = nextByte(); + final int bound_index = nextByte(); + return TypeAnnotationPosition + .typeParameterBound(readTypePath(), parameter_index, + bound_index); + } + case METHOD_TYPE_PARAMETER_BOUND: { + final int parameter_index = nextByte(); + final int bound_index = nextByte(); + return TypeAnnotationPosition + .methodTypeParameterBound(readTypePath(), parameter_index, + bound_index); + } // class extends or implements clause - case CLASS_EXTENDS: - position.type_index = nextChar(); - break; + case CLASS_EXTENDS: { + final int type_index = nextChar(); + return TypeAnnotationPosition.classExtends(readTypePath(), + type_index); + } // throws - case THROWS: - position.type_index = nextChar(); - break; + case THROWS: { + final int type_index = nextChar(); + return TypeAnnotationPosition.methodThrows(readTypePath(), + type_index); + } // method parameter - case METHOD_FORMAL_PARAMETER: - position.parameter_index = nextByte(); - break; + case METHOD_FORMAL_PARAMETER: { + final int parameter_index = nextByte(); + return TypeAnnotationPosition.methodParameter(readTypePath(), + parameter_index); + } // type cast - case CAST: + case CAST: { + final int offset = nextChar(); + final int type_index = nextByte(); + final TypeAnnotationPosition position = + TypeAnnotationPosition.typeCast(readTypePath(), type_index); + position.offset = offset; + return position; + } // method/constructor/reference type argument - case CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT: - case METHOD_INVOCATION_TYPE_ARGUMENT: - case CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT: - case METHOD_REFERENCE_TYPE_ARGUMENT: - position.offset = nextChar(); - position.type_index = nextByte(); - break; + case CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT: { + final int offset = nextChar(); + final int type_index = nextByte(); + final TypeAnnotationPosition position = TypeAnnotationPosition + .constructorInvocationTypeArg(readTypePath(), type_index); + position.offset = offset; + return position; + } + case METHOD_INVOCATION_TYPE_ARGUMENT: { + final int offset = nextChar(); + final int type_index = nextByte(); + final TypeAnnotationPosition position = TypeAnnotationPosition + .methodInvocationTypeArg(readTypePath(), type_index); + position.offset = offset; + return position; + } + case CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT: { + final int offset = nextChar(); + final int type_index = nextByte(); + final TypeAnnotationPosition position = TypeAnnotationPosition + .constructorRefTypeArg(readTypePath(), type_index); + position.offset = offset; + return position; + } + case METHOD_REFERENCE_TYPE_ARGUMENT: { + final int offset = nextChar(); + final int type_index = nextByte(); + final TypeAnnotationPosition position = TypeAnnotationPosition + .methodRefTypeArg(readTypePath(), type_index); + position.offset = offset; + return position; + } // We don't need to worry about these case METHOD_RETURN: + return TypeAnnotationPosition.methodReturn(readTypePath()); case FIELD: - break; + return TypeAnnotationPosition.field(readTypePath()); case UNKNOWN: throw new AssertionError("jvm.ClassReader: UNKNOWN target type should never occur!"); default: - throw new AssertionError("jvm.ClassReader: Unknown target type for position: " + position); + throw new AssertionError("jvm.ClassReader: Unknown target type for position: " + type); } + } - { // See whether there is location info and read it - int len = nextByte(); - ListBuffer loc = new ListBuffer<>(); - for (int i = 0; i < len * TypeAnnotationPosition.TypePathEntry.bytesPerEntry; ++i) - loc = loc.append(nextByte()); - position.location = TypeAnnotationPosition.getTypePathFromBinary(loc.toList()); - } + List readTypePath() { + int len = nextByte(); + ListBuffer loc = new ListBuffer<>(); + for (int i = 0; i < len * TypeAnnotationPosition.TypePathEntry.bytesPerEntry; ++i) + loc = loc.append(nextByte()); + + return TypeAnnotationPosition.getTypePathFromBinary(loc.toList()); - return position; } Attribute readAttributeValue() { diff --git a/langtools/src/share/classes/com/sun/tools/javac/jvm/Gen.java b/langtools/src/share/classes/com/sun/tools/javac/jvm/Gen.java index dbd23ade6cb..0f2cbcf1ed7 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/jvm/Gen.java +++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/Gen.java @@ -103,8 +103,6 @@ public class Gen extends JCTree.Visitor { */ private LVTRanges lvtRanges; - private final boolean typeAnnoAsserts; - protected Gen(Context context) { context.put(genKey, this); @@ -141,7 +139,6 @@ public class Gen extends JCTree.Visitor { debugCode = options.isSet("debugcode"); allowInvokedynamic = target.hasInvokedynamic() || options.isSet("invokedynamic"); pool = new Pool(types); - typeAnnoAsserts = options.isSet("TypeAnnotationAsserts"); generateIproxies = target.requiresIproxy() || @@ -564,13 +561,10 @@ public class Gen extends JCTree.Visitor { ListBuffer fieldTAs = new ListBuffer<>(); ListBuffer nonfieldTAs = new ListBuffer<>(); for (TypeCompound ta : tas) { + Assert.check(ta.getPosition().type != TargetType.UNKNOWN); if (ta.getPosition().type == TargetType.FIELD) { fieldTAs.add(ta); } else { - if (typeAnnoAsserts) { - Assert.error("Type annotation does not have a valid positior"); - } - nonfieldTAs.add(ta); } } diff --git a/langtools/src/share/classes/com/sun/tools/javac/parser/DocCommentParser.java b/langtools/src/share/classes/com/sun/tools/javac/parser/DocCommentParser.java index 3a211dc8cec..2b3f11beefa 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/parser/DocCommentParser.java +++ b/langtools/src/share/classes/com/sun/tools/javac/parser/DocCommentParser.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014, 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 @@ -1173,8 +1173,10 @@ public class DocCommentParser { DCText string = quotedString(); if (string != null) { skipWhitespace(); - if (ch == '@') + if (ch == '@' + || ch == EOI && bp == buf.length - 1) { return m.at(pos).See(List.of(string)); + } } break; diff --git a/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java b/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java index 55f46195024..49f68b13ae6 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java +++ b/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -3648,12 +3648,20 @@ public class JavacParser implements Parser { params.append(lastParam); } this.allowThisIdent = false; - while ((lastParam.mods.flags & Flags.VARARGS) == 0 && token.kind == COMMA) { + while (token.kind == COMMA) { + if ((lastParam.mods.flags & Flags.VARARGS) != 0) { + error(lastParam, "varargs.must.be.last"); + } nextToken(); params.append(lastParam = formalParameter(lambdaParameters)); } } - accept(RPAREN); + if (token.kind == RPAREN) { + nextToken(); + } else { + setErrorEndPos(token.pos); + reportSyntaxError(S.prevToken().endPos, "expected3", COMMA, RPAREN, LBRACKET); + } return params.toList(); } diff --git a/langtools/src/share/classes/com/sun/tools/javac/resources/compiler.properties b/langtools/src/share/classes/com/sun/tools/javac/resources/compiler.properties index 709a11ae096..abbdf4847c6 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/resources/compiler.properties +++ b/langtools/src/share/classes/com/sun/tools/javac/resources/compiler.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1999, 2014, 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 @@ -597,6 +597,9 @@ compiler.err.varargs.and.old.array.syntax=\ compiler.err.varargs.and.receiver =\ varargs notation not allowed on receiver parameter +compiler.err.varargs.must.be.last =\ + varargs parameter must be the last parameter + compiler.err.array.and.receiver =\ legacy array notation not allowed on receiver parameter diff --git a/langtools/src/share/classes/com/sun/tools/javac/tree/JCTree.java b/langtools/src/share/classes/com/sun/tools/javac/tree/JCTree.java index ccaa833e461..10eae9fcf87 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/tree/JCTree.java +++ b/langtools/src/share/classes/com/sun/tools/javac/tree/JCTree.java @@ -2299,6 +2299,9 @@ public abstract class JCTree implements Tree, Cloneable, DiagnosticPosition { // Attribute.Compound if tag is ANNOTATION // Attribute.TypeCompound if tag is TYPE_ANNOTATION + // + // NOTE: This field is slated for removal in the future. Do + // not use it for anything new. public Attribute.Compound attribute; protected JCAnnotation(Tag tag, JCTree annotationType, List args) { diff --git a/langtools/src/share/classes/com/sun/tools/javac/util/Bits.java b/langtools/src/share/classes/com/sun/tools/javac/util/Bits.java index f8db31a4665..eca872b987d 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/util/Bits.java +++ b/langtools/src/share/classes/com/sun/tools/javac/util/Bits.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -345,25 +345,4 @@ public class Bits { } } - /** Test Bits.nextBit(int). */ - public static void main(String[] args) { - java.util.Random r = new java.util.Random(); - Bits bits = new Bits(); - for (int i=0; i<125; i++) { - int k; - do { - k = r.nextInt(250); - } while (bits.isMember(k)); - System.out.println("adding " + k); - bits.incl(k); - } - int count = 0; - for (int i = bits.nextBit(0); i >= 0; i = bits.nextBit(i+1)) { - System.out.println("found " + i); - count ++; - } - if (count != 125) { - throw new Error(); - } - } } diff --git a/langtools/src/share/classes/com/sun/tools/javap/AttributeWriter.java b/langtools/src/share/classes/com/sun/tools/javap/AttributeWriter.java index dd721c2c077..49bdc467bac 100644 --- a/langtools/src/share/classes/com/sun/tools/javap/AttributeWriter.java +++ b/langtools/src/share/classes/com/sun/tools/javap/AttributeWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, 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 @@ -227,10 +227,7 @@ public class AttributeWriter extends BasicWriter } public Void visitConstantValue(ConstantValue_attribute attr, Void ignore) { - if (options.compat) // BUG 6622216 javap names some attributes incorrectly - print("Constant value: "); - else - print("ConstantValue: "); + print("ConstantValue: "); constantWriter.write(attr.constantvalue_index); println(); return null; @@ -291,20 +288,10 @@ public class AttributeWriter extends BasicWriter public Void visitInnerClasses(InnerClasses_attribute attr, Void ignore) { boolean first = true; - if (options.compat) { - writeInnerClassHeader(); - first = false; - } for (int i = 0 ; i < attr.classes.length; i++) { InnerClasses_attribute.Info info = attr.classes[i]; //access AccessFlags access_flags = info.inner_class_access_flags; - if (options.compat) { - // BUG 6622215: javap ignores certain relevant access flags - access_flags = access_flags.ignore(ACC_STATIC | ACC_PROTECTED | ACC_PRIVATE | ACC_INTERFACE | ACC_SYNTHETIC | ACC_ENUM); - // BUG 6622232: javap gets whitespace confused - print(" "); - } if (options.checkAccess(access_flags)) { if (first) { writeInnerClassHeader(); @@ -346,11 +333,7 @@ public class AttributeWriter extends BasicWriter } private void writeInnerClassHeader() { - if (options.compat) // BUG 6622216: javap names some attributes incorrectly - print("InnerClass"); - else - print("InnerClasses"); - println(":"); + println("InnerClasses:"); indent(+1); } @@ -711,10 +694,7 @@ public class AttributeWriter extends BasicWriter } String toHex(byte b, int w) { - if (options.compat) // BUG 6622260: javap prints negative bytes incorrectly in hex - return toHex((int) b, w); - else - return toHex(b & 0xff, w); + return toHex(b & 0xff, w); } static String toHex(int i) { diff --git a/langtools/src/share/classes/com/sun/tools/javap/ClassWriter.java b/langtools/src/share/classes/com/sun/tools/javap/ClassWriter.java index 02fec473268..83b8ba8e9e1 100644 --- a/langtools/src/share/classes/com/sun/tools/javap/ClassWriter.java +++ b/langtools/src/share/classes/com/sun/tools/javap/ClassWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -120,7 +120,7 @@ public class ClassWriter extends BasicWriter { public void write(ClassFile cf) { setClassFile(cf); - if ((options.sysInfo || options.verbose) && !options.compat) { + if (options.sysInfo || options.verbose) { if (uri != null) { if (uri.getScheme().equals("file")) println("Classfile " + uri.getPath()); @@ -152,7 +152,7 @@ public class ClassWriter extends BasicWriter { println("Compiled from \"" + getSourceFile((SourceFile_attribute) sfa) + "\""); } - if ((options.sysInfo || options.verbose) && !options.compat) { + if (options.sysInfo || options.verbose) { indent(-1); } @@ -205,8 +205,7 @@ public class ClassWriter extends BasicWriter { attrWriter.write(cf, cf.attributes, constant_pool); println("minor version: " + cf.minor_version); println("major version: " + cf.major_version); - if (!options.compat) - writeList("flags: ", flags.getClassFlags(), "\n"); + writeList("flags: ", flags.getClassFlags(), "\n"); indent(-1); constantWriter.writeConstantPool(); } else { @@ -372,7 +371,7 @@ public class ClassWriter extends BasicWriter { } print(" "); print(getFieldName(f)); - if (options.showConstants && !options.compat) { // BUG 4111861 print static final field contents + if (options.showConstants) { Attribute a = f.attributes.get(Attribute.ConstantValue); if (a instanceof ConstantValue_attribute) { print(" = "); @@ -385,21 +384,23 @@ public class ClassWriter extends BasicWriter { indent(+1); + boolean showBlank = false; + if (options.showDescriptors) println("descriptor: " + getValue(f.descriptor)); - if (options.verbose && !options.compat) + if (options.verbose) writeList("flags: ", flags.getFieldFlags(), "\n"); if (options.showAllAttrs) { for (Attribute attr: f.attributes) attrWriter.write(f, attr, constant_pool); - println(); + showBlank = true; } indent(-1); - if (options.showDisassembled || options.showLineAndLocalVariableTables) + if (showBlank || options.showDisassembled || options.showLineAndLocalVariableTables) println(); } @@ -485,7 +486,7 @@ public class ClassWriter extends BasicWriter { println("descriptor: " + getValue(m.descriptor)); } - if (options.verbose && !options.compat) { + if (options.verbose) { writeList("flags: ", flags.getMethodFlags(), "\n"); } @@ -498,25 +499,21 @@ public class ClassWriter extends BasicWriter { report("Unexpected or invalid value for Code attribute"); } - if (options.showDisassembled && !options.showAllAttrs) { - if (code != null) { - println("Code:"); - codeWriter.writeInstrs(code); - codeWriter.writeExceptionTable(code); - } - } - - if (options.showLineAndLocalVariableTables) { - if (code != null) { - attrWriter.write(code, code.attributes.get(Attribute.LineNumberTable), constant_pool); - attrWriter.write(code, code.attributes.get(Attribute.LocalVariableTable), constant_pool); - } - } - if (options.showAllAttrs) { Attribute[] attrs = m.attributes.attrs; for (Attribute attr: attrs) attrWriter.write(m, attr, constant_pool); + } else if (code != null) { + if (options.showDisassembled) { + println("Code:"); + codeWriter.writeInstrs(code); + codeWriter.writeExceptionTable(code); + } + + if (options.showLineAndLocalVariableTables) { + attrWriter.write(code, code.attributes.get(Attribute.LineNumberTable), constant_pool); + attrWriter.write(code, code.attributes.get(Attribute.LocalVariableTable), constant_pool); + } } indent(-1); @@ -555,13 +552,11 @@ public class ClassWriter extends BasicWriter { } Signature_attribute getSignature(Attributes attributes) { - if (options.compat) // javap does not recognize recent attributes - return null; return (Signature_attribute) attributes.get(Attribute.Signature); } String adjustVarargs(AccessFlags flags, String params) { - if (flags.is(ACC_VARARGS) && !options.compat) { + if (flags.is(ACC_VARARGS)) { int i = params.lastIndexOf("[]"); if (i > 0) return params.substring(0, i) + "..." + params.substring(i+2); diff --git a/langtools/src/share/classes/com/sun/tools/javap/JavapTask.java b/langtools/src/share/classes/com/sun/tools/javap/JavapTask.java index 23576737c21..6033433d40e 100644 --- a/langtools/src/share/classes/com/sun/tools/javap/JavapTask.java +++ b/langtools/src/share/classes/com/sun/tools/javap/JavapTask.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, 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 @@ -195,48 +195,12 @@ public class JavapTask implements DisassemblerTool.DisassemblerTask, Messages { } }, -// new Option(false, "-all") { -// void process(JavapTask task, String opt, String arg) { -// task.options.showAllAttrs = true; -// } -// }, - - new Option(false, "-h") { - void process(JavapTask task, String opt, String arg) throws BadArgs { - throw task.new BadArgs("err.h.not.supported"); - } - }, - - new Option(false, "-verify", "-verify-verbose") { - void process(JavapTask task, String opt, String arg) throws BadArgs { - throw task.new BadArgs("err.verify.not.supported"); - } - }, - new Option(false, "-sysinfo") { void process(JavapTask task, String opt, String arg) { task.options.sysInfo = true; } }, - new Option(false, "-Xold") { - void process(JavapTask task, String opt, String arg) throws BadArgs { - task.log.println(task.getMessage("warn.Xold.not.supported")); - } - }, - - new Option(false, "-Xnew") { - void process(JavapTask task, String opt, String arg) throws BadArgs { - // ignore: this _is_ the new version - } - }, - - new Option(false, "-XDcompat") { - void process(JavapTask task, String opt, String arg) { - task.options.compat = true; - } - }, - new Option(false, "-XDdetails") { void process(JavapTask task, String opt, String arg) { task.options.details = EnumSet.allOf(InstructionDetailWriter.Kind.class); @@ -466,7 +430,7 @@ public class JavapTask implements DisassemblerTool.DisassemblerTask, Messages { } catch (BadArgs e) { reportError(e.key, e.args); if (e.showUsage) { - log.println(getMessage("main.usage.summary", progname)); + printLines(getMessage("main.usage.summary", progname)); } return EXIT_CMDERR; } catch (InternalError e) { @@ -520,7 +484,7 @@ public class JavapTask implements DisassemblerTool.DisassemblerTask, Messages { throw new BadArgs("err.unknown.option", arg).showUsage(true); } - if (!options.compat && options.accessOptions.size() > 1) { + if (options.accessOptions.size() > 1) { StringBuilder sb = new StringBuilder(); for (String opt: options.accessOptions) { if (sb.length() > 0) @@ -581,8 +545,6 @@ public class JavapTask implements DisassemblerTool.DisassemblerTask, Messages { SourceWriter sourceWriter = SourceWriter.instance(context); sourceWriter.setFileManager(fileManager); - attributeFactory.setCompat(options.compat); - int result = EXIT_OK; for (String className: classes) { @@ -877,27 +839,33 @@ public class JavapTask implements DisassemblerTool.DisassemblerTask, Messages { } private void showHelp() { - log.println(getMessage("main.usage", progname)); + printLines(getMessage("main.usage", progname)); for (Option o: recognizedOptions) { String name = o.aliases[0].substring(1); // there must always be at least one name if (name.startsWith("X") || name.equals("fullversion") || name.equals("h") || name.equals("verify")) continue; - log.println(getMessage("main.opt." + name)); + printLines(getMessage("main.opt." + name)); } String[] fmOptions = { "-classpath", "-cp", "-bootclasspath" }; for (String o: fmOptions) { if (fileManager.isSupportedOption(o) == -1) continue; String name = o.substring(1); - log.println(getMessage("main.opt." + name)); + printLines(getMessage("main.opt." + name)); } } private void showVersion(boolean full) { - log.println(version(full ? "full" : "release")); + printLines(version(full ? "full" : "release")); } + private void printLines(String msg) { + log.println(msg.replace("\n", nl)); + } + + private static final String nl = System.getProperty("line.separator"); + private static final String versionRBName = "com.sun.tools.javap.resources.version"; private static ResourceBundle versionRB; diff --git a/langtools/src/share/classes/com/sun/tools/javap/Options.java b/langtools/src/share/classes/com/sun/tools/javap/Options.java index 7d0a9a7fe4b..fbfc30b2190 100644 --- a/langtools/src/share/classes/com/sun/tools/javap/Options.java +++ b/langtools/src/share/classes/com/sun/tools/javap/Options.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, 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 @@ -88,6 +88,4 @@ public class Options { public boolean showInnerClasses; public int indentWidth = 2; // #spaces per indentWidth level public int tabColumn = 40; // column number for comments - - public boolean compat; // bug-for-bug compatibility mode with old javap } diff --git a/langtools/src/share/classes/com/sun/tools/javap/resources/javap.properties b/langtools/src/share/classes/com/sun/tools/javap/resources/javap.properties index c77024f75f5..a704e7f5e51 100644 --- a/langtools/src/share/classes/com/sun/tools/javap/resources/javap.properties +++ b/langtools/src/share/classes/com/sun/tools/javap/resources/javap.properties @@ -6,7 +6,6 @@ err.class.not.found=class not found: {0} err.crash=A serious internal error has occurred: {0}\nPlease file a bug report, and include the following information:\n{1} err.end.of.file=unexpected end of file while reading {0} err.file.not.found=file not found: {0} -err.h.not.supported=-h is no longer available - use the 'javah' program err.incompatible.options=bad combination of options: {0} err.internal.error=internal error: {0} {1} {2} err.invalid.arg.for.option=invalid argument for option: {0} @@ -15,11 +14,9 @@ err.missing.arg=no value given for {0} err.no.classes.specified=no classes specified err.not.standard.file.manager=can only specify class files when using a standard file manager err.unknown.option=unknown option: {0} -err.verify.not.supported=-verify not supported err.no.SourceFile.attribute=no SourceFile attribute err.source.file.not.found=source file not found err.bad.innerclasses.attribute=bad InnerClasses attribute for {0} -warn.Xold.not.supported=-Xold is no longer available main.usage.summary=\ Usage: {0} \n\ diff --git a/langtools/test/tools/javac/T8030816/CrashLambdaExpressionWithNonAccessibleIdTest.java b/langtools/test/tools/javac/T8030816/CrashLambdaExpressionWithNonAccessibleIdTest.java new file mode 100644 index 00000000000..f873f2dbe8f --- /dev/null +++ b/langtools/test/tools/javac/T8030816/CrashLambdaExpressionWithNonAccessibleIdTest.java @@ -0,0 +1,22 @@ +/* + * @test /nodynamiccopyright/ + * @bug 8030816 + * @summary javac can't compile program with lambda expression + * @compile/fail/ref=CrashLambdaExpressionWithNonAccessibleIdTest.out -XDrawDiagnostics CrashLambdaExpressionWithNonAccessibleIdTest.java + */ + +/* This test must make sure that javac won't crash when compiling lambda + * containing an anonymous innerclass based on an unresolvable type. + */ +public class CrashLambdaExpressionWithNonAccessibleIdTest { + void m() { + m1(()-> { + new A(){ + public void m11() {} + }; + }); + + } + + void m1(Runnable r) {} +} diff --git a/langtools/test/tools/javac/T8030816/CrashLambdaExpressionWithNonAccessibleIdTest.out b/langtools/test/tools/javac/T8030816/CrashLambdaExpressionWithNonAccessibleIdTest.out new file mode 100644 index 00000000000..d253b9c660b --- /dev/null +++ b/langtools/test/tools/javac/T8030816/CrashLambdaExpressionWithNonAccessibleIdTest.out @@ -0,0 +1,3 @@ +CrashLambdaExpressionWithNonAccessibleIdTest.java:15:35: compiler.err.missing.ret.stmt +CrashLambdaExpressionWithNonAccessibleIdTest.java:14:17: compiler.err.cant.resolve.location: kindname.class, A, , , (compiler.misc.location: kindname.class, CrashLambdaExpressionWithNonAccessibleIdTest, null) +2 errors diff --git a/langtools/test/tools/javac/annotations/repeatingAnnotations/8029017/TypeUseTarget.java b/langtools/test/tools/javac/annotations/repeatingAnnotations/8029017/TypeUseTarget.java new file mode 100644 index 00000000000..5af979dd5e6 --- /dev/null +++ b/langtools/test/tools/javac/annotations/repeatingAnnotations/8029017/TypeUseTarget.java @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2014, 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 8029017 + * @summary sanity testing of ElementType validation for repeating annotations + * @compile TypeUseTarget.java + */ + +import java.lang.annotation.*; + +public class TypeUseTarget {} + + +// Case 1: +@Target({ + ElementType.TYPE_USE, +}) +@Repeatable(Case1Container.class) +@interface Case1 {} + +@Target({ + ElementType.ANNOTATION_TYPE, + ElementType.TYPE, + ElementType.TYPE_USE, + ElementType.TYPE_PARAMETER, +}) +@interface Case1Container { + Case1[] value(); +} + + +// Case 2: +@Target({ + ElementType.TYPE_USE, +}) +@Repeatable(Case2Container.class) +@interface Case2 {} + +@Target({ + ElementType.ANNOTATION_TYPE, + ElementType.TYPE, + ElementType.TYPE_USE, +}) +@interface Case2Container { + Case2[] value(); +} + + +// Case 3: +@Target({ + ElementType.TYPE_USE, +}) +@Repeatable(Case3Container.class) +@interface Case3 {} + +@Target({ + ElementType.ANNOTATION_TYPE, + ElementType.TYPE, +}) +@interface Case3Container { + Case3[] value(); +} + + +// Case 4: +@Target({ + ElementType.TYPE_USE, +}) +@Repeatable(Case4Container.class) +@interface Case4 {} + +@Target({ + ElementType.ANNOTATION_TYPE, +}) +@interface Case4Container { + Case4[] value(); +} + + +// Case 5: +@Target({ + ElementType.TYPE_USE, +}) +@Repeatable(Case5Container.class) +@interface Case5 {} + +@Target({ + ElementType.TYPE, +}) +@interface Case5Container { + Case5[] value(); +} + + +// Case 6: +@Target({ + ElementType.TYPE_USE, +}) +@Repeatable(Case6Container.class) +@interface Case6 {} + +@Target({ + ElementType.TYPE_PARAMETER, +}) +@interface Case6Container { + Case6[] value(); +} diff --git a/langtools/test/tools/javac/annotations/repeatingAnnotations/8029017/TypeUseTargetNeg.java b/langtools/test/tools/javac/annotations/repeatingAnnotations/8029017/TypeUseTargetNeg.java new file mode 100644 index 00000000000..02b57d0e8cd --- /dev/null +++ b/langtools/test/tools/javac/annotations/repeatingAnnotations/8029017/TypeUseTargetNeg.java @@ -0,0 +1,100 @@ +/** + * @test /nodynamiccopyright/ + * @bug 8029017 + * @summary sanity testing of ElementType validation for repeating annotations + * @compile/fail/ref=TypeUseTargetNeg.out -XDrawDiagnostics TypeUseTargetNeg.java + */ + +import java.lang.annotation.*; + +public class TypeUseTargetNeg {} + +// Case 1: +@Target({ + ElementType.TYPE_USE, +}) +@Repeatable(FooContainer.class) +@interface Foo {} + +@Target({ + ElementType.ANNOTATION_TYPE, + ElementType.TYPE, + ElementType.TYPE_USE, + ElementType.TYPE_PARAMETER, + ElementType.FIELD, + +}) +@interface FooContainer { + Foo[] value(); +} + + +// Case 2: +@Target({ + ElementType.TYPE_USE, +}) +@Repeatable(BarContainer.class) +@interface Bar {} + +@Target({ + ElementType.ANNOTATION_TYPE, + ElementType.TYPE, + ElementType.TYPE_USE, + ElementType.METHOD, +}) +@interface BarContainer { + Bar[] value(); +} + + +// Case 3: +@Target({ + ElementType.TYPE_USE, +}) +@Repeatable(BazContainer.class) +@interface Baz {} + +@Target({ + ElementType.ANNOTATION_TYPE, + ElementType.TYPE, + ElementType.PARAMETER, +}) +@interface BazContainer { + Baz[] value(); +} + + +// Case 4: +@Target({ + ElementType.TYPE_USE, +}) +@Repeatable(QuxContainer.class) +@interface Qux {} + +@interface QuxContainer { + Qux[] value(); +} + + +// Case 5: +@Target({}) +@Repeatable(QuuxContainer.class) +@interface Quux {} + +@Target({ + ElementType.TYPE_PARAMETER, +}) +@interface QuuxContainer { + Quux[] value(); +} + +// Case 6: +@Repeatable(QuuuxContainer.class) +@interface Quuux {} + +@Target({ + ElementType.TYPE_USE, +}) +@interface QuuuxContainer { + Quuux[] value(); +} diff --git a/langtools/test/tools/javac/annotations/repeatingAnnotations/8029017/TypeUseTargetNeg.out b/langtools/test/tools/javac/annotations/repeatingAnnotations/8029017/TypeUseTargetNeg.out new file mode 100644 index 00000000000..8bf41706954 --- /dev/null +++ b/langtools/test/tools/javac/annotations/repeatingAnnotations/8029017/TypeUseTargetNeg.out @@ -0,0 +1,7 @@ +TypeUseTargetNeg.java:16:1: compiler.err.invalid.repeatable.annotation.incompatible.target: FooContainer, Foo +TypeUseTargetNeg.java:36:1: compiler.err.invalid.repeatable.annotation.incompatible.target: BarContainer, Bar +TypeUseTargetNeg.java:54:1: compiler.err.invalid.repeatable.annotation.incompatible.target: BazContainer, Baz +TypeUseTargetNeg.java:71:1: compiler.err.invalid.repeatable.annotation.incompatible.target: QuxContainer, Qux +TypeUseTargetNeg.java:81:1: compiler.err.invalid.repeatable.annotation.incompatible.target: QuuxContainer, Quux +TypeUseTargetNeg.java:92:1: compiler.err.invalid.repeatable.annotation.incompatible.target: QuuuxContainer, Quuux +6 errors diff --git a/langtools/test/tools/javac/annotations/repeatingAnnotations/combo/ReflectionTest.java b/langtools/test/tools/javac/annotations/repeatingAnnotations/combo/ReflectionTest.java index f0dbe37f49f..d8812454f62 100644 --- a/langtools/test/tools/javac/annotations/repeatingAnnotations/combo/ReflectionTest.java +++ b/langtools/test/tools/javac/annotations/repeatingAnnotations/combo/ReflectionTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, 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 @@ -23,7 +23,7 @@ /** * @test - * @bug 8001457 + * @bug 8001457 8027477 * @author sogoel * @summary Reflection api tests * @build Helper @@ -159,7 +159,12 @@ public class ReflectionTest { "SingleOnSuperContainerAndSingleOnSub_Inherited_Legacy", "ContainerAndSingleOnSuperSingleOnSub_Inherited_Legacy", "SingleAnnoWithContainer", - "SingleOnSuperContainerAndSingleOnSub_Inherited"); + "SingleOnSuperContainerAndSingleOnSub_Inherited", + "RepeatableOnSuperSingleOnSub_Inherited", + "SingleOnSuperRepeatableOnSub_Inherited", + "ContainerOnSuperSingleOnSub_Inherited", + "SingleOnSuperContainerOnSub_Inherited", + "ContainerAndSingleOnSuperSingleOnSub_Inherited"); if (orderingTestFailures.contains(testCase.toString())) { CHECKORDERING = false; } else @@ -1612,323 +1617,323 @@ public class ReflectionTest { return files; } }, -// // Testcase not working as expected, JDK-8004912 -// RepeatableOnSuperSingleOnSub_Inherited( -// "@ExpectedBase(value=Foo.class, " -// + "getAnnotationVal = \"Foo\", " -// + "getAnnotationsVals = {" -// + "\"ExpectedBase\", \"ExpectedContainer\", \"Foo\", \"FooContainer\"}, " -// + //override every annotation on superClass -// "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"Foo\"}, " -// + // ignores inherited annotations -// "getDeclAnnoVal = \"Foo\", " // ignores inherited -// + "getAnnosArgs = {\"Foo\"}, " -// + "getDeclAnnosArgs = { \"Foo\" })", // ignores inherited -// "@ExpectedContainer(value=FooContainer.class, " -// + "getAnnotationVal = \"FooContainer\", " -// + "getAnnotationsVals = {" -// + "\"ExpectedBase\", \"ExpectedContainer\", \"Foo\", \"FooContainer\"}, " -// + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"Foo\"}, " -// + // ignores inherited annotations -// "getDeclAnnoVal = \"NULL\", " -// + "getAnnosArgs = {\"FooContainer\"}, " -// + "getDeclAnnosArgs = {}) // ignores inherited ") { + // @ignore 8025924: Several test cases in repeatingAnnotations/combo/ReflectionTest + // fail with ordering issues + RepeatableOnSuperSingleOnSub_Inherited( + "@ExpectedBase(value=Foo.class, " + + "getAnnotationVal = \"@Foo(value=3)\", " + + "getAnnotationsVals = {" + + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=3)\", \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}, " + + //override every annotation on superClass + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=3)\"}, " + + // ignores inherited annotations + "getDeclAnnoVal = \"@Foo(value=3)\", " // ignores inherited + + "getAnnosArgs = {\"@Foo(value=3)\"}, " + + "getDeclAnnosArgs = { \"@Foo(value=3)\" })", // ignores inherited + "@ExpectedContainer(value=FooContainer.class, " + + "getAnnotationVal = \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\", " + + "getAnnotationsVals = {" + + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=3)\", \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}, " + + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=3)\"}, " + + // ignores inherited annotations + "getDeclAnnoVal = \"NULL\", " + + "getAnnosArgs = {\"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}, " + + "getDeclAnnosArgs = {}) // ignores inherited ") { -// @Override -// public Iterable getTestFiles(SrcType srcType, -// String className) { -// String anno = ""; -// String replaceVal = ""; -// String contents = ""; -// JavaFileObject srcFileObj = null; -// Iterable files = null; + @Override + public Iterable getTestFiles(SrcType srcType, + String className) { + String anno = ""; + String replaceVal = ""; + String contents = ""; + JavaFileObject srcFileObj = null; + Iterable files = null; -// String expectedVals = "\n" + getExpectedBase() + "\n" -// + getExpectedContainer() + "\n"; -// StringBuilder commonStmts = getCommonStmts(true); + String expectedVals = "\n" + getExpectedBase() + "\n" + + getExpectedContainer() + "\n"; + StringBuilder commonStmts = getCommonStmts(true); -// /* -// Sample testSrc: -// @Retention(RetentionPolicy.RUNTIME) -// @Inherited -// @Repeatable(FooContainer.class) -// @interface Foo {int value() default Integer.MAX_VALUE;} + /* + Sample testSrc: + @Retention(RetentionPolicy.RUNTIME) + @Inherited + @Repeatable(FooContainer.class) + @interface Foo {int value() default Integer.MAX_VALUE;} -// @Retention(RetentionPolicy.RUNTIME) -// @Inherited -// @interface FooContainer { -// Foo[] value(); -// } + @Retention(RetentionPolicy.RUNTIME) + @Inherited + @interface FooContainer { + Foo[] value(); + } -// @Foo() @Foo -// class SuperClass { } + @Foo(1) @Foo(2) + class SuperClass { } -// @ExpectedBase -// @ExpectedContainer -// @Foo -// class SubClass extends SuperClass { } -// */ -// //@Inherited only works for classes, no switch cases for method, field, package + @ExpectedBase + @ExpectedContainer + @Foo(3) + class SubClass extends SuperClass { } + */ + //@Inherited only works for classes, no switch cases for method, field, package + if (srcType == SrcType.CLASS) { + //Contents for SuperClass + anno = Helper.ContentVars.REPEATABLEANNO.getVal(); + replaceVal = commonStmts + "\n" + anno; + String superClassContents = srcType.getTemplate() + .replace("#CN", SUPERCLASS) + .replace("#REPLACE", replaceVal); -// if (srcType == SrcType.CLASS) { -// //Contents for SuperClass -// anno = Helper.ContentVars.REPEATABLEANNO.getVal(); -// replaceVal = commonStmts + "\n" + anno; -// String superClassContents = srcType.getTemplate() -// .replace("#CN", SUPERCLASS) -// .replace("#REPLACE", replaceVal); + //Contents for SubClass that extends SuperClass + anno = "@Foo(3)"; + replaceVal = expectedVals + "\n" + anno; + String subClassContents = SrcType.CLASSEXTENDS.getTemplate() + .replace("#CN", className) + .replace("#SN", SUPERCLASS) + .replace("#REPLACE", replaceVal); + contents = superClassContents + subClassContents; + srcFileObj = Helper.getFile(className, contents); + files = Arrays.asList(srcFileObj); + } + return files; + } + }, + // @ignore 8025924: Several test cases in repeatingAnnotations/combo/ReflectionTest + // fail with ordering issues + SingleOnSuperRepeatableOnSub_Inherited( + "@ExpectedBase(value=Foo.class, " + + "getAnnotationVal = \"@Foo(value=0)\", " + + "getAnnotationsVals = {" + + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}, " + + //override every annotation on superClass + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}, " + + // ignores inherited annotations + "getDeclAnnoVal = \"NULL\","// ignores inherited + + "getAnnosArgs = {\"@Foo(value=1)\", \"@Foo(value=2)\"}, " + + "getDeclAnnosArgs = { \"@Foo(value=1)\", \"@Foo(value=2)\"})", + "@ExpectedContainer(value=FooContainer.class, " + + "getAnnotationVal = \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\", " + + "getAnnotationsVals = {" + + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}, " + + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}, " + + // ignores inherited annotations + "getDeclAnnoVal = \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\", "// ignores inherited + + "getAnnosArgs = {\"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}, " + + "getDeclAnnosArgs = {\"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"})") { -// //Contents for SubClass that extends SuperClass -// anno = "@Foo(0)"; -// replaceVal = expectedVals + "\n" + anno; -// String subClassContents = SrcType.CLASSEXTENDS.getTemplate() -// .replace("#CN", className) -// .replace("#SN", SUPERCLASS) -// .replace("#REPLACE", replaceVal); -// contents = superClassContents + subClassContents; -// srcFileObj = Helper.getFile(className, contents); -// files = Arrays.asList(srcFileObj); -// } -// return files; -// } -// }, -// //Testcase not working as expected, JDK-8004912 -// SingleOnSuperRepeatableOnSub_Inherited( -// "@ExpectedBase(value=Foo.class, " -// + "getAnnotationVal = \"Foo\", " -// + "getAnnotationsVals = {" -// + "\"ExpectedBase\", \"ExpectedContainer\", \"Foo\", \"FooContainer\"}, " -// + //override every annotation on superClass -// "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"FooContainer\"}, " -// + // ignores inherited annotations -// "getDeclAnnoVal = \"NULL\","// ignores inherited -// + "getAnnosArgs = {\"Foo\", \"Foo\"}, " -// + "getDeclAnnosArgs = { \"Foo\", \"Foo\"})", -// "@ExpectedContainer(value=FooContainer.class, " -// + "getAnnotationVal = \"FooContainer\", " -// + "getAnnotationsVals = {" -// + "\"ExpectedBase\", \"ExpectedContainer\", \"Foo\", \"FooContainer\"}, " -// + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"FooContainer\"}, " -// + // ignores inherited annotations -// "getDeclAnnoVal = \"FooContainer\", "// ignores inherited -// + "getAnnosArgs = {\"FooContainer\"}, " -// + "getDeclAnnosArgs = {\"FooContainer\"})") { + @Override + public Iterable getTestFiles(SrcType srcType, + String className) { + String anno = ""; + String replaceVal = ""; + String contents = ""; + JavaFileObject srcFileObj = null; + Iterable files = null; -// @Override -// public Iterable getTestFiles(SrcType srcType, -// String className) { -// String anno = ""; -// String replaceVal = ""; -// String contents = ""; -// JavaFileObject srcFileObj = null; -// Iterable files = null; + String expectedVals = "\n" + getExpectedBase() + "\n" + + getExpectedContainer() + "\n"; + StringBuilder commonStmts = getCommonStmts(true); -// String expectedVals = "\n" + getExpectedBase() + "\n" -// + getExpectedContainer() + "\n"; -// StringBuilder commonStmts = getCommonStmts(true); + /* + Sample testSrc: + @Retention(RetentionPolicy.RUNTIME) + @Inherited + @Repeatable(FooContainer.class) + @interface Foo {int value() default Integer.MAX_VALUE;} -// /* -// Sample testSrc: -// @Retention(RetentionPolicy.RUNTIME) -// @Inherited -// @Repeatable(FooContainer.class) -// @interface Foo {int value() default Integer.MAX_VALUE;} + @Retention(RetentionPolicy.RUNTIME) + @Inherited + @interface FooContainer { + Foo[] value(); + } -// @Retention(RetentionPolicy.RUNTIME) -// @Inherited -// @interface FooContainer { -// Foo[] value(); -// } + @Foo(0) + class SuperClass { } -// @Foo() -// class SuperClass { } + @ExpectedBase + @ExpectedContainer + @Foo(1) @Foo(2) + class SubClass extends SuperClass { } + */ + //@Inherited only works for classes, no switch cases for method, field, package + if (srcType == SrcType.CLASS) { + //Contents for SuperClass + anno = Helper.ContentVars.BASEANNO.getVal(); + replaceVal = commonStmts + "\n" + anno; + String superClassContents = srcType.getTemplate() + .replace("#CN", SUPERCLASS) + .replace("#REPLACE", replaceVal); -// @ExpectedBase -// @ExpectedContainer -// @Foo @Foo -// class SubClass extends SuperClass { } -// */ + //Contents for SubClass that extends SuperClass + anno = Helper.ContentVars.REPEATABLEANNO.getVal(); + replaceVal = expectedVals + "\n" + anno; + String subClassContents = SrcType.CLASSEXTENDS.getTemplate() + .replace("#CN", className) + .replace("#SN", SUPERCLASS) + .replace("#REPLACE", replaceVal); -// //@Inherited only works for classes, no switch cases for method, field, package -// if (srcType == SrcType.CLASS) { -// //Contents for SuperClass -// anno = "@Foo(0)"; -// replaceVal = commonStmts + "\n" + anno; -// String superClassContents = srcType.getTemplate() -// .replace("#CN", SUPERCLASS) -// .replace("#REPLACE", replaceVal); + contents = superClassContents + subClassContents; + srcFileObj = Helper.getFile(className, contents); + files = Arrays.asList(srcFileObj); + } + return files; + } + }, + // @ignore 8025924: Several test cases in repeatingAnnotations/combo/ReflectionTest + // fail with ordering issues + ContainerOnSuperSingleOnSub_Inherited( + "@ExpectedBase(value=Foo.class, " + + "getAnnotationVal = \"@Foo(value=0)\", " + + "getAnnotationsVals = {" + + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}, " + + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\"}," + + "getDeclAnnoVal = \"@Foo(value=0)\"," + + "getAnnosArgs = {\"@Foo(value=0)\"}," + + "getDeclAnnosArgs = {\"@Foo(value=0)\"})", + "@ExpectedContainer(value=FooContainer.class, " + + "getAnnotationVal = \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\", " + + "getAnnotationsVals = {" + + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}, " + + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\"}," + + "getDeclAnnoVal = \"NULL\"," + + "getAnnosArgs = {\"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}," + + "getDeclAnnosArgs = {})") { -// //Contents for SubClass that extends SuperClass -// anno = Helper.ContentVars.REPEATABLEANNO.getVal(); -// replaceVal = expectedVals + "\n" + anno; -// String subClassContents = SrcType.CLASSEXTENDS.getTemplate() -// .replace("#CN", className) -// .replace("#SN", SUPERCLASS) -// .replace("#REPLACE", replaceVal); + @Override + public Iterable getTestFiles(SrcType srcType, + String className) { + String anno = ""; + String replaceVal = ""; + String contents = ""; + JavaFileObject srcFileObj = null; + Iterable files = null; -// contents = superClassContents + subClassContents; -// srcFileObj = Helper.getFile(className, contents); -// files = Arrays.asList(srcFileObj); -// } -// return files; -// } -// }, -// //Testcase not working as expected, JDK-8004912 -// ContainerOnSuperSingleOnSub_Inherited( -// "@ExpectedBase(value=Foo.class, " -// + "getAnnotationVal = \"Foo\", " -// + "getAnnotationsVals = {" -// + "\"ExpectedBase\", \"ExpectedContainer\", \"Foo\", \"FooContainer\"}, " -// + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"Foo\"}," -// + "getDeclAnnoVal = \"Foo\"," -// + "getAnnosArgs = {\"Foo\"}," -// + "getDeclAnnosArgs = {\"Foo\"})", -// "@ExpectedContainer(value=FooContainer.class, " -// + "getAnnotationVal = \"FooContainer\", " -// + "getAnnotationsVals = {" -// + "\"ExpectedBase\", \"ExpectedContainer\", \"Foo\", \"FooContainer\"}, " -// + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"Foo\"}," -// + "getDeclAnnoVal = \"NULL\"," -// + "getAnnosArgs = {\"FooContainer\"}," -// + "getDeclAnnosArgs = {})") { + String expectedVals = "\n" + getExpectedBase() + "\n" + + getExpectedContainer() + "\n"; + StringBuilder commonStmts = getCommonStmts(true); -// @Override -// public Iterable getTestFiles(SrcType srcType, -// String className) { -// String anno = ""; -// String replaceVal = ""; -// String contents = ""; -// JavaFileObject srcFileObj = null; -// Iterable files = null; + /* + Sample testSrc: + @Retention(RetentionPolicy.RUNTIME) + @Inherited + @Repeatable(FooContainer.class) + @interface Foo {int value() default Integer.MAX_VALUE;} -// String expectedVals = "\n" + getExpectedBase() + "\n" -// + getExpectedContainer() + "\n"; -// StringBuilder commonStmts = getCommonStmts(true); + @Retention(RetentionPolicy.RUNTIME) + @Inherited + @interface FooContainer { + Foo[] value(); + } -// /* -// Sample testSrc: -// @Retention(RetentionPolicy.RUNTIME) -// @Inherited -// @Repeatable(FooContainer.class) -// @interface Foo {int value() default Integer.MAX_VALUE;} + @FooContainer(value = {@Foo(1), @Foo(2)}) + class SuperClass { } -// @Retention(RetentionPolicy.RUNTIME) -// @Inherited -// @interface FooContainer { -// Foo[] value(); -// } + @ExpectedBase + @ExpectedContainer + @Foo(0) + class SubClass extends SuperClass { } + */ + //@Inherited only works for classes, no switch cases for method, field, package + if (srcType == SrcType.CLASS) { + //Contents for SuperClass + anno = Helper.ContentVars.LEGACYCONTAINER.getVal(); + replaceVal = commonStmts + "\n" + anno; + String superClassContents = srcType.getTemplate() + .replace("#CN", SUPERCLASS) + .replace("#REPLACE", replaceVal); -// @FooContainer(value = {@Foo, @Foo}) -// class SuperClass { } + //Contents for SubClass that extends SuperClass + anno = Helper.ContentVars.BASEANNO.getVal(); + replaceVal = expectedVals + "\n" + anno; + String subClassContents = SrcType.CLASSEXTENDS.getTemplate() + .replace("#CN", className) + .replace("#SN", SUPERCLASS) + .replace("#REPLACE", replaceVal); -// @ExpectedBase -// @ExpectedContainer -// @Foo -// class SubClass extends SuperClass { } -// */ + contents = superClassContents + subClassContents; + srcFileObj = Helper.getFile(className, contents); + files = Arrays.asList(srcFileObj); + } + return files; + } + }, + // @ignore 8025924: Several test cases in repeatingAnnotations/combo/ReflectionTest + // fail with ordering issues + SingleOnSuperContainerOnSub_Inherited( + "@ExpectedBase(value=Foo.class, " + + "getAnnotationVal = \"@Foo(value=0)\", " + + "getAnnotationsVals = {" + + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}, " + + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}," + + "getDeclAnnoVal = \"NULL\"," + + "getAnnosArgs = {\"@Foo(value=1)\", \"@Foo(value=2)\"}," + + "getDeclAnnosArgs = {\"@Foo(value=1)\", \"@Foo(value=2)\"})", + "@ExpectedContainer(value=FooContainer.class, " + + "getAnnotationVal = \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\", " + + "getAnnotationsVals = {" + + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}, " + + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}," + + "getDeclAnnoVal = \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"," + + "getAnnosArgs = {\"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}," + + "getDeclAnnosArgs = {\"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"})") { -// //@Inherited only works for classes, no switch cases for method, field, package -// if (srcType == SrcType.CLASS) { -// //Contents for SuperClass -// anno = Helper.ContentVars.LEGACYCONTAINER.getVal(); -// replaceVal = commonStmts + "\n" + anno; -// String superClassContents = srcType.getTemplate() -// .replace("#CN", SUPERCLASS) -// .replace("#REPLACE", replaceVal); + @Override + public Iterable getTestFiles(SrcType srcType, + String className) { + String anno = ""; + String replaceVal = ""; + String contents = ""; + JavaFileObject srcFileObj = null; + Iterable files = null; -// //Contents for SubClass that extends SuperClass -// anno = "@Foo(0)"; -// replaceVal = expectedVals + "\n" + anno; -// String subClassContents = SrcType.CLASSEXTENDS.getTemplate() -// .replace("#CN", className) -// .replace("#SN", SUPERCLASS) -// .replace("#REPLACE", replaceVal); + String expectedVals = "\n" + getExpectedBase() + "\n" + + getExpectedContainer() + "\n"; + StringBuilder commonStmts = getCommonStmts(true); -// contents = superClassContents + subClassContents; -// srcFileObj = Helper.getFile(className, contents); -// files = Arrays.asList(srcFileObj); -// } -// return files; -// } -// }, -// // TestCase not working as expected, JDK-8004912 -// SingleOnSuperContainerOnSub_Inherited( -// "@ExpectedBase(value=Foo.class, " -// + "getAnnotationVal = \"Foo\", " -// + "getAnnotationsVals = {" -// + "\"ExpectedBase\", \"ExpectedContainer\", \"Foo\", \"FooContainer\"}, " -// + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"FooContainer\"}," -// + "getDeclAnnoVal = \"NULL\"," -// + "getAnnosArgs = {\"Foo\", \"Foo\"}," -// + "getDeclAnnosArgs = {\"Foo\", \"Foo\"})", -// "@ExpectedContainer(value=FooContainer.class, " -// + "getAnnotationVal = \"FooContainer\", " -// + "getAnnotationsVals = {" -// + "\"ExpectedBase\", \"ExpectedContainer\", \"Foo\", \"FooContainer\"}, " -// + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"FooContainer\"}," -// + "getDeclAnnoVal = \"FooContainer\"," -// + "getAnnosArgs = {\"FooContainer\"}," -// + "getDeclAnnosArgs = {\"FooContainer\"})") { + /* + Sample testSrc: + @Retention(RetentionPolicy.RUNTIME) + @Inherited + @Repeatable(FooContainer.class) + @interface Foo {int value() default Integer.MAX_VALUE;} -// @Override -// public Iterable getTestFiles(SrcType srcType, -// String className) { -// String anno = ""; -// String replaceVal = ""; -// String contents = ""; -// JavaFileObject srcFileObj = null; -// Iterable files = null; + @Retention(RetentionPolicy.RUNTIME) + @Inherited + @interface FooContainer { + Foo[] value(); + } -// String expectedVals = "\n" + getExpectedBase() + "\n" -// + getExpectedContainer() + "\n"; -// StringBuilder commonStmts = getCommonStmts(true); + @Foo(0) + class SuperClass { } -// /* -// Sample testSrc: -// @Retention(RetentionPolicy.RUNTIME) -// @Inherited -// @Repeatable(FooContainer.class) -// @interface Foo {int value() default Integer.MAX_VALUE;} + @ExpectedBase + @ExpectedContainer + @FooContainer(value = {@Foo(1), @Foo(2)}) + class SubClass extends SuperClass { } + */ + //@Inherited only works for classes, no switch cases for method, field, package + if (srcType == SrcType.CLASS) { + //Contents for SuperClass + anno = Helper.ContentVars.BASEANNO.getVal(); + replaceVal = commonStmts + "\n" + anno; + String superClassContents = srcType.getTemplate() + .replace("#CN", SUPERCLASS) + .replace("#REPLACE", replaceVal); -// @Retention(RetentionPolicy.RUNTIME) -// @Inherited -// @interface FooContainer { -// Foo[] value(); -// } + //Contents for SubClass that extends SuperClass + anno = Helper.ContentVars.LEGACYCONTAINER.getVal(); + replaceVal = expectedVals + "\n" + anno; + String subClassContents = SrcType.CLASSEXTENDS.getTemplate() + .replace("#CN", className) + .replace("#SN", SUPERCLASS) + .replace("#REPLACE", replaceVal); -// @Foo -// class SuperClass { } - -// @ExpectedBase -// @ExpectedContainer -// @FooContainer(value = {@Foo, @Foo}) -// class SubClass extends SuperClass { } -// */ - -// //@Inherited only works for classes, no switch cases for method, field, package -// if (srcType == SrcType.CLASS) { -// //Contents for SuperClass -// anno = "@Foo(0)"; -// replaceVal = commonStmts + "\n" + anno; -// String superClassContents = srcType.getTemplate() -// .replace("#CN", SUPERCLASS) -// .replace("#REPLACE", replaceVal); - -// //Contents for SubClass that extends SuperClass -// anno = Helper.ContentVars.LEGACYCONTAINER.getVal(); -// replaceVal = expectedVals + "\n" + anno; -// String subClassContents = SrcType.CLASSEXTENDS.getTemplate() -// .replace("#CN", className) -// .replace("#SN", SUPERCLASS) -// .replace("#REPLACE", replaceVal); - -// contents = superClassContents + subClassContents; -// srcFileObj = Helper.getFile(className, contents); -// files = Arrays.asList(srcFileObj); -// } -// return files; -// } -// }, + contents = superClassContents + subClassContents; + srcFileObj = Helper.getFile(className, contents); + files = Arrays.asList(srcFileObj); + } + return files; + } + }, // @ignore 8025924: Several test cases in repeatingAnnotations/combo/ReflectionTest // fail with ordering issues SingleOnSuperContainerAndSingleOnSub_Inherited( @@ -2009,87 +2014,88 @@ public class ReflectionTest { return files; } }, -// // TestCase not working as expected, JDK-8004912 -// ContainerAndSingleOnSuperSingleOnSub_Inherited( -// "@ExpectedBase(value=Foo.class, " -// + "getAnnotationVal = \"Foo\", " -// + "getAnnotationsVals = {" -// + "\"ExpectedBase\", \"ExpectedContainer\", \"Foo\", \"FooContainer\"}, " -// + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"Foo\"}," -// + "getDeclAnnoVal = \"Foo\"," -// + "getAnnosArgs = {\"Foo\"}," -// + "getDeclAnnosArgs = {\"Foo\"})", -// "@ExpectedContainer(value=FooContainer.class, " -// + "getAnnotationVal = \"FooContainer\", " -// + "getAnnotationsVals = {" -// + "\"ExpectedBase\", \"ExpectedContainer\", \"Foo\", \"FooContainer\"}, " -// + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"Foo\"}," -// + "getDeclAnnoVal = \"NULL\"," -// + "getAnnosArgs = {\"FooContainer\"}," -// + "getDeclAnnosArgs = {})") { + // @ignore 8025924: Several test cases in repeatingAnnotations/combo/ReflectionTest + // fail with ordering issues + ContainerAndSingleOnSuperSingleOnSub_Inherited( + "@ExpectedBase(value=Foo.class, " + + "getAnnotationVal = \"@Foo(value=0)\", " + + "getAnnotationsVals = {" + + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}, " + + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\"}," + + "getDeclAnnoVal = \"@Foo(value=0)\"," + + "getAnnosArgs = {\"@Foo(value=0)\"}," + + "getDeclAnnosArgs = {\"@Foo(value=0)\"})", + "@ExpectedContainer(value=FooContainer.class, " + + "getAnnotationVal = \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\", " + + "getAnnotationsVals = {" + + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}, " + + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\"}," + + "getDeclAnnoVal = \"NULL\"," + + "getAnnosArgs = {\"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}," + + "getDeclAnnosArgs = {})") { -// @Override -// public Iterable getTestFiles(SrcType srcType, -// String className) { -// String anno = ""; -// String replaceVal = ""; -// String contents = ""; -// JavaFileObject srcFileObj = null; -// Iterable files = null; + @Override + public Iterable getTestFiles(SrcType srcType, + String className) { + String anno = ""; + String replaceVal = ""; + String contents = ""; + JavaFileObject srcFileObj = null; + Iterable files = null; -// String expectedVals = "\n" + getExpectedBase() + "\n" -// + getExpectedContainer() + "\n"; -// StringBuilder commonStmts = getCommonStmts(true); + String expectedVals = "\n" + getExpectedBase() + "\n" + + getExpectedContainer() + "\n"; + StringBuilder commonStmts = getCommonStmts(true); -// /* -// Sample testSrc: -// @Retention(RetentionPolicy.RUNTIME) -// @Inherited -// @Repeatable(FooContainer.class) -// @interface Foo {int value() default Integer.MAX_VALUE;} + /* + Sample testSrc: + @Retention(RetentionPolicy.RUNTIME) + @Inherited + @Repeatable(FooContainer.class) + @interface Foo {int value() default Integer.MAX_VALUE;} -// @Retention(RetentionPolicy.RUNTIME) -// @Inherited -// @interface FooContainer { -// Foo[] value(); -// } + @Retention(RetentionPolicy.RUNTIME) + @Inherited + @interface FooContainer { + Foo[] value(); + } -// @FooContainer(value = {@Foo, @Foo}) -// @Foo -// class SuperClass { } + @FooContainer(value = {@Foo(1), @Foo(2)}) + @Foo(3) + class SuperClass { } -// @ExpectedBase -// @ExpectedContainer -// @Foo -// class SubClass extends SuperClass { } -// */ + @ExpectedBase + @ExpectedContainer + @Foo(0) + class SubClass extends SuperClass { } + */ -// //@Inherited only works for classes, no switch cases for method, field, package -// if (srcType == SrcType.CLASS) { -// //Contents for SuperClass -// anno = Helper.ContentVars.LEGACYCONTAINER.getVal() -// + Helper.ContentVars.BASEANNO.getVal(); -// replaceVal = commonStmts + "\n" + anno; -// String superClassContents = srcType.getTemplate() -// .replace("#CN", SUPERCLASS) -// .replace("#REPLACE", replaceVal); + //@Inherited only works for classes, no switch cases for method, field, package + if (srcType == SrcType.CLASS) { + //Contents for SuperClass + anno = Helper.ContentVars.LEGACYCONTAINER.getVal() + + "@Foo(3)" ; + replaceVal = commonStmts + "\n" + anno; + String superClassContents = srcType.getTemplate() + .replace("#CN", SUPERCLASS) + .replace("#REPLACE", replaceVal); -// //Contents for SubClass that extends SuperClass -// anno = "@Foo(0)"; -// replaceVal = expectedVals + "\n" + anno; -// String subClassContents = SrcType.CLASSEXTENDS.getTemplate() -// .replace("#CN", className) -// .replace("#SN", SUPERCLASS) -// .replace("#REPLACE", replaceVal); + //Contents for SubClass that extends SuperClass + anno = Helper.ContentVars.BASEANNO.getVal(); + replaceVal = expectedVals + "\n" + anno; + String subClassContents = SrcType.CLASSEXTENDS.getTemplate() + .replace("#CN", className) + .replace("#SN", SUPERCLASS) + .replace("#REPLACE", replaceVal); + + contents = superClassContents + subClassContents; + srcFileObj = Helper.getFile(className, contents); + files = Arrays.asList(srcFileObj); + } + return files; + } + }; -// contents = superClassContents + subClassContents; -// srcFileObj = Helper.getFile(className, contents); -// files = Arrays.asList(srcFileObj); -// } -// return files; -// } -// } - ; private String expectedBase, expectedContainer; private TestCase(String expectedBase, String expectedContainer) { @@ -2942,7 +2948,7 @@ public class ReflectionTest { System.out.print("Actual Arr Values: "); for (Annotation a : actualAnnos) { if (a != null && a.annotationType() != null) { - System.out.print("[" + a.annotationType().getSimpleName() + "]"); + System.out.print("[" + a.toString() + "]"); } else { System.out.println("[null]"); } diff --git a/langtools/test/tools/javac/annotations/repeatingAnnotations/combo/TargetAnnoCombo.java b/langtools/test/tools/javac/annotations/repeatingAnnotations/combo/TargetAnnoCombo.java index 058b48910cd..66e1c1440b1 100644 --- a/langtools/test/tools/javac/annotations/repeatingAnnotations/combo/TargetAnnoCombo.java +++ b/langtools/test/tools/javac/annotations/repeatingAnnotations/combo/TargetAnnoCombo.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, 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 @@ -23,7 +23,7 @@ /* * @test - * @bug 7151010 8006547 8007766 + * @bug 7151010 8006547 8007766 8029017 * @summary Default test cases for running combinations for Target values * @build Helper * @run main TargetAnnoCombo @@ -145,11 +145,19 @@ public class TargetAnnoCombo { Set tempBaseSet = EnumSet.noneOf(ElementType.class); tempBaseSet.addAll(baseAnnotations); + // If BaseAnno has TYPE, then ANNOTATION_TYPE is allowed by default. if (baseAnnotations.contains(TYPE)) { tempBaseSet.add(ANNOTATION_TYPE); } + // If BaseAnno has TYPE_USE, then add the extra allowed types + if (baseAnnotations.contains(TYPE_USE)) { + tempBaseSet.add(ANNOTATION_TYPE); + tempBaseSet.add(TYPE); + tempBaseSet.add(TYPE_PARAMETER); + } + // If containerAnno has no @Target, only valid case if baseAnnoTarget has // all targets defined else invalid set. if (containerAnnotations == null) { diff --git a/langtools/test/tools/javac/api/TestJavacTaskScanner.java b/langtools/test/tools/javac/api/TestJavacTaskScanner.java index 7103ba74cdd..a02ca67a033 100644 --- a/langtools/test/tools/javac/api/TestJavacTaskScanner.java +++ b/langtools/test/tools/javac/api/TestJavacTaskScanner.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, 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 @@ -23,7 +23,7 @@ /* * @test - * @bug 4813736 + * @bug 4813736 8013256 * @summary Additional functionality test of task and JSR 269 * @author Peter von der Ah\u00e9 * @library ./lib diff --git a/langtools/test/tools/javac/diags/examples/VarargsMustBeLast.java b/langtools/test/tools/javac/diags/examples/VarargsMustBeLast.java new file mode 100644 index 00000000000..bff1fbb6fcb --- /dev/null +++ b/langtools/test/tools/javac/diags/examples/VarargsMustBeLast.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +// key: compiler.err.varargs.must.be.last + +class VarargMustBeFinal { + public void invalidVarArg(String... invalidVarArg, String extra) { } +} diff --git a/langtools/test/tools/javac/doctree/SeeTest.java b/langtools/test/tools/javac/doctree/SeeTest.java index bb2734814d9..6927788ce27 100644 --- a/langtools/test/tools/javac/doctree/SeeTest.java +++ b/langtools/test/tools/javac/doctree/SeeTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014, 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 @@ -23,7 +23,7 @@ /* * @test - * @bug 7021614 + * @bug 7021614 8031212 * @summary extend com.sun.source API to support parsing javadoc comments * @build DocCommentTester * @run main DocCommentTester SeeTest.java @@ -41,9 +41,9 @@ DocComment[DOC_COMMENT, pos:1 Text[TEXT, pos:1, abc.] body: empty block tags: 1 - Erroneous[ERRONEOUS, pos:7 - code: compiler.err.dc.unexpected.content - body: @see_"String" + See[SEE, pos:7 + reference: 1 + Text[TEXT, pos:12, "String"] ] ] */ diff --git a/langtools/test/tools/javac/lambda/InnerConstructor.java b/langtools/test/tools/javac/lambda/InnerConstructor.java index 3675020c9d8..28a33908a08 100644 --- a/langtools/test/tools/javac/lambda/InnerConstructor.java +++ b/langtools/test/tools/javac/lambda/InnerConstructor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014, 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 @@ -23,7 +23,7 @@ /* * @test - * @bug 8003280 + * @bug 8003280 8003306 * @summary Add lambda tests * Regression test JDK-8003306 inner class constructor in lambda * @author Robert Field diff --git a/langtools/test/tools/javac/lambda/intersection/IntersectionTargetTypeTest.java b/langtools/test/tools/javac/lambda/intersection/IntersectionTargetTypeTest.java index 36e18611ba5..4b8ec208d15 100644 --- a/langtools/test/tools/javac/lambda/intersection/IntersectionTargetTypeTest.java +++ b/langtools/test/tools/javac/lambda/intersection/IntersectionTargetTypeTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014, 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 @@ -23,7 +23,7 @@ /* * @test - * @bug 8002099 + * @bug 8002099 8010822 * @summary Add support for intersection types in cast expression */ diff --git a/langtools/test/tools/javac/lambda/separate/Test.java b/langtools/test/tools/javac/lambda/separate/Test.java index 7aa6b2c5c08..14bfd493500 100644 --- a/langtools/test/tools/javac/lambda/separate/Test.java +++ b/langtools/test/tools/javac/lambda/separate/Test.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014, 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 @@ -23,6 +23,7 @@ /* * @test + * @bug 8008708 * @compile Foo.java * @compile Test.java */ diff --git a/langtools/test/tools/javac/parser/ErroneousParameters.java b/langtools/test/tools/javac/parser/ErroneousParameters.java new file mode 100644 index 00000000000..f6311d6f2db --- /dev/null +++ b/langtools/test/tools/javac/parser/ErroneousParameters.java @@ -0,0 +1,16 @@ +/* + * @test /nodynamiccopyright/ + * @bug 8030091 + * @summary Producing reasonable errors for unexpected tokens in method parameters + * @compile/fail/ref=ErroneousParameters.out -XDrawDiagnostics ErroneousParameters.java + */ + +public class ErroneousParameters { + + public static void test(int... extraVarArg, int additionalParam) { } + public static void test(byte param...) { } + public static void test(char param,) { } + public static void test(short param[) { } + public static void test(int param=) { } + +} diff --git a/langtools/test/tools/javac/parser/ErroneousParameters.out b/langtools/test/tools/javac/parser/ErroneousParameters.out new file mode 100644 index 00000000000..89d9e3743e6 --- /dev/null +++ b/langtools/test/tools/javac/parser/ErroneousParameters.out @@ -0,0 +1,14 @@ +ErroneousParameters.java:10:36: compiler.err.varargs.must.be.last +ErroneousParameters.java:11:39: compiler.err.expected3: ',', ')', '[' +ErroneousParameters.java:11:42: compiler.err.illegal.start.of.type +ErroneousParameters.java:11:43: compiler.err.expected: token.identifier +ErroneousParameters.java:11:45: compiler.err.expected: ';' +ErroneousParameters.java:12:40: compiler.err.illegal.start.of.type +ErroneousParameters.java:12:41: compiler.err.expected3: ',', ')', '[' +ErroneousParameters.java:12:43: compiler.err.expected: ';' +ErroneousParameters.java:13:41: compiler.err.expected: ']' +ErroneousParameters.java:14:38: compiler.err.expected3: ',', ')', '[' +ErroneousParameters.java:14:39: compiler.err.illegal.start.of.type +ErroneousParameters.java:14:40: compiler.err.expected: token.identifier +ErroneousParameters.java:14:42: compiler.err.expected: ';' +13 errors diff --git a/langtools/test/tools/javac/processing/errors/TestParseErrors/TestParseErrors.out b/langtools/test/tools/javac/processing/errors/TestParseErrors/TestParseErrors.out index 947e921dd4d..11cff7ddcf1 100644 --- a/langtools/test/tools/javac/processing/errors/TestParseErrors/TestParseErrors.out +++ b/langtools/test/tools/javac/processing/errors/TestParseErrors/TestParseErrors.out @@ -1,6 +1,6 @@ ParseErrors.java:37:37: compiler.err.expected: token.identifier ParseErrors.java:38:1: compiler.err.illegal.start.of.type -ParseErrors.java:38:2: compiler.err.expected: ')' +ParseErrors.java:38:2: compiler.err.expected3: ',', ')', '[' ParseErrors.java:40:6: compiler.err.expected: ';' ParseErrors.java:40:20: compiler.err.illegal.start.of.type ParseErrors.java:41:5: compiler.err.expected: '(' diff --git a/langtools/test/tools/javac/resolve/ResolveHarness.java b/langtools/test/tools/javac/resolve/ResolveHarness.java index 2512f54f081..7d79f1c851f 100644 --- a/langtools/test/tools/javac/resolve/ResolveHarness.java +++ b/langtools/test/tools/javac/resolve/ResolveHarness.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2014, 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 @@ -23,7 +23,7 @@ /* * @test - * @bug 7098660 + * @bug 7098660 8014649 * @summary Write better overload resolution/inference tests * @library /tools/javac/lib * @build JavacTestingAbstractProcessor ResolveHarness diff --git a/langtools/test/tools/javac/util/BitsTest.java b/langtools/test/tools/javac/util/BitsTest.java new file mode 100644 index 00000000000..149ff473961 --- /dev/null +++ b/langtools/test/tools/javac/util/BitsTest.java @@ -0,0 +1,204 @@ +/* + * Copyright (c) 2014, 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 8028267 + * @summary Unit tests for the com.sun.tools.javac.util.Bits class. + * @run main BitsTest + */ + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +import com.sun.tools.javac.util.Bits; + +public class BitsTest { + + final static int[] samples = { 0, 1, 7, 16, 19, 31, 32, 33, 63, 64 }; + final static int LENGTH = samples[samples.length - 1] + 50; + + public static void main(String... args) throws Exception { + + testIncl(); + testInclRange(); + testDup(); + testClear(); + testExcl(); + testExcludeFrom(); + testBinOps(); + testNextBit(); + + } + + + // Test Bits.incl + static void testIncl() { + for (int a : samples) { + for (int b : samples) { + Bits bits = new Bits(); + bits.incl(a); + if (a != b) + bits.incl(b); + for (int i = 0; i < LENGTH; i++) + assert bits.isMember(i) == (i == a || i == b); + } + } + } + + + // Test Bits.excl + static void testExcl() { + for (int a : samples) { + for (int b : samples) { + Bits bits = new Bits(); + bits.inclRange(0, LENGTH); + bits.excl(a); + if (a != b) + bits.excl(b); + for (int i = 0; i < LENGTH; i++) + assert !bits.isMember(i) == (i == a || i == b); + } + } + } + + + // Test Bits.inclRange with various ranges. + static void testInclRange() { + for (int i = 0; i < samples.length; i++) { + for (int j = i; j < samples.length; j++) + testInclRangeHelper(samples[i], samples[j]); + } + } + + + // Tests Bits.inclRange for the given range. + static void testInclRangeHelper(int from, int to) { + Bits bits = new Bits(); + bits.inclRange(from, to); + for (int i = 0; i < LENGTH; i++) + assert bits.isMember(i) == (from <= i && i < to); + } + + + // Test Bits.dup + static void testDup() { + Bits bits = sampleBits(); + Bits dupBits = bits.dup(); + assertEquals(LENGTH, bits, dupBits); + } + + + // Make sure Bits.clear clears all bits. + static void testClear() { + Bits bits = sampleBits(); + bits.clear(); + for (int i = 0; i < LENGTH; i++) + assert !bits.isMember(i); + } + + + // Test Bits.excludeFrom + static void testExcludeFrom() { + Bits bits = sampleBits(); + + int half = samples.length / 2; + Set expected = new HashSet(); + for (int i : Arrays.copyOf(samples, half)) + expected.add(i); + + bits.excludeFrom(samples[half]); + + for (int i = 0; i < LENGTH; i++) + assert bits.isMember(i) == expected.contains(i); + } + + + // Test andSet, orSet, diffSet, xorSet + static void testBinOps() { + int[] a = { 1630757163, -592623705 }; + int[] b = { 1062404889, 1969380693 }; + + int[] or = { a[0] | b[0], a[1] | b[1] }; + int[] and = { a[0] & b[0], a[1] & b[1] }; + int[] xor = { a[0] ^ b[0], a[1] ^ b[1] }; + int[] diff = { a[0] & ~b[0], a[1] & ~b[1] }; + + assertEquals(64, fromInts(a).orSet (fromInts(b)), fromInts(or)); + assertEquals(64, fromInts(a).andSet (fromInts(b)), fromInts(and)); + assertEquals(64, fromInts(a).xorSet (fromInts(b)), fromInts(xor)); + assertEquals(64, fromInts(a).diffSet(fromInts(b)), fromInts(diff)); + + } + + + // Create a Bits-instance based on bits in 'ints' argument. + static Bits fromInts(int[] ints) { + Bits bits = new Bits(); + for (int bit = 0; bit < ints.length * 32; bit++) + if ((ints[bit / 32] & (1 << (bit % 32))) != 0) + bits.incl(bit); + return bits; + } + + + // Asserts that two Bits-instances are equal up to first 'len' bits. + static void assertEquals(int len, Bits a, Bits b) { + for (int i = 0; i < len; i++) + assert a.isMember(i) == b.isMember(i); + } + + + // Test Bits.nextBit + static void testNextBit() { + Bits bits = sampleBits(); + + int index = 0; + for (int bit = 0; bit < LENGTH; bit++) { + + int expected; + + // Passed last sample index? + if (index < samples.length) { + expected = samples[index]; + if (bit == samples[index]) + index++; + } else { + expected = -1; + } + + assert bits.nextBit(bit) == expected; + } + } + + + // Convenience method: Generate a Bits-instance based on samples. + static Bits sampleBits() { + Bits bits = new Bits(); + for (int i : samples) + bits.incl(i); + return bits; + } + +} diff --git a/langtools/test/tools/javap/InvalidOptions.java b/langtools/test/tools/javap/InvalidOptions.java index d92f644ba85..764fd8a861c 100644 --- a/langtools/test/tools/javap/InvalidOptions.java +++ b/langtools/test/tools/javap/InvalidOptions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, 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 @@ -23,8 +23,8 @@ /* * @test - * @bug 8027411 - * @summary test invalid options -h and -b + * @bug 8027411 8032869 + * @summary test an invalid option */ import java.io.*; @@ -39,7 +39,6 @@ public class InvalidOptions { } void run() throws Exception { - test(2, "-h", "Error: -h is no longer available - use the javah program"); test(2, "-b", "Error: unknown option: -b", "Usage: javap ", "use -help for a list of possible options"); diff --git a/langtools/test/tools/javap/T8032814.java b/langtools/test/tools/javap/T8032814.java new file mode 100644 index 00000000000..d9ee2d1915d --- /dev/null +++ b/langtools/test/tools/javap/T8032814.java @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2014, 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 8032814 + * @summary LineNumberTable/LocalVariableTable tables duplication for the + * "-v -l" combination of options + * @compile -g T8032814.java + * @run main T8032814 + */ + +import java.io.*; +import java.util.*; + +public class T8032814 { + public static void main(String... args) throws Exception { + new T8032814().run(); + } + + void run() throws Exception { + Class clazz = T8032814.class; + int count = clazz.getDeclaredConstructors().length + + clazz.getDeclaredMethods().length; + test(clazz, 0); + test(clazz, count, "-v"); + test(clazz, count, "-l"); + test(clazz, count, "-v", "-l"); + + if (errors > 0) + throw new Exception(errors + " errors occurred"); + } + + void test(Class clazz, int expectedCount, String... opts) throws Exception { + System.err.println("test class " + clazz.getName() + " " + Arrays.asList(opts) + ": expect: " + expectedCount); + List args = new ArrayList(); + args.addAll(Arrays.asList(opts)); + args.addAll(Arrays.asList("-classpath", System.getProperty("test.classes"))); + args.add(clazz.getName()); + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + int rc = com.sun.tools.javap.Main.run(args.toArray(new String[args.size()]), pw); + pw.close(); + String out = sw.toString(); + if (rc != 0) + throw new Exception("javap failed unexpectedly: rc=" + rc); + + int lntCount = 0, lvtCount = 0; + for (String line: out.split("[\r\n]+")) { + if (line.matches("^ *LineNumberTable:$")) + lntCount++; + if (line.matches("^ *LocalVariableTable:$")) + lvtCount++; + } + checkEqual("LineNumberTable", lntCount, expectedCount); + checkEqual("LocalVariableTable", lvtCount, expectedCount); + } + + void checkEqual(String attr, int found, int expect) { + if (found != expect) { + error("Unexpected number of occurrences of " + attr + "\n" + + "found: " + found + ", expected: " + expect); + } + } + + void error(String msg) { + System.err.println("Error: " + msg); + errors++; + } + + int errors = 0; +} + diff --git a/langtools/test/tools/javap/T8032819.java b/langtools/test/tools/javap/T8032819.java new file mode 100644 index 00000000000..9c5eeb47381 --- /dev/null +++ b/langtools/test/tools/javap/T8032819.java @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2014, 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 8032819 + * @summary Extra empty line between field declarations for the "-v -c" and "-v -l" combination of options + * @compile -g T8032819.java + * @run main T8032819 + */ + +import java.io.*; +import java.util.*; + +public class T8032819 { + static class Fields { + int f1; + int f2; + } + + public static void main(String... args) throws Exception { + new T8032819().run(); + } + + void run() throws Exception { + Class clazz = Fields.class; + test(clazz); + test(clazz, "-c"); + test(clazz, "-l"); + test(clazz, "-l", "-c"); + test(clazz, "-v"); + test(clazz, "-v", "-c"); + test(clazz, "-v", "-l"); + test(clazz, "-v", "-l", "-c"); + + if (errors > 0) + throw new Exception(errors + " errors occurred"); + } + + static final String sep = System.getProperty("line.separator"); + static final String doubleBlankLine = sep + sep + sep; + + void test(Class clazz, String... opts) throws Exception { + System.err.println("test " + Arrays.asList(opts)); + List args = new ArrayList(); + args.addAll(Arrays.asList(opts)); + args.addAll(Arrays.asList("-classpath", System.getProperty("test.classes"))); + args.add(clazz.getName()); + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + int rc = com.sun.tools.javap.Main.run(args.toArray(new String[args.size()]), pw); + pw.close(); + String out = sw.toString(); + if (rc != 0) + throw new Exception("javap failed unexpectedly: rc=" + rc); + + int count = 0; + int i = out.indexOf(doubleBlankLine, 0); + while (i != -1) { + count++; + i = out.indexOf(doubleBlankLine, i + doubleBlankLine.length()); + } + + if (count > 0) + error(count + " double blank lines found"); + } + + void error(String msg) { + System.err.println("Error: " + msg); + errors++; + } + + int errors = 0; +} + diff --git a/langtools/test/tools/javap/T8033180.java b/langtools/test/tools/javap/T8033180.java new file mode 100644 index 00000000000..e7840eaf03f --- /dev/null +++ b/langtools/test/tools/javap/T8033180.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2014, 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 8033180 + * @summary Bad newline characters + */ + +import java.io.*; +import java.util.*; + +public class T8033180 { + + public static void main(String... args) throws Exception { + new T8033180().run(); + } + + void run() throws Exception { + // fast-track this case, because test cannot fail in this case + if (lineSep.equals(nl)) + return; + + test("-help"); + test("-version"); + + if (errors > 0) + throw new Exception(errors + " errors occurred"); + } + + static final String lineSep = System.getProperty("line.separator"); + static final String nl = "\n"; + + void test(String... opts) throws Exception { + System.err.println("test " + Arrays.asList(opts)); + List args = new ArrayList(); + args.addAll(Arrays.asList(opts)); + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + int rc = com.sun.tools.javap.Main.run(args.toArray(new String[args.size()]), pw); + pw.close(); + String out = sw.toString(); + if (rc != 0) + throw new Exception("javap failed unexpectedly: rc=" + rc); + + // remove all valid platform newline sequences + String out2 = out.replace(lineSep, ""); + + // count the remaining simple newline characters + int count = 0; + int i = out2.indexOf(nl, 0); + while (i != -1) { + count++; + i = out2.indexOf(nl, i + nl.length()); + } + + if (count > 0) + error(count + " newline characters found"); + } + + void error(String msg) { + System.err.println("Error: " + msg); + errors++; + } + + int errors = 0; +} + diff --git a/make/common/JavaCompilation.gmk b/make/common/JavaCompilation.gmk index 618032762d0..c2dd54b2be5 100644 --- a/make/common/JavaCompilation.gmk +++ b/make/common/JavaCompilation.gmk @@ -163,11 +163,12 @@ define SetupArchive # The capture contents macro finds all files (matching the patterns, typically # .class and .prp) that are newer than the jar-file, ie the new content to be put into the jar. + # NOTICE: please leave the parentheses space separated otherwise the AIX build will break! $1_CAPTURE_CONTENTS=$$(foreach src,$$($1_SRCS), \ - (($(FIND) $$(src) -type f -a \( $$($1_FIND_PATTERNS) \) -a -newer $$@ $$($1_GREP_INCLUDES) \ + ( ( $(FIND) $$(src) -type f -a \( $$($1_FIND_PATTERNS) \) -a -newer $$@ $$($1_GREP_INCLUDES) \ $$($1_GREP_EXCLUDES) | $(SED) 's|$$(src)/||g' && \ - $(ECHO) $$(subst $$(src)/,,$$($1_EXTRA_FILES))) > \ - $$(src)/_the.$$($1_JARNAME)_contents) $$(NEWLINE)) + $(ECHO) $$(subst $$(src)/,,$$($1_EXTRA_FILES) ) ) > \ + $$(src)/_the.$$($1_JARNAME)_contents) $$(NEWLINE) ) # The capture metainf macro finds all files below the META-INF directory that are newer than the jar-file. ifeq (,$$($1_SKIP_METAINF)) $1_CAPTURE_METAINF =$$(foreach src,$$($1_SRCS),($(FIND) $$(src)/META-INF -type f -a -newer $$@ 2> /dev/null | $(SED) 's|$$(src)/||g' >> $$(src)/_the.$$($1_JARNAME)_contents ) $$(NEWLINE)) @@ -176,19 +177,20 @@ define SetupArchive # tells us what to remove from the jar-file. $1_CAPTURE_DELETES=$$(foreach src,$$($1_SRCS),($(FIND) $$(src) -name _the.package.deleted -newer $$@ -exec $(SED) 's|$$(src)||g' \{\} >> $$($1_DELETES_FILE) \;) $$(NEWLINE)) # The update contents macro updates the jar file with the previously capture contents. - # xargs is used to trim the whitespace from the contents file, to see if it is empty. + # Use 'wc -w' to see if the contents file is empty. $1_UPDATE_CONTENTS=$$(foreach src,$$($1_SRCS), \ (cd $$(src) && \ - if [ -n "`$(CAT) _the.$$($1_JARNAME)_contents | $(XARGS)`" ]; then \ + if [ "`$(WC) -w _the.$$($1_JARNAME)_contents | $(AWK) '{ print $$$$1 }'`" -gt "0" ]; then \ $(ECHO) " updating" `$(WC) -l _the.$$($1_JARNAME)_contents | $(AWK) '{ print $$$$1 }'` files && \ $(JAR) $$($1_JAR_UPDATE_OPTIONS) $$@ @_the.$$($1_JARNAME)_contents; \ fi) $$(NEWLINE)) # The s-variants of the above macros are used when the jar is created from scratch. + # NOTICE: please leave the parentheses space separated otherwise the AIX build will break! $1_SCAPTURE_CONTENTS=$$(foreach src,$$($1_SRCS), \ - (($(FIND) $$(src) -type f -a \( $$($1_FIND_PATTERNS) \) $$($1_GREP_INCLUDES) \ + ( ( $(FIND) $$(src) -type f -a \( $$($1_FIND_PATTERNS) \) $$($1_GREP_INCLUDES) \ $$($1_GREP_EXCLUDES) | $(SED) 's|$$(src)/||g' && \ - $$(subst $$(src)/,,$(ECHO) $$($1_EXTRA_FILES))) > \ - $$(src)/_the.$$($1_JARNAME)_contents) $$(NEWLINE)) + $$(subst $$(src)/,,$(ECHO) $$($1_EXTRA_FILES) ) ) > \ + $$(src)/_the.$$($1_JARNAME)_contents) $$(NEWLINE) ) ifeq (,$$($1_SKIP_METAINF)) $1_SCAPTURE_METAINF=$$(foreach src,$$($1_SRCS), \ @@ -245,6 +247,8 @@ define SetupArchive $$($1_SUPDATE_CONTENTS) \ $$($1_JARINDEX) && true ) + # Add jar to target list + $1 += $$($1_JAR) endef define SetupZipArchive @@ -305,6 +309,9 @@ define SetupZipArchive $(ECHO) Updating $$($1_NAME) $$(foreach i,$$($1_SRC),(cd $$i && $(ZIP) -qru $$@ . $$($1_ZIP_INCLUDES) $$($1_ZIP_EXCLUDES) -x \*_the.\* $$(addprefix -x$(SPACE),$$(patsubst $$i/%,%,$$($1_EXCLUDE_FILES))) || test "$$$$?" = "12" )$$(NEWLINE)) true $(TOUCH) $$@ + + # Add zip to target list + $1 += $$($1_ZIP) endef define add_file_to_copy @@ -527,16 +534,16 @@ define SetupJavaCompilation # When building in batch, put headers in a temp dir to filter out those that actually # changed before copying them to the real header dir. ifneq (,$$($1_HEADERS)) - $1_HEADERS_ARG := -h $$($1_HEADERS).tmp + $1_HEADERS_ARG := -h $$($1_HEADERS).$1.tmp $$($1_HEADERS)/_the.$1_headers: $$($1_BIN)/_the.$1_batch $(MKDIR) -p $$(@D) - for f in `ls $$($1_HEADERS).tmp`; do \ - if [ ! -f "$$($1_HEADERS)/$$$$f" ] || [ "`$(DIFF) $$($1_HEADERS)/$$$$f $$($1_HEADERS).tmp/$$$$f`" != "" ]; then \ - $(CP) -f $$($1_HEADERS).tmp/$$$$f $$($1_HEADERS)/$$$$f; \ + for f in `ls $$($1_HEADERS).$1.tmp`; do \ + if [ ! -f "$$($1_HEADERS)/$$$$f" ] || [ "`$(DIFF) $$($1_HEADERS)/$$$$f $$($1_HEADERS).$1.tmp/$$$$f`" != "" ]; then \ + $(CP) -f $$($1_HEADERS).$1.tmp/$$$$f $$($1_HEADERS)/$$$$f; \ fi; \ done - $(RM) -r $$($1_HEADERS).tmp + $(RM) -r $$($1_HEADERS).$1.tmp $(TOUCH) $$@ $1 += $$($1_HEADERS)/_the.$1_headers @@ -577,6 +584,9 @@ define SetupJavaCompilation JARINDEX:=$$($1_JARINDEX), \ HEADERS:=$$($1_HEADERS), \ SETUP:=$$($1_SETUP))) + + # Add jar to target list + $1 += $$($1_JAR) endif # Check if a srczip was specified, then setup the rules for the srczip. @@ -587,6 +597,8 @@ define SetupJavaCompilation INCLUDES:=$$($1_INCLUDES), \ EXCLUDES:=$$($1_EXCLUDES), \ EXCLUDE_FILES:=$$($1_EXCLUDE_FILES))) - endif + # Add zip to target list + $1 += $$($1_SRCZIP) + endif endef diff --git a/make/common/NativeCompilation.gmk b/make/common/NativeCompilation.gmk index c4caac486cc..0c1f7df044e 100644 --- a/make/common/NativeCompilation.gmk +++ b/make/common/NativeCompilation.gmk @@ -512,7 +512,7 @@ define SetupNativeCompilation # Generating a static library, ie object file archive. $$($1_TARGET) : $$($1_EXPECTED_OBJS) $$($1_RES) $$(call ARCHIVING_MSG,$$($1_LIBRARY)) - $(AR) $$($1_AR_FLAGS) $(AR_OUT_OPTION)$$($1_TARGET) $$($1_EXPECTED_OBJS) \ + $(AR) $$($1_ARFLAGS) $(AR_OUT_OPTION)$$($1_TARGET) $$($1_EXPECTED_OBJS) \ $$($1_RES) $$($1_LDFLAGS_SUFFIX) $$($1_EXTRA_LDFLAGS_SUFFIX) endif diff --git a/make/common/TextFileProcessing.gmk b/make/common/TextFileProcessing.gmk new file mode 100644 index 00000000000..f5101626b0d --- /dev/null +++ b/make/common/TextFileProcessing.gmk @@ -0,0 +1,234 @@ +# +# Copyright (c) 2013, 2014 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. +# + +define EvalDebugWrapper + $(if $(DEBUG_$1), + $(info -------- <<< Begin expansion of $1) + $(info $2) + $(info -------- >>> End expansion of $1) + ) + + $2 +endef + +# Helper function for SetupTextFileProcessing; adds a rule for a single file +# to be processed. +# param 1 = The namespace argument, e.g. BUILD_VERSION_FILE +# param 2 = the source file name (full path) +# param 3 = the target base directory +# param 4 = the target file name (possibly with a partial path) +define SetupSingleTextFileForProcessing + $(strip $3)/$(strip $4): $2 + $(ECHO) $(LOG_INFO) "Processing $(strip $4)" + $(MKDIR) -p '$$(@D)' + $(RM) '$$@' '$$@.includes.tmp' '$$@.replacements.tmp' + $$($1_INCLUDES_COMMAND_LINE) < '$$<' > '$$@.includes.tmp' + $$($1_REPLACEMENTS_COMMAND_LINE) < '$$@.includes.tmp' > '$$@.replacements.tmp' + $(RM) '$$@.includes.tmp' + $(MV) '$$@.replacements.tmp' '$$@' + + $1 += $(strip $3)/$(strip $4) +endef + +# Setup a text file for processing, in which specified markers are replaced with +# a given text, or with the contents of a given file. +# +# param 1 is the name space for this setup, e.g. BUILD_VERSION_FILE +# param 2, 3, .. etc are named args: +# SOURCE_DIRS one or more directory roots to search for files to process +# SOURCE_FILES complete paths to one or more files to process +# OUTPUT_DIR the directory where we store the processed files. +# OUTPUT_FILE the name of the resulting file. Only allowed if processing a +# single file. +# SOURCE_BASE_DIR a common root to all SOURCE_DIRS. +# If specified, files will keep the path relative to the base in the +# OUTPUT_DIR. Otherwise, the hierarchy will be flattened into the OUTPUT_DIR. +# INCLUDE_FILES only include files matching these patterns (used only with +# SOURCE_DIRS) +# EXCLUDE_FILES exclude files matching these patterns (used only with +# SOURCE_DIRS) +# INCLUDES replace the occurances of a pattern with the contents of a file; +# one or more such include pattern, using the syntax: +# PLACEHOLDER => FILE_TO_INCLUDE ; ... +# Each PLACEHOLDER must be on a single, otherwise empty line (whitespace +# padding is allowed). +# REPLACEMENTS one or more text replacement patterns, using the syntax: +# PATTERN => REPLACEMENT_TEXT ; ... +# +# At least one of INCLUDES or REPLACEMENTS must be present. If both are +# present, then the includes will be processed first, and replacements will be +# done on the included fragments as well. +# +define SetupTextFileProcessing + $(if $(16),$(error Internal makefile error: Too many arguments to SetupTextFileProcessing, please update TextFileProcessing.gmk)) + $(call EvalDebugWrapper,$(strip $1),$(call SetupTextFileProcessingInner,$(strip $1),$2,$3,$4,$5,$6,$7,$8,$9,$(10),$(11),$(12),$(13),$(14),$(15))) +endef + +define SetupTextFileProcessingInner + $(foreach i,2 3 4 5 6 7 8 9 10 11 12 13 14 15, $(if $(strip $($i)),$1_$(strip $($i)))$(NEWLINE)) + $(call LogSetupMacroEntry,SetupTextFileProcessing($1),$2,$3,$4,$5,$6,$7,$8,$9,$(10),$(11),$(12),$(13),$(14),$(15)) + $(if $(16),$(error Internal makefile error: Too many arguments to SetupTextFileProcessing, please update TextFileProcessing.gmk)) + + ifeq ($$($1_REPLACEMENTS)$$($1_INCLUDES),) + $$(error At least one of REPLACEMENTS or INCLUDES are required for $1) + endif + + ifneq ($$($1_SOURCE_FILES),) + ifneq ($$($1_SOURCE_DIRS),) + $$(error Cannot use both SOURCE_FILES and SOURCE_DIRS (in $1)) + endif + ifneq ($$($1_SOURCE_BASE_DIR),) + $$(error Cannot use SOURCE_BASE_DIR without SOURCE_DIRS (in $1)) + endif + ifneq ($$($1_EXCLUDE_FILES)$$($1_INCLUDE_FILES),) + $$(error Cannot INCLUDE/EXCLUDE_FILES with SOURCE_FILES (in $1)) + endif + else + # Find all files in the source trees. Sort to remove duplicates. + $$(foreach src, $$($1_SOURCE_DIRS), $$(if $$(wildcard $$(src)), , \ + $$(error SOURCE_DIRS contains missing directory $$(src) (in $1)))) + ifneq ($$($1_SOURCE_BASE_DIR),) + $$(foreach src, $$($1_SOURCE_DIRS), \ + $$(if $$(findstring $$($1_SOURCE_BASE_DIR), $$(src)), , \ + $$(error SOURCE_DIRS contains directory $$(src) outside \ + SOURCE_BASE_DIR $$($1_SOURCE_BASE_DIR) (in $1)))) + endif + $1_SOURCE_FILES := $$(sort $$(call CacheFind,$$($1_SOURCE_DIRS))) + $1_EXCLUDE_FILES:=$$(foreach i,$$($1_SOURCE_DIRS),$$(addprefix $$i/,$$($1_EXCLUDE_FILES))) + $1_INCLUDE_FILES:=$$(foreach i,$$($1_SOURCE_DIRS),$$(addprefix $$i/,$$($1_INCLUDE_FILES))) + $1_SOURCE_FILES := $$(filter-out $$($1_EXCLUDE_FILES),$$($1_SOURCE_FILES)) + ifneq (,$$(strip $$($1_INCLUDE_FILES))) + $1_SOURCE_FILES := $$(filter $$($1_INCLUDE_FILES),$$($1_SOURCE_FILES)) + endif + ifeq (,$$($1_SOURCE_FILES)) + $$(info No sources found for $1 when looking inside the dirs $$($1_SRC)) + endif + endif + + ifneq ($$($1_REPLACEMENTS),) + # We have a replacement request, prepare it for the recipe + ifneq ($$(findstring /,$$($1_REPLACEMENTS)),) + # Cannot use / as separator + ifneq ($$(findstring @,$$($1_REPLACEMENTS)),) + # Cannot use @ as separator + ifneq ($$(findstring |,$$($1_REPLACEMENTS)),) + # Cannot use | as separator + ifneq ($$(findstring !,$$($1_REPLACEMENTS)),) + # Cannot use ! as separator. Give up. + $$(error No suitable sed separator can be found for $1. Tested /, @, | and !) + else + $1_SEP := ! + endif + else + $1_SEP := | + endif + else + $1_SEP := @ + endif + else + $1_SEP := / + endif + + # If we have a trailing "=>" (i.e. last rule replaces with empty, and is not + # terminated by a ;), add a trailing ; to minimize the number of corner + # cases in the hairy subst expression.. + ifeq ($$(lastword $$($1_REPLACEMENTS)), =>) + $1_REPLACEMENTS += ; + endif + + # If we have a trailing ";", add a dummy replacement, since there is no easy + # way to delete the last word in make. + ifeq ($$(lastword $$($1_REPLACEMENTS)), ;) + $1_REPLACEMENTS += DUMMY_REPLACEMENT => DUMMY_REPLACEMENT + endif + + # Convert the REPLACEMENTS syntax ( A => B ; C => D ; ...) to a sed command + # line (-e "s/A/B/" -e "s/C/D/" ...), basically by replacing '=>' with '/' + # and ';' with '/" -e "s/', and adjusting for edge cases. + $1_REPLACEMENTS_COMMAND_LINE := $(SED) -e "s$$($1_SEP)$$(subst $$(SPACE);$$(SPACE),$$($1_SEP)" \ + -e "s$$($1_SEP),$$(subst $$(SPACE)=>$$(SPACE),$$($1_SEP),$$(subst $$(SPACE)=>$$(SPACE);$$(SPACE),//" \ + -e "s$$($1_SEP),$$(strip $$($1_REPLACEMENTS)))))$$($1_SEP)" + else + # We don't have any replacements, just pipe the file through cat. + $1_REPLACEMENTS_COMMAND_LINE := $(CAT) + endif + + ifneq ($$($1_INCLUDES),) + # We have a include request, prepare it for the recipe. + # Convert an INCLUDE like this PATTERN_1 => file1 ; PATTERN_2 => file2 ; + # into an awk script fragment like this: + # { + # if (matches("PATTERN_1")) { include("file1") } else + # if (matches("PATTERN_2")) { include("file2") } else + # print + # } + + $1_INCLUDES_HEADER_AWK := \ + function matches(pattern) { return ($$$$0 ~ "^[ \t]*" pattern "[ \t]*$$$$") } \ + function include(filename) { while ((getline < filename) == 1) print ; close(filename) } + $1_INCLUDES_PARTIAL_AWK := $$(subst $$(SPACE);,,$$(subst $$(SPACE)=>$$(SPACE),"$$(RIGHT_PAREN)$$(RIGHT_PAREN) \ + { include$$(LEFT_PAREN)",$$(subst $$(SPACE);$$(SPACE),"$$(RIGHT_PAREN) } \ + else if $$(LEFT_PAREN)matches$$(LEFT_PAREN)",$$(strip $$($1_INCLUDES))))) + $1_INCLUDES_COMMAND_LINE := $(NAWK) '$$($1_INCLUDES_HEADER_AWK) \ + { if (matches("$$($1_INCLUDES_PARTIAL_AWK)") } else print }' + else + # We don't have any includes, just pipe the file through cat. + $1_INCLUDES_COMMAND_LINE := $(CAT) + endif + + # Reset target list before populating it + $1 := + + ifneq ($$($1_OUTPUT_FILE),) + ifneq ($$(words $$($1_SOURCE_FILES)), 1) + $$(error Cannot use OUTPUT_FILE for more than one source file (in $1)) + endif + + # Note that $1 is space sensitive and must disobey whitespace rules + $$(eval $$(call SetupSingleTextFileForProcessing,$1, $$($1_SOURCE_FILES), \ + $$(dir $$($1_OUTPUT_FILE)), $$(notdir $$($1_OUTPUT_FILE)))) + else + ifeq ($$($1_OUTPUT_DIR),) + $$(error Neither OUTPUT_FILE nor OUTPUT_DIR was specified (in $1)) + endif + + # Now call add_native_source for each source file we are going to process. + ifeq ($$($1_SOURCE_BASE_DIR),) + # With no base dir specified, put all files in target dir, flattening any + # hierarchies. Note that $1 is space sensitive and must disobey whitespace + # rules. + $$(foreach src, $$($1_SOURCE_FILES), \ + $$(eval $$(call SetupSingleTextFileForProcessing,$1, $$(src), \ + $$($1_OUTPUT_DIR), $$(notdir $$(src))))) + else + # With a base dir, extract the relative portion of the path. Note that $1 + # is space sensitive and must disobey whitespace rules, and so is the + # arguments to patsubst. + $$(foreach src, $$($1_SOURCE_FILES), \ + $$(eval $$(call SetupSingleTextFileForProcessing,$1, $$(src), \ + $$($1_OUTPUT_DIR), $$(patsubst $$($1_SOURCE_BASE_DIR)/%,%,$$(src))))) + endif + endif +endef diff --git a/nashorn/.hgtags b/nashorn/.hgtags index 3d90b565999..6236fcba08e 100644 --- a/nashorn/.hgtags +++ b/nashorn/.hgtags @@ -235,3 +235,4 @@ c3343930c73c58a22c1d58719bb988aeb25a871f jdk8-b119 688f4167f92188482b0d80e315c72f726c6d5ff6 jdk8-b123 32631eed0fad2b31346eb41b29a50227bd29e2ec jdk9-b00 65347535840f045f2cd4341d7466c51009b1b06f jdk9-b01 +b3517e51f40477f10db8bc30a557aa0ea712c274 jdk9-b02 diff --git a/nashorn/src/jdk/internal/dynalink/linker/GuardedTypeConversion.java b/nashorn/src/jdk/internal/dynalink/linker/GuardedTypeConversion.java new file mode 100644 index 00000000000..9baed7c0ebd --- /dev/null +++ b/nashorn/src/jdk/internal/dynalink/linker/GuardedTypeConversion.java @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * 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. + */ + +/* + * This file is available under and governed by the GNU General Public + * License version 2 only, as published by the Free Software Foundation. + * However, the following notice accompanied the original version of this + * file, and Oracle licenses the original version of this file under the BSD + * license: + */ +/* + Copyright 2009-2013 Attila Szegedi + + Licensed under both the Apache License, Version 2.0 (the "Apache License") + and the BSD License (the "BSD License"), with licensee being free to + choose either of the two at their discretion. + + You may not use this file except in compliance with either the Apache + License or the BSD License. + + If you choose to use this file in compliance with the Apache License, the + following notice applies to you: + + You may obtain a copy of the Apache License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied. See the License for the specific language governing + permissions and limitations under the License. + + If you choose to use this file in compliance with the BSD License, the + following notice applies to you: + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the copyright holder nor the names of + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER + BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package jdk.internal.dynalink.linker; + +public class GuardedTypeConversion { + private final GuardedInvocation conversionInvocation; + private final boolean cacheable; + + public GuardedTypeConversion(final GuardedInvocation conversionInvocation, final boolean cacheable) { + this.conversionInvocation = conversionInvocation; + this.cacheable = cacheable; + } + + public GuardedInvocation getConversionInvocation() { + return conversionInvocation; + } + + public boolean isCacheable() { + return cacheable; + } +} diff --git a/nashorn/src/jdk/internal/dynalink/linker/GuardingTypeConverterFactory.java b/nashorn/src/jdk/internal/dynalink/linker/GuardingTypeConverterFactory.java index 30ab9467ec4..5f66e8a4bca 100644 --- a/nashorn/src/jdk/internal/dynalink/linker/GuardingTypeConverterFactory.java +++ b/nashorn/src/jdk/internal/dynalink/linker/GuardingTypeConverterFactory.java @@ -96,19 +96,19 @@ import jdk.internal.dynalink.support.TypeUtilities; */ public interface GuardingTypeConverterFactory { /** - * Returns a guarded invocation that receives an Object of the specified source type and returns an Object converted - * to the specified target type. The type of the invocation is targetType(sourceType), while the type of the guard - * is boolean(sourceType). Note that this will never be invoked for type conversions allowed by the JLS 5.3 "Method - * Invocation Conversion", see {@link TypeUtilities#isMethodInvocationConvertible(Class, Class)} for details. An - * implementation can assume it is never requested to produce a converter for these conversions. + * Returns a guarded type conversion that receives an Object of the specified source type and returns an Object + * converted to the specified target type. The type of the invocation is targetType(sourceType), while the type of + * the guard is boolean(sourceType). Note that this will never be invoked for type conversions allowed by the JLS + * 5.3 "Method Invocation Conversion", see {@link TypeUtilities#isMethodInvocationConvertible(Class, Class)} for + * details. An implementation can assume it is never requested to produce a converter for these conversions. * * @param sourceType source type * @param targetType the target type. - * @return a guarded invocation that can take an object (if it passes guard) and returns another object that is its - * representation coerced into the target type. In case the factory is certain it is unable to handle a conversion, - * it can return null. In case the factory is certain that it can always handle the conversion, it can return an - * unconditional invocation (one whose guard is null). + * @return a guarded type conversion that contains a guarded invocation that can take an object (if it passes guard) + * and return another object that is its representation coerced into the target type. In case the factory is certain + * it is unable to handle a conversion, it can return null. In case the factory is certain that it can always handle + * the conversion, it can return an unconditional invocation (one whose guard is null). * @throws Exception if there was an error during creation of the converter */ - public GuardedInvocation convertToType(Class sourceType, Class targetType) throws Exception; + public GuardedTypeConversion convertToType(Class sourceType, Class targetType) throws Exception; } diff --git a/nashorn/src/jdk/internal/dynalink/support/LinkerServicesImpl.java b/nashorn/src/jdk/internal/dynalink/support/LinkerServicesImpl.java index 4eb0ca9da7e..3b8e7b46abe 100644 --- a/nashorn/src/jdk/internal/dynalink/support/LinkerServicesImpl.java +++ b/nashorn/src/jdk/internal/dynalink/support/LinkerServicesImpl.java @@ -98,6 +98,9 @@ import jdk.internal.dynalink.linker.LinkerServices; */ public class LinkerServicesImpl implements LinkerServices { + private static final RuntimePermission GET_CURRENT_LINK_REQUEST = new RuntimePermission("dynalink.getCurrentLinkRequest"); + private static final ThreadLocal threadLinkRequest = new ThreadLocal<>(); + private final TypeConverterFactory typeConverterFactory; private final GuardingDynamicLinker topLevelLinker; @@ -135,6 +138,26 @@ public class LinkerServicesImpl implements LinkerServices { @Override public GuardedInvocation getGuardedInvocation(LinkRequest linkRequest) throws Exception { - return topLevelLinker.getGuardedInvocation(linkRequest, this); + final LinkRequest prevLinkRequest = threadLinkRequest.get(); + threadLinkRequest.set(linkRequest); + try { + return topLevelLinker.getGuardedInvocation(linkRequest, this); + } finally { + threadLinkRequest.set(prevLinkRequest); + } + } + + /** + * Returns the currently processed link request, or null if the method is invoked outside of the linking process. + * @return the currently processed link request, or null. + * @throws SecurityException if the calling code doesn't have the {@code "dynalink.getCurrentLinkRequest"} runtime + * permission. + */ + public static LinkRequest getCurrentLinkRequest() { + SecurityManager sm = System.getSecurityManager(); + if(sm != null) { + sm.checkPermission(GET_CURRENT_LINK_REQUEST); + } + return threadLinkRequest.get(); } } diff --git a/nashorn/src/jdk/internal/dynalink/support/TypeConverterFactory.java b/nashorn/src/jdk/internal/dynalink/support/TypeConverterFactory.java index 5ab541f33f9..436acad7faf 100644 --- a/nashorn/src/jdk/internal/dynalink/support/TypeConverterFactory.java +++ b/nashorn/src/jdk/internal/dynalink/support/TypeConverterFactory.java @@ -94,6 +94,7 @@ import java.util.List; import jdk.internal.dynalink.linker.ConversionComparator; import jdk.internal.dynalink.linker.ConversionComparator.Comparison; import jdk.internal.dynalink.linker.GuardedInvocation; +import jdk.internal.dynalink.linker.GuardedTypeConversion; import jdk.internal.dynalink.linker.GuardingTypeConverterFactory; import jdk.internal.dynalink.linker.LinkerServices; @@ -134,8 +135,8 @@ public class TypeConverterFactory { @Override protected MethodHandle computeValue(Class targetType) { if(!canAutoConvert(sourceType, targetType)) { - final MethodHandle converter = getTypeConverterNull(sourceType, targetType); - if(converter != null) { + final MethodHandle converter = getCacheableTypeConverter(sourceType, targetType); + if(converter != IDENTITY_CONVERSION) { return converter; } } @@ -145,6 +146,24 @@ public class TypeConverterFactory { } }; + private final ClassValue> canConvert = new ClassValue>() { + @Override + protected ClassMap computeValue(final Class sourceType) { + return new ClassMap(getClassLoader(sourceType)) { + @Override + protected Boolean computeValue(Class targetType) { + try { + return getTypeConverterNull(sourceType, targetType) != null; + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + }; + } + }; + private static final ClassLoader getClassLoader(final Class clazz) { return AccessController.doPrivileged(new PrivilegedAction() { @Override @@ -253,7 +272,7 @@ public class TypeConverterFactory { * @return true if there can be a conversion, false if there can not. */ public boolean canConvert(final Class from, final Class to) { - return canAutoConvert(from, to) || getTypeConverterNull(from, to) != null; + return canAutoConvert(from, to) || canConvert.get(from).get(to).booleanValue(); } /** @@ -294,11 +313,23 @@ public class TypeConverterFactory { return TypeUtilities.isMethodInvocationConvertible(fromType, toType); } - /*private*/ MethodHandle getTypeConverterNull(Class sourceType, Class targetType) { - final MethodHandle converter = converterMap.get(sourceType).get(targetType); + /*private*/ MethodHandle getCacheableTypeConverterNull(Class sourceType, Class targetType) { + final MethodHandle converter = getCacheableTypeConverter(sourceType, targetType); return converter == IDENTITY_CONVERSION ? null : converter; } + /*private*/ MethodHandle getTypeConverterNull(Class sourceType, Class targetType) { + try { + return getCacheableTypeConverterNull(sourceType, targetType); + } catch(NotCacheableConverter e) { + return e.converter; + } + } + + /*private*/ MethodHandle getCacheableTypeConverter(Class sourceType, Class targetType) { + return converterMap.get(sourceType).get(targetType); + } + /** * Given a source and target type, returns a method handle that converts between them. Never returns null; in worst * case it will return an identity conversion (that might fail for some values at runtime). You can use this method @@ -309,22 +340,44 @@ public class TypeConverterFactory { * @return a method handle performing the conversion. */ public MethodHandle getTypeConverter(Class sourceType, Class targetType) { - return converterIdentityMap.get(sourceType).get(targetType); + try { + return converterIdentityMap.get(sourceType).get(targetType); + } catch(NotCacheableConverter e) { + return e.converter; + } } /*private*/ MethodHandle createConverter(Class sourceType, Class targetType) throws Exception { final MethodType type = MethodType.methodType(targetType, sourceType); final MethodHandle identity = IDENTITY_CONVERSION.asType(type); MethodHandle last = identity; + boolean cacheable = true; for(int i = factories.length; i-- > 0;) { - final GuardedInvocation next = factories[i].convertToType(sourceType, targetType); + final GuardedTypeConversion next = factories[i].convertToType(sourceType, targetType); if(next != null) { - next.assertType(type); - last = next.compose(last); + cacheable = cacheable && next.isCacheable(); + final GuardedInvocation conversionInvocation = next.getConversionInvocation(); + conversionInvocation.assertType(type); + last = conversionInvocation.compose(last); } } - return last == identity ? IDENTITY_CONVERSION : last; + if(last == identity) { + return IDENTITY_CONVERSION; + } + if(cacheable) { + return last; + } + throw new NotCacheableConverter(last); } /*private*/ static final MethodHandle IDENTITY_CONVERSION = MethodHandles.identity(Object.class); + + private static class NotCacheableConverter extends RuntimeException { + final MethodHandle converter; + + NotCacheableConverter(final MethodHandle converter) { + super("", null, false, false); + this.converter = converter; + } + } } diff --git a/nashorn/src/jdk/nashorn/api/scripting/NashornScriptEngine.java b/nashorn/src/jdk/nashorn/api/scripting/NashornScriptEngine.java index 8028cce229e..3c4d29fc025 100644 --- a/nashorn/src/jdk/nashorn/api/scripting/NashornScriptEngine.java +++ b/nashorn/src/jdk/nashorn/api/scripting/NashornScriptEngine.java @@ -32,6 +32,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; +import java.lang.invoke.MethodHandles; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.net.URL; @@ -104,7 +105,7 @@ public final class NashornScriptEngine extends AbstractScriptEngine implements C private volatile Property contextProperty; // default options passed to Nashorn Options object - private static final String[] DEFAULT_OPTIONS = new String[] { "-scripting", "-doe" }; + private static final String[] DEFAULT_OPTIONS = new String[] { "-doe" }; // Nashorn script engine error message management private static final String MESSAGES_RESOURCE = "jdk.nashorn.api.scripting.resources.Messages"; @@ -355,7 +356,8 @@ public final class NashornScriptEngine extends AbstractScriptEngine implements C if (! isInterfaceImplemented(clazz, realSelf)) { return null; } - return clazz.cast(JavaAdapterFactory.getConstructor(realSelf.getClass(), clazz).invoke(realSelf)); + return clazz.cast(JavaAdapterFactory.getConstructor(realSelf.getClass(), clazz, + MethodHandles.publicLookup()).invoke(realSelf)); } finally { if (globalChanged) { Context.setGlobal(oldGlobal); diff --git a/nashorn/src/jdk/nashorn/internal/objects/NativeJava.java b/nashorn/src/jdk/nashorn/internal/objects/NativeJava.java index 5e9ac83d5e1..b863e24f2a5 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/NativeJava.java +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeJava.java @@ -28,6 +28,7 @@ package jdk.nashorn.internal.objects; import static jdk.nashorn.internal.runtime.ECMAErrors.typeError; import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED; +import java.lang.invoke.MethodHandles; import java.lang.reflect.Array; import java.util.Collection; import java.util.Deque; @@ -463,12 +464,14 @@ public final class NativeJava { * * We can see several important concepts in the above example: *
          - *
        • Every specified list of Java types will have exactly one extender subclass in Nashorn - repeated invocations - * of {@code extend} for the same list of types will yield the same extender type. It's a generic adapter that - * delegates to whatever JavaScript functions its implementation object has on a per-instance basis.
        • + *
        • Every specified list of Java types will have one extender subclass in Nashorn per caller protection domain - + * repeated invocations of {@code extend} for the same list of types for scripts same protection domain will yield + * the same extender type. It's a generic adapter that delegates to whatever JavaScript functions its implementation + * object has on a per-instance basis.
        • *
        • If the Java method is overloaded (as in the above example {@code List.add()}), then your JavaScript adapter * must be prepared to deal with all overloads.
        • - *
        • You can't invoke {@code super.*()} from adapters for now.
        • + *
        • To invoke super methods from adapters, call them on the adapter instance prefixing them with {@code super$}, + * or use the special {@link #_super(Object, Object) super-adapter}.
        • *
        • It is also possible to specify an ordinary JavaScript object as the last argument to {@code extend}. In that * case, it is treated as a class-level override. {@code extend} will return an extender class where all instances * will have the methods implemented by functions on that object, just as if that object were passed as the last @@ -486,15 +489,18 @@ public final class NativeJava { * t.join() * * As you can see, you don't have to pass any object when you create a new instance of {@code R1} as its - * {@code run()} function was defined already when extending the class. Of course, you can still provide - * instance-level overrides on these objects. The order of precedence is instance-level method, class-level method, - * superclass method, or {@code UnsupportedOperationException} if the superclass method is abstract. If we continue - * our previous example: + * {@code run()} function was defined already when extending the class. If you also want to add instance-level + * overrides on these objects, you will have to repeatedly use {@code extend()} to subclass the class-level adapter. + * For such adapters, the order of precedence is instance-level method, class-level method, superclass method, or + * {@code UnsupportedOperationException} if the superclass method is abstract. If we continue our previous example: *
          -     * var r2 = new R1(function() { print("r2.run() invoked!") })
          +     * var R2 = Java.extend(R1);
          +     * var r2 = new R2(function() { print("r2.run() invoked!") })
                * r2.run()
                * 
          * We'll see it'll print {@code "r2.run() invoked!"}, thus overriding on instance-level the class-level behavior. + * Note that you must use {@code Java.extend} to explicitly create an instance-override adapter class from a + * class-override adapter class, as the class-override adapter class is no longer abstract. *
        • *
        * @param self not used @@ -541,7 +547,18 @@ public final class NativeJava { } catch(final ClassCastException e) { throw typeError("extend.expects.java.types"); } - return JavaAdapterFactory.getAdapterClassFor(stypes, classOverrides); + // Note that while the public API documentation claims self is not used, we actually use it. + // ScriptFunction.findCallMethod will bind the lookup object into it, and we can then use that lookup when + // requesting the adapter class. Note that if Java.extend is invoked with no lookup object, it'll pass the + // public lookup which'll result in generation of a no-permissions adapter. A typical situation this can happen + // is when the extend function is bound. + final MethodHandles.Lookup lookup; + if(self instanceof MethodHandles.Lookup) { + lookup = (MethodHandles.Lookup)self; + } else { + lookup = MethodHandles.publicLookup(); + } + return JavaAdapterFactory.getAdapterClassFor(stypes, classOverrides, lookup); } /** diff --git a/nashorn/src/jdk/nashorn/internal/objects/NativeJavaImporter.java b/nashorn/src/jdk/nashorn/internal/objects/NativeJavaImporter.java index dd9231d9386..56baf66d229 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/NativeJavaImporter.java +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeJavaImporter.java @@ -33,6 +33,7 @@ import jdk.nashorn.internal.objects.annotations.Attribute; import jdk.nashorn.internal.objects.annotations.Constructor; import jdk.nashorn.internal.objects.annotations.Function; import jdk.nashorn.internal.objects.annotations.ScriptClass; +import jdk.nashorn.internal.runtime.Context; import jdk.nashorn.internal.runtime.NativeJavaPackage; import jdk.nashorn.internal.runtime.PropertyMap; import jdk.nashorn.internal.runtime.ScriptObject; @@ -161,8 +162,9 @@ public final class NativeJavaImporter extends ScriptObject { } else if (obj instanceof NativeJavaPackage) { final String pkgName = ((NativeJavaPackage)obj).getName(); final String fullName = pkgName.isEmpty() ? name : (pkgName + "." + name); + final Context context = Global.instance().getContext(); try { - return StaticClass.forClass(Class.forName(fullName)); + return StaticClass.forClass(context.findClass(fullName)); } catch (final ClassNotFoundException e) { // IGNORE } diff --git a/nashorn/src/jdk/nashorn/internal/objects/NativeObject.java b/nashorn/src/jdk/nashorn/internal/objects/NativeObject.java index 5777c96c870..d102c0fb011 100644 --- a/nashorn/src/jdk/nashorn/internal/objects/NativeObject.java +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeObject.java @@ -645,10 +645,12 @@ public final class NativeObject { targetObj.addBoundProperties(source, props); } else if (source instanceof StaticClass) { final Class clazz = ((StaticClass)source).getRepresentedClass(); + Bootstrap.checkReflectionAccess(clazz, true); bindBeanProperties(targetObj, source, BeansLinker.getReadableStaticPropertyNames(clazz), BeansLinker.getWritableStaticPropertyNames(clazz), BeansLinker.getStaticMethodNames(clazz)); } else { final Class clazz = source.getClass(); + Bootstrap.checkReflectionAccess(clazz, false); bindBeanProperties(targetObj, source, BeansLinker.getReadableInstancePropertyNames(clazz), BeansLinker.getWritableInstancePropertyNames(clazz), BeansLinker.getInstanceMethodNames(clazz)); } @@ -663,7 +665,6 @@ public final class NativeObject { propertyNames.addAll(writablePropertyNames); final Class clazz = source.getClass(); - Bootstrap.checkReflectionAccess(clazz); final MethodType getterType = MethodType.methodType(Object.class, clazz); final MethodType setterType = MethodType.methodType(Object.class, clazz, Object.class); diff --git a/nashorn/src/jdk/nashorn/internal/runtime/Context.java b/nashorn/src/jdk/nashorn/internal/runtime/Context.java index 1817ca928ba..e15ddd2c8fb 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/Context.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/Context.java @@ -37,7 +37,6 @@ import java.io.PrintWriter; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.reflect.Modifier; -import java.util.concurrent.atomic.AtomicLong; import java.net.MalformedURLException; import java.net.URL; import java.security.AccessControlContext; @@ -48,7 +47,7 @@ import java.security.Permissions; import java.security.PrivilegedAction; import java.security.ProtectionDomain; import java.util.Map; - +import java.util.concurrent.atomic.AtomicLong; import jdk.internal.org.objectweb.asm.ClassReader; import jdk.internal.org.objectweb.asm.util.CheckClassAdapter; import jdk.nashorn.api.scripting.ScriptObjectMirror; @@ -651,6 +650,19 @@ public final class Context { } } + /** + * Checks that the given package name can be accessed from no permissions context. + * + * @param pkgName package name + * @throw SecurityException if not accessible + */ + public static void checkPackageAccess(final String pkgName) { + final SecurityManager sm = System.getSecurityManager(); + if (sm != null) { + checkPackageAccess(sm, pkgName.endsWith(".")? pkgName : pkgName + "."); + } + } + /** * Checks that the given package can be accessed from no permissions context. * diff --git a/nashorn/src/jdk/nashorn/internal/runtime/NativeJavaPackage.java b/nashorn/src/jdk/nashorn/internal/runtime/NativeJavaPackage.java index a5abacb2134..591fd327c64 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/NativeJavaPackage.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/NativeJavaPackage.java @@ -85,6 +85,8 @@ public final class NativeJavaPackage extends ScriptObject { */ public NativeJavaPackage(final String name, final ScriptObject proto) { super(proto, null); + // defense-in-path, check here for sensitive packages + Context.checkPackageAccess(name); this.name = name; } diff --git a/nashorn/src/jdk/nashorn/internal/runtime/ScriptFunction.java b/nashorn/src/jdk/nashorn/internal/runtime/ScriptFunction.java index ae59855cb4b..d0669d709de 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/ScriptFunction.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/ScriptFunction.java @@ -26,14 +26,13 @@ package jdk.nashorn.internal.runtime; import static jdk.nashorn.internal.codegen.CompilerConstants.virtualCallNoLookup; +import static jdk.nashorn.internal.lookup.Lookup.MH; import static jdk.nashorn.internal.runtime.ECMAErrors.typeError; import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED; -import static jdk.nashorn.internal.lookup.Lookup.MH; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; - import jdk.internal.dynalink.CallSiteDescriptor; import jdk.internal.dynalink.linker.GuardedInvocation; import jdk.internal.dynalink.linker.LinkRequest; @@ -524,7 +523,11 @@ public abstract class ScriptFunction extends ScriptObject { } } else { final MethodHandle callHandle = getBestInvoker(type.dropParameterTypes(0, 1), request.getArguments()); - if (scopeCall) { + if (data.isBuiltin() && "extend".equals(data.getName())) { + // NOTE: the only built-in named "extend" is NativeJava.extend. As a special-case we're binding the + // current lookup as its "this" so it can do security-sensitive creation of adapter classes. + boundHandle = MH.dropArguments(MH.bindTo(callHandle, desc.getLookup()), 0, Object.class, Object.class); + } else if (scopeCall) { // Make a handle that drops the passed "this" argument and substitutes either Global or Undefined // (this, args...) => (args...) boundHandle = MH.bindTo(callHandle, needsWrappedThis() ? Context.getGlobalTrusted() : ScriptRuntime.UNDEFINED); diff --git a/nashorn/src/jdk/nashorn/internal/runtime/linker/AdaptationResult.java b/nashorn/src/jdk/nashorn/internal/runtime/linker/AdaptationResult.java index de1cfccc2a9..52511e5d94e 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/AdaptationResult.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/AdaptationResult.java @@ -47,7 +47,8 @@ final class AdaptationResult { ERROR_NON_PUBLIC_CLASS, ERROR_NO_ACCESSIBLE_CONSTRUCTOR, ERROR_MULTIPLE_SUPERCLASSES, - ERROR_NO_COMMON_LOADER + ERROR_NO_COMMON_LOADER, + ERROR_FINAL_FINALIZER } static final AdaptationResult SUCCESSFUL_RESULT = new AdaptationResult(Outcome.SUCCESS, ""); diff --git a/nashorn/src/jdk/nashorn/internal/runtime/linker/Bootstrap.java b/nashorn/src/jdk/nashorn/internal/runtime/linker/Bootstrap.java index 0d5f68a1e2f..c8f39fcfaca 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/Bootstrap.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/Bootstrap.java @@ -278,9 +278,10 @@ public final class Bootstrap { * {@code java.lang.invoke} package, as well a {@link Class} and any subclass of {@link ClassLoader}) and there is * a security manager in the system, then it checks the {@code nashorn.JavaReflection} {@code RuntimePermission}. * @param clazz the class being tested + * @param isStatic is access checked for static members (or instance members) */ - public static void checkReflectionAccess(Class clazz) { - ReflectionCheckLinker.checkReflectionAccess(clazz); + public static void checkReflectionAccess(Class clazz, boolean isStatic) { + ReflectionCheckLinker.checkReflectionAccess(clazz, isStatic); } /** diff --git a/nashorn/src/jdk/nashorn/internal/runtime/linker/JSObjectLinker.java b/nashorn/src/jdk/nashorn/internal/runtime/linker/JSObjectLinker.java index f0d45317a8a..f3c8284be86 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/JSObjectLinker.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/JSObjectLinker.java @@ -32,6 +32,7 @@ import java.util.HashMap; import java.util.Map; import jdk.internal.dynalink.CallSiteDescriptor; import jdk.internal.dynalink.linker.GuardedInvocation; +import jdk.internal.dynalink.linker.GuardedTypeConversion; import jdk.internal.dynalink.linker.GuardingTypeConverterFactory; import jdk.internal.dynalink.linker.LinkRequest; import jdk.internal.dynalink.linker.LinkerServices; @@ -79,7 +80,7 @@ final class JSObjectLinker implements TypeBasedGuardingDynamicLinker, GuardingTy } @Override - public GuardedInvocation convertToType(final Class sourceType, final Class targetType) throws Exception { + public GuardedTypeConversion convertToType(final Class sourceType, final Class targetType) throws Exception { final boolean sourceIsAlwaysJSObject = JSObject.class.isAssignableFrom(sourceType); if(!sourceIsAlwaysJSObject && !sourceType.isAssignableFrom(JSObject.class)) { return null; @@ -90,7 +91,7 @@ final class JSObjectLinker implements TypeBasedGuardingDynamicLinker, GuardingTy return null; } - return new GuardedInvocation(converter, sourceIsAlwaysJSObject ? null : IS_JSOBJECT_GUARD).asType(MethodType.methodType(targetType, sourceType)); + return new GuardedTypeConversion(new GuardedInvocation(converter, sourceIsAlwaysJSObject ? null : IS_JSOBJECT_GUARD).asType(MethodType.methodType(targetType, sourceType)), true); } diff --git a/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterBytecodeGenerator.java b/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterBytecodeGenerator.java index ef2a6829a25..5aceb206331 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterBytecodeGenerator.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterBytecodeGenerator.java @@ -59,6 +59,7 @@ import java.util.Iterator; import java.util.List; import java.util.Set; import jdk.internal.org.objectweb.asm.ClassWriter; +import jdk.internal.org.objectweb.asm.Handle; import jdk.internal.org.objectweb.asm.Label; import jdk.internal.org.objectweb.asm.Opcodes; import jdk.internal.org.objectweb.asm.Type; @@ -66,21 +67,23 @@ import jdk.internal.org.objectweb.asm.commons.InstructionAdapter; import jdk.nashorn.internal.runtime.Context; import jdk.nashorn.internal.runtime.ScriptFunction; import jdk.nashorn.internal.runtime.ScriptObject; +import jdk.nashorn.internal.runtime.linker.AdaptationResult.Outcome; import sun.reflect.CallerSensitive; /** * Generates bytecode for a Java adapter class. Used by the {@link JavaAdapterFactory}. *

        - * For every protected or public constructor in the extended class, the adapter class will have between one to three + * For every protected or public constructor in the extended class, the adapter class will have either one or two * public constructors (visibility of protected constructors in the extended class is promoted to public). - *

          - *
        • In every case, a constructor taking a trailing ScriptObject argument preceded by original constructor arguments - * is always created on the adapter class. When such a constructor is invoked, the passed ScriptObject's member - * functions are used to implement and/or override methods on the original class, dispatched by name. A single - * JavaScript function will act as the implementation for all overloaded methods of the same name. When methods on an - * adapter instance are invoked, the functions are invoked having the ScriptObject passed in the instance constructor as - * their "this". Subsequent changes to the ScriptObject (reassignment or removal of its functions) are not reflected in - * the adapter instance; the method implementations are bound to functions at constructor invocation time. + *
        • + *
        • For adapter classes with instance-level overrides, a constructor taking a trailing ScriptObject argument preceded + * by original constructor arguments is always created on the adapter class. When such a constructor is invoked, the + * passed ScriptObject's member functions are used to implement and/or override methods on the original class, + * dispatched by name. A single JavaScript function will act as the implementation for all overloaded methods of the + * same name. When methods on an adapter instance are invoked, the functions are invoked having the ScriptObject passed + * in the instance constructor as their "this". Subsequent changes to the ScriptObject (reassignment or removal of its + * functions) are not reflected in the adapter instance; the method implementations are bound to functions at + * constructor invocation time. * {@code java.lang.Object} methods {@code equals}, {@code hashCode}, and {@code toString} can also be overridden. The * only restriction is that since every JavaScript object already has a {@code toString} function through the * {@code Object.prototype}, the {@code toString} in the adapter is only overridden if the passed ScriptObject has a @@ -89,16 +92,17 @@ import sun.reflect.CallerSensitive; *
        • *
        • * If the original types collectively have only one abstract method, or have several of them, but all share the - * same name, an additional constructor is provided for every original constructor; this one takes a ScriptFunction as - * its last argument preceded by original constructor arguments. This constructor will use the passed function as the - * implementation for all abstract methods. For consistency, any concrete methods sharing the single abstract method - * name will also be overridden by the function. When methods on the adapter instance are invoked, the ScriptFunction is - * invoked with global or UNDEFINED as its "this" depending whether the function is non-strict or not. + * same name, an additional constructor for instance-level override adapter is provided for every original constructor; + * this one takes a ScriptFunction as its last argument preceded by original constructor arguments. This constructor + * will use the passed function as the implementation for all abstract methods. For consistency, any concrete methods + * sharing the single abstract method name will also be overridden by the function. When methods on the adapter instance + * are invoked, the ScriptFunction is invoked with UNDEFINED or Global as its "this" depending whether the function is + * strict or not. *
        • *
        • * If the adapter being generated can have class-level overrides, constructors taking same arguments as the superclass - * constructors are also created. These constructors simply delegate to the superclass constructor. They are used to - * create instances of the adapter class with no instance-level overrides. + * constructors are created. These constructors simply delegate to the superclass constructor. They are simply used to + * create instances of the adapter class, with no instance-level overrides, as they don't have them. *
        • *
        *

        @@ -111,16 +115,20 @@ import sun.reflect.CallerSensitive; * source-level script expression new X(a, b) { ... } (which is a proprietary syntax extension Nashorn uses * to resemble Java anonymous classes) is actually equivalent to new X(a, b, { ... }). *

        - * It is possible to create two different classes: those that can have both class-level and instance-level overrides, - * and those that can only have instance-level overrides. When - * {@link JavaAdapterFactory#getAdapterClassFor(Class[], ScriptObject)} is invoked with non-null {@code classOverrides} - * parameter, an adapter class is created that can have class-level overrides, and the passed script object will be used - * as the implementations for its methods, just as in the above case of the constructor taking a script object. Note - * that in the case of class-level overrides, a new adapter class is created on every invocation, and the implementation - * object is bound to the class, not to any instance. All created instances will share these functions. Of course, when - * instances of such a class are being created, they can still take another object (or possibly a function) in their - * constructor's trailing position and thus provide further instance-specific overrides. The order of invocation is - * always instance-specified method, then a class-specified method, and finally the superclass method. + * It is possible to create two different adapter classes: those that can have class-level overrides, and those that can + * have instance-level overrides. When {@link JavaAdapterFactory#getAdapterClassFor(Class[], ScriptObject)} is invoked + * with non-null {@code classOverrides} parameter, an adapter class is created that can have class-level overrides, and + * the passed script object will be used as the implementations for its methods, just as in the above case of the + * constructor taking a script object. Note that in the case of class-level overrides, a new adapter class is created on + * every invocation, and the implementation object is bound to the class, not to any instance. All created instances + * will share these functions. If it is required to have both class-level overrides and instance-level overrides, the + * class-level override adapter class should be subclassed with an instance-override adapter. Since adapters delegate to + * super class when an overriding method handle is not specified, this will behave as expected. It is not possible to + * have both class-level and instance-level overrides in the same class for security reasons: adapter classes are + * defined with a protection domain of their creator code, and an adapter class that has both class and instance level + * overrides would need to have two potentially different protection domains: one for class-based behavior and one for + * instance-based behavior; since Java classes can only belong to a single protection domain, this could not be + * implemented securely. */ final class JavaAdapterBytecodeGenerator { static final Type CONTEXT_TYPE = Type.getType(Context.class); @@ -171,7 +179,6 @@ final class JavaAdapterBytecodeGenerator { private static final int MAX_GENERATED_TYPE_NAME_LENGTH = 255; private static final String CLASS_INIT = ""; - private static final String STATIC_GLOBAL_FIELD_NAME = "staticGlobal"; // Method name prefix for invoking super-methods static final String SUPER_PREFIX = "super$"; @@ -199,6 +206,7 @@ final class JavaAdapterBytecodeGenerator { private final Set finalMethods = new HashSet<>(EXCLUDED); private final Set methodInfos = new HashSet<>(); private boolean autoConvertibleFromFunction = false; + private boolean hasExplicitFinalizer = false; private final ClassWriter cw; @@ -207,8 +215,8 @@ final class JavaAdapterBytecodeGenerator { * @param superClass the superclass the adapter will extend. * @param interfaces the interfaces the adapter will implement. * @param commonLoader the class loader that can see all of superClass, interfaces, and Nashorn classes. - * @param classOverride true to generate the bytecode for the adapter that has both class-level and instance-level - * overrides, false to generate the bytecode for the adapter that only has instance-level overrides. + * @param classOverride true to generate the bytecode for the adapter that has class-level overrides, false to + * generate the bytecode for the adapter that has instance-level overrides. * @throws AdaptationException if the adapter can not be generated for some reason. */ JavaAdapterBytecodeGenerator(final Class superClass, final List> interfaces, @@ -230,8 +238,7 @@ final class JavaAdapterBytecodeGenerator { superClassName = Type.getInternalName(superClass); generatedClassName = getGeneratedClassName(superClass, interfaces); - cw.visit(Opcodes.V1_7, ACC_PUBLIC | ACC_SUPER | ACC_FINAL, generatedClassName, null, superClassName, getInternalTypeNames(interfaces)); - + cw.visit(Opcodes.V1_7, ACC_PUBLIC | ACC_SUPER, generatedClassName, null, superClassName, getInternalTypeNames(interfaces)); generateGlobalFields(); gatherMethods(superClass); @@ -244,17 +251,16 @@ final class JavaAdapterBytecodeGenerator { generateConstructors(); generateMethods(); generateSuperMethods(); + if (hasExplicitFinalizer) { + generateFinalizerMethods(); + } // } cw.visitEnd(); } private void generateGlobalFields() { - cw.visitField(ACC_PRIVATE | ACC_FINAL, GLOBAL_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR, null, null).visitEnd(); + cw.visitField(ACC_PRIVATE | ACC_FINAL | (classOverride ? ACC_STATIC : 0), GLOBAL_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR, null, null).visitEnd(); usedFieldNames.add(GLOBAL_FIELD_NAME); - if(classOverride) { - cw.visitField(ACC_PRIVATE | ACC_FINAL | ACC_STATIC, STATIC_GLOBAL_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR, null, null).visitEnd(); - usedFieldNames.add(STATIC_GLOBAL_FIELD_NAME); - } } JavaAdapterClassLoader createAdapterClassLoader() { @@ -305,11 +311,9 @@ final class JavaAdapterBytecodeGenerator { } private void generateHandleFields() { + final int flags = ACC_PRIVATE | ACC_FINAL | (classOverride ? ACC_STATIC : 0); for (final MethodInfo mi: methodInfos) { - cw.visitField(ACC_PRIVATE | ACC_FINAL, mi.methodHandleInstanceFieldName, METHOD_HANDLE_TYPE_DESCRIPTOR, null, null).visitEnd(); - if(classOverride) { - cw.visitField(ACC_PRIVATE | ACC_FINAL | ACC_STATIC, mi.methodHandleClassFieldName, METHOD_HANDLE_TYPE_DESCRIPTOR, null, null).visitEnd(); - } + cw.visitField(flags, mi.methodHandleFieldName, METHOD_HANDLE_TYPE_DESCRIPTOR, null, null).visitEnd(); } } @@ -337,7 +341,7 @@ final class JavaAdapterBytecodeGenerator { } else { mv.visitInsn(ACONST_NULL); } - mv.putstatic(generatedClassName, mi.methodHandleClassFieldName, METHOD_HANDLE_TYPE_DESCRIPTOR); + mv.putstatic(generatedClassName, mi.methodHandleFieldName, METHOD_HANDLE_TYPE_DESCRIPTOR); } initGlobal = new Label(); mv.goTo(initGlobal); @@ -351,15 +355,15 @@ final class JavaAdapterBytecodeGenerator { mv.aconst(mi.getName()); mv.aconst(Type.getMethodType(mi.type.toMethodDescriptorString())); mv.invokestatic(SERVICES_CLASS_TYPE_NAME, "getHandle", GET_HANDLE_OBJECT_DESCRIPTOR, false); - mv.putstatic(generatedClassName, mi.methodHandleClassFieldName, METHOD_HANDLE_TYPE_DESCRIPTOR); + mv.putstatic(generatedClassName, mi.methodHandleFieldName, METHOD_HANDLE_TYPE_DESCRIPTOR); } if(initGlobal != null) { mv.visitLabel(initGlobal); } - // Assign "staticGlobal = Context.getGlobal()" + // Assign "global = Context.getGlobal()" invokeGetGlobalWithNullCheck(mv); - mv.putstatic(generatedClassName, STATIC_GLOBAL_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR); + mv.putstatic(generatedClassName, GLOBAL_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR); endInitMethod(mv); } @@ -390,21 +394,21 @@ final class JavaAdapterBytecodeGenerator { // Generate a constructor that just delegates to ctor. This is used with class-level overrides, when we want // to create instances without further per-instance overrides. generateDelegatingConstructor(ctor); - } + } else { + // Generate a constructor that delegates to ctor, but takes an additional ScriptObject parameter at the + // beginning of its parameter list. + generateOverridingConstructor(ctor, false); - // Generate a constructor that delegates to ctor, but takes an additional ScriptObject parameter at the - // beginning of its parameter list. - generateOverridingConstructor(ctor, false); - - if (samName != null) { - if (!autoConvertibleFromFunction && ctor.getParameterTypes().length == 0) { - // If the original type only has a single abstract method name, as well as a default ctor, then it can - // be automatically converted from JS function. - autoConvertibleFromFunction = true; + if (samName != null) { + if (!autoConvertibleFromFunction && ctor.getParameterTypes().length == 0) { + // If the original type only has a single abstract method name, as well as a default ctor, then it can + // be automatically converted from JS function. + autoConvertibleFromFunction = true; + } + // If all our abstract methods have a single name, generate an additional constructor, one that takes a + // ScriptFunction as its first parameter and assigns it as the implementation for all abstract methods. + generateOverridingConstructor(ctor, true); } - // If all our abstract methods have a single name, generate an additional constructor, one that takes a - // ScriptFunction as its first parameter and assigns it as the implementation for all abstract methods. - generateOverridingConstructor(ctor, true); } } @@ -430,7 +434,7 @@ final class JavaAdapterBytecodeGenerator { } /** - * Generates a constructor for the adapter class. This constructor will take the same arguments as the supertype + * Generates a constructor for the instance adapter class. This constructor will take the same arguments as the supertype * constructor passed as the argument here, and delegate to it. However, it will take an additional argument of * either ScriptObject or ScriptFunction type (based on the value of the "fromFunction" parameter), and initialize * all the method handle fields of the adapter instance with functions from the script object (or the script @@ -498,7 +502,7 @@ final class JavaAdapterBytecodeGenerator { mv.aconst(Type.getMethodType(mi.type.toMethodDescriptorString())); mv.invokestatic(SERVICES_CLASS_TYPE_NAME, "getHandle", getHandleDescriptor, false); } - mv.putfield(generatedClassName, mi.methodHandleInstanceFieldName, METHOD_HANDLE_TYPE_DESCRIPTOR); + mv.putfield(generatedClassName, mi.methodHandleFieldName, METHOD_HANDLE_TYPE_DESCRIPTOR); } // Assign "this.global = Context.getGlobal()" @@ -536,8 +540,7 @@ final class JavaAdapterBytecodeGenerator { private static class MethodInfo { private final Method method; private final MethodType type; - private String methodHandleInstanceFieldName; - private String methodHandleClassFieldName; + private String methodHandleFieldName; private MethodInfo(final Class clazz, final String name, final Class... argTypes) throws NoSuchMethodException { this(clazz.getDeclaredMethod(name, argTypes)); @@ -567,25 +570,20 @@ final class JavaAdapterBytecodeGenerator { return getName().hashCode() ^ type.hashCode(); } - void setIsCanonical(final Set usedFieldNames, boolean classOverride) { - methodHandleInstanceFieldName = nextName(usedFieldNames); - if(classOverride) { - methodHandleClassFieldName = nextName(usedFieldNames); - } + void setIsCanonical(final JavaAdapterBytecodeGenerator self) { + methodHandleFieldName = self.nextName(getName()); } + } - String nextName(final Set usedFieldNames) { - int i = 0; - final String name = getName(); - String nextName = name; - while (!usedFieldNames.add(nextName)) { - final String ordinal = String.valueOf(i++); - final int maxNameLen = 255 - ordinal.length(); - nextName = (name.length() <= maxNameLen ? name : name.substring(0, maxNameLen)).concat(ordinal); - } - return nextName; + private String nextName(final String name) { + int i = 0; + String nextName = name; + while (!usedFieldNames.add(nextName)) { + final String ordinal = String.valueOf(i++); + final int maxNameLen = 255 - ordinal.length(); + nextName = (name.length() <= maxNameLen ? name : name.substring(0, maxNameLen)).concat(ordinal); } - + return nextName; } private void generateMethods() { @@ -624,23 +622,19 @@ final class JavaAdapterBytecodeGenerator { methodDesc, null, exceptionNames)); mv.visitCode(); - final Label instanceHandleDefined = new Label(); - final Label classHandleDefined = new Label(); + final Label handleDefined = new Label(); final Type asmReturnType = Type.getType(type.returnType()); - // See if we have instance handle defined - mv.visitVarInsn(ALOAD, 0); - mv.getfield(generatedClassName, mi.methodHandleInstanceFieldName, METHOD_HANDLE_TYPE_DESCRIPTOR); - // stack: [instanceHandle] - jumpIfNonNullKeepOperand(mv, instanceHandleDefined); - + // See if we have overriding method handle defined if(classOverride) { - // See if we have the static handle - mv.getstatic(generatedClassName, mi.methodHandleClassFieldName, METHOD_HANDLE_TYPE_DESCRIPTOR); - // stack: [classHandle] - jumpIfNonNullKeepOperand(mv, classHandleDefined); + mv.getstatic(generatedClassName, mi.methodHandleFieldName, METHOD_HANDLE_TYPE_DESCRIPTOR); + } else { + mv.visitVarInsn(ALOAD, 0); + mv.getfield(generatedClassName, mi.methodHandleFieldName, METHOD_HANDLE_TYPE_DESCRIPTOR); } + // stack: [handle] + jumpIfNonNullKeepOperand(mv, handleDefined); // No handle is available, fall back to default behavior if(Modifier.isAbstract(method.getModifiers())) { @@ -654,25 +648,17 @@ final class JavaAdapterBytecodeGenerator { emitSuperCall(mv, method.getDeclaringClass(), name, methodDesc); } - final Label setupGlobal = new Label(); - + mv.visitLabel(handleDefined); + // Load the creatingGlobal object if(classOverride) { - mv.visitLabel(classHandleDefined); // If class handle is defined, load the static defining global - mv.getstatic(generatedClassName, STATIC_GLOBAL_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR); - // stack: [creatingGlobal := classGlobal, classHandle] - mv.goTo(setupGlobal); + mv.getstatic(generatedClassName, GLOBAL_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR); + } else { + mv.visitVarInsn(ALOAD, 0); + mv.getfield(generatedClassName, GLOBAL_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR); } - - mv.visitLabel(instanceHandleDefined); - // If instance handle is defined, load the instance defining global - mv.visitVarInsn(ALOAD, 0); - mv.getfield(generatedClassName, GLOBAL_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR); - // stack: [creatingGlobal := instanceGlobal, instanceHandle] - - // fallthrough to setupGlobal - - // stack: [creatingGlobal, someHandle] + // stack: [creatingGlobal, handle] + final Label setupGlobal = new Label(); mv.visitLabel(setupGlobal); // Determine the first index for a local variable @@ -685,38 +671,39 @@ final class JavaAdapterBytecodeGenerator { final int globalsDifferVar = nextLocalVar++; mv.dup(); - // stack: [creatingGlobal, creatingGlobal, someHandle] + // stack: [creatingGlobal, creatingGlobal, handle] // Emit code for switching to the creating global // ScriptObject currentGlobal = Context.getGlobal(); invokeGetGlobal(mv); mv.dup(); + mv.visitVarInsn(ASTORE, currentGlobalVar); - // stack: [currentGlobal, creatingGlobal, creatingGlobal, someHandle] + // stack: [currentGlobal, creatingGlobal, creatingGlobal, handle] // if(definingGlobal == currentGlobal) { final Label globalsDiffer = new Label(); mv.ifacmpne(globalsDiffer); - // stack: [someGlobal, someHandle] + // stack: [creatingGlobal, handle] // globalsDiffer = false mv.pop(); - // stack: [someHandle] + // stack: [handle] mv.iconst(0); // false - // stack: [false, someHandle] + // stack: [false, handle] final Label invokeHandle = new Label(); mv.goTo(invokeHandle); mv.visitLabel(globalsDiffer); // } else { // Context.setGlobal(definingGlobal); - // stack: [someGlobal, someHandle] + // stack: [creatingGlobal, handle] invokeSetGlobal(mv); - // stack: [someHandle] + // stack: [handle] // globalsDiffer = true mv.iconst(1); - // stack: [true, someHandle] + // stack: [true, handle] mv.visitLabel(invokeHandle); mv.visitVarInsn(ISTORE, globalsDifferVar); - // stack: [someHandle] + // stack: [handle] // Load all parameters back on stack for dynamic invocation. int varOffset = 1; @@ -835,7 +822,7 @@ final class JavaAdapterBytecodeGenerator { endMethod(mv); } - private void emitSuperCall(final InstructionAdapter mv, final Class owner, final String name, final String methodDesc) { + private void emitSuperCall(final InstructionAdapter mv, final Class owner, final String name, final String methodDesc) { mv.visitVarInsn(ALOAD, 0); int nextParam = 1; final Type methodType = Type.getMethodType(methodDesc); @@ -853,6 +840,42 @@ final class JavaAdapterBytecodeGenerator { mv.areturn(methodType.getReturnType()); } + private void generateFinalizerMethods() { + final String finalizerDelegateName = nextName("access$"); + generateFinalizerDelegate(finalizerDelegateName); + generateFinalizerOverride(finalizerDelegateName); + } + + private void generateFinalizerDelegate(final String finalizerDelegateName) { + // Generate a delegate that will be invoked from the no-permission trampoline. Note it can be private, as we'll + // refer to it with a MethodHandle constant pool entry in the overridden finalize() method (see + // generateFinalizerOverride()). + final InstructionAdapter mv = new InstructionAdapter(cw.visitMethod(ACC_PRIVATE | ACC_STATIC, + finalizerDelegateName, Type.getMethodDescriptor(Type.VOID_TYPE, OBJECT_TYPE), null, null)); + + // Simply invoke super.finalize() + mv.visitVarInsn(ALOAD, 0); + mv.checkcast(Type.getType(generatedClassName)); + mv.invokespecial(superClassName, "finalize", Type.getMethodDescriptor(Type.VOID_TYPE), false); + + mv.visitInsn(RETURN); + endMethod(mv); + } + + private void generateFinalizerOverride(final String finalizerDelegateName) { + final InstructionAdapter mv = new InstructionAdapter(cw.visitMethod(ACC_PUBLIC, "finalize", + VOID_NOARG_METHOD_DESCRIPTOR, null, null)); + // Overridden finalizer will take a MethodHandle to the finalizer delegating method, ... + mv.aconst(new Handle(Opcodes.H_INVOKESTATIC, generatedClassName, finalizerDelegateName, + Type.getMethodDescriptor(Type.VOID_TYPE, OBJECT_TYPE))); + mv.visitVarInsn(ALOAD, 0); + // ...and invoke it through JavaAdapterServices.invokeNoPermissions + mv.invokestatic(SERVICES_CLASS_TYPE_NAME, "invokeNoPermissions", + Type.getMethodDescriptor(METHOD_HANDLE_TYPE, OBJECT_TYPE), false); + mv.visitInsn(RETURN); + endMethod(mv); + } + private static String[] getExceptionNames(final Class[] exceptions) { final String[] exceptionNames = new String[exceptions.length]; for (int i = 0; i < exceptions.length; ++i) { @@ -873,16 +896,32 @@ final class JavaAdapterBytecodeGenerator { * class. * @param type the type defining the methods. */ - private void gatherMethods(final Class type) { + private void gatherMethods(final Class type) throws AdaptationException { if (Modifier.isPublic(type.getModifiers())) { final Method[] typeMethods = type.isInterface() ? type.getMethods() : type.getDeclaredMethods(); for (final Method typeMethod: typeMethods) { + final String name = typeMethod.getName(); + if(name.startsWith(SUPER_PREFIX)) { + continue; + } final int m = typeMethod.getModifiers(); if (Modifier.isStatic(m)) { continue; } if (Modifier.isPublic(m) || Modifier.isProtected(m)) { + // Is it a "finalize()"? + if(name.equals("finalize") && typeMethod.getParameterCount() == 0) { + if(type != Object.class) { + hasExplicitFinalizer = true; + if(Modifier.isFinal(m)) { + // Must be able to override an explicit finalizer + throw new AdaptationException(Outcome.ERROR_FINAL_FINALIZER, type.getCanonicalName()); + } + } + continue; + } + final MethodInfo mi = new MethodInfo(typeMethod); if (Modifier.isFinal(m) || isCallerSensitive(typeMethod)) { finalMethods.add(mi); @@ -890,7 +929,7 @@ final class JavaAdapterBytecodeGenerator { if (Modifier.isAbstract(m)) { abstractMethodNames.add(mi.getName()); } - mi.setIsCanonical(usedFieldNames, classOverride); + mi.setIsCanonical(this); } } } @@ -911,7 +950,7 @@ final class JavaAdapterBytecodeGenerator { } } - private void gatherMethods(final List> classes) { + private void gatherMethods(final List> classes) throws AdaptationException { for(final Class c: classes) { gatherMethods(c); } diff --git a/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterClassLoader.java b/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterClassLoader.java index 0062cd5f893..fa162d88d47 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterClassLoader.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterClassLoader.java @@ -27,10 +27,6 @@ package jdk.nashorn.internal.runtime.linker; import java.security.AccessControlContext; import java.security.AccessController; -import java.security.AllPermission; -import java.security.CodeSigner; -import java.security.CodeSource; -import java.security.Permissions; import java.security.PrivilegedAction; import java.security.ProtectionDomain; import java.security.SecureClassLoader; @@ -45,35 +41,29 @@ import jdk.internal.dynalink.beans.StaticClass; */ @SuppressWarnings("javadoc") final class JavaAdapterClassLoader { - private static final ProtectionDomain GENERATED_PROTECTION_DOMAIN = createGeneratedProtectionDomain(); private static final AccessControlContext CREATE_LOADER_ACC_CTXT = ClassAndLoader.createPermAccCtxt("createClassLoader"); private final String className; - private volatile byte[] classBytes; + private final byte[] classBytes; JavaAdapterClassLoader(String className, byte[] classBytes) { this.className = className.replace('/', '.'); this.classBytes = classBytes; } - /** - * clear classBytes after loading class. - */ - void clearClassBytes() { - this.classBytes = null; - } - /** * Loads the generated adapter class into the JVM. * @param parentLoader the parent class loader for the generated class loader + * @param protectionDomain the protection domain for the generated class * @return the generated adapter class */ - StaticClass generateClass(final ClassLoader parentLoader) { + StaticClass generateClass(final ClassLoader parentLoader, final ProtectionDomain protectionDomain) { + assert protectionDomain != null; return AccessController.doPrivileged(new PrivilegedAction() { @Override public StaticClass run() { try { - return StaticClass.forClass(Class.forName(className, true, createClassLoader(parentLoader))); + return StaticClass.forClass(Class.forName(className, true, createClassLoader(parentLoader, protectionDomain))); } catch (final ClassNotFoundException e) { throw new AssertionError(e); // cannot happen } @@ -88,7 +78,7 @@ final class JavaAdapterClassLoader { // it even more by separating its invocation into a separate static method on the adapter class, but then someone // with ability to introspect on the class and use setAccessible(true) on it could invoke the method. It's a // security tradeoff... - private ClassLoader createClassLoader(final ClassLoader parentLoader) { + private ClassLoader createClassLoader(final ClassLoader parentLoader, final ProtectionDomain protectionDomain) { return new SecureClassLoader(parentLoader) { private final ClassLoader myLoader = getClass().getClassLoader(); @@ -112,21 +102,10 @@ final class JavaAdapterClassLoader { protected Class findClass(final String name) throws ClassNotFoundException { if(name.equals(className)) { assert classBytes != null : "what? already cleared .class bytes!!"; - return defineClass(name, classBytes, 0, classBytes.length, GENERATED_PROTECTION_DOMAIN); + return defineClass(name, classBytes, 0, classBytes.length, protectionDomain); } throw new ClassNotFoundException(name); } }; } - - private static ProtectionDomain createGeneratedProtectionDomain() { - // Generated classes need to have AllPermission. Since we require the "createClassLoader" RuntimePermission, we - // can create a class loader that'll load new classes with any permissions. Our generated classes are just - // delegating adapters, so having AllPermission can't cause anything wrong; the effective set of permissions for - // the executing script functions will still be limited by the permissions of the caller and the permissions of - // the script. - final Permissions permissions = new Permissions(); - permissions.add(new AllPermission()); - return new ProtectionDomain(new CodeSource(null, (CodeSigner[])null), permissions); - } } diff --git a/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterFactory.java b/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterFactory.java index b221d000034..5e0b890a6d2 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterFactory.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterFactory.java @@ -29,17 +29,23 @@ import static jdk.nashorn.internal.lookup.Lookup.MH; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodHandles.Lookup; import java.lang.invoke.MethodType; import java.lang.reflect.Modifier; import java.security.AccessControlContext; import java.security.AccessController; +import java.security.CodeSigner; +import java.security.CodeSource; +import java.security.Permissions; import java.security.PrivilegedAction; +import java.security.ProtectionDomain; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import jdk.internal.dynalink.beans.StaticClass; import jdk.internal.dynalink.support.LinkRequestImpl; import jdk.nashorn.internal.objects.NativeJava; @@ -70,6 +76,8 @@ import jdk.nashorn.internal.runtime.ScriptObject; @SuppressWarnings("javadoc") public final class JavaAdapterFactory { + private static final ProtectionDomain MINIMAL_PERMISSION_DOMAIN = createMinimalPermissionDomain(); + // context with permissions needs for AdapterInfo creation private static final AccessControlContext CREATE_ADAPTER_INFO_ACC_CTXT = ClassAndLoader.createPermAccCtxt("createClassLoader", "getClassLoader", @@ -99,20 +107,45 @@ public final class JavaAdapterFactory { * @param classOverrides a JavaScript object with functions serving as the class-level overrides and * implementations. These overrides are defined for all instances of the class, and can be further overridden on a * per-instance basis by passing additional objects in the constructor. + * @param lookup the lookup object identifying the caller class. The generated adapter class will have the + * protection domain of the caller class iff the lookup object is full-strength, otherwise it will be completely + * unprivileged. * @return an adapter class. See this class' documentation for details on the generated adapter class. * @throws ECMAException with a TypeError if the adapter class can not be generated because the original class is * final, non-public, or has no public or protected constructors. */ - public static StaticClass getAdapterClassFor(final Class[] types, ScriptObject classOverrides) { + public static StaticClass getAdapterClassFor(final Class[] types, ScriptObject classOverrides, final MethodHandles.Lookup lookup) { + return getAdapterClassFor(types, classOverrides, getProtectionDomain(lookup)); + } + + private static StaticClass getAdapterClassFor(final Class[] types, ScriptObject classOverrides, final ProtectionDomain protectionDomain) { assert types != null && types.length > 0; final SecurityManager sm = System.getSecurityManager(); if (sm != null) { for (Class type : types) { // check for restricted package access Context.checkPackageAccess(type); + // check for classes, interfaces in reflection + ReflectionCheckLinker.checkReflectionAccess(type, true); } } - return getAdapterInfo(types).getAdapterClassFor(classOverrides); + return getAdapterInfo(types).getAdapterClass(classOverrides, protectionDomain); + } + + private static ProtectionDomain getProtectionDomain(final MethodHandles.Lookup lookup) { + if((lookup.lookupModes() & Lookup.PRIVATE) == 0) { + return MINIMAL_PERMISSION_DOMAIN; + } + return getProtectionDomain(lookup.lookupClass()); + } + + private static ProtectionDomain getProtectionDomain(final Class clazz) { + return AccessController.doPrivileged(new PrivilegedAction() { + @Override + public ProtectionDomain run() { + return clazz.getProtectionDomain(); + } + }); } /** @@ -127,10 +160,10 @@ public final class JavaAdapterFactory { * @return the constructor method handle. * @throws Exception if anything goes wrong */ - public static MethodHandle getConstructor(final Class sourceType, final Class targetType) throws Exception { - final StaticClass adapterClass = getAdapterClassFor(new Class[] { targetType }, null); + public static MethodHandle getConstructor(final Class sourceType, final Class targetType, final MethodHandles.Lookup lookup) throws Exception { + final StaticClass adapterClass = getAdapterClassFor(new Class[] { targetType }, null, lookup); return MH.bindTo(Bootstrap.getLinkerServices().getGuardedInvocation(new LinkRequestImpl( - NashornCallSiteDescriptor.get(MethodHandles.publicLookup(), "dyn:new", + NashornCallSiteDescriptor.get(lookup, "dyn:new", MethodType.methodType(targetType, StaticClass.class, sourceType), 0), false, adapterClass, null)).getInvocation(), adapterClass); } @@ -218,10 +251,10 @@ public final class JavaAdapterFactory { private static final ClassAndLoader SCRIPT_OBJECT_LOADER = new ClassAndLoader(ScriptObject.class, true); private final ClassLoader commonLoader; - private final JavaAdapterClassLoader adapterGenerator; - // Cacheable adapter class that is shared by all adapter instances that don't have class overrides, only - // instance overrides. - final StaticClass instanceAdapterClass; + // TODO: soft reference the JavaAdapterClassLoader objects. They can be recreated when needed. + private final JavaAdapterClassLoader classAdapterGenerator; + private final JavaAdapterClassLoader instanceAdapterGenerator; + private final Map instanceAdapters = new ConcurrentHashMap<>(); final boolean autoConvertibleFromFunction; final AdaptationResult adaptationResult; @@ -229,11 +262,8 @@ public final class JavaAdapterFactory { this.commonLoader = findCommonLoader(definingLoader); final JavaAdapterBytecodeGenerator gen = new JavaAdapterBytecodeGenerator(superClass, interfaces, commonLoader, false); this.autoConvertibleFromFunction = gen.isAutoConvertibleFromFunction(); - final JavaAdapterClassLoader jacl = gen.createAdapterClassLoader(); - this.instanceAdapterClass = jacl.generateClass(commonLoader); - // loaded Class - no need to keep class bytes around - jacl.clearClassBytes(); - this.adapterGenerator = new JavaAdapterBytecodeGenerator(superClass, interfaces, commonLoader, true).createAdapterClassLoader(); + instanceAdapterGenerator = gen.createAdapterClassLoader(); + this.classAdapterGenerator = new JavaAdapterBytecodeGenerator(superClass, interfaces, commonLoader, true).createAdapterClassLoader(); this.adaptationResult = AdaptationResult.SUCCESSFUL_RESULT; } @@ -243,22 +273,42 @@ public final class JavaAdapterFactory { AdapterInfo(final AdaptationResult adaptationResult) { this.commonLoader = null; - this.adapterGenerator = null; - this.instanceAdapterClass = null; + this.classAdapterGenerator = null; + this.instanceAdapterGenerator = null; this.autoConvertibleFromFunction = false; this.adaptationResult = adaptationResult; } - StaticClass getAdapterClassFor(ScriptObject classOverrides) { + StaticClass getAdapterClass(final ScriptObject classOverrides, final ProtectionDomain protectionDomain) { if(adaptationResult.getOutcome() != AdaptationResult.Outcome.SUCCESS) { throw adaptationResult.typeError(); } - if(classOverrides == null) { + return classOverrides == null ? getInstanceAdapterClass(protectionDomain) : + getClassAdapterClass(classOverrides, protectionDomain); + } + + private StaticClass getInstanceAdapterClass(final ProtectionDomain protectionDomain) { + CodeSource codeSource = protectionDomain.getCodeSource(); + if(codeSource == null) { + codeSource = MINIMAL_PERMISSION_DOMAIN.getCodeSource(); + } + StaticClass instanceAdapterClass = instanceAdapters.get(codeSource); + if(instanceAdapterClass != null) { return instanceAdapterClass; } + // Any "unknown source" code source will default to no permission domain. + final ProtectionDomain effectiveDomain = codeSource.equals(MINIMAL_PERMISSION_DOMAIN.getCodeSource()) ? + MINIMAL_PERMISSION_DOMAIN : protectionDomain; + + instanceAdapterClass = instanceAdapterGenerator.generateClass(commonLoader, effectiveDomain); + final StaticClass existing = instanceAdapters.putIfAbsent(codeSource, instanceAdapterClass); + return existing == null ? instanceAdapterClass : existing; + } + + private StaticClass getClassAdapterClass(final ScriptObject classOverrides, final ProtectionDomain protectionDomain) { JavaAdapterServices.setClassOverrides(classOverrides); try { - return adapterGenerator.generateClass(commonLoader); + return classAdapterGenerator.generateClass(commonLoader, protectionDomain); } finally { JavaAdapterServices.setClassOverrides(null); } @@ -283,4 +333,12 @@ public final class JavaAdapterFactory { throw new AdaptationException(AdaptationResult.Outcome.ERROR_NO_COMMON_LOADER, classAndLoader.getRepresentativeClass().getCanonicalName()); } } + + private static ProtectionDomain createMinimalPermissionDomain() { + // Generated classes need to have at least the permission to access Nashorn runtime and runtime.linker packages. + final Permissions permissions = new Permissions(); + permissions.add(new RuntimePermission("accessClassInPackage.jdk.nashorn.internal.runtime")); + permissions.add(new RuntimePermission("accessClassInPackage.jdk.nashorn.internal.runtime.linker")); + return new ProtectionDomain(new CodeSource(null, (CodeSigner[])null), permissions); + } } diff --git a/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterServices.java b/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterServices.java index 06ae1b1109b..1188c6b6f73 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterServices.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/JavaAdapterServices.java @@ -25,10 +25,28 @@ package jdk.nashorn.internal.runtime.linker; +import static jdk.internal.org.objectweb.asm.Opcodes.ACC_FINAL; +import static jdk.internal.org.objectweb.asm.Opcodes.ACC_PUBLIC; +import static jdk.internal.org.objectweb.asm.Opcodes.ACC_STATIC; +import static jdk.internal.org.objectweb.asm.Opcodes.ACC_SUPER; +import static jdk.internal.org.objectweb.asm.Opcodes.ALOAD; +import static jdk.internal.org.objectweb.asm.Opcodes.RETURN; import static jdk.nashorn.internal.runtime.ECMAErrors.typeError; import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; +import java.security.AccessController; +import java.security.CodeSigner; +import java.security.CodeSource; +import java.security.Permissions; +import java.security.PrivilegedAction; +import java.security.ProtectionDomain; +import java.security.SecureClassLoader; +import jdk.internal.org.objectweb.asm.ClassWriter; +import jdk.internal.org.objectweb.asm.Opcodes; +import jdk.internal.org.objectweb.asm.Type; +import jdk.internal.org.objectweb.asm.commons.InstructionAdapter; import jdk.nashorn.internal.runtime.Context; import jdk.nashorn.internal.runtime.ScriptFunction; import jdk.nashorn.internal.runtime.ScriptObject; @@ -40,6 +58,7 @@ import jdk.nashorn.internal.runtime.Undefined; */ public final class JavaAdapterServices { private static final ThreadLocal classOverrides = new ThreadLocal<>(); + private static final MethodHandle NO_PERMISSIONS_INVOKER = createNoPermissionsInvoker(); private JavaAdapterServices() { } @@ -55,7 +74,7 @@ public final class JavaAdapterServices { */ public static MethodHandle getHandle(final ScriptFunction fn, final MethodType type) { // JS "this" will be global object or undefined depending on if 'fn' is strict or not - return adaptHandle(fn.getBoundInvokeHandle(fn.isStrict()? ScriptRuntime.UNDEFINED : Context.getGlobal()), type); + return bindAndAdaptHandle(fn, fn.isStrict()? ScriptRuntime.UNDEFINED : Context.getGlobal(), type); } /** @@ -83,7 +102,7 @@ public final class JavaAdapterServices { final Object fnObj = sobj.get(name); if (fnObj instanceof ScriptFunction) { - return adaptHandle(((ScriptFunction)fnObj).getBoundInvokeHandle(sobj), type); + return bindAndAdaptHandle((ScriptFunction)fnObj, sobj, type); } else if(fnObj == null || fnObj instanceof Undefined) { return null; } else { @@ -103,11 +122,67 @@ public final class JavaAdapterServices { return overrides; } + /** + * Takes a method handle and an argument to it, and invokes the method handle passing it the argument. Basically + * equivalent to {@code method.invokeExact(arg)}, except that the method handle will be invoked in a protection + * domain with absolutely no permissions. + * @param method the method handle to invoke. The handle must have the exact type of {@code void(Object)}. + * @param arg the argument to pass to the handle. + * @throws Throwable if anything goes wrong. + */ + public static void invokeNoPermissions(final MethodHandle method, final Object arg) throws Throwable { + NO_PERMISSIONS_INVOKER.invokeExact(method, arg); + } + static void setClassOverrides(ScriptObject overrides) { classOverrides.set(overrides); } - private static MethodHandle adaptHandle(final MethodHandle handle, final MethodType type) { - return Bootstrap.getLinkerServices().asType(ScriptObject.pairArguments(handle, type, false), type); + private static MethodHandle bindAndAdaptHandle(final ScriptFunction fn, final Object self, final MethodType type) { + return Bootstrap.getLinkerServices().asType(ScriptObject.pairArguments(fn.getBoundInvokeHandle(self), type, false), type); + } + + private static MethodHandle createNoPermissionsInvoker() { + final String className = "NoPermissionsInvoker"; + + final ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); + cw.visit(Opcodes.V1_7, ACC_PUBLIC | ACC_SUPER | ACC_FINAL, className, null, "java/lang/Object", null); + final Type objectType = Type.getType(Object.class); + final Type methodHandleType = Type.getType(MethodHandle.class); + final InstructionAdapter mv = new InstructionAdapter(cw.visitMethod(ACC_PUBLIC | ACC_STATIC, "invoke", + Type.getMethodDescriptor(Type.VOID_TYPE, methodHandleType, objectType), null, null)); + mv.visitCode(); + mv.visitVarInsn(ALOAD, 0); + mv.visitVarInsn(ALOAD, 1); + mv.invokevirtual(methodHandleType.getInternalName(), "invokeExact", Type.getMethodDescriptor( + Type.VOID_TYPE, objectType), false); + mv.visitInsn(RETURN); + mv.visitMaxs(0, 0); + mv.visitEnd(); + cw.visitEnd(); + final byte[] bytes = cw.toByteArray(); + + final ClassLoader loader = AccessController.doPrivileged(new PrivilegedAction() { + @Override + public ClassLoader run() { + return new SecureClassLoader(null) { + @Override + protected Class findClass(String name) throws ClassNotFoundException { + if(name.equals(className)) { + return defineClass(name, bytes, 0, bytes.length, new ProtectionDomain( + new CodeSource(null, (CodeSigner[])null), new Permissions())); + } + throw new ClassNotFoundException(name); + } + }; + } + }); + + try { + return MethodHandles.lookup().findStatic(Class.forName(className, true, loader), "invoke", + MethodType.methodType(void.class, MethodHandle.class, Object.class)); + } catch(ReflectiveOperationException e) { + throw new AssertionError(e.getMessage(), e); + } } } diff --git a/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornBottomLinker.java b/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornBottomLinker.java index c94df15b192..88ccf5a4847 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornBottomLinker.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornBottomLinker.java @@ -25,19 +25,20 @@ package jdk.nashorn.internal.runtime.linker; +import static jdk.nashorn.internal.lookup.Lookup.MH; import static jdk.nashorn.internal.runtime.ECMAErrors.typeError; import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED; -import static jdk.nashorn.internal.lookup.Lookup.MH; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodType; import java.lang.reflect.Method; import java.lang.reflect.Modifier; -import java.util.Map; import java.util.HashMap; +import java.util.Map; import jdk.internal.dynalink.CallSiteDescriptor; import jdk.internal.dynalink.beans.BeansLinker; import jdk.internal.dynalink.linker.GuardedInvocation; +import jdk.internal.dynalink.linker.GuardedTypeConversion; import jdk.internal.dynalink.linker.GuardingDynamicLinker; import jdk.internal.dynalink.linker.GuardingTypeConverterFactory; import jdk.internal.dynalink.linker.LinkRequest; @@ -134,9 +135,9 @@ final class NashornBottomLinker implements GuardingDynamicLinker, GuardingTypeCo } @Override - public GuardedInvocation convertToType(final Class sourceType, final Class targetType) throws Exception { + public GuardedTypeConversion convertToType(final Class sourceType, final Class targetType) throws Exception { final GuardedInvocation gi = convertToTypeNoCast(sourceType, targetType); - return gi == null ? null : gi.asType(MH.type(targetType, sourceType)); + return gi == null ? null : new GuardedTypeConversion(gi.asType(MH.type(targetType, sourceType)), true); } /** diff --git a/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornLinker.java b/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornLinker.java index 27e4573f572..0ac5f9a56e5 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornLinker.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornLinker.java @@ -29,7 +29,10 @@ import static jdk.nashorn.internal.lookup.Lookup.MH; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodHandles.Lookup; import java.lang.reflect.Modifier; +import java.security.AccessController; +import java.security.PrivilegedAction; import java.util.Deque; import java.util.List; import java.util.Map; @@ -37,16 +40,17 @@ import javax.script.Bindings; import jdk.internal.dynalink.CallSiteDescriptor; import jdk.internal.dynalink.linker.ConversionComparator; import jdk.internal.dynalink.linker.GuardedInvocation; +import jdk.internal.dynalink.linker.GuardedTypeConversion; import jdk.internal.dynalink.linker.GuardingTypeConverterFactory; import jdk.internal.dynalink.linker.LinkRequest; import jdk.internal.dynalink.linker.LinkerServices; import jdk.internal.dynalink.linker.TypeBasedGuardingDynamicLinker; import jdk.internal.dynalink.support.Guards; +import jdk.internal.dynalink.support.LinkerServicesImpl; import jdk.nashorn.api.scripting.JSObject; import jdk.nashorn.api.scripting.ScriptObjectMirror; import jdk.nashorn.api.scripting.ScriptUtils; import jdk.nashorn.internal.objects.NativeArray; -import jdk.nashorn.internal.runtime.Context; import jdk.nashorn.internal.runtime.JSType; import jdk.nashorn.internal.runtime.ScriptFunction; import jdk.nashorn.internal.runtime.ScriptObject; @@ -100,9 +104,16 @@ final class NashornLinker implements TypeBasedGuardingDynamicLinker, GuardingTyp } @Override - public GuardedInvocation convertToType(final Class sourceType, final Class targetType) throws Exception { - final GuardedInvocation gi = convertToTypeNoCast(sourceType, targetType); - return gi == null ? null : gi.asType(MH.type(targetType, sourceType)); + public GuardedTypeConversion convertToType(final Class sourceType, final Class targetType) throws Exception { + GuardedInvocation gi = convertToTypeNoCast(sourceType, targetType); + if(gi != null) { + return new GuardedTypeConversion(gi.asType(MH.type(targetType, sourceType)), true); + } + gi = getSamTypeConverter(sourceType, targetType); + if(gi != null) { + return new GuardedTypeConversion(gi.asType(MH.type(targetType, sourceType)), false); + } + return null; } /** @@ -126,12 +137,7 @@ final class NashornLinker implements TypeBasedGuardingDynamicLinker, GuardingTyp return arrayConverter; } - final GuardedInvocation mirrorConverter = getMirrorConverter(sourceType, targetType); - if(mirrorConverter != null) { - return mirrorConverter; - } - - return getSamTypeConverter(sourceType, targetType); + return getMirrorConverter(sourceType, targetType); } /** @@ -150,13 +156,23 @@ final class NashornLinker implements TypeBasedGuardingDynamicLinker, GuardingTyp final boolean isSourceTypeGeneric = sourceType.isAssignableFrom(ScriptFunction.class); if ((isSourceTypeGeneric || ScriptFunction.class.isAssignableFrom(sourceType)) && isAutoConvertibleFromFunction(targetType)) { - final MethodHandle ctor = JavaAdapterFactory.getConstructor(ScriptFunction.class, targetType); + final MethodHandle ctor = JavaAdapterFactory.getConstructor(ScriptFunction.class, targetType, getCurrentLookup()); assert ctor != null; // if isAutoConvertibleFromFunction() returned true, then ctor must exist. return new GuardedInvocation(ctor, isSourceTypeGeneric ? IS_SCRIPT_FUNCTION : null); } return null; } + private static Lookup getCurrentLookup() { + final LinkRequest currentRequest = AccessController.doPrivileged(new PrivilegedAction() { + @Override + public LinkRequest run() { + return LinkerServicesImpl.getCurrentLinkRequest(); + } + }); + return currentRequest == null ? MethodHandles.publicLookup() : currentRequest.getCallSiteDescriptor().getLookup(); + } + /** * Returns a guarded invocation that converts from a source type that is NativeArray to a Java array or List or * Deque type. diff --git a/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornPrimitiveLinker.java b/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornPrimitiveLinker.java index ccd95fda642..5cc1cd2c632 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornPrimitiveLinker.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornPrimitiveLinker.java @@ -31,6 +31,7 @@ import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import jdk.internal.dynalink.linker.ConversionComparator; import jdk.internal.dynalink.linker.GuardedInvocation; +import jdk.internal.dynalink.linker.GuardedTypeConversion; import jdk.internal.dynalink.linker.GuardingTypeConverterFactory; import jdk.internal.dynalink.linker.LinkRequest; import jdk.internal.dynalink.linker.LinkerServices; @@ -75,13 +76,13 @@ final class NashornPrimitiveLinker implements TypeBasedGuardingDynamicLinker, Gu * @return a conditional converter from source to target type */ @Override - public GuardedInvocation convertToType(final Class sourceType, final Class targetType) { + public GuardedTypeConversion convertToType(final Class sourceType, final Class targetType) { final MethodHandle mh = JavaArgumentConverters.getConverter(targetType); if (mh == null) { return null; } - return new GuardedInvocation(mh, canLinkTypeStatic(sourceType) ? null : GUARD_PRIMITIVE).asType(mh.type().changeParameterType(0, sourceType)); + return new GuardedTypeConversion(new GuardedInvocation(mh, canLinkTypeStatic(sourceType) ? null : GUARD_PRIMITIVE).asType(mh.type().changeParameterType(0, sourceType)), true); } /** diff --git a/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornStaticClassLinker.java b/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornStaticClassLinker.java index 72ed97666d0..272b4ec0ac4 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornStaticClassLinker.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/NashornStaticClassLinker.java @@ -65,7 +65,7 @@ final class NashornStaticClassLinker implements TypeBasedGuardingDynamicLinker { return null; } final Class receiverClass = ((StaticClass) self).getRepresentedClass(); - Bootstrap.checkReflectionAccess(receiverClass); + Bootstrap.checkReflectionAccess(receiverClass, true); final CallSiteDescriptor desc = request.getCallSiteDescriptor(); // We intercept "new" on StaticClass instances to provide additional capabilities if ("new".equals(desc.getNameToken(CallSiteDescriptor.OPERATOR))) { @@ -76,7 +76,8 @@ final class NashornStaticClassLinker implements TypeBasedGuardingDynamicLinker { if (NashornLinker.isAbstractClass(receiverClass)) { // Change this link request into a link request on the adapter class. final Object[] args = request.getArguments(); - args[0] = JavaAdapterFactory.getAdapterClassFor(new Class[] { receiverClass }, null); + args[0] = JavaAdapterFactory.getAdapterClassFor(new Class[] { receiverClass }, null, + linkRequest.getCallSiteDescriptor().getLookup()); final LinkRequest adapterRequest = request.replaceArguments(request.getCallSiteDescriptor(), args); final GuardedInvocation gi = checkNullConstructor(delegate(linkerServices, adapterRequest), receiverClass); // Finally, modify the guard to test for the original abstract class. diff --git a/nashorn/src/jdk/nashorn/internal/runtime/linker/ReflectionCheckLinker.java b/nashorn/src/jdk/nashorn/internal/runtime/linker/ReflectionCheckLinker.java index 6772cbee037..8fc76c19ed6 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/ReflectionCheckLinker.java +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/ReflectionCheckLinker.java @@ -26,6 +26,7 @@ package jdk.nashorn.internal.runtime.linker; import java.lang.reflect.Modifier; +import java.lang.reflect.Proxy; import jdk.internal.dynalink.CallSiteDescriptor; import jdk.internal.dynalink.linker.GuardedInvocation; import jdk.internal.dynalink.linker.LinkRequest; @@ -47,6 +48,7 @@ final class ReflectionCheckLinker implements TypeBasedGuardingDynamicLinker{ if (type == Class.class || ClassLoader.class.isAssignableFrom(type)) { return true; } + final String name = type.getName(); return name.startsWith("java.lang.reflect.") || name.startsWith("java.lang.invoke."); } @@ -59,9 +61,25 @@ final class ReflectionCheckLinker implements TypeBasedGuardingDynamicLinker{ return null; } - static void checkReflectionAccess(Class clazz) { + private static boolean isReflectiveCheckNeeded(final Class type, final boolean isStatic) { + // special handling for Proxy subclasses + if (Proxy.class.isAssignableFrom(type)) { + if (Proxy.isProxyClass(type)) { + // real Proxy class - filter only static access + return isStatic; + } + + // fake Proxy subclass - filter it always! + return true; + } + + // check for any other reflective Class + return isReflectionClass(type); + } + + static void checkReflectionAccess(final Class clazz, final boolean isStatic) { final SecurityManager sm = System.getSecurityManager(); - if (sm != null && isReflectionClass(clazz)) { + if (sm != null && isReflectiveCheckNeeded(clazz, isStatic)) { checkReflectionPermission(sm); } } @@ -78,6 +96,7 @@ final class ReflectionCheckLinker implements TypeBasedGuardingDynamicLinker{ if (desc.getNameTokenCount() > CallSiteDescriptor.NAME_OPERAND && "static".equals(desc.getNameToken(CallSiteDescriptor.NAME_OPERAND))) { if (Context.isAccessibleClass((Class)self) && !isReflectionClass((Class)self)) { + // If "getProp:static" passes access checks, allow access. return; } diff --git a/nashorn/src/jdk/nashorn/internal/runtime/resources/Messages.properties b/nashorn/src/jdk/nashorn/internal/runtime/resources/Messages.properties index 1a37ba7bf76..95993c9f40e 100644 --- a/nashorn/src/jdk/nashorn/internal/runtime/resources/Messages.properties +++ b/nashorn/src/jdk/nashorn/internal/runtime/resources/Messages.properties @@ -130,6 +130,7 @@ type.error.extend.ERROR_NON_PUBLIC_CLASS=Can not extend/implement non-public cla type.error.extend.ERROR_NO_ACCESSIBLE_CONSTRUCTOR=Can not extend class {0} as it has no public or protected constructors. type.error.extend.ERROR_MULTIPLE_SUPERCLASSES=Can not extend multiple classes {0}. At most one of the specified types can be a class, the rest must all be interfaces. type.error.extend.ERROR_NO_COMMON_LOADER=Can not find a common class loader for ScriptObject and {0}. +type.error.extend.ERROR_FINAL_FINALIZER=Can not extend class because {0} has a final finalize method. type.error.no.constructor.matches.args=Can not construct {0} with the passed arguments; they do not match any of its constructor signatures. type.error.no.method.matches.args=Can not invoke method {0} with the passed arguments; they do not match any of its method signatures. type.error.method.not.constructor=Java method {0} can't be used as a constructor. diff --git a/nashorn/test/script/basic/JDK-8014647.js b/nashorn/test/script/basic/JDK-8014647.js index 8ecc21101d5..8d06848f557 100644 --- a/nashorn/test/script/basic/JDK-8014647.js +++ b/nashorn/test/script/basic/JDK-8014647.js @@ -32,9 +32,10 @@ var RunnableImpl1 = Java.extend(java.lang.Runnable, function() { print("I'm runn var RunnableImpl2 = Java.extend(java.lang.Runnable, function() { print("I'm runnable 2!") }) var r1 = new RunnableImpl1() var r2 = new RunnableImpl2() -var r3 = new RunnableImpl2(function() { print("I'm runnable 3!") }) +var RunnableImpl3 = Java.extend(RunnableImpl2); +var r3 = new RunnableImpl3({ run: function() { print("I'm runnable 3!") }}) r1.run() r2.run() r3.run() -print("r1.class === r2.class: " + (r1.class === r2.class)) -print("r2.class === r3.class: " + (r2.class === r3.class)) +print("r1.class !== r2.class: " + (r1.class !== r2.class)) +print("r2.class !== r3.class: " + (r2.class !== r3.class)) diff --git a/nashorn/test/script/basic/JDK-8014647.js.EXPECTED b/nashorn/test/script/basic/JDK-8014647.js.EXPECTED index 641a13b1d45..f4f51dcc38f 100644 --- a/nashorn/test/script/basic/JDK-8014647.js.EXPECTED +++ b/nashorn/test/script/basic/JDK-8014647.js.EXPECTED @@ -1,5 +1,5 @@ I'm runnable 1! I'm runnable 2! I'm runnable 3! -r1.class === r2.class: false -r2.class === r3.class: true +r1.class !== r2.class: true +r2.class !== r3.class: true diff --git a/nashorn/test/script/basic/javaclassoverrides.js b/nashorn/test/script/basic/javaclassoverrides.js index e7ad61d841f..2fa7a85720d 100644 --- a/nashorn/test/script/basic/javaclassoverrides.js +++ b/nashorn/test/script/basic/javaclassoverrides.js @@ -46,7 +46,8 @@ var R2 = Java.extend(java.lang.Runnable, { var r1 = new R1 var r2 = new R2 // Create one with an instance-override too -var r3 = new R2(function() { print("r3.run() invoked") }) +var R3 = Java.extend(R2) +var r3 = new R3({ run: function() { print("r3.run() invoked") }}) // Run 'em - we're passing them through a Thread to make sure they indeed // are full-blown Runnables @@ -60,9 +61,9 @@ runInThread(r2) runInThread(r3) // Two class-override classes differ -print("r1.class != r2.class: " + (r1.class != r2.class)) -// However, adding instance-overrides doesn't change the class -print("r2.class == r3.class: " + (r2.class == r3.class)) +print("r1.class !== r2.class: " + (r1.class !== r2.class)) +// instance-override class also differs +print("r2.class !== r3.class: " + (r2.class !== r3.class)) function checkAbstract(r) { try { @@ -77,10 +78,10 @@ function checkAbstract(r) { // overrides nor instance overrides are present var RAbstract = Java.extend(java.lang.Runnable, {}) checkAbstract(new RAbstract()) // class override (empty) -checkAbstract(new RAbstract() {}) // class+instance override (empty) +checkAbstract(new (Java.extend(RAbstract))() {}) // class+instance override (empty) // Check we delegate to superclass if neither class // overrides nor instance overrides are present var ExtendsList = Java.extend(java.util.ArrayList, {}) print("(new ExtendsList).size() = " + (new ExtendsList).size()) -print("(new ExtendsList(){}).size() = " + (new ExtendsList(){}).size()) \ No newline at end of file +print("(new (Java.extend(ExtendsList)){}).size() = " + (new (Java.extend(ExtendsList)){}).size()) diff --git a/nashorn/test/script/basic/javaclassoverrides.js.EXPECTED b/nashorn/test/script/basic/javaclassoverrides.js.EXPECTED index 6c534302d48..ceec09cff85 100644 --- a/nashorn/test/script/basic/javaclassoverrides.js.EXPECTED +++ b/nashorn/test/script/basic/javaclassoverrides.js.EXPECTED @@ -1,9 +1,9 @@ R1.run() invoked R2.run() invoked r3.run() invoked -r1.class != r2.class: true -r2.class == r3.class: true +r1.class !== r2.class: true +r2.class !== r3.class: true Got exception: java.lang.UnsupportedOperationException Got exception: java.lang.UnsupportedOperationException (new ExtendsList).size() = 0 -(new ExtendsList(){}).size() = 0 +(new (Java.extend(ExtendsList)){}).size() = 0 diff --git a/nashorn/test/script/sandbox/classbind.js b/nashorn/test/script/sandbox/classbind.js new file mode 100644 index 00000000000..2dabb3e23d8 --- /dev/null +++ b/nashorn/test/script/sandbox/classbind.js @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * 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. + */ + +/** + * Try to bind properties of StaticClass representing Class. + * + * @test + * @bug JDK-8032943: Improve reflection in Nashorn + */ + + +var obj = {} + +try { + Object.bindProperties(obj, Java.type("java.lang.Class")); + fail("SecurityException should have been thrown"); +} catch (e) { + if (! (e instanceof java.lang.SecurityException)) { + fail("SecurityException expected, got " + e); + } +} diff --git a/nashorn/test/script/sandbox/classloader.js b/nashorn/test/script/sandbox/classloader.js index 7676496060d..9de1a5c37f2 100644 --- a/nashorn/test/script/sandbox/classloader.js +++ b/nashorn/test/script/sandbox/classloader.js @@ -26,6 +26,7 @@ * * @test * @security + * @bug JDK-8032954: Nashorn: extend Java.extend */ try { @@ -39,3 +40,24 @@ try { } } +try { + Java.extend(Java.type('java.lang.ClassLoader')); + fail("should have thrown SecurityException"); +} catch (e) { + if (e instanceof java.lang.SecurityException) { + print(e); + } else { + fail("expected SecurityException, got " + e); + } +} + +try { + Java.extend(Java.type("javax.management.loading.MLet")); + fail("should have thrown SecurityException"); +} catch (e) { + if (e instanceof java.lang.SecurityException) { + print(e); + } else { + fail("expected SecurityException, got " + e); + } +} diff --git a/nashorn/test/script/sandbox/classloader.js.EXPECTED b/nashorn/test/script/sandbox/classloader.js.EXPECTED index 356053d4e1d..8c241912f36 100644 --- a/nashorn/test/script/sandbox/classloader.js.EXPECTED +++ b/nashorn/test/script/sandbox/classloader.js.EXPECTED @@ -1 +1,3 @@ java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "nashorn.JavaReflection") +java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "nashorn.JavaReflection") +java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "nashorn.JavaReflection") diff --git a/nashorn/test/script/sandbox/javaextend.js b/nashorn/test/script/sandbox/javaextend.js index 33cc6b01fa0..60eab74d14c 100644 --- a/nashorn/test/script/sandbox/javaextend.js +++ b/nashorn/test/script/sandbox/javaextend.js @@ -51,6 +51,21 @@ try { print(e) } +// Can't extend a class with explicit non-overridable finalizer +try { + Java.extend(model("ClassWithFinalFinalizer")) +} catch(e) { + print(e) +} + +// Can't extend a class with inherited non-overridable finalizer +try { + Java.extend(model("ClassWithInheritedFinalFinalizer")) +} catch(e) { + print(e) +} + + // Can't extend two classes try { Java.extend(java.lang.Thread,java.lang.Number) diff --git a/nashorn/test/script/sandbox/javaextend.js.EXPECTED b/nashorn/test/script/sandbox/javaextend.js.EXPECTED index 69c7818929c..c72774595e8 100644 --- a/nashorn/test/script/sandbox/javaextend.js.EXPECTED +++ b/nashorn/test/script/sandbox/javaextend.js.EXPECTED @@ -1,6 +1,8 @@ TypeError: Can not extend final class jdk.nashorn.test.models.FinalClass. TypeError: Can not extend class jdk.nashorn.test.models.NoAccessibleConstructorClass as it has no public or protected constructors. TypeError: Can not extend/implement non-public class/interface jdk.nashorn.test.models.NonPublicClass. +TypeError: Can not extend class because jdk.nashorn.test.models.ClassWithFinalFinalizer has a final finalize method. +TypeError: Can not extend class because jdk.nashorn.test.models.ClassWithFinalFinalizer has a final finalize method. TypeError: Can not extend multiple classes java.lang.Number and java.lang.Thread. At most one of the specified types can be a class, the rest must all be interfaces. abcdabcd run-object diff --git a/nashorn/test/src/jdk/nashorn/api/scripting/ScriptEngineSecurityTest.java b/nashorn/test/src/jdk/nashorn/api/scripting/ScriptEngineSecurityTest.java index 4f036101bfa..6d0d40f6042 100644 --- a/nashorn/test/src/jdk/nashorn/api/scripting/ScriptEngineSecurityTest.java +++ b/nashorn/test/src/jdk/nashorn/api/scripting/ScriptEngineSecurityTest.java @@ -27,11 +27,14 @@ package jdk.nashorn.api.scripting; import static org.testng.Assert.fail; +import java.lang.reflect.Method; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Proxy; import java.util.Objects; import javax.script.Invocable; import javax.script.ScriptEngine; -import javax.script.ScriptException; import javax.script.ScriptEngineManager; +import javax.script.ScriptException; import org.testng.annotations.Test; /** @@ -127,6 +130,23 @@ public class ScriptEngineSecurityTest { } } + + @Test + public void securitySystemExitFromFinalizerThread() throws ScriptException { + if (System.getSecurityManager() == null) { + // pass vacuously + return; + } + + final ScriptEngineManager m = new ScriptEngineManager(); + final ScriptEngine e = m.getEngineByName("nashorn"); + e.eval("var o = Java.extend(Java.type('javax.imageio.spi.ServiceRegistry'), { deregisterAll: this.exit.bind(null, 1234)});\n" + + "new o(new java.util.ArrayList().iterator())"); + System.gc(); + System.runFinalization(); + // NOTE: this test just exits the VM if it fails. + } + @Test public void securitySystemLoadLibrary() { if (System.getSecurityManager() == null) { @@ -183,4 +203,98 @@ public class ScriptEngineSecurityTest { } } } + + // @bug 8032948: Nashorn linkages awry + public static class FakeProxy extends Proxy { + public FakeProxy(InvocationHandler ih) { + super(ih); + } + + public static Class makeProxyClass(ClassLoader cl, Class... ifaces) { + return Proxy.getProxyClass(cl, ifaces); + } + } + + @Test + public void fakeProxySubclassAccessCheckTest() throws ScriptException { + if (System.getSecurityManager() == null) { + // pass vacuously + return; + } + + final ScriptEngineManager m = new ScriptEngineManager(); + final ScriptEngine e = m.getEngineByName("nashorn"); + + e.put("name", ScriptEngineSecurityTest.class.getName()); + e.put("cl", ScriptEngineSecurityTest.class.getClassLoader()); + e.put("intfs", new Class[] { Runnable.class }); + + String getClass = "Java.type(name + '$FakeProxy').getProxyClass(cl, intfs);"; + + // Should not be able to call static methods of Proxy via fake subclass + try { + Class c = (Class)e.eval(getClass); + fail("should have thrown SecurityException"); + } catch (final Exception exp) { + if (! (exp instanceof SecurityException)) { + fail("SecurityException expected, got " + exp); + } + } + } + + @Test + public void fakeProxySubclassAccessCheckTest2() throws ScriptException { + if (System.getSecurityManager() == null) { + // pass vacuously + return; + } + + final ScriptEngineManager m = new ScriptEngineManager(); + final ScriptEngine e = m.getEngineByName("nashorn"); + + e.put("name", ScriptEngineSecurityTest.class.getName()); + e.put("cl", ScriptEngineSecurityTest.class.getClassLoader()); + e.put("intfs", new Class[] { Runnable.class }); + + String getClass = "Java.type(name + '$FakeProxy').makeProxyClass(cl, intfs);"; + + // Should not be able to call static methods of Proxy via fake subclass + try { + Class c = (Class)e.eval(getClass); + fail("should have thrown SecurityException"); + } catch (final Exception exp) { + if (! (exp instanceof SecurityException)) { + fail("SecurityException expected, got " + exp); + } + } + } + + @Test + public static void proxyStaticAccessCheckTest() throws ScriptException { + final ScriptEngineManager m = new ScriptEngineManager(); + final ScriptEngine e = m.getEngineByName("nashorn"); + final Runnable r = (Runnable)Proxy.newProxyInstance( + ScriptEngineTest.class.getClassLoader(), + new Class[] { Runnable.class }, + new InvocationHandler() { + @Override + public Object invoke(Object p, Method m, Object[] a) { + return null; + } + }); + + e.put("rc", r.getClass()); + e.put("cl", ScriptEngineSecurityTest.class.getClassLoader()); + e.put("intfs", new Class[] { Runnable.class }); + + // make sure static methods of Proxy is not accessible via subclass + try { + e.eval("rc.static.getProxyClass(cl, intfs)"); + fail("Should have thrown SecurityException"); + } catch (final Exception exp) { + if (! (exp instanceof SecurityException)) { + fail("SecurityException expected, got " + exp); + } + } + } } diff --git a/nashorn/test/src/jdk/nashorn/api/scripting/ScriptEngineTest.java b/nashorn/test/src/jdk/nashorn/api/scripting/ScriptEngineTest.java index 2c7df64d4b6..df8696d8e4c 100644 --- a/nashorn/test/src/jdk/nashorn/api/scripting/ScriptEngineTest.java +++ b/nashorn/test/src/jdk/nashorn/api/scripting/ScriptEngineTest.java @@ -33,7 +33,9 @@ import static org.testng.Assert.fail; import java.io.PrintWriter; import java.io.StringReader; import java.io.StringWriter; +import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; +import java.lang.reflect.Proxy; import java.util.concurrent.Callable; import javax.script.Compilable; import javax.script.CompiledScript; @@ -535,6 +537,29 @@ public class ScriptEngineTest { assertEquals(e.eval("Window.funcJSObject(obj)"), "hello"); } + // @bug 8032948: Nashorn linkages awry + @Test + public void checkProxyAccess() throws ScriptException { + final ScriptEngineManager m = new ScriptEngineManager(); + final ScriptEngine e = m.getEngineByName("nashorn"); + final boolean[] reached = new boolean[1]; + final Runnable r = (Runnable)Proxy.newProxyInstance( + ScriptEngineTest.class.getClassLoader(), + new Class[] { Runnable.class }, + new InvocationHandler() { + @Override + public Object invoke(Object p, Method m, Object[] a) { + reached[0] = true; + return null; + } + }); + + e.put("r", r); + e.eval("r.run()"); + + assertTrue(reached[0]); + } + private static final String LINE_SEPARATOR = System.getProperty("line.separator"); // Returns String that would be the result of calling PrintWriter.println diff --git a/nashorn/test/src/jdk/nashorn/test/models/ClassWithFinalFinalizer.java b/nashorn/test/src/jdk/nashorn/test/models/ClassWithFinalFinalizer.java new file mode 100644 index 00000000000..ba0d86d8a96 --- /dev/null +++ b/nashorn/test/src/jdk/nashorn/test/models/ClassWithFinalFinalizer.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package jdk.nashorn.test.models; + +public class ClassWithFinalFinalizer { + protected final void finalize() { + } +} diff --git a/nashorn/test/src/jdk/nashorn/test/models/ClassWithInheritedFinalFinalizer.java b/nashorn/test/src/jdk/nashorn/test/models/ClassWithInheritedFinalFinalizer.java new file mode 100644 index 00000000000..80393fbbe2b --- /dev/null +++ b/nashorn/test/src/jdk/nashorn/test/models/ClassWithInheritedFinalFinalizer.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package jdk.nashorn.test.models; + +public class ClassWithInheritedFinalFinalizer extends ClassWithFinalFinalizer { +}