# HG changeset patch # User amurillo # Date 1467751837 25200 # Node ID 0ac35f4c39362a323482ce3229262563ea3c7366 # Parent 25903fca58762a902995113c74027b7a6306fea0# Parent f49988e2d9828892698b902293ede43af173e267 Merge diff -r 25903fca5876 -r 0ac35f4c3936 .hgtags --- a/.hgtags Thu Jun 30 14:57:30 2016 -0700 +++ b/.hgtags Tue Jul 05 13:50:37 2016 -0700 @@ -367,3 +367,4 @@ 7693aa00e131493ceb42b93305e2f014c9922a3b jdk-9+122 d53037a90c441cb528dc41c30827985de0e67c62 jdk-9+123 2a5697a98620c4f40e4a1a71478464399b8878de jdk-9+124 +3aa52182b3ad7c5b3a61cf05a59dd07e4c5884e5 jdk-9+125 diff -r 25903fca5876 -r 0ac35f4c3936 .hgtags-top-repo --- a/.hgtags-top-repo Thu Jun 30 14:57:30 2016 -0700 +++ b/.hgtags-top-repo Tue Jul 05 13:50:37 2016 -0700 @@ -367,3 +367,4 @@ 346be2df0f5b31d423807f53a719d1b9a67f3354 jdk-9+122 405d811c0d7b9b48ff718ae6c240b732f098c028 jdk-9+123 f80c841ae2545eaf9acd2724bccc305d98cefbe2 jdk-9+124 +9aa7d40f3a453f51e47f4c1b19eff5740a74a9f8 jdk-9+125 diff -r 25903fca5876 -r 0ac35f4c3936 common/autoconf/boot-jdk.m4 --- a/common/autoconf/boot-jdk.m4 Thu Jun 30 14:57:30 2016 -0700 +++ b/common/autoconf/boot-jdk.m4 Tue Jul 05 13:50:37 2016 -0700 @@ -359,25 +359,32 @@ # Starting amount of heap memory. ADD_JVM_ARG_IF_OK([-Xms64M],boot_jdk_jvmargs_big,[$JAVA]) + BOOTCYCLE_JVM_ARGS_BIG=-Xms64M - # Maximum amount of heap memory. - # Maximum stack size. - JVM_MAX_HEAP=`expr $MEMORY_SIZE / 2` + # Maximum amount of heap memory and stack size. + JVM_HEAP_LIMIT_32="1024" + # Running a 64 bit JVM allows for and requires a bigger heap + JVM_HEAP_LIMIT_64="1600" + STACK_SIZE_32=768 + STACK_SIZE_64=1536 + JVM_HEAP_LIMIT_GLOBAL=`expr $MEMORY_SIZE / 2` + if test "$JVM_HEAP_LIMIT_GLOBAL" -lt "$JVM_HEAP_LIMIT_32"; then + JVM_HEAP_LIMIT_32=$JVM_HEAP_LIMIT_GLOBAL + fi + if test "$JVM_HEAP_LIMIT_GLOBAL" -lt "$JVM_HEAP_LIMIT_64"; then + JVM_HEAP_LIMIT_64=$JVM_HEAP_LIMIT_GLOBAL + fi + if test "$JVM_HEAP_LIMIT_GLOBAL" -lt "512"; then + JVM_HEAP_LIMIT_32=512 + JVM_HEAP_LIMIT_64=512 + fi + if test "x$BOOT_JDK_BITS" = "x32"; then - if test "$JVM_MAX_HEAP" -gt "1100"; then - JVM_MAX_HEAP=1100 - elif test "$JVM_MAX_HEAP" -lt "512"; then - JVM_MAX_HEAP=512 - fi - STACK_SIZE=768 + STACK_SIZE=$STACK_SIZE_32 + JVM_MAX_HEAP=$JVM_HEAP_LIMIT_32 else - # Running a 64 bit JVM allows for and requires a bigger heap - if test "$JVM_MAX_HEAP" -gt "1600"; then - JVM_MAX_HEAP=1600 - elif test "$JVM_MAX_HEAP" -lt "512"; then - JVM_MAX_HEAP=512 - fi - STACK_SIZE=1536 + STACK_SIZE=$STACK_SIZE_64 + JVM_MAX_HEAP=$JVM_HEAP_LIMIT_64 fi ADD_JVM_ARG_IF_OK([-Xmx${JVM_MAX_HEAP}M],boot_jdk_jvmargs_big,[$JAVA]) ADD_JVM_ARG_IF_OK([-XX:ThreadStackSize=$STACK_SIZE],boot_jdk_jvmargs_big,[$JAVA]) @@ -387,6 +394,19 @@ JAVA_FLAGS_BIG=$boot_jdk_jvmargs_big AC_SUBST(JAVA_FLAGS_BIG) + if test "x$OPENJDK_TARGET_CPU_BITS" = "x32"; then + BOOTCYCLE_MAX_HEAP=$JVM_HEAP_LIMIT_32 + BOOTCYCLE_STACK_SIZE=$STACK_SIZE_32 + else + BOOTCYCLE_MAX_HEAP=$JVM_HEAP_LIMIT_64 + BOOTCYCLE_STACK_SIZE=$STACK_SIZE_64 + fi + BOOTCYCLE_JVM_ARGS_BIG="$BOOTCYCLE_JVM_ARGS_BIG -Xmx${BOOTCYCLE_MAX_HEAP}M" + BOOTCYCLE_JVM_ARGS_BIG="$BOOTCYCLE_JVM_ARGS_BIG -XX:ThreadStackSize=$BOOTCYCLE_STACK_SIZE" + AC_MSG_CHECKING([flags for bootcycle boot jdk java command for big workloads]) + AC_MSG_RESULT([$BOOTCYCLE_JVM_ARGS_BIG]) + AC_SUBST(BOOTCYCLE_JVM_ARGS_BIG) + # By default, the main javac compilations use big JAVA_FLAGS_JAVAC="$JAVA_FLAGS_BIG" AC_SUBST(JAVA_FLAGS_JAVAC) diff -r 25903fca5876 -r 0ac35f4c3936 common/autoconf/bootcycle-spec.gmk.in --- a/common/autoconf/bootcycle-spec.gmk.in Thu Jun 30 14:57:30 2016 -0700 +++ b/common/autoconf/bootcycle-spec.gmk.in Tue Jul 05 13:50:37 2016 -0700 @@ -64,5 +64,7 @@ # When building a 32bit target, make sure the sjavac server flags are compatible # with a 32bit JVM. ifeq ($(OPENJDK_TARGET_CPU_BITS), 32) - SJAVAC_SERVER_JAVA_FLAGS:= -Xms256M -Xmx1500M + SJAVAC_SERVER_JAVA_FLAGS := @BOOTCYCLE_JVM_ARGS_BIG@ endif +# The bootcycle JVM arguments may differ from the original boot jdk. +JAVA_FLAGS_BIG := @BOOTCYCLE_JVM_ARGS_BIG@ diff -r 25903fca5876 -r 0ac35f4c3936 common/autoconf/build-performance.m4 --- a/common/autoconf/build-performance.m4 Thu Jun 30 14:57:30 2016 -0700 +++ b/common/autoconf/build-performance.m4 Tue Jul 05 13:50:37 2016 -0700 @@ -367,6 +367,9 @@ elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then AC_MSG_RESULT([no, does not work with Solaris Studio]) USE_PRECOMPILED_HEADER=0 + elif test "x$TOOLCHAIN_TYPE" = xxlc; then + AC_MSG_RESULT([no, does not work with xlc]) + USE_PRECOMPILED_HEADER=0 else AC_MSG_RESULT([yes]) fi diff -r 25903fca5876 -r 0ac35f4c3936 common/autoconf/flags.m4 --- a/common/autoconf/flags.m4 Thu Jun 30 14:57:30 2016 -0700 +++ b/common/autoconf/flags.m4 Tue Jul 05 13:50:37 2016 -0700 @@ -593,9 +593,9 @@ fi C_O_FLAG_NONE="-O0" elif test "x$TOOLCHAIN_TYPE" = xxlc; then - C_O_FLAG_HIGHEST_JVM="-O3" - C_O_FLAG_HIGHEST="-O3" - C_O_FLAG_HI="-O3 -qstrict" + C_O_FLAG_HIGHEST_JVM="-O3 -qhot=level=1 -qinline -qinlglue" + C_O_FLAG_HIGHEST="-O3 -qhot=level=1 -qinline -qinlglue" + C_O_FLAG_HI="-O3 -qinline -qinlglue" C_O_FLAG_NORM="-O2" C_O_FLAG_DEBUG="-qnoopt" # FIXME: Value below not verified. @@ -911,8 +911,8 @@ elif test "x$OPENJDK_$1_OS" = xaix; then $2JVM_CFLAGS="[$]$2JVM_CFLAGS -DAIX" # We may need '-qminimaltoc' or '-qpic=large -bbigtoc' if the TOC overflows. - $2JVM_CFLAGS="[$]$2JVM_CFLAGS -qtune=balanced -qhot=level=1 -qinline \ - -qinlglue -qalias=noansi -qstrict -qtls=default -qlanglvl=c99vla \ + $2JVM_CFLAGS="[$]$2JVM_CFLAGS -qtune=balanced \ + -qalias=noansi -qstrict -qtls=default -qlanglvl=c99vla \ -qlanglvl=noredefmac -qnortti -qnoeh -qignerrno" elif test "x$OPENJDK_$1_OS" = xbsd; then $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D_ALLBSD_SOURCE" diff -r 25903fca5876 -r 0ac35f4c3936 common/autoconf/generated-configure.sh --- a/common/autoconf/generated-configure.sh Thu Jun 30 14:57:30 2016 -0700 +++ b/common/autoconf/generated-configure.sh Tue Jul 05 13:50:37 2016 -0700 @@ -644,6 +644,7 @@ JAVA_TOOL_FLAGS_SMALL JAVA_FLAGS_SMALL JAVA_FLAGS_JAVAC +BOOTCYCLE_JVM_ARGS_BIG JAVA_FLAGS_BIG JAVA_FLAGS TEST_JOBS @@ -5094,7 +5095,7 @@ #CUSTOM_AUTOCONF_INCLUDE # Do not change or remove the following line, it is needed for consistency checks: -DATE_WHEN_GENERATED=1467039751 +DATE_WHEN_GENERATED=1467223237 ############################################################################### # @@ -49625,9 +49626,9 @@ fi C_O_FLAG_NONE="-O0" elif test "x$TOOLCHAIN_TYPE" = xxlc; then - C_O_FLAG_HIGHEST_JVM="-O3" - C_O_FLAG_HIGHEST="-O3" - C_O_FLAG_HI="-O3 -qstrict" + C_O_FLAG_HIGHEST_JVM="-O3 -qhot=level=1 -qinline -qinlglue" + C_O_FLAG_HIGHEST="-O3 -qhot=level=1 -qinline -qinlglue" + C_O_FLAG_HI="-O3 -qinline -qinlglue" C_O_FLAG_NORM="-O2" C_O_FLAG_DEBUG="-qnoopt" # FIXME: Value below not verified. @@ -50634,8 +50635,8 @@ elif test "x$OPENJDK_TARGET_OS" = xaix; then JVM_CFLAGS="$JVM_CFLAGS -DAIX" # We may need '-qminimaltoc' or '-qpic=large -bbigtoc' if the TOC overflows. - JVM_CFLAGS="$JVM_CFLAGS -qtune=balanced -qhot=level=1 -qinline \ - -qinlglue -qalias=noansi -qstrict -qtls=default -qlanglvl=c99vla \ + JVM_CFLAGS="$JVM_CFLAGS -qtune=balanced \ + -qalias=noansi -qstrict -qtls=default -qlanglvl=c99vla \ -qlanglvl=noredefmac -qnortti -qnoeh -qignerrno" elif test "x$OPENJDK_TARGET_OS" = xbsd; then COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_ALLBSD_SOURCE" @@ -51439,8 +51440,8 @@ elif test "x$OPENJDK_BUILD_OS" = xaix; then OPENJDK_BUILD_JVM_CFLAGS="$OPENJDK_BUILD_JVM_CFLAGS -DAIX" # We may need '-qminimaltoc' or '-qpic=large -bbigtoc' if the TOC overflows. - OPENJDK_BUILD_JVM_CFLAGS="$OPENJDK_BUILD_JVM_CFLAGS -qtune=balanced -qhot=level=1 -qinline \ - -qinlglue -qalias=noansi -qstrict -qtls=default -qlanglvl=c99vla \ + OPENJDK_BUILD_JVM_CFLAGS="$OPENJDK_BUILD_JVM_CFLAGS -qtune=balanced \ + -qalias=noansi -qstrict -qtls=default -qlanglvl=c99vla \ -qlanglvl=noredefmac -qnortti -qnoeh -qignerrno" elif test "x$OPENJDK_BUILD_OS" = xbsd; then OPENJDK_BUILD_COMMON_CCXXFLAGS_JDK="$OPENJDK_BUILD_COMMON_CCXXFLAGS_JDK -D_ALLBSD_SOURCE" @@ -53468,7 +53469,7 @@ $as_echo "no, forced" >&6; } BUILD_GTEST="false" elif test "x$enable_hotspot_gtest" = "x"; then - if test "x$GTEST_DIR_EXISTS" = "xtrue"; then + if test "x$GTEST_DIR_EXISTS" = "xtrue" && test "x$OPENJDK_TARGET_OS" != "xaix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } BUILD_GTEST="true" @@ -64612,12 +64613,16 @@ - if test "$OPENJDK_TARGET_OS" = "solaris"; then + if test "$OPENJDK_TARGET_OS" = "solaris" && test "x$BUILD_GTEST" = "xtrue"; then # Find the root of the Solaris Studio installation from the compiler path SOLARIS_STUDIO_DIR="$(dirname $CC)/.." STLPORT_LIB="$SOLARIS_STUDIO_DIR/lib/stlport4$OPENJDK_TARGET_CPU_ISADIR/libstlport.so.1" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libstlport.so.1" >&5 $as_echo_n "checking for libstlport.so.1... " >&6; } + if ! test -f "$STLPORT_LIB" && test "x$OPENJDK_TARGET_CPU_ISADIR" = "x/sparcv9"; then + # SS12u3 has libstlport under 'stlport4/v9' instead of 'stlport4/sparcv9' + STLPORT_LIB="$SOLARIS_STUDIO_DIR/lib/stlport4/v9/libstlport.so.1" + fi if test -f "$STLPORT_LIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, $STLPORT_LIB" >&5 $as_echo "yes, $STLPORT_LIB" >&6; } @@ -65118,25 +65123,32 @@ JVM_ARG_OK=false fi - - # Maximum amount of heap memory. - # Maximum stack size. - JVM_MAX_HEAP=`expr $MEMORY_SIZE / 2` + BOOTCYCLE_JVM_ARGS_BIG=-Xms64M + + # Maximum amount of heap memory and stack size. + JVM_HEAP_LIMIT_32="1024" + # Running a 64 bit JVM allows for and requires a bigger heap + JVM_HEAP_LIMIT_64="1600" + STACK_SIZE_32=768 + STACK_SIZE_64=1536 + JVM_HEAP_LIMIT_GLOBAL=`expr $MEMORY_SIZE / 2` + if test "$JVM_HEAP_LIMIT_GLOBAL" -lt "$JVM_HEAP_LIMIT_32"; then + JVM_HEAP_LIMIT_32=$JVM_HEAP_LIMIT_GLOBAL + fi + if test "$JVM_HEAP_LIMIT_GLOBAL" -lt "$JVM_HEAP_LIMIT_64"; then + JVM_HEAP_LIMIT_64=$JVM_HEAP_LIMIT_GLOBAL + fi + if test "$JVM_HEAP_LIMIT_GLOBAL" -lt "512"; then + JVM_HEAP_LIMIT_32=512 + JVM_HEAP_LIMIT_64=512 + fi + if test "x$BOOT_JDK_BITS" = "x32"; then - if test "$JVM_MAX_HEAP" -gt "1100"; then - JVM_MAX_HEAP=1100 - elif test "$JVM_MAX_HEAP" -lt "512"; then - JVM_MAX_HEAP=512 - fi - STACK_SIZE=768 - else - # Running a 64 bit JVM allows for and requires a bigger heap - if test "$JVM_MAX_HEAP" -gt "1600"; then - JVM_MAX_HEAP=1600 - elif test "$JVM_MAX_HEAP" -lt "512"; then - JVM_MAX_HEAP=512 - fi - STACK_SIZE=1536 + STACK_SIZE=$STACK_SIZE_32 + JVM_MAX_HEAP=$JVM_HEAP_LIMIT_32 + else + STACK_SIZE=$STACK_SIZE_64 + JVM_MAX_HEAP=$JVM_HEAP_LIMIT_64 fi $ECHO "Check if jvm arg is ok: -Xmx${JVM_MAX_HEAP}M" >&5 @@ -65175,6 +65187,21 @@ JAVA_FLAGS_BIG=$boot_jdk_jvmargs_big + if test "x$OPENJDK_TARGET_CPU_BITS" = "x32"; then + BOOTCYCLE_MAX_HEAP=$JVM_HEAP_LIMIT_32 + BOOTCYCLE_STACK_SIZE=$STACK_SIZE_32 + else + BOOTCYCLE_MAX_HEAP=$JVM_HEAP_LIMIT_64 + BOOTCYCLE_STACK_SIZE=$STACK_SIZE_64 + fi + BOOTCYCLE_JVM_ARGS_BIG="$BOOTCYCLE_JVM_ARGS_BIG -Xmx${BOOTCYCLE_MAX_HEAP}M" + BOOTCYCLE_JVM_ARGS_BIG="$BOOTCYCLE_JVM_ARGS_BIG -XX:ThreadStackSize=$BOOTCYCLE_STACK_SIZE" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking flags for bootcycle boot jdk java command for big workloads" >&5 +$as_echo_n "checking flags for bootcycle boot jdk java command for big workloads... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOTCYCLE_JVM_ARGS_BIG" >&5 +$as_echo "$BOOTCYCLE_JVM_ARGS_BIG" >&6; } + + # By default, the main javac compilations use big JAVA_FLAGS_JAVAC="$JAVA_FLAGS_BIG" @@ -66132,6 +66159,10 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, does not work with Solaris Studio" >&5 $as_echo "no, does not work with Solaris Studio" >&6; } USE_PRECOMPILED_HEADER=0 + elif test "x$TOOLCHAIN_TYPE" = xxlc; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, does not work with xlc" >&5 +$as_echo "no, does not work with xlc" >&6; } + USE_PRECOMPILED_HEADER=0 else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } diff -r 25903fca5876 -r 0ac35f4c3936 common/autoconf/hotspot.m4 --- a/common/autoconf/hotspot.m4 Thu Jun 30 14:57:30 2016 -0700 +++ b/common/autoconf/hotspot.m4 Tue Jul 05 13:50:37 2016 -0700 @@ -333,7 +333,7 @@ AC_MSG_RESULT([no, forced]) BUILD_GTEST="false" elif test "x$enable_hotspot_gtest" = "x"; then - if test "x$GTEST_DIR_EXISTS" = "xtrue"; then + if test "x$GTEST_DIR_EXISTS" = "xtrue" && test "x$OPENJDK_TARGET_OS" != "xaix"; then AC_MSG_RESULT([yes]) BUILD_GTEST="true" else diff -r 25903fca5876 -r 0ac35f4c3936 common/autoconf/libraries.m4 --- a/common/autoconf/libraries.m4 Thu Jun 30 14:57:30 2016 -0700 +++ b/common/autoconf/libraries.m4 Tue Jul 05 13:50:37 2016 -0700 @@ -197,11 +197,15 @@ ################################################################################ AC_DEFUN_ONCE([LIB_SETUP_SOLARIS_STLPORT], [ - if test "$OPENJDK_TARGET_OS" = "solaris"; then + if test "$OPENJDK_TARGET_OS" = "solaris" && test "x$BUILD_GTEST" = "xtrue"; then # Find the root of the Solaris Studio installation from the compiler path SOLARIS_STUDIO_DIR="$(dirname $CC)/.." STLPORT_LIB="$SOLARIS_STUDIO_DIR/lib/stlport4$OPENJDK_TARGET_CPU_ISADIR/libstlport.so.1" AC_MSG_CHECKING([for libstlport.so.1]) + if ! test -f "$STLPORT_LIB" && test "x$OPENJDK_TARGET_CPU_ISADIR" = "x/sparcv9"; then + # SS12u3 has libstlport under 'stlport4/v9' instead of 'stlport4/sparcv9' + STLPORT_LIB="$SOLARIS_STUDIO_DIR/lib/stlport4/v9/libstlport.so.1" + fi if test -f "$STLPORT_LIB"; then AC_MSG_RESULT([yes, $STLPORT_LIB]) BASIC_FIXUP_PATH([STLPORT_LIB]) diff -r 25903fca5876 -r 0ac35f4c3936 common/autoconf/spec.gmk.in --- a/common/autoconf/spec.gmk.in Thu Jun 30 14:57:30 2016 -0700 +++ b/common/autoconf/spec.gmk.in Tue Jul 05 13:50:37 2016 -0700 @@ -578,7 +578,7 @@ JAVAC_FLAGS?=@JAVAC_FLAGS@ -BUILD_JAVA_FLAGS:=-Xms64M -Xmx1100M +BUILD_JAVA_FLAGS := @BOOTCYCLE_JVM_ARGS_BIG@ BUILD_JAVA=@FIXPATH@ $(BUILD_JDK)/bin/java $(BUILD_JAVA_FLAGS) # Use ?= as this can be overridden from bootcycle-spec.gmk diff -r 25903fca5876 -r 0ac35f4c3936 common/bin/compare.sh --- a/common/bin/compare.sh Thu Jun 30 14:57:30 2016 -0700 +++ b/common/bin/compare.sh Tue Jul 05 13:50:37 2016 -0700 @@ -102,10 +102,13 @@ # Ignore date strings in class files. # Anonymous lambda classes get randomly assigned counters in their names. if test "x$SUFFIX" = "xclass"; then - if [ "$NAME" = "module-info.class" ] || [ "$NAME" = "SystemModules.class" ] - then - # The SystemModules.class and module-info.class have several issues - # with random ordering of elements in HashSets. + if [ "$NAME" = "SystemModules.class" ]; then + # The SystemModules.class is not comparable. The way it is generated is + # too random. It can even be of different size for no apparent reason. + TMP="" + elif [ "$NAME" = "module-info.class" ]; then + # The module-info.class have several issues with random ordering of + # elements in HashSets. MODULES_CLASS_FILTER="$SED \ -e 's/,$//' \ -e 's/;$//' \ @@ -369,6 +372,14 @@ $CAT $OTHER_DIR/$f | eval "$HTML_FILTER" > $OTHER_FILE & $CAT $THIS_DIR/$f | eval "$HTML_FILTER" > $THIS_FILE & wait + elif [ "$f" = "./lib/classlist" ]; then + # The classlist files may have some lines in random order + OTHER_FILE=$WORK_DIR/$f.other + THIS_FILE=$WORK_DIR/$f.this + $MKDIR -p $(dirname $OTHER_FILE) $(dirname $THIS_FILE) + $RM $OTHER_FILE $THIS_FILE + $CAT $OTHER_DIR/$f | $SORT > $OTHER_FILE + $CAT $THIS_DIR/$f | $SORT > $THIS_FILE else OTHER_FILE=$OTHER_DIR/$f THIS_FILE=$THIS_DIR/$f @@ -651,7 +662,7 @@ OTHER_DIZ_FILE=${OTHER_FILE_BASE}.diz else # Some files, jli.dll, appears twice in the image but only one of - # thme has a diz file next to it. + # them has a diz file next to it. OTHER_DIZ_FILE="$($FIND $OTHER_DIR -name $DIZ_NAME | $SED 1q)" if [ ! -f "$OTHER_DIZ_FILE" ]; then # As a last resort, look for diz file in the whole build output @@ -1335,6 +1346,24 @@ OTHER_JDK="$OTHER/images/jdk" OTHER_JRE="$OTHER/images/jre" echo "Selecting jdk images for compare" + elif [ -d "$(ls -d $THIS/licensee-src/build/*/images/jdk)" ] \ + && [ -d "$(ls -d $OTHER/licensee-src/build/*/images/jdk)" ] + then + echo "Selecting licensee images for compare" + # Simply override the THIS and OTHER dir with the build dir from + # the nested licensee source build for the rest of the script + # execution. + OLD_THIS="$THIS" + OLD_OTHER="$OTHER" + THIS="$(ls -d $THIS/licensee-src/build/*)" + OTHER="$(ls -d $OTHER/licensee-src/build/*)" + THIS_JDK="$THIS/images/jdk" + THIS_JRE="$THIS/images/jre" + OTHER_JDK="$OTHER/images/jdk" + OTHER_JRE="$OTHER/images/jre" + # Rewrite the path to tools that are used from the build + JIMAGE="$(echo "$JIMAGE" | $SED "s|$OLD_THIS|$THIS|g")" + JAVAP="$(echo "$JAVAP" | $SED "s|$OLD_THIS|$THIS|g")" else echo "No common images found." exit 1 diff -r 25903fca5876 -r 0ac35f4c3936 common/conf/jib-profiles.js --- a/common/conf/jib-profiles.js Thu Jun 30 14:57:30 2016 -0700 +++ b/common/conf/jib-profiles.js Tue Jul 05 13:50:37 2016 -0700 @@ -254,7 +254,7 @@ build_cpu: "x64", dependencies: concat(common.dependencies, "devkit"), configure_args: concat(common.configure_args, common.configure_args_32bit, - "--with-jvm-variants=minimal,client,server", "--with-zlib=system"), + "--with-jvm-variants=minimal,server", "--with-zlib=system"), default_make_targets: common.default_make_targets }, @@ -295,8 +295,7 @@ target_cpu: "x86", build_cpu: "x64", dependencies: concat(common.dependencies, "devkit", "freetype"), - configure_args: concat(common.configure_args, - "--with-jvm-variants=client,server", common.configure_args_32bit), + configure_args: concat(common.configure_args, common.configure_args_32bit), default_make_targets: common.default_make_targets } }; diff -r 25903fca5876 -r 0ac35f4c3936 corba/.hgtags --- a/corba/.hgtags Thu Jun 30 14:57:30 2016 -0700 +++ b/corba/.hgtags Tue Jul 05 13:50:37 2016 -0700 @@ -367,3 +367,4 @@ a39131aafc51a6fd8836e6ebe1b04458702ce7d6 jdk-9+122 e33a34cc551907617d8129c4faaf1a5a7e61d21c jdk-9+123 45121d5afb9d5bfadab75378572ad96832e0809e jdk-9+124 +1d48e67d1b91eb9f72e49e69a4021edb85e357fc jdk-9+125 diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/.hgtags --- a/hotspot/.hgtags Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/.hgtags Tue Jul 05 13:50:37 2016 -0700 @@ -527,3 +527,4 @@ af6b4ad908e732d23021f12e8322b204433d5cf6 jdk-9+122 75f81e1fecfb444f34f357295fe06af60e2762d9 jdk-9+123 479631362b4930be985245ea063d87d821a472eb jdk-9+124 +bb640b49741af3f57f9994129934c46fc173219f jdk-9+125 diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/make/lib/JvmOverrideFiles.gmk --- a/hotspot/make/lib/JvmOverrideFiles.gmk Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/make/lib/JvmOverrideFiles.gmk Tue Jul 05 13:50:37 2016 -0700 @@ -153,6 +153,13 @@ # mode, so don't optimize sharedRuntimeTrig.cpp at all. BUILD_LIBJVM_sharedRuntimeTrig.cpp_CXXFLAGS := $(CXX_O_FLAG_NONE) + ifneq ($(DEBUG_LEVEL),slowdebug) + # Compiling jvmtiEnterTrace.cpp with full optimization needs more than 30min + # (mostly because of '-qhot=level=1' and the more than 1300 'log_trace' calls + # which cause a lot of template expansion). + BUILD_LIBJVM_jvmtiEnterTrace.cpp_OPTIMIZATION := LOW + endif + # Disable ELF decoder on AIX (AIX uses XCOFF). JVM_EXCLUDE_PATTERNS += elf diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/cpu/aarch64/vm/aarch64.ad --- a/hotspot/src/cpu/aarch64/vm/aarch64.ad Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/cpu/aarch64/vm/aarch64.ad Tue Jul 05 13:50:37 2016 -0700 @@ -12179,21 +12179,21 @@ %} %} -instruct rolI_rReg_Var_C_32(iRegLNoSp dst, iRegL src, iRegI shift, immI_32 c_32, rFlagsReg cr) +instruct rolI_rReg_Var_C_32(iRegINoSp dst, iRegI src, iRegI shift, immI_32 c_32, rFlagsReg cr) %{ match(Set dst (OrI (LShiftI src shift) (URShiftI src (SubI c_32 shift)))); expand %{ - rolL_rReg(dst, src, shift, cr); - %} -%} - -instruct rolI_rReg_Var_C0(iRegLNoSp dst, iRegL src, iRegI shift, immI0 c0, rFlagsReg cr) + rolI_rReg(dst, src, shift, cr); + %} +%} + +instruct rolI_rReg_Var_C0(iRegINoSp dst, iRegI src, iRegI shift, immI0 c0, rFlagsReg cr) %{ match(Set dst (OrI (LShiftI src shift) (URShiftI src (SubI c0 shift)))); expand %{ - rolL_rReg(dst, src, shift, cr); + rolI_rReg(dst, src, shift, cr); %} %} diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/cpu/aarch64/vm/c1_Runtime1_aarch64.cpp --- a/hotspot/src/cpu/aarch64/vm/c1_Runtime1_aarch64.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/cpu/aarch64/vm/c1_Runtime1_aarch64.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -944,8 +944,7 @@ Register t = r5; __ load_klass(t, r0); __ ldrw(t, Address(t, Klass::access_flags_offset())); - __ tst(t, JVM_ACC_HAS_FINALIZER); - __ br(Assembler::NE, register_finalizer); + __ tbnz(t, exact_log2(JVM_ACC_HAS_FINALIZER), register_finalizer); __ ret(lr); __ bind(register_finalizer); diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/cpu/aarch64/vm/interp_masm_aarch64.cpp --- a/hotspot/src/cpu/aarch64/vm/interp_masm_aarch64.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/cpu/aarch64/vm/interp_masm_aarch64.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -93,10 +93,8 @@ // This method is only called just after the call into the vm in // call_VM_base, so the arg registers are available. ldrw(rscratch1, Address(rthread, JavaThread::popframe_condition_offset())); - tstw(rscratch1, JavaThread::popframe_pending_bit); - br(Assembler::EQ, L); - tstw(rscratch1, JavaThread::popframe_processing_bit); - br(Assembler::NE, L); + tbz(rscratch1, exact_log2(JavaThread::popframe_pending_bit), L); + tbnz(rscratch1, exact_log2(JavaThread::popframe_processing_bit), L); // Call Interpreter::remove_activation_preserving_args_entry() to get the // address of the same-named entrypoint in the generated interpreter code. call_VM_leaf(CAST_FROM_FN_PTR(address, Interpreter::remove_activation_preserving_args_entry)); @@ -505,8 +503,7 @@ // get method access flags ldr(r1, Address(rfp, frame::interpreter_frame_method_offset * wordSize)); ldr(r2, Address(r1, Method::access_flags_offset())); - tst(r2, JVM_ACC_SYNCHRONIZED); - br(Assembler::EQ, unlocked); + tbz(r2, exact_log2(JVM_ACC_SYNCHRONIZED), unlocked); // Don't unlock anything if the _do_not_unlock_if_synchronized flag // is set. @@ -1582,8 +1579,8 @@ // do. The unknown bit may have been // set already but no need to check. - tst(obj, TypeEntries::type_unknown); - br(Assembler::NE, next); // already unknown. Nothing to do anymore. + tbnz(obj, exact_log2(TypeEntries::type_unknown), next); + // already unknown. Nothing to do anymore. ldr(rscratch1, mdo_addr); cbz(rscratch1, none); diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/cpu/aarch64/vm/stubGenerator_aarch64.cpp --- a/hotspot/src/cpu/aarch64/vm/stubGenerator_aarch64.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/cpu/aarch64/vm/stubGenerator_aarch64.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -710,7 +710,7 @@ __ BIND(L_loop); __ strb(zr, Address(start, count)); __ subs(count, count, 1); - __ br(Assembler::HS, L_loop); + __ br(Assembler::GE, L_loop); } break; default: @@ -1299,7 +1299,7 @@ if (VerifyOops) verify_oop_array(size, d, count, r16); __ sub(count, count, 1); // make an inclusive end pointer - __ lea(count, Address(d, count, Address::uxtw(exact_log2(size)))); + __ lea(count, Address(d, count, Address::lsl(exact_log2(size)))); gen_write_ref_array_post_barrier(d, count, rscratch1); } __ leave(); @@ -2002,9 +2002,9 @@ arraycopy_range_checks(src, src_pos, dst, dst_pos, scratch_length, rscratch2, L_failed); - __ lea(from, Address(src, src_pos, Address::lsl(3))); + __ lea(from, Address(src, src_pos, Address::lsl(LogBytesPerHeapOop))); __ add(from, from, arrayOopDesc::base_offset_in_bytes(T_OBJECT)); - __ lea(to, Address(dst, dst_pos, Address::lsl(3))); + __ lea(to, Address(dst, dst_pos, Address::lsl(LogBytesPerHeapOop))); __ add(to, to, arrayOopDesc::base_offset_in_bytes(T_OBJECT)); __ movw(count, scratch_length); // length __ BIND(L_plain_copy); @@ -2027,9 +2027,9 @@ __ load_klass(rscratch2_dst_klass, dst); // reload // Marshal the base address arguments now, freeing registers. - __ lea(from, Address(src, src_pos, Address::lsl(3))); + __ lea(from, Address(src, src_pos, Address::lsl(LogBytesPerHeapOop))); __ add(from, from, arrayOopDesc::base_offset_in_bytes(T_OBJECT)); - __ lea(to, Address(dst, dst_pos, Address::lsl(3))); + __ lea(to, Address(dst, dst_pos, Address::lsl(LogBytesPerHeapOop))); __ add(to, to, arrayOopDesc::base_offset_in_bytes(T_OBJECT)); __ movw(count, length); // length (reloaded) Register sco_temp = c_rarg3; // this register is free now diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/cpu/aarch64/vm/templateInterpreterGenerator_aarch64.cpp --- a/hotspot/src/cpu/aarch64/vm/templateInterpreterGenerator_aarch64.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/cpu/aarch64/vm/templateInterpreterGenerator_aarch64.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -1242,8 +1242,7 @@ { Label L; __ ldrw(t, Address(rmethod, Method::access_flags_offset())); - __ tst(t, JVM_ACC_STATIC); - __ br(Assembler::EQ, L); + __ tbz(t, exact_log2(JVM_ACC_STATIC), L); // get mirror __ load_mirror(t, rmethod); // copy mirror into activation frame @@ -1435,8 +1434,7 @@ { Label L; __ ldrw(t, Address(rmethod, Method::access_flags_offset())); - __ tst(t, JVM_ACC_SYNCHRONIZED); - __ br(Assembler::EQ, L); + __ tbz(t, exact_log2(JVM_ACC_SYNCHRONIZED), L); // the code below should be shared with interpreter macro // assembler implementation { diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/cpu/aarch64/vm/templateTable_aarch64.cpp --- a/hotspot/src/cpu/aarch64/vm/templateTable_aarch64.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/cpu/aarch64/vm/templateTable_aarch64.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -2190,9 +2190,8 @@ __ ldr(c_rarg1, aaddress(0)); __ load_klass(r3, c_rarg1); __ ldrw(r3, Address(r3, Klass::access_flags_offset())); - __ tst(r3, JVM_ACC_HAS_FINALIZER); Label skip_register_finalizer; - __ br(Assembler::EQ, skip_register_finalizer); + __ tbz(r3, exact_log2(JVM_ACC_HAS_FINALIZER), skip_register_finalizer); __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::register_finalizer), c_rarg1); diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/cpu/ppc/vm/assembler_ppc.hpp --- a/hotspot/src/cpu/ppc/vm/assembler_ppc.hpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/cpu/ppc/vm/assembler_ppc.hpp Tue Jul 05 13:50:37 2016 -0700 @@ -503,6 +503,10 @@ LVSL_OPCODE = (31u << OPCODE_SHIFT | 6u << 1), LVSR_OPCODE = (31u << OPCODE_SHIFT | 38u << 1), + // Vector-Scalar (VSX) instruction support. + LXVD2X_OPCODE = (31u << OPCODE_SHIFT | 844u << 1), + STXVD2X_OPCODE = (31u << OPCODE_SHIFT | 972u << 1), + // Vector Permute and Formatting VPKPX_OPCODE = (4u << OPCODE_SHIFT | 782u ), VPKSHSS_OPCODE = (4u << OPCODE_SHIFT | 398u ), @@ -1085,6 +1089,19 @@ static int vrs( VectorRegister r) { return vrs(r->encoding());} static int vrt( VectorRegister r) { return vrt(r->encoding());} + // Support Vector-Scalar (VSX) instructions. + static int vsra( int x) { return opp_u_field(x, 15, 11); } + static int vsrb( int x) { return opp_u_field(x, 20, 16); } + static int vsrc( int x) { return opp_u_field(x, 25, 21); } + static int vsrs( int x) { return opp_u_field(x, 10, 6); } + static int vsrt( int x) { return opp_u_field(x, 10, 6); } + + static int vsra( VectorSRegister r) { return vsra(r->encoding());} + static int vsrb( VectorSRegister r) { return vsrb(r->encoding());} + static int vsrc( VectorSRegister r) { return vsrc(r->encoding());} + static int vsrs( VectorSRegister r) { return vsrs(r->encoding());} + static int vsrt( VectorSRegister r) { return vsrt(r->encoding());} + static int vsplt_uim( int x) { return opp_u_field(x, 15, 12); } // for vsplt* instructions static int vsplti_sim(int x) { return opp_u_field(x, 15, 11); } // for vsplti* instructions static int vsldoi_shb(int x) { return opp_u_field(x, 25, 22); } // for vsldoi instruction @@ -2069,6 +2086,10 @@ inline void mtvscr( VectorRegister b); inline void mfvscr( VectorRegister d); + // Vector-Scalar (VSX) instructions. + inline void lxvd2x( VectorSRegister d, Register a, Register b); + inline void stxvd2x( VectorSRegister d, Register a, Register b); + // AES (introduced with Power 8) inline void vcipher( VectorRegister d, VectorRegister a, VectorRegister b); inline void vcipherlast( VectorRegister d, VectorRegister a, VectorRegister b); diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/cpu/ppc/vm/assembler_ppc.inline.hpp --- a/hotspot/src/cpu/ppc/vm/assembler_ppc.inline.hpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/cpu/ppc/vm/assembler_ppc.inline.hpp Tue Jul 05 13:50:37 2016 -0700 @@ -724,6 +724,10 @@ inline void Assembler::lvsl( VectorRegister d, Register s1, Register s2) { emit_int32( LVSL_OPCODE | vrt(d) | ra0mem(s1) | rb(s2)); } inline void Assembler::lvsr( VectorRegister d, Register s1, Register s2) { emit_int32( LVSR_OPCODE | vrt(d) | ra0mem(s1) | rb(s2)); } +// Vector-Scalar (VSX) instructions. +inline void Assembler::lxvd2x (VectorSRegister d, Register s1, Register s2) { emit_int32( LXVD2X_OPCODE | vsrt(d) | ra(s1) | rb(s2)); } +inline void Assembler::stxvd2x(VectorSRegister d, Register s1, Register s2) { emit_int32( STXVD2X_OPCODE | vsrt(d) | ra(s1) | rb(s2)); } + inline void Assembler::vpkpx( VectorRegister d, VectorRegister a, VectorRegister b) { emit_int32( VPKPX_OPCODE | vrt(d) | vra(a) | vrb(b)); } inline void Assembler::vpkshss( VectorRegister d, VectorRegister a, VectorRegister b) { emit_int32( VPKSHSS_OPCODE | vrt(d) | vra(a) | vrb(b)); } inline void Assembler::vpkswss( VectorRegister d, VectorRegister a, VectorRegister b) { emit_int32( VPKSWSS_OPCODE | vrt(d) | vra(a) | vrb(b)); } diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/cpu/ppc/vm/register_ppc.cpp --- a/hotspot/src/cpu/ppc/vm/register_ppc.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/cpu/ppc/vm/register_ppc.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -75,3 +75,14 @@ }; return is_valid() ? names[encoding()] : "vnoreg"; } + +const char* VectorSRegisterImpl::name() const { + const char* names[number_of_registers] = { + "VSR0", "VSR1", "VSR2", "VSR3", "VSR4", "VSR5", "VSR6", "VSR7", + "VSR8", "VSR9", "VSR10", "VSR11", "VSR12", "VSR13", "VSR14", "VSR15", + "VSR16", "VSR17", "VSR18", "VSR19", "VSR20", "VSR21", "VSR22", "VSR23", + "VSR24", "VSR25", "VSR26", "VSR27", "VSR28", "VSR29", "VSR30", "VSR31" + }; + return is_valid() ? names[encoding()] : "vsnoreg"; +} + diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/cpu/ppc/vm/register_ppc.hpp --- a/hotspot/src/cpu/ppc/vm/register_ppc.hpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/cpu/ppc/vm/register_ppc.hpp Tue Jul 05 13:50:37 2016 -0700 @@ -491,6 +491,106 @@ #endif // DONT_USE_REGISTER_DEFINES +// Use VectorSRegister as a shortcut. +class VectorSRegisterImpl; +typedef VectorSRegisterImpl* VectorSRegister; + +inline VectorSRegister as_VectorSRegister(int encoding) { + return (VectorSRegister)(intptr_t)encoding; +} + +// The implementation of Vector-Scalar (VSX) registers on POWER architecture. +class VectorSRegisterImpl: public AbstractRegisterImpl { + public: + enum { + number_of_registers = 32 + }; + + // construction + inline friend VectorSRegister as_VectorSRegister(int encoding); + + // accessors + int encoding() const { assert(is_valid(), "invalid register"); return value(); } + + // testers + bool is_valid() const { return 0 <= value() && value() < number_of_registers; } + + const char* name() const; +}; + +// The Vector-Scalar (VSX) registers of the POWER architecture. + +CONSTANT_REGISTER_DECLARATION(VectorSRegister, vsnoreg, (-1)); + +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR0, ( 0)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR1, ( 1)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR2, ( 2)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR3, ( 3)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR4, ( 4)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR5, ( 5)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR6, ( 6)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR7, ( 7)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR8, ( 8)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR9, ( 9)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR10, (10)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR11, (11)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR12, (12)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR13, (13)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR14, (14)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR15, (15)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR16, (16)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR17, (17)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR18, (18)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR19, (19)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR20, (20)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR21, (21)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR22, (22)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR23, (23)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR24, (24)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR25, (25)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR26, (26)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR27, (27)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR28, (28)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR29, (29)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR30, (30)); +CONSTANT_REGISTER_DECLARATION(VectorSRegister, VSR31, (31)); + +#ifndef DONT_USE_REGISTER_DEFINES +#define vsnoregi ((VectorSRegister)(vsnoreg_VectorSRegisterEnumValue)) +#define VSR0 ((VectorSRegister)( VSR0_VectorSRegisterEnumValue)) +#define VSR1 ((VectorSRegister)( VSR1_VectorSRegisterEnumValue)) +#define VSR2 ((VectorSRegister)( VSR2_VectorSRegisterEnumValue)) +#define VSR3 ((VectorSRegister)( VSR3_VectorSRegisterEnumValue)) +#define VSR4 ((VectorSRegister)( VSR4_VectorSRegisterEnumValue)) +#define VSR5 ((VectorSRegister)( VSR5_VectorSRegisterEnumValue)) +#define VSR6 ((VectorSRegister)( VSR6_VectorSRegisterEnumValue)) +#define VSR7 ((VectorSRegister)( VSR7_VectorSRegisterEnumValue)) +#define VSR8 ((VectorSRegister)( VSR8_VectorSRegisterEnumValue)) +#define VSR9 ((VectorSRegister)( VSR9_VectorSRegisterEnumValue)) +#define VSR10 ((VectorSRegister)( VSR10_VectorSRegisterEnumValue)) +#define VSR11 ((VectorSRegister)( VSR11_VectorSRegisterEnumValue)) +#define VSR12 ((VectorSRegister)( VSR12_VectorSRegisterEnumValue)) +#define VSR13 ((VectorSRegister)( VSR13_VectorSRegisterEnumValue)) +#define VSR14 ((VectorSRegister)( VSR14_VectorSRegisterEnumValue)) +#define VSR15 ((VectorSRegister)( VSR15_VectorSRegisterEnumValue)) +#define VSR16 ((VectorSRegister)( VSR16_VectorSRegisterEnumValue)) +#define VSR17 ((VectorSRegister)( VSR17_VectorSRegisterEnumValue)) +#define VSR18 ((VectorSRegister)( VSR18_VectorSRegisterEnumValue)) +#define VSR19 ((VectorSRegister)( VSR19_VectorSRegisterEnumValue)) +#define VSR20 ((VectorSRegister)( VSR20_VectorSRegisterEnumValue)) +#define VSR21 ((VectorSRegister)( VSR21_VectorSRegisterEnumValue)) +#define VSR22 ((VectorSRegister)( VSR22_VectorSRegisterEnumValue)) +#define VSR23 ((VectorSRegister)( VSR23_VectorSRegisterEnumValue)) +#define VSR24 ((VectorSRegister)( VSR24_VectorSRegisterEnumValue)) +#define VSR25 ((VectorSRegister)( VSR25_VectorSRegisterEnumValue)) +#define VSR26 ((VectorSRegister)( VSR26_VectorSRegisterEnumValue)) +#define VSR27 ((VectorSRegister)( VSR27_VectorSRegisterEnumValue)) +#define VSR28 ((VectorSRegister)( VSR28_VectorSRegisterEnumValue)) +#define VSR29 ((VectorSRegister)( VSR29_VectorSRegisterEnumValue)) +#define VSR30 ((VectorSRegister)( VSR30_VectorSRegisterEnumValue)) +#define VSR31 ((VectorSRegister)( VSR31_VectorSRegisterEnumValue)) +#endif // DONT_USE_REGISTER_DEFINES + // Maximum number of incoming arguments that can be passed in i registers. const int PPC_ARGS_IN_REGS_NUM = 8; diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/cpu/ppc/vm/stubGenerator_ppc.cpp --- a/hotspot/src/cpu/ppc/vm/stubGenerator_ppc.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/cpu/ppc/vm/stubGenerator_ppc.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -1341,10 +1341,13 @@ Register tmp3 = R8_ARG6; Register tmp4 = R9_ARG7; + VectorSRegister tmp_vsr1 = VSR1; + VectorSRegister tmp_vsr2 = VSR2; + address start = __ function_entry(); assert_positive_int(R5_ARG3); - Label l_1, l_2, l_3, l_4, l_5, l_6, l_7, l_8; + Label l_1, l_2, l_3, l_4, l_5, l_6, l_7, l_8, l_9; // don't try anything fancy if arrays don't have many elements __ li(tmp3, 0); @@ -1403,22 +1406,60 @@ __ andi_(R5_ARG3, R5_ARG3, 15); __ mtctr(tmp1); - __ bind(l_8); - // Use unrolled version for mass copying (copy 16 elements a time). - // Load feeding store gets zero latency on Power6, however not on Power5. - // Therefore, the following sequence is made for the good of both. - __ ld(tmp1, 0, R3_ARG1); - __ ld(tmp2, 8, R3_ARG1); - __ ld(tmp3, 16, R3_ARG1); - __ ld(tmp4, 24, R3_ARG1); - __ std(tmp1, 0, R4_ARG2); - __ std(tmp2, 8, R4_ARG2); - __ std(tmp3, 16, R4_ARG2); - __ std(tmp4, 24, R4_ARG2); - __ addi(R3_ARG1, R3_ARG1, 32); - __ addi(R4_ARG2, R4_ARG2, 32); - __ bdnz(l_8); - } + if (!VM_Version::has_vsx()) { + + __ bind(l_8); + // Use unrolled version for mass copying (copy 16 elements a time). + // Load feeding store gets zero latency on Power6, however not on Power5. + // Therefore, the following sequence is made for the good of both. + __ ld(tmp1, 0, R3_ARG1); + __ ld(tmp2, 8, R3_ARG1); + __ ld(tmp3, 16, R3_ARG1); + __ ld(tmp4, 24, R3_ARG1); + __ std(tmp1, 0, R4_ARG2); + __ std(tmp2, 8, R4_ARG2); + __ std(tmp3, 16, R4_ARG2); + __ std(tmp4, 24, R4_ARG2); + __ addi(R3_ARG1, R3_ARG1, 32); + __ addi(R4_ARG2, R4_ARG2, 32); + __ bdnz(l_8); + + } else { // Processor supports VSX, so use it to mass copy. + + // Prefetch src data into L2 cache. + __ dcbt(R3_ARG1, 0); + + // If supported set DSCR pre-fetch to deepest. + if (VM_Version::has_mfdscr()) { + __ load_const_optimized(tmp2, VM_Version::_dscr_val | 7); + __ mtdscr(tmp2); + } + __ li(tmp1, 16); + + // Backbranch target aligned to 32-byte. It's not aligned 16-byte + // as loop contains < 8 instructions that fit inside a single + // i-cache sector. + __ align(32); + + __ bind(l_9); + // Use loop with VSX load/store instructions to + // copy 16 elements a time. + __ lxvd2x(tmp_vsr1, 0, R3_ARG1); // Load from src. + __ stxvd2x(tmp_vsr1, 0, R4_ARG2); // Store to dst. + __ lxvd2x(tmp_vsr2, R3_ARG1, tmp1); // Load from src + 16. + __ stxvd2x(tmp_vsr2, R4_ARG2, tmp1); // Store to dst + 16. + __ addi(R3_ARG1, R3_ARG1, 32); // Update src+=32. + __ addi(R4_ARG2, R4_ARG2, 32); // Update dsc+=32. + __ bdnz(l_9); // Dec CTR and loop if not zero. + + // Restore DSCR pre-fetch value. + if (VM_Version::has_mfdscr()) { + __ load_const_optimized(tmp2, VM_Version::_dscr_val); + __ mtdscr(tmp2); + } + + } + } // FasterArrayCopy __ bind(l_6); // copy 2 elements at a time diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp --- a/hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -38,7 +38,7 @@ # include bool VM_Version::_is_determine_features_test_running = false; - +uint64_t VM_Version::_dscr_val = 0; #define MSG(flag) \ if (flag && !FLAG_IS_DEFAULT(flag)) \ @@ -111,7 +111,7 @@ // Create and print feature-string. char buf[(num_features+1) * 16]; // Max 16 chars per feature. jio_snprintf(buf, sizeof(buf), - "ppc64%s%s%s%s%s%s%s%s%s%s%s%s%s", + "ppc64%s%s%s%s%s%s%s%s%s%s%s%s%s%s", (has_fsqrt() ? " fsqrt" : ""), (has_isel() ? " isel" : ""), (has_lxarxeh() ? " lxarxeh" : ""), @@ -125,7 +125,8 @@ (has_vcipher() ? " aes" : ""), (has_vpmsumb() ? " vpmsumb" : ""), (has_tcheck() ? " tcheck" : ""), - (has_mfdscr() ? " mfdscr" : "") + (has_mfdscr() ? " mfdscr" : ""), + (has_vsx() ? " vsx" : "") // Make sure number of %s matches num_features! ); _features_string = os::strdup(buf); @@ -643,6 +644,7 @@ a->vpmsumb(VR0, VR1, VR2); // code[11] -> vpmsumb a->tcheck(0); // code[12] -> tcheck a->mfdscr(R0); // code[13] -> mfdscr + a->lxvd2x(VSR0, 0, R3_ARG1); // code[14] -> vsx a->blr(); // Emit function to set one cache line to zero. Emit function descriptor and get pointer to it. @@ -691,6 +693,7 @@ if (code[feature_cntr++]) features |= vpmsumb_m; if (code[feature_cntr++]) features |= tcheck_m; if (code[feature_cntr++]) features |= mfdscr_m; + if (code[feature_cntr++]) features |= vsx_m; // Print the detection code. if (PrintAssembly) { @@ -733,31 +736,31 @@ } // Apply the configuration if needed. - uint64_t dscr_val = (*get_dscr)(); + _dscr_val = (*get_dscr)(); if (Verbose) { - tty->print_cr("dscr value was 0x%lx" , dscr_val); + tty->print_cr("dscr value was 0x%lx" , _dscr_val); } bool change_requested = false; if (DSCR_PPC64 != (uintx)-1) { - dscr_val = DSCR_PPC64; + _dscr_val = DSCR_PPC64; change_requested = true; } if (DSCR_DPFD_PPC64 <= 7) { uint64_t mask = 0x7; - if ((dscr_val & mask) != DSCR_DPFD_PPC64) { - dscr_val = (dscr_val & ~mask) | (DSCR_DPFD_PPC64); + if ((_dscr_val & mask) != DSCR_DPFD_PPC64) { + _dscr_val = (_dscr_val & ~mask) | (DSCR_DPFD_PPC64); change_requested = true; } } if (DSCR_URG_PPC64 <= 7) { uint64_t mask = 0x7 << 6; - if ((dscr_val & mask) != DSCR_DPFD_PPC64 << 6) { - dscr_val = (dscr_val & ~mask) | (DSCR_URG_PPC64 << 6); + if ((_dscr_val & mask) != DSCR_DPFD_PPC64 << 6) { + _dscr_val = (_dscr_val & ~mask) | (DSCR_URG_PPC64 << 6); change_requested = true; } } if (change_requested) { - (*set_dscr)(dscr_val); + (*set_dscr)(_dscr_val); if (Verbose) { tty->print_cr("dscr was set to 0x%lx" , (*get_dscr)()); } diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/cpu/ppc/vm/vm_version_ppc.hpp --- a/hotspot/src/cpu/ppc/vm/vm_version_ppc.hpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/cpu/ppc/vm/vm_version_ppc.hpp Tue Jul 05 13:50:37 2016 -0700 @@ -46,6 +46,7 @@ vpmsumb, tcheck, mfdscr, + vsx, num_features // last entry to count features }; enum Feature_Flag_Set { @@ -64,6 +65,7 @@ vpmsumb_m = (1 << vpmsumb), tcheck_m = (1 << tcheck ), mfdscr_m = (1 << mfdscr ), + vsx_m = (1 << vsx ), all_features_m = (unsigned long)-1 }; @@ -97,10 +99,14 @@ static bool has_vpmsumb() { return (_features & vpmsumb_m) != 0; } static bool has_tcheck() { return (_features & tcheck_m) != 0; } static bool has_mfdscr() { return (_features & mfdscr_m) != 0; } + static bool has_vsx() { return (_features & vsx_m) != 0; } // Assembler testing static void allow_all(); static void revert(); + + // POWER 8: DSCR current value. + static uint64_t _dscr_val; }; #endif // CPU_PPC_VM_VM_VERSION_PPC_HPP diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/cpu/x86/vm/c1_LinearScan_x86.cpp --- a/hotspot/src/cpu/x86/vm/c1_LinearScan_x86.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/cpu/x86/vm/c1_LinearScan_x86.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -68,7 +68,6 @@ if (b->number_of_preds() > 1) { int id = b->first_lir_instruction_id(); ResourceBitMap regs(FrameMap::nof_fpu_regs); - regs.clear(); iw.walk_to(id); // walk after the first instruction (always a label) of the block assert(iw.current_position() == id, "did not walk completely to id"); diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp --- a/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -7046,7 +7046,6 @@ int ae) { ShortBranchVerifier sbv(this); assert(UseSSE42Intrinsics, "SSE4.2 intrinsics are required"); - assert(UseSSE >= 4, "SSE4 must be enabled for SSE4.2 intrinsics to be available"); assert(ae != StrIntrinsicNode::LU, "Invalid encoding"); // This method uses the pcmpestri instruction with bound registers @@ -7225,7 +7224,6 @@ int ae) { ShortBranchVerifier sbv(this); assert(UseSSE42Intrinsics, "SSE4.2 intrinsics are required"); - assert(UseSSE >= 4, "SSE4 must be enabled for SSE4.2 intrinsics to be available"); assert(ae != StrIntrinsicNode::LU, "Invalid encoding"); // @@ -7543,7 +7541,6 @@ XMMRegister vec1, XMMRegister vec2, XMMRegister vec3, Register tmp) { ShortBranchVerifier sbv(this); assert(UseSSE42Intrinsics, "SSE4.2 intrinsics are required"); - assert(UseSSE >= 4, "SSE4 must be enabled for SSE4.2 intrinsics to be available"); int stride = 8; @@ -7723,7 +7720,6 @@ } if (UseAVX >= 2 && UseSSE42Intrinsics) { - assert(UseSSE >= 4, "SSE4 must be enabled for SSE4.2 intrinsics to be available"); Label COMPARE_WIDE_VECTORS, VECTOR_NOT_EQUAL, COMPARE_WIDE_TAIL, COMPARE_SMALL_STR; Label COMPARE_WIDE_VECTORS_LOOP, COMPARE_16_CHARS, COMPARE_INDEX_CHAR; Label COMPARE_WIDE_VECTORS_LOOP_AVX2; @@ -7891,7 +7887,6 @@ bind(COMPARE_SMALL_STR); } else if (UseSSE42Intrinsics) { - assert(UseSSE >= 4, "SSE4 must be enabled for SSE4.2 intrinsics to be available"); Label COMPARE_WIDE_VECTORS, VECTOR_NOT_EQUAL, COMPARE_TAIL; int pcmpmask = 0x19; // Setup to compare 8-char (16-byte) vectors, @@ -8179,7 +8174,6 @@ // Fallthru to tail compare } else if (UseSSE42Intrinsics) { - assert(UseSSE >= 4, "SSE4 must be for SSE4.2 intrinsics to be available"); // With SSE4.2, use double quad vector compare Label COMPARE_WIDE_VECTORS, COMPARE_TAIL; @@ -8383,7 +8377,6 @@ movl(limit, result); // Fallthru to tail compare } else if (UseSSE42Intrinsics) { - assert(UseSSE >= 4, "SSE4 must be enabled for SSE4.2 intrinsics to be available"); // With SSE4.2, use double quad vector compare Label COMPARE_WIDE_VECTORS, COMPARE_TAIL; @@ -8747,7 +8740,6 @@ negptr(len); if (UseSSE42Intrinsics || UseAVX >= 2) { - assert(UseSSE42Intrinsics ? UseSSE >= 4 : true, "SSE4 must be enabled for SSE4.2 intrinsics to be available"); Label L_chars_8_check, L_copy_8_chars, L_copy_8_chars_exit; Label L_chars_16_check, L_copy_16_chars, L_copy_16_chars_exit; @@ -10159,7 +10151,13 @@ movdqa(xmm1, Address(buf, 0)); movdl(rax, xmm1); xorl(crc, rax); - pinsrd(xmm1, crc, 0); + if (VM_Version::supports_sse4_1()) { + pinsrd(xmm1, crc, 0); + } else { + pinsrw(xmm1, crc, 0); + shrl(crc, 16); + pinsrw(xmm1, crc, 1); + } addptr(buf, 16); subl(len, 4); // len > 0 jcc(Assembler::less, L_fold_tail); @@ -10881,7 +10879,6 @@ clear_vector_masking(); // closing of the stub context for programming mask registers } if (UseSSE42Intrinsics) { - assert(UseSSE >= 4, "SSE4 must be enabled for SSE4.2 intrinsics to be available"); Label copy_32_loop, copy_16, copy_tail; bind(below_threshold); @@ -11045,7 +11042,6 @@ clear_vector_masking(); // closing of the stub context for programming mask registers } if (UseSSE42Intrinsics) { - assert(UseSSE >= 4, "SSE4 must be enabled for SSE4.2 intrinsics to be available"); Label copy_16_loop, copy_8_loop, copy_bytes, copy_new_tail, copy_tail; movl(tmp2, len); diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/cpu/x86/vm/vm_version_x86.cpp --- a/hotspot/src/cpu/x86/vm/vm_version_x86.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/cpu/x86/vm/vm_version_x86.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -658,7 +658,7 @@ FLAG_SET_DEFAULT(UseAESCTRIntrinsics, false); } } else { - if(supports_sse4_1() && UseSSE >= 4) { + if(supports_sse4_1()) { if (FLAG_IS_DEFAULT(UseAESCTRIntrinsics)) { FLAG_SET_DEFAULT(UseAESCTRIntrinsics, true); } @@ -970,7 +970,7 @@ UseXmmI2D = false; } } - if (supports_sse4_2() && UseSSE >= 4) { + if (supports_sse4_2()) { if (FLAG_IS_DEFAULT(UseSSE42Intrinsics)) { FLAG_SET_DEFAULT(UseSSE42Intrinsics, true); } @@ -1050,7 +1050,7 @@ UseUnalignedLoadStores = true; // use movdqu on newest Intel cpus } } - if (supports_sse4_2() && UseSSE >= 4) { + if (supports_sse4_2()) { if (FLAG_IS_DEFAULT(UseSSE42Intrinsics)) { FLAG_SET_DEFAULT(UseSSE42Intrinsics, true); } diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/cpu/x86/vm/x86.ad --- a/hotspot/src/cpu/x86/vm/x86.ad Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/cpu/x86/vm/x86.ad Tue Jul 05 13:50:37 2016 -0700 @@ -1718,7 +1718,7 @@ ret_value = false; break; case Op_StrIndexOfChar: - if (!(UseSSE > 4)) + if (!UseSSE42Intrinsics) ret_value = false; break; case Op_OnSpinWait: diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/memory/Universe.java --- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/memory/Universe.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/memory/Universe.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. * 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,8 @@ narrowOopShiftField = type.getCIntegerField("_narrow_oop._shift"); narrowKlassBaseField = type.getAddressField("_narrow_klass._base"); narrowKlassShiftField = type.getCIntegerField("_narrow_klass._shift"); + + UniverseExt.initialize(heapConstructor); } public Universe() { diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/memory/UniverseExt.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/memory/UniverseExt.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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 sun.jvm.hotspot.runtime.*; + +public class UniverseExt { + public static void initialize(VirtualConstructor heapConstructor) { } +} diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCIRuntime.java --- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCIRuntime.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCIRuntime.java Tue Jul 05 13:50:37 2016 -0700 @@ -31,10 +31,13 @@ import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; +import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.ServiceLoader; import java.util.TreeMap; import jdk.internal.misc.VM; @@ -213,7 +216,22 @@ private final Map, JVMCIBackend> backends = new HashMap<>(); - private final Iterable vmEventListeners; + private volatile List vmEventListeners; + + private Iterable getVmEventListeners() { + if (vmEventListeners == null) { + synchronized (this) { + if (vmEventListeners == null) { + List listeners = new ArrayList<>(); + for (HotSpotVMEventListener vmEventListener : ServiceLoader.load(HotSpotVMEventListener.class)) { + listeners.add(vmEventListener); + } + vmEventListeners = listeners; + } + } + } + return vmEventListeners; + } /** * Stores the result of {@link HotSpotJVMCICompilerFactory#getTrivialPrefixes()} so that it can @@ -240,8 +258,6 @@ hostBackend = registerBackend(factory.createJVMCIBackend(this, null)); } - vmEventListeners = Services.load(HotSpotVMEventListener.class); - metaAccessContext = new HotSpotJVMCIMetaAccessContext(); boolean printFlags = Option.PrintFlags.getBoolean(); @@ -370,7 +386,7 @@ */ @SuppressWarnings({"unused"}) private void shutdown() throws Exception { - for (HotSpotVMEventListener vmEventListener : vmEventListeners) { + for (HotSpotVMEventListener vmEventListener : getVmEventListeners()) { vmEventListener.notifyShutdown(); } } @@ -382,7 +398,7 @@ */ @SuppressWarnings({"unused"}) private void bootstrapFinished() throws Exception { - for (HotSpotVMEventListener vmEventListener : vmEventListeners) { + for (HotSpotVMEventListener vmEventListener : getVmEventListeners()) { vmEventListener.notifyBootstrapFinished(); } } @@ -395,7 +411,7 @@ * @param compiledCode */ void notifyInstall(HotSpotCodeCacheProvider hotSpotCodeCacheProvider, InstalledCode installedCode, CompiledCode compiledCode) { - for (HotSpotVMEventListener vmEventListener : vmEventListeners) { + for (HotSpotVMEventListener vmEventListener : getVmEventListeners()) { vmEventListener.notifyInstall(hotSpotCodeCacheProvider, installedCode, compiledCode); } } diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotMemoryAccessProviderImpl.java --- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotMemoryAccessProviderImpl.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotMemoryAccessProviderImpl.java Tue Jul 05 13:50:37 2016 -0700 @@ -144,8 +144,18 @@ return ret; } - @Override - public JavaConstant readUnsafeConstant(JavaKind kind, JavaConstant baseConstant, long displacement) { + /** + * Reads a value of this kind using a base address and a displacement. No bounds checking or + * type checking is performed. Returns {@code null} if the value is not available at this point. + * + * @param baseConstant the base address from which the value is read. + * @param displacement the displacement within the object in bytes + * @return the read value encapsulated in a {@link JavaConstant} object, or {@code null} if the + * value cannot be read. + * @throws IllegalArgumentException if {@code kind} is {@code null}, {@link JavaKind#Void}, not + * {@link JavaKind#Object} or not {@linkplain JavaKind#isPrimitive() primitive} kind + */ + JavaConstant readUnsafeConstant(JavaKind kind, JavaConstant baseConstant, long displacement) { if (kind == null) { throw new IllegalArgumentException("null JavaKind"); } diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.meta/src/jdk/vm/ci/meta/MemoryAccessProvider.java --- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.meta/src/jdk/vm/ci/meta/MemoryAccessProvider.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.meta/src/jdk/vm/ci/meta/MemoryAccessProvider.java Tue Jul 05 13:50:37 2016 -0700 @@ -28,19 +28,6 @@ public interface MemoryAccessProvider { /** - * Reads a value of this kind using a base address and a displacement. No bounds checking or - * type checking is performed. Returns {@code null} if the value is not available at this point. - * - * @param base the base address from which the value is read. - * @param displacement the displacement within the object in bytes - * @return the read value encapsulated in a {@link JavaConstant} object, or {@code null} if the - * value cannot be read. - * @throws IllegalArgumentException if {@code kind} is {@code null}, {@link JavaKind#Void}, not - * {@link JavaKind#Object} or not {@linkplain JavaKind#isPrimitive() primitive} kind - */ - JavaConstant readUnsafeConstant(JavaKind kind, JavaConstant base, long displacement) throws IllegalArgumentException; - - /** * Reads a primitive value using a base address and a displacement. * * @param kind the {@link JavaKind} of the returned {@link JavaConstant} object diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/os/aix/vm/libo4.cpp --- a/hotspot/src/os/aix/vm/libo4.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/os/aix/vm/libo4.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2015 SAP SE. All rights reserved. + * Copyright (c) 2012, 2016 SAP SE. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,17 +22,49 @@ * */ -// This is only a stub. Will flesh out later when/if we add further support -// for PASE. - #include "libo4.hpp" -bool libo4::init() { return false; } -void libo4::cleanup() {} -bool libo4::get_memory_info (unsigned long long* p_virt_total, unsigned long long* p_real_total, - unsigned long long* p_real_free, unsigned long long* p_pgsp_total, unsigned long long* p_pgsp_free) { +// global variables + +// whether initialization worked +static bool g_initialized = false; + +////////////////////////// +// class libo4 - impl // +////////////////////////// + +bool libo4::init() { + if (g_initialized) { + return true; + } return false; } -bool libo4::get_load_avg (double* p_avg1, double* p_avg5, double* p_avg15) { return false; } -bool libo4::realpath (const char* file_name, char* resolved_name, int resolved_name_len) { return false; } + +void libo4::cleanup() { + if (g_initialized) { + g_initialized = false; + } +} + +bool libo4::get_memory_info(unsigned long long* p_virt_total, + unsigned long long* p_real_total, + unsigned long long* p_real_free, + unsigned long long* p_pgsp_total, + unsigned long long* p_pgsp_free) { + return false; +} +bool libo4::get_load_avg(double* p_avg1, double* p_avg5, double* p_avg15) { + return false; +} + +bool libo4::realpath(const char* file_name, char* resolved_name, + int resolved_name_len) { + return false; +} + +bool libo4::removeEscapeMessageFromJoblogByContext(const void* context) { + // Note: no tracing here! We run in signal handling context + + return false; +} diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/os/aix/vm/libo4.hpp --- a/hotspot/src/os/aix/vm/libo4.hpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/os/aix/vm/libo4.hpp Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2015 SAP SE. All rights reserved. + * Copyright (c) 2012, 2016 SAP SE. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,56 +22,69 @@ * */ -// A C++ wrapper around the libo4 porting library. The libo4 porting library -// is a set of bridge functions into native AS/400 functionality. +// Class libo4 is a C++ wrapper around the libo4 porting library. It handles +// basic stuff like dynamic loading, library initialization etc. +// The libo4 porting library is a set of functions that bridge from the AIX +// runtime environment on OS/400 (aka PASE layer) into native OS/400 +// functionality (aka ILE layer) to close some functional gaps that exist in +// the PASE layer. #ifndef OS_AIX_VM_LIBO4_HPP #define OS_AIX_VM_LIBO4_HPP - class libo4 { public: - // Initialize the libo4 porting library. // Returns true if succeeded, false if error. static bool init(); - // cleanup of the libo4 porting library. + // Triggers cleanup of the libo4 porting library. static void cleanup(); - // returns a number of memory statistics from the - // AS/400. + // Returns a number of memory statistics from OS/400. + // + // See libo4.h for details on this API. // // Specify NULL for numbers you are not interested in. // - // returns false if an error happened. Activate OsMisc trace for + // Returns false if an error happened. Activate OsMisc trace for // trace output. // - static bool get_memory_info (unsigned long long* p_virt_total, unsigned long long* p_real_total, - unsigned long long* p_real_free, unsigned long long* p_pgsp_total, unsigned long long* p_pgsp_free); + static bool get_memory_info(unsigned long long* p_virt_total, + unsigned long long* p_real_total, + unsigned long long* p_real_free, + unsigned long long* p_pgsp_total, + unsigned long long* p_pgsp_free); - // returns information about system load + // Returns information about system load // (similar to "loadavg()" under other Unices) // + // See libo4.h for details on this API. + // // Specify NULL for numbers you are not interested in. // - // returns false if an error happened. Activate OsMisc trace for + // Returns false if an error happened. Activate OsMisc trace for // trace output. // - static bool get_load_avg (double* p_avg1, double* p_avg5, double* p_avg15); + static bool get_load_avg(double* p_avg1, double* p_avg5, double* p_avg15); - // this is a replacement for the "realpath()" API which does not really work - // on PASE + // This is a replacement for the "realpath()" API which does not really work + // in PASE together with the (case insensitive but case preserving) + // filesystem on OS/400. // - // Specify NULL for numbers you are not interested in. + // See libo4.h for details on this API. // - // returns false if an error happened. Activate OsMisc trace for + // Returns false if an error happened. Activate OsMisc trace for // trace output. // - static bool realpath (const char* file_name, - char* resolved_name, int resolved_name_len); + static bool realpath(const char* file_name, char* resolved_name, + int resolved_name_len); + // Call libo4_RemoveEscapeMessageFromJoblogByContext API to remove messages + // from the OS/400 job log. + // + // See libo4.h for details on this API. + static bool removeEscapeMessageFromJoblogByContext(const void* context); }; #endif // OS_AIX_VM_LIBO4_HPP - diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/os/aix/vm/libperfstat_aix.cpp --- a/hotspot/src/os/aix/vm/libperfstat_aix.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/os/aix/vm/libperfstat_aix.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2015 SAP SE. All rights reserved. + * Copyright (c) 2012, 2016 SAP SE. All rights reserved. * 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,10 +180,12 @@ memset (&psct, '\0', sizeof(psct)); if (-1 == libperfstat::perfstat_cpu_total(NULL, &psct, sizeof(PERFSTAT_CPU_TOTAL_T_LATEST), 1)) { - if (-1 == libperfstat::perfstat_cpu_total(NULL, &psct, sizeof(perfstat_cpu_total_t_61), 1)) { - if (-1 == libperfstat::perfstat_cpu_total(NULL, &psct, sizeof(perfstat_cpu_total_t_53), 1)) { + if (-1 == libperfstat::perfstat_cpu_total(NULL, &psct, sizeof(perfstat_cpu_total_t_71), 1)) { + if (-1 == libperfstat::perfstat_cpu_total(NULL, &psct, sizeof(perfstat_cpu_total_t_61), 1)) { + if (-1 == libperfstat::perfstat_cpu_total(NULL, &psct, sizeof(perfstat_cpu_total_t_53), 1)) { trcVerbose("perfstat_cpu_total() failed (errno=%d)", errno); return false; + } } } } diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/os/aix/vm/libperfstat_aix.hpp --- a/hotspot/src/os/aix/vm/libperfstat_aix.hpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/os/aix/vm/libperfstat_aix.hpp Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013 SAP SE. All rights reserved. + * Copyright (c) 2012, 2016 SAP SE. All rights reserved. * 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,10 +337,109 @@ int spurrflag; /* set if running in spurr mode */ u_longlong_t version; /* version number (1, 2, etc.,) */ /* >>>>> END OF STRUCTURE DEFINITION <<<<< */ -#define CURR_VERSION_CPU_TOTAL 1 /* Incremented by one for every new release * +/* #define CURR_VERSION_CPU_TOTAL 1 Incremented by one for every new release * * of perfstat_cpu_total_t data structure */ } perfstat_cpu_total_t_71; +typedef struct { /* global cpu information AIX 7.2 / 6.1 TL6 (see oslevel -r) */ + int ncpus; /* number of active logical processors */ + int ncpus_cfg; /* number of configured processors */ + char description[IDENTIFIER_LENGTH]; /* processor description (type/official name) */ + u_longlong_t processorHZ; /* processor speed in Hz */ + u_longlong_t user; /* raw total number of clock ticks spent in user mode */ + u_longlong_t sys; /* raw total number of clock ticks spent in system mode */ + u_longlong_t idle; /* raw total number of clock ticks spent idle */ + u_longlong_t wait; /* raw total number of clock ticks spent waiting for I/O */ + u_longlong_t pswitch; /* number of process switches (change in currently running process) */ + u_longlong_t syscall; /* number of system calls executed */ + u_longlong_t sysread; /* number of read system calls executed */ + u_longlong_t syswrite; /* number of write system calls executed */ + u_longlong_t sysfork; /* number of forks system calls executed */ + u_longlong_t sysexec; /* number of execs system calls executed */ + u_longlong_t readch; /* number of characters tranferred with read system call */ + u_longlong_t writech; /* number of characters tranferred with write system call */ + u_longlong_t devintrs; /* number of device interrupts */ + u_longlong_t softintrs; /* number of software interrupts */ + time_t lbolt; /* number of ticks since last reboot */ + u_longlong_t loadavg[3]; /* (1<. */ + u_longlong_t runque; /* length of the run queue (processes ready) */ + u_longlong_t swpque; /* ength of the swap queue (processes waiting to be paged in) */ + u_longlong_t bread; /* number of blocks read */ + u_longlong_t bwrite; /* number of blocks written */ + u_longlong_t lread; /* number of logical read requests */ + u_longlong_t lwrite; /* number of logical write requests */ + u_longlong_t phread; /* number of physical reads (reads on raw devices) */ + u_longlong_t phwrite; /* number of physical writes (writes on raw devices) */ + u_longlong_t runocc; /* updated whenever runque is updated, i.e. the runqueue is occupied. + * This can be used to compute the simple average of ready processes */ + u_longlong_t swpocc; /* updated whenever swpque is updated. i.e. the swpqueue is occupied. + * This can be used to compute the simple average processes waiting to be paged in */ + u_longlong_t iget; /* number of inode lookups */ + u_longlong_t namei; /* number of vnode lookup from a path name */ + u_longlong_t dirblk; /* number of 512-byte block reads by the directory search routine to locate an entry for a file */ + u_longlong_t msg; /* number of IPC message operations */ + u_longlong_t sema; /* number of IPC semaphore operations */ + u_longlong_t rcvint; /* number of tty receive interrupts */ + u_longlong_t xmtint; /* number of tyy transmit interrupts */ + u_longlong_t mdmint; /* number of modem interrupts */ + u_longlong_t tty_rawinch; /* number of raw input characters */ + u_longlong_t tty_caninch; /* number of canonical input characters (always zero) */ + u_longlong_t tty_rawoutch;/* number of raw output characters */ + u_longlong_t ksched; /* number of kernel processes created */ + u_longlong_t koverf; /* kernel process creation attempts where: + * -the user has forked to their maximum limit + * -the configuration limit of processes has been reached */ + u_longlong_t kexit; /* number of kernel processes that became zombies */ + u_longlong_t rbread; /* number of remote read requests */ + u_longlong_t rcread; /* number of cached remote reads */ + u_longlong_t rbwrt; /* number of remote writes */ + u_longlong_t rcwrt; /* number of cached remote writes */ + u_longlong_t traps; /* number of traps */ + int ncpus_high; /* index of highest processor online */ + u_longlong_t puser; /* raw number of physical processor tics in user mode */ + u_longlong_t psys; /* raw number of physical processor tics in system mode */ + u_longlong_t pidle; /* raw number of physical processor tics idle */ + u_longlong_t pwait; /* raw number of physical processor tics waiting for I/O */ + u_longlong_t decrintrs; /* number of decrementer tics interrupts */ + u_longlong_t mpcrintrs; /* number of mpc's received interrupts */ + u_longlong_t mpcsintrs; /* number of mpc's sent interrupts */ + u_longlong_t phantintrs; /* number of phantom interrupts */ + u_longlong_t idle_donated_purr; /* number of idle cycles donated by a dedicated partition enabled for donation */ + u_longlong_t idle_donated_spurr;/* number of idle spurr cycles donated by a dedicated partition enabled for donation */ + u_longlong_t busy_donated_purr; /* number of busy cycles donated by a dedicated partition enabled for donation */ + u_longlong_t busy_donated_spurr;/* number of busy spurr cycles donated by a dedicated partition enabled for donation */ + u_longlong_t idle_stolen_purr; /* number of idle cycles stolen by the hypervisor from a dedicated partition */ + u_longlong_t idle_stolen_spurr; /* number of idle spurr cycles stolen by the hypervisor from a dedicated partition */ + u_longlong_t busy_stolen_purr; /* number of busy cycles stolen by the hypervisor from a dedicated partition */ + u_longlong_t busy_stolen_spurr; /* number of busy spurr cycles stolen by the hypervisor from a dedicated partition */ + short iowait; /* number of processes that are asleep waiting for buffered I/O */ + short physio; /* number of processes waiting for raw I/O */ + longlong_t twait; /* number of threads that are waiting for filesystem direct(cio) */ + u_longlong_t hpi; /* number of hypervisor page-ins */ + u_longlong_t hpit; /* Time spent in hypervisor page-ins (in nanoseconds) */ + u_longlong_t puser_spurr; /* number of spurr cycles spent in user mode */ + u_longlong_t psys_spurr; /* number of spurr cycles spent in kernel mode */ + u_longlong_t pidle_spurr; /* number of spurr cycles spent in idle mode */ + u_longlong_t pwait_spurr; /* number of spurr cycles spent in wait mode */ + int spurrflag; /* set if running in spurr mode */ + u_longlong_t version; /* version number (1, 2, etc.,) */ + u_longlong_t tb_last; /*time base counter */ + u_longlong_t purr_coalescing; /* If the calling partition is + * authorized to see pool wide statistics then + * PURR cycles consumed to coalesce data + * else set to zero.*/ + u_longlong_t spurr_coalescing; /* If the calling partition is + * authorized to see pool wide statistics then + * SPURR cycles consumed to coalesce data + * else set to zero.*/ + +/* >>>>> END OF STRUCTURE DEFINITION <<<<< */ +#define CURR_VERSION_CPU_TOTAL 2 /* Incremented by one for every new release * + * of perfstat_cpu_total_t data structure */ +} perfstat_cpu_total_t_72; + + typedef union { uint w; struct { @@ -756,7 +855,7 @@ ////////////////////////////////////////////////////////////////////////////////////////////////////////////// #define PERFSTAT_PARTITON_TOTAL_T_LATEST perfstat_partition_total_t_71_1/* latest perfstat_partition_total_t structure */ -#define PERFSTAT_CPU_TOTAL_T_LATEST perfstat_cpu_total_t_71 /* latest perfstat_cpu_total_t structure */ +#define PERFSTAT_CPU_TOTAL_T_LATEST perfstat_cpu_total_t_72 /* latest perfstat_cpu_total_t structure */ #define PERFSTAT_WPAR_TOTAL_T_LATEST perfstat_wpar_total_t_71 /* latest perfstat_wpar_total_t structure */ class libperfstat { diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/c1/c1_Canonicalizer.cpp --- a/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved. * 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 @@ assert(array == NULL || FoldStableValues, "not enabled"); // Constant fold loads from stable arrays. - if (array != NULL && index != NULL) { + if (!x->mismatched() && array != NULL && index != NULL) { jint idx = index->value(); if (idx < 0 || idx >= array->value()->length()) { // Leave the load as is. The range check will handle it. @@ -310,8 +310,6 @@ return; } } - - } diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/c1/c1_GraphBuilder.cpp --- a/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -4227,11 +4227,11 @@ Value index = args->at(1); if (is_store) { Value value = args->at(2); - Instruction* store = append(new StoreIndexed(array, index, NULL, T_CHAR, value, state_before, false)); + Instruction* store = append(new StoreIndexed(array, index, NULL, T_CHAR, value, state_before, false, true)); store->set_flag(Instruction::NeedsRangeCheckFlag, false); _memory->store_value(value); } else { - Instruction* load = append(new LoadIndexed(array, index, NULL, T_CHAR, state_before)); + Instruction* load = append(new LoadIndexed(array, index, NULL, T_CHAR, state_before, true)); load->set_flag(Instruction::NeedsRangeCheckFlag, false); push(load->type(), load); } diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/c1/c1_IR.cpp --- a/hotspot/src/share/vm/c1/c1_IR.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/c1/c1_IR.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -147,10 +147,8 @@ _wrote_volatile = false; _start = NULL; - if (osr_bci == -1) { - _requires_phi_function.clear(); - } else { - // selective creation of phi functions is not possibel in osr-methods + if (osr_bci != -1) { + // selective creation of phi functions is not possibel in osr-methods _requires_phi_function.set_range(0, method->max_locals()); } @@ -540,7 +538,6 @@ { TRACE_LINEAR_SCAN(2, tty->print_cr("***** computing linear-scan block order")); - init_visited(); count_edges(start_block, NULL); if (compilation()->is_profiling()) { @@ -646,7 +643,6 @@ TRACE_LINEAR_SCAN(3, tty->print_cr("----- marking loops")); _loop_map = BitMap2D(_num_loops, _max_block_id); - _loop_map.clear(); for (int i = _loop_end_blocks.length() - 1; i >= 0; i--) { BlockBegin* loop_end = _loop_end_blocks.at(i); diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/c1/c1_Instruction.hpp --- a/hotspot/src/share/vm/c1/c1_Instruction.hpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/c1/c1_Instruction.hpp Tue Jul 05 13:50:37 2016 -0700 @@ -912,14 +912,16 @@ Value _index; Value _length; BasicType _elt_type; + bool _mismatched; public: // creation - AccessIndexed(Value array, Value index, Value length, BasicType elt_type, ValueStack* state_before) + AccessIndexed(Value array, Value index, Value length, BasicType elt_type, ValueStack* state_before, bool mismatched) : AccessArray(as_ValueType(elt_type), array, state_before) , _index(index) , _length(length) , _elt_type(elt_type) + , _mismatched(mismatched) { set_flag(Instruction::NeedsRangeCheckFlag, true); ASSERT_VALUES @@ -929,6 +931,7 @@ Value index() const { return _index; } Value length() const { return _length; } BasicType elt_type() const { return _elt_type; } + bool mismatched() const { return _mismatched; } void clear_length() { _length = NULL; } // perform elimination of range checks involving constants @@ -945,8 +948,8 @@ public: // creation - LoadIndexed(Value array, Value index, Value length, BasicType elt_type, ValueStack* state_before) - : AccessIndexed(array, index, length, elt_type, state_before) + LoadIndexed(Value array, Value index, Value length, BasicType elt_type, ValueStack* state_before, bool mismatched = false) + : AccessIndexed(array, index, length, elt_type, state_before, mismatched) , _explicit_null_check(NULL) {} // accessors @@ -974,8 +977,9 @@ public: // creation - StoreIndexed(Value array, Value index, Value length, BasicType elt_type, Value value, ValueStack* state_before, bool check_boolean) - : AccessIndexed(array, index, length, elt_type, state_before) + StoreIndexed(Value array, Value index, Value length, BasicType elt_type, Value value, ValueStack* state_before, + bool check_boolean, bool mismatched = false) + : AccessIndexed(array, index, length, elt_type, state_before, mismatched) , _value(value), _profiled_method(NULL), _profiled_bci(0), _check_boolean(check_boolean) { set_flag(NeedsWriteBarrierFlag, (as_ValueType(elt_type)->is_object())); diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/c1/c1_LIRGenerator.cpp --- a/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -1387,7 +1387,6 @@ void LIRGenerator::set_vreg_flag(int vreg_num, VregFlag f) { if (_vreg_flags.size_in_bits() == 0) { BitMap2D temp(100, num_vreg_flags); - temp.clear(); _vreg_flags = temp; } _vreg_flags.at_put_grow(vreg_num, f, true); diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/c1/c1_LinearScan.cpp --- a/hotspot/src/share/vm/c1/c1_LinearScan.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/c1/c1_LinearScan.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -562,14 +562,13 @@ LIR_OpVisitState visitor; BitMap2D local_interval_in_loop = BitMap2D(_num_virtual_regs, num_loops()); - local_interval_in_loop.clear(); // iterate all blocks for (int i = 0; i < num_blocks; i++) { BlockBegin* block = block_at(i); - ResourceBitMap live_gen(live_size); live_gen.clear(); - ResourceBitMap live_kill(live_size); live_kill.clear(); + ResourceBitMap live_gen(live_size); + ResourceBitMap live_kill(live_size); if (block->is_set(BlockBegin::exception_entry_flag)) { // Phi functions at the begin of an exception handler are @@ -715,8 +714,8 @@ block->set_live_gen (live_gen); block->set_live_kill(live_kill); - block->set_live_in (ResourceBitMap(live_size)); block->live_in().clear(); - block->set_live_out (ResourceBitMap(live_size)); block->live_out().clear(); + block->set_live_in (ResourceBitMap(live_size)); + block->set_live_out (ResourceBitMap(live_size)); TRACE_LINEAR_SCAN(4, tty->print("live_gen B%d ", block->block_id()); print_bitmap(block->live_gen())); TRACE_LINEAR_SCAN(4, tty->print("live_kill B%d ", block->block_id()); print_bitmap(block->live_kill())); @@ -741,7 +740,7 @@ bool change_occurred; bool change_occurred_in_block; int iteration_count = 0; - ResourceBitMap live_out(live_set_size()); live_out.clear(); // scratch set for calculations + ResourceBitMap live_out(live_set_size()); // scratch set for calculations // Perform a backward dataflow analysis to compute live_out and live_in for each block. // The loop is executed until a fixpoint is reached (no changes in an iteration) @@ -827,7 +826,6 @@ // check that the live_in set of the first block is empty ResourceBitMap live_in_args(ir()->start()->live_in().size()); - live_in_args.clear(); if (!ir()->start()->live_in().is_same(live_in_args)) { #ifdef ASSERT tty->print_cr("Error: live_in set of first block must be empty (when this fails, virtual registers are used before they are defined)"); @@ -1774,8 +1772,8 @@ int num_blocks = block_count(); MoveResolver move_resolver(this); - ResourceBitMap block_completed(num_blocks); block_completed.clear(); - ResourceBitMap already_resolved(num_blocks); already_resolved.clear(); + ResourceBitMap block_completed(num_blocks); + ResourceBitMap already_resolved(num_blocks); int i; for (i = 0; i < num_blocks; i++) { @@ -3750,7 +3748,6 @@ ResourceBitMap used_regs(LinearScan::nof_regs + allocator()->frame_map()->argcount() + allocator()->max_spills()); - used_regs.clear(); if (!_multiple_reads_allowed) { for (i = 0; i < _mapping_from.length(); i++) { Interval* it = _mapping_from.at(i); @@ -6319,7 +6316,6 @@ void ControlFlowOptimizer::delete_jumps_to_return(BlockList* code) { #ifdef ASSERT ResourceBitMap return_converted(BlockBegin::number_of_blocks()); - return_converted.clear(); #endif for (int i = code->length() - 1; i >= 0; i--) { diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/c1/c1_ValueSet.hpp --- a/hotspot/src/share/vm/c1/c1_ValueSet.hpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/c1/c1_ValueSet.hpp Tue Jul 05 13:50:37 2016 -0700 @@ -53,7 +53,6 @@ }; inline ValueSet::ValueSet() : _map(Instruction::number_of_instructions()) { - _map.clear(); } diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/ci/ciMethod.cpp --- a/hotspot/src/share/vm/ci/ciMethod.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/ci/ciMethod.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -449,7 +449,6 @@ OopMapCache::compute_one_oop_map(get_Method(), bci, &mask); int mask_size = max_locals(); ResourceBitMap result(mask_size); - result.clear(); int i; for (i = 0; i < mask_size ; i++ ) { if (mask.is_oop(i)) result.set_bit(i); diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/classfile/classFileParser.cpp --- a/hotspot/src/share/vm/classfile/classFileParser.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/classfile/classFileParser.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -4673,6 +4673,7 @@ } // Unqualified names may not contain the characters '.', ';', '[', or '/'. +// In class names, '/' separates unqualified names. This is verified in this function also. // Method names also may not contain the characters '<' or '>', unless // or . Note that method names may not be or in this // method. Because these names have been checked as special cases before @@ -4698,8 +4699,16 @@ if (ch == ';' || ch == '[' ) { return false; // do not permit '.', ';', or '[' } - if (type != ClassFileParser::LegalClass && ch == '/') { - return false; // do not permit '/' unless it's class name + if (ch == '/') { + // check for '//' or leading or trailing '/' which are not legal + // unqualified name must not be empty + if (type == ClassFileParser::LegalClass) { + if (p == name || p+1 >= name+length || *(p+1) == '/') { + return false; + } + } else { + return false; // do not permit '/' unless it's class name + } } if (type == ClassFileParser::LegalMethod && (ch == '<' || ch == '>')) { return false; // do not permit '<' or '>' in method names @@ -5347,15 +5356,7 @@ if (!is_internal()) { if (log_is_enabled(Info, class, load)) { ResourceMark rm; - const char* module_name = NULL; - static const size_t modules_image_name_len = strlen(MODULES_IMAGE_NAME); - size_t stream_len = strlen(_stream->source()); - // See if _stream->source() ends in "modules" - if (module_entry->is_named() && modules_image_name_len < stream_len && - (strncmp(_stream->source() + stream_len - modules_image_name_len, - MODULES_IMAGE_NAME, modules_image_name_len) == 0)) { - module_name = module_entry->name()->as_C_string(); - } + const char* module_name = (module_entry->name() == NULL) ? UNNAMED_MODULE : module_entry->name()->as_C_string(); if (log_is_enabled(Info, class, load)) { ik->print_loading_log(LogLevel::Info, _loader_data, module_name, _stream); diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/classfile/classLoader.cpp --- a/hotspot/src/share/vm/classfile/classLoader.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/classfile/classLoader.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -181,26 +181,59 @@ } // Used to obtain the package name from a fully qualified class name. -// It is the responsibility of the caller to establish ResourceMark. -const char* ClassLoader::package_from_name(const char* class_name) { - const char* last_slash = strrchr(class_name, '/'); +// It is the responsibility of the caller to establish a ResourceMark. +const char* ClassLoader::package_from_name(const char* const class_name, bool* bad_class_name) { + if (class_name == NULL) { + if (bad_class_name != NULL) { + *bad_class_name = true; + } + return NULL; + } + + if (bad_class_name != NULL) { + *bad_class_name = false; + } + + const char* const last_slash = strrchr(class_name, '/'); if (last_slash == NULL) { // No package name return NULL; } - int length = last_slash - class_name; + + char* class_name_ptr = (char*) class_name; + // Skip over '['s + if (*class_name_ptr == '[') { + do { + class_name_ptr++; + } while (*class_name_ptr == '['); - // A class name could have just the slash character in the name, - // resulting in a negative length. + // Fully qualified class names should not contain a 'L'. + // Set bad_class_name to true to indicate that the package name + // could not be obtained due to an error condition. + // In this situation, is_same_class_package returns false. + if (*class_name_ptr == 'L') { + if (bad_class_name != NULL) { + *bad_class_name = true; + } + return NULL; + } + } + + int length = last_slash - class_name_ptr; + + // A class name could have just the slash character in the name. if (length <= 0) { // No package name + if (bad_class_name != NULL) { + *bad_class_name = true; + } return NULL; } // drop name after last slash (including slash) // Ex., "java/lang/String.class" => "java/lang" char* pkg_name = NEW_RESOURCE_ARRAY(char, length + 1); - strncpy(pkg_name, class_name, length); + strncpy(pkg_name, class_name_ptr, length); *(pkg_name+length) = '\0'; return (const char *)pkg_name; @@ -228,8 +261,9 @@ ClassFileStream* ClassPathDirEntry::open_stream(const char* name, TRAPS) { // construct full path name - char path[JVM_MAXPATHLEN]; - if (jio_snprintf(path, sizeof(path), "%s%s%s", _dir, os::file_separator(), name) == -1) { + char* path = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, JVM_MAXPATHLEN); + if (jio_snprintf(path, JVM_MAXPATHLEN, "%s%s%s", _dir, os::file_separator(), name) == -1) { + FREE_RESOURCE_ARRAY(char, path, JVM_MAXPATHLEN); return NULL; } // check if file exists @@ -256,6 +290,7 @@ if (UsePerfData) { ClassLoader::perf_sys_classfile_bytes_read()->inc(num_read); } + FREE_RESOURCE_ARRAY(char, path, JVM_MAXPATHLEN); // Resource allocated return new ClassFileStream(buffer, st.st_size, @@ -264,6 +299,7 @@ } } } + FREE_RESOURCE_ARRAY(char, path, JVM_MAXPATHLEN); return NULL; } @@ -344,9 +380,9 @@ if (is_multi_ver) { int n; - char entry_name[JVM_MAXPATHLEN]; + char* entry_name = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, JVM_MAXPATHLEN); if (version > 0) { - n = jio_snprintf(entry_name, sizeof(entry_name), "META-INF/versions/%d/%s", version, name); + n = jio_snprintf(entry_name, JVM_MAXPATHLEN, "META-INF/versions/%d/%s", version, name); entry_name[n] = '\0'; buffer = open_entry((const char*)entry_name, filesize, false, CHECK_NULL); if (buffer == NULL) { @@ -355,7 +391,7 @@ } if (buffer == NULL) { for (int i = cur_ver; i >= base_version; i--) { - n = jio_snprintf(entry_name, sizeof(entry_name), "META-INF/versions/%d/%s", i, name); + n = jio_snprintf(entry_name, JVM_MAXPATHLEN, "META-INF/versions/%d/%s", i, name); entry_name[n] = '\0'; buffer = open_entry((const char*)entry_name, filesize, false, CHECK_NULL); if (buffer != NULL) { @@ -363,6 +399,7 @@ } } } + FREE_RESOURCE_ARRAY(char, entry_name, JVM_MAXPATHLEN); } } return buffer; @@ -508,7 +545,8 @@ const char* name, const char* extension, void* arg) { if (strcmp(extension, "class") == 0) { Thread* THREAD = Thread::current(); - char path[JIMAGE_MAX_PATH]; + ResourceMark rm(THREAD); + char* path = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, JIMAGE_MAX_PATH); jio_snprintf(path, JIMAGE_MAX_PATH - 1, "%s/%s.class", package, name); ClassLoader::compile_the_world_in(path, *(Handle*)arg, THREAD); return !HAS_PENDING_EXCEPTION; @@ -750,9 +788,10 @@ JavaThread* thread = JavaThread::current(); ClassPathEntry* new_entry = NULL; if ((st->st_mode & S_IFREG) == S_IFREG) { + ResourceMark rm(thread); // Regular file, should be a zip or jimage file // Canonicalized filename - char canonical_path[JVM_MAXPATHLEN]; + char* canonical_path = NEW_RESOURCE_ARRAY_IN_THREAD(thread, char, JVM_MAXPATHLEN); if (!get_canonical_path(path, canonical_path, JVM_MAXPATHLEN)) { // This matches the classic VM if (throw_exception) { @@ -777,14 +816,13 @@ if (zip != NULL && error_msg == NULL) { new_entry = new ClassPathZipEntry(zip, path, is_boot_append); } else { - ResourceMark rm(thread); char *msg; if (error_msg == NULL) { - msg = NEW_RESOURCE_ARRAY(char, strlen(path) + 128); ; + msg = NEW_RESOURCE_ARRAY_IN_THREAD(thread, char, strlen(path) + 128); ; jio_snprintf(msg, strlen(path) + 127, "error in opening JAR file %s", path); } else { int len = (int)(strlen(path) + strlen(error_msg) + 128); - msg = NEW_RESOURCE_ARRAY(char, len); ; + msg = NEW_RESOURCE_ARRAY_IN_THREAD(thread, char, len); ; jio_snprintf(msg, len - 1, "error in opening JAR file <%s> %s", error_msg, path); } // Don't complain about bad jar files added via -Xbootclasspath/a:. @@ -1112,13 +1150,11 @@ assert(fullq_class_name != NULL, "just checking"); // Get package name from fully qualified class name. - const char *cp = strrchr(fullq_class_name, '/'); + ResourceMark rm; + const char *cp = package_from_name(fullq_class_name); if (cp != NULL) { - int len = cp - fullq_class_name; - PackageEntryTable* pkg_entry_tbl = - ClassLoaderData::the_null_class_loader_data()->packages(); - TempNewSymbol pkg_symbol = - SymbolTable::new_symbol(fullq_class_name, len, CHECK_false); + PackageEntryTable* pkg_entry_tbl = ClassLoaderData::the_null_class_loader_data()->packages(); + TempNewSymbol pkg_symbol = SymbolTable::new_symbol(cp, CHECK_false); PackageEntry* pkg_entry = pkg_entry_tbl->lookup_only(pkg_symbol); if (pkg_entry != NULL) { assert(classpath_index != -1, "Unexpected classpath_index"); @@ -1226,11 +1262,9 @@ // jimage, it is determined by the class path entry. jshort loader_type = ClassLoader::APP_LOADER; if (e->is_jrt()) { - int length = 0; - const jbyte* pkg_string = InstanceKlass::package_from_name(class_name, length); - if (pkg_string != NULL) { - ResourceMark rm; - TempNewSymbol pkg_name = SymbolTable::new_symbol((const char*)pkg_string, length, THREAD); + ResourceMark rm; + TempNewSymbol pkg_name = InstanceKlass::package_from_name(class_name, CHECK_0); + if (pkg_name != NULL) { const char* pkg_name_C_string = (const char*)(pkg_name->as_C_string()); ClassPathImageEntry* cpie = (ClassPathImageEntry*)e; JImageFile* jimage = cpie->jimage(); diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/classfile/classLoader.hpp --- a/hotspot/src/share/vm/classfile/classLoader.hpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/classfile/classLoader.hpp Tue Jul 05 13:50:37 2016 -0700 @@ -444,7 +444,9 @@ static bool string_ends_with(const char* str, const char* str_to_find); // obtain package name from a fully qualified class name - static const char* package_from_name(const char* class_name); + // *bad_class_name is set to true if there's a problem with parsing class_name, to + // distinguish from a class_name with no package name, as both cases have a NULL return value + static const char* package_from_name(const char* const class_name, bool* bad_class_name = NULL); static bool is_jrt(const char* name) { return string_ends_with(name, MODULES_IMAGE_NAME); } diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/classfile/classLoaderExt.hpp --- a/hotspot/src/share/vm/classfile/classLoaderExt.hpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/classfile/classLoaderExt.hpp Tue Jul 05 13:50:37 2016 -0700 @@ -54,12 +54,14 @@ const s2 classpath_index, instanceKlassHandle result, TRAPS) { if (ClassLoader::add_package(_file_name, classpath_index, THREAD)) { +#if INCLUDE_CDS if (DumpSharedSpaces) { s2 classloader_type = ClassLoader::classloader_type( class_name, e, classpath_index, CHECK_(result)); result->set_shared_classpath_index(classpath_index); result->set_class_loader_type(classloader_type); } +#endif return result; } else { return instanceKlassHandle(); // NULL diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/classfile/javaClasses.cpp --- a/hotspot/src/share/vm/classfile/javaClasses.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/classfile/javaClasses.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -3245,6 +3245,15 @@ mname->address_field_put(_vmindex_offset, (address) index); } +bool java_lang_invoke_MemberName::equals(oop mn1, oop mn2) { + if (mn1 == mn2) { + return true; + } + return (vmtarget(mn1) == vmtarget(mn2) && flags(mn1) == flags(mn2) && + vmindex(mn1) == vmindex(mn2) && + clazz(mn1) == clazz(mn2)); +} + oop java_lang_invoke_LambdaForm::vmentry(oop lform) { assert(is_instance(lform), "wrong type"); return lform->obj_field(_vmentry_offset); diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/classfile/javaClasses.hpp --- a/hotspot/src/share/vm/classfile/javaClasses.hpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/classfile/javaClasses.hpp Tue Jul 05 13:50:37 2016 -0700 @@ -1114,6 +1114,8 @@ static int flags_offset_in_bytes() { return _flags_offset; } static int vmtarget_offset_in_bytes() { return _vmtarget_offset; } static int vmindex_offset_in_bytes() { return _vmindex_offset; } + + static bool equals(oop mt1, oop mt2); }; diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/classfile/moduleEntry.cpp --- a/hotspot/src/share/vm/classfile/moduleEntry.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/classfile/moduleEntry.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -201,7 +201,7 @@ } void ModuleEntryTable::create_unnamed_module(ClassLoaderData* loader_data) { - assert_locked_or_safepoint(Module_lock); + assert(Module_lock->owned_by_self(), "should have the Module_lock"); // Each ModuleEntryTable has exactly one unnamed module if (loader_data->is_the_null_class_loader_data()) { @@ -227,7 +227,7 @@ ModuleEntry* ModuleEntryTable::new_entry(unsigned int hash, Handle module_handle, Symbol* name, Symbol* version, Symbol* location, ClassLoaderData* loader_data) { - assert_locked_or_safepoint(Module_lock); + assert(Module_lock->owned_by_self(), "should have the Module_lock"); ModuleEntry* entry = (ModuleEntry*) NEW_C_HEAP_ARRAY(char, entry_size(), mtModule); // Initialize everything BasicHashtable would @@ -258,7 +258,7 @@ } void ModuleEntryTable::add_entry(int index, ModuleEntry* new_entry) { - assert_locked_or_safepoint(Module_lock); + assert(Module_lock->owned_by_self(), "should have the Module_lock"); Hashtable::add_entry(index, (HashtableEntry*)new_entry); } @@ -268,7 +268,7 @@ Symbol* module_location, ClassLoaderData* loader_data) { assert(module_name != NULL, "ModuleEntryTable locked_create_entry_or_null should never be called for unnamed module."); - assert_locked_or_safepoint(Module_lock); + assert(Module_lock->owned_by_self(), "should have the Module_lock"); // Check if module already exists. if (lookup_only(module_name) != NULL) { return NULL; @@ -309,7 +309,7 @@ } void ModuleEntryTable::finalize_javabase(Handle module_handle, Symbol* version, Symbol* location) { - assert_locked_or_safepoint(Module_lock); + assert(Module_lock->owned_by_self(), "should have the Module_lock"); ClassLoaderData* boot_loader_data = ClassLoaderData::the_null_class_loader_data(); ModuleEntryTable* module_table = boot_loader_data->modules(); diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/classfile/modules.cpp --- a/hotspot/src/share/vm/classfile/modules.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/classfile/modules.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -568,8 +568,8 @@ to_module_entry->is_named() ? to_module_entry->name()->as_C_string() : UNNAMED_MODULE); - // Do nothing if modules are the same or if package is already exported unqualifiedly. - if (from_module_entry != to_module_entry && !package_entry->is_unqual_exported()) { + // Do nothing if modules are the same. + if (from_module_entry != to_module_entry) { package_entry->set_exported(to_module_entry); } } diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/classfile/packageEntry.cpp --- a/hotspot/src/share/vm/classfile/packageEntry.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/classfile/packageEntry.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -49,7 +49,7 @@ // Add a module to the package's qualified export list. void PackageEntry::add_qexport(ModuleEntry* m) { - assert_locked_or_safepoint(Module_lock); + assert(Module_lock->owned_by_self(), "should have the Module_lock"); if (!has_qual_exports_list()) { // Lazily create a package's qualified exports list. // Initial size is small, do not anticipate export lists to be large. @@ -157,7 +157,7 @@ } PackageEntry* PackageEntryTable::new_entry(unsigned int hash, Symbol* name, ModuleEntry* module) { - assert_locked_or_safepoint(Module_lock); + assert(Module_lock->owned_by_self(), "should have the Module_lock"); PackageEntry* entry = (PackageEntry*) NEW_C_HEAP_ARRAY(char, entry_size(), mtModule); // Initialize everything BasicHashtable would @@ -180,14 +180,14 @@ } void PackageEntryTable::add_entry(int index, PackageEntry* new_entry) { - assert_locked_or_safepoint(Module_lock); + assert(Module_lock->owned_by_self(), "should have the Module_lock"); Hashtable::add_entry(index, (HashtableEntry*)new_entry); } // Create package in loader's package entry table and return the entry. // If entry already exists, return null. Assume Module lock was taken by caller. PackageEntry* PackageEntryTable::locked_create_entry_or_null(Symbol* name, ModuleEntry* module) { - assert_locked_or_safepoint(Module_lock); + assert(Module_lock->owned_by_self(), "should have the Module_lock"); // Check if package already exists. Return NULL if it does. if (lookup_only(name) != NULL) { return NULL; diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/classfile/packageEntry.hpp --- a/hotspot/src/share/vm/classfile/packageEntry.hpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/classfile/packageEntry.hpp Tue Jul 05 13:50:37 2016 -0700 @@ -40,11 +40,7 @@ // package is exported to. // // Packages can be exported in the following 3 ways: -// - not exported: the package has not been explicitly qualified to a -// particular module nor has it been specified to be -// unqualifiedly exported to all modules. If all states -// of exportedness are false, the package is considered -// not exported. +// - not exported: the package does not have qualified or unqualified exports. // - qualified exports: the package has been explicitly qualified to at least // one particular module or has been qualifiedly exported // to all unnamed modules. @@ -125,6 +121,7 @@ return _is_exported_unqualified; } void set_unqual_exported() { + assert(Module_lock->owned_by_self(), "should have the Module_lock"); _is_exported_unqualified = true; _is_exported_allUnnamed = false; _qualified_exports = NULL; diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/classfile/systemDictionary.cpp --- a/hotspot/src/share/vm/classfile/systemDictionary.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/classfile/systemDictionary.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -70,6 +70,7 @@ #include "services/threadService.hpp" #include "trace/traceMacros.hpp" #include "utilities/macros.hpp" +#include "utilities/stringUtils.hpp" #include "utilities/ticks.hpp" #if INCLUDE_CDS #include "classfile/sharedClassUtil.hpp" @@ -1154,12 +1155,10 @@ // It is illegal to define classes in the "java." package from // JVM_DefineClass or jni_DefineClass unless you're the bootclassloader ResourceMark rm(THREAD); - char* name = parsed_name->as_C_string(); - char* index = strrchr(name, '/'); - *index = '\0'; // chop to just the package name - while ((index = strchr(name, '/')) != NULL) { - *index = '.'; // replace '/' with '.' in package name - } + TempNewSymbol pkg_name = InstanceKlass::package_from_name(parsed_name, CHECK_NULL); + assert(pkg_name != NULL, "Error in parsing package name starting with 'java/'"); + char* name = pkg_name->as_C_string(); + StringUtils::replace_no_expand(name, "/", "."); const char* msg_text = "Prohibited package name: "; size_t len = strlen(msg_text) + strlen(name) + 1; char* message = NEW_RESOURCE_ARRAY(char, len); @@ -1257,6 +1256,7 @@ bool SystemDictionary::is_shared_class_visible(Symbol* class_name, instanceKlassHandle ik, Handle class_loader, TRAPS) { + ResourceMark rm; int path_index = ik->shared_classpath_index(); SharedClassPathEntry* ent = (SharedClassPathEntry*)FileMapInfo::shared_classpath(path_index); @@ -1270,12 +1270,11 @@ TempNewSymbol pkg_name = NULL; PackageEntry* pkg_entry = NULL; ModuleEntry* mod_entry = NULL; - int length = 0; + const char* pkg_string = NULL; ClassLoaderData* loader_data = class_loader_data(class_loader); - const jbyte* pkg_string = InstanceKlass::package_from_name(class_name, length); - if (pkg_string != NULL) { - pkg_name = SymbolTable::new_symbol((const char*)pkg_string, - length, CHECK_(false)); + pkg_name = InstanceKlass::package_from_name(class_name, CHECK_false); + if (pkg_name != NULL) { + pkg_string = pkg_name->as_C_string(); if (loader_data != NULL) { pkg_entry = loader_data->packages()->lookup_only(pkg_name); } @@ -1432,15 +1431,14 @@ instanceKlassHandle nh = instanceKlassHandle(); // null Handle if (class_loader.is_null()) { - int length = 0; + ResourceMark rm; PackageEntry* pkg_entry = NULL; bool search_only_bootloader_append = false; ClassLoaderData *loader_data = class_loader_data(class_loader); // Find the package in the boot loader's package entry table. - const jbyte* pkg_string = InstanceKlass::package_from_name(class_name, length); - if (pkg_string != NULL) { - TempNewSymbol pkg_name = SymbolTable::new_symbol((const char*)pkg_string, length, CHECK_(nh)); + TempNewSymbol pkg_name = InstanceKlass::package_from_name(class_name, CHECK_NULL); + if (pkg_name != NULL) { pkg_entry = loader_data->packages()->lookup_only(pkg_name); } @@ -1477,7 +1475,7 @@ assert(!DumpSharedSpaces, "Archive dumped after module system initialization"); // After the module system has been initialized, check if the class' // package is in a module defined to the boot loader. - if (pkg_string == NULL || pkg_entry == NULL || pkg_entry->in_unnamed_module()) { + if (pkg_name == NULL || pkg_entry == NULL || pkg_entry->in_unnamed_module()) { // Class is either in the unnamed package, in a named package // within a module not defined to the boot loader or in a // a named package within the unnamed module. In all cases, diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/classfile/systemDictionaryShared.hpp --- a/hotspot/src/share/vm/classfile/systemDictionaryShared.hpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/classfile/systemDictionaryShared.hpp Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. * 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 @@ static bool is_shared_class_visible_for_classloader( instanceKlassHandle ik, Handle class_loader, - const jbyte* pkg_string, + const char* pkg_string, Symbol* pkg_name, PackageEntry* pkg_entry, ModuleEntry* mod_entry, diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/compiler/methodLiveness.cpp --- a/hotspot/src/share/vm/compiler/methodLiveness.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/compiler/methodLiveness.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -137,11 +137,6 @@ _arena = arena; _method = method; _bit_map_size_bits = method->max_locals(); - - -#ifdef COMPILER1 - _bci_block_start.clear(); -#endif } void MethodLiveness::compute_liveness() { @@ -587,14 +582,6 @@ new (analyzer->arena()) GrowableArray(analyzer->arena(), 5, 0, NULL); _exception_predecessors = new (analyzer->arena()) GrowableArray(analyzer->arena(), 5, 0, NULL); - _normal_exit.clear(); - _exception_exit.clear(); - _entry.clear(); - - // this initialization is not strictly necessary. - // _gen and _kill are cleared at the beginning of compute_gen_kill_range() - _gen.clear(); - _kill.clear(); } @@ -1020,7 +1007,6 @@ _last_bci = bci; } - answer.clear(); answer.set_union(_normal_exit); answer.set_difference(_kill); answer.set_union(_gen); diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/gc/cms/concurrentMarkSweepGeneration.cpp --- a/hotspot/src/share/vm/gc/cms/concurrentMarkSweepGeneration.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/gc/cms/concurrentMarkSweepGeneration.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -1605,6 +1605,9 @@ _inter_sweep_timer.reset(); _inter_sweep_timer.start(); + // No longer a need to do a concurrent collection for Metaspace. + MetaspaceGC::set_should_concurrent_collect(false); + gch->post_full_gc_dump(gc_timer); gc_timer->register_gc_end(); diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/gc/g1/g1CollectedHeap.cpp --- a/hotspot/src/share/vm/gc/g1/g1CollectedHeap.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/gc/g1/g1CollectedHeap.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -3474,7 +3474,8 @@ double remove_self_forwards_start = os::elapsedTime(); remove_self_forwarding_pointers(); - _preserved_marks_set.restore(workers()); + SharedRestorePreservedMarksTaskExecutor task_executor(workers()); + _preserved_marks_set.restore(&task_executor); g1_policy()->phase_times()->record_evac_fail_remove_self_forwards((os::elapsedTime() - remove_self_forwards_start) * 1000.0); } diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/gc/g1/g1CollectedHeap.inline.hpp --- a/hotspot/src/share/vm/gc/g1/g1CollectedHeap.inline.hpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/gc/g1/g1CollectedHeap.inline.hpp Tue Jul 05 13:50:37 2016 -0700 @@ -109,7 +109,7 @@ _old_set.remove(hr); } -// It dirties the cards that cover the block so that so that the post +// It dirties the cards that cover the block so that the post // write barrier never queues anything when updating objects on this // block. It is assumed (and in fact we assert) that the block // belongs to a young region. diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/gc/g1/g1StringDedupStat.cpp --- a/hotspot/src/share/vm/gc/g1/g1StringDedupStat.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/gc/g1/g1StringDedupStat.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -80,7 +80,7 @@ log_info(gc, stringdedup)( "Concurrent String Deduplication " G1_STRDEDUP_BYTES_FORMAT_NS "->" G1_STRDEDUP_BYTES_FORMAT_NS "(" G1_STRDEDUP_BYTES_FORMAT_NS "), avg " - G1_STRDEDUP_PERCENT_FORMAT_NS ", " G1_STRDEDUP_TIME_FORMAT "]", + G1_STRDEDUP_PERCENT_FORMAT_NS ", " G1_STRDEDUP_TIME_FORMAT, G1_STRDEDUP_BYTES_PARAM(last_stat._new_bytes), G1_STRDEDUP_BYTES_PARAM(last_stat._new_bytes - last_stat._deduped_bytes), G1_STRDEDUP_BYTES_PARAM(last_stat._deduped_bytes), diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/gc/parallel/psPromotionManager.cpp --- a/hotspot/src/share/vm/gc/parallel/psPromotionManager.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/gc/parallel/psPromotionManager.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -23,6 +23,7 @@ */ #include "precompiled.hpp" +#include "gc/parallel/gcTaskManager.hpp" #include "gc/parallel/mutableSpace.hpp" #include "gc/parallel/parallelScavengeHeap.hpp" #include "gc/parallel/psOldGen.hpp" @@ -237,8 +238,53 @@ _preserved_marks = preserved_marks; } +class ParRestoreGCTask : public GCTask { +private: + const uint _id; + PreservedMarksSet* const _preserved_marks_set; + volatile size_t* const _total_size_addr; + +public: + virtual char* name() { + return (char*) "preserved mark restoration task"; + } + + virtual void do_it(GCTaskManager* manager, uint which){ + _preserved_marks_set->get(_id)->restore_and_increment(_total_size_addr); + } + + ParRestoreGCTask(uint id, + PreservedMarksSet* preserved_marks_set, + volatile size_t* total_size_addr) + : _id(id), + _preserved_marks_set(preserved_marks_set), + _total_size_addr(total_size_addr) { } +}; + +class PSRestorePreservedMarksTaskExecutor : public RestorePreservedMarksTaskExecutor { +private: + GCTaskManager* _gc_task_manager; + +public: + PSRestorePreservedMarksTaskExecutor(GCTaskManager* gc_task_manager) + : _gc_task_manager(gc_task_manager) { } + + void restore(PreservedMarksSet* preserved_marks_set, + volatile size_t* total_size_addr) { + // GCTask / GCTaskQueue are ResourceObjs + ResourceMark rm; + + GCTaskQueue* q = GCTaskQueue::create(); + for (uint i = 0; i < preserved_marks_set->num(); i += 1) { + q->enqueue(new ParRestoreGCTask(i, preserved_marks_set, total_size_addr)); + } + _gc_task_manager->execute_and_wait(q); + } +}; + void PSPromotionManager::restore_preserved_marks() { - _preserved_marks_set->restore(PSScavenge::gc_task_manager()); + PSRestorePreservedMarksTaskExecutor task_executor(PSScavenge::gc_task_manager()); + _preserved_marks_set->restore(&task_executor); } void PSPromotionManager::drain_stacks_depth(bool totally_drain) { diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/gc/serial/defNewGeneration.cpp --- a/hotspot/src/share/vm/gc/serial/defNewGeneration.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/gc/serial/defNewGeneration.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -739,7 +739,8 @@ eden()->object_iterate(&rspc); from()->object_iterate(&rspc); - _preserved_marks_set.restore(GenCollectedHeap::heap()->workers()); + SharedRestorePreservedMarksTaskExecutor task_executor(GenCollectedHeap::heap()->workers()); + _preserved_marks_set.restore(&task_executor); } void DefNewGeneration::handle_promotion_failure(oop old) { diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/gc/shared/collectedHeap.cpp --- a/hotspot/src/share/vm/gc/shared/collectedHeap.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/gc/shared/collectedHeap.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -386,7 +386,7 @@ // initialized by this point, a fact that we assert when doing the // card-mark.) // (c) G1CollectedHeap(G1) uses two kinds of write barriers. When a -// G1 concurrent marking is in progress an SATB (pre-write-)barrier is +// G1 concurrent marking is in progress an SATB (pre-write-)barrier // is used to remember the pre-value of any store. Initializing // stores will not need this barrier, so we need not worry about // compensating for the missing pre-barrier here. Turning now diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/gc/shared/preservedMarks.cpp --- a/hotspot/src/share/vm/gc/shared/preservedMarks.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/gc/shared/preservedMarks.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -28,9 +28,6 @@ #include "memory/allocation.inline.hpp" #include "memory/resourceArea.hpp" #include "utilities/macros.hpp" -#if INCLUDE_ALL_GCS -#include "gc/parallel/gcTaskManager.hpp" -#endif void PreservedMarks::restore() { while (!_stack.is_empty()) { @@ -40,6 +37,15 @@ assert_empty(); } +void PreservedMarks::restore_and_increment(volatile size_t* const total_size_addr) { + const size_t stack_size = size(); + restore(); + // Only do the atomic add if the size is > 0. + if (stack_size > 0) { + Atomic::add(stack_size, total_size_addr); + } +} + #ifndef PRODUCT void PreservedMarks::assert_empty() { assert(_stack.is_empty(), "stack expected to be empty, size = "SIZE_FORMAT, @@ -82,13 +88,7 @@ virtual void work(uint worker_id) { uint task_id = 0; while (!_sub_tasks.is_task_claimed(/* reference */ task_id)) { - PreservedMarks* const preserved_marks = _preserved_marks_set->get(task_id); - const size_t size = preserved_marks->size(); - preserved_marks->restore(); - // Only do the atomic add if the size is > 0. - if (size > 0) { - Atomic::add(size, _total_size_addr); - } + _preserved_marks_set->get(task_id)->restore_and_increment(_total_size_addr); } _sub_tasks.all_tasks_completed(); } @@ -104,53 +104,6 @@ } }; -void PreservedMarksSet::restore_internal(WorkGang* workers, - volatile size_t* total_size_addr) { - assert(workers != NULL, "pre-condition"); - ParRestoreTask task(workers->active_workers(), this, total_size_addr); - workers->run_task(&task); -} - -#if INCLUDE_ALL_GCS -class ParRestoreGCTask : public GCTask { -private: - const uint _id; - PreservedMarksSet* const _preserved_marks_set; - volatile size_t* const _total_size_addr; - -public: - virtual char* name() { return (char*) "preserved mark restoration task"; } - - virtual void do_it(GCTaskManager* manager, uint which) { - PreservedMarks* const preserved_marks = _preserved_marks_set->get(_id); - const size_t size = preserved_marks->size(); - preserved_marks->restore(); - // Only do the atomic add if the size is > 0. - if (size > 0) { - Atomic::add(size, _total_size_addr); - } - } - - ParRestoreGCTask(uint id, - PreservedMarksSet* preserved_marks_set, - volatile size_t* total_size_addr) - : _id(id), - _preserved_marks_set(preserved_marks_set), - _total_size_addr(total_size_addr) { } -}; - -void PreservedMarksSet::restore_internal(GCTaskManager* gc_task_manager, - volatile size_t* total_size_addr) { - // GCTask / GCTaskQueue are ResourceObjs - ResourceMark rm; - - GCTaskQueue* q = GCTaskQueue::create(); - for (uint i = 0; i < num(); i += 1) { - q->enqueue(new ParRestoreGCTask(i, this, total_size_addr)); - } - gc_task_manager->execute_and_wait(q); -} -#endif void PreservedMarksSet::reclaim() { assert_empty(); @@ -176,3 +129,16 @@ } } #endif // ndef PRODUCT + +void SharedRestorePreservedMarksTaskExecutor::restore(PreservedMarksSet* preserved_marks_set, + volatile size_t* total_size_addr) { + if (_workers == NULL) { + for (uint i = 0; i < preserved_marks_set->num(); i += 1) { + *total_size_addr += preserved_marks_set->get(i)->size(); + preserved_marks_set->get(i)->restore(); + } + } else { + ParRestoreTask task(_workers->active_workers(), preserved_marks_set, total_size_addr); + _workers->run_task(&task); + } +} diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/gc/shared/preservedMarks.hpp --- a/hotspot/src/share/vm/gc/shared/preservedMarks.hpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/gc/shared/preservedMarks.hpp Tue Jul 05 13:50:37 2016 -0700 @@ -30,7 +30,7 @@ #include "oops/oop.hpp" #include "utilities/stack.hpp" -class GCTaskManager; +class PreservedMarksSet; class WorkGang; class PreservedMarks VALUE_OBJ_CLASS_SPEC { @@ -61,6 +61,7 @@ // reclaim the memory taken up by the stack segments. void restore(); + void restore_and_increment(volatile size_t* const _total_size_addr); inline static void init_forwarded_mark(oop obj); // Assert the stack is empty and has no cached segments. @@ -75,6 +76,24 @@ virtual void do_object(oop obj); }; +class RestorePreservedMarksTaskExecutor { +public: + void virtual restore(PreservedMarksSet* preserved_marks_set, + volatile size_t* total_size_addr) = 0; +}; + +class SharedRestorePreservedMarksTaskExecutor : public RestorePreservedMarksTaskExecutor { +private: + WorkGang* _workers; + +public: + SharedRestorePreservedMarksTaskExecutor(WorkGang* workers) : _workers(workers) { } + + void restore(PreservedMarksSet* preserved_marks_set, + volatile size_t* total_size_addr); + +}; + class PreservedMarksSet : public CHeapObj { private: // true -> _stacks will be allocated in the C heap @@ -91,13 +110,6 @@ // or == NULL if they have not. Padded* _stacks; - // Internal version of restore() that uses a WorkGang for parallelism. - void restore_internal(WorkGang* workers, volatile size_t* total_size_addr); - - // Internal version of restore() that uses a GCTaskManager for parallelism. - void restore_internal(GCTaskManager* gc_task_manager, - volatile size_t* total_size_addr); - public: uint num() const { return _num; } @@ -111,14 +123,11 @@ // Allocate stack array. void init(uint num); - // Itrerate over all stacks, restore all presered marks, and reclaim - // the memory taken up by the stack segments. If the executor is - // NULL, restoration will be done serially. If the executor is not - // NULL, restoration could be done in parallel (when it makes - // sense). Supported executors: WorkGang (Serial, CMS, G1), - // GCTaskManager (PS). - template - inline void restore(E* executor); + // Iterate over all stacks, restore all preserved marks, and reclaim + // the memory taken up by the stack segments. + // Supported executors: SharedRestorePreservedMarksTaskExecutor (Serial, CMS, G1), + // PSRestorePreservedMarksTaskExecutor (PS). + inline void restore(RestorePreservedMarksTaskExecutor* executor); // Reclaim stack array. void reclaim(); diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/gc/shared/preservedMarks.inline.hpp --- a/hotspot/src/share/vm/gc/shared/preservedMarks.inline.hpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/gc/shared/preservedMarks.inline.hpp Tue Jul 05 13:50:37 2016 -0700 @@ -49,8 +49,7 @@ obj->init_mark(); } -template -inline void PreservedMarksSet::restore(E* executor) { +inline void PreservedMarksSet::restore(RestorePreservedMarksTaskExecutor* executor) { volatile size_t total_size = 0; #ifdef ASSERT @@ -61,17 +60,7 @@ } #endif // def ASSERT - if (executor == NULL) { - for (uint i = 0; i < _num; i += 1) { - total_size += get(i)->size(); - get(i)->restore(); - } - } else { - // Right now, if the executor is not NULL we do the work in - // parallel. In the future we might want to do the restoration - // serially, if there's only a small number of marks per stack. - restore_internal(executor, &total_size); - } + executor->restore(this, &total_size); assert_empty(); assert(total_size == total_size_before, diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/gc/shared/threadLocalAllocBuffer.hpp --- a/hotspot/src/share/vm/gc/shared/threadLocalAllocBuffer.hpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/gc/shared/threadLocalAllocBuffer.hpp Tue Jul 05 13:50:37 2016 -0700 @@ -108,8 +108,9 @@ // do nothing. tlabs must be inited by initialize() calls } - static const size_t min_size() { return align_object_size(MinTLABSize / HeapWordSize) + alignment_reserve(); } - static const size_t max_size() { assert(_max_size != 0, "max_size not set up"); return _max_size; } + static size_t min_size() { return align_object_size(MinTLABSize / HeapWordSize) + alignment_reserve(); } + static size_t max_size() { assert(_max_size != 0, "max_size not set up"); return _max_size; } + static size_t max_size_in_bytes() { return max_size() * BytesPerWord; } static void set_max_size(size_t max_size) { _max_size = max_size; } HeapWord* start() const { return _start; } diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/gc/shared/workgroup.cpp --- a/hotspot/src/share/vm/gc/shared/workgroup.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/gc/shared/workgroup.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -44,11 +44,6 @@ vm_exit_out_of_memory(0, OOM_MALLOC_ERROR, "Cannot create GangWorker array."); } - _active_workers = ParallelGCThreads; - if (UseDynamicNumberOfGCThreads && !FLAG_IS_CMDLINE(ParallelGCThreads)) { - _active_workers = 1U; - } - add_workers(true); } @@ -60,6 +55,10 @@ } void AbstractWorkGang::add_workers(bool initializing) { + add_workers(_active_workers, initializing); +} + +void AbstractWorkGang::add_workers(uint active_workers, bool initializing) { os::ThreadType worker_type; if (are_ConcurrentGC_threads()) { @@ -69,7 +68,7 @@ } _created_workers = WorkerManager::add_workers(this, - _active_workers, + active_workers, _total_workers, _created_workers, worker_type, @@ -268,10 +267,11 @@ } void WorkGang::run_task(AbstractGangTask* task, uint num_workers) { - guarantee(num_workers <= active_workers(), - "Trying to execute task %s with %u workers which is more than the amount of active workers %u.", - task->name(), num_workers, active_workers()); + guarantee(num_workers <= total_workers(), + "Trying to execute task %s with %u workers which is more than the amount of total workers %u.", + task->name(), num_workers, total_workers()); guarantee(num_workers > 0, "Trying to execute task %s with zero workers", task->name()); + add_workers(num_workers, false); _dispatcher->coordinator_execute_on_workers(task, num_workers); } diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/gc/shared/workgroup.hpp --- a/hotspot/src/share/vm/gc/shared/workgroup.hpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/gc/shared/workgroup.hpp Tue Jul 05 13:50:37 2016 -0700 @@ -170,6 +170,9 @@ // Add GC workers as needed. void add_workers(bool initializing); + // Add GC workers as needed to reach the specified number of workers. + void add_workers(uint active_workers, bool initializing); + // Return the Ith worker. AbstractGangWorker* worker(uint i) const; @@ -214,7 +217,8 @@ virtual void run_task(AbstractGangTask* task); // Run a task with the given number of workers, returns // when the task is done. The number of workers must be at most the number of - // active workers. + // active workers. Additional workers may be created if an insufficient + // number currently exists. void run_task(AbstractGangTask* task, uint num_workers); protected: diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/jvmci/jvmciRuntime.hpp --- a/hotspot/src/share/vm/jvmci/jvmciRuntime.hpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/jvmci/jvmciRuntime.hpp Tue Jul 05 13:50:37 2016 -0700 @@ -40,31 +40,6 @@ #define JVMCI_ERROR_OK(...) JVMCI_ERROR_(JVMCIEnv::ok, __VA_ARGS__) #define CHECK_OK CHECK_(JVMCIEnv::ok) -class ParseClosure : public StackObj { - int _lineNo; - char* _filename; - bool _abort; -protected: - void abort() { _abort = true; } - void warn_and_abort(const char* message) { - warn(message); - abort(); - } - void warn(const char* message) { - warning("Error at line %d while parsing %s: %s", _lineNo, _filename == NULL ? "?" : _filename, message); - } - public: - ParseClosure() : _lineNo(0), _filename(NULL), _abort(false) {} - void parse_line(char* line) { - _lineNo++; - do_line(line); - } - virtual void do_line(char* line) = 0; - int lineNo() { return _lineNo; } - bool is_aborted() { return _abort; } - void set_filename(char* path) {_filename = path; _lineNo = 0;} -}; - class JVMCIRuntime: public AllStatic { public: // Constants describing whether JVMCI wants to be able to adjust the compilation diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/logging/logConfiguration.cpp --- a/hotspot/src/share/vm/logging/logConfiguration.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/logging/logConfiguration.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -484,13 +484,13 @@ " -Xlog:gc::uptime,tid\n" "\t Log messages tagged with 'gc' tag using 'info' level to output 'stdout', using 'uptime' and 'tid' decorations.\n\n" - " -Xlog:gc*=info,rt*=off\n" - "\t Log messages tagged with at least 'gc' using 'info' level, but turn off logging of messages tagged with 'rt'.\n" - "\t (Messages tagged with both 'gc' and 'rt' will not be logged.)\n\n" + " -Xlog:gc*=info,safepoint*=off\n" + "\t Log messages tagged with at least 'gc' using 'info' level, but turn off logging of messages tagged with 'safepoint'.\n" + "\t (Messages tagged with both 'gc' and 'safepoint' will not be logged.)\n\n" - " -Xlog:disable -Xlog:rt=trace:rttrace.txt\n" + " -Xlog:disable -Xlog:safepoint=trace:safepointtrace.txt\n" "\t Turn off all logging, including warnings and errors,\n" - "\t and then enable messages tagged with 'rt' using 'trace' level to file 'rttrace.txt'.\n"); + "\t and then enable messages tagged with 'safepoint' using 'trace' level to file 'safepointtrace.txt'.\n"); } void LogConfiguration::rotate_all_outputs() { diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/memory/metaspace.cpp --- a/hotspot/src/share/vm/memory/metaspace.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/memory/metaspace.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -2933,7 +2933,7 @@ // Don't use large pages for the class space. bool large_pages = false; -#ifndef AARCH64 +#if !(defined(AARCH64) || defined(AIX)) ReservedSpace metaspace_rs = ReservedSpace(compressed_class_space_size(), _reserve_alignment, large_pages, @@ -2945,18 +2945,25 @@ // bits. if ((uint64_t)requested_addr + compressed_class_space_size() < 4*G) { metaspace_rs = ReservedSpace(compressed_class_space_size(), - _reserve_alignment, - large_pages, - requested_addr); + _reserve_alignment, + large_pages, + requested_addr); } if (! metaspace_rs.is_reserved()) { - // Try to align metaspace so that we can decode a compressed klass - // with a single MOVK instruction. We can do this iff the + // Aarch64: Try to align metaspace so that we can decode a compressed + // klass with a single MOVK instruction. We can do this iff the // compressed class base is a multiple of 4G. - for (char *a = (char*)align_ptr_up(requested_addr, 4*G); + // Aix: Search for a place where we can find memory. If we need to load + // the base, 4G alignment is helpful, too. + size_t increment = AARCH64_ONLY(4*)G; + for (char *a = (char*)align_ptr_up(requested_addr, increment); a < (char*)(1024*G); - a += 4*G) { + a += increment) { + if (a == (char *)(32*G)) { + // Go faster from here on. Zero-based is no longer possible. + increment = 4*G; + } #if INCLUDE_CDS if (UseSharedSpaces diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/oops/instanceKlass.cpp --- a/hotspot/src/share/vm/oops/instanceKlass.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/oops/instanceKlass.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -2182,39 +2182,21 @@ return dest; } -const jbyte* InstanceKlass::package_from_name(const Symbol* name, int& length) { - ResourceMark rm; - length = 0; +// Used to obtain the package name from a fully qualified class name. +Symbol* InstanceKlass::package_from_name(const Symbol* name, TRAPS) { if (name == NULL) { return NULL; } else { - const jbyte* base_name = name->base(); - const jbyte* last_slash = UTF8::strrchr(base_name, name->utf8_length(), '/'); - - if (last_slash == NULL) { - // No package name + if (name->utf8_length() <= 0) { return NULL; - } else { - // Skip over '['s - if (*base_name == '[') { - do { - base_name++; - } while (*base_name == '['); - if (*base_name != 'L') { - // Fully qualified class names should not contain a 'L'. - // Set length to -1 to indicate that the package name - // could not be obtained due to an error condition. - // In this situtation, is_same_class_package returns false. - length = -1; - return NULL; - } - } - - // Found the package name, look it up in the symbol table. - length = last_slash - base_name; - assert(length > 0, "Bad length for package name"); - return base_name; } + ResourceMark rm; + const char* package_name = ClassLoader::package_from_name((const char*) name->as_C_string()); + if (package_name == NULL) { + return NULL; + } + Symbol* pkg_name = SymbolTable::new_symbol(package_name, THREAD); + return pkg_name; } } @@ -2230,12 +2212,9 @@ } void InstanceKlass::set_package(ClassLoaderData* loader_data, TRAPS) { - int length = 0; - const jbyte* base_name = package_from_name(name(), length); - - if (base_name != NULL && loader_data != NULL) { - TempNewSymbol pkg_name = SymbolTable::new_symbol((const char*)base_name, length, CHECK); - + TempNewSymbol pkg_name = package_from_name(name(), CHECK); + + if (pkg_name != NULL && loader_data != NULL) { // Find in class loader's package entry table. _package_entry = loader_data->packages()->lookup_only(pkg_name); @@ -2331,20 +2310,18 @@ if (class_loader1 != class_loader2) { return false; } else if (class_name1 == class_name2) { - return true; // skip painful bytewise comparison + return true; } else { ResourceMark rm; - // The Symbol*'s are in UTF8 encoding. Since we only need to check explicitly - // for ASCII characters ('/', 'L', '['), we can keep them in UTF8 encoding. - // Otherwise, we just compare jbyte values between the strings. - int length1 = 0; - int length2 = 0; - const jbyte *name1 = package_from_name(class_name1, length1); - const jbyte *name2 = package_from_name(class_name2, length2); - - if ((length1 < 0) || (length2 < 0)) { - // error occurred parsing package name. + bool bad_class_name = false; + const char* name1 = ClassLoader::package_from_name((const char*) class_name1->as_C_string(), &bad_class_name); + if (bad_class_name) { + return false; + } + + const char* name2 = ClassLoader::package_from_name((const char*) class_name2->as_C_string(), &bad_class_name); + if (bad_class_name) { return false; } @@ -2354,13 +2331,13 @@ return name1 == name2; } - // Check that package part is identical - return UTF8::equal(name1, length1, name2, length2); + // Check that package is identical + return (strcmp(name1, name2) == 0); } } // Returns true iff super_method can be overridden by a method in targetclassname -// See JSL 3rd edition 8.4.6.1 +// See JLS 3rd edition 8.4.6.1 // Assumes name-signature match // "this" is InstanceKlass of super_method which must exist // note that the InstanceKlass of the method in the targetclassname has not always been created yet @@ -2716,7 +2693,7 @@ return NULL; } -bool InstanceKlass::add_member_name(Handle mem_name) { +oop InstanceKlass::add_member_name(Handle mem_name, bool intern) { jweak mem_name_wref = JNIHandles::make_weak_global(mem_name); MutexLocker ml(MemberNameTable_lock); DEBUG_ONLY(NoSafepointVerifier nsv); @@ -2726,7 +2703,7 @@ // is called! Method* method = (Method*)java_lang_invoke_MemberName::vmtarget(mem_name()); if (method->is_obsolete()) { - return false; + return NULL; } else if (method->is_old()) { // Replace method with redefined version java_lang_invoke_MemberName::set_vmtarget(mem_name(), method_with_idnum(method->method_idnum())); @@ -2735,8 +2712,11 @@ if (_member_names == NULL) { _member_names = new (ResourceObj::C_HEAP, mtClass) MemberNameTable(idnum_allocated_count()); } - _member_names->add_member_name(mem_name_wref); - return true; + if (intern) { + return _member_names->find_or_add_member_name(mem_name_wref); + } else { + return _member_names->add_member_name(mem_name_wref); + } } // ----------------------------------------------------------------------------------------------------- @@ -3027,7 +3007,11 @@ if (cfs != NULL) { if (cfs->source() != NULL) { if (module_name != NULL) { - log->print(" source: jrt:/%s", module_name); + if (ClassLoader::is_jrt(cfs->source())) { + log->print(" source: jrt:/%s", module_name); + } else { + log->print(" source: %s", cfs->source()); + } } else { log->print(" source: %s", cfs->source()); } diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/oops/instanceKlass.hpp --- a/hotspot/src/share/vm/oops/instanceKlass.hpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/oops/instanceKlass.hpp Tue Jul 05 13:50:37 2016 -0700 @@ -1108,7 +1108,7 @@ // Naming const char* signature_name() const; - static const jbyte* package_from_name(const Symbol* name, int& length); + static Symbol* package_from_name(const Symbol* name, TRAPS); // GC specific object visitors // @@ -1298,7 +1298,7 @@ // JSR-292 support MemberNameTable* member_names() { return _member_names; } void set_member_names(MemberNameTable* member_names) { _member_names = member_names; } - bool add_member_name(Handle member_name); + oop add_member_name(Handle member_name, bool intern); public: // JVMTI support diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/oops/method.hpp --- a/hotspot/src/share/vm/oops/method.hpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/oops/method.hpp Tue Jul 05 13:50:37 2016 -0700 @@ -246,7 +246,7 @@ int code_size() const { return constMethod()->code_size(); } // method size in words - int method_size() const { return sizeof(Method)/wordSize + is_native() ? 2 : 0; } + int method_size() const { return sizeof(Method)/wordSize + ( is_native() ? 2 : 0 ); } // constant pool for Klass* holding this method ConstantPool* constants() const { return constMethod()->constants(); } diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/opto/arraycopynode.cpp --- a/hotspot/src/share/vm/opto/arraycopynode.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/opto/arraycopynode.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -204,7 +204,8 @@ } if (!finish_transform(phase, can_reshape, ctl, mem)) { - return NULL; + // Return NodeSentinel to indicate that the transform failed + return NodeSentinel; } return mem; @@ -222,6 +223,7 @@ Node* dest = in(ArrayCopyNode::Dest); const Type* src_type = phase->type(src); const TypeAryPtr* ary_src = src_type->isa_aryptr(); + assert(ary_src != NULL, "should be an array copy/clone"); if (is_arraycopy() || is_copyofrange() || is_copyof()) { const Type* dest_type = phase->type(dest); @@ -520,7 +522,7 @@ Node* mem = try_clone_instance(phase, can_reshape, count); if (mem != NULL) { - return mem; + return (mem == NodeSentinel) ? NULL : mem; } Node* adr_src = NULL; @@ -627,31 +629,37 @@ return CallNode::may_modify_arraycopy_helper(dest_t, t_oop, phase); } -bool ArrayCopyNode::may_modify_helper(const TypeOopPtr *t_oop, Node* n, PhaseTransform *phase) { +bool ArrayCopyNode::may_modify_helper(const TypeOopPtr *t_oop, Node* n, PhaseTransform *phase, ArrayCopyNode*& ac) { if (n->is_Proj()) { n = n->in(0); if (n->is_Call() && n->as_Call()->may_modify(t_oop, phase)) { + if (n->isa_ArrayCopy() != NULL) { + ac = n->as_ArrayCopy(); + } return true; } } return false; } -bool ArrayCopyNode::may_modify(const TypeOopPtr *t_oop, MemBarNode* mb, PhaseTransform *phase) { +bool ArrayCopyNode::may_modify(const TypeOopPtr *t_oop, MemBarNode* mb, PhaseTransform *phase, ArrayCopyNode*& ac) { Node* mem = mb->in(TypeFunc::Memory); if (mem->is_MergeMem()) { Node* n = mem->as_MergeMem()->memory_at(Compile::AliasIdxRaw); - if (may_modify_helper(t_oop, n, phase)) { + if (may_modify_helper(t_oop, n, phase, ac)) { return true; } else if (n->is_Phi()) { for (uint i = 1; i < n->req(); i++) { if (n->in(i) != NULL) { - if (may_modify_helper(t_oop, n->in(i), phase)) { + if (may_modify_helper(t_oop, n->in(i), phase, ac)) { return true; } } } + } else if (n->Opcode() == Op_StoreCM) { + // Ignore card mark stores + return may_modify_helper(t_oop, n->in(MemNode::Memory), phase, ac); } } diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/opto/arraycopynode.hpp --- a/hotspot/src/share/vm/opto/arraycopynode.hpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/opto/arraycopynode.hpp Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -107,7 +107,7 @@ BasicType copy_type, const Type* value_type, int count); bool finish_transform(PhaseGVN *phase, bool can_reshape, Node* ctl, Node *mem); - static bool may_modify_helper(const TypeOopPtr *t_oop, Node* n, PhaseTransform *phase); + static bool may_modify_helper(const TypeOopPtr *t_oop, Node* n, PhaseTransform *phase, ArrayCopyNode*& ac); public: @@ -162,7 +162,7 @@ bool is_alloc_tightly_coupled() const { return _alloc_tightly_coupled; } - static bool may_modify(const TypeOopPtr *t_oop, MemBarNode* mb, PhaseTransform *phase); + static bool may_modify(const TypeOopPtr *t_oop, MemBarNode* mb, PhaseTransform *phase, ArrayCopyNode*& ac); bool modifies(intptr_t offset_lo, intptr_t offset_hi, PhaseTransform* phase, bool must_modify); #ifndef PRODUCT diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/opto/graphKit.cpp --- a/hotspot/src/share/vm/opto/graphKit.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/opto/graphKit.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -4306,8 +4306,15 @@ } __ end_if(); } __ end_if(); } else { - // Object.clone() instrinsic uses this path. - g1_mark_card(ideal, card_adr, oop_store, alias_idx, index, index_adr, buffer, tf); + // The Object.clone() intrinsic uses this path if !ReduceInitialCardMarks. + // We don't need a barrier here if the destination is a newly allocated object + // in Eden. Otherwise, GC verification breaks because we assume that cards in Eden + // are set to 'g1_young_gen' (see G1SATBCardTableModRefBS::verify_g1_young_region()). + assert(!use_ReduceInitialCardMarks(), "can only happen with card marking"); + Node* card_val = __ load(__ ctrl(), card_adr, TypeInt::INT, T_BYTE, Compile::AliasIdxRaw); + __ if_then(card_val, BoolTest::ne, young_card); { + g1_mark_card(ideal, card_adr, oop_store, alias_idx, index, index_adr, buffer, tf); + } __ end_if(); } // Final sync IdealKit and GraphKit. diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/opto/macro.cpp --- a/hotspot/src/share/vm/opto/macro.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/opto/macro.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. * 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 @@ #include "opto/cfgnode.hpp" #include "opto/compile.hpp" #include "opto/convertnode.hpp" +#include "opto/graphKit.hpp" #include "opto/locknode.hpp" #include "opto/loopnode.hpp" #include "opto/macro.hpp" @@ -263,41 +264,58 @@ // checks if the store done to a different from the value's region. // And replace Cmp with #0 (false) to collapse G1 post barrier. Node* xorx = p2x->find_out_with(Op_XorX); - assert(xorx != NULL, "missing G1 post barrier"); - Node* shift = xorx->unique_out(); - Node* cmpx = shift->unique_out(); - assert(cmpx->is_Cmp() && cmpx->unique_out()->is_Bool() && - cmpx->unique_out()->as_Bool()->_test._test == BoolTest::ne, - "missing region check in G1 post barrier"); - _igvn.replace_node(cmpx, makecon(TypeInt::CC_EQ)); + if (xorx != NULL) { + Node* shift = xorx->unique_out(); + Node* cmpx = shift->unique_out(); + assert(cmpx->is_Cmp() && cmpx->unique_out()->is_Bool() && + cmpx->unique_out()->as_Bool()->_test._test == BoolTest::ne, + "missing region check in G1 post barrier"); + _igvn.replace_node(cmpx, makecon(TypeInt::CC_EQ)); - // Remove G1 pre barrier. + // Remove G1 pre barrier. - // Search "if (marking != 0)" check and set it to "false". - // There is no G1 pre barrier if previous stored value is NULL - // (for example, after initialization). - if (this_region->is_Region() && this_region->req() == 3) { - int ind = 1; - if (!this_region->in(ind)->is_IfFalse()) { - ind = 2; - } - if (this_region->in(ind)->is_IfFalse()) { - Node* bol = this_region->in(ind)->in(0)->in(1); - assert(bol->is_Bool(), ""); - cmpx = bol->in(1); - if (bol->as_Bool()->_test._test == BoolTest::ne && - cmpx->is_Cmp() && cmpx->in(2) == intcon(0) && - cmpx->in(1)->is_Load()) { - Node* adr = cmpx->in(1)->as_Load()->in(MemNode::Address); - const int marking_offset = in_bytes(JavaThread::satb_mark_queue_offset() + - SATBMarkQueue::byte_offset_of_active()); - if (adr->is_AddP() && adr->in(AddPNode::Base) == top() && - adr->in(AddPNode::Address)->Opcode() == Op_ThreadLocal && - adr->in(AddPNode::Offset) == MakeConX(marking_offset)) { - _igvn.replace_node(cmpx, makecon(TypeInt::CC_EQ)); + // Search "if (marking != 0)" check and set it to "false". + // There is no G1 pre barrier if previous stored value is NULL + // (for example, after initialization). + if (this_region->is_Region() && this_region->req() == 3) { + int ind = 1; + if (!this_region->in(ind)->is_IfFalse()) { + ind = 2; + } + if (this_region->in(ind)->is_IfFalse()) { + Node* bol = this_region->in(ind)->in(0)->in(1); + assert(bol->is_Bool(), ""); + cmpx = bol->in(1); + if (bol->as_Bool()->_test._test == BoolTest::ne && + cmpx->is_Cmp() && cmpx->in(2) == intcon(0) && + cmpx->in(1)->is_Load()) { + Node* adr = cmpx->in(1)->as_Load()->in(MemNode::Address); + const int marking_offset = in_bytes(JavaThread::satb_mark_queue_offset() + + SATBMarkQueue::byte_offset_of_active()); + if (adr->is_AddP() && adr->in(AddPNode::Base) == top() && + adr->in(AddPNode::Address)->Opcode() == Op_ThreadLocal && + adr->in(AddPNode::Offset) == MakeConX(marking_offset)) { + _igvn.replace_node(cmpx, makecon(TypeInt::CC_EQ)); + } } } } + } else { + assert(!GraphKit::use_ReduceInitialCardMarks(), "can only happen with card marking"); + // This is a G1 post barrier emitted by the Object.clone() intrinsic. + // Search for the CastP2X->URShiftX->AddP->LoadB->Cmp path which checks if the card + // is marked as young_gen and replace the Cmp with 0 (false) to collapse the barrier. + Node* shift = p2x->find_out_with(Op_URShiftX); + assert(shift != NULL, "missing G1 post barrier"); + Node* addp = shift->unique_out(); + Node* load = addp->find_out_with(Op_LoadB); + assert(load != NULL, "missing G1 post barrier"); + Node* cmpx = load->unique_out(); + assert(cmpx->is_Cmp() && cmpx->unique_out()->is_Bool() && + cmpx->unique_out()->as_Bool()->_test._test == BoolTest::ne, + "missing card value check in G1 post barrier"); + _igvn.replace_node(cmpx, makecon(TypeInt::CC_EQ)); + // There is no G1 pre barrier in this case } // Now CastP2X can be removed since it is used only on dead path // which currently still alive until igvn optimize it. @@ -326,17 +344,15 @@ CallNode *call = in->as_Call(); if (call->may_modify(tinst, phase)) { assert(call->is_ArrayCopy(), "ArrayCopy is the only call node that doesn't make allocation escape"); - if (call->as_ArrayCopy()->modifies(offset, offset, phase, false)) { return in; } } mem = in->in(TypeFunc::Memory); } else if (in->is_MemBar()) { - if (ArrayCopyNode::may_modify(tinst, in->as_MemBar(), phase)) { - assert(in->in(0)->is_Proj() && in->in(0)->in(0)->is_ArrayCopy(), "should be arraycopy"); - ArrayCopyNode* ac = in->in(0)->in(0)->as_ArrayCopy(); - assert(ac->is_clonebasic(), "Only basic clone is a non escaping clone"); + ArrayCopyNode* ac = NULL; + if (ArrayCopyNode::may_modify(tinst, in->as_MemBar(), phase, ac)) { + assert(ac != NULL && ac->is_clonebasic(), "Only basic clone is a non escaping clone"); return ac; } mem = in->in(TypeFunc::Memory); diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/opto/memnode.cpp --- a/hotspot/src/share/vm/opto/memnode.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/opto/memnode.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -160,7 +160,8 @@ } } } else if (proj_in->is_MemBar()) { - if (ArrayCopyNode::may_modify(t_oop, proj_in->as_MemBar(), phase)) { + ArrayCopyNode* ac = NULL; + if (ArrayCopyNode::may_modify(t_oop, proj_in->as_MemBar(), phase, ac)) { break; } result = proj_in->in(TypeFunc::Memory); @@ -657,7 +658,8 @@ continue; // (a) advance through independent call memory } } else if (mem->is_Proj() && mem->in(0)->is_MemBar()) { - if (ArrayCopyNode::may_modify(addr_t, mem->in(0)->as_MemBar(), phase)) { + ArrayCopyNode* ac = NULL; + if (ArrayCopyNode::may_modify(addr_t, mem->in(0)->as_MemBar(), phase, ac)) { break; } mem = mem->in(0)->in(TypeFunc::Memory); diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/opto/parse.hpp --- a/hotspot/src/share/vm/opto/parse.hpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/opto/parse.hpp Tue Jul 05 13:50:37 2016 -0700 @@ -166,14 +166,11 @@ int _all_successors; // Include exception paths also. Block** _successors; - // Use init_node/init_graph to initialize Blocks. - // Block() : _live_locals((uintptr_t*)NULL,0) { ShouldNotReachHere(); } - Block() : _live_locals() { ShouldNotReachHere(); } - public: // Set up the block data structure itself. - void init_node(Parse* outer, int po); + Block(Parse* outer, int rpo); + // Set up the block's relations to other blocks. void init_graph(Parse* outer); diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/opto/parse1.cpp --- a/hotspot/src/share/vm/opto/parse1.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/opto/parse1.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -1235,29 +1235,33 @@ // Create the blocks. _block_count = flow()->block_count(); _blocks = NEW_RESOURCE_ARRAY(Block, _block_count); - Copy::zero_to_bytes(_blocks, sizeof(Block)*_block_count); - - int rpo; // Initialize the structs. - for (rpo = 0; rpo < block_count(); rpo++) { + for (int rpo = 0; rpo < block_count(); rpo++) { Block* block = rpo_at(rpo); - block->init_node(this, rpo); + new(block) Block(this, rpo); } // Collect predecessor and successor information. - for (rpo = 0; rpo < block_count(); rpo++) { + for (int rpo = 0; rpo < block_count(); rpo++) { Block* block = rpo_at(rpo); block->init_graph(this); } } //-------------------------------init_node------------------------------------- -void Parse::Block::init_node(Parse* outer, int rpo) { +Parse::Block::Block(Parse* outer, int rpo) : _live_locals() { _flow = outer->flow()->rpo_at(rpo); _pred_count = 0; _preds_parsed = 0; _count = 0; + _is_parsed = false; + _is_handler = false; + _has_merged_backedge = false; + _start_map = NULL; + _num_successors = 0; + _all_successors = 0; + _successors = NULL; assert(pred_count() == 0 && preds_parsed() == 0, "sanity"); assert(!(is_merged() || is_parsed() || is_handler() || has_merged_backedge()), "sanity"); assert(_live_locals.size() == 0, "sanity"); diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/prims/jvm.cpp --- a/hotspot/src/share/vm/prims/jvm.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/prims/jvm.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -695,7 +695,7 @@ // This can safepoint and redefine method, so need both new_obj and method // in a handle, for two different reasons. new_obj can move, method can be // deleted if nothing is using it on the stack. - m->method_holder()->add_member_name(new_obj()); + m->method_holder()->add_member_name(new_obj(), false); } } diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/prims/jvmtiEnv.cpp --- a/hotspot/src/share/vm/prims/jvmtiEnv.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/prims/jvmtiEnv.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -319,15 +319,7 @@ JvmtiEnv::GetObjectSize(jobject object, jlong* size_ptr) { oop mirror = JNIHandles::resolve_external_guard(object); NULL_CHECK(mirror, JVMTI_ERROR_INVALID_OBJECT); - - if (mirror->klass() == SystemDictionary::Class_klass() && - !java_lang_Class::is_primitive(mirror)) { - Klass* k = java_lang_Class::as_Klass(mirror); - assert(k != NULL, "class for non-primitive mirror must exist"); - *size_ptr = (jlong)k->size() * wordSize; - } else { - *size_ptr = (jlong)mirror->size() * wordSize; - } + *size_ptr = (jlong)mirror->size() * wordSize; return JVMTI_ERROR_NONE; } /* end GetObjectSize */ diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/prims/methodHandles.cpp --- a/hotspot/src/share/vm/prims/methodHandles.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/prims/methodHandles.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -178,7 +178,7 @@ return NULL; } -oop MethodHandles::init_method_MemberName(Handle mname, CallInfo& info) { +oop MethodHandles::init_method_MemberName(Handle mname, CallInfo& info, bool intern) { assert(info.resolved_appendix().is_null(), "only normal methods here"); methodHandle m = info.resolved_method(); assert(m.not_null(), "null method handle"); @@ -279,13 +279,7 @@ // If relevant, the vtable or itable value is stored as vmindex. // This is done eagerly, since it is readily available without // constructing any new objects. - // TO DO: maybe intern mname_oop - if (m->method_holder()->add_member_name(mname)) { - return mname(); - } else { - // Redefinition caused this to fail. Return NULL (and an exception?) - return NULL; - } + return m->method_holder()->add_member_name(mname, intern); } oop MethodHandles::init_field_MemberName(Handle mname, fieldDescriptor& fd, bool is_setter) { @@ -975,7 +969,9 @@ if (!java_lang_invoke_MemberName::is_instance(result())) return -99; // caller bug! CallInfo info(m); - oop saved = MethodHandles::init_method_MemberName(result, info); + // Since this is going through the methods to create MemberNames, don't search + // for matching methods already in the table + oop saved = MethodHandles::init_method_MemberName(result, info, /*intern*/false); if (saved != result()) results->obj_at_put(rfill-1, saved); // show saved instance to user } else if (++overflow >= overflow_limit) { @@ -1056,9 +1052,34 @@ } } -void MemberNameTable::add_member_name(jweak mem_name_wref) { +oop MemberNameTable::add_member_name(jweak mem_name_wref) { assert_locked_or_safepoint(MemberNameTable_lock); this->push(mem_name_wref); + return JNIHandles::resolve(mem_name_wref); +} + +oop MemberNameTable::find_or_add_member_name(jweak mem_name_wref) { + assert_locked_or_safepoint(MemberNameTable_lock); + oop new_mem_name = JNIHandles::resolve(mem_name_wref); + + // Find matching member name in the list. + // This is linear because these because these are short lists. + int len = this->length(); + int new_index = len; + for (int idx = 0; idx < len; idx++) { + oop mname = JNIHandles::resolve(this->at(idx)); + if (mname == NULL) { + new_index = idx; + continue; + } + if (java_lang_invoke_MemberName::equals(new_mem_name, mname)) { + JNIHandles::destroy_weak_global(mem_name_wref); + return mname; + } + } + // Not found, push the new one, or reuse empty slot + this->at_put_grow(new_index, mem_name_wref); + return new_mem_name; } #if INCLUDE_JVMTI diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/prims/methodHandles.hpp --- a/hotspot/src/share/vm/prims/methodHandles.hpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/prims/methodHandles.hpp Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved. * 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,7 +66,7 @@ static Handle new_MemberName(TRAPS); // must be followed by init_MemberName static oop init_MemberName(Handle mname_h, Handle target_h); // compute vmtarget/vmindex from target static oop init_field_MemberName(Handle mname_h, fieldDescriptor& fd, bool is_setter = false); - static oop init_method_MemberName(Handle mname_h, CallInfo& info); + static oop init_method_MemberName(Handle mname_h, CallInfo& info, bool intern = true); static int method_ref_kind(Method* m, bool do_dispatch_if_possible = true); static int find_MemberNames(KlassHandle k, Symbol* name, Symbol* sig, int mflags, KlassHandle caller, @@ -253,7 +253,8 @@ public: MemberNameTable(int methods_cnt); ~MemberNameTable(); - void add_member_name(jweak mem_name_ref); + oop add_member_name(jweak mem_name_ref); + oop find_or_add_member_name(jweak mem_name_ref); #if INCLUDE_JVMTI // RedefineClasses() API support: diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/prims/unsafe.cpp --- a/hotspot/src/share/vm/prims/unsafe.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/prims/unsafe.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -356,19 +356,6 @@ return JNIHandles::make_local(env, v); } UNSAFE_END -UNSAFE_ENTRY(jclass, Unsafe_GetJavaMirror(JNIEnv *env, jobject unsafe, jlong metaspace_klass)) { - Klass* klass = (Klass*) (address) metaspace_klass; - - return (jclass) JNIHandles::make_local(klass->java_mirror()); -} UNSAFE_END - -UNSAFE_ENTRY(jlong, Unsafe_GetKlassPointer(JNIEnv *env, jobject unsafe, jobject obj)) { - oop o = JNIHandles::resolve(obj); - jlong klass = (jlong) (address) o->klass(); - - return klass; -} UNSAFE_END - #ifndef SUPPORTS_NATIVE_CX8 // VM_Version::supports_cx8() is a surrogate for 'supports atomic long memory ops'. @@ -1152,8 +1139,6 @@ {CC "putObjectVolatile",CC "(" OBJ "J" OBJ ")V", FN_PTR(Unsafe_PutObjectVolatile)}, {CC "getUncompressedObject", CC "(" ADR ")" OBJ, FN_PTR(Unsafe_GetUncompressedObject)}, - {CC "getJavaMirror", CC "(" ADR ")" CLS, FN_PTR(Unsafe_GetJavaMirror)}, - {CC "getKlassPointer", CC "(" OBJ ")" ADR, FN_PTR(Unsafe_GetKlassPointer)}, DECLARE_GETPUTOOP(Boolean, Z), DECLARE_GETPUTOOP(Byte, B), diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/prims/whitebox.cpp --- a/hotspot/src/share/vm/prims/whitebox.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/prims/whitebox.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -1433,6 +1433,10 @@ return (jlong) MetaspaceGC::capacity_until_GC(); WB_END +WB_ENTRY(jboolean, WB_MetaspaceShouldConcurrentCollect(JNIEnv* env, jobject wb)) + return MetaspaceGC::should_concurrent_collect(); +WB_END + WB_ENTRY(void, WB_AssertMatchingSafepointCalls(JNIEnv* env, jobject o, jboolean mutexSafepointValue, jboolean attemptedNoSafepointValue)) Monitor::SafepointCheckRequired sfpt_check_required = mutexSafepointValue ? @@ -1813,6 +1817,7 @@ CC"(Ljava/lang/ClassLoader;JJ)V", (void*)&WB_FreeMetaspace }, {CC"incMetaspaceCapacityUntilGC", CC"(J)J", (void*)&WB_IncMetaspaceCapacityUntilGC }, {CC"metaspaceCapacityUntilGC", CC"()J", (void*)&WB_MetaspaceCapacityUntilGC }, + {CC"metaspaceShouldConcurrentCollect", CC"()Z", (void*)&WB_MetaspaceShouldConcurrentCollect }, {CC"getCPUFeatures", CC"()Ljava/lang/String;", (void*)&WB_GetCPUFeatures }, {CC"getNMethod0", CC"(Ljava/lang/reflect/Executable;Z)[Ljava/lang/Object;", (void*)&WB_GetNMethod }, diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/runtime/deoptimization.cpp --- a/hotspot/src/share/vm/runtime/deoptimization.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/runtime/deoptimization.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -498,6 +498,19 @@ } #endif + if (thread->frames_to_pop_failed_realloc() > 0 && exec_mode != Unpack_uncommon_trap) { + assert(thread->has_pending_exception(), "should have thrown OOME"); + thread->set_exception_oop(thread->pending_exception()); + thread->clear_pending_exception(); + exec_mode = Unpack_exception; + } + +#if INCLUDE_JVMCI + if (thread->frames_to_pop_failed_realloc() > 0) { + thread->set_pending_monitorenter(false); + } +#endif + UnrollBlock* info = new UnrollBlock(array->frame_size() * BytesPerWord, caller_adjustment * BytesPerWord, caller_was_method_handle ? 0 : callee_parameters, diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/runtime/java.cpp --- a/hotspot/src/share/vm/runtime/java.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/runtime/java.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -446,6 +446,14 @@ os::infinite_sleep(); } + EventThreadEnd event; + if (event.should_commit()) { + event.set_thread(THREAD_TRACE_ID(thread)); + event.commit(); + } + + TRACE_VM_EXIT(); + // Stop the WatcherThread. We do this before disenrolling various // PeriodicTasks to reduce the likelihood of races. if (PeriodicTask::num_tasks() > 0) { @@ -484,13 +492,6 @@ JvmtiExport::post_thread_end(thread); } - - EventThreadEnd event; - if (event.should_commit()) { - event.set_thread(THREAD_TRACE_ID(thread)); - event.commit(); - } - // Always call even when there are not JVMTI environments yet, since environments // may be attached late and JVMTI must track phases of VM execution JvmtiExport::post_vm_death(); diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/runtime/mutexLocker.cpp --- a/hotspot/src/share/vm/runtime/mutexLocker.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/runtime/mutexLocker.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -274,7 +274,7 @@ def(JfrMsg_lock , Monitor, leaf, true, Monitor::_safepoint_check_always); def(JfrBuffer_lock , Mutex, leaf, true, Monitor::_safepoint_check_never); def(JfrThreadGroups_lock , Mutex, leaf, true, Monitor::_safepoint_check_always); - def(JfrStream_lock , Mutex, nonleaf, true, Monitor::_safepoint_check_never); + def(JfrStream_lock , Mutex, leaf+1, true, Monitor::_safepoint_check_never); // ensure to rank lower than 'safepoint' def(JfrStacktrace_lock , Mutex, special, true, Monitor::_safepoint_check_sometimes); #endif diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/runtime/reflectionUtils.cpp --- a/hotspot/src/share/vm/runtime/reflectionUtils.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/runtime/reflectionUtils.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved. * 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,10 +73,7 @@ void FilteredFieldsMap::initialize() { - int offset; - offset = java_lang_Throwable::get_backtrace_offset(); - _filtered_fields->append(new FilteredField(SystemDictionary::Throwable_klass(), offset)); - offset = reflect_ConstantPool::oop_offset(); + int offset = reflect_ConstantPool::oop_offset(); _filtered_fields->append(new FilteredField(SystemDictionary::reflect_ConstantPool_klass(), offset)); offset = reflect_UnsafeStaticFieldAccessorImpl::base_offset(); _filtered_fields->append(new FilteredField(SystemDictionary::reflect_UnsafeStaticFieldAccessorImpl_klass(), offset)); diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/runtime/thread.cpp --- a/hotspot/src/share/vm/runtime/thread.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/runtime/thread.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -3405,6 +3405,8 @@ // // After phase 2, The VM will begin search classes from -Xbootclasspath/a. static void call_initPhase2(TRAPS) { + TraceTime timer("Phase2 initialization", TRACETIME_LOG(Info, modules, startuptime)); + Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK); instanceKlassHandle klass (THREAD, k); diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/runtime/thread.inline.hpp --- a/hotspot/src/share/vm/runtime/thread.inline.hpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/runtime/thread.inline.hpp Tue Jul 05 13:50:37 2016 -0700 @@ -71,9 +71,12 @@ jlong allocated_bytes = OrderAccess::load_acquire(&_allocated_bytes); if (UseTLAB) { size_t used_bytes = tlab().used_bytes(); - if ((ssize_t)used_bytes > 0) { - // More-or-less valid tlab. The load_acquire above should ensure - // that the result of the add is <= the instantaneous value. + if (used_bytes <= ThreadLocalAllocBuffer::max_size_in_bytes()) { + // Comparing used_bytes with the maximum allowed size will ensure + // that we don't add the used bytes from a semi-initialized TLAB + // ending up with incorrect values. There is still a race between + // incrementing _allocated_bytes and clearing the TLAB, that might + // cause double counting in rare cases. return allocated_bytes + used_bytes; } } diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/runtime/vframeArray.cpp --- a/hotspot/src/share/vm/runtime/vframeArray.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/runtime/vframeArray.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -171,6 +171,8 @@ int exec_mode) { JavaThread* thread = (JavaThread*) Thread::current(); + bool realloc_failure_exception = thread->frames_to_pop_failed_realloc() > 0; + // Look at bci and decide on bcp and continuation pc address bcp; // C++ interpreter doesn't need a pc since it will figure out what to do when it @@ -204,10 +206,12 @@ // // For Compiler1, deoptimization can occur while throwing a NullPointerException at monitorenter, // in which case bcp should point to the monitorenter since it is within the exception's range. + // + // For realloc failure exception we just pop frames, skip the guarantee. assert(*bcp != Bytecodes::_monitorenter || is_top_frame, "a _monitorenter must be a top frame"); assert(thread->deopt_compiled_method() != NULL, "compiled method should be known"); - guarantee(!(thread->deopt_compiled_method()->is_compiled_by_c2() && + guarantee(realloc_failure_exception || !(thread->deopt_compiled_method()->is_compiled_by_c2() && *bcp == Bytecodes::_monitorenter && exec_mode == Deoptimization::Unpack_exception), "shouldn't get exception during monitorenter"); @@ -237,12 +241,17 @@ // Deoptimization::fetch_unroll_info_helper popframe_preserved_args_size_in_words = in_words(thread->popframe_preserved_args_size_in_words()); } - } else if (JvmtiExport::can_force_early_return() && state != NULL && state->is_earlyret_pending()) { + } else if (!realloc_failure_exception && JvmtiExport::can_force_early_return() && state != NULL && state->is_earlyret_pending()) { // Force early return from top frame after deoptimization #ifndef CC_INTERP pc = Interpreter::remove_activation_early_entry(state->earlyret_tos()); #endif } else { + if (realloc_failure_exception && JvmtiExport::can_force_early_return() && state != NULL && state->is_earlyret_pending()) { + state->clr_earlyret_pending(); + state->set_earlyret_oop(NULL); + state->clr_earlyret_value(); + } // Possibly override the previous pc computation of the top (youngest) frame switch (exec_mode) { case Deoptimization::Unpack_deopt: diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/trace/traceBackend.hpp --- a/hotspot/src/share/vm/trace/traceBackend.hpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/trace/traceBackend.hpp Tue Jul 05 13:50:37 2016 -0700 @@ -48,9 +48,6 @@ static void on_unloading_classes(void) { } - static void on_vm_error(bool) { - } - }; class TraceThreadData { diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/trace/traceMacros.hpp --- a/hotspot/src/share/vm/trace/traceMacros.hpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/trace/traceMacros.hpp Tue Jul 05 13:50:37 2016 -0700 @@ -43,6 +43,8 @@ #define TRACE_REGISTER_NATIVES ((void*)((address_word)(&trace_register_natives))) #define TRACE_START() JNI_OK #define TRACE_INITIALIZE() JNI_OK +#define TRACE_VM_EXIT() +#define TRACE_VM_ERROR() #define TRACE_DEFINE_TRACE_ID_METHODS typedef int ___IGNORED_hs_trace_type1 #define TRACE_DEFINE_TRACE_ID_FIELD typedef int ___IGNORED_hs_trace_type2 diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/utilities/bitMap.hpp --- a/hotspot/src/share/vm/utilities/bitMap.hpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/utilities/bitMap.hpp Tue Jul 05 13:50:37 2016 -0700 @@ -435,7 +435,6 @@ void clear_bit(idx_t slot_index, idx_t bit_within_slot_index); void at_put(idx_t slot_index, idx_t bit_within_slot_index, bool value); void at_put_grow(idx_t slot_index, idx_t bit_within_slot_index, bool value); - void clear(); }; // Closure for iterating over BitMaps diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/utilities/bitMap.inline.hpp --- a/hotspot/src/share/vm/utilities/bitMap.inline.hpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/utilities/bitMap.inline.hpp Tue Jul 05 13:50:37 2016 -0700 @@ -367,8 +367,4 @@ _map.at_put(bit, value); } -inline void BitMap2D::clear() { - _map.clear(); -} - #endif // SHARE_VM_UTILITIES_BITMAP_INLINE_HPP diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/utilities/debug.cpp --- a/hotspot/src/share/vm/utilities/debug.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/utilities/debug.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -54,10 +54,6 @@ #include "utilities/macros.hpp" #include "utilities/vmError.hpp" -#if INCLUDE_TRACE -#include "trace/tracing.hpp" -#endif - #include #ifndef ASSERT @@ -306,11 +302,6 @@ exit(2); } -static void notify_tracing() { -#if INCLUDE_TRACE - Tracing::on_vm_error(true); -#endif -} void report_insufficient_metaspace(size_t required_size) { warning("\nThe MaxMetaspaceSize of " SIZE_FORMAT " bytes is not large enough.\n" @@ -334,8 +325,6 @@ HeapDumper::dump_heap_from_oome(); } - notify_tracing(); - if (OnOutOfMemoryError && OnOutOfMemoryError[0]) { VMError::report_java_out_of_memory(message); } diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/src/share/vm/utilities/vmError.cpp --- a/hotspot/src/share/vm/utilities/vmError.cpp Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/src/share/vm/utilities/vmError.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -39,6 +39,7 @@ #include "runtime/vmThread.hpp" #include "runtime/vm_operations.hpp" #include "services/memTracker.hpp" +#include "trace/traceMacros.hpp" #include "utilities/debug.hpp" #include "utilities/decoder.hpp" #include "utilities/defaultStream.hpp" @@ -1165,6 +1166,8 @@ // are handled properly. reset_signal_handlers(); + TRACE_VM_ERROR(); + } else { // If UseOsErrorReporting we call this for each level of the call stack // while searching for the exception handler. Only the first level needs diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/TEST.ROOT --- a/hotspot/test/TEST.ROOT Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/TEST.ROOT Tue Jul 05 13:50:37 2016 -0700 @@ -1,4 +1,4 @@ -# +# # Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # @@ -19,7 +19,7 @@ # 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. -# +# # @@ -31,10 +31,10 @@ groups=TEST.groups [closed/TEST.groups] -# Source files for classes that will be used at the beginning of each test suite run, -# to determine additional characteristics of the system for use with the @requires tag. +# Source files for classes that will be used at the beginning of each test suite run, +# to determine additional characteristics of the system for use with the @requires tag. requires.extraPropDefns = ../../test/jtreg-ext/requires/VMProps.java -requires.properties=sun.arch.data.model +requires.properties=sun.arch.data.model vm.simpleArch vm.flightRecorder # Tests using jtreg 4.2 b02 features requiredVersion=4.2 b02 diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/arraycopy/TestEliminatedArrayCopyDeopt.java --- a/hotspot/test/compiler/arraycopy/TestEliminatedArrayCopyDeopt.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/arraycopy/TestEliminatedArrayCopyDeopt.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. * 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,10 +23,10 @@ /* * @test - * @bug 8130847 + * @bug 8130847 8156760 * @summary Eliminated instance/array written to by an array copy variant must be correctly initialized when reallocated at a deopt * @run main/othervm -XX:-BackgroundCompilation -XX:-UseOnStackReplacement TestEliminatedArrayCopyDeopt - * + * @run main/othervm -XX:-BackgroundCompilation -XX:-UseOnStackReplacement -XX:+IgnoreUnrecognizedVMOptions -XX:-ReduceInitialCardMarks TestEliminatedArrayCopyDeopt */ // Test that if an ArrayCopy node is eliminated because it doesn't diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/arraycopy/TestInstanceCloneAsLoadsStores.java --- a/hotspot/test/compiler/arraycopy/TestInstanceCloneAsLoadsStores.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/arraycopy/TestInstanceCloneAsLoadsStores.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. * 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,12 +23,12 @@ /* * @test - * @bug 6700100 + * @bug 6700100 8156760 * @summary small instance clone as loads/stores * @compile TestInstanceCloneAsLoadsStores.java TestInstanceCloneUtils.java * @run main/othervm -XX:-BackgroundCompilation -XX:-UseOnStackReplacement -XX:CompileCommand=dontinline,TestInstanceCloneAsLoadsStores::m* TestInstanceCloneAsLoadsStores * @run main/othervm -XX:-BackgroundCompilation -XX:-UseOnStackReplacement -XX:CompileCommand=dontinline,TestInstanceCloneAsLoadsStores::m* -XX:+IgnoreUnrecognizedVMOptions -XX:+StressArrayCopyMacroNode TestInstanceCloneAsLoadsStores - * + * @run main/othervm -XX:-BackgroundCompilation -XX:-UseOnStackReplacement -XX:CompileCommand=dontinline,TestInstanceCloneAsLoadsStores::m* -XX:+IgnoreUnrecognizedVMOptions -XX:-ReduceInitialCardMarks TestInstanceCloneAsLoadsStores */ public class TestInstanceCloneAsLoadsStores extends TestInstanceCloneUtils { diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/c2/6857159/Test6857159.java --- a/hotspot/test/compiler/c2/6857159/Test6857159.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/c2/6857159/Test6857159.java Tue Jul 05 13:50:37 2016 -0700 @@ -34,12 +34,12 @@ import jdk.test.lib.*; public class Test6857159 { - public static void main(String[] args) throws Exception { - ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-Xbatch", "-XX:+PrintCompilation", - "-XX:CompileOnly=Test$ct.run", "Test"); - OutputAnalyzer analyzer = new OutputAnalyzer(pb.start()); + public static void main(String[] args) throws Throwable { + OutputAnalyzer analyzer = ProcessTools.executeTestJvm("-Xbatch", + "-XX:+PrintCompilation", "-XX:CompileOnly=Test$ct.run", "Test"); analyzer.shouldNotContain("COMPILE SKIPPED"); analyzer.shouldContain("Test$ct0::run (16 bytes)"); + analyzer.shouldHaveExitValue(0); } } diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/c2/6857159/Test6857159.sh --- a/hotspot/test/compiler/c2/6857159/Test6857159.sh Thu Jun 30 14:57:30 2016 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -#!/bin/sh -# -# 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 -# 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. -# -# -## some tests require path to find test source dir -if [ "${TESTSRC}" = "" ] -then - TESTSRC=${PWD} - echo "TESTSRC not set. Using "${TESTSRC}" as default" -fi -echo "TESTSRC=${TESTSRC}" -## Adding common setup Variables for running shell tests. -. ${TESTSRC}/../../../test_env.sh - -set -x - -cp ${TESTSRC}/Test6857159.java . -cp ${TESTSRC}/Test6857159.sh . - -${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} -d . Test6857159.java - -${TESTJAVA}/bin/java ${TESTOPTS} -Xbatch -XX:+PrintCompilation -XX:CompileOnly=Test6857159\$ct.run Test6857159 > test.out 2>&1 - -grep "COMPILE SKIPPED" test.out - -result=$? -if [ $result -eq 1 ] -then - echo "Passed" - exit 0 -else - echo "Failed" - exit 1 -fi diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/c2/6894807/IsInstanceTest.java --- a/hotspot/test/compiler/c2/6894807/IsInstanceTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/c2/6894807/IsInstanceTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,8 +25,7 @@ * @test * @bug 6894807 * @summary No ClassCastException for HashAttributeSet constructors if run with -Xcomp - * @compile IsInstanceTest.java - * @run shell Test6894807.sh + * @run main IsInstanceTest */ public class IsInstanceTest { @@ -35,13 +34,7 @@ BaseInterface baseInterfaceImpl = new BaseInterfaceImpl(); for (int i = 0; i < 100000; i++) { if (isInstanceOf(baseInterfaceImpl, ExtendedInterface.class)) { - System.out.println("Failed at index:" + i); - System.out.println("Arch: "+System.getProperty("os.arch", "")+ - " OS: "+System.getProperty("os.name", "")+ - " OSV: "+System.getProperty("os.version", "")+ - " Cores: "+Runtime.getRuntime().availableProcessors()+ - " JVM: "+System.getProperty("java.version", "")+" "+System.getProperty("sun.arch.data.model", "")); - break; + throw new AssertionError("Failed at index:" + i); } } System.out.println("Done!"); diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/c2/6894807/Test6894807.sh --- a/hotspot/test/compiler/c2/6894807/Test6894807.sh Thu Jun 30 14:57:30 2016 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ -#!/bin/sh -# -# 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 -# 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. -# - -if [ "${TESTSRC}" = "" ] -then - TESTSRC=${PWD} - echo "TESTSRC not set. Using "${TESTSRC}" as default" -fi -echo "TESTSRC=${TESTSRC}" - -## Adding common setup Variables for running shell tests. -. ${TESTSRC}/../../../test_env.sh - -${TESTJAVA}${FS}bin${FS}java ${TESTOPTS} IsInstanceTest > test.out 2>&1 - -cat test.out - -grep "Failed at index" test.out - -if [ $? = 0 ] -then - echo "Test Failed" - exit 1 -else - echo "Test Passed" - exit 0 -fi diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/c2/7070134/Stemmer.java --- a/hotspot/test/compiler/c2/7070134/Stemmer.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/c2/7070134/Stemmer.java Tue Jul 05 13:50:37 2016 -0700 @@ -2,8 +2,10 @@ * @test * @bug 7070134 * @summary Hotspot crashes with sigsegv from PorterStemmer - * - * @run shell Test7070134.sh + * @modules java.base/jdk.internal.misc + * @library /testlibrary + * @run driver jdk.test.lib.FileInstaller words words + * @run main/othervm -Xbatch Stemmer words */ /* @@ -61,7 +63,7 @@ * by calling one of the various stem(something) methods. */ -class Stemmer +public class Stemmer { private char[] b; private int i, /* offset into b */ i_end, /* offset to end of stemmed word */ diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/c2/7070134/Test7070134.sh --- a/hotspot/test/compiler/c2/7070134/Test7070134.sh Thu Jun 30 14:57:30 2016 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ -#!/bin/sh -# -# 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 -# 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. -# -# -## some tests require path to find test source dir -if [ "${TESTSRC}" = "" ] -then - TESTSRC=${PWD} - echo "TESTSRC not set. Using "${TESTSRC}" as default" -fi -echo "TESTSRC=${TESTSRC}" -## Adding common setup Variables for running shell tests. -. ${TESTSRC}/../../../test_env.sh - -set -x - -cp ${TESTSRC}/Stemmer.java . -cp ${TESTSRC}/words . - -${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} -d . Stemmer.java - -${TESTJAVA}/bin/java ${TESTOPTS} -Xbatch Stemmer words > test.out 2>&1 - -exit $? - diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/codecache/jmx/PoolsIndependenceTest.java --- a/hotspot/test/compiler/codecache/jmx/PoolsIndependenceTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/codecache/jmx/PoolsIndependenceTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -38,6 +38,7 @@ /* * @test PoolsIndependenceTest * @modules java.base/jdk.internal.misc + * java.management * @library /testlibrary /test/lib * @build PoolsIndependenceTest * @run main ClassFileInstaller sun.hotspot.WhiteBox diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/cpuflags/TestSSE4Disabled.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/compiler/cpuflags/TestSSE4Disabled.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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 TestSSE4Disabled + * @bug 8158214 + * @requires (vm.simpleArch == "x64") + * @summary Test correct execution without SSE 4. + * @run main/othervm -Xcomp -XX:UseSSE=3 TestSSE4Disabled + */ +public class TestSSE4Disabled { + public static void main(String args[]) { + System.out.println("Passed"); + } +} + diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/floatingpoint/Test15FloatJNIArgs.java --- a/hotspot/test/compiler/floatingpoint/Test15FloatJNIArgs.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/floatingpoint/Test15FloatJNIArgs.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,9 +25,9 @@ * @bug 8139258 * @summary Regression test for 8139258 which failed to properly pass float args * to a jni function on ppc64le. - * @run main/othervm -Xint Test15FloatJNIArgs - * @run main/othervm -XX:+TieredCompilation -Xcomp Test15FloatJNIArgs - * @run main/othervm -XX:-TieredCompilation -Xcomp Test15FloatJNIArgs + * @run main/othervm/native -Xint Test15FloatJNIArgs + * @run main/othervm/native -XX:+TieredCompilation -Xcomp Test15FloatJNIArgs + * @run main/othervm/native -XX:-TieredCompilation -Xcomp Test15FloatJNIArgs */ public class Test15FloatJNIArgs { diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/JVM_GetJVMCIRuntimeTest.java --- a/hotspot/test/compiler/jvmci/JVM_GetJVMCIRuntimeTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/JVM_GetJVMCIRuntimeTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,7 +25,7 @@ /** * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary / * @modules java.base/jdk.internal.misc * @modules jdk.vm.ci/jdk.vm.ci.runtime diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/SecurityRestrictionsTest.java --- a/hotspot/test/compiler/jvmci/SecurityRestrictionsTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/SecurityRestrictionsTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,7 +25,7 @@ /** * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary /test/lib / * @library common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/common/services/jdk.vm.ci.hotspot.services.HotSpotVMEventListener --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/compiler/jvmci/common/services/jdk.vm.ci.hotspot.services.HotSpotVMEventListener Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,1 @@ +compiler.jvmci.common.JVMCIHelpers$EmptyVMEventListener diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/common/services/jdk.vm.ci.runtime.services.JVMCICompilerFactory --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/compiler/jvmci/common/services/jdk.vm.ci.runtime.services.JVMCICompilerFactory Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,1 @@ +compiler.jvmci.common.JVMCIHelpers$EmptyCompilerFactory diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/AllocateCompileIdTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/AllocateCompileIdTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/AllocateCompileIdTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -24,7 +24,7 @@ /** * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary /test/lib / * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/CanInlineMethodTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/CanInlineMethodTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/CanInlineMethodTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,7 +25,7 @@ /** * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary /test/lib / * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/CollectCountersTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/CollectCountersTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/CollectCountersTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -24,7 +24,7 @@ /* * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library / /testlibrary /test/lib/ * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/DebugOutputTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/DebugOutputTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/DebugOutputTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -24,7 +24,7 @@ /* * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library / /testlibrary /test/lib * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/DisassembleCodeBlobTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/DisassembleCodeBlobTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/DisassembleCodeBlobTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,7 +25,7 @@ /* * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary /test/lib / * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/DoNotInlineOrCompileTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/DoNotInlineOrCompileTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/DoNotInlineOrCompileTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,7 +25,7 @@ /** * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary /test/lib / * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/ExecuteInstalledCodeTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/ExecuteInstalledCodeTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/ExecuteInstalledCodeTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -21,7 +21,7 @@ /* * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary /test/lib / * @library ../common/patches * @ignore 8139383 diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/FindUniqueConcreteMethodTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/FindUniqueConcreteMethodTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/FindUniqueConcreteMethodTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -24,7 +24,7 @@ /* * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library / /testlibrary /test/lib * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/GetBytecodeTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/GetBytecodeTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/GetBytecodeTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,7 +25,7 @@ /** * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary /test/lib / * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/GetClassInitializerTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/GetClassInitializerTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/GetClassInitializerTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -24,7 +24,7 @@ /* * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library / /testlibrary /test/lib * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/GetConstantPoolTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/GetConstantPoolTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/GetConstantPoolTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,7 +25,7 @@ /* * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary /test/lib / * @library ../common/patches * @modules java.base/jdk.internal.misc @@ -138,17 +138,6 @@ return CompilerToVMHelper.getConstantPool(cpInst, ptr); } }, - OBJECT_TYPE_BASE { - @Override - ConstantPool getConstantPool() { - HotSpotResolvedObjectType type - = HotSpotResolvedObjectType.fromObjectClass( - OBJECT_TYPE_BASE.getClass()); - long ptrToClass = UNSAFE.getKlassPointer(OBJECT_TYPE_BASE); - return CompilerToVMHelper.getConstantPool(type, - getPtrToCpAddress() - ptrToClass); - } - }, ; abstract ConstantPool getConstantPool(); } diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/GetExceptionTableTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/GetExceptionTableTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/GetExceptionTableTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,7 +25,7 @@ /** * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary /test/lib / * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/GetImplementorTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/GetImplementorTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/GetImplementorTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -24,7 +24,7 @@ /* * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library / /testlibrary /test/lib/ * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/GetLineNumberTableTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/GetLineNumberTableTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/GetLineNumberTableTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,7 +25,7 @@ /** * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary /test/lib / * @library ../common/patches * @library ../common/patches diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/GetLocalVariableTableTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/GetLocalVariableTableTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/GetLocalVariableTableTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,7 +25,7 @@ /** * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary /test/lib / * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/GetMaxCallTargetOffsetTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/GetMaxCallTargetOffsetTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/GetMaxCallTargetOffsetTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -24,7 +24,7 @@ /* * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library / /testlibrary /test/lib/ * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/GetNextStackFrameTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/GetNextStackFrameTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/GetNextStackFrameTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -24,7 +24,7 @@ /* * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library / /testlibrary /test/lib * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/GetResolvedJavaMethodAtSlotTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/GetResolvedJavaMethodAtSlotTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/GetResolvedJavaMethodAtSlotTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,7 +25,7 @@ /** * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary /test/lib / * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/GetResolvedJavaMethodTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/GetResolvedJavaMethodTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/GetResolvedJavaMethodTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -24,7 +24,7 @@ /* * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library / /testlibrary /test/lib * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/GetResolvedJavaTypeTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/GetResolvedJavaTypeTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/GetResolvedJavaTypeTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -24,7 +24,8 @@ /* * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @ignore 8158860 + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library / /testlibrary /test/lib * @library ../common/patches * @modules java.base/jdk.internal.misc @@ -149,25 +150,12 @@ ptr, COMPRESSED); } }, - OBJECT_TYPE_BASE { - @Override - HotSpotResolvedObjectType getResolvedJavaType() { - HotSpotResolvedObjectType type - = HotSpotResolvedObjectType.fromObjectClass( - OBJECT_TYPE_BASE.getClass()); - long ptrToClass = UNSAFE.getKlassPointer(OBJECT_TYPE_BASE); - return CompilerToVMHelper.getResolvedJavaType(type, - getPtrToKlass() - ptrToClass, COMPRESSED); - } - }, ; abstract HotSpotResolvedObjectType getResolvedJavaType(); } private static final Unsafe UNSAFE = Utils.getUnsafe(); private static final WhiteBox WB = WhiteBox.getWhiteBox(); - private static final long PTR = UNSAFE.getKlassPointer( - new GetResolvedJavaTypeTest()); private static final Class TEST_CLASS = GetResolvedJavaTypeTest.class; /* a compressed parameter for tested method is set to false because unsafe.getKlassPointer always returns uncompressed pointer */ diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/GetStackTraceElementTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/GetStackTraceElementTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/GetStackTraceElementTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,7 +25,7 @@ /** * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary /test/lib / * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/GetSymbolTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/GetSymbolTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/GetSymbolTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -24,7 +24,7 @@ /* * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library / /testlibrary /test/lib * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/GetVtableIndexForInterfaceTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/GetVtableIndexForInterfaceTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/GetVtableIndexForInterfaceTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -24,7 +24,7 @@ /* * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library / /testlibrary /test/lib * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/HasCompiledCodeForOSRTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/HasCompiledCodeForOSRTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/HasCompiledCodeForOSRTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,7 +25,7 @@ /** * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary /test/lib / * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/HasFinalizableSubclassTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/HasFinalizableSubclassTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/HasFinalizableSubclassTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -24,7 +24,7 @@ /* * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library / /testlibrary /test/lib * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/InitializeConfigurationTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/InitializeConfigurationTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/InitializeConfigurationTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -24,7 +24,7 @@ /* * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library / /testlibrary * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/InvalidateInstalledCodeTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/InvalidateInstalledCodeTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/InvalidateInstalledCodeTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,7 +25,7 @@ /* * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary /test/lib / * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/IsMatureTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/IsMatureTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/IsMatureTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -24,7 +24,7 @@ /* * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library / /testlibrary /test/lib * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/JVM_RegisterJVMCINatives.java --- a/hotspot/test/compiler/jvmci/compilerToVM/JVM_RegisterJVMCINatives.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/JVM_RegisterJVMCINatives.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,7 +25,7 @@ /* * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary / * @modules java.base/jdk.internal.misc * @modules jdk.vm.ci/jdk.vm.ci.hotspot diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/LookupKlassInPoolTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/LookupKlassInPoolTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/LookupKlassInPoolTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,7 +25,7 @@ /* * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @summary Testing compiler.jvmci.CompilerToVM.lookupKlassInPool method * @library /testlibrary /test/lib / * @library ../common/patches diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/LookupKlassRefIndexInPoolTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/LookupKlassRefIndexInPoolTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/LookupKlassRefIndexInPoolTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,7 +25,7 @@ /* * @test * @bug 8138708 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary /test/lib / * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/LookupMethodInPoolTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/LookupMethodInPoolTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/LookupMethodInPoolTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,7 +25,7 @@ /* * @test * @bug 8138708 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary /test/lib / * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/LookupNameAndTypeRefIndexInPoolTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/LookupNameAndTypeRefIndexInPoolTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/LookupNameAndTypeRefIndexInPoolTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,7 +25,7 @@ /* * @test * @bug 8138708 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary /test/lib / * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/LookupNameInPoolTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/LookupNameInPoolTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/LookupNameInPoolTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,7 +25,7 @@ /* * @test * @bug 8138708 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary /test/lib / * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/LookupSignatureInPoolTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/LookupSignatureInPoolTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/LookupSignatureInPoolTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,7 +25,7 @@ /* * @test * @bug 8138708 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary /test/lib / * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/LookupTypeTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/LookupTypeTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/LookupTypeTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -24,7 +24,7 @@ /* * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library / /testlibrary * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/MaterializeVirtualObjectTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/MaterializeVirtualObjectTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/MaterializeVirtualObjectTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -24,7 +24,7 @@ /* * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library / /testlibrary /test/lib * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/MethodIsIgnoredBySecurityStackWalkTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/MethodIsIgnoredBySecurityStackWalkTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/MethodIsIgnoredBySecurityStackWalkTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,7 +25,7 @@ /** * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary /test/lib / * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/ReprofileTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/ReprofileTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/ReprofileTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,7 +25,7 @@ /** * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary /test/lib / * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/ResolveConstantInPoolTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/ResolveConstantInPoolTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/ResolveConstantInPoolTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,7 +25,7 @@ /* * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary /test/lib / * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/ResolveFieldInPoolTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/ResolveFieldInPoolTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/ResolveFieldInPoolTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,7 +25,7 @@ /* * @test * @bug 8138708 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary /test/lib / * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/ResolveMethodTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/ResolveMethodTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/ResolveMethodTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -24,7 +24,7 @@ /* * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library / /testlibrary /test/lib * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/ResolvePossiblyCachedConstantInPoolTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/ResolvePossiblyCachedConstantInPoolTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/ResolvePossiblyCachedConstantInPoolTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,7 +25,7 @@ /* * @test * @bug 8138708 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary /test/lib / * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/ResolveTypeInPoolTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/ResolveTypeInPoolTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/ResolveTypeInPoolTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,7 +25,7 @@ /* * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @summary Testing compiler.jvmci.CompilerToVM.resolveTypeInPool method * @library /testlibrary /test/lib / * @library ../common/patches diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/ShouldDebugNonSafepointsTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/ShouldDebugNonSafepointsTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/ShouldDebugNonSafepointsTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -24,7 +24,7 @@ /* * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library / /testlibrary /test/lib/ * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/compilerToVM/ShouldInlineMethodTest.java --- a/hotspot/test/compiler/jvmci/compilerToVM/ShouldInlineMethodTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/compilerToVM/ShouldInlineMethodTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,7 +25,7 @@ /** * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary /test/lib / * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/errors/TestInvalidCompilationResult.java --- a/hotspot/test/compiler/jvmci/errors/TestInvalidCompilationResult.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/errors/TestInvalidCompilationResult.java Tue Jul 05 13:50:37 2016 -0700 @@ -23,7 +23,7 @@ /** * @test - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @modules jdk.vm.ci/jdk.vm.ci.hotspot * jdk.vm.ci/jdk.vm.ci.code * jdk.vm.ci/jdk.vm.ci.code.site diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/errors/TestInvalidDebugInfo.java --- a/hotspot/test/compiler/jvmci/errors/TestInvalidDebugInfo.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/errors/TestInvalidDebugInfo.java Tue Jul 05 13:50:37 2016 -0700 @@ -23,7 +23,7 @@ /** * @test - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @modules jdk.vm.ci/jdk.vm.ci.hotspot * jdk.vm.ci/jdk.vm.ci.code * jdk.vm.ci/jdk.vm.ci.code.site diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/errors/TestInvalidOopMap.java --- a/hotspot/test/compiler/jvmci/errors/TestInvalidOopMap.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/errors/TestInvalidOopMap.java Tue Jul 05 13:50:37 2016 -0700 @@ -23,7 +23,7 @@ /** * @test - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @modules jdk.vm.ci/jdk.vm.ci.hotspot * jdk.vm.ci/jdk.vm.ci.code * jdk.vm.ci/jdk.vm.ci.code.site diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/events/JvmciNotifyBootstrapFinishedEventTest.config --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/compiler/jvmci/events/JvmciNotifyBootstrapFinishedEventTest.config Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,1 @@ +compiler.jvmci.events.JvmciNotifyBootstrapFinishedEventTest diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/events/JvmciNotifyBootstrapFinishedEventTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/compiler/jvmci/events/JvmciNotifyBootstrapFinishedEventTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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 8156034 + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") + * @library / /testlibrary + * @library ../common/patches + * @modules java.base/jdk.internal.misc + java.base/jdk.internal.org.objectweb.asm + * java.base/jdk.internal.org.objectweb.asm.tree + * jdk.vm.ci/jdk.vm.ci.hotspot + * jdk.vm.ci/jdk.vm.ci.code + * jdk.vm.ci/jdk.vm.ci.meta + * jdk.vm.ci/jdk.vm.ci.runtime + * @build jdk.vm.ci/jdk.vm.ci.hotspot.CompilerToVMHelper + * @build compiler.jvmci.common.JVMCIHelpers + * compiler.jvmci.events.JvmciNotifyBootstrapFinishedEventTest + * @run main jdk.test.lib.FileInstaller ../common/services/ ./META-INF/services/ + * @run main jdk.test.lib.FileInstaller ./JvmciNotifyBootstrapFinishedEventTest.config + * ./META-INF/services/jdk.vm.ci.hotspot.services.HotSpotVMEventListener + * @run main ClassFileInstaller + * compiler.jvmci.common.JVMCIHelpers$EmptyHotspotCompiler + * compiler.jvmci.common.JVMCIHelpers$EmptyCompilerFactory + * compiler.jvmci.events.JvmciNotifyBootstrapFinishedEventTest + * jdk.test.lib.Asserts + * jdk.test.lib.Utils + * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI + * -Djvmci.Compiler=EmptyCompiler -Xbootclasspath/a:. + * -XX:+UseJVMCICompiler -XX:-BootstrapJVMCI + * -Dcompiler.jvmci.events.JvmciNotifyBootstrapFinishedEventTest.bootstrap=false + * compiler.jvmci.events.JvmciNotifyBootstrapFinishedEventTest + * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI + * -Djvmci.Compiler=EmptyCompiler -Xbootclasspath/a:. + * -XX:+UseJVMCICompiler -XX:+BootstrapJVMCI + * -Dcompiler.jvmci.events.JvmciNotifyBootstrapFinishedEventTest.bootstrap=true + * compiler.jvmci.events.JvmciNotifyBootstrapFinishedEventTest + */ + +package compiler.jvmci.events; + +import jdk.test.lib.Asserts; +import jdk.vm.ci.hotspot.services.HotSpotVMEventListener; + +public class JvmciNotifyBootstrapFinishedEventTest extends HotSpotVMEventListener { + private static final boolean BOOTSTRAP = Boolean + .getBoolean("compiler.jvmci.events.JvmciNotifyBootstrapFinishedEventTest.bootstrap"); + private static volatile int gotBoostrapNotification = 0; + + public static void main(String args[]) { + if (BOOTSTRAP) { + Asserts.assertEQ(gotBoostrapNotification, 1, "Did not receive expected number of bootstrap events"); + } else { + Asserts.assertEQ(gotBoostrapNotification, 0, "Got unexpected bootstrap event"); + } + } + + @Override + public void notifyBootstrapFinished() { + gotBoostrapNotification++; + } +} diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/events/JvmciNotifyInstallEventTest.java --- a/hotspot/test/compiler/jvmci/events/JvmciNotifyInstallEventTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/events/JvmciNotifyInstallEventTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -24,7 +24,7 @@ /* * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library / /testlibrary * @library ../common/patches * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/events/JvmciShutdownEventTest.java --- a/hotspot/test/compiler/jvmci/events/JvmciShutdownEventTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/events/JvmciShutdownEventTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -24,7 +24,7 @@ /* * @test * @bug 8136421 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary / * @modules java.base/jdk.internal.misc * @modules jdk.vm.ci/jdk.vm.ci.hotspot diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/DataPatchTest.java --- a/hotspot/test/compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/DataPatchTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/DataPatchTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -23,7 +23,7 @@ /** * @test - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64" + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9") & os.arch != "aarch64" * @library / * @modules jdk.vm.ci/jdk.vm.ci.hotspot * jdk.vm.ci/jdk.vm.ci.meta diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/InterpreterFrameSizeTest.java --- a/hotspot/test/compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/InterpreterFrameSizeTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/InterpreterFrameSizeTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -23,7 +23,7 @@ /** * @test - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64" + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9") & os.arch != "aarch64" * @modules jdk.vm.ci/jdk.vm.ci.hotspot * jdk.vm.ci/jdk.vm.ci.code * jdk.vm.ci/jdk.vm.ci.code.site diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/SimpleCodeInstallationTest.java --- a/hotspot/test/compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/SimpleCodeInstallationTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/SimpleCodeInstallationTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -23,7 +23,7 @@ /** * @test - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64" + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9") & os.arch != "aarch64" * @library / * @modules jdk.vm.ci/jdk.vm.ci.hotspot * jdk.vm.ci/jdk.vm.ci.meta diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/SimpleDebugInfoTest.java --- a/hotspot/test/compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/SimpleDebugInfoTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/SimpleDebugInfoTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -23,7 +23,7 @@ /** * @test - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64" + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9") & os.arch != "aarch64" * @library / * @modules jdk.vm.ci/jdk.vm.ci.hotspot * jdk.vm.ci/jdk.vm.ci.meta diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/VirtualObjectDebugInfoTest.java --- a/hotspot/test/compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/VirtualObjectDebugInfoTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/VirtualObjectDebugInfoTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -23,7 +23,7 @@ /** * @test - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64" + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9") & os.arch != "aarch64" * @library / * @modules jdk.vm.ci/jdk.vm.ci.hotspot * jdk.vm.ci/jdk.vm.ci.meta diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/HotSpotConstantReflectionProviderTest.java --- a/hotspot/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/HotSpotConstantReflectionProviderTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/HotSpotConstantReflectionProviderTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -23,7 +23,7 @@ /* * @test jdk.vm.ci.hotspot.test.HotSpotConstantReflectionProviderTest - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @modules jdk.vm.ci/jdk.vm.ci.runtime * jdk.vm.ci/jdk.vm.ci.meta * jdk.vm.ci/jdk.vm.ci.hotspot diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/MemoryAccessProviderTest.java --- a/hotspot/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/MemoryAccessProviderTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/MemoryAccessProviderTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -24,7 +24,7 @@ /* * @test * @bug 8152341 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary /test/lib /compiler/jvmci/jdk.vm.ci.hotspot.test/src * @modules jdk.vm.ci/jdk.vm.ci.meta * jdk.vm.ci/jdk.vm.ci.common @@ -49,26 +49,6 @@ private static final MemoryAccessProvider PROVIDER = JVMCI.getRuntime().getHostJVMCIBackend().getConstantReflection().getMemoryAccessProvider(); @Test(dataProvider = "positivePrimitive", dataProviderClass = MemoryAccessProviderData.class) - public void testPositiveReadUnsafeConstant(JavaKind kind, JavaConstant base, Long offset, Object expected, int bitsCount) { - Assert.assertEquals(PROVIDER.readUnsafeConstant(kind, base, offset), expected, "Failed to read constant"); - } - - @Test(dataProvider = "positivePrimitive", dataProviderClass = MemoryAccessProviderData.class, expectedExceptions = {IllegalArgumentException.class}) - public void testReadUnsafeConstantNullBase(JavaKind kind, JavaConstant base, Long offset, Object expected, int bitsCount) { - PROVIDER.readUnsafeConstant(kind, null, offset); - } - - @Test(dataProvider = "positivePrimitive", dataProviderClass = MemoryAccessProviderData.class, expectedExceptions = {IllegalArgumentException.class}) - public void testNegativeReadUnsafeConstantNullKind(JavaKind kind, JavaConstant base, Long offset, Object expected, int bitsCount) { - Assert.assertNull(PROVIDER.readUnsafeConstant(null, base, offset), "Expected null return"); - } - - @Test(dataProvider = "negative", dataProviderClass = MemoryAccessProviderData.class, expectedExceptions = {IllegalArgumentException.class}) - public void testNegativeReadUnsafeConstant(JavaKind kind, JavaConstant base) { - PROVIDER.readUnsafeConstant(kind, base, 0L); - } - - @Test(dataProvider = "positivePrimitive", dataProviderClass = MemoryAccessProviderData.class) public void testPositiveReadPrimitiveConstant(JavaKind kind, Constant base, Long offset, Object expected, int bitsCount) { Assert.assertEquals(PROVIDER.readPrimitiveConstant(kind, base, offset, bitsCount), expected, "Failed to read constant"); } diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/MethodHandleAccessProviderTest.java --- a/hotspot/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/MethodHandleAccessProviderTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/MethodHandleAccessProviderTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -24,7 +24,7 @@ /* * @test * @bug 8152343 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary /test/lib /compiler/jvmci/jdk.vm.ci.hotspot.test/src * @modules jdk.vm.ci/jdk.vm.ci.meta * jdk.vm.ci/jdk.vm.ci.runtime diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/ConstantTest.java --- a/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/ConstantTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/ConstantTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -23,7 +23,7 @@ /** * @test - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library ../../../../../ * @modules jdk.vm.ci/jdk.vm.ci.meta * jdk.vm.ci/jdk.vm.ci.runtime @@ -31,7 +31,6 @@ * @build jdk.vm.ci.runtime.test.ConstantTest * @run junit/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI jdk.vm.ci.runtime.test.ConstantTest */ -// * @compile ConstantTest.java FieldUniverse.java TypeUniverse.java TestMetaAccessProvider.java package jdk.vm.ci.runtime.test; import org.junit.Assert; diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/RedefineClassTest.java --- a/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/RedefineClassTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/RedefineClassTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -23,7 +23,7 @@ /** * @test - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library ../../../../../ * @modules jdk.vm.ci/jdk.vm.ci.meta * jdk.vm.ci/jdk.vm.ci.runtime diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/ResolvedJavaTypeResolveConcreteMethodTest.java --- a/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/ResolvedJavaTypeResolveConcreteMethodTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/ResolvedJavaTypeResolveConcreteMethodTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -23,7 +23,7 @@ /** * @test - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @modules jdk.vm.ci/jdk.vm.ci.meta * jdk.vm.ci/jdk.vm.ci.runtime * @run junit/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI jdk.vm.ci.runtime.test.ResolvedJavaTypeResolveConcreteMethodTest diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/ResolvedJavaTypeResolveMethodTest.java --- a/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/ResolvedJavaTypeResolveMethodTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/ResolvedJavaTypeResolveMethodTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -23,7 +23,7 @@ /** * @test - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @modules jdk.vm.ci/jdk.vm.ci.meta * jdk.vm.ci/jdk.vm.ci.runtime * @run junit/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI jdk.vm.ci.runtime.test.ResolvedJavaTypeResolveMethodTest diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestConstantReflectionProvider.java --- a/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestConstantReflectionProvider.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestConstantReflectionProvider.java Tue Jul 05 13:50:37 2016 -0700 @@ -23,7 +23,7 @@ /** * @test - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library ../../../../../ * @modules jdk.vm.ci/jdk.vm.ci.meta * jdk.vm.ci/jdk.vm.ci.runtime diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestJavaField.java --- a/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestJavaField.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestJavaField.java Tue Jul 05 13:50:37 2016 -0700 @@ -23,7 +23,7 @@ /** * @test - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library ../../../../../ * @modules jdk.vm.ci/jdk.vm.ci.meta * jdk.vm.ci/jdk.vm.ci.runtime diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestJavaMethod.java --- a/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestJavaMethod.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestJavaMethod.java Tue Jul 05 13:50:37 2016 -0700 @@ -23,7 +23,7 @@ /** * @test - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library ../../../../../ * @modules jdk.vm.ci/jdk.vm.ci.meta * jdk.vm.ci/jdk.vm.ci.runtime diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestJavaType.java --- a/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestJavaType.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestJavaType.java Tue Jul 05 13:50:37 2016 -0700 @@ -23,7 +23,7 @@ /** * @test - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library ../../../../../ * @modules jdk.vm.ci/jdk.vm.ci.meta * jdk.vm.ci/jdk.vm.ci.runtime diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestMetaAccessProvider.java --- a/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestMetaAccessProvider.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestMetaAccessProvider.java Tue Jul 05 13:50:37 2016 -0700 @@ -23,7 +23,7 @@ /** * @test - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library ../../../../../ * @modules jdk.vm.ci/jdk.vm.ci.meta * jdk.vm.ci/jdk.vm.ci.runtime diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestResolvedJavaField.java --- a/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestResolvedJavaField.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestResolvedJavaField.java Tue Jul 05 13:50:37 2016 -0700 @@ -23,7 +23,7 @@ /** * @test - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library ../../../../../ * @modules jdk.vm.ci/jdk.vm.ci.meta * jdk.vm.ci/jdk.vm.ci.runtime diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestResolvedJavaMethod.java --- a/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestResolvedJavaMethod.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestResolvedJavaMethod.java Tue Jul 05 13:50:37 2016 -0700 @@ -23,7 +23,7 @@ /** * @test - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library ../../../../../ * @modules jdk.vm.ci/jdk.vm.ci.meta * jdk.vm.ci/jdk.vm.ci.runtime diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestResolvedJavaType.java --- a/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestResolvedJavaType.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestResolvedJavaType.java Tue Jul 05 13:50:37 2016 -0700 @@ -23,7 +23,7 @@ /** * @test - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library ../../../../../ * @modules java.base/jdk.internal.reflect * jdk.vm.ci/jdk.vm.ci.meta diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/jvmci/meta/StableFieldTest.java --- a/hotspot/test/compiler/jvmci/meta/StableFieldTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/compiler/jvmci/meta/StableFieldTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -24,7 +24,7 @@ /** * @test * @bug 8151664 - * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") + * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") * @library /testlibrary /test/lib / * @modules java.base/jdk.internal.misc * @modules java.base/jdk.internal.vm.annotation diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/stable/TestStableMismatched.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/compiler/stable/TestStableMismatched.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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 TestStableMismatched + * @bug 8158228 + * @summary Tests if mismatched char load from stable byte[] returns correct result + * @run main/othervm -XX:-CompactStrings -XX:TieredStopAtLevel=1 -Xcomp + * -XX:CompileOnly=TestStableMismatched::test,::charAt + * TestStableMismatched + * @run main/othervm -XX:-CompactStrings -XX:-TieredCompilation -Xcomp + * -XX:CompileOnly=TestStableMismatched::test,::charAt + * TestStableMismatched + */ +public class TestStableMismatched { + public static void main(String args[]) { + test(); + } + + public static void test() { + String text = "abcdefg"; + // Mismatched char load from @Stable byte[] String.value field + char returned = text.charAt(6); + if (returned != 'g') { + throw new RuntimeException("failed: charAt(6) returned '" + returned + "' instead of 'g'"); + } + } +} + diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/compiler/uncommontrap/DeoptReallocFailure.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/compiler/uncommontrap/DeoptReallocFailure.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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 8146416 + * @library /test/lib /testlibrary / + * @build sun.hotspot.WhiteBox + * @run main ClassFileInstaller sun.hotspot.WhiteBox + * sun.hotspot.WhiteBox$WhiteBoxPermission + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbatch -XX:CompileCommand=exclude,DeoptReallocFailure::main -Xmx100m DeoptReallocFailure + * + */ +import java.lang.reflect.Method; +import sun.hotspot.WhiteBox; + +class MemoryChunk { + MemoryChunk other; + Object[][] array; + + MemoryChunk(MemoryChunk other) { + this.other = other; + array = new Object[1024 * 256][]; + } +} + +class NoEscape { + long f1; +} + +public class DeoptReallocFailure { + + static MemoryChunk root; + private static final WhiteBox WB = WhiteBox.getWhiteBox(); + + public static synchronized long test() { + NoEscape[] noEscape = new NoEscape[45]; + noEscape[0] = new NoEscape(); + for (int i=0;i<1024*256;i++) { + root.array[i]= new Object[45]; + } + return noEscape[0].f1; + } + + public static void main(String[] args) throws Throwable { + + //Exhaust Memory + root = null; + try { + while (true) { + root = new MemoryChunk(root); + } + } catch (OutOfMemoryError oom) { + } + + if (root == null) { + return; + } + + try { + NoEscape dummy = new NoEscape(); + Method m = DeoptReallocFailure.class.getMethod("test"); + WB.enqueueMethodForCompilation(m, 4); + test(); + } catch (OutOfMemoryError oom) { + root = null; + oom.printStackTrace(); + } + System.out.println("TEST PASSED"); + } +} diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/gc/arguments/TestTargetSurvivorRatioFlag.java --- a/hotspot/test/gc/arguments/TestTargetSurvivorRatioFlag.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/gc/arguments/TestTargetSurvivorRatioFlag.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. * 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 @@ * @test TestTargetSurvivorRatioFlag * @key gc * @summary Verify that option TargetSurvivorRatio affects survivor space occupancy after minor GC. + * @requires (vm.opt.ExplicitGCInvokesConcurrent == null) | (vm.opt.ExplicitGCInvokesConcurrent == false) + * @requires (vm.opt.UseJVMCICompiler == null) | (vm.opt.UseJVMCICompiler == false) * @library /testlibrary /test/lib * @modules java.base/jdk.internal.misc * java.management diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/gc/g1/humongousObjects/objectGraphTest/GC.java --- a/hotspot/test/gc/g1/humongousObjects/objectGraphTest/GC.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/gc/g1/humongousObjects/objectGraphTest/GC.java Tue Jul 05 13:50:37 2016 -0700 @@ -38,6 +38,61 @@ * referenced objects after GCs */ public enum GC { + CMC { + @Override + public Runnable get() { + return () -> { + Helpers.waitTillCMCFinished(WHITE_BOX, 0); + WHITE_BOX.g1StartConcMarkCycle(); + Helpers.waitTillCMCFinished(WHITE_BOX, 0); + }; + } + + public Consumer> getChecker() { + return getCheckerImpl(false, false, true, false); + } + + @Override + public List shouldContain() { + return Arrays.asList(GCTokens.WB_INITIATED_CMC); + } + + @Override + public List shouldNotContain() { + return Arrays.asList(GCTokens.WB_INITIATED_YOUNG_GC, GCTokens.WB_INITIATED_MIXED_GC, + GCTokens.FULL_GC, GCTokens.YOUNG_GC); + } + }, + + CMC_NO_SURV_ROOTS { + @Override + public Runnable get() { + return () -> { + WHITE_BOX.youngGC(); + Helpers.waitTillCMCFinished(WHITE_BOX, 0); + WHITE_BOX.youngGC(); + Helpers.waitTillCMCFinished(WHITE_BOX, 0); + + WHITE_BOX.g1StartConcMarkCycle(); + Helpers.waitTillCMCFinished(WHITE_BOX, 0); + }; + } + + public Consumer> getChecker() { + return getCheckerImpl(true, false, true, false); + } + + @Override + public List shouldContain() { + return Arrays.asList(GCTokens.WB_INITIATED_CMC); + } + + @Override + public List shouldNotContain() { + return Arrays.asList(GCTokens.WB_INITIATED_MIXED_GC, + GCTokens.FULL_GC, GCTokens.YOUNG_GC); + } + }, YOUNG_GC { @Override @@ -60,6 +115,7 @@ GCTokens.CMC, GCTokens.YOUNG_GC); } }, + FULL_GC { @Override public Runnable get() { diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/gc/g1/humongousObjects/objectGraphTest/README --- a/hotspot/test/gc/g1/humongousObjects/objectGraphTest/README Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/gc/g1/humongousObjects/objectGraphTest/README Tue Jul 05 13:50:37 2016 -0700 @@ -31,6 +31,13 @@ 3. Full GC with memory pressure - weakly and softly referenced non-humongous and humongous objects are collected. +4. CMC - weakly referenced non-humongous objects are collected, other objects are not collected since weak references + from Young Gen is handled as strong during CMC. + +5. CMC_NO_SURV_ROOTS - weakly referenced non-humongous and humongous objects are collected, softly referenced + non-humongous and humongous objects are not collected since we make 2 Young GC to promote all + weak references to Old Gen. + The test gets gc type as a command line argument. Then the test allocates object graph in heap (currently testing scenarios are pre-generated and stored in TestcaseData.getPregeneratedTestcases()) with TestObjectGraphAfterGC::allocateObjectGraph. diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/gc/g1/humongousObjects/objectGraphTest/TestObjectGraphAfterGC.java --- a/hotspot/test/gc/g1/humongousObjects/objectGraphTest/TestObjectGraphAfterGC.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/gc/g1/humongousObjects/objectGraphTest/TestObjectGraphAfterGC.java Tue Jul 05 13:50:37 2016 -0700 @@ -77,6 +77,14 @@ * -XX:G1HeapRegionSize=1M -Xlog:gc=info:file=TestObjectGraphAfterGC_FULL_GC_MEMORY_PRESSURE.gc.log * gc.g1.humongousObjects.objectGraphTest.TestObjectGraphAfterGC FULL_GC_MEMORY_PRESSURE * + * @run main/othervm -Xms200M -XX:+UseG1GC -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. + * -XX:G1HeapRegionSize=1M -Xlog:gc=info:file=TestObjectGraphAfterGC_CMC.gc.log -XX:MaxTenuringThreshold=16 + * gc.g1.humongousObjects.objectGraphTest.TestObjectGraphAfterGC CMC + * + * @run main/othervm -Xms200M -XX:+UseG1GC -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. + * -XX:G1HeapRegionSize=1M -Xlog:gc=info:file=TestObjectGraphAfterGC_CMC_NO_SURV_ROOTS.gc.log -XX:MaxTenuringThreshold=1 + * gc.g1.humongousObjects.objectGraphTest.TestObjectGraphAfterGC CMC_NO_SURV_ROOTS + * */ /** diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/gc/g1/ihop/TestIHOPErgo.java --- a/hotspot/test/gc/g1/ihop/TestIHOPErgo.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/gc/g1/ihop/TestIHOPErgo.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,8 +25,8 @@ * @test TestIHOPErgo * @bug 8148397 * @summary Test checks that behavior of Adaptive and Static IHOP at concurrent cycle initiation - * @requires vm.gc=="G1" | vm.gc=="null" - * @requires vm.opt.FlightRecorder != true + * @requires vm.gc == "G1" | vm.gc == "null" + * @requires !vm.flightRecorder * @requires vm.opt.ExplicitGCInvokesConcurrent != true * @requires vm.opt.MaxGCPauseMillis == "null" * @library /testlibrary /test/lib / diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/gc/g1/ihop/TestIHOPStatic.java --- a/hotspot/test/gc/g1/ihop/TestIHOPStatic.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/gc/g1/ihop/TestIHOPStatic.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,8 +25,8 @@ * @test TestIHOPStatic * @bug 8148397 * @summary Test checks concurrent cycle initiation which depends on IHOP value. - * @requires vm.gc=="G1" | vm.gc=="null" - * @requires vm.opt.FlightRecorder != true + * @requires vm.gc == "G1" | vm.gc == "null" + * @requires !vm.flightRecorder * @requires vm.opt.ExplicitGCInvokesConcurrent != true * @library /testlibrary / * @modules java.base/jdk.internal.misc diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/gc/g1/plab/TestPLABPromotion.java --- a/hotspot/test/gc/g1/plab/TestPLABPromotion.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/gc/g1/plab/TestPLABPromotion.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,8 +25,8 @@ * @test TestPLABPromotion * @bug 8141278 8141141 * @summary Test PLAB promotion - * @requires vm.gc=="G1" | vm.gc=="null" - * @requires vm.opt.FlightRecorder != true + * @requires vm.gc == "G1" | vm.gc == "null" + * @requires !vm.flightRecorder * @library /testlibrary /test/lib / * @modules java.base/jdk.internal.misc * @modules java.management diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/gc/g1/plab/TestPLABResize.java --- a/hotspot/test/gc/g1/plab/TestPLABResize.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/gc/g1/plab/TestPLABResize.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,8 +25,8 @@ * @test TestPLABResize * @bug 8141278 8141141 * @summary Test for PLAB resizing - * @requires vm.gc=="G1" | vm.gc=="null" - * @requires vm.opt.FlightRecorder != true + * @requires vm.gc == "G1" | vm.gc == "null" + * @requires !vm.flightRecorder * @library /testlibrary /test/lib / * @modules java.base/jdk.internal.misc * @modules java.management diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/gc/metaspace/TestMetaspaceCMSCancel.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/gc/metaspace/TestMetaspaceCMSCancel.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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.test.lib.process.ProcessTools; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.Asserts; +import sun.hotspot.WhiteBox; + +/* @test TestMetaspaceCMSCancel + * @bug 8026752 + * @summary Tests cancel of CMS concurrent cycle for Metaspace after a full GC + * @library /testlibrary /test/lib /test/lib/share/classes + * @modules java.base/jdk.internal.misc + * @build TestMetaspaceCMSCancel + * @run main ClassFileInstaller sun.hotspot.WhiteBox + * @run main/othervm TestMetaspaceCMSCancel + */ + + +public class TestMetaspaceCMSCancel { + + public static void main(String[] args) throws Exception { + // Set a small MetaspaceSize so that a CMS concurrent collection will be + // scheduled. Set CMSWaitDuration to 5s so that the concurrent collection + // start may be delayed. It does not guarantee 5s before the start of the + // concurrent collection but does increase the probability that it will + // be started later. System.gc() is used to invoke a full collection. Set + // ExplicitGCInvokesConcurrent to off so it is a STW collection. + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-Xbootclasspath/a:.", + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "-XX:+UseConcMarkSweepGC", + "-XX:MetaspaceSize=2m", + "-XX:CMSWaitDuration=5000", + "-XX:-ExplicitGCInvokesConcurrent", + "-Xlog:gc*=debug", + MetaspaceGCTest.class.getName()); + + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + output.shouldNotContain("Concurrent Reset"); + output.shouldHaveExitValue(0); + } + + static class MetaspaceGCTest { + public static void main(String [] args) { + WhiteBox wb = WhiteBox.getWhiteBox(); + System.gc(); + Asserts.assertFalse(wb.metaspaceShouldConcurrentCollect()); + } + } +} diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/gc/stress/TestGCOld.java --- a/hotspot/test/gc/stress/TestGCOld.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/gc/stress/TestGCOld.java Tue Jul 05 13:50:37 2016 -0700 @@ -32,6 +32,7 @@ * @run main/othervm -Xmx384M -XX:+UseParallelGC -XX:-UseParallelOldGC TestGCOld 50 1 20 10 10000 * @run main/othervm -Xmx384M -XX:+UseConcMarkSweepGC TestGCOld 50 1 20 10 10000 * @run main/othervm -Xmx384M -XX:+UseG1GC TestGCOld 50 1 20 10 10000 + * @run main/othervm -Xms64m -Xmx128m -XX:+UseG1GC -XX:+UseDynamicNumberOfGCThreads -Xlog:gc,gc+task=trace TestGCOld 50 5 20 1 5000 */ import java.text.*; diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/gc/stress/TestStressG1Humongous.java --- a/hotspot/test/gc/stress/TestStressG1Humongous.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/gc/stress/TestStressG1Humongous.java Tue Jul 05 13:50:37 2016 -0700 @@ -26,7 +26,8 @@ * @key gc * @key stress * @summary Stress G1 by humongous allocations in situation near OOM - * @requires vm.gc=="G1" | vm.gc=="null" + * @requires vm.gc == "G1" | vm.gc == "null" + * @requires !vm.flightRecorder * @run main/othervm/timeout=200 -Xlog:gc=debug -Xmx1g -XX:+UseG1GC -XX:G1HeapRegionSize=4m * -Dtimeout=120 -Dthreads=3 -Dhumongoussize=1.1 -Dregionsize=4 TestStressG1Humongous * @run main/othervm/timeout=200 -Xlog:gc=debug -Xmx1g -XX:+UseG1GC -XX:G1HeapRegionSize=16m diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/native/runtime/test_classLoader.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/native/runtime/test_classLoader.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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 "classfile/classLoader.hpp" +#include "memory/resourceArea.hpp" +#include "unittest.hpp" + +// Tests ClassLoader::package_from_name() +TEST_VM(classLoader, null_class_name) { + ResourceMark rm; + bool bad_class_name = false; + const char* retval= ClassLoader::package_from_name(NULL, &bad_class_name); + ASSERT_TRUE(bad_class_name) << "Function did not set bad_class_name with NULL class name"; + ASSERT_STREQ(retval, NULL) << "Wrong package for NULL class name pointer"; +} + +TEST_VM(classLoader, empty_class_name) { + ResourceMark rm; + const char* retval = ClassLoader::package_from_name(""); + ASSERT_STREQ(retval, NULL) << "Wrong package for empty string"; +} + +TEST_VM(classLoader, no_slash) { + ResourceMark rm; + const char* retval = ClassLoader::package_from_name("L"); + ASSERT_STREQ(retval, NULL) << "Wrong package for class with no slashes"; +} + +TEST_VM(classLoader, just_slash) { + ResourceMark rm; + bool bad_class_name = false; + const char* retval = ClassLoader::package_from_name("/", &bad_class_name); + ASSERT_TRUE(bad_class_name) << "Function did not set bad_class_name with package of length 0"; + ASSERT_STREQ(retval, NULL) << "Wrong package for class with just slash"; +} + +TEST_VM(classLoader, multiple_slashes) { + ResourceMark rm; + const char* retval = ClassLoader::package_from_name("///"); + ASSERT_STREQ(retval, "//") << "Wrong package for class with just slashes"; +} + +TEST_VM(classLoader, standard_case_1) { + ResourceMark rm; + bool bad_class_name = true; + const char* retval = ClassLoader::package_from_name("package/class", &bad_class_name); + ASSERT_FALSE(bad_class_name) << "Function did not reset bad_class_name"; + ASSERT_STREQ(retval, "package") << "Wrong package for class with one slash"; +} + +TEST_VM(classLoader, standard_case_2) { + ResourceMark rm; + const char* retval = ClassLoader::package_from_name("package/folder/class"); + ASSERT_STREQ(retval, "package/folder") << "Wrong package for class with multiple slashes"; +} + +TEST_VM(classLoader, class_array) { + ResourceMark rm; + bool bad_class_name = false; + const char* retval = ClassLoader::package_from_name("[package/class", &bad_class_name); + ASSERT_FALSE(bad_class_name) << "Function set bad_class_name with class array"; + ASSERT_STREQ(retval, "package") << "Wrong package for class with leading bracket"; +} + +TEST_VM(classLoader, class_object_array) { + ResourceMark rm; + bool bad_class_name = false; + const char* retval = ClassLoader::package_from_name("[Lpackage/class", &bad_class_name); + ASSERT_TRUE(bad_class_name) << "Function did not set bad_class_name with array of class objects"; + ASSERT_STREQ(retval, NULL) << "Wrong package for class with leading '[L'"; +} diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/native/runtime/test_instanceKlass.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/native/runtime/test_instanceKlass.cpp Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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 "classfile/symbolTable.hpp" +#include "memory/resourceArea.hpp" +#include "oops/instanceKlass.hpp" +#include "unittest.hpp" + +// Tests InstanceKlass::package_from_name() +TEST_VM(instanceKlass, null_symbol) { + ResourceMark rm; + TempNewSymbol package_sym = InstanceKlass::package_from_name(NULL, NULL); + ASSERT_TRUE(package_sym == NULL) << "Wrong package for NULL symbol"; +} diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/runtime/ErrorHandling/ProblematicFrameTest.java --- a/hotspot/test/runtime/ErrorHandling/ProblematicFrameTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/runtime/ErrorHandling/ProblematicFrameTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. * 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,9 @@ public static void main(String[] args) throws Exception { ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( - "-Xmx64m", "-XX:-TransmitErrorReport", "-XX:-CreateCoredumpOnCrash", Crasher.class.getName()); + "-Xmx64m", "-XX:-TransmitErrorReport", "-XaddExports:java.base/jdk.internal.misc=ALL-UNNAMED", "-XX:-CreateCoredumpOnCrash", Crasher.class.getName()); OutputAnalyzer output = new OutputAnalyzer(pb.start()); + output.shouldNotContain("Exception in thread"); output.shouldNotMatch("error occurred during error reporting \\(printing problematic frame\\)"); } } diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/runtime/NMT/CommitOverlappingRegions.java --- a/hotspot/test/runtime/NMT/CommitOverlappingRegions.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/runtime/NMT/CommitOverlappingRegions.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. * 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,12 @@ public static WhiteBox wb = WhiteBox.getWhiteBox(); public static void main(String args[]) throws Exception { OutputAnalyzer output; + long size = 32 * 1024; + int pagesize = wb.getVMPageSize(); + if (size < pagesize) { size = pagesize; } // Should be aligned. + long sizek = size / 1024; + long addr = wb.NMTReserveMemory(8*size); String pid = Long.toString(ProcessTools.getProcessId()); @@ -52,93 +57,93 @@ // Start: . . . . . . . . output = new OutputAnalyzer(pb.start()); - output.shouldContain("Test (reserved=256KB, committed=0KB)"); + output.shouldContain("Test (reserved=" + 8*sizek + "KB, committed=0KB)"); // Committing: * * * . . . . . // Region: * * * . . . . . - // Expected Total: 3 x 32KB = 96KB + // Expected Total: 3 x sizek KB wb.NMTCommitMemory(addr + 0*size, 3*size); // Committing: . . . . * * * . // Region: * * * . * * * . - // Expected Total: 6 x 32KB = 192KB + // Expected Total: 6 x sizek KB wb.NMTCommitMemory(addr + 4*size, 3*size); // Check output after first 2 commits. output = new OutputAnalyzer(pb.start()); - output.shouldContain("Test (reserved=256KB, committed=192KB)"); + output.shouldContain("Test (reserved=" + 8*sizek + "KB, committed=" + 6*sizek + "KB)"); // Committing: . . * * * . . . // Region: * * * * * * * . - // Expected Total: 7 x 32KB = 224KB + // Expected Total: 7 x sizek KB wb.NMTCommitMemory(addr + 2*size, 3*size); // Check output after overlapping commit. output = new OutputAnalyzer(pb.start()); - output.shouldContain("Test (reserved=256KB, committed=224KB)"); + output.shouldContain("Test (reserved=" + 8*sizek + "KB, committed=" + 7*sizek + "KB)"); // Uncommitting: * * * * * * * * // Region: . . . . . . . . - // Expected Total: 0 x 32KB = 0KB + // Expected Total: 0 x sizek KB wb.NMTUncommitMemory(addr + 0*size, 8*size); output = new OutputAnalyzer(pb.start()); - output.shouldContain("Test (reserved=256KB, committed=0KB)"); + output.shouldContain("Test (reserved=" + 8*sizek + "KB, committed=0KB)"); // Committing: * * . . . . . . // Region: * * . . . . . . - // Expected Total: 2 x 32KB = 64KB + // Expected Total: 2 x sizek KB wb.NMTCommitMemory(addr + 0*size, 2*size); output = new OutputAnalyzer(pb.start()); - output.shouldContain("Test (reserved=256KB, committed=64KB)"); + output.shouldContain("Test (reserved=" + 8*sizek + "KB, committed=" + 2*sizek + "KB)"); // Committing: . * * * . . . . // Region: * * * * . . . . - // Expected Total: 4 x 32KB = 128KB + // Expected Total: 4 x sizek KB wb.NMTCommitMemory(addr + 1*size, 3*size); output = new OutputAnalyzer(pb.start()); - output.shouldContain("Test (reserved=256KB, committed=128KB)"); + output.shouldContain("Test (reserved=" + 8*sizek + "KB, committed=" + 4*sizek + "KB)"); // Uncommitting: * * * . . . . . // Region: . . . * . . . . - // Expected Total: 1 x 32KB = 32KB + // Expected Total: 1 x sizek KB wb.NMTUncommitMemory(addr + 0*size, 3*size); output = new OutputAnalyzer(pb.start()); - output.shouldContain("Test (reserved=256KB, committed=32KB)"); + output.shouldContain("Test (reserved=" + 8*sizek + "KB, committed=" + 1*sizek + "KB)"); // Committing: . . . * * . . . // Region: . . . * * . . . - // Expected Total: 2 x 32KB = 64KB + // Expected Total: 2 x sizek KB wb.NMTCommitMemory(addr + 3*size, 2*size); System.out.println("Address is " + Long.toHexString(addr + 3*size)); output = new OutputAnalyzer(pb.start()); - output.shouldContain("Test (reserved=256KB, committed=64KB)"); + output.shouldContain("Test (reserved=" + 8*sizek + "KB, committed=" + 2*sizek + "KB)"); // Committing: . . . . * * . . // Region: . . . * * * . . - // Expected Total: 3 x 32KB = 96KB + // Expected Total: 3 x sizek KB wb.NMTCommitMemory(addr + 4*size, 2*size); output = new OutputAnalyzer(pb.start()); - output.shouldContain("Test (reserved=256KB, committed=96KB)"); + output.shouldContain("Test (reserved=" + 8*sizek + "KB, committed=" + 3*sizek + "KB)"); // Committing: . . . . . * * . // Region: . . . * * * * . - // Expected Total: 4 x 32KB = 128KB + // Expected Total: 4 x sizek KB wb.NMTCommitMemory(addr + 5*size, 2*size); output = new OutputAnalyzer(pb.start()); - output.shouldContain("Test (reserved=256KB, committed=128KB)"); + output.shouldContain("Test (reserved=" + 8*sizek + "KB, committed=" + 4*sizek + "KB)"); // Committing: . . . . . . * * // Region: . . . * * * * * - // Expected Total: 5 x 32KB = 160KB + // Expected Total: 5 x sizek KB wb.NMTCommitMemory(addr + 6*size, 2*size); output = new OutputAnalyzer(pb.start()); - output.shouldContain("Test (reserved=256KB, committed=160KB)"); + output.shouldContain("Test (reserved=" + 8*sizek + "KB, committed=" + 5*sizek + "KB)"); // Uncommitting: * * * * * * * * // Region: . . . . . . . . - // Expected Total: 0 x 32KB = 32KB + // Expected Total: 0 x sizek KB wb.NMTUncommitMemory(addr + 0*size, 8*size); output = new OutputAnalyzer(pb.start()); - output.shouldContain("Test (reserved=256KB, committed=0KB)"); + output.shouldContain("Test (reserved=" + 8*sizek + "KB, committed=0KB)"); } } diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/runtime/SharedArchiveFile/DefaultUseWithClient.java --- a/hotspot/test/runtime/SharedArchiveFile/DefaultUseWithClient.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/runtime/SharedArchiveFile/DefaultUseWithClient.java Tue Jul 05 13:50:37 2016 -0700 @@ -27,6 +27,7 @@ * @library /testlibrary * @modules java.base/jdk.internal.misc * java.management + * @ignore 8154204 * @run main DefaultUseWithClient * @bug 8032224 */ diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/runtime/ThreadSignalMask/ThreadSignalMask.java --- a/hotspot/test/runtime/ThreadSignalMask/ThreadSignalMask.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/runtime/ThreadSignalMask/ThreadSignalMask.java Tue Jul 05 13:50:37 2016 -0700 @@ -35,7 +35,7 @@ * @key cte_test * @bug 4345157 * @summary JDK 1.3.0 alters thread signal mask - * @requires (os.simpleArch == "sparcv9") + * @requires (vm.simpleArch == "sparcv9") * @modules java.base/jdk.internal.misc * @library /testlibrary * @compile Prog.java diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/runtime/Unsafe/GetKlassPointerGetJavaMirror.java --- a/hotspot/test/runtime/Unsafe/GetKlassPointerGetJavaMirror.java Thu Jun 30 14:57:30 2016 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * 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 8022853 - * @library /testlibrary - * @modules java.base/jdk.internal.misc - * @build jdk.test.lib.* - * @run main GetKlassPointerGetJavaMirror - */ - -import static jdk.test.lib.Asserts.*; - -import jdk.test.lib.*; -import jdk.internal.misc.Unsafe; - -public class GetKlassPointerGetJavaMirror { - - public static void main(String args[]) throws Exception { - Unsafe unsafe = Utils.getUnsafe(); - Object o = new GetKlassPointerGetJavaMirror(); - final long metaspaceKlass = unsafe.getKlassPointer(o); - Class c = unsafe.getJavaMirror(metaspaceKlass); - assertEquals(o.getClass(), c); - } - -} diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/runtime/classFileParserBug/TestBadClassName.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/runtime/classFileParserBug/TestBadClassName.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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 8158297 + * @summary Constant pool utf8 entry for class name cannot have empty qualified name '//' + * @compile p1/BadInterface1.jcod + * @compile p1/BadInterface2.jcod + * @compile UseBadInterface1.jcod + * @compile UseBadInterface2.jcod + * @run main/othervm -Xverify:all TestBadClassName + */ + +public class TestBadClassName { + public static void main(String args[]) throws Throwable { + + System.out.println("Regression test for bug 8042660"); + + // Test class name with p1//BadInterface2 + try { + Class newClass = Class.forName("UseBadInterface1"); + throw new RuntimeException("Expected ClassFormatError exception not thrown"); + } catch (java.lang.ClassFormatError e) { + System.out.println("Test UseBadInterface1 passed test case with illegal class name"); + } + + // Test class name with p1/BadInterface2/ + try { + Class newClass = Class.forName("UseBadInterface2"); + throw new RuntimeException("Expected ClassFormatError exception not thrown"); + } catch (java.lang.ClassFormatError e) { + System.out.println("Test UseBadInterface1 passed test case with illegal class name"); + } + } +} diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/runtime/classFileParserBug/UseBadInterface1.jcod --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/runtime/classFileParserBug/UseBadInterface1.jcod Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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. + * + */ + +// jcod file for UseBadInterface1.java +// class UseBadInterface1 implements p1.BadInterface1 { +// int i; +// UseBadInterface1() {} +// public static void main(java.lang.String[] unused) { } +// } + +class UseBadInterface1 { + 0xCAFEBABE; + 0; // minor version + 53; // version + [] { // Constant Pool + ; // first element is empty + Method #3 #10; // #1 + Utf8 "UseBadInterface1.java"; // #2 + class #4; // #3 + Utf8 "java/lang/Object"; // #4 + class #8; // #5 + Utf8 "([Ljava/lang/String;)V"; // #6 + class #11; // #7 + Utf8 "UseBadInterface1"; // #8 + Utf8 "main"; // #9 + NameAndType #17 #13; // #10 + Utf8 "p1//BadInterface1"; // #11 + Utf8 "SourceFile"; // #12 + Utf8 "()V"; // #13 + Utf8 "I"; // #14 + Utf8 "Code"; // #15 + Utf8 "i"; // #16 + Utf8 ""; // #17 + } // Constant Pool + + 0x0020; // access + #5;// this_cpx + #3;// super_cpx + + [] { // Interfaces + #7; + } // Interfaces + + [] { // fields + { // Member + 0x0000; // access + #16; // name_cpx + #14; // sig_cpx + [] { // Attributes + } // Attributes + } // Member + } // fields + + [] { // methods + { // Member + 0x0000; // access + #17; // name_cpx + #13; // sig_cpx + [] { // Attributes + Attr(#15) { // Code + 1; // max_stack + 1; // max_locals + Bytes[]{ + 0x2AB70001B1; + }; + [] { // Traps + } // end Traps + [] { // Attributes + } // Attributes + } // end Code + } // Attributes + } // Member + ; + { // Member + 0x0009; // access + #9; // name_cpx + #6; // sig_cpx + [] { // Attributes + Attr(#15) { // Code + 0; // max_stack + 1; // max_locals + Bytes[]{ + 0xB1; + }; + [] { // Traps + } // end Traps + [] { // Attributes + } // Attributes + } // end Code + } // Attributes + } // Member + } // methods + + [] { // Attributes + Attr(#12) { // SourceFile + #2; + } // end SourceFile + } // Attributes +} // end class UseBadInterface1 diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/runtime/classFileParserBug/UseBadInterface2.jcod --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/runtime/classFileParserBug/UseBadInterface2.jcod Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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. + * + */ + +// jcod file for UseBadInterface2.java +// class UseBadInterface2 implements p1.BadInterface2 { +// int i; +// UseBadInterface2() {} +// public static void main(java.lang.String[] unused) { } +// } + +class UseBadInterface2 { + 0xCAFEBABE; + 0; // minor version + 53; // version + [] { // Constant Pool + ; // first element is empty + Method #3 #10; // #1 + Utf8 "UseBadInterface2.java"; // #2 + class #4; // #3 + Utf8 "java/lang/Object"; // #4 + class #8; // #5 + Utf8 "([Ljava/lang/String;)V"; // #6 + class #11; // #7 + Utf8 "UseBadInterface2"; // #8 + Utf8 "main"; // #9 + NameAndType #17 #13; // #10 + Utf8 "p1/BadInterface2/"; // #11 + Utf8 "SourceFile"; // #12 + Utf8 "()V"; // #13 + Utf8 "I"; // #14 + Utf8 "Code"; // #15 + Utf8 "i"; // #16 + Utf8 ""; // #17 + } // Constant Pool + + 0x0020; // access + #5;// this_cpx + #3;// super_cpx + + [] { // Interfaces + #7; + } // Interfaces + + [] { // fields + { // Member + 0x0000; // access + #16; // name_cpx + #14; // sig_cpx + [] { // Attributes + } // Attributes + } // Member + } // fields + + [] { // methods + { // Member + 0x0000; // access + #17; // name_cpx + #13; // sig_cpx + [] { // Attributes + Attr(#15) { // Code + 1; // max_stack + 1; // max_locals + Bytes[]{ + 0x2AB70001B1; + }; + [] { // Traps + } // end Traps + [] { // Attributes + } // Attributes + } // end Code + } // Attributes + } // Member + ; + { // Member + 0x0009; // access + #9; // name_cpx + #6; // sig_cpx + [] { // Attributes + Attr(#15) { // Code + 0; // max_stack + 1; // max_locals + Bytes[]{ + 0xB1; + }; + [] { // Traps + } // end Traps + [] { // Attributes + } // Attributes + } // end Code + } // Attributes + } // Member + } // methods + + [] { // Attributes + Attr(#12) { // SourceFile + #2; + } // end SourceFile + } // Attributes +} // end class UseBadInterface2 diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/runtime/classFileParserBug/p1/BadInterface1.jcod --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/runtime/classFileParserBug/p1/BadInterface1.jcod Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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. + * + */ + +// Interface that should get a ClassFormatException for the "//" in the name + +// package p1; +// public interface cls1 {} + +class p1//BadInterface1 { + 0xCAFEBABE; + 0; // minor version + 53; // version + [] { // Constant Pool + ; // first element is empty + class #5; // #1 + class #6; // #2 + Utf8 "SourceFile"; // #3 + Utf8 "BadInterface1.java"; // #4 + Utf8 "p1//BadInterface1"; // #5 + Utf8 "java/lang/Object"; // #6 + } // Constant Pool + + 0x0601; // access + #1;// this_cpx + #2;// super_cpx + + [] { // Interfaces + } // Interfaces + + [] { // fields + } // fields + + [] { // methods + } // methods + + [] { // Attributes + Attr(#3) { // SourceFile + #4; + } // end SourceFile + } // Attributes +} // end class p1//BadInterface1 diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/runtime/classFileParserBug/p1/BadInterface2.jcod --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/runtime/classFileParserBug/p1/BadInterface2.jcod Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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. + * + */ + +// Interface that should get a ClassFormatException for the trailing "/" in the name + +// package p1; +// public interface cls1 {} + +class p1/BadInterface2/ { + 0xCAFEBABE; + 0; // minor version + 53; // version + [] { // Constant Pool + ; // first element is empty + class #5; // #1 + class #6; // #2 + Utf8 "SourceFile"; // #3 + Utf8 "BadInterface2.java"; // #4 + Utf8 "p1/BadInterface2/"; // #5 + Utf8 "java/lang/Object"; // #6 + } // Constant Pool + + 0x0601; // access + #1;// this_cpx + #2;// super_cpx + + [] { // Interfaces + } // Interfaces + + [] { // fields + } // fields + + [] { // methods + } // methods + + [] { // Attributes + Attr(#3) { // SourceFile + #4; + } // end SourceFile + } // Attributes +} // end class p1/BadInterface2 diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/runtime/logging/StartupTimeTest.java --- a/hotspot/test/runtime/logging/StartupTimeTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/runtime/logging/StartupTimeTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -50,6 +50,18 @@ output.shouldHaveExitValue(0); } + static void analyzeModulesOutputOn(ProcessBuilder pb) throws Exception { + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + output.shouldMatch("(Phase2 initialization, [0-9]+.[0-9]+ secs)"); + output.shouldHaveExitValue(0); + } + + static void analyzeModulesOutputOff(ProcessBuilder pb) throws Exception { + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + output.shouldNotContain("[modules,startuptime]"); + output.shouldHaveExitValue(0); + } + public static void main(String[] args) throws Exception { ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-Xlog:startuptime", InnerClass.class.getName()); @@ -58,6 +70,14 @@ pb = ProcessTools.createJavaProcessBuilder("-Xlog:startuptime=off", InnerClass.class.getName()); analyzeOutputOff(pb); + + pb = ProcessTools.createJavaProcessBuilder("-Xlog:startuptime+modules", + InnerClass.class.getName()); + analyzeModulesOutputOn(pb); + + pb = ProcessTools.createJavaProcessBuilder("-Xlog:startuptime+modules=off", + InnerClass.class.getName()); + analyzeModulesOutputOff(pb); } public static class InnerClass { diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/runtime/memory/ReserveMemory.java --- a/hotspot/test/runtime/memory/ReserveMemory.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/runtime/memory/ReserveMemory.java Tue Jul 05 13:50:37 2016 -0700 @@ -21,10 +21,12 @@ * questions. */ +// Aix commits on touch, so this test won't work. /* * @test * @key regression * @bug 8012015 + * @requires !(os.family == "aix") * @summary Make sure reserved (but uncommitted) memory is not accessible * @library /testlibrary /test/lib * @modules java.base/jdk.internal.misc @@ -36,18 +38,11 @@ */ import jdk.test.lib.*; +import jdk.test.lib.Platform; import sun.hotspot.WhiteBox; public class ReserveMemory { - private static boolean isWindows() { - return System.getProperty("os.name").toLowerCase().startsWith("win"); - } - - private static boolean isOsx() { - return System.getProperty("os.name").toLowerCase().startsWith("mac"); - } - public static void main(String args[]) throws Exception { if (args.length > 0) { WhiteBox.getWhiteBox().readReservedMemory(); @@ -66,9 +61,9 @@ "test"); OutputAnalyzer output = new OutputAnalyzer(pb.start()); - if (isWindows()) { + if (Platform.isWindows()) { output.shouldContain("EXCEPTION_ACCESS_VIOLATION"); - } else if (isOsx()) { + } else if (Platform.isOSX()) { output.shouldContain("SIGBUS"); } else { output.shouldContain("SIGSEGV"); diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/runtime/modules/CompilerUtils.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/runtime/modules/CompilerUtils.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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 javax.tools.JavaCompiler; +import javax.tools.StandardJavaFileManager; +import javax.tools.StandardLocation; +import javax.tools.ToolProvider; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * This class consists exclusively of static utility methods for invoking the + * java compiler. + * + * This class will eventually move to jdk.testlibrary. + */ + +public final class CompilerUtils { + private CompilerUtils() { } + + /** + * Compile all the java sources in {@code /**} to + * {@code /**}. The destination directory will be created if + * it doesn't exist. + * + * All warnings/errors emitted by the compiler are output to System.out/err. + * + * @return true if the compilation is successful + * + * @throws IOException if there is an I/O error scanning the source tree or + * creating the destination directory + */ + public static boolean compile(Path source, Path destination, String ... options) + throws IOException + { + JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); + StandardJavaFileManager jfm = compiler.getStandardFileManager(null, null, null); + + List sources + = Files.find(source, Integer.MAX_VALUE, + (file, attrs) -> (file.toString().endsWith(".java"))) + .collect(Collectors.toList()); + + Files.createDirectories(destination); + jfm.setLocationFromPaths(StandardLocation.CLASS_OUTPUT, + Arrays.asList(destination)); + + List opts = Arrays.asList(options); + JavaCompiler.CompilationTask task + = compiler.getTask(null, jfm, null, opts, null, + jfm.getJavaFileObjectsFromPaths(sources)); + + return task.call(); + } +} diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/runtime/modules/ModuleStress/ExportModuleStressTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/runtime/modules/ModuleStress/ExportModuleStressTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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 8156871 + * @summary package in the boot layer is repeatedly exported to unique module created in layers on top of the boot layer + * @modules java.base/jdk.internal.misc + * @library /testlibrary /test/lib + * @compile ../CompilerUtils.java + * @build ExportModuleStressTest + * @run main/othervm ExportModuleStressTest + */ + +import java.nio.file.Path; +import java.nio.file.Paths; +import jdk.test.lib.*; + +public class ExportModuleStressTest { + + private static final String TEST_SRC = System.getProperty("test.src"); + private static final String TEST_CLASSES = System.getProperty("test.classes"); + + private static final Path SRC_DIR = Paths.get(TEST_SRC, "src"); + private static final Path MODS_DIR = Paths.get(TEST_CLASSES, "mods"); + + /** + * Compiles all module definitions used by the test + */ + public static void main(String[] args) throws Exception { + + boolean compiled; + // Compile module jdk.test declaration + compiled = CompilerUtils.compile( + SRC_DIR.resolve("jdk.test"), + MODS_DIR.resolve("jdk.test")); + if (!compiled) { + throw new RuntimeException("Test failed to compile module jdk.test"); + } + + // Compile module jdk.translet declaration + compiled = CompilerUtils.compile( + SRC_DIR.resolve("jdk.translet"), + MODS_DIR.resolve("jdk.translet"), + "-XaddExports:jdk.test/test=jdk.translet", + "-mp", MODS_DIR.toString()); + if (!compiled) { + throw new RuntimeException("Test failed to compile module jdk.translet"); + } + + // Sanity check that the test, jdk.test/test/Main.java + // runs without error. + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( + "-mp", MODS_DIR.toString(), + "-m", "jdk.test/test.Main"); + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + output.shouldContain("failed: 0") + .shouldHaveExitValue(0); + } +} diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/runtime/modules/ModuleStress/src/jdk.test/module-info.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/runtime/modules/ModuleStress/src/jdk.test/module-info.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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. + */ + +module jdk.test { +} diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/runtime/modules/ModuleStress/src/jdk.test/test/Main.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/runtime/modules/ModuleStress/src/jdk.test/test/Main.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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 test; + +import java.lang.module.Configuration; +import java.lang.module.ModuleFinder; +import java.lang.reflect.Layer; +import java.lang.reflect.Method; +import java.lang.reflect.Module; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.*; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; + +public class Main { + + private static final Path MODS_DIR = Paths.get(System.getProperty("jdk.module.path")); + static final String MODULE_NAME = "jdk.translet"; + + public static void main(String[] args) throws Exception { + + ModuleFinder finder = ModuleFinder.of(MODS_DIR); + Layer layerBoot = Layer.boot(); + + Configuration cf = layerBoot + .configuration() + .resolveRequires(ModuleFinder.of(), finder, Set.of(MODULE_NAME)); + + Module testModule = Main.class.getModule(); + ClassLoader scl = ClassLoader.getSystemClassLoader(); + + // Create an unique module/class loader in a layer above the boot layer. + // Export this module to the jdk.test/test package. + Callable task = new Callable() { + @Override + public Void call() throws Exception { + Layer layer = Layer.boot().defineModulesWithOneLoader(cf, scl); + Module transletModule = layer.findModule(MODULE_NAME).get(); + testModule.addExports("test", transletModule); + Class c = layer.findLoader(MODULE_NAME).loadClass("translet.Main"); + Method method = c.getDeclaredMethod("go"); + method.invoke(null); + return null; + } + }; + + List> results = new ArrayList<>(); + + // Repeatedly create the layer above stressing the exportation of + // package jdk.test/test to several different modules. + ExecutorService pool = Executors.newFixedThreadPool(Math.min(100, Runtime.getRuntime().availableProcessors()*10)); + try { + for (int i = 0; i < 10000; i++) { + results.add(pool.submit(task)); + } + } finally { + pool.shutdown(); + } + + int passed = 0; + int failed = 0; + + // The failed state should be 0, the created modules in layers above the + // boot layer should be allowed access to the contents of the jdk.test/test + // package since that package was exported to the transletModule above. + for (Future result : results) { + try { + result.get(); + passed++; + } catch (Throwable x) { + x.printStackTrace(); + failed++; + } + } + + System.out.println("passed: " + passed); + System.out.println("failed: " + failed); + } + + public static void callback() { } +} diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/runtime/modules/ModuleStress/src/jdk.translet/module-info.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/runtime/modules/ModuleStress/src/jdk.translet/module-info.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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. + */ + +module jdk.translet { + requires jdk.test; + exports translet; +} diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/runtime/modules/ModuleStress/src/jdk.translet/translet/Main.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/runtime/modules/ModuleStress/src/jdk.translet/translet/Main.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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 translet; + +public class Main { + public static void go() { + test.Main.callback(); + } +} diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/runtime/modules/Xpatch/XpatchJavaBase.java --- a/hotspot/test/runtime/modules/Xpatch/XpatchJavaBase.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/runtime/modules/Xpatch/XpatchJavaBase.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,6 +25,7 @@ * @test * @bug 8130399 * @summary Make sure -Xpatch works for java.base. + * @modules java.base/jdk.internal.misc * @library /testlibrary * @compile XpatchMain.java * @run main XpatchJavaBase diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/serviceability/dcmd/framework/HelpTest.java --- a/hotspot/test/serviceability/dcmd/framework/HelpTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/serviceability/dcmd/framework/HelpTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -37,7 +37,6 @@ * java.compiler * java.management * jdk.jvmstat/sun.jvmstat.monitor - * @ignore 8072440 * @build jdk.test.lib.* * @build jdk.test.lib.dcmd.* * @run testng/othervm -XX:+UsePerfData HelpTest diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/serviceability/dcmd/framework/InvalidCommandTest.java --- a/hotspot/test/serviceability/dcmd/framework/InvalidCommandTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/serviceability/dcmd/framework/InvalidCommandTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -37,7 +37,6 @@ * java.compiler * java.management * jdk.jvmstat/sun.jvmstat.monitor - * @ignore 8072440 * @build jdk.test.lib.* * @build jdk.test.lib.dcmd.* * @run testng/othervm -XX:+UsePerfData InvalidCommandTest diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/serviceability/dcmd/framework/VMVersionTest.java --- a/hotspot/test/serviceability/dcmd/framework/VMVersionTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/serviceability/dcmd/framework/VMVersionTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -38,7 +38,6 @@ * java.compiler * java.management * jdk.jvmstat/sun.jvmstat.monitor - * @ignore 8072440 * @build jdk.test.lib.* * @build jdk.test.lib.dcmd.* * @run testng/othervm -XX:+UsePerfData VMVersionTest diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/serviceability/jvmti/GetObjectSizeClass.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/serviceability/jvmti/GetObjectSizeClass.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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.PrintWriter; +import jdk.test.lib.*; + +/* + * @test + * @bug 8075030 + * @summary JvmtiEnv::GetObjectSize reports incorrect java.lang.Class instance size + * @library /testlibrary + * @modules java.base/jdk.internal.misc + * java.compiler + * java.instrument + * java.management + * jdk.jvmstat/sun.jvmstat.monitor + * @build ClassFileInstaller jdk.test.lib.* GetObjectSizeClassAgent + * @run main ClassFileInstaller GetObjectSizeClassAgent + * @run main GetObjectSizeClass + */ +public class GetObjectSizeClass { + public static void main(String[] args) throws Exception { + PrintWriter pw = new PrintWriter("MANIFEST.MF"); + pw.println("Premain-Class: GetObjectSizeClassAgent"); + pw.close(); + + ProcessBuilder pb = new ProcessBuilder(); + pb.command(new String[] { JDKToolFinder.getJDKTool("jar"), "cmf", "MANIFEST.MF", "agent.jar", "GetObjectSizeClassAgent.class"}); + pb.start().waitFor(); + + ProcessBuilder pt = ProcessTools.createJavaProcessBuilder(true, "-javaagent:agent.jar", "GetObjectSizeClassAgent"); + OutputAnalyzer output = new OutputAnalyzer(pt.start()); + + output.stdoutShouldContain("GetObjectSizeClass passed"); + } +} diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/serviceability/jvmti/GetObjectSizeClassAgent.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/serviceability/jvmti/GetObjectSizeClassAgent.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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.*; + +public class GetObjectSizeClassAgent { + + static Instrumentation instrumentation; + + public static void premain(String agentArgs, Instrumentation instrumentation) { + GetObjectSizeClassAgent.instrumentation = instrumentation; + } + + public static void main(String[] args) throws Exception { + long sizeA = instrumentation.getObjectSize(A.class); + long sizeB = instrumentation.getObjectSize(B.class); + + if (sizeA != sizeB) { + throw new RuntimeException("java.lang.Class sizes disagree: " + sizeA + " vs. " + sizeB); + } + + System.out.println("GetObjectSizeClass passed"); + } + + static class A { + } + + static class B { + void m() {} + } + +} diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/serviceability/tmtools/jstat/GcCapacityTest.java --- a/hotspot/test/serviceability/tmtools/jstat/GcCapacityTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/serviceability/tmtools/jstat/GcCapacityTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -33,7 +33,6 @@ * @requires vm.opt.ExplicitGCInvokesConcurrent != true * @build common.* * @build utils.* - * @ignore 8149778 * @run main/othervm -XX:+UsePerfData -Xmx128M GcCapacityTest */ public class GcCapacityTest { diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/serviceability/tmtools/jstat/utils/GcProvokerImpl.java --- a/hotspot/test/serviceability/tmtools/jstat/utils/GcProvokerImpl.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/serviceability/tmtools/jstat/utils/GcProvokerImpl.java Tue Jul 05 13:50:37 2016 -0700 @@ -42,8 +42,9 @@ // uses fixed small objects to avoid Humongous objects allocation in G1 int memoryChunk = 2048; List list = new ArrayList<>(); - float used = 0; - while (used < targetUsage * maxMemory) { + long used = 0; + long target = (long) (maxMemory * targetUsage); + while (used < target) { try { list.add(new byte[memoryChunk]); used += memoryChunk; diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/testlibrary/jdk/test/lib/FileInstaller.java --- a/hotspot/test/testlibrary/jdk/test/lib/FileInstaller.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/testlibrary/jdk/test/lib/FileInstaller.java Tue Jul 05 13:50:37 2016 -0700 @@ -45,8 +45,8 @@ if (args.length != 2) { throw new IllegalArgumentException("Unexpected number of arguments for file copy"); } - Path src = Paths.get(Utils.TEST_SRC, args[0]); - Path dst = Paths.get(args[1]); + Path src = Paths.get(Utils.TEST_SRC, args[0]).toAbsolutePath(); + Path dst = Paths.get(args[1]).toAbsolutePath(); if (src.toFile().exists()) { if (src.toFile().isDirectory()) { Files.walkFileTree(src, new CopyFileVisitor(src, dst)); diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/testlibrary/jittester/Makefile --- a/hotspot/test/testlibrary/jittester/Makefile Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/testlibrary/jittester/Makefile Tue Jul 05 13:50:37 2016 -0700 @@ -44,6 +44,10 @@ APPLICATION_ARGS += --seed $(SEED) endif +ifneq "x$(EXTRA_SRC_DIR)" "x" + EXTRA_SRC_FILES := $(shell find $(EXTRA_SRC_DIR) -name '*.java') +endif + JAVA = $(JDK_HOME)/bin/java JAVAC = $(JDK_HOME)/bin/javac JAR = $(JDK_HOME)/bin/jar @@ -99,6 +103,7 @@ filelist: $(SRC_FILES) @rm -f $@ @echo $(SRC_FILES) > $@ + @echo $(EXTRA_SRC_FILES) >> $@ INIT: $(DIST_DIR) $(shell if [ ! -d $(CLASSES_DIR) ]; then mkdir -p $(CLASSES_DIR); fi) diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/testlibrary/jittester/conf/default.properties --- a/hotspot/test/testlibrary/jittester/conf/default.properties Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/testlibrary/jittester/conf/default.properties Tue Jul 05 13:50:37 2016 -0700 @@ -9,3 +9,5 @@ print-complexity=true print-hierarchy=true disable-static=true +generatorsFactories=jdk.test.lib.jittester.TestGeneratorsFactory +generators=JavaCode,ByteCode diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/Automatic.java --- a/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/Automatic.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/Automatic.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,50 +25,19 @@ import jdk.test.lib.Pair; import jdk.test.lib.jittester.factories.IRNodeBuilder; -import jdk.test.lib.jittester.jtreg.Printer; import jdk.test.lib.jittester.types.TypeKlass; import jdk.test.lib.jittester.utils.FixedTrees; import jdk.test.lib.jittester.utils.OptionResolver; import jdk.test.lib.jittester.utils.OptionResolver.Option; import jdk.test.lib.jittester.utils.PseudoRandom; - -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; import java.time.LocalTime; +import java.util.ArrayList; +import java.util.List; import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; +import java.util.function.Function; public class Automatic { - private static final int MINUTES_TO_WAIT = Integer.getInteger("jdk.test.lib.jittester", 3); - - static String getJtregHeader(String mainClass, boolean addCompile) { - String synopsis = "seed = '" + ProductionParams.seed.value() + "'" - + ", specificSeed = '" + PseudoRandom.getCurrentSeed() + "'"; - StringBuilder header = new StringBuilder(); - header.append("/*\n * @test\n * @summary ") - .append(synopsis) - .append(" \n* @library / ../\n"); - if (addCompile) { - header.append("\n * @compile ") - .append(mainClass) - .append(".java\n"); - } - header.append(" * @run build jdk.test.lib.jittester.jtreg.JitTesterDriver " - + "jdk.test.lib.jittester.jtreg.Printer\n") - .append(" * @run driver jdk.test.lib.jittester.jtreg.JitTesterDriver ") - .append(mainClass) - .append("\n */\n\n"); - if (ProductionParams.printHierarchy.value()) { - header.append("/*\n") - .append(Automatic.printHierarchy()) - .append("*/\n"); - } - return header.toString(); - } + public static final int MINUTES_TO_WAIT = Integer.getInteger("jdk.test.lib.jittester", 3); private static Pair generateIRTree(String name) { SymbolTable.removeAll(); @@ -120,123 +89,48 @@ } } + private static List getTestGenerators() { + List result = new ArrayList<>(); + Class factoryClass; + Function> factory; + String[] factoryClassNames = ProductionParams.generatorsFactories.value().split(","); + String[] generatorNames = ProductionParams.generators.value().split(","); + for (String factoryClassName : factoryClassNames) { + try { + factoryClass = Class.forName(factoryClassName); + factory = (Function>) factoryClass.newInstance(); + } catch (ReflectiveOperationException roe) { + throw new Error("Can't instantiate generators factory", roe); + } + result.addAll(factory.apply(generatorNames)); + } + return result; + } + public static void main(String[] args) { initializeTestGenerator(args); int counter = 0; - try { - Path testbaseDir = Paths.get(ProductionParams.testbaseDir.value()); - System.out.printf(" %13s | %8s | %8s | %8s |%n", "start time", "count", "generat", - "running"); - System.out.printf(" %13s | %8s | %8s | %8s |%n", "---", "---", "---","---"); - String path = getJavaPath(); - String javacPath = Paths.get(path, "javac").toString(); - String javaPath = Paths.get(path, "java").toString(); - - // compile Printer class first. A common one for all tests - ensureExisting(testbaseDir); - ProcessBuilder pbPrinter = new ProcessBuilder(javacPath, - Paths.get(testbaseDir.toString(), "jdk", "test", "lib", "jittester", - "jtreg", "Printer.java").toString()); - runProcess(pbPrinter, testbaseDir.resolve("Printer").toString()); - do { - double start = System.currentTimeMillis(); - System.out.print("[" + LocalTime.now() + "] |"); - String name = "Test_" + counter; - Pair irTree = generateIRTree(name); - System.out.printf(" %8d |", counter); - double generationTime = System.currentTimeMillis() - start; - System.out.printf(" %8.0f |", generationTime); - if (!ProductionParams.disableJavacodeGeneration.value()) { - JavaCodeGenerator generator = new JavaCodeGenerator(); - String javaFile = generator.apply(irTree.first, irTree.second); - ProcessBuilder pb = new ProcessBuilder(javacPath, "-cp", testbaseDir.toString() - + ":" + generator.getTestbase().toString(), javaFile); - runProcess(pb, generator.getTestbase().resolve(name).toString()); - start = System.currentTimeMillis(); - - // Run compiled class files - pb = new ProcessBuilder(javaPath, "-Xint", "-cp", testbaseDir.toString() - + ":" + generator.getTestbase().toString(), name); - String goldFile = name + ".gold"; - runProcess(pb, generator.getTestbase().resolve(goldFile).toString()); - } - - if (!ProductionParams.disableBytecodeGeneration.value()) { - ByteCodeGenerator generator = new ByteCodeGenerator(); - generator.apply(irTree.first, irTree.second); - generator.writeJtregBytecodeRunner(name); - // Run generated bytecode - ProcessBuilder pb = new ProcessBuilder(javaPath, "-Xint", "-Xverify", "-cp", - testbaseDir.toString() + ":" + generator.getTestbase().toString(), - name); - String goldFile = name + ".gold"; - start = System.currentTimeMillis(); - runProcess(pb, generator.getTestbase().resolve(goldFile).toString()); - } - - double runningTime = System.currentTimeMillis() - start; - System.out.printf(" %8.0f |%n", runningTime); - if (runningTime < TimeUnit.MINUTES.toMillis(MINUTES_TO_WAIT)) { - ++counter; - } - } while (counter < ProductionParams.numberOfTests.value()); - } catch (IOException | InterruptedException ex) { - ex.printStackTrace(); - } - } - - private static String getJavaPath() { - String[] env = { "JDK_HOME", "JAVA_HOME", "BOOTDIR" }; - for (String name : env) { - String path = System.getenv(name); - if (path != null) { - return path + "/bin/"; + System.out.printf(" %13s | %8s | %8s | %8s |%n", "start time", "count", "generat", + "running"); + System.out.printf(" %13s | %8s | %8s | %8s |%n", "---", "---", "---", "---"); + List generators = getTestGenerators(); + do { + double start = System.currentTimeMillis(); + System.out.print("[" + LocalTime.now() + "] |"); + String name = "Test_" + counter; + Pair irTree = generateIRTree(name); + System.out.printf(" %8d |", counter); + double generationTime = System.currentTimeMillis() - start; + System.out.printf(" %8.0f |", generationTime); + start = System.currentTimeMillis(); + for (TestsGenerator generator : generators) { + generator.accept(irTree.first, irTree.second); } - } - return ""; - } - - private static int runProcess(ProcessBuilder pb, String name) - throws IOException, InterruptedException { - pb.redirectError(new File(name + ".err")); - pb.redirectOutput(new File(name + ".out")); - Process process = pb.start(); - if (process.waitFor(MINUTES_TO_WAIT, TimeUnit.MINUTES)) { - try (FileWriter file = new FileWriter(name + ".exit")) { - file.write(Integer.toString(process.exitValue())); + double runningTime = System.currentTimeMillis() - start; + System.out.printf(" %8.0f |%n", runningTime); + if (runningTime < TimeUnit.MINUTES.toMillis(MINUTES_TO_WAIT)) { + ++counter; } - return process.exitValue(); - } else { - process.destroyForcibly(); - return -1; - } - } - - private static String printHierarchy() { - return TypeList.getAll().stream() - .filter(t -> t instanceof TypeKlass) - .map(t -> typeDescription((TypeKlass) t)) - .collect(Collectors.joining("\n","CLASS HIERARCHY:\n", "\n")); - } - - private static String typeDescription(TypeKlass type) { - StringBuilder result = new StringBuilder(); - String parents = type.getParentsNames().stream().collect(Collectors.joining(",")); - result.append(type.isAbstract() ? "abstract " : "") - .append(type.isFinal() ? "final " : "") - .append(type.isInterface() ? "interface " : "class ") - .append(type.getName()) - .append(parents.isEmpty() ? "" : ": " + parents); - return result.toString(); - } - - static void ensureExisting(Path path) { - if (Files.notExists(path)) { - try { - Files.createDirectories(path); - } catch (IOException ex) { - ex.printStackTrace(); - } - } + } while (counter < ProductionParams.numberOfTests.value()); } } diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/ByteCodeGenerator.java --- a/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/ByteCodeGenerator.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/ByteCodeGenerator.java Tue Jul 05 13:50:37 2016 -0700 @@ -23,54 +23,60 @@ package jdk.test.lib.jittester; -import jdk.test.lib.jittester.visitors.ByteCodeVisitor; - import java.io.FileOutputStream; -import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; import java.nio.file.StandardOpenOption; -import java.util.function.BiFunction; +import java.util.function.Function; +import jdk.test.lib.jittester.visitors.ByteCodeVisitor; /** - * Generates class files from bytecode + * Generates class files from IRTree */ -class ByteCodeGenerator implements BiFunction { - private final Path testbase = Paths.get(ProductionParams.testbaseDir.value(), - "bytecode_tests"); +class ByteCodeGenerator extends TestsGenerator { + private static final String DEFAULT_SUFFIX = "bytecode_tests"; - public void writeJtregBytecodeRunner(String name) { - try (FileWriter file = new FileWriter(testbase.resolve(name + ".java").toFile())) { - file.write(Automatic.getJtregHeader(name, false)); - } catch (IOException e) { - e.printStackTrace(); - } + ByteCodeGenerator() { + super(DEFAULT_SUFFIX); + } + + ByteCodeGenerator(String suffix, Function preRunActions, String jtDriverOptions) { + super(suffix, preRunActions, jtDriverOptions); } - public String apply(IRNode mainClass, IRNode privateClasses) { - Automatic.ensureExisting(testbase); + @Override + public void accept(IRNode mainClass, IRNode privateClasses) { + generateClassFiles(mainClass, privateClasses); + generateSeparateJtregHeader(mainClass); + compilePrinter(); + generateGoldenOut(mainClass.getName()); + } + + private void generateSeparateJtregHeader(IRNode mainClass) { + String mainClassName = mainClass.getName(); + writeFile(generatorDir, mainClassName + ".java", getJtregHeader(mainClassName)); + } + + private void generateClassFiles(IRNode mainClass, IRNode privateClasses) { + String mainClassName = mainClass.getName(); + ensureExisting(generatorDir); try { ByteCodeVisitor vis = new ByteCodeVisitor(); if (privateClasses != null) { privateClasses.accept(vis); } mainClass.accept(vis); - - Path mainClassPath = testbase.resolve(mainClass.getName() + ".class"); - writeToClassFile(mainClassPath, vis.getByteCode(mainClass.getName())); + writeFile(mainClassName + ".class", vis.getByteCode(mainClassName)); if (privateClasses != null) { privateClasses.getChildren().forEach(c -> { String name = c.getName(); - Path classPath = testbase.resolve(name + ".class"); - writeToClassFile(classPath, vis.getByteCode(name)); + writeFile(name + ".class", vis.getByteCode(name)); }); } - return mainClassPath.toString(); } catch (Throwable t) { - Path errFile = testbase.resolve(mainClass.getName() + ".err"); + Path errFile = generatorDir.resolve(mainClassName + ".err"); try (PrintWriter pw = new PrintWriter(Files.newOutputStream(errFile, StandardOpenOption.CREATE_NEW))) { t.printStackTrace(pw); @@ -78,16 +84,11 @@ t.printStackTrace(); throw new Error("can't write error to error file " + errFile, e); } - return null; } } - public Path getTestbase() { - return testbase; - } - - private void writeToClassFile(Path path, byte[] bytecode) { - try (FileOutputStream file = new FileOutputStream(path.toString())) { + private void writeFile(String fileName, byte[] bytecode) { + try (FileOutputStream file = new FileOutputStream(generatorDir.resolve(fileName).toFile())) { file.write(bytecode); } catch (IOException ex) { ex.printStackTrace(); diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/JavaCodeGenerator.java --- a/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/JavaCodeGenerator.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/JavaCodeGenerator.java Tue Jul 05 13:50:37 2016 -0700 @@ -23,48 +23,59 @@ package jdk.test.lib.jittester; -import jdk.test.lib.jittester.visitors.JavaCodeVisitor; - -import java.io.FileWriter; +import java.io.File; import java.io.IOException; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.function.BiFunction; +import java.util.function.Function; +import jdk.test.lib.jittester.visitors.JavaCodeVisitor; /** - * Generates class files from java source code + * Generates java source code from IRTree */ -class JavaCodeGenerator implements BiFunction { - private final Path testbase = Paths.get(ProductionParams.testbaseDir.value(), "java_tests"); +public class JavaCodeGenerator extends TestsGenerator { + private static final String DEFAULT_SUFFIX = "java_tests"; + + JavaCodeGenerator() { + this(DEFAULT_SUFFIX, JavaCodeGenerator::generatePrerunAction, ""); + } + + JavaCodeGenerator(String prefix, Function preRunActions, String jtDriverOptions) { + super(prefix, preRunActions, jtDriverOptions); + } - private String generateJavaCode(IRNode mainClass, IRNode privateClasses) { + @Override + public void accept(IRNode mainClass, IRNode privateClasses) { + String mainClassName = mainClass.getName(); + generateSources(mainClass, privateClasses); + compilePrinter(); + compileJavaFile(mainClassName); + generateGoldenOut(mainClassName); + } + + private void generateSources(IRNode mainClass, IRNode privateClasses) { + String mainClassName = mainClass.getName(); StringBuilder code = new StringBuilder(); JavaCodeVisitor vis = new JavaCodeVisitor(); - - code.append(Automatic.getJtregHeader(mainClass.getName(), true)); + code.append(getJtregHeader(mainClassName)); if (privateClasses != null) { code.append(privateClasses.accept(vis)); } code.append(mainClass.accept(vis)); - - return code.toString(); - } - - public Path getTestbase() { - return testbase; + ensureExisting(generatorDir); + writeFile(generatorDir, mainClassName + ".java", code.toString()); } - @Override - public String apply(IRNode mainClass, IRNode privateClasses) { - String code = generateJavaCode(mainClass, privateClasses); - Automatic.ensureExisting(testbase); - Path fileName = testbase.resolve(mainClass.getName() + ".java"); - try (FileWriter file = new FileWriter(fileName.toFile())) { - file.write(code); - return fileName.toString(); - } catch (IOException ex) { - ex.printStackTrace(); + private void compileJavaFile(String mainClassName) { + String classPath = getRoot() + File.pathSeparator + generatorDir; + ProcessBuilder pb = new ProcessBuilder(JAVAC, "-cp", classPath, + generatorDir.resolve(mainClassName + ".java").toString()); + try { + runProcess(pb, generatorDir.resolve(mainClassName).toString()); + } catch (IOException | InterruptedException e) { + throw new Error("Can't compile sources ", e); } - return ""; + } + + private static String[] generatePrerunAction(String mainClassName) { + return new String[] {"@compile " + mainClassName + ".java"}; } } diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/ProductionParams.java --- a/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/ProductionParams.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/ProductionParams.java Tue Jul 05 13:50:37 2016 -0700 @@ -68,8 +68,6 @@ public static Option disableNestedBlocks = null; public static Option disableArrays = null; public static Option enableFinalizers = null; - public static Option disableBytecodeGeneration = null; - public static Option disableJavacodeGeneration = null; // workaraound: to reduce chance throwing ArrayIndexOutOfBoundsException public static Option chanceExpressionIndex = null; public static Option testbaseDir = null; @@ -78,6 +76,8 @@ public static Option specificSeed = null; public static Option classesFile = null; public static Option excludeMethodsFile = null; + public static Option generators = null; + public static Option generatorsFactories = null; public static void register(OptionResolver optionResolver) { productionLimit = optionResolver.addIntegerOption('l', "production-limit", 100, "Limit on steps in the production of an expression"); @@ -120,8 +120,6 @@ disableNestedBlocks = optionResolver.addBooleanOption("disable-nested-blocks", "Disable generation of nested blocks"); disableArrays = optionResolver.addBooleanOption("disable-arrays", "Disable generation of arrays"); enableFinalizers = optionResolver.addBooleanOption("enable-finalizers", "Enable finalizers (for stress testing)"); - disableBytecodeGeneration = optionResolver.addBooleanOption("disable-bytecode-generation", "Disable generation of bytecode output"); - disableJavacodeGeneration = optionResolver.addBooleanOption("disable-javacode-generation", "Disable generation of java source code output"); chanceExpressionIndex = optionResolver.addIntegerOption("chance-expression-index", 0, "A non negative decimal integer used to restrict chane of generating expression in array index while creating or accessing by index"); testbaseDir = optionResolver.addStringOption("testbase-dir", ".", "Testbase dir"); numberOfTests = optionResolver.addIntegerOption('n', "number-of-tests", 0, "Number of test classes to generate"); @@ -129,5 +127,7 @@ specificSeed = optionResolver.addLongOption('z', "specificSeed", 0L, "A seed to be set for specific test generation(regular seed still needed for initialization)"); classesFile = optionResolver.addStringOption('f', "classes-file", "conf/classes.lst", "File to read classes from"); excludeMethodsFile = optionResolver.addStringOption('r', "exclude-methods-file", "conf/exclude.methods.lst", "File to read excluded methods from"); + generators = optionResolver.addStringOption("generators", "", "Comma-separated list of generator names"); + generatorsFactories = optionResolver.addStringOption("generatorsFactories", "", "Comma-separated list of generators factories class names"); } } diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/TestGeneratorsFactory.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/TestGeneratorsFactory.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package jdk.test.lib.jittester; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; + +public class TestGeneratorsFactory implements Function> { + + @Override + public List apply(String[] input) { + List result = new ArrayList<>(); + for (String generatorName : input) { + switch (generatorName) { + case "JavaCode": + result.add(new JavaCodeGenerator()); + break; + case "ByteCode": + result.add(new ByteCodeGenerator()); + break; + default: + throw new IllegalArgumentException("Unknown generator: " + generatorName); + } + } + return result; + } +} diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/TestsGenerator.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/TestsGenerator.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,184 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package jdk.test.lib.jittester; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.concurrent.TimeUnit; +import java.util.function.BiConsumer; +import java.util.function.Function; +import java.util.stream.Collectors; +import jdk.test.lib.jittester.types.TypeKlass; +import jdk.test.lib.jittester.utils.PseudoRandom; + +public abstract class TestsGenerator implements BiConsumer { + protected static final String JAVA_BIN = getJavaPath(); + protected static final String JAVAC = Paths.get(JAVA_BIN, "javac").toString(); + protected static final String JAVA = Paths.get(JAVA_BIN, "java").toString(); + protected final Path generatorDir; + protected final Function preRunActions; + protected final String jtDriverOptions; + + protected TestsGenerator(String suffix) { + this(suffix, s -> new String[0], ""); + } + + protected TestsGenerator(String suffix, Function preRunActions, + String jtDriverOptions) { + generatorDir = getRoot().resolve(suffix); + this.preRunActions = preRunActions; + this.jtDriverOptions = jtDriverOptions; + } + + protected void generateGoldenOut(String mainClassName) { + String classPath = getRoot() + File.pathSeparator + generatorDir; + ProcessBuilder pb = new ProcessBuilder(JAVA, "-Xint", "-Xverify", "-cp", classPath, + mainClassName); + String goldFile = mainClassName + ".gold"; + try { + runProcess(pb, generatorDir.resolve(goldFile).toString()); + } catch (IOException | InterruptedException e) { + throw new Error("Can't run generated test ", e); + } + } + + protected static int runProcess(ProcessBuilder pb, String name) + throws IOException, InterruptedException { + pb.redirectError(new File(name + ".err")); + pb.redirectOutput(new File(name + ".out")); + Process process = pb.start(); + if (process.waitFor(Automatic.MINUTES_TO_WAIT, TimeUnit.MINUTES)) { + try (FileWriter file = new FileWriter(name + ".exit")) { + file.write(Integer.toString(process.exitValue())); + } + return process.exitValue(); + } else { + process.destroyForcibly(); + return -1; + } + } + + protected static void compilePrinter() { + Path root = getRoot(); + ProcessBuilder pbPrinter = new ProcessBuilder(JAVAC, + root.resolve("jdk") + .resolve("test") + .resolve("lib") + .resolve("jittester") + .resolve("jtreg") + .resolve("Printer.java") + .toString()); + try { + int exitCode = runProcess(pbPrinter, root.resolve("Printer").toString()); + if (exitCode != 0) { + throw new Error("Printer compilation returned exit code " + exitCode); + } + } catch (IOException | InterruptedException e) { + throw new Error("Can't compile printer", e); + } + } + + protected static void ensureExisting(Path path) { + if (Files.notExists(path)) { + try { + Files.createDirectories(path); + } catch (IOException ex) { + ex.printStackTrace(); + } + } + } + + protected String getJtregHeader(String mainClassName) { + String synopsis = "seed = '" + ProductionParams.seed.value() + "'" + + ", specificSeed = '" + PseudoRandom.getCurrentSeed() + "'"; + StringBuilder header = new StringBuilder(); + header.append("/*\n * @test\n * @summary ") + .append(synopsis) + .append(" \n * @library / ../\n"); + header.append(" * @run build jdk.test.lib.jittester.jtreg.JitTesterDriver " + + "jdk.test.lib.jittester.jtreg.Printer\n"); + for (String action : preRunActions.apply(mainClassName)) { + header.append(" * ") + .append(action) + .append("\n"); + } + header.append(" * @run driver jdk.test.lib.jittester.jtreg.JitTesterDriver ") + .append(jtDriverOptions) + .append(" ") + .append(mainClassName) + .append("\n */\n\n"); + if (ProductionParams.printHierarchy.value()) { + header.append("/*\n") + .append(printHierarchy()) + .append("*/\n"); + } + return header.toString(); + } + + protected static Path getRoot() { + return Paths.get(ProductionParams.testbaseDir.value()); + } + + protected static void writeFile(Path targetDir, String fileName, String content) { + try (FileWriter file = new FileWriter(targetDir.resolve(fileName).toFile())) { + file.write(content); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private static String printHierarchy() { + return TypeList.getAll() + .stream() + .filter(t -> t instanceof TypeKlass) + .map(t -> typeDescription((TypeKlass) t)) + .collect(Collectors.joining("\n","CLASS HIERARCHY:\n", "\n")); + } + + private static String typeDescription(TypeKlass type) { + StringBuilder result = new StringBuilder(); + String parents = type.getParentsNames().stream().collect(Collectors.joining(",")); + result.append(type.isAbstract() ? "abstract " : "") + .append(type.isFinal() ? "final " : "") + .append(type.isInterface() ? "interface " : "class ") + .append(type.getName()) + .append(parents.isEmpty() ? "" : ": " + parents); + return result.toString(); + } + + private static String getJavaPath() { + String[] env = { "JDK_HOME", "JAVA_HOME", "BOOTDIR" }; + for (String name : env) { + String path = System.getenv(name); + if (path != null) { + return path + "/bin/"; + } + } + return ""; + } +} diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/factories/LiteralFactory.java --- a/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/factories/LiteralFactory.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/factories/LiteralFactory.java Tue Jul 05 13:50:37 2016 -0700 @@ -51,13 +51,13 @@ } else if (resultType.equals(TypeList.LONG)) { literal = new Literal((long) (PseudoRandom.random() * Long.MAX_VALUE), TypeList.LONG); } else if (resultType.equals(TypeList.FLOAT)) { - literal = new Literal(new Float(String.format( + literal = new Literal(Float.valueOf(String.format( (Locale) null, "%." + ProductionParams.floatingPointPrecision.value() + "EF", (float) PseudoRandom.random() * Float.MAX_VALUE)), TypeList.FLOAT); } else if (resultType.equals(TypeList.DOUBLE)) { - literal = new Literal(new Double(String.format( + literal = new Literal(Double.valueOf(String.format( (Locale) null, "%." + 2 * ProductionParams.floatingPointPrecision.value() + "E", PseudoRandom.random() * Double.MAX_VALUE)), diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/jtreg/JitTesterDriver.java --- a/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/jtreg/JitTesterDriver.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/jtreg/JitTesterDriver.java Tue Jul 05 13:50:37 2016 -0700 @@ -40,40 +40,36 @@ public class JitTesterDriver { public static void main(String[] args) { - if (args.length != 1) { + if (args.length < 1) { throw new IllegalArgumentException( "[TESTBUG]: wrong number of argument : " + args.length - + ". Expected 1 argument -- jit-tester test name."); + + ". Expected at least 1 argument -- jit-tester test name."); } OutputAnalyzer oa; try { - ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true, args[0]); + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true, args); oa = new OutputAnalyzer(pb.start()); } catch (Exception e) { throw new Error("Unexpected exception on test jvm start :" + e, e); } + String name = args[args.length - 1]; Pattern splitOut = Pattern.compile("\\n"); // tests use \n only in stdout Pattern splitErr = Pattern.compile("\\r?\\n"); // can handle both \r\n and \n Path testDir = Paths.get(Utils.TEST_SRC); - String goldOut = formatOutput(streamGoldFile(testDir, args[0], "out"), s -> true); - String anlzOut = formatOutput(Arrays.stream(splitOut.split(oa.getStdout())), s -> true); + String goldOut = formatOutput(streamGoldFile(testDir, name, "out")); + String anlzOut = formatOutput(Arrays.stream(splitOut.split(oa.getStdout()))); Asserts.assertEQ(anlzOut, goldOut, "Actual stdout isn't equal to golden one"); - // TODO: add a comment why we skip such lines - Predicate notStartWhitespaces = s -> !(s.startsWith("\t") || s.startsWith(" ")); - String goldErr = formatOutput(streamGoldFile(testDir, args[0], "err"), notStartWhitespaces); - String anlzErr = formatOutput(Arrays.stream(splitErr.split(oa.getStderr())), - notStartWhitespaces); + String goldErr = formatOutput(streamGoldFile(testDir, name, "err")); + String anlzErr = formatOutput(Arrays.stream(splitErr.split(oa.getStderr()))); Asserts.assertEQ(anlzErr, goldErr, "Actual stderr isn't equal to golden one"); - int exitValue = Integer.parseInt(streamGoldFile(testDir, args[0], "exit").findFirst().get()); + int exitValue = Integer.parseInt(streamGoldFile(testDir, name, "exit").findFirst().get()); oa.shouldHaveExitValue(exitValue); } - private static String formatOutput(Stream stream, Predicate predicate) { - String result = stream - .filter(predicate) - .collect(Collectors.joining(Utils.NEW_LINE)); + private static String formatOutput(Stream stream) { + String result = stream.collect(Collectors.joining(Utils.NEW_LINE)); if (result.length() > 0) { result += Utils.NEW_LINE; } diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/utils/FixedTrees.java --- a/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/utils/FixedTrees.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/utils/FixedTrees.java Tue Jul 05 13:50:37 2016 -0700 @@ -23,9 +23,11 @@ package jdk.test.lib.jittester.utils; +import java.util.Arrays; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; + import jdk.test.lib.jittester.BinaryOperator; import jdk.test.lib.jittester.Block; import jdk.test.lib.jittester.CatchBlock; @@ -60,6 +62,8 @@ import jdk.test.lib.jittester.types.TypeKlass; public class FixedTrees { + private static final Literal EOL = new Literal("\n", TypeList.STRING); + public static FunctionDefinition printVariablesAsFunction(PrintVariables node) { TypeKlass owner = node.getOwner(); @@ -72,7 +76,6 @@ List vars = node.getVars(); TypeKlass printerKlass = new TypeKlass(Printer.class.getName()); - Literal EOL = new Literal("\n", TypeList.STRING); VariableInfo thisInfo = new VariableInfo("this", node.getOwner(), node.getOwner(), VariableInfo.LOCAL | VariableInfo.INITIALIZED); @@ -109,6 +112,7 @@ FunctionInfo toStringInfo = new FunctionInfo("toString", owner, TypeList.STRING, 0L, FunctionInfo.PUBLIC, thisInfo); return new FunctionDefinition(toStringInfo, new ArrayList<>(), block, new Return(resultVar)); } + public static FunctionDefinition generateMainOrExecuteMethod(TypeKlass owner, boolean isMain) { Nothing nothing = new Nothing(); ArrayList testCallNodeContent = new ArrayList<>(); @@ -149,39 +153,50 @@ List throwables = new ArrayList<>(); throwables.add(throwableKlass); - VariableInfo exInfo = new VariableInfo("ex", owner, throwableKlass, - VariableInfo.LOCAL | VariableInfo.INITIALIZED); - FunctionInfo printStackTraceInfo = new FunctionInfo("printStackTrace", throwableKlass, - TypeList.VOID, 0, FunctionInfo.PUBLIC, exInfo); - Function printStackTraceCall = new Function(throwableKlass, printStackTraceInfo, null); - printStackTraceCall.addChild(new LocalVariable(exInfo)); - ArrayList printStackTraceCallBlockContent = new ArrayList<>(); - // { ex.printStackTrace(); } - printStackTraceCallBlockContent.add(new Statement(printStackTraceCall, true)); - - Block printStackTraceCallBlock = new Block(owner, TypeList.VOID, printStackTraceCallBlockContent, 3); - List catchBlocks1 = new ArrayList<>(); - catchBlocks1.add(new CatchBlock(printStackTraceCallBlock, throwables, 3)); - List catchBlocks2 = new ArrayList<>(); - catchBlocks2.add(new CatchBlock(printStackTraceCallBlock, throwables, 3)); - List catchBlocks3 = new ArrayList<>(); - catchBlocks3.add(new CatchBlock(printStackTraceCallBlock, throwables, 2)); - - TryCatchBlock tryCatch1 = new TryCatchBlock(tryNode, nothing, catchBlocks1, 3); TypeKlass printStreamKlass = new TypeKlass("java.io.PrintStream"); - TypeKlass systemKlass = new TypeKlass("java.lang.System"); - FunctionInfo systemOutPrintInfo = new FunctionInfo("print", printStreamKlass, + FunctionInfo printInfo = new FunctionInfo("print", printStreamKlass, TypeList.VOID, 0, FunctionInfo.PUBLIC, new VariableInfo("this", owner, printStreamKlass, VariableInfo.LOCAL | VariableInfo.INITIALIZED), new VariableInfo("t", owner, TypeList.OBJECT, VariableInfo.LOCAL | VariableInfo.INITIALIZED)); + TypeKlass systemKlass = new TypeKlass("java.lang.System"); + StaticMemberVariable systemErrVar = new StaticMemberVariable(owner, + new VariableInfo("err", systemKlass, printStreamKlass, VariableInfo.STATIC | VariableInfo.PUBLIC)); + + LocalVariable exVar = new LocalVariable( + new VariableInfo("ex", owner, throwableKlass, VariableInfo.LOCAL | VariableInfo.INITIALIZED)); + TypeKlass classKlass = new TypeKlass("java.lang.Class"); + FunctionInfo getClassInfo = new FunctionInfo("getClass", TypeList.OBJECT, + classKlass, 0, FunctionInfo.PUBLIC, + new VariableInfo("this", owner, TypeList.OBJECT, VariableInfo.LOCAL | VariableInfo.INITIALIZED)); + Function getClass = new Function(TypeList.OBJECT, getClassInfo, Arrays.asList(exVar)); + FunctionInfo getNameInfo = new FunctionInfo("getName", classKlass, + TypeList.STRING, 0, FunctionInfo.PUBLIC, + new VariableInfo("this", owner, TypeList.OBJECT, VariableInfo.LOCAL | VariableInfo.INITIALIZED)); + Function getName = new Function(classKlass, getNameInfo, Arrays.asList(getClass)); + ArrayList printExceptionBlockContent = new ArrayList<>(); + // { System.err.print(ex.getClass().getName()); System.err.print("\n"); } + printExceptionBlockContent.add(new Statement( + new Function(printStreamKlass, printInfo, Arrays.asList(systemErrVar, getName)), true)); + printExceptionBlockContent.add(new Statement( + new Function(printStreamKlass, printInfo, Arrays.asList(systemErrVar, EOL)), true)); + + Block printExceptionBlock = new Block(owner, TypeList.VOID, printExceptionBlockContent, 3); + List catchBlocks1 = new ArrayList<>(); + catchBlocks1.add(new CatchBlock(printExceptionBlock, throwables, 3)); + List catchBlocks2 = new ArrayList<>(); + catchBlocks2.add(new CatchBlock(printExceptionBlock, throwables, 3)); + List catchBlocks3 = new ArrayList<>(); + catchBlocks3.add(new CatchBlock(printExceptionBlock, throwables, 2)); + + TryCatchBlock tryCatch1 = new TryCatchBlock(tryNode, nothing, catchBlocks1, 3); List printArgs = new ArrayList<>(); VariableInfo systemOutInfo = new VariableInfo("out", systemKlass, printStreamKlass, VariableInfo.STATIC | VariableInfo.PUBLIC); StaticMemberVariable systemOutVar = new StaticMemberVariable(owner, systemOutInfo); printArgs.add(systemOutVar); printArgs.add(tVar); - Function print = new Function(printStreamKlass, systemOutPrintInfo, printArgs); + Function print = new Function(printStreamKlass, printInfo, printArgs); ArrayList printBlockContent = new ArrayList<>(); printBlockContent.add(new Statement(print, true)); Block printBlock = new Block(owner, TypeList.VOID, printBlockContent, 3); diff -r 25903fca5876 -r 0ac35f4c3936 hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/utils/OptionResolver.java --- a/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/utils/OptionResolver.java Thu Jun 30 14:57:30 2016 -0700 +++ b/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/utils/OptionResolver.java Tue Jul 05 13:50:37 2016 -0700 @@ -230,7 +230,7 @@ @Override public Long parseFromString(String arg) { - return new Long(arg); + return Long.valueOf(arg); } } @@ -242,7 +242,7 @@ @Override public Integer parseFromString(String arg) { - return new Integer(arg); + return Integer.valueOf(arg); } } diff -r 25903fca5876 -r 0ac35f4c3936 jaxp/.hgtags --- a/jaxp/.hgtags Thu Jun 30 14:57:30 2016 -0700 +++ b/jaxp/.hgtags Tue Jul 05 13:50:37 2016 -0700 @@ -367,3 +367,4 @@ f8899b1884e2c4a000dbcc5b1a80954245fe462e jdk-9+122 3c19ab8742c196ac267b3d87e1d19ec3472c708d jdk-9+123 e04a15153cc293f05fcd60bc98236f50e16af46a jdk-9+124 +493eb91ec32a6dea7604cfbd86c10045ad9af15b jdk-9+125 diff -r 25903fca5876 -r 0ac35f4c3936 jaxp/test/ProblemList.txt --- a/jaxp/test/ProblemList.txt Thu Jun 30 14:57:30 2016 -0700 +++ b/jaxp/test/ProblemList.txt Tue Jul 05 13:50:37 2016 -0700 @@ -1,6 +1,6 @@ ########################################################################### # -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. # 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,11 +23,8 @@ # ########################################################################### -# 8147431 -javax/xml/jaxp/isolatedjdk/catalog/PropertiesTest.sh generic-all +javax/xml/jaxp/isolatedjdk/catalog/PropertiesTest.sh 8147431 generic-all -# 8150145 -javax/xml/jaxp/unittest/common/TransformationWarningsTest.java generic-all +javax/xml/jaxp/unittest/common/TransformationWarningsTest.java 8150145 generic-all -# 8156508 -javax/xml/jaxp/unittest/stream/FactoryFindTest.java generic-all +javax/xml/jaxp/unittest/stream/FactoryFindTest.java 8156508 generic-all diff -r 25903fca5876 -r 0ac35f4c3936 jaxws/.hgtags --- a/jaxws/.hgtags Thu Jun 30 14:57:30 2016 -0700 +++ b/jaxws/.hgtags Tue Jul 05 13:50:37 2016 -0700 @@ -370,3 +370,4 @@ 342705d785ffd9e999991a3d4baae2eca58ea7c3 jdk-9+122 c42decd28bbfa817347112ed6053b5fbd30517a2 jdk-9+123 1600da1665cd2cc127014e8c002b328ec33a9147 jdk-9+124 +5b0570e3db29f6b8c80a4beac70d51284507b203 jdk-9+125 diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/java.base/share/classes/java/lang/invoke/BoundMethodHandle.java --- a/jdk/src/java.base/share/classes/java/lang/invoke/BoundMethodHandle.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/java.base/share/classes/java/lang/invoke/BoundMethodHandle.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved. * 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,17 +26,16 @@ package java.lang.invoke; import jdk.internal.loader.BootLoader; -import jdk.internal.vm.annotation.Stable; import jdk.internal.org.objectweb.asm.ClassWriter; import jdk.internal.org.objectweb.asm.FieldVisitor; import jdk.internal.org.objectweb.asm.MethodVisitor; +import jdk.internal.vm.annotation.Stable; import sun.invoke.util.ValueConversions; import sun.invoke.util.Wrapper; import java.lang.invoke.LambdaForm.NamedFunction; import java.lang.invoke.MethodHandles.Lookup; import java.lang.reflect.Field; -import java.util.Arrays; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; @@ -168,12 +167,16 @@ } @Override - final Object internalValues() { - Object[] boundValues = new Object[speciesData().fieldCount()]; - for (int i = 0; i < boundValues.length; ++i) { - boundValues[i] = arg(i); + final String internalValues() { + int count = speciesData().fieldCount(); + if (count == 1) { + return "[" + arg(0) + "]"; } - return Arrays.asList(boundValues); + StringBuilder sb = new StringBuilder("["); + for (int i = 0; i < count; ++i) { + sb.append("\n ").append(i).append(": ( ").append(arg(i)).append(" )"); + } + return sb.append("\n]").toString(); } /*non-public*/ final Object arg(int i) { @@ -869,7 +872,7 @@ */ static final SpeciesData SPECIES_DATA = SpeciesData.EMPTY; - private static final SpeciesData[] SPECIES_DATA_CACHE = new SpeciesData[5]; + private static final SpeciesData[] SPECIES_DATA_CACHE = new SpeciesData[6]; private static SpeciesData checkCache(int size, String types) { int idx = size - 1; SpeciesData data = SPECIES_DATA_CACHE[idx]; @@ -877,9 +880,10 @@ SPECIES_DATA_CACHE[idx] = data = getSpeciesData(types); return data; } - static SpeciesData speciesData_L() { return checkCache(1, "L"); } - static SpeciesData speciesData_LL() { return checkCache(2, "LL"); } - static SpeciesData speciesData_LLL() { return checkCache(3, "LLL"); } - static SpeciesData speciesData_LLLL() { return checkCache(4, "LLLL"); } - static SpeciesData speciesData_LLLLL() { return checkCache(5, "LLLLL"); } + static SpeciesData speciesData_L() { return checkCache(1, "L"); } + static SpeciesData speciesData_LL() { return checkCache(2, "LL"); } + static SpeciesData speciesData_LLL() { return checkCache(3, "LLL"); } + static SpeciesData speciesData_LLLL() { return checkCache(4, "LLLL"); } + static SpeciesData speciesData_LLLLL() { return checkCache(5, "LLLLL"); } + static SpeciesData speciesData_LLLLLL() { return checkCache(6, "LLLLLL"); } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java --- a/jdk/src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,22 +25,30 @@ package java.lang.invoke; -import java.io.*; -import java.util.*; -import java.lang.reflect.Modifier; - -import jdk.internal.org.objectweb.asm.*; - -import static java.lang.invoke.LambdaForm.*; -import static java.lang.invoke.LambdaForm.BasicType.*; -import static java.lang.invoke.MethodHandleStatics.*; -import static java.lang.invoke.MethodHandleNatives.Constants.*; - +import jdk.internal.org.objectweb.asm.ClassWriter; +import jdk.internal.org.objectweb.asm.Label; +import jdk.internal.org.objectweb.asm.MethodVisitor; +import jdk.internal.org.objectweb.asm.Opcodes; +import jdk.internal.org.objectweb.asm.Type; import sun.invoke.util.VerifyAccess; import sun.invoke.util.VerifyType; import sun.invoke.util.Wrapper; import sun.reflect.misc.ReflectUtil; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.lang.reflect.Modifier; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.stream.Stream; + +import static java.lang.invoke.LambdaForm.*; +import static java.lang.invoke.LambdaForm.BasicType.*; +import static java.lang.invoke.MethodHandleNatives.Constants.*; +import static java.lang.invoke.MethodHandleStatics.*; + /** * Code generation backend for LambdaForm. *

@@ -75,8 +83,8 @@ private final MethodType invokerType; /** Info about local variables in compiled lambda form */ - private final int[] localsMap; // index - private final Class[] localClasses; // type + private int[] localsMap; // index + private Class[] localClasses; // type /** ASM bytecode generation. */ private ClassWriter cw; @@ -101,8 +109,7 @@ this.lambdaForm = lambdaForm; this.invokerName = invokerName; this.invokerType = invokerType; - this.localsMap = new int[localsMapSize+1]; - // last entry of localsMap is count of allocated local slots + this.localsMap = new int[localsMapSize+1]; // last entry of localsMap is count of allocated local slots this.localClasses = new Class[localsMapSize+1]; } @@ -131,7 +138,6 @@ } } - /** instance counters for dumped classes */ private static final HashMap DUMP_CLASS_FILES_COUNTERS; /** debugging flag for saving generated class files */ @@ -177,7 +183,6 @@ } }); } - } private static String makeDumpableClassName(String className) { @@ -280,14 +285,11 @@ private static MemberName resolveInvokerMember(Class invokerClass, String name, MethodType type) { MemberName member = new MemberName(invokerClass, name, type, REF_invokeStatic); - //System.out.println("resolveInvokerMember => "+member); - //for (Method m : invokerClass.getDeclaredMethods()) System.out.println(" "+m); try { member = MEMBERNAME_FACTORY.resolveOrFail(REF_invokeStatic, member, HOST_CLASS, ReflectiveOperationException.class); } catch (ReflectiveOperationException e) { throw newInternalError(e); } - //System.out.println("resolveInvokerMember => "+member); return member; } @@ -541,11 +543,12 @@ Name writeBack = null; // local to write back result if (arg instanceof Name) { Name n = (Name) arg; - if (assertStaticType(cls, n)) - return; // this cast was already performed if (lambdaForm.useCount(n) > 1) { // This guy gets used more than once. writeBack = n; + if (assertStaticType(cls, n)) { + return; // this cast was already performed + } } } if (isStaticallyNameable(cls)) { @@ -679,19 +682,29 @@ MethodHandleImpl.Intrinsic intr = name.function.intrinsicName(); switch (intr) { case SELECT_ALTERNATIVE: - assert isSelectAlternative(i); + assert lambdaForm.isSelectAlternative(i); if (PROFILE_GWT) { assert(name.arguments[0] instanceof Name && - nameRefersTo((Name)name.arguments[0], MethodHandleImpl.class, "profileBoolean")); + ((Name)name.arguments[0]).refersTo(MethodHandleImpl.class, "profileBoolean")); mv.visitAnnotation(INJECTEDPROFILE_SIG, true); } onStack = emitSelectAlternative(name, lambdaForm.names[i+1]); i++; // skip MH.invokeBasic of the selectAlternative result continue; case GUARD_WITH_CATCH: - assert isGuardWithCatch(i); + assert lambdaForm.isGuardWithCatch(i); onStack = emitGuardWithCatch(i); - i = i+2; // Jump to the end of GWC idiom + i += 2; // jump to the end of GWC idiom + continue; + case TRY_FINALLY: + assert lambdaForm.isTryFinally(i); + onStack = emitTryFinally(i); + i += 2; // jump to the end of the TF idiom + continue; + case LOOP: + assert lambdaForm.isLoop(i); + onStack = emitLoop(i); + i += 2; // jump to the end of the LOOP idiom continue; case NEW_ARRAY: Class rtype = name.function.methodType().returnType(); @@ -763,7 +776,7 @@ * Emit an invoke for the given name. */ void emitInvoke(Name name) { - assert(!isLinkerMethodInvoke(name)); // should use the static path for these + assert(!name.isLinkerMethodInvoke()); // should use the static path for these if (true) { // push receiver MethodHandle target = name.function.resolvedHandle(); @@ -952,84 +965,6 @@ } /** - * Check if MemberName is a call to a method named {@code name} in class {@code declaredClass}. - */ - private boolean memberRefersTo(MemberName member, Class declaringClass, String name) { - return member != null && - member.getDeclaringClass() == declaringClass && - member.getName().equals(name); - } - private boolean nameRefersTo(Name name, Class declaringClass, String methodName) { - return name.function != null && - memberRefersTo(name.function.member(), declaringClass, methodName); - } - - /** - * Check if MemberName is a call to MethodHandle.invokeBasic. - */ - private boolean isInvokeBasic(Name name) { - if (name.function == null) - return false; - if (name.arguments.length < 1) - return false; // must have MH argument - MemberName member = name.function.member(); - return memberRefersTo(member, MethodHandle.class, "invokeBasic") && - !member.isPublic() && !member.isStatic(); - } - - /** - * Check if MemberName is a call to MethodHandle.linkToStatic, etc. - */ - private boolean isLinkerMethodInvoke(Name name) { - if (name.function == null) - return false; - if (name.arguments.length < 1) - return false; // must have MH argument - MemberName member = name.function.member(); - return member != null && - member.getDeclaringClass() == MethodHandle.class && - !member.isPublic() && member.isStatic() && - member.getName().startsWith("linkTo"); - } - - /** - * Check if i-th name is a call to MethodHandleImpl.selectAlternative. - */ - private boolean isSelectAlternative(int pos) { - // selectAlternative idiom: - // t_{n}:L=MethodHandleImpl.selectAlternative(...) - // t_{n+1}:?=MethodHandle.invokeBasic(t_{n}, ...) - if (pos+1 >= lambdaForm.names.length) return false; - Name name0 = lambdaForm.names[pos]; - Name name1 = lambdaForm.names[pos+1]; - return nameRefersTo(name0, MethodHandleImpl.class, "selectAlternative") && - isInvokeBasic(name1) && - name1.lastUseIndex(name0) == 0 && // t_{n+1}:?=MethodHandle.invokeBasic(t_{n}, ...) - lambdaForm.lastUseIndex(name0) == pos+1; // t_{n} is local: used only in t_{n+1} - } - - /** - * Check if i-th name is a start of GuardWithCatch idiom. - */ - private boolean isGuardWithCatch(int pos) { - // GuardWithCatch idiom: - // t_{n}:L=MethodHandle.invokeBasic(...) - // t_{n+1}:L=MethodHandleImpl.guardWithCatch(*, *, *, t_{n}); - // t_{n+2}:?=MethodHandle.invokeBasic(t_{n+1}) - if (pos+2 >= lambdaForm.names.length) return false; - Name name0 = lambdaForm.names[pos]; - Name name1 = lambdaForm.names[pos+1]; - Name name2 = lambdaForm.names[pos+2]; - return nameRefersTo(name1, MethodHandleImpl.class, "guardWithCatch") && - isInvokeBasic(name0) && - isInvokeBasic(name2) && - name1.lastUseIndex(name0) == 3 && // t_{n+1}:L=MethodHandleImpl.guardWithCatch(*, *, *, t_{n}); - lambdaForm.lastUseIndex(name0) == pos+1 && // t_{n} is local: used only in t_{n+1} - name2.lastUseIndex(name1) == 1 && // t_{n+2}:?=MethodHandle.invokeBasic(t_{n+1}) - lambdaForm.lastUseIndex(name1) == pos+2; // t_{n+1} is local: used only in t_{n+2} - } - - /** * Emit bytecode for the selectAlternative idiom. * * The pattern looks like (Cf. MethodHandleImpl.makeGuardWithTest): @@ -1155,6 +1090,329 @@ return result; } + /** + * Emit bytecode for the tryFinally idiom. + *

+ * The pattern looks like (Cf. MethodHandleImpl.makeTryFinally): + *

{@code
+     * // a0: BMH
+     * // a1: target, a2: cleanup
+     * // a3: box, a4: unbox
+     * // a5 (and following): arguments
+     * tryFinally=Lambda(a0:L,a1:L,a2:L,a3:L,a4:L,a5:L)=>{
+     *   t6:L=MethodHandle.invokeBasic(a3:L,a5:L);         // box the arguments into an Object[]
+     *   t7:L=MethodHandleImpl.tryFinally(a1:L,a2:L,t6:L); // call the tryFinally executor
+     *   t8:L=MethodHandle.invokeBasic(a4:L,t7:L);t8:L}    // unbox the result; return the result
+     * }
+ *

+ * It is compiled into bytecode equivalent to the following code: + *

{@code
+     * Throwable t;
+     * Object r;
+     * try {
+     *     r = a1.invokeBasic(a5);
+     * } catch (Throwable thrown) {
+     *     t = thrown;
+     *     throw t;
+     * } finally {
+     *     r = a2.invokeBasic(t, r, a5);
+     * }
+     * return r;
+     * }
+ *

+ * Specifically, the bytecode will have the following form (the stack effects are given for the beginnings of + * blocks, and for the situations after executing the given instruction - the code will have a slightly different + * shape if the return type is {@code void}): + *

{@code
+     * TRY:                 (--)
+     *                      load target                             (-- target)
+     *                      load args                               (-- args... target)
+     *                      INVOKEVIRTUAL MethodHandle.invokeBasic  (depends)
+     * FINALLY_NORMAL:      (-- r)
+     *                      load cleanup                            (-- cleanup r)
+     *                      SWAP                                    (-- r cleanup)
+     *                      ACONST_NULL                             (-- t r cleanup)
+     *                      SWAP                                    (-- r t cleanup)
+     *                      load args                               (-- args... r t cleanup)
+     *                      INVOKEVIRTUAL MethodHandle.invokeBasic  (-- r)
+     *                      GOTO DONE
+     * CATCH:               (-- t)
+     *                      DUP                                     (-- t t)
+     * FINALLY_EXCEPTIONAL: (-- t t)
+     *                      load cleanup                            (-- cleanup t t)
+     *                      SWAP                                    (-- t cleanup t)
+     *                      load default for r                      (-- r t cleanup t)
+     *                      load args                               (-- args... r t cleanup t)
+     *                      INVOKEVIRTUAL MethodHandle.invokeBasic  (-- r t)
+     *                      POP                                     (-- t)
+     *                      ATHROW
+     * DONE:                (-- r)
+     * }
+ */ + private Name emitTryFinally(int pos) { + Name args = lambdaForm.names[pos]; + Name invoker = lambdaForm.names[pos+1]; + Name result = lambdaForm.names[pos+2]; + + Label lFrom = new Label(); + Label lTo = new Label(); + Label lCatch = new Label(); + Label lDone = new Label(); + + Class returnType = result.function.resolvedHandle().type().returnType(); + boolean isNonVoid = returnType != void.class; + MethodType type = args.function.resolvedHandle().type() + .dropParameterTypes(0,1) + .changeReturnType(returnType); + MethodType cleanupType = type.insertParameterTypes(0, Throwable.class); + if (isNonVoid) { + cleanupType = cleanupType.insertParameterTypes(1, returnType); + } + String cleanupDesc = cleanupType.basicType().toMethodDescriptorString(); + + // exception handler table + mv.visitTryCatchBlock(lFrom, lTo, lCatch, "java/lang/Throwable"); + + // TRY: + mv.visitLabel(lFrom); + emitPushArgument(invoker, 0); // load target + emitPushArguments(args, 1); // load args (skip 0: method handle) + mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, MH, "invokeBasic", type.basicType().toMethodDescriptorString(), false); + mv.visitLabel(lTo); + + // FINALLY_NORMAL: + emitPushArgument(invoker, 1); // load cleanup + if (isNonVoid) { + mv.visitInsn(Opcodes.SWAP); + } + mv.visitInsn(Opcodes.ACONST_NULL); + if (isNonVoid) { + mv.visitInsn(Opcodes.SWAP); + } + emitPushArguments(args, 1); // load args (skip 0: method handle) + mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, MH, "invokeBasic", cleanupDesc, false); + mv.visitJumpInsn(Opcodes.GOTO, lDone); + + // CATCH: + mv.visitLabel(lCatch); + mv.visitInsn(Opcodes.DUP); + + // FINALLY_EXCEPTIONAL: + emitPushArgument(invoker, 1); // load cleanup + mv.visitInsn(Opcodes.SWAP); + if (isNonVoid) { + emitZero(BasicType.basicType(returnType)); // load default for result + } + emitPushArguments(args, 1); // load args (skip 0: method handle) + mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, MH, "invokeBasic", cleanupDesc, false); + if (isNonVoid) { + mv.visitInsn(Opcodes.POP); + } + mv.visitInsn(Opcodes.ATHROW); + + // DONE: + mv.visitLabel(lDone); + + return result; + } + + /** + * Emit bytecode for the loop idiom. + *

+ * The pattern looks like (Cf. MethodHandleImpl.loop): + *

{@code
+     * // a0: BMH
+     * // a1: inits, a2: steps, a3: preds, a4: finis
+     * // a5: box, a6: unbox
+     * // a7 (and following): arguments
+     * loop=Lambda(a0:L,a1:L,a2:L,a3:L,a4:L,a5:L,a6:L,a7:L)=>{
+     *   t8:L=MethodHandle.invokeBasic(a5:L,a7:L);                  // box the arguments into an Object[]
+     *   t9:L=MethodHandleImpl.loop(bt:L,a1:L,a2:L,a3:L,a4:L,t8:L); // call the loop executor (with supplied types in bt)
+     *   t10:L=MethodHandle.invokeBasic(a6:L,t9:L);t10:L}           // unbox the result; return the result
+     * }
+ *

+ * It is compiled into bytecode equivalent to the code seen in {@link MethodHandleImpl#loop(BasicType[], + * MethodHandle[], MethodHandle[], MethodHandle[], MethodHandle[], Object...)}, with the difference that no arrays + * will be used for local state storage. Instead, the local state will be mapped to actual stack slots. + *

+ * Bytecode generation applies an unrolling scheme to enable better bytecode generation regarding local state type + * handling. The generated bytecode will have the following form ({@code void} types are ignored for convenience). + * Assume there are {@code C} clauses in the loop. + *

{@code
+     * INIT: (INIT_SEQ for clause 1)
+     *       ...
+     *       (INIT_SEQ for clause C)
+     * LOOP: (LOOP_SEQ for clause 1)
+     *       ...
+     *       (LOOP_SEQ for clause C)
+     *       GOTO LOOP
+     * DONE: ...
+     * }
+ *

+ * The {@code INIT_SEQ_x} sequence for clause {@code x} (with {@code x} ranging from {@code 0} to {@code C-1}) has + * the following shape. Assume slot {@code vx} is used to hold the state for clause {@code x}. + *

{@code
+     * INIT_SEQ_x:  ALOAD inits
+     *              CHECKCAST MethodHandle[]
+     *              ICONST x
+     *              AALOAD      // load the init handle for clause x
+     *              load args
+     *              INVOKEVIRTUAL MethodHandle.invokeBasic
+     *              store vx
+     * }
+ *

+ * The {@code LOOP_SEQ_x} sequence for clause {@code x} (with {@code x} ranging from {@code 0} to {@code C-1}) has + * the following shape. Again, assume slot {@code vx} is used to hold the state for clause {@code x}. + *

{@code
+     * LOOP_SEQ_x:  ALOAD steps
+     *              CHECKCAST MethodHandle[]
+     *              ICONST x
+     *              AALOAD              // load the step handle for clause x
+     *              load locals
+     *              load args
+     *              INVOKEVIRTUAL MethodHandle.invokeBasic
+     *              store vx
+     *              ALOAD preds
+     *              CHECKCAST MethodHandle[]
+     *              ICONST x
+     *              AALOAD              // load the pred handle for clause x
+     *              load locals
+     *              load args
+     *              INVOKEVIRTUAL MethodHandle.invokeBasic
+     *              IFNE LOOP_SEQ_x+1   // predicate returned false -> jump to next clause
+     *              ALOAD finis
+     *              CHECKCAST MethodHandle[]
+     *              ICONST x
+     *              AALOAD              // load the fini handle for clause x
+     *              load locals
+     *              load args
+     *              INVOKEVIRTUAL MethodHandle.invokeBasic
+     *              GOTO DONE           // jump beyond end of clauses to return from loop
+     * }
+ */ + private Name emitLoop(int pos) { + Name args = lambdaForm.names[pos]; + Name invoker = lambdaForm.names[pos+1]; + Name result = lambdaForm.names[pos+2]; + + // extract clause and loop-local state types + // find the type info in the loop invocation + BasicType[] loopClauseTypes = (BasicType[]) invoker.arguments[0]; + Class[] loopLocalStateTypes = Stream.of(loopClauseTypes). + filter(bt -> bt != BasicType.V_TYPE).map(BasicType::basicTypeClass).toArray(Class[]::new); + + final int firstLoopStateIndex = extendLocalsMap(loopLocalStateTypes); + + Class returnType = result.function.resolvedHandle().type().returnType(); + MethodType loopType = args.function.resolvedHandle().type() + .dropParameterTypes(0,1) + .changeReturnType(returnType); + MethodType loopHandleType = loopType.insertParameterTypes(0, loopLocalStateTypes); + MethodType predType = loopHandleType.changeReturnType(boolean.class); + MethodType finiType = loopHandleType; + + final int nClauses = loopClauseTypes.length; + + // indices to invoker arguments to load method handle arrays + final int inits = 1; + final int steps = 2; + final int preds = 3; + final int finis = 4; + + Label lLoop = new Label(); + Label lDone = new Label(); + Label lNext; + + // INIT: + for (int c = 0, state = 0; c < nClauses; ++c) { + MethodType cInitType = loopType.changeReturnType(loopClauseTypes[c].basicTypeClass()); + emitLoopHandleInvoke(invoker, inits, c, args, false, cInitType, loopLocalStateTypes, firstLoopStateIndex); + if (cInitType.returnType() != void.class) { + emitStoreInsn(BasicType.basicType(cInitType.returnType()), firstLoopStateIndex + state); + ++state; + } + } + + // LOOP: + mv.visitLabel(lLoop); + + for (int c = 0, state = 0; c < nClauses; ++c) { + lNext = new Label(); + + MethodType stepType = loopHandleType.changeReturnType(loopClauseTypes[c].basicTypeClass()); + boolean isVoid = stepType.returnType() == void.class; + + // invoke loop step + emitLoopHandleInvoke(invoker, steps, c, args, true, stepType, loopLocalStateTypes, firstLoopStateIndex); + if (!isVoid) { + emitStoreInsn(BasicType.basicType(stepType.returnType()), firstLoopStateIndex + state); + ++state; + } + + // invoke loop predicate + emitLoopHandleInvoke(invoker, preds, c, args, true, predType, loopLocalStateTypes, firstLoopStateIndex); + mv.visitJumpInsn(Opcodes.IFNE, lNext); + + // invoke fini + emitLoopHandleInvoke(invoker, finis, c, args, true, finiType, loopLocalStateTypes, firstLoopStateIndex); + mv.visitJumpInsn(Opcodes.GOTO, lDone); + + // this is the beginning of the next loop clause + mv.visitLabel(lNext); + } + + mv.visitJumpInsn(Opcodes.GOTO, lLoop); + + // DONE: + mv.visitLabel(lDone); + + return result; + } + + private int extendLocalsMap(Class[] types) { + int firstSlot = localsMap.length - 1; + localsMap = Arrays.copyOf(localsMap, localsMap.length + types.length); + localClasses = Arrays.copyOf(localClasses, localClasses.length + types.length); + System.arraycopy(types, 0, localClasses, firstSlot, types.length); + int index = localsMap[firstSlot - 1] + 1; + int lastSlots = 0; + for (int i = 0; i < types.length; ++i) { + localsMap[firstSlot + i] = index; + lastSlots = BasicType.basicType(localClasses[firstSlot + i]).basicTypeSlots(); + index += lastSlots; + } + localsMap[localsMap.length - 1] = index - lastSlots; + return firstSlot; + } + + private void emitLoopHandleInvoke(Name holder, int handles, int clause, Name args, boolean pushLocalState, + MethodType type, Class[] loopLocalStateTypes, int firstLoopStateSlot) { + // load handle for clause + emitPushArgument(holder, handles); + emitIconstInsn(clause); + mv.visitInsn(Opcodes.AALOAD); + // load loop state (preceding the other arguments) + if (pushLocalState) { + for (int s = 0; s < loopLocalStateTypes.length; ++s) { + emitLoadInsn(BasicType.basicType(loopLocalStateTypes[s]), firstLoopStateSlot + s); + } + } + // load loop args (skip 0: method handle) + emitPushArguments(args, 1); + mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, MH, "invokeBasic", type.toMethodDescriptorString(), false); + } + + private void emitZero(BasicType type) { + switch (type) { + case I_TYPE: mv.visitInsn(Opcodes.ICONST_0); break; + case J_TYPE: mv.visitInsn(Opcodes.LCONST_0); break; + case F_TYPE: mv.visitInsn(Opcodes.FCONST_0); break; + case D_TYPE: mv.visitInsn(Opcodes.DCONST_0); break; + case L_TYPE: mv.visitInsn(Opcodes.ACONST_NULL); break; + default: throw new InternalError("unknown type: " + type); + } + } + private void emitPushArguments(Name args) { emitPushArguments(args, 0); } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/java.base/share/classes/java/lang/invoke/LambdaForm.java --- a/jdk/src/java.base/share/classes/java/lang/invoke/LambdaForm.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/java.base/share/classes/java/lang/invoke/LambdaForm.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved. * 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,11 +33,9 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Arrays; import java.util.HashMap; -import java.util.List; import static java.lang.invoke.LambdaForm.BasicType.*; import static java.lang.invoke.MethodHandleNatives.Constants.REF_invokeStatic; @@ -210,6 +208,29 @@ } return btypes; } + static String basicTypeDesc(BasicType[] types) { + if (types == null) { + return null; + } + if (types.length == 0) { + return ""; + } + StringBuilder sb = new StringBuilder(); + for (BasicType bt : types) { + sb.append(bt.basicTypeChar()); + } + return sb.toString(); + } + static int[] basicTypeOrds(BasicType[] types) { + if (types == null) { + return null; + } + int[] a = new int[types.length]; + for(int i = 0; i < types.length; ++i) { + a[i] = types[i].ordinal(); + } + return a; + } static char basicTypeChar(Class type) { return basicType(type).btChar; @@ -565,6 +586,69 @@ return MethodType.methodType(rtype, ptypes); } + /** + * Check if i-th name is a call to MethodHandleImpl.selectAlternative. + */ + boolean isSelectAlternative(int pos) { + // selectAlternative idiom: + // t_{n}:L=MethodHandleImpl.selectAlternative(...) + // t_{n+1}:?=MethodHandle.invokeBasic(t_{n}, ...) + if (pos+1 >= names.length) return false; + Name name0 = names[pos]; + Name name1 = names[pos+1]; + return name0.refersTo(MethodHandleImpl.class, "selectAlternative") && + name1.isInvokeBasic() && + name1.lastUseIndex(name0) == 0 && // t_{n+1}:?=MethodHandle.invokeBasic(t_{n}, ...) + lastUseIndex(name0) == pos+1; // t_{n} is local: used only in t_{n+1} + } + + private boolean isMatchingIdiom(int pos, String idiomName, int nArgs) { + if (pos+2 >= names.length) return false; + Name name0 = names[pos]; + Name name1 = names[pos+1]; + Name name2 = names[pos+2]; + return name1.refersTo(MethodHandleImpl.class, idiomName) && + name0.isInvokeBasic() && + name2.isInvokeBasic() && + name1.lastUseIndex(name0) == nArgs && // t_{n+1}:L=MethodHandleImpl.(, t_{n}); + lastUseIndex(name0) == pos+1 && // t_{n} is local: used only in t_{n+1} + name2.lastUseIndex(name1) == 1 && // t_{n+2}:?=MethodHandle.invokeBasic(*, t_{n+1}) + lastUseIndex(name1) == pos+2; // t_{n+1} is local: used only in t_{n+2} + } + + /** + * Check if i-th name is a start of GuardWithCatch idiom. + */ + boolean isGuardWithCatch(int pos) { + // GuardWithCatch idiom: + // t_{n}:L=MethodHandle.invokeBasic(...) + // t_{n+1}:L=MethodHandleImpl.guardWithCatch(*, *, *, t_{n}); + // t_{n+2}:?=MethodHandle.invokeBasic(*, t_{n+1}) + return isMatchingIdiom(pos, "guardWithCatch", 3); + } + + /** + * Check if i-th name is a start of the tryFinally idiom. + */ + boolean isTryFinally(int pos) { + // tryFinally idiom: + // t_{n}:L=MethodHandle.invokeBasic(...) + // t_{n+1}:L=MethodHandleImpl.tryFinally(*, *, t_{n}) + // t_{n+2}:?=MethodHandle.invokeBasic(*, t_{n+1}) + return isMatchingIdiom(pos, "tryFinally", 2); + } + + /** + * Check if i-th name is a start of the loop idiom. + */ + boolean isLoop(int pos) { + // loop idiom: + // t_{n}:L=MethodHandle.invokeBasic(...) + // t_{n+1}:L=MethodHandleImpl.loop(types, *, *, *, *, t_{n}) + // t_{n+2}:?=MethodHandle.invokeBasic(*, t_{n+1}) + return isMatchingIdiom(pos, "loop", 5); + } + /* * Code generation issues: * @@ -1421,6 +1505,39 @@ return !isParam() && arguments.length == 0 && function.isConstantZero(); } + boolean refersTo(Class declaringClass, String methodName) { + return function != null && + function.member() != null && function.member().refersTo(declaringClass, methodName); + } + + /** + * Check if MemberName is a call to MethodHandle.invokeBasic. + */ + boolean isInvokeBasic() { + if (function == null) + return false; + if (arguments.length < 1) + return false; // must have MH argument + MemberName member = function.member(); + return member != null && member.refersTo(MethodHandle.class, "invokeBasic") && + !member.isPublic() && !member.isStatic(); + } + + /** + * Check if MemberName is a call to MethodHandle.linkToStatic, etc. + */ + boolean isLinkerMethodInvoke() { + if (function == null) + return false; + if (arguments.length < 1) + return false; // must have MH argument + MemberName member = function.member(); + return member != null && + member.getDeclaringClass() == MethodHandle.class && + !member.isPublic() && member.isStatic() && + member.getName().startsWith("linkTo"); + } + public String toString() { return (isParam()?"a":"t")+(index >= 0 ? index : System.identityHashCode(this))+":"+typeChar(); } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/java.base/share/classes/java/lang/invoke/LambdaFormBuffer.java --- a/jdk/src/java.base/share/classes/java/lang/invoke/LambdaFormBuffer.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/java.base/share/classes/java/lang/invoke/LambdaFormBuffer.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved. * 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 +249,7 @@ assert(inTrans()); } - private void changeName(int i, Name name) { + void changeName(int i, Name name) { assert(inTrans()); assert(i < length); Name oldName = names[i]; diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/java.base/share/classes/java/lang/invoke/LambdaFormEditor.java --- a/jdk/src/java.base/share/classes/java/lang/invoke/LambdaFormEditor.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/java.base/share/classes/java/lang/invoke/LambdaFormEditor.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. * 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,15 +25,17 @@ package java.lang.invoke; +import sun.invoke.util.Wrapper; + import java.lang.ref.SoftReference; import java.util.Arrays; +import java.util.Collections; +import java.util.concurrent.ConcurrentHashMap; + import static java.lang.invoke.LambdaForm.*; import static java.lang.invoke.LambdaForm.BasicType.*; import static java.lang.invoke.MethodHandleImpl.Intrinsic; -import java.util.Collections; -import java.util.concurrent.ConcurrentHashMap; - -import sun.invoke.util.Wrapper; +import static java.lang.invoke.MethodHandleImpl.NF_loop; /** Transforms on LFs. * A lambda-form editor can derive new LFs from its base LF. @@ -73,7 +75,8 @@ FILTER_ARG, FILTER_RETURN, FILTER_RETURN_TO_ZERO, COLLECT_ARGS, COLLECT_ARGS_TO_VOID, COLLECT_ARGS_TO_ARRAY, FOLD_ARGS, FOLD_ARGS_TO_VOID, - PERMUTE_ARGS + PERMUTE_ARGS, + LOCAL_TYPES //maybe add more for guard with test, catch exception, pointwise type conversions } @@ -847,6 +850,32 @@ return putInCache(key, form); } + LambdaForm noteLoopLocalTypesForm(int pos, BasicType[] localTypes) { + assert(lambdaForm.isLoop(pos)); + int[] desc = BasicType.basicTypeOrds(localTypes); + desc = Arrays.copyOf(desc, desc.length + 1); + desc[desc.length - 1] = pos; + Transform key = Transform.of(Transform.Kind.LOCAL_TYPES, desc); + LambdaForm form = getInCache(key); + if (form != null) { + return form; + } + + // replace the null entry in the MHImpl.loop invocation with localTypes + Name invokeLoop = lambdaForm.names[pos + 1]; + assert(invokeLoop.function == NF_loop); + Object[] args = Arrays.copyOf(invokeLoop.arguments, invokeLoop.arguments.length); + assert(args[0] == null); + args[0] = localTypes; + + LambdaFormBuffer buf = buffer(); + buf.startEdit(); + buf.changeName(pos + 1, new Name(NF_loop, args)); + form = buf.endEdit(); + + return putInCache(key, form); + } + static boolean permutedTypesMatch(int[] reorder, BasicType[] types, Name[] names, int skip) { for (int i = 0; i < reorder.length; i++) { assert (names[skip + i].isParam()); diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/java.base/share/classes/java/lang/invoke/MemberName.java --- a/jdk/src/java.base/share/classes/java/lang/invoke/MemberName.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/java.base/share/classes/java/lang/invoke/MemberName.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved. * 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,8 +32,8 @@ import java.lang.reflect.Constructor; import java.lang.reflect.Field; +import java.lang.reflect.Member; import java.lang.reflect.Method; -import java.lang.reflect.Member; import java.lang.reflect.Modifier; import java.lang.reflect.Module; import java.util.ArrayList; @@ -41,9 +41,11 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; +import java.util.Objects; + import static java.lang.invoke.MethodHandleNatives.Constants.*; -import static java.lang.invoke.MethodHandleStatics.*; -import java.util.Objects; +import static java.lang.invoke.MethodHandleStatics.newIllegalArgumentException; +import static java.lang.invoke.MethodHandleStatics.newInternalError; /** * A {@code MemberName} is a compact symbolic datum which fully characterizes @@ -500,6 +502,13 @@ lookupClass, mode); } + /** + * Check if MemberName is a call to a method named {@code name} in class {@code declaredClass}. + */ + public boolean refersTo(Class declc, String n) { + return clazz == declc && getName().equals(n); + } + /** Initialize a query. It is not resolved. */ private void init(Class defClass, String name, Object type, int flags) { // defining class is allowed to be null (for a naked name/type pair) diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java --- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,6 +25,17 @@ package java.lang.invoke; +import jdk.internal.org.objectweb.asm.AnnotationVisitor; +import jdk.internal.org.objectweb.asm.ClassWriter; +import jdk.internal.org.objectweb.asm.MethodVisitor; +import jdk.internal.reflect.CallerSensitive; +import jdk.internal.reflect.Reflection; +import jdk.internal.vm.annotation.Stable; +import sun.invoke.empty.Empty; +import sun.invoke.util.ValueConversions; +import sun.invoke.util.VerifyType; +import sun.invoke.util.Wrapper; + import java.lang.reflect.Array; import java.security.AccessController; import java.security.PrivilegedAction; @@ -33,18 +44,8 @@ import java.util.Iterator; import java.util.List; import java.util.function.Function; - -import jdk.internal.reflect.CallerSensitive; -import jdk.internal.reflect.Reflection; -import jdk.internal.vm.annotation.Stable; -import sun.invoke.empty.Empty; -import sun.invoke.util.ValueConversions; -import sun.invoke.util.VerifyType; -import sun.invoke.util.Wrapper; - -import jdk.internal.org.objectweb.asm.AnnotationVisitor; -import jdk.internal.org.objectweb.asm.ClassWriter; -import jdk.internal.org.objectweb.asm.MethodVisitor; +import java.util.stream.Collectors; +import java.util.stream.Stream; import static java.lang.invoke.LambdaForm.*; import static java.lang.invoke.MethodHandleStatics.*; @@ -1046,26 +1047,13 @@ // Box arguments and wrap them into Object[]: ValueConversions.array(). MethodType varargsType = type.changeReturnType(Object[].class); MethodHandle collectArgs = varargsArray(type.parameterCount()).asType(varargsType); - // Result unboxing: ValueConversions.unbox() OR ValueConversions.identity() OR ValueConversions.ignore(). - MethodHandle unboxResult; - Class rtype = type.returnType(); - if (rtype.isPrimitive()) { - if (rtype == void.class) { - unboxResult = ValueConversions.ignore(); - } else { - Wrapper w = Wrapper.forPrimitiveType(type.returnType()); - unboxResult = ValueConversions.unboxExact(w); - } - } else { - unboxResult = MethodHandles.identity(Object.class); - } + MethodHandle unboxResult = unboxResultHandle(type.returnType()); BoundMethodHandle.SpeciesData data = BoundMethodHandle.speciesData_LLLLL(); BoundMethodHandle mh; try { - mh = (BoundMethodHandle) - data.constructor().invokeBasic(type, form, (Object) target, (Object) exType, (Object) catcher, - (Object) collectArgs, (Object) unboxResult); + mh = (BoundMethodHandle) data.constructor().invokeBasic(type, form, (Object) target, (Object) exType, + (Object) catcher, (Object) collectArgs, (Object) unboxResult); } catch (Throwable ex) { throw uncaughtException(ex); } @@ -1085,16 +1073,18 @@ return target.asFixedArity().invokeWithArguments(av); } catch (Throwable t) { if (!exType.isInstance(t)) throw t; - return catcher.asFixedArity().invokeWithArguments(prepend(t, av)); + return catcher.asFixedArity().invokeWithArguments(prepend(av, t)); } } - /** Prepend an element {@code elem} to an {@code array}. */ + /** Prepend elements to an array. */ @LambdaForm.Hidden - private static Object[] prepend(Object elem, Object[] array) { - Object[] newArray = new Object[array.length+1]; - newArray[0] = elem; - System.arraycopy(array, 0, newArray, 1, array.length); + private static Object[] prepend(Object[] array, Object... elems) { + int nArray = array.length; + int nElems = elems.length; + Object[] newArray = new Object[nArray + nElems]; + System.arraycopy(elems, 0, newArray, 0, nElems); + System.arraycopy(array, 0, newArray, nElems, nArray); return newArray; } @@ -1352,6 +1342,8 @@ enum Intrinsic { SELECT_ALTERNATIVE, GUARD_WITH_CATCH, + TRY_FINALLY, + LOOP, NEW_ARRAY, ARRAY_LOAD, ARRAY_STORE, @@ -1363,7 +1355,7 @@ /** Mark arbitrary method handle as intrinsic. * InvokerBytecodeGenerator uses this info to produce more efficient bytecode shape. */ - private static final class IntrinsicMethodHandle extends DelegatingMethodHandle { + static final class IntrinsicMethodHandle extends DelegatingMethodHandle { private final MethodHandle target; private final Intrinsic intrinsicName; @@ -1694,6 +1686,8 @@ NF_checkSpreadArgument, NF_guardWithCatch, NF_throwException, + NF_tryFinally, + NF_loop, NF_profileBoolean; static { @@ -1703,6 +1697,11 @@ NF_guardWithCatch = new NamedFunction(MethodHandleImpl.class .getDeclaredMethod("guardWithCatch", MethodHandle.class, Class.class, MethodHandle.class, Object[].class)); + NF_tryFinally = new NamedFunction(MethodHandleImpl.class + .getDeclaredMethod("tryFinally", MethodHandle.class, MethodHandle.class, Object[].class)); + NF_loop = new NamedFunction(MethodHandleImpl.class + .getDeclaredMethod("loop", BasicType[].class, MethodHandle[].class, MethodHandle[].class, + MethodHandle[].class, MethodHandle[].class, Object[].class)); NF_throwException = new NamedFunction(MethodHandleImpl.class .getDeclaredMethod("throwException", Throwable.class)); NF_profileBoolean = new NamedFunction(MethodHandleImpl.class @@ -1712,14 +1711,25 @@ } } + /** Result unboxing: ValueConversions.unbox() OR ValueConversions.identity() OR ValueConversions.ignore(). */ + private static MethodHandle unboxResultHandle(Class returnType) { + if (returnType.isPrimitive()) { + if (returnType == void.class) { + return ValueConversions.ignore(); + } else { + Wrapper w = Wrapper.forPrimitiveType(returnType); + return ValueConversions.unboxExact(w); + } + } else { + return MethodHandles.identity(Object.class); + } + } + /** - * Assembles a loop method handle from the given handles and type information. This works by binding and configuring - * the {@linkplain #looper(MethodHandle[], MethodHandle[], MethodHandle[], MethodHandle[], int, int, Object[]) "most - * generic loop"}. + * Assembles a loop method handle from the given handles and type information. * * @param tloop the return type of the loop. * @param targs types of the arguments to be passed to the loop. - * @param tvars types of loop-local variables. * @param init sanitized array of initializers for loop-local variables. * @param step sanitited array of loop bodies. * @param pred sanitized array of predicates. @@ -1727,64 +1737,144 @@ * * @return a handle that, when invoked, will execute the loop. */ - static MethodHandle makeLoop(Class tloop, List> targs, List> tvars, List init, - List step, List pred, List fini) { - MethodHandle[] ainit = toArrayArgs(init); - MethodHandle[] astep = toArrayArgs(step); - MethodHandle[] apred = toArrayArgs(pred); - MethodHandle[] afini = toArrayArgs(fini); + static MethodHandle makeLoop(Class tloop, List> targs, List init, List step, + List pred, List fini) { + MethodType type = MethodType.methodType(tloop, targs); + BasicType[] initClauseTypes = + init.stream().map(h -> h.type().returnType()).map(BasicType::basicType).toArray(BasicType[]::new); + LambdaForm form = makeLoopForm(type.basicType(), initClauseTypes); - MethodHandle l = getConstantHandle(MH_looper); + // Prepare auxiliary method handles used during LambdaForm interpretation. + // Box arguments and wrap them into Object[]: ValueConversions.array(). + MethodType varargsType = type.changeReturnType(Object[].class); + MethodHandle collectArgs = varargsArray(type.parameterCount()).asType(varargsType); + MethodHandle unboxResult = unboxResultHandle(tloop); - // Bind the statically known arguments. - l = MethodHandles.insertArguments(l, 0, ainit, astep, apred, afini, tvars.size(), targs.size()); - - // Turn the args array into an argument list. - l = l.asCollector(Object[].class, targs.size()); + BoundMethodHandle.SpeciesData data = BoundMethodHandle.speciesData_LLLLLL(); + BoundMethodHandle mh; + try { + mh = (BoundMethodHandle) data.constructor().invokeBasic(type, form, (Object) toArray(init), + (Object) toArray(step), (Object) toArray(pred), (Object) toArray(fini), (Object) collectArgs, + (Object) unboxResult); + } catch (Throwable ex) { + throw uncaughtException(ex); + } + assert(mh.type() == type); + return mh; + } - // Finally, make loop type. - MethodType loopType = MethodType.methodType(tloop, targs); - l = l.asType(loopType); - - return l; + private static MethodHandle[] toArray(List l) { + return l.toArray(new MethodHandle[0]); } /** - * Converts all handles in the {@code hs} array to handles that accept an array of arguments. - * - * @param hs method handles to be converted. - * - * @return the {@code hs} array, with all method handles therein converted. + * Loops introduce some complexity as they can have additional local state. Hence, LambdaForms for loops are + * generated from a template. The LambdaForm template shape for the loop combinator is as follows (assuming one + * reference parameter passed in {@code a1}, and a reference return type, with the return value represented by + * {@code t12}): + *
{@code
+     *  loop=Lambda(a0:L,a1:L)=>{
+     *    t2:L=BoundMethodHandle$Species_L6.argL0(a0:L);             // array of init method handles
+     *    t3:L=BoundMethodHandle$Species_L6.argL1(a0:L);             // array of step method handles
+     *    t4:L=BoundMethodHandle$Species_L6.argL2(a0:L);             // array of pred method handles
+     *    t5:L=BoundMethodHandle$Species_L6.argL3(a0:L);             // array of fini method handles
+     *    t6:L=BoundMethodHandle$Species_L6.argL4(a0:L);             // helper handle to box the arguments into an Object[]
+     *    t7:L=BoundMethodHandle$Species_L6.argL5(a0:L);             // helper handle to unbox the result
+     *    t8:L=MethodHandle.invokeBasic(t6:L,a1:L);                  // box the arguments into an Object[]
+     *    t9:L=MethodHandleImpl.loop(null,t2:L,t3:L,t4:L,t5:L,t6:L); // call the loop executor
+     *    t10:L=MethodHandle.invokeBasic(t7:L,t9:L);t10:L}           // unbox the result; return the result
+     * }
+ *

+ * {@code argL0} through {@code argL3} are the arrays of init, step, pred, and fini method handles. + * {@code argL4} and {@code argL5} are auxiliary method handles: {@code argL2} boxes arguments and wraps them into + * {@code Object[]} ({@code ValueConversions.array()}), and {@code argL3} unboxes the result if necessary + * ({@code ValueConversions.unbox()}). + *

+ * Having {@code t6} and {@code t7} passed in via a BMH and not hardcoded in the lambda form allows to share lambda + * forms among loop combinators with the same basic type. + *

+ * The above template is instantiated by using the {@link LambdaFormEditor} to replace the {@code null} argument to + * the {@code loop} invocation with the {@code BasicType} array describing the loop clause types. This argument is + * ignored in the loop invoker, but will be extracted and used in {@linkplain InvokerBytecodeGenerator#emitLoop(int) + * bytecode generation}. */ - static MethodHandle[] toArrayArgs(List hs) { - return hs.stream().map(h -> h.asSpreader(Object[].class, h.type().parameterCount())).toArray(MethodHandle[]::new); + private static LambdaForm makeLoopForm(MethodType basicType, BasicType[] localVarTypes) { + MethodType lambdaType = basicType.invokerType(); + + final int THIS_MH = 0; // the BMH_LLLLLL + final int ARG_BASE = 1; // start of incoming arguments + final int ARG_LIMIT = ARG_BASE + basicType.parameterCount(); + + int nameCursor = ARG_LIMIT; + final int GET_INITS = nameCursor++; + final int GET_STEPS = nameCursor++; + final int GET_PREDS = nameCursor++; + final int GET_FINIS = nameCursor++; + final int GET_COLLECT_ARGS = nameCursor++; + final int GET_UNBOX_RESULT = nameCursor++; + final int BOXED_ARGS = nameCursor++; + final int LOOP = nameCursor++; + final int UNBOX_RESULT = nameCursor++; + + LambdaForm lform = basicType.form().cachedLambdaForm(MethodTypeForm.LF_LOOP); + if (lform == null) { + Name[] names = arguments(nameCursor - ARG_LIMIT, lambdaType); + + BoundMethodHandle.SpeciesData data = BoundMethodHandle.speciesData_LLLLLL(); + names[THIS_MH] = names[THIS_MH].withConstraint(data); + names[GET_INITS] = new Name(data.getterFunction(0), names[THIS_MH]); + names[GET_STEPS] = new Name(data.getterFunction(1), names[THIS_MH]); + names[GET_PREDS] = new Name(data.getterFunction(2), names[THIS_MH]); + names[GET_FINIS] = new Name(data.getterFunction(3), names[THIS_MH]); + names[GET_COLLECT_ARGS] = new Name(data.getterFunction(4), names[THIS_MH]); + names[GET_UNBOX_RESULT] = new Name(data.getterFunction(5), names[THIS_MH]); + + // t_{i}:L=MethodHandle.invokeBasic(collectArgs:L,a1:L,...); + MethodType collectArgsType = basicType.changeReturnType(Object.class); + MethodHandle invokeBasic = MethodHandles.basicInvoker(collectArgsType); + Object[] args = new Object[invokeBasic.type().parameterCount()]; + args[0] = names[GET_COLLECT_ARGS]; + System.arraycopy(names, ARG_BASE, args, 1, ARG_LIMIT - ARG_BASE); + names[BOXED_ARGS] = new Name(makeIntrinsic(invokeBasic, Intrinsic.LOOP), args); + + // t_{i+1}:L=MethodHandleImpl.loop(localTypes:L,inits:L,steps:L,preds:L,finis:L,t_{i}:L); + Object[] lArgs = + new Object[]{null, // placeholder for BasicType[] localTypes - will be added by LambdaFormEditor + names[GET_INITS], names[GET_STEPS], names[GET_PREDS], names[GET_FINIS], names[BOXED_ARGS]}; + names[LOOP] = new Name(NF_loop, lArgs); + + // t_{i+2}:I=MethodHandle.invokeBasic(unbox:L,t_{i+1}:L); + MethodHandle invokeBasicUnbox = MethodHandles.basicInvoker(MethodType.methodType(basicType.rtype(), Object.class)); + Object[] unboxArgs = new Object[]{names[GET_UNBOX_RESULT], names[LOOP]}; + names[UNBOX_RESULT] = new Name(invokeBasicUnbox, unboxArgs); + + lform = basicType.form().setCachedLambdaForm(MethodTypeForm.LF_LOOP, + new LambdaForm("loop", lambdaType.parameterCount(), names)); + } + + // BOXED_ARGS is the index into the names array where the loop idiom starts + return lform.editor().noteLoopLocalTypesForm(BOXED_ARGS, localVarTypes); } + /** - * This method embodies the most generic loop for use by {@link MethodHandles#loop(MethodHandle[][])}. A handle on - * it will be transformed into a handle on a concrete loop instantiation by {@link #makeLoop}. - * - * @param init loop-local variable initializers. - * @param step bodies. - * @param pred predicates. - * @param fini finalizers. - * @param varSize number of loop-local variables. - * @param nArgs number of arguments passed to the loop. - * @param args arguments to the loop invocation. - * - * @return the result of executing the loop. + * Intrinsified during LambdaForm compilation + * (see {@link InvokerBytecodeGenerator#emitLoop(int)}). */ - static Object looper(MethodHandle[] init, MethodHandle[] step, MethodHandle[] pred, MethodHandle[] fini, - int varSize, int nArgs, Object[] args) throws Throwable { + @LambdaForm.Hidden + static Object loop(BasicType[] localTypes, MethodHandle[] init, MethodHandle[] step, MethodHandle[] pred, + MethodHandle[] fini, Object... av) throws Throwable { + int varSize = (int) Stream.of(init).filter(h -> h.type().returnType() != void.class).count(); + int nArgs = init[0].type().parameterCount(); Object[] varsAndArgs = new Object[varSize + nArgs]; for (int i = 0, v = 0; i < init.length; ++i) { if (init[i].type().returnType() == void.class) { - init[i].invoke(args); + init[i].asFixedArity().invokeWithArguments(av); } else { - varsAndArgs[v++] = init[i].invoke(args); + varsAndArgs[v++] = init[i].asFixedArity().invokeWithArguments(av); } } - System.arraycopy(args, 0, varsAndArgs, varSize, nArgs); + System.arraycopy(av, 0, varsAndArgs, varSize, nArgs); final int nSteps = step.length; for (; ; ) { for (int i = 0, v = 0; i < nSteps; ++i) { @@ -1792,12 +1882,12 @@ MethodHandle s = step[i]; MethodHandle f = fini[i]; if (s.type().returnType() == void.class) { - s.invoke(varsAndArgs); + s.asFixedArity().invokeWithArguments(varsAndArgs); } else { - varsAndArgs[v++] = s.invoke(varsAndArgs); + varsAndArgs[v++] = s.asFixedArity().invokeWithArguments(varsAndArgs); } - if (!(boolean) p.invoke(varsAndArgs)) { - return f.invoke(varsAndArgs); + if (!(boolean) p.asFixedArity().invokeWithArguments(varsAndArgs)) { + return f.asFixedArity().invokeWithArguments(varsAndArgs); } } } @@ -1879,77 +1969,127 @@ * * @param target the target to execute in a {@code try-finally} block. * @param cleanup the cleanup to execute in the {@code finally} block. - * @param type the result type of the entire construct. + * @param rtype the result type of the entire construct. * @param argTypes the types of the arguments. * * @return a handle on the constructed {@code try-finally} block. */ - static MethodHandle makeTryFinally(MethodHandle target, MethodHandle cleanup, Class type, List> argTypes) { - MethodHandle tf = getConstantHandle(type == void.class ? MH_tryFinallyVoidExec : MH_tryFinallyExec); + static MethodHandle makeTryFinally(MethodHandle target, MethodHandle cleanup, Class rtype, List> argTypes) { + MethodType type = MethodType.methodType(rtype, argTypes); + LambdaForm form = makeTryFinallyForm(type.basicType()); - // Bind the statically known arguments. - tf = MethodHandles.insertArguments(tf, 0, target, cleanup); + // Prepare auxiliary method handles used during LambdaForm interpretation. + // Box arguments and wrap them into Object[]: ValueConversions.array(). + MethodType varargsType = type.changeReturnType(Object[].class); + MethodHandle collectArgs = varargsArray(type.parameterCount()).asType(varargsType); + MethodHandle unboxResult = unboxResultHandle(rtype); - // Turn the args array into an argument list. - tf = tf.asCollector(Object[].class, argTypes.size()); - - // Finally, make try-finally type. - MethodType tfType = MethodType.methodType(type, argTypes); - tf = tf.asType(tfType); - - return tf; + BoundMethodHandle.SpeciesData data = BoundMethodHandle.speciesData_LLLL(); + BoundMethodHandle mh; + try { + mh = (BoundMethodHandle) data.constructor().invokeBasic(type, form, (Object) target, (Object) cleanup, + (Object) collectArgs, (Object) unboxResult); + } catch (Throwable ex) { + throw uncaughtException(ex); + } + assert(mh.type() == type); + return mh; } /** - * A method that will be bound during construction of a {@code try-finally} handle with non-{@code void} return type - * by {@link MethodHandles#tryFinally(MethodHandle, MethodHandle)}. - * - * @param target the handle to wrap in a {@code try-finally} block. This will be bound. - * @param cleanup the handle to run in any case before returning. This will be bound. - * @param args the arguments to the call. These will remain as the argument list. - * - * @return whatever the execution of the {@code target} returned (it may have been modified by the execution of - * {@code cleanup}). - * @throws Throwable in case anything is thrown by the execution of {@code target}, the {@link Throwable} will be - * passed to the {@code cleanup} handle, which may decide to throw any exception it sees fit. + * The LambdaForm shape for the tryFinally combinator is as follows (assuming one reference parameter passed in + * {@code a1}, and a reference return type, with the return value represented by {@code t8}): + *

{@code
+     *  tryFinally=Lambda(a0:L,a1:L)=>{
+     *    t2:L=BoundMethodHandle$Species_LLLL.argL0(a0:L);  // target method handle
+     *    t3:L=BoundMethodHandle$Species_LLLL.argL1(a0:L);  // cleanup method handle
+     *    t4:L=BoundMethodHandle$Species_LLLL.argL2(a0:L);  // helper handle to box the arguments into an Object[]
+     *    t5:L=BoundMethodHandle$Species_LLLL.argL3(a0:L);  // helper handle to unbox the result
+     *    t6:L=MethodHandle.invokeBasic(t4:L,a1:L);         // box the arguments into an Object[]
+     *    t7:L=MethodHandleImpl.tryFinally(t2:L,t3:L,t6:L); // call the tryFinally executor
+     *    t8:L=MethodHandle.invokeBasic(t5:L,t7:L);t8:L}    // unbox the result; return the result
+     * }
+ *

+ * {@code argL0} and {@code argL1} are the target and cleanup method handles. + * {@code argL2} and {@code argL3} are auxiliary method handles: {@code argL2} boxes arguments and wraps them into + * {@code Object[]} ({@code ValueConversions.array()}), and {@code argL3} unboxes the result if necessary + * ({@code ValueConversions.unbox()}). + *

+ * Having {@code t4} and {@code t5} passed in via a BMH and not hardcoded in the lambda form allows to share lambda + * forms among tryFinally combinators with the same basic type. */ - static Object tryFinallyExecutor(MethodHandle target, MethodHandle cleanup, Object[] args) throws Throwable { + private static LambdaForm makeTryFinallyForm(MethodType basicType) { + MethodType lambdaType = basicType.invokerType(); + + LambdaForm lform = basicType.form().cachedLambdaForm(MethodTypeForm.LF_TF); + if (lform != null) { + return lform; + } + final int THIS_MH = 0; // the BMH_LLLL + final int ARG_BASE = 1; // start of incoming arguments + final int ARG_LIMIT = ARG_BASE + basicType.parameterCount(); + + int nameCursor = ARG_LIMIT; + final int GET_TARGET = nameCursor++; + final int GET_CLEANUP = nameCursor++; + final int GET_COLLECT_ARGS = nameCursor++; + final int GET_UNBOX_RESULT = nameCursor++; + final int BOXED_ARGS = nameCursor++; + final int TRY_FINALLY = nameCursor++; + final int UNBOX_RESULT = nameCursor++; + + Name[] names = arguments(nameCursor - ARG_LIMIT, lambdaType); + + BoundMethodHandle.SpeciesData data = BoundMethodHandle.speciesData_LLLL(); + names[THIS_MH] = names[THIS_MH].withConstraint(data); + names[GET_TARGET] = new Name(data.getterFunction(0), names[THIS_MH]); + names[GET_CLEANUP] = new Name(data.getterFunction(1), names[THIS_MH]); + names[GET_COLLECT_ARGS] = new Name(data.getterFunction(2), names[THIS_MH]); + names[GET_UNBOX_RESULT] = new Name(data.getterFunction(3), names[THIS_MH]); + + // t_{i}:L=MethodHandle.invokeBasic(collectArgs:L,a1:L,...); + MethodType collectArgsType = basicType.changeReturnType(Object.class); + MethodHandle invokeBasic = MethodHandles.basicInvoker(collectArgsType); + Object[] args = new Object[invokeBasic.type().parameterCount()]; + args[0] = names[GET_COLLECT_ARGS]; + System.arraycopy(names, ARG_BASE, args, 1, ARG_LIMIT-ARG_BASE); + names[BOXED_ARGS] = new Name(makeIntrinsic(invokeBasic, Intrinsic.TRY_FINALLY), args); + + // t_{i+1}:L=MethodHandleImpl.tryFinally(target:L,exType:L,catcher:L,t_{i}:L); + Object[] tfArgs = new Object[] {names[GET_TARGET], names[GET_CLEANUP], names[BOXED_ARGS]}; + names[TRY_FINALLY] = new Name(NF_tryFinally, tfArgs); + + // t_{i+2}:I=MethodHandle.invokeBasic(unbox:L,t_{i+1}:L); + MethodHandle invokeBasicUnbox = MethodHandles.basicInvoker(MethodType.methodType(basicType.rtype(), Object.class)); + Object[] unboxArgs = new Object[] {names[GET_UNBOX_RESULT], names[TRY_FINALLY]}; + names[UNBOX_RESULT] = new Name(invokeBasicUnbox, unboxArgs); + + lform = new LambdaForm("tryFinally", lambdaType.parameterCount(), names); + + return basicType.form().setCachedLambdaForm(MethodTypeForm.LF_TF, lform); + } + + /** + * Intrinsified during LambdaForm compilation + * (see {@link InvokerBytecodeGenerator#emitTryFinally emitTryFinally}). + */ + @LambdaForm.Hidden + static Object tryFinally(MethodHandle target, MethodHandle cleanup, Object... av) throws Throwable { Throwable t = null; Object r = null; try { - r = target.invoke(args); + // Use asFixedArity() to avoid unnecessary boxing of last argument for VarargsCollector case. + r = target.asFixedArity().invokeWithArguments(av); } catch (Throwable thrown) { t = thrown; throw t; } finally { - r = cleanup.invoke(t, r, args); + Object[] args = target.type().returnType() == void.class ? prepend(av, t) : prepend(av, t, r); + r = cleanup.asFixedArity().invokeWithArguments(args); } return r; } - /** - * A method that will be bound during construction of a {@code try-finally} handle with {@code void} return type by - * {@link MethodHandles#tryFinally(MethodHandle, MethodHandle)}. - * - * @param target the handle to wrap in a {@code try-finally} block. This will be bound. - * @param cleanup the handle to run in any case before returning. This will be bound. - * @param args the arguments to the call. These will remain as the argument list. - * - * @throws Throwable in case anything is thrown by the execution of {@code target}, the {@link Throwable} will be - * passed to the {@code cleanup} handle, which may decide to throw any exception it sees fit. - */ - static void tryFinallyVoidExecutor(MethodHandle target, MethodHandle cleanup, Object[] args) throws Throwable { - Throwable t = null; - try { - target.invoke(args); - } catch (Throwable thrown) { - t = thrown; - throw t; - } finally { - cleanup.invoke(t, args); - } - } - // Indexes into constant method handles: static final int MH_cast = 0, @@ -1958,17 +2098,14 @@ MH_fillNewTypedArray = 3, MH_fillNewArray = 4, MH_arrayIdentity = 5, - MH_looper = 6, - MH_countedLoopPred = 7, - MH_countedLoopStep = 8, - MH_iteratePred = 9, - MH_initIterator = 10, - MH_iterateNext = 11, - MH_tryFinallyExec = 12, - MH_tryFinallyVoidExec = 13, - MH_decrementCounter = 14, - MH_Array_newInstance = 15, - MH_LIMIT = 16; + MH_countedLoopPred = 6, + MH_countedLoopStep = 7, + MH_iteratePred = 8, + MH_initIterator = 9, + MH_iterateNext = 10, + MH_decrementCounter = 11, + MH_Array_newInstance = 12, + MH_LIMIT = 13; static MethodHandle getConstantHandle(int idx) { MethodHandle handle = HANDLES[idx]; @@ -2013,10 +2150,6 @@ return makeIntrinsic(IMPL_LOOKUP.findStatic(MethodHandleImpl.class, "selectAlternative", MethodType.methodType(MethodHandle.class, boolean.class, MethodHandle.class, MethodHandle.class)), Intrinsic.SELECT_ALTERNATIVE); - case MH_looper: - return IMPL_LOOKUP.findStatic(MethodHandleImpl.class, "looper", MethodType.methodType(Object.class, - MethodHandle[].class, MethodHandle[].class, MethodHandle[].class, MethodHandle[].class, - int.class, int.class, Object[].class)); case MH_countedLoopPred: return IMPL_LOOKUP.findStatic(MethodHandleImpl.class, "countedLoopPredicate", MethodType.methodType(boolean.class, int.class, int.class)); @@ -2032,12 +2165,6 @@ case MH_iterateNext: return IMPL_LOOKUP.findStatic(MethodHandleImpl.class, "iterateNext", MethodType.methodType(Object.class, Iterator.class)); - case MH_tryFinallyExec: - return IMPL_LOOKUP.findStatic(MethodHandleImpl.class, "tryFinallyExecutor", - MethodType.methodType(Object.class, MethodHandle.class, MethodHandle.class, Object[].class)); - case MH_tryFinallyVoidExec: - return IMPL_LOOKUP.findStatic(MethodHandleImpl.class, "tryFinallyVoidExecutor", - MethodType.methodType(void.class, MethodHandle.class, MethodHandle.class, Object[].class)); case MH_decrementCounter: return IMPL_LOOKUP.findStatic(MethodHandleImpl.class, "decrementCounter", MethodType.methodType(int.class, int.class)); diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/java.base/share/classes/java/lang/invoke/MethodHandles.java --- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandles.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandles.java Tue Jul 05 13:50:37 2016 -0700 @@ -4307,7 +4307,7 @@ assert Stream.of(fstep, fpred, ffini).flatMap(List::stream).map(MethodHandle::type).map(MethodType::parameterList). allMatch(pl -> pl.equals(commonParameterSequence)); - return MethodHandleImpl.makeLoop(loopReturnType, commonSuffix, commonPrefix, finit, fstep, fpred, ffini); + return MethodHandleImpl.makeLoop(loopReturnType, commonSuffix, finit, fstep, fpred, ffini); } private static List fillParameterTypes(List hs, final List> targetParams) { @@ -4814,10 +4814,8 @@ // The cleanup parameter list (minus the leading Throwable and result parameters) must be a sublist of the // target parameter list. cleanup = dropArgumentsToMatch(cleanup, (rtype == void.class ? 1 : 2), targetParamTypes, 0); - MethodHandle aTarget = target.asSpreader(Object[].class, target.type().parameterCount()); - MethodHandle aCleanup = cleanup.asSpreader(Object[].class, targetParamTypes.size()); - return MethodHandleImpl.makeTryFinally(aTarget, aCleanup, rtype, targetParamTypes); + return MethodHandleImpl.makeTryFinally(target, cleanup, rtype, targetParamTypes); } /** diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/java.base/share/classes/java/lang/invoke/MethodTypeForm.java --- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodTypeForm.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodTypeForm.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved. * 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,8 +27,10 @@ import jdk.internal.vm.annotation.Stable; import sun.invoke.util.Wrapper; + import java.lang.ref.SoftReference; -import static java.lang.invoke.MethodHandleStatics.*; + +import static java.lang.invoke.MethodHandleStatics.newIllegalArgumentException; /** * Shared information for a group of method types, which differ @@ -81,7 +83,9 @@ LF_MH_LINKER = 15, // linkToCallSite_MH LF_GWC = 16, // guardWithCatch (catchException) LF_GWT = 17, // guardWithTest - LF_LIMIT = 18; + LF_TF = 18, // tryFinally + LF_LOOP = 19, // loop + LF_LIMIT = 20; /** Return the type corresponding uniquely (1-1) to this MT-form. * It might have any primitive returns or arguments, but will have no references except Object. diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/java.base/share/classes/java/security/Identity.java --- a/jdk/src/java.base/share/classes/java/security/Identity.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/java.base/share/classes/java/security/Identity.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -52,11 +52,12 @@ * * @author Benjamin Renaud * @deprecated This class is no longer used. Its functionality has been - * replaced by {@code java.security.KeyStore}, the - * {@code java.security.cert} package, and - * {@code java.security.Principal}. + * replaced by {@link java.security.KeyStore}, the + * {@link java.security.cert} package, and + * {@link java.security.Principal}. + * This class is subject to removal in a future version of Java SE. */ -@Deprecated +@Deprecated(since="1.2", forRemoval=true) public abstract class Identity implements Principal, Serializable { /** use serialVersionUID from JDK 1.1.x for interoperability */ diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/java.base/share/classes/java/security/IdentityScope.java --- a/jdk/src/java.base/share/classes/java/security/IdentityScope.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/java.base/share/classes/java/security/IdentityScope.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -57,11 +57,15 @@ * @author Benjamin Renaud * * @deprecated This class is no longer used. Its functionality has been - * replaced by {@code java.security.KeyStore}, the - * {@code java.security.cert} package, and - * {@code java.security.Principal}. + * replaced by {@link java.security.KeyStore}, the + * {@link java.security.cert} package, and + * {@link java.security.Principal}. + * This class is subject to removal in a future version of Java SE. + * + * Note that the security property {@code policy.ignoreIdentityScope} + * is only applicable to these APIs and is also a candidate for removal. */ -@Deprecated +@Deprecated(since="1.2", forRemoval=true) public abstract class IdentityScope extends Identity { diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/java.base/share/classes/java/security/Signer.java --- a/jdk/src/java.base/share/classes/java/security/Signer.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/java.base/share/classes/java/security/Signer.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2016, Oracle and/or its affiliates. All rights reserved. * 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,11 +40,12 @@ * @author Benjamin Renaud * * @deprecated This class is no longer used. Its functionality has been - * replaced by {@code java.security.KeyStore}, the - * {@code java.security.cert} package, and - * {@code java.security.Principal}. + * replaced by {@link java.security.KeyStore}, the + * {@link java.security.cert} package, and + * {@link java.security.Principal}. + * This class is subject to removal in a future version of Java SE. */ -@Deprecated +@Deprecated(since="1.2", forRemoval=true) public abstract class Signer extends Identity { private static final long serialVersionUID = -1763464102261361480L; diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/java.base/share/classes/java/time/Instant.java --- a/jdk/src/java.base/share/classes/java/time/Instant.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/java.base/share/classes/java/time/Instant.java Tue Jul 05 13:50:37 2016 -0700 @@ -561,7 +561,6 @@ case NANO_OF_SECOND: return nanos; case MICRO_OF_SECOND: return nanos / 1000; case MILLI_OF_SECOND: return nanos / 1000_000; - case INSTANT_SECONDS: INSTANT_SECONDS.checkValidIntValue(seconds); } throw new UnsupportedTemporalTypeException("Unsupported field: " + field); } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/java.base/share/classes/sun/launcher/LauncherHelper.java --- a/jdk/src/java.base/share/classes/sun/launcher/LauncherHelper.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/java.base/share/classes/sun/launcher/LauncherHelper.java Tue Jul 05 13:50:37 2016 -0700 @@ -584,15 +584,17 @@ Class mainClass = null; ClassLoader scl = ClassLoader.getSystemClassLoader(); try { - mainClass = scl.loadClass(cn); + mainClass = Class.forName(cn, false, scl); } catch (NoClassDefFoundError | ClassNotFoundException cnfe) { if (System.getProperty("os.name", "").contains("OS X") && Normalizer.isNormalized(cn, Normalizer.Form.NFD)) { try { - // On Mac OS X since all names with diacretic symbols are given as decomposed it - // is possible that main class name comes incorrectly from the command line - // and we have to re-compose it - mainClass = scl.loadClass(Normalizer.normalize(cn, Normalizer.Form.NFC)); + // On Mac OS X since all names with diacretic symbols are + // given as decomposed it is possible that main class name + // comes incorrectly from the command line and we have + // to re-compose it + String ncn = Normalizer.normalize(cn, Normalizer.Form.NFC); + mainClass = Class.forName(ncn, false, scl); } catch (NoClassDefFoundError | ClassNotFoundException cnfe1) { abort(cnfe, "java.launcher.cls.error1", cn); } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/java.base/share/classes/sun/launcher/resources/launcher.properties --- a/jdk/src/java.base/share/classes/sun/launcher/resources/launcher.properties Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/java.base/share/classes/sun/launcher/resources/launcher.properties Tue Jul 05 13:50:37 2016 -0700 @@ -141,7 +141,7 @@ The following options are Mac OS X specific:\n\ \ -XstartOnFirstThread\n\ \ run the main() method on the first (AppKit) thread\n\ -\ -Xdock:name="\n\ +\ -Xdock:name=\n\ \ override default application name displayed in dock\n\ \ -Xdock:icon=\n\ \ override default icon displayed in dock\n\n diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/java.base/share/classes/sun/text/resources/JavaTimeSupplementary.java --- a/jdk/src/java.base/share/classes/sun/text/resources/JavaTimeSupplementary.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/java.base/share/classes/sun/text/resources/JavaTimeSupplementary.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,7 +72,53 @@ public class JavaTimeSupplementary extends OpenListResourceBundle { @Override protected final Object[][] getContents() { - final String[] rocMonthNarrows = { + final String[] sharedQuarterNames = { + "Q1", + "Q2", + "Q3", + "Q4", + }; + + final String[] sharedQuarterNarrows = { + "1", + "2", + "3", + "4", + }; + + final String[] sharedDatePatterns = { + "GGGG y MMMM d, EEEE", + "GGGG y MMMM d", + "GGGG y MMM d", + "G y-MM-dd", + }; + + final String[] sharedDayNames = { + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat", + }; + + final String[] sharedDayNarrows = { + "S", + "M", + "T", + "W", + "T", + "F", + "S", + }; + + final String[] sharedEras = { + "", + "AH", + }; + + final String[] sharedMonthNarrows = { "1", "2", "3", @@ -87,31 +133,62 @@ "12", "", }; + + final String[] sharedTimePatterns = { + "HH:mm:ss zzzz", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + }; + + final String[] sharedAmPmMarkers = { + "AM", + "PM", + }; + + final String[] sharedJavaTimeDatePatterns = { + "G y MMMM d, EEEE", + "G y MMMM d", + "G y MMM d", + "GGGGG y-MM-dd", + }; + + final String[] sharedJavaTimeLongEras = { + "", + "Meiji", + "Taisho", + "Showa", + "Heisei", + }; + + final String[] sharedShortEras = { + "Before R.O.C.", + "R.O.C.", + }; + + final String[] sharedMonthNames = { + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec", + "", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "Q1", - "Q2", - "Q3", - "Q4", - } - }, + sharedQuarterNames }, { "QuarterNames", - new String[] { - "Q1", - "Q2", - "Q3", - "Q4", - } - }, + sharedQuarterNames }, { "QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, + sharedQuarterNarrows }, { "field.dayperiod", "Dayperiod" }, { "field.era", @@ -133,52 +210,15 @@ { "field.zone", "Zone" }, { "islamic.DatePatterns", - new String[] { - "GGGG y MMMM d, EEEE", - "GGGG y MMMM d", - "GGGG y MMM d", - "G y-MM-dd", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat", - } - }, + sharedDayNames }, { "islamic.DayNames", - new String[] { - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "S", - "M", - "T", - "W", - "T", - "F", - "S", - } - }, + sharedDayNarrows }, { "islamic.Eras", - new String[] { - "", - "AH", - } - }, + sharedEras }, { "islamic.MonthAbbreviations", new String[] { "Muh.", @@ -214,63 +254,23 @@ } }, { "islamic.MonthNarrows", - rocMonthNarrows }, + sharedMonthNarrows }, { "islamic.QuarterNames", - new String[] { - "Q1", - "Q2", - "Q3", - "Q4", - } - }, + sharedQuarterNames }, { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, + sharedQuarterNarrows }, { "islamic.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedTimePatterns }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "AM", - "PM", - } - }, + sharedAmPmMarkers }, { "islamic.long.Eras", - new String[] { - "", - "AH", - } - }, + sharedEras }, { "islamic.narrow.Eras", - new String[] { - "", - "AH", - } - }, + sharedEras }, { "islamic.short.Eras", - new String[] { - "", - "AH", - } - }, + sharedEras }, { "java.time.buddhist.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "G y MMM d", - "GGGGG y-MM-dd", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.buddhist.long.Eras", new String[] { "BC", @@ -284,13 +284,7 @@ } }, { "java.time.islamic.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "G y MMM d", - "GGGGG y-MM-dd", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", new String[] { "G y MMMM d (EEEE)", @@ -300,23 +294,9 @@ } }, { "java.time.japanese.long.Eras", - new String[] { - "", - "Meiji", - "Taisho", - "Showa", - "Heisei", - } - }, + sharedJavaTimeLongEras }, { "java.time.japanese.short.Eras", - new String[] { - "", - "Meiji", - "Taisho", - "Showa", - "Heisei", - } - }, + sharedJavaTimeLongEras }, { "java.time.long.Eras", new String[] { "BCE", @@ -324,13 +304,7 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "G y MMM d", - "GGGGG y-MM-dd", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "BC", @@ -338,137 +312,37 @@ } }, { "roc.AmPmMarkers", - new String[] { - "AM", - "PM", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "GGGG y MMMM d, EEEE", - "GGGG y MMMM d", - "GGGG y MMM d", - "G y-MM-dd", - } - }, + sharedDatePatterns }, { "roc.DayNames", - new String[] { - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "S", - "M", - "T", - "W", - "T", - "F", - "S", - } - }, + sharedDayNarrows }, { "roc.Eras", - new String[] { - "Before R.O.C.", - "R.O.C.", - } - }, + sharedShortEras }, { "roc.MonthAbbreviations", - new String[] { - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec", - "", - } - }, + sharedMonthNames }, { "roc.MonthNames", - new String[] { - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec", - "", - } - }, + sharedMonthNames }, { "roc.MonthNarrows", - rocMonthNarrows }, + sharedMonthNarrows }, { "roc.QuarterNames", - new String[] { - "Q1", - "Q2", - "Q3", - "Q4", - } - }, + sharedQuarterNames }, { "roc.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, + sharedQuarterNarrows }, { "roc.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedTimePatterns }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "AM", - "PM", - } - }, + sharedAmPmMarkers }, { "roc.long.Eras", - new String[] { - "Before R.O.C.", - "R.O.C.", - } - }, + sharedShortEras }, { "roc.narrow.AmPmMarkers", - new String[] { - "AM", - "PM", - } - }, + sharedAmPmMarkers }, { "roc.narrow.Eras", - new String[] { - "Before R.O.C.", - "R.O.C.", - } - }, + sharedShortEras }, { "roc.short.Eras", - new String[] { - "Before R.O.C.", - "R.O.C.", - } - }, + sharedShortEras }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/java.base/share/classes/sun/text/resources/JavaTimeSupplementary_en.java --- a/jdk/src/java.base/share/classes/sun/text/resources/JavaTimeSupplementary_en.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/java.base/share/classes/sun/text/resources/JavaTimeSupplementary_en.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,15 +72,64 @@ public class JavaTimeSupplementary_en extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterNames = { + "1st quarter", + "2nd quarter", + "3rd quarter", + "4th quarter", + }; + + final String[] sharedDatePatterns = { + "EEEE, MMMM d, y GGGG", + "MMMM d, y GGGG", + "MMM d, y GGGG", + "M/d/y G", + }; + + final String[] sharedDayNames = { + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday", + }; + + final String[] sharedQuarterAbbreviations = { + "Q1", + "Q2", + "Q3", + "Q4", + }; + + final String[] sharedTimePatterns = { + "h:mm:ss a zzzz", + "h:mm:ss a z", + "h:mm:ss a", + "h:mm a", + }; + + final String[] sharedNarrowAmPmMarkers = { + "a", + "p", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, MMMM d, y G", + "MMMM d, y G", + "MMM d, y G", + "M/d/y GGGGG", + }; + + final String[] sharedEras = { + "Before R.O.C.", + "Minguo", + }; + return new Object[][] { { "QuarterNames", - new String[] { - "1st quarter", - "2nd quarter", - "3rd quarter", - "4th quarter", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "Buddhist Calendar" }, { "calendarname.gregorian", @@ -124,62 +173,19 @@ } }, { "islamic.DatePatterns", - new String[] { - "EEEE, MMMM d, y GGGG", - "MMMM d, y GGGG", - "MMM d, y GGGG", - "M/d/y G", - } - }, + sharedDatePatterns }, { "islamic.DayNames", - new String[] { - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday", - } - }, + sharedDayNames }, { "islamic.QuarterAbbreviations", - new String[] { - "Q1", - "Q2", - "Q3", - "Q4", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "1st quarter", - "2nd quarter", - "3rd quarter", - "4th quarter", - } - }, + sharedQuarterNames }, { "islamic.TimePatterns", - new String[] { - "h:mm:ss a zzzz", - "h:mm:ss a z", - "h:mm:ss a", - "h:mm a", - } - }, + sharedTimePatterns }, { "islamic.narrow.AmPmMarkers", - new String[] { - "a", - "p", - } - }, + sharedNarrowAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE, MMMM d, y G", - "MMMM d, y G", - "MMM d, y G", - "M/d/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.buddhist.short.Eras", new String[] { "BC", @@ -187,21 +193,9 @@ } }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE, MMMM d, y G", - "MMMM d, y G", - "MMM d, y G", - "M/d/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE, MMMM d, y G", - "MMMM d, y G", - "MMM d, y G", - "M/d/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.long.Eras", new String[] { "Before Christ", @@ -209,21 +203,9 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE, MMMM d, y G", - "MMMM d, y G", - "MMM d, y G", - "M/d/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "roc.DatePatterns", - new String[] { - "EEEE, MMMM d, y GGGG", - "MMMM d, y GGGG", - "MMM d, y GGGG", - "M/d/y G", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", new String[] { "Sun", @@ -236,22 +218,9 @@ } }, { "roc.DayNames", - new String[] { - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday", - } - }, + sharedDayNames }, { "roc.Eras", - new String[] { - "Before R.O.C.", - "Minguo", - } - }, + sharedEras }, { "roc.MonthNames", new String[] { "January", @@ -287,53 +256,19 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "Q1", - "Q2", - "Q3", - "Q4", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "1st quarter", - "2nd quarter", - "3rd quarter", - "4th quarter", - } - }, + sharedQuarterNames }, { "roc.TimePatterns", - new String[] { - "h:mm:ss a zzzz", - "h:mm:ss a z", - "h:mm:ss a", - "h:mm a", - } - }, + sharedTimePatterns }, { "roc.long.Eras", - new String[] { - "Before R.O.C.", - "Minguo", - } - }, + sharedEras }, { "roc.narrow.AmPmMarkers", - new String[] { - "a", - "p", - } - }, + sharedNarrowAmPmMarkers }, { "roc.narrow.Eras", - new String[] { - "Before R.O.C.", - "Minguo", - } - }, + sharedEras }, { "roc.short.Eras", - new String[] { - "Before R.O.C.", - "Minguo", - } - }, + sharedEras }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/java.base/share/classes/sun/util/resources/LocaleData.java --- a/jdk/src/java.base/share/classes/sun/util/resources/LocaleData.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/java.base/share/classes/sun/util/resources/LocaleData.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2016, Oracle and/or its affiliates. All rights reserved. * 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,6 +228,9 @@ private static class LocaleDataStrategy implements Bundles.Strategy { private static final LocaleDataStrategy INSTANCE = new LocaleDataStrategy(); + // TODO: avoid hard-coded Locales + private static Set JAVA_BASE_LOCALES + = Set.of(Locale.ROOT, Locale.ENGLISH, Locale.US, new Locale("en", "US", "POSIX")); private LocaleDataStrategy() { } @@ -275,11 +278,7 @@ } boolean inJavaBaseModule(String baseName, Locale locale) { - // TODO: avoid hard-coded Locales - return locale.equals(Locale.ROOT) || - (locale.getLanguage() == "en" && - (locale.getCountry().isEmpty() || - locale.getCountry() == "US")); + return JAVA_BASE_LOCALES.contains(locale); } @Override @@ -313,6 +312,9 @@ private static class SupplementaryStrategy extends LocaleDataStrategy { private static final SupplementaryStrategy INSTANCE = new SupplementaryStrategy(); + // TODO: avoid hard-coded Locales + private static Set JAVA_BASE_LOCALES + = Set.of(Locale.ROOT, Locale.ENGLISH, Locale.US); private SupplementaryStrategy() { } @@ -332,8 +334,7 @@ @Override boolean inJavaBaseModule(String baseName, Locale locale) { - // TODO: avoid hard-coded Locales - return locale.equals(Locale.ROOT) || locale.getLanguage() == "en"; + return JAVA_BASE_LOCALES.contains(locale); } } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/java.base/share/conf/security/java.security --- a/jdk/src/java.base/share/conf/security/java.security Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/java.base/share/conf/security/java.security Tue Jul 05 13:50:37 2016 -0700 @@ -116,15 +116,7 @@ # Example: # jdk.security.provider.preferred=AES/GCM/NoPadding:SunJCE, \ # MessageDigest.SHA-256:SUN, Group.HmacSHA2:SunJCE -#ifdef solaris-sparc -jdk.security.provider.preferred=AES:SunJCE, SHA1:SUN, Group.SHA2:SUN, \ - HmacSHA1:SunJCE, Group.HmacSHA2:SunJCE -#endif -#ifdef solaris-x86 -jdk.security.provider.preferred=AES:SunJCE, SHA1:SUN, Group.SHA2:SUN, \ - HmacSHA1:SunJCE, Group.HmacSHA2:SunJCE, RSA:SunRsaSign, \ - SHA1withRSA:SunRsaSign, Group.SHA2RSA:SunRsaSign -#endif +#jdk.security.provider.preferred= # diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/java.base/share/native/libjli/java.c --- a/jdk/src/java.base/share/native/libjli/java.c Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/java.base/share/native/libjli/java.c Tue Jul 05 13:50:37 2016 -0700 @@ -435,7 +435,8 @@ ret = 1; /* - * Get the application's main class. + * Get the application's main class. It also checks if the main + * method exists. * * See bugid 5030265. The Main-Class name has already been parsed * from the manifest, but not parsed properly for UTF-8 support. @@ -467,6 +468,16 @@ */ appClass = GetApplicationClass(env); NULL_CHECK_RETURN_VALUE(appClass, -1); + + /* Build platform specific argument array */ + mainArgs = CreateApplicationArgs(env, argv, argc); + CHECK_EXCEPTION_NULL_LEAVE(mainArgs); + + if (dryRun) { + ret = 0; + LEAVE(); + } + /* * PostJVMInit uses the class name as the application name for GUI purposes, * for example, on OSX this sets the application name in the menu bar for @@ -476,6 +487,7 @@ */ PostJVMInit(env, appClass, vm); CHECK_EXCEPTION_LEAVE(1); + /* * The LoadMainClass not only loads the main class, it will also ensure * that the main method's signature is correct, therefore further checking @@ -486,22 +498,15 @@ "([Ljava/lang/String;)V"); CHECK_EXCEPTION_NULL_LEAVE(mainID); - /* Build platform specific argument array */ - mainArgs = CreateApplicationArgs(env, argv, argc); - CHECK_EXCEPTION_NULL_LEAVE(mainArgs); + /* Invoke main method. */ + (*env)->CallStaticVoidMethod(env, mainClass, mainID, mainArgs); - if (dryRun) { - ret = 0; - } else { - /* Invoke main method. */ - (*env)->CallStaticVoidMethod(env, mainClass, mainID, mainArgs); + /* + * The launcher's exit code (in the absence of calls to + * System.exit) will be non-zero if main threw an exception. + */ + ret = (*env)->ExceptionOccurred(env) == NULL ? 0 : 1; - /* - * The launcher's exit code (in the absence of calls to - * System.exit) will be non-zero if main threw an exception. - */ - ret = (*env)->ExceptionOccurred(env) == NULL ? 0 : 1; - } LEAVE(); } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/java.base/windows/conf/tzmappings --- a/jdk/src/java.base/windows/conf/tzmappings Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/java.base/windows/conf/tzmappings Tue Jul 05 13:50:37 2016 -0700 @@ -164,39 +164,63 @@ GMT Standard Time:88,89::GMT: Greenwich:88,89::GMT: Greenwich Standard Time:88,89::GMT: -Argentina Standard Time:900,900::America/Buenos_Aires: -Azerbaijan Standard Time:901,901:AZ:Asia/Baku: -Bangladesh Standard Time:902,902::Asia/Dhaka: -Central Brazilian Standard Time:903,903:BR:America/Cuiaba: -Central Standard Time (Mexico):904,904::America/Mexico_City: -Georgian Standard Time:905,905:GE:Asia/Tbilisi: -Jordan Standard Time:906,906:JO:Asia/Amman: -Kamchatka Standard Time:907,907:RU:Asia/Kamchatka: -Mauritius Standard Time:908,908:MU:Indian/Mauritius: -Middle East Standard Time:909,909:LB:Asia/Beirut: -Montevideo Standard Time:910,910:UY:America/Montevideo: -Morocco Standard Time:911,911:MA:Africa/Casablanca: -Mountain Standard Time (Mexico):912,912:MX:America/Chihuahua: -Namibia Standard Time:913,913:NA:Africa/Windhoek: -Pacific Standard Time (Mexico):914,914:MX:America/Tijuana: -Pakistan Standard Time:915,915::Asia/Karachi: -Paraguay Standard Time:916,916:PY:America/Asuncion: -Syria Standard Time:917,917:SY:Asia/Damascus: -UTC:918,918::UTC: -UTC+12:919,919::GMT+1200: -UTC-02:920,920::GMT-0200: -UTC-11:921,921::GMT-1100: -Ulaanbaatar Standard Time:922,922::Asia/Ulaanbaatar: -Venezuela Standard Time:923,923::America/Caracas: -Magadan Standard Time:924,924::Asia/Magadan: -Kaliningrad Standard Time:925,925:RU:Europe/Kaliningrad: -Turkey Standard Time:926,926::Asia/Istanbul: -Bahia Standard Time:927,927::America/Bahia: -Libya Standard Time:928,928:LY:Africa/Tripoli: -Belarus Standard Time:929,929:BY:Europe/Minsk: -Line Islands Standard Time:930,930::Pacific/Kiritimati: -Russia Time Zone 10:931,931::Asia/Srednekolymsk: -Russia Time Zone 11:932,932::Asia/Anadyr: -Russia Time Zone 3:933,933::Europe/Samara: -Western Brazilian Standard Time:934,934:BR:America/Rio_Branco: -Armenian Standard Time:935,935:AM:Asia/Yerevan: +Aleutian Standard Time:900,900:US:America/Adak: +Altai Standard Time:901,901::Asia/Barnaul: +Argentina Standard Time:902,902::America/Buenos_Aires: +Armenian Standard Time:903,903:AM:Asia/Yerevan: +Astrakhan Standard Time:904,904::Europe/Astrakhan: +Aus Central W. Standard Time:905,905::Australia/Eucla: +Azerbaijan Standard Time:906,906:AZ:Asia/Baku: +Bahia Standard Time:907,907::America/Bahia: +Bangladesh Standard Time:908,908::Asia/Dhaka: +Belarus Standard Time:909,909:BY:Europe/Minsk: +Bougainville Standard Time:910,910::Pacific/Bougainville: +Central Brazilian Standard Time:911,911:BR:America/Cuiaba: +Central Standard Time (Mexico):912,912::America/Mexico_City: +Chatham Islands Standard Time:913,913::Pacific/Chatham: +Cuba Standard Time:914,914:CU:America/Havana: +Easter Island Standard Time:915,915:CL:Pacific/Easter: +Eastern Standard Time (Mexico):916,916::America/Cancun: +Georgian Standard Time:917,917:GE:Asia/Tbilisi: +Haiti Standard Time:918,918:HT:America/Port-au-Prince: +Jordan Standard Time:919,919:JO:Asia/Amman: +Kaliningrad Standard Time:920,920:RU:Europe/Kaliningrad: +Kamchatka Standard Time:921,921:RU:Asia/Kamchatka: +Libya Standard Time:922,922:LY:Africa/Tripoli: +Line Islands Standard Time:923,923::Pacific/Kiritimati: +Lord Howe Standard Time:924,924::Australia/Lord_Howe: +Magadan Standard Time:925,925::Asia/Magadan: +Marquesas Standard Time:926,926::Pacific/Marquesas: +Mauritius Standard Time:927,927:MU:Indian/Mauritius: +Middle East Standard Time:928,928:LB:Asia/Beirut: +Montevideo Standard Time:929,929:UY:America/Montevideo: +Morocco Standard Time:930,930:MA:Africa/Casablanca: +Mountain Standard Time (Mexico):931,931:MX:America/Chihuahua: +Namibia Standard Time:932,932:NA:Africa/Windhoek: +Norfolk Standard Time:933,933::Pacific/Norfolk: +North Korea Standard Time:934,934:KP:Asia/Pyongyang: +Pacific Standard Time (Mexico):935,935:MX:America/Tijuana: +Pakistan Standard Time:936,936::Asia/Karachi: +Paraguay Standard Time:937,937:PY:America/Asuncion: +Russia Time Zone 10:938,938::Asia/Srednekolymsk: +Russia Time Zone 11:939,939::Asia/Anadyr: +Russia Time Zone 3:940,940::Europe/Samara: +Saint Pierre Standard Time:941,941:PM:America/Miquelon: +Sakhalin Standard Time:942,942::Asia/Sakhalin: +Syria Standard Time:943,943:SY:Asia/Damascus: +Tocantins Standard Time:944,944::America/Araguaina: +Tomsk Standard Time:945,945::Asia/Tomsk: +Transbaikal Standard Time:946,946::Asia/Chita: +Turkey Standard Time:947,947::Asia/Istanbul: +Turks And Caicos Standard Time:948,948:TC:America/Grand_Turk: +UTC+12:949,949::GMT+1200: +UTC-02:950,950::GMT-0200: +UTC-08:951,951::GMT-0800: +UTC-09:952,952::GMT-0900: +UTC-11:953,953::GMT-1100: +UTC:954,954::UTC: +Ulaanbaatar Standard Time:955,955::Asia/Ulaanbaatar: +Venezuela Standard Time:956,956::America/Caracas: +W. Mongolia Standard Time:957,957::Asia/Hovd: +West Bank Standard Time:958,958::Asia/Gaza: +Western Brazilian Standard Time:959,959:BR:America/Rio_Branco: diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/java.naming/share/classes/com/sun/jndi/ldap/pool/Pool.java --- a/jdk/src/java.naming/share/classes/com/sun/jndi/ldap/pool/Pool.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/java.naming/share/classes/com/sun/jndi/ldap/pool/Pool.java Tue Jul 05 13:50:37 2016 -0700 @@ -118,7 +118,11 @@ PooledConnectionFactory factory) throws NamingException { d("get(): ", id); - d("size: ", map.size()); + if (debug) { + synchronized (map) { + d("size: ", map.size()); + } + } expungeStaleConnections(); @@ -141,10 +145,9 @@ // Keep the weak reference through the element of a linked list weakRefs.add(weakRef); } + d("get(): size after: ", map.size()); } - d("get(): size after: ", map.size()); - return conns.get(timeout, factory); // get one connection from list } @@ -209,19 +212,24 @@ out.println("maximum pool size: " + maxSize); out.println("preferred pool size: " + prefSize); out.println("initial pool size: " + initSize); - out.println("current pool size: " + map.size()); + + synchronized (map) { + out.println("current pool size: " + map.size()); - for (Map.Entry entry : map.entrySet()) { - id = entry.getKey(); - conns = entry.getValue().getConnections(); - out.println(" " + id + ":" + conns.getStats()); + for (Map.Entry entry : map.entrySet()) { + id = entry.getKey(); + conns = entry.getValue().getConnections(); + out.println(" " + id + ":" + conns.getStats()); + } } out.println("====== Pool end ====================="); } public String toString() { - return super.toString() + " " + map.toString(); + synchronized (map) { + return super.toString() + " " + map.toString(); + } } private void d(String msg, int i) { diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ar.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ar.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ar.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,35 +72,121 @@ public class JavaTimeSupplementary_ar extends OpenListResourceBundle { @Override protected final Object[][] getContents() { - final String[] javatimebuddhistlongEras = { + final String[] sharedQuarterNames = { + "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0623\u0648\u0644", + "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0644\u062b", + "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0631\u0627\u0628\u0639", + }; + + final String[] sharedQuarterNarrows = { + "\u0661", + "\u0662", + "\u0663", + "\u0664", + }; + + final String[] sharedAmPmMarkers = { + "\u0635", + "\u0645", + }; + + final String[] sharedDayNames = { + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a", + }; + + final String[] sharedDayNarrows = { + "\u062d", + "\u0646", + "\u062b", + "\u0631", + "\u062e", + "\u062c", + "\u0633", + }; + + final String[] sharedEras = { + "", + "\u0647\u0640", + }; + + final String[] sharedMonthNames = { + "\u0645\u062d\u0631\u0645", + "\u0635\u0641\u0631", + "\u0631\u0628\u064a\u0639 \u0627\u0644\u0623\u0648\u0644", + "\u0631\u0628\u064a\u0639 \u0627\u0644\u0622\u062e\u0631", + "\u062c\u0645\u0627\u062f\u0649 \u0627\u0644\u0623\u0648\u0644\u0649", + "\u062c\u0645\u0627\u062f\u0649 \u0627\u0644\u0622\u062e\u0631\u0629", + "\u0631\u062c\u0628", + "\u0634\u0639\u0628\u0627\u0646", + "\u0631\u0645\u0636\u0627\u0646", + "\u0634\u0648\u0627\u0644", + "\u0630\u0648 \u0627\u0644\u0642\u0639\u062f\u0629", + "\u0630\u0648 \u0627\u0644\u062d\u062c\u0629", + "", + }; + + final String[] sharedTimePatterns = { + "h:mm:ss a zzzz", + "h:mm:ss a z", + "h:mm:ss a", + "h:mm a", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE\u060c d MMMM\u060c y G", + "d MMMM\u060c y G", + "dd\u200f/MM\u200f/y G", + "d\u200f/M\u200f/y GGGGG", + }; + + final String[] sharedJavaTimeLongEras = { "BC", "\u0627\u0644\u062a\u0642\u0648\u064a\u0645 \u0627\u0644\u0628\u0648\u0630\u064a", }; + + final String[] sharedJavaTimeShortEras = { + "\u0645", + "\u0645\u064a\u062c\u064a", + "\u062a\u064a\u0634\u0648", + "\u0634\u0648\u0648\u0627", + "\u0647\u064a\u0633\u064a", + }; + + final String[] sharedShortEras = { + "Before R.O.C.", + "\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u0635\u064a", + }; + + final String[] sharedMonthAbbreviations = { + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631", + "", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0623\u0648\u0644", - "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0646\u064a", - "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0644\u062b", - "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0631\u0627\u0628\u0639", - } - }, + sharedQuarterNames }, { "QuarterNames", - new String[] { - "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0623\u0648\u0644", - "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0646\u064a", - "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0644\u062b", - "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0631\u0627\u0628\u0639", - } - }, + sharedQuarterNames }, { "QuarterNarrows", - new String[] { - "\u0661", - "\u0662", - "\u0663", - "\u0664", - } - }, + sharedQuarterNarrows }, { "calendarname.buddhist", "\u0627\u0644\u062a\u0642\u0648\u064a\u0645 \u0627\u0644\u0628\u0648\u0630\u064a" }, { "calendarname.gregorian", @@ -138,11 +224,7 @@ { "field.zone", "\u0627\u0644\u062a\u0648\u0642\u064a\u062a" }, { "islamic.AmPmMarkers", - new String[] { - "\u0635", - "\u0645", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", new String[] { "EEEE\u060c d MMMM\u060c y GGGG", @@ -152,78 +234,17 @@ } }, { "islamic.DayAbbreviations", - new String[] { - "\u0627\u0644\u0623\u062d\u062f", - "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", - "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", - "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", - "\u0627\u0644\u062e\u0645\u064a\u0633", - "\u0627\u0644\u062c\u0645\u0639\u0629", - "\u0627\u0644\u0633\u0628\u062a", - } - }, + sharedDayNames }, { "islamic.DayNames", - new String[] { - "\u0627\u0644\u0623\u062d\u062f", - "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", - "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", - "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", - "\u0627\u0644\u062e\u0645\u064a\u0633", - "\u0627\u0644\u062c\u0645\u0639\u0629", - "\u0627\u0644\u0633\u0628\u062a", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "\u062d", - "\u0646", - "\u062b", - "\u0631", - "\u062e", - "\u062c", - "\u0633", - } - }, + sharedDayNarrows }, { "islamic.Eras", - new String[] { - "", - "\u0647\u0640", - } - }, + sharedEras }, { "islamic.MonthAbbreviations", - new String[] { - "\u0645\u062d\u0631\u0645", - "\u0635\u0641\u0631", - "\u0631\u0628\u064a\u0639 \u0627\u0644\u0623\u0648\u0644", - "\u0631\u0628\u064a\u0639 \u0627\u0644\u0622\u062e\u0631", - "\u062c\u0645\u0627\u062f\u0649 \u0627\u0644\u0623\u0648\u0644\u0649", - "\u062c\u0645\u0627\u062f\u0649 \u0627\u0644\u0622\u062e\u0631\u0629", - "\u0631\u062c\u0628", - "\u0634\u0639\u0628\u0627\u0646", - "\u0631\u0645\u0636\u0627\u0646", - "\u0634\u0648\u0627\u0644", - "\u0630\u0648 \u0627\u0644\u0642\u0639\u062f\u0629", - "\u0630\u0648 \u0627\u0644\u062d\u062c\u0629", - "", - } - }, + sharedMonthNames }, { "islamic.MonthNames", - new String[] { - "\u0645\u062d\u0631\u0645", - "\u0635\u0641\u0631", - "\u0631\u0628\u064a\u0639 \u0627\u0644\u0623\u0648\u0644", - "\u0631\u0628\u064a\u0639 \u0627\u0644\u0622\u062e\u0631", - "\u062c\u0645\u0627\u062f\u0649 \u0627\u0644\u0623\u0648\u0644\u0649", - "\u062c\u0645\u0627\u062f\u0649 \u0627\u0644\u0622\u062e\u0631\u0629", - "\u0631\u062c\u0628", - "\u0634\u0639\u0628\u0627\u0646", - "\u0631\u0645\u0636\u0627\u0646", - "\u0634\u0648\u0627\u0644", - "\u0630\u0648 \u0627\u0644\u0642\u0639\u062f\u0629", - "\u0630\u0648 \u0627\u0644\u062d\u062c\u0629", - "", - } - }, + sharedMonthNames }, { "islamic.MonthNarrows", new String[] { "\u0661", @@ -242,79 +263,29 @@ } }, { "islamic.QuarterAbbreviations", - new String[] { - "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0623\u0648\u0644", - "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0646\u064a", - "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0644\u062b", - "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0631\u0627\u0628\u0639", - } - }, + sharedQuarterNames }, { "islamic.QuarterNames", - new String[] { - "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0623\u0648\u0644", - "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0646\u064a", - "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0644\u062b", - "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0631\u0627\u0628\u0639", - } - }, + sharedQuarterNames }, { "islamic.QuarterNarrows", - new String[] { - "\u0661", - "\u0662", - "\u0663", - "\u0664", - } - }, + sharedQuarterNarrows }, { "islamic.TimePatterns", - new String[] { - "h:mm:ss a zzzz", - "h:mm:ss a z", - "h:mm:ss a", - "h:mm a", - } - }, + sharedTimePatterns }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "\u0635", - "\u0645", - } - }, + sharedAmPmMarkers }, { "islamic.long.Eras", - new String[] { - "", - "\u0647\u0640", - } - }, + sharedEras }, { "islamic.narrow.AmPmMarkers", - new String[] { - "\u0635", - "\u0645", - } - }, + sharedAmPmMarkers }, { "islamic.narrow.Eras", - new String[] { - "", - "\u0647\u0640", - } - }, + sharedEras }, { "islamic.short.Eras", - new String[] { - "", - "\u0647\u0640", - } - }, + sharedEras }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE\u060c d MMMM\u060c y G", - "d MMMM\u060c y G", - "dd\u200f/MM\u200f/y G", - "d\u200f/M\u200f/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.buddhist.long.Eras", - javatimebuddhistlongEras }, + sharedJavaTimeLongEras }, { "java.time.buddhist.short.Eras", - javatimebuddhistlongEras }, + sharedJavaTimeLongEras }, { "java.time.islamic.DatePatterns", new String[] { "EEEE\u060c d MMMM\u060c y G", @@ -324,31 +295,11 @@ } }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE\u060c d MMMM\u060c y G", - "d MMMM\u060c y G", - "dd\u200f/MM\u200f/y G", - "d\u200f/M\u200f/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.long.Eras", - new String[] { - "\u0645", - "\u0645\u064a\u062c\u064a", - "\u062a\u064a\u0634\u0648", - "\u0634\u0648\u0648\u0627", - "\u0647\u064a\u0633\u064a", - } - }, + sharedJavaTimeShortEras }, { "java.time.japanese.short.Eras", - new String[] { - "\u0645", - "\u0645\u064a\u062c\u064a", - "\u062a\u064a\u0634\u0648", - "\u0634\u0648\u0648\u0627", - "\u0647\u064a\u0633\u064a", - } - }, + sharedJavaTimeShortEras }, { "java.time.long.Eras", new String[] { "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", @@ -356,13 +307,7 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE\u060c d MMMM\u060c y G", - "d MMMM\u060c y G", - "dd\u200f/MM\u200f/y G", - "d\u200f/M\u200f/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "\u0642.\u0645", @@ -370,11 +315,7 @@ } }, { "roc.AmPmMarkers", - new String[] { - "\u0635", - "\u0645", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", new String[] { "EEEE\u060c d MMMM\u060c y GGGG", @@ -384,78 +325,17 @@ } }, { "roc.DayAbbreviations", - new String[] { - "\u0627\u0644\u0623\u062d\u062f", - "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", - "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", - "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", - "\u0627\u0644\u062e\u0645\u064a\u0633", - "\u0627\u0644\u062c\u0645\u0639\u0629", - "\u0627\u0644\u0633\u0628\u062a", - } - }, + sharedDayNames }, { "roc.DayNames", - new String[] { - "\u0627\u0644\u0623\u062d\u062f", - "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", - "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", - "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", - "\u0627\u0644\u062e\u0645\u064a\u0633", - "\u0627\u0644\u062c\u0645\u0639\u0629", - "\u0627\u0644\u0633\u0628\u062a", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "\u062d", - "\u0646", - "\u062b", - "\u0631", - "\u062e", - "\u062c", - "\u0633", - } - }, + sharedDayNarrows }, { "roc.Eras", - new String[] { - "Before R.O.C.", - "\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u0635\u064a", - } - }, + sharedShortEras }, { "roc.MonthAbbreviations", - new String[] { - "\u064a\u0646\u0627\u064a\u0631", - "\u0641\u0628\u0631\u0627\u064a\u0631", - "\u0645\u0627\u0631\u0633", - "\u0623\u0628\u0631\u064a\u0644", - "\u0645\u0627\u064a\u0648", - "\u064a\u0648\u0646\u064a\u0648", - "\u064a\u0648\u0644\u064a\u0648", - "\u0623\u063a\u0633\u0637\u0633", - "\u0633\u0628\u062a\u0645\u0628\u0631", - "\u0623\u0643\u062a\u0648\u0628\u0631", - "\u0646\u0648\u0641\u0645\u0628\u0631", - "\u062f\u064a\u0633\u0645\u0628\u0631", - "", - } - }, + sharedMonthAbbreviations }, { "roc.MonthNames", - new String[] { - "\u064a\u0646\u0627\u064a\u0631", - "\u0641\u0628\u0631\u0627\u064a\u0631", - "\u0645\u0627\u0631\u0633", - "\u0623\u0628\u0631\u064a\u0644", - "\u0645\u0627\u064a\u0648", - "\u064a\u0648\u0646\u064a\u0648", - "\u064a\u0648\u0644\u064a\u0648", - "\u0623\u063a\u0633\u0637\u0633", - "\u0633\u0628\u062a\u0645\u0628\u0631", - "\u0623\u0643\u062a\u0648\u0628\u0631", - "\u0646\u0648\u0641\u0645\u0628\u0631", - "\u062f\u064a\u0633\u0645\u0628\u0631", - "", - } - }, + sharedMonthAbbreviations }, { "roc.MonthNarrows", new String[] { "\u064a", @@ -474,67 +354,23 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0623\u0648\u0644", - "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0646\u064a", - "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0644\u062b", - "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0631\u0627\u0628\u0639", - } - }, + sharedQuarterNames }, { "roc.QuarterNames", - new String[] { - "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0623\u0648\u0644", - "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0646\u064a", - "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0644\u062b", - "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0631\u0627\u0628\u0639", - } - }, + sharedQuarterNames }, { "roc.QuarterNarrows", - new String[] { - "\u0661", - "\u0662", - "\u0663", - "\u0664", - } - }, + sharedQuarterNarrows }, { "roc.TimePatterns", - new String[] { - "h:mm:ss a zzzz", - "h:mm:ss a z", - "h:mm:ss a", - "h:mm a", - } - }, + sharedTimePatterns }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "\u0635", - "\u0645", - } - }, + sharedAmPmMarkers }, { "roc.long.Eras", - new String[] { - "Before R.O.C.", - "\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u0635\u064a", - } - }, + sharedShortEras }, { "roc.narrow.AmPmMarkers", - new String[] { - "\u0635", - "\u0645", - } - }, + sharedAmPmMarkers }, { "roc.narrow.Eras", - new String[] { - "Before R.O.C.", - "\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u0635\u064a", - } - }, + sharedShortEras }, { "roc.short.Eras", - new String[] { - "Before R.O.C.", - "\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u0635\u064a", - } - }, + sharedShortEras }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ar_JO.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ar_JO.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ar_JO.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. * 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,7 @@ /* * COPYRIGHT AND PERMISSION NOTICE * - * Copyright (C) 1991-2015 Unicode, Inc. All rights reserved. + * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved. * Distributed under the Terms of Use in * http://www.unicode.org/copyright.html. * @@ -72,41 +72,27 @@ public class JavaTimeSupplementary_ar_JO extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedMonthNames = { + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0634\u0628\u0627\u0637", + "\u0622\u0630\u0627\u0631", + "\u0646\u064a\u0633\u0627\u0646", + "\u0623\u064a\u0627\u0631", + "\u062d\u0632\u064a\u0631\u0627\u0646", + "\u062a\u0645\u0648\u0632", + "\u0622\u0628", + "\u0623\u064a\u0644\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644", + "", + }; + return new Object[][] { { "roc.MonthAbbreviations", - new String[] { - "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", - "\u0634\u0628\u0627\u0637", - "\u0622\u0630\u0627\u0631", - "\u0646\u064a\u0633\u0627\u0646", - "\u0623\u064a\u0627\u0631", - "\u062d\u0632\u064a\u0631\u0627\u0646", - "\u062a\u0645\u0648\u0632", - "\u0622\u0628", - "\u0623\u064a\u0644\u0648\u0644", - "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644", - "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", - "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644", - "", - } - }, + sharedMonthNames }, { "roc.MonthNames", - new String[] { - "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", - "\u0634\u0628\u0627\u0637", - "\u0622\u0630\u0627\u0631", - "\u0646\u064a\u0633\u0627\u0646", - "\u0623\u064a\u0627\u0631", - "\u062d\u0632\u064a\u0631\u0627\u0646", - "\u062a\u0645\u0648\u0632", - "\u0622\u0628", - "\u0623\u064a\u0644\u0648\u0644", - "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644", - "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", - "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644", - "", - } - }, + sharedMonthNames }, { "roc.MonthNarrows", new String[] { "\u0643", diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ar_LB.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ar_LB.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ar_LB.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. * 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,7 @@ /* * COPYRIGHT AND PERMISSION NOTICE * - * Copyright (C) 1991-2015 Unicode, Inc. All rights reserved. + * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved. * Distributed under the Terms of Use in * http://www.unicode.org/copyright.html. * @@ -72,41 +72,27 @@ public class JavaTimeSupplementary_ar_LB extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedMonthNames = { + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0634\u0628\u0627\u0637", + "\u0622\u0630\u0627\u0631", + "\u0646\u064a\u0633\u0627\u0646", + "\u0623\u064a\u0627\u0631", + "\u062d\u0632\u064a\u0631\u0627\u0646", + "\u062a\u0645\u0648\u0632", + "\u0622\u0628", + "\u0623\u064a\u0644\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644", + "", + }; + return new Object[][] { { "roc.MonthAbbreviations", - new String[] { - "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", - "\u0634\u0628\u0627\u0637", - "\u0622\u0630\u0627\u0631", - "\u0646\u064a\u0633\u0627\u0646", - "\u0623\u064a\u0627\u0631", - "\u062d\u0632\u064a\u0631\u0627\u0646", - "\u062a\u0645\u0648\u0632", - "\u0622\u0628", - "\u0623\u064a\u0644\u0648\u0644", - "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644", - "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", - "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644", - "", - } - }, + sharedMonthNames }, { "roc.MonthNames", - new String[] { - "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", - "\u0634\u0628\u0627\u0637", - "\u0622\u0630\u0627\u0631", - "\u0646\u064a\u0633\u0627\u0646", - "\u0623\u064a\u0627\u0631", - "\u062d\u0632\u064a\u0631\u0627\u0646", - "\u062a\u0645\u0648\u0632", - "\u0622\u0628", - "\u0623\u064a\u0644\u0648\u0644", - "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644", - "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", - "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644", - "", - } - }, + sharedMonthNames }, { "roc.MonthNarrows", new String[] { "\u0643", diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ar_SY.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ar_SY.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ar_SY.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. * 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,7 @@ /* * COPYRIGHT AND PERMISSION NOTICE * - * Copyright (C) 1991-2015 Unicode, Inc. All rights reserved. + * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved. * Distributed under the Terms of Use in * http://www.unicode.org/copyright.html. * @@ -72,41 +72,27 @@ public class JavaTimeSupplementary_ar_SY extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedMonthNames = { + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0634\u0628\u0627\u0637", + "\u0622\u0630\u0627\u0631", + "\u0646\u064a\u0633\u0627\u0646", + "\u0623\u064a\u0627\u0631", + "\u062d\u0632\u064a\u0631\u0627\u0646", + "\u062a\u0645\u0648\u0632", + "\u0622\u0628", + "\u0623\u064a\u0644\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644", + "", + }; + return new Object[][] { { "roc.MonthAbbreviations", - new String[] { - "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", - "\u0634\u0628\u0627\u0637", - "\u0622\u0630\u0627\u0631", - "\u0646\u064a\u0633\u0627\u0646", - "\u0623\u064a\u0627\u0631", - "\u062d\u0632\u064a\u0631\u0627\u0646", - "\u062a\u0645\u0648\u0632", - "\u0622\u0628", - "\u0623\u064a\u0644\u0648\u0644", - "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644", - "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", - "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644", - "", - } - }, + sharedMonthNames }, { "roc.MonthNames", - new String[] { - "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", - "\u0634\u0628\u0627\u0637", - "\u0622\u0630\u0627\u0631", - "\u0646\u064a\u0633\u0627\u0646", - "\u0623\u064a\u0627\u0631", - "\u062d\u0632\u064a\u0631\u0627\u0646", - "\u062a\u0645\u0648\u0632", - "\u0622\u0628", - "\u0623\u064a\u0644\u0648\u0644", - "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644", - "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", - "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644", - "", - } - }, + sharedMonthNames }, { "roc.MonthNarrows", new String[] { "\u0643", diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_be.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_be.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_be.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,23 +72,91 @@ public class JavaTimeSupplementary_be extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "1-\u0448\u044b \u043a\u0432.", + "2-\u0433\u0456 \u043a\u0432.", + "3-\u0446\u0456 \u043a\u0432.", + "4-\u0442\u044b \u043a\u0432.", + }; + + final String[] sharedQuarterNames = { + "1-\u0448\u044b \u043a\u0432\u0430\u0440\u0442\u0430\u043b", + "2-\u0433\u0456 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", + "3-\u0446\u0456 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", + "4-\u0442\u044b \u043a\u0432\u0430\u0440\u0442\u0430\u043b", + }; + + final String[] sharedAmPmMarkers = { + "\u0434\u0430 \u043f\u0430\u045e\u0434\u043d\u044f", + "\u043f\u0430\u0441\u043b\u044f \u043f\u0430\u045e\u0434\u043d\u044f", + }; + + final String[] sharedDatePatterns = { + "EEEE, d MMMM y GGGG", + "d MMMM y GGGG", + "d.M.y GGGG", + "d.M.y G", + }; + + final String[] sharedDayAbbreviations = { + "\u043d\u0434", + "\u043f\u043d", + "\u0430\u045e", + "\u0441\u0440", + "\u0447\u0446", + "\u043f\u0442", + "\u0441\u0431", + }; + + final String[] sharedDayNames = { + "\u043d\u044f\u0434\u0437\u0435\u043b\u044f", + "\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a", + "\u0430\u045e\u0442\u043e\u0440\u0430\u043a", + "\u0441\u0435\u0440\u0430\u0434\u0430", + "\u0447\u0430\u0446\u0432\u0435\u0440", + "\u043f\u044f\u0442\u043d\u0456\u0446\u0430", + "\u0441\u0443\u0431\u043e\u0442\u0430", + }; + + final String[] sharedDayNarrows = { + "\u043d", + "\u043f", + "\u0430", + "\u0441", + "\u0447", + "\u043f", + "\u0441", + }; + + final String[] sharedTimePatterns = { + "HH.mm.ss zzzz", + "HH.mm.ss z", + "HH.mm.ss", + "HH.mm", + }; + + final String[] sharedAbbreviatedAmPmMarkers = { + "\u0440\u0430\u043d\u0456\u0446\u044b", + "\u0432\u0435\u0447\u0430\u0440\u0430", + }; + + final String[] sharedNarrowAmPmMarkers = { + "\u0440\u0430\u043d.", + "\u0432\u0435\u0447.", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, d MMMM y G", + "d MMMM y G", + "d.M.y G", + "d.M.y GGGGG", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "1-\u0448\u044b \u043a\u0432.", - "2-\u0433\u0456 \u043a\u0432.", - "3-\u0446\u0456 \u043a\u0432.", - "4-\u0442\u044b \u043a\u0432.", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "1-\u0448\u044b \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "2-\u0433\u0456 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "3-\u0446\u0456 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "4-\u0442\u044b \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "\u0431\u0443\u0434\u044b\u0439\u0441\u043a\u0456 \u043a\u0430\u043b\u044f\u043d\u0434\u0430\u0440" }, { "calendarname.gregorian", @@ -124,96 +192,25 @@ { "field.zone", "\u0447\u0430\u0441\u0430\u0432\u044b \u043f\u043e\u044f\u0441" }, { "islamic.AmPmMarkers", - new String[] { - "\u0434\u0430 \u043f\u0430\u045e\u0434\u043d\u044f", - "\u043f\u0430\u0441\u043b\u044f \u043f\u0430\u045e\u0434\u043d\u044f", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "EEEE, d MMMM y GGGG", - "d MMMM y GGGG", - "d.M.y GGGG", - "d.M.y G", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "\u043d\u0434", - "\u043f\u043d", - "\u0430\u045e", - "\u0441\u0440", - "\u0447\u0446", - "\u043f\u0442", - "\u0441\u0431", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "\u043d\u044f\u0434\u0437\u0435\u043b\u044f", - "\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a", - "\u0430\u045e\u0442\u043e\u0440\u0430\u043a", - "\u0441\u0435\u0440\u0430\u0434\u0430", - "\u0447\u0430\u0446\u0432\u0435\u0440", - "\u043f\u044f\u0442\u043d\u0456\u0446\u0430", - "\u0441\u0443\u0431\u043e\u0442\u0430", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "\u043d", - "\u043f", - "\u0430", - "\u0441", - "\u0447", - "\u043f", - "\u0441", - } - }, + sharedDayNarrows }, { "islamic.QuarterAbbreviations", - new String[] { - "1-\u0448\u044b \u043a\u0432.", - "2-\u0433\u0456 \u043a\u0432.", - "3-\u0446\u0456 \u043a\u0432.", - "4-\u0442\u044b \u043a\u0432.", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "1-\u0448\u044b \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "2-\u0433\u0456 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "3-\u0446\u0456 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "4-\u0442\u044b \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, + sharedQuarterNames }, { "islamic.TimePatterns", - new String[] { - "HH.mm.ss zzzz", - "HH.mm.ss z", - "HH.mm.ss", - "HH.mm", - } - }, + sharedTimePatterns }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "\u0440\u0430\u043d\u0456\u0446\u044b", - "\u0432\u0435\u0447\u0430\u0440\u0430", - } - }, + sharedAbbreviatedAmPmMarkers }, { "islamic.narrow.AmPmMarkers", - new String[] { - "\u0440\u0430\u043d.", - "\u0432\u0435\u0447.", - } - }, + sharedNarrowAmPmMarkers }, { "java.time.buddhist.DatePatterns", new String[] { "EEEE, d MMMM y G", @@ -223,21 +220,9 @@ } }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE, d MMMM y G", - "d MMMM y G", - "d.M.y G", - "d.M.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE, d MMMM y G", - "d MMMM y G", - "d.M.y G", - "d.M.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.long.Eras", new String[] { "\u0434\u0430 \u043d\u0430\u0448\u0430\u0439 \u044d\u0440\u044b", @@ -245,13 +230,7 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE, d MMMM y G", - "d MMMM y G", - "d.M.y G", - "d.M.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "\u0434\u0430 \u043d.\u0435.", @@ -259,52 +238,15 @@ } }, { "roc.AmPmMarkers", - new String[] { - "\u0434\u0430 \u043f\u0430\u045e\u0434\u043d\u044f", - "\u043f\u0430\u0441\u043b\u044f \u043f\u0430\u045e\u0434\u043d\u044f", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "EEEE, d MMMM y GGGG", - "d MMMM y GGGG", - "d.M.y GGGG", - "d.M.y G", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "\u043d\u0434", - "\u043f\u043d", - "\u0430\u045e", - "\u0441\u0440", - "\u0447\u0446", - "\u043f\u0442", - "\u0441\u0431", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "\u043d\u044f\u0434\u0437\u0435\u043b\u044f", - "\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a", - "\u0430\u045e\u0442\u043e\u0440\u0430\u043a", - "\u0441\u0435\u0440\u0430\u0434\u0430", - "\u0447\u0430\u0446\u0432\u0435\u0440", - "\u043f\u044f\u0442\u043d\u0456\u0446\u0430", - "\u0441\u0443\u0431\u043e\u0442\u0430", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "\u043d", - "\u043f", - "\u0430", - "\u0441", - "\u0447", - "\u043f", - "\u0441", - } - }, + sharedDayNarrows }, { "roc.MonthAbbreviations", new String[] { "\u0441\u0442\u0443", @@ -357,41 +299,15 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "1-\u0448\u044b \u043a\u0432.", - "2-\u0433\u0456 \u043a\u0432.", - "3-\u0446\u0456 \u043a\u0432.", - "4-\u0442\u044b \u043a\u0432.", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "1-\u0448\u044b \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "2-\u0433\u0456 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "3-\u0446\u0456 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "4-\u0442\u044b \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - } - }, + sharedQuarterNames }, { "roc.TimePatterns", - new String[] { - "HH.mm.ss zzzz", - "HH.mm.ss z", - "HH.mm.ss", - "HH.mm", - } - }, + sharedTimePatterns }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "\u0440\u0430\u043d\u0456\u0446\u044b", - "\u0432\u0435\u0447\u0430\u0440\u0430", - } - }, + sharedAbbreviatedAmPmMarkers }, { "roc.narrow.AmPmMarkers", - new String[] { - "\u0440\u0430\u043d.", - "\u0432\u0435\u0447.", - } - }, + sharedNarrowAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_bg.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_bg.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_bg.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,23 +72,81 @@ public class JavaTimeSupplementary_bg extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "1. \u0442\u0440\u0438\u043c.", + "2. \u0442\u0440\u0438\u043c.", + "3. \u0442\u0440\u0438\u043c.", + "4. \u0442\u0440\u0438\u043c.", + }; + + final String[] sharedQuarterNames = { + "1. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435", + "2. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435", + "3. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435", + "4. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435", + }; + + final String[] sharedAmPmMarkers = { + "\u043f\u0440.\u043e\u0431.", + "\u0441\u043b.\u043e\u0431.", + }; + + final String[] sharedDatePatterns = { + "EEEE, d MMMM y '\u0433'. GGGG", + "d MMMM y '\u0433'. GGGG", + "d.MM.y '\u0433'. GGGG", + "d.MM.yy GGGG", + }; + + final String[] sharedDayAbbreviations = { + "\u043d\u0434", + "\u043f\u043d", + "\u0432\u0442", + "\u0441\u0440", + "\u0447\u0442", + "\u043f\u0442", + "\u0441\u0431", + }; + + final String[] sharedDayNames = { + "\u043d\u0435\u0434\u0435\u043b\u044f", + "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a", + "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", + "\u0441\u0440\u044f\u0434\u0430", + "\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a", + "\u043f\u0435\u0442\u044a\u043a", + "\u0441\u044a\u0431\u043e\u0442\u0430", + }; + + final String[] sharedDayNarrows = { + "\u043d", + "\u043f", + "\u0432", + "\u0441", + "\u0447", + "\u043f", + "\u0441", + }; + + final String[] sharedTimePatterns = { + "H:mm:ss zzzz", + "H:mm:ss z", + "H:mm:ss", + "H:mm", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, d MMMM y '\u0433'. G", + "d MMMM y '\u0433'. G", + "d.MM.y '\u0433'. G", + "d.MM.yy G", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "1. \u0442\u0440\u0438\u043c.", - "2. \u0442\u0440\u0438\u043c.", - "3. \u0442\u0440\u0438\u043c.", - "4. \u0442\u0440\u0438\u043c.", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "1. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435", - "2. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435", - "3. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435", - "4. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "\u0431\u0443\u0434\u0438\u0441\u0442\u043a\u0438 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440" }, { "calendarname.gregorian", @@ -124,52 +182,15 @@ { "field.zone", "\u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430" }, { "islamic.AmPmMarkers", - new String[] { - "\u043f\u0440.\u043e\u0431.", - "\u0441\u043b.\u043e\u0431.", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "EEEE, d MMMM y '\u0433'. GGGG", - "d MMMM y '\u0433'. GGGG", - "d.MM.y '\u0433'. GGGG", - "d.MM.yy GGGG", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "\u043d\u0434", - "\u043f\u043d", - "\u0432\u0442", - "\u0441\u0440", - "\u0447\u0442", - "\u043f\u0442", - "\u0441\u0431", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "\u043d\u0435\u0434\u0435\u043b\u044f", - "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a", - "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", - "\u0441\u0440\u044f\u0434\u0430", - "\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a", - "\u043f\u0435\u0442\u044a\u043a", - "\u0441\u044a\u0431\u043e\u0442\u0430", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "\u043d", - "\u043f", - "\u0432", - "\u0441", - "\u0447", - "\u043f", - "\u0441", - } - }, + sharedDayNarrows }, { "islamic.MonthNames", new String[] { "\u043c\u0443\u0445\u0430\u0440\u0430\u043c", @@ -188,73 +209,21 @@ } }, { "islamic.QuarterAbbreviations", - new String[] { - "1. \u0442\u0440\u0438\u043c.", - "2. \u0442\u0440\u0438\u043c.", - "3. \u0442\u0440\u0438\u043c.", - "4. \u0442\u0440\u0438\u043c.", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "1. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435", - "2. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435", - "3. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435", - "4. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, + sharedQuarterNames }, { "islamic.TimePatterns", - new String[] { - "H:mm:ss zzzz", - "H:mm:ss z", - "H:mm:ss", - "H:mm", - } - }, + sharedTimePatterns }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "\u043f\u0440.\u043e\u0431.", - "\u0441\u043b.\u043e\u0431.", - } - }, + sharedAmPmMarkers }, { "islamic.narrow.AmPmMarkers", - new String[] { - "\u043f\u0440.\u043e\u0431.", - "\u0441\u043b.\u043e\u0431.", - } - }, + sharedAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE, d MMMM y '\u0433'. G", - "d MMMM y '\u0433'. G", - "d.MM.y '\u0433'. G", - "d.MM.yy G", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE, d MMMM y '\u0433'. G", - "d MMMM y '\u0433'. G", - "d.MM.y '\u0433'. G", - "d.MM.yy G", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE, d MMMM y '\u0433'. G", - "d MMMM y '\u0433'. G", - "d.MM.y '\u0433'. G", - "d.MM.yy G", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.long.Eras", new String[] { "\u043f\u0440\u0435\u0434\u0438 \u0425\u0440\u0438\u0441\u0442\u0430", @@ -262,13 +231,7 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE, d MMMM y '\u0433'. G", - "d MMMM y '\u0433'. G", - "d.MM.y '\u0433'. G", - "d.MM.yy G", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "\u043f\u0440.\u043d.\u0435.", @@ -276,52 +239,15 @@ } }, { "roc.AmPmMarkers", - new String[] { - "\u043f\u0440.\u043e\u0431.", - "\u0441\u043b.\u043e\u0431.", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "EEEE, d MMMM y '\u0433'. GGGG", - "d MMMM y '\u0433'. GGGG", - "d.MM.y '\u0433'. GGGG", - "d.MM.yy GGGG", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "\u043d\u0434", - "\u043f\u043d", - "\u0432\u0442", - "\u0441\u0440", - "\u0447\u0442", - "\u043f\u0442", - "\u0441\u0431", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "\u043d\u0435\u0434\u0435\u043b\u044f", - "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a", - "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", - "\u0441\u0440\u044f\u0434\u0430", - "\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a", - "\u043f\u0435\u0442\u044a\u043a", - "\u0441\u044a\u0431\u043e\u0442\u0430", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "\u043d", - "\u043f", - "\u0432", - "\u0441", - "\u0447", - "\u043f", - "\u0441", - } - }, + sharedDayNarrows }, { "roc.MonthAbbreviations", new String[] { "\u044f\u043d\u0443", @@ -374,41 +300,15 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "1. \u0442\u0440\u0438\u043c.", - "2. \u0442\u0440\u0438\u043c.", - "3. \u0442\u0440\u0438\u043c.", - "4. \u0442\u0440\u0438\u043c.", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "1. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435", - "2. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435", - "3. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435", - "4. \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435", - } - }, + sharedQuarterNames }, { "roc.TimePatterns", - new String[] { - "H:mm:ss zzzz", - "H:mm:ss z", - "H:mm:ss", - "H:mm", - } - }, + sharedTimePatterns }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "\u043f\u0440.\u043e\u0431.", - "\u0441\u043b.\u043e\u0431.", - } - }, + sharedAmPmMarkers }, { "roc.narrow.AmPmMarkers", - new String[] { - "\u043f\u0440.\u043e\u0431.", - "\u0441\u043b.\u043e\u0431.", - } - }, + sharedAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ca.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ca.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ca.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,23 +72,79 @@ public class JavaTimeSupplementary_ca extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "1T", + "2T", + "3T", + "4T", + }; + + final String[] sharedQuarterNames = { + "1r trimestre", + "2n trimestre", + "3r trimestre", + "4t trimestre", + }; + + final String[] sharedAmPmMarkers = { + "a. m.", + "p. m.", + }; + + final String[] sharedDayAbbreviations = { + "dg.", + "dl.", + "dt.", + "dc.", + "dj.", + "dv.", + "ds.", + }; + + final String[] sharedDayNames = { + "diumenge", + "dilluns", + "dimarts", + "dimecres", + "dijous", + "divendres", + "dissabte", + }; + + final String[] sharedDayNarrows = { + "dg", + "dl", + "dt", + "dc", + "dj", + "dv", + "ds", + }; + + final String[] sharedTimePatterns = { + "H:mm:ss zzzz", + "H:mm:ss z", + "H:mm:ss", + "H:mm", + }; + + final String[] sharedJavaTimeLongEras = { + "BC", + "eB", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE d MMMM 'de' y G", + "d MMMM 'de' y G", + "d/M/y G", + "d/M/yy GGGGG", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "1T", - "2T", - "3T", - "4T", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "1r trimestre", - "2n trimestre", - "3r trimestre", - "4t trimestre", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "calendari budista" }, { "calendarname.gregorian", @@ -124,11 +180,7 @@ { "field.zone", "fus horari" }, { "islamic.AmPmMarkers", - new String[] { - "a. m.", - "p. m.", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", new String[] { "EEEE d MMMM 'de' y GGGG", @@ -138,82 +190,21 @@ } }, { "islamic.DayAbbreviations", - new String[] { - "dg.", - "dl.", - "dt.", - "dc.", - "dj.", - "dv.", - "ds.", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "diumenge", - "dilluns", - "dimarts", - "dimecres", - "dijous", - "divendres", - "dissabte", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "dg", - "dl", - "dt", - "dc", - "dj", - "dv", - "ds", - } - }, + sharedDayNarrows }, { "islamic.QuarterAbbreviations", - new String[] { - "1T", - "2T", - "3T", - "4T", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "1r trimestre", - "2n trimestre", - "3r trimestre", - "4t trimestre", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, + sharedQuarterNames }, { "islamic.TimePatterns", - new String[] { - "H:mm:ss zzzz", - "H:mm:ss z", - "H:mm:ss", - "H:mm", - } - }, + sharedTimePatterns }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "a. m.", - "p. m.", - } - }, + sharedAmPmMarkers }, { "islamic.narrow.AmPmMarkers", - new String[] { - "a. m.", - "p. m.", - } - }, + sharedAmPmMarkers }, { "java.time.buddhist.DatePatterns", new String[] { "EEEE, dd MMMM y G", @@ -223,33 +214,13 @@ } }, { "java.time.buddhist.long.Eras", - new String[] { - "BC", - "eB", - } - }, + sharedJavaTimeLongEras }, { "java.time.buddhist.short.Eras", - new String[] { - "BC", - "eB", - } - }, + sharedJavaTimeLongEras }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE d MMMM 'de' y G", - "d MMMM 'de' y G", - "d/M/y G", - "d/M/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE d MMMM 'de' y G", - "d MMMM 'de' y G", - "d/M/y G", - "d/M/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.long.Eras", new String[] { "abans de Crist", @@ -271,11 +242,7 @@ } }, { "roc.AmPmMarkers", - new String[] { - "a. m.", - "p. m.", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", new String[] { "EEEE d MMMM 'de' y GGGG", @@ -285,38 +252,11 @@ } }, { "roc.DayAbbreviations", - new String[] { - "dg.", - "dl.", - "dt.", - "dc.", - "dj.", - "dv.", - "ds.", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "diumenge", - "dilluns", - "dimarts", - "dimecres", - "dijous", - "divendres", - "dissabte", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "dg", - "dl", - "dt", - "dc", - "dj", - "dv", - "ds", - } - }, + sharedDayNarrows }, { "roc.MonthAbbreviations", new String[] { "gen.", @@ -369,41 +309,15 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "1T", - "2T", - "3T", - "4T", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "1r trimestre", - "2n trimestre", - "3r trimestre", - "4t trimestre", - } - }, + sharedQuarterNames }, { "roc.TimePatterns", - new String[] { - "H:mm:ss zzzz", - "H:mm:ss z", - "H:mm:ss", - "H:mm", - } - }, + sharedTimePatterns }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "a. m.", - "p. m.", - } - }, + sharedAmPmMarkers }, { "roc.narrow.AmPmMarkers", - new String[] { - "a. m.", - "p. m.", - } - }, + sharedAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_cs.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_cs.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_cs.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,15 +72,84 @@ public class JavaTimeSupplementary_cs extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterNames = { + "1. \u010dtvrtlet\u00ed", + "2. \u010dtvrtlet\u00ed", + "3. \u010dtvrtlet\u00ed", + "4. \u010dtvrtlet\u00ed", + }; + + final String[] sharedAmPmMarkers = { + "dop.", + "odp.", + }; + + final String[] sharedDatePatterns = { + "EEEE d. MMMM y GGGG", + "d. MMMM y GGGG", + "d. M. y GGGG", + "dd.MM.yy G", + }; + + final String[] sharedDayAbbreviations = { + "ne", + "po", + "\u00fat", + "st", + "\u010dt", + "p\u00e1", + "so", + }; + + final String[] sharedDayNames = { + "ned\u011ble", + "pond\u011bl\u00ed", + "\u00fater\u00fd", + "st\u0159eda", + "\u010dtvrtek", + "p\u00e1tek", + "sobota", + }; + + final String[] sharedDayNarrows = { + "N", + "P", + "\u00da", + "S", + "\u010c", + "P", + "S", + }; + + final String[] sharedQuarterAbbreviations = { + "Q1", + "Q2", + "Q3", + "Q4", + }; + + final String[] sharedTimePatterns = { + "H:mm:ss zzzz", + "H:mm:ss z", + "H:mm:ss", + "H:mm", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE d. MMMM y G", + "d. MMMM y G", + "d. M. y G", + "dd.MM.yy GGGGG", + }; + + final String[] sharedEras = { + "P\u0159ed R. O. C.", + "", + }; + return new Object[][] { { "QuarterNames", - new String[] { - "1. \u010dtvrtlet\u00ed", - "2. \u010dtvrtlet\u00ed", - "3. \u010dtvrtlet\u00ed", - "4. \u010dtvrtlet\u00ed", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "Buddhistick\u00fd kalend\u00e1\u0159" }, { "calendarname.gregorian", @@ -116,134 +185,27 @@ { "field.zone", "\u010dasov\u00e9 p\u00e1smo" }, { "islamic.AmPmMarkers", - new String[] { - "dop.", - "odp.", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "EEEE d. MMMM y GGGG", - "d. MMMM y GGGG", - "d. M. y GGGG", - "dd.MM.yy G", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "ne", - "po", - "\u00fat", - "st", - "\u010dt", - "p\u00e1", - "so", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "ned\u011ble", - "pond\u011bl\u00ed", - "\u00fater\u00fd", - "st\u0159eda", - "\u010dtvrtek", - "p\u00e1tek", - "sobota", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "N", - "P", - "\u00da", - "S", - "\u010c", - "P", - "S", - } - }, - { "islamic.Eras", - new String[] { - "", - "AH", - } - }, + sharedDayNarrows }, { "islamic.QuarterAbbreviations", - new String[] { - "Q1", - "Q2", - "Q3", - "Q4", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "1. \u010dtvrtlet\u00ed", - "2. \u010dtvrtlet\u00ed", - "3. \u010dtvrtlet\u00ed", - "4. \u010dtvrtlet\u00ed", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, + sharedQuarterNames }, { "islamic.TimePatterns", - new String[] { - "H:mm:ss zzzz", - "H:mm:ss z", - "H:mm:ss", - "H:mm", - } - }, + sharedTimePatterns }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "dop.", - "odp.", - } - }, - { "islamic.long.Eras", - new String[] { - "", - "AH", - } - }, + sharedAmPmMarkers }, { "islamic.narrow.AmPmMarkers", - new String[] { - "dop.", - "odp.", - } - }, - { "islamic.narrow.Eras", - new String[] { - "", - "AH", - } - }, - { "islamic.short.Eras", - new String[] { - "", - "AH", - } - }, + sharedAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE d. MMMM y G", - "d. MMMM y G", - "d. M. y G", - "dd.MM.yy GGGGG", - } - }, - { "java.time.buddhist.long.Eras", - new String[] { - "BC", - "BE", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.buddhist.short.Eras", new String[] { "BC", @@ -251,13 +213,7 @@ } }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE d. MMMM y G", - "d. MMMM y G", - "d. M. y G", - "dd.MM.yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", new String[] { "EEEE, d. MMMM y G", @@ -273,13 +229,7 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE d. MMMM y G", - "d. MMMM y G", - "d. M. y G", - "dd.MM.yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "p\u0159.Kr.", @@ -287,58 +237,17 @@ } }, { "roc.AmPmMarkers", - new String[] { - "dop.", - "odp.", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "EEEE d. MMMM y GGGG", - "d. MMMM y GGGG", - "d. M. y GGGG", - "dd.MM.yy G", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "ne", - "po", - "\u00fat", - "st", - "\u010dt", - "p\u00e1", - "so", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "ned\u011ble", - "pond\u011bl\u00ed", - "\u00fater\u00fd", - "st\u0159eda", - "\u010dtvrtek", - "p\u00e1tek", - "sobota", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "N", - "P", - "\u00da", - "S", - "\u010c", - "P", - "S", - } - }, + sharedDayNarrows }, { "roc.Eras", - new String[] { - "P\u0159ed R. O. C.", - "", - } - }, + sharedEras }, { "roc.MonthAbbreviations", new String[] { "led", @@ -373,77 +282,22 @@ "", } }, - { "roc.MonthNarrows", - new String[] { - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "10", - "11", - "12", - "", - } - }, { "roc.QuarterAbbreviations", - new String[] { - "Q1", - "Q2", - "Q3", - "Q4", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "1. \u010dtvrtlet\u00ed", - "2. \u010dtvrtlet\u00ed", - "3. \u010dtvrtlet\u00ed", - "4. \u010dtvrtlet\u00ed", - } - }, + sharedQuarterNames }, { "roc.TimePatterns", - new String[] { - "H:mm:ss zzzz", - "H:mm:ss z", - "H:mm:ss", - "H:mm", - } - }, + sharedTimePatterns }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "dop.", - "odp.", - } - }, + sharedAmPmMarkers }, { "roc.long.Eras", - new String[] { - "P\u0159ed R. O. C.", - "", - } - }, + sharedEras }, { "roc.narrow.AmPmMarkers", - new String[] { - "dop.", - "odp.", - } - }, + sharedAmPmMarkers }, { "roc.narrow.Eras", - new String[] { - "P\u0159ed R. O. C.", - "", - } - }, + sharedEras }, { "roc.short.Eras", - new String[] { - "P\u0159ed R. O. C.", - "", - } - }, + sharedEras }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_da.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_da.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_da.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,27 +72,91 @@ public class JavaTimeSupplementary_da extends OpenListResourceBundle { @Override protected final Object[][] getContents() { - final String[] javatimelongEras = { + final String[] sharedQuarterAbbreviations = { + "1. kvt.", + "2. kvt.", + "3. kvt.", + "4. kvt.", + }; + + final String[] sharedQuarterNames = { + "1. kvartal", + "2. kvartal", + "3. kvartal", + "4. kvartal", + }; + + final String[] sharedDatePatterns = { + "EEEE d. MMMM y GGGG", + "d. MMMM y GGGG", + "d. MMM y GGGG", + "d/M/y", + }; + + final String[] sharedDayAbbreviations = { + "s\u00f8n.", + "man.", + "tir.", + "ons.", + "tor.", + "fre.", + "l\u00f8r.", + }; + + final String[] sharedDayNames = { + "s\u00f8ndag", + "mandag", + "tirsdag", + "onsdag", + "torsdag", + "fredag", + "l\u00f8rdag", + }; + + final String[] sharedDayNarrows = { + "S", + "M", + "T", + "O", + "T", + "F", + "L", + }; + + final String[] sharedTimePatterns = { + "HH.mm.ss zzzz", + "HH.mm.ss z", + "HH.mm.ss", + "HH.mm", + }; + + final String[] sharedNarrowAmPmMarkers = { + "a", + "p", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE d. MMMM y G", + "d. MMMM y G", + "d. MMM y G", + "d/M/y", + }; + + final String[] sharedJavaTimeLongEras = { "f.Kr.", "e.Kr.", }; + + final String[] sharedEras = { + "Before R.O.C.", + "Minguo", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "1. kvt.", - "2. kvt.", - "3. kvt.", - "4. kvt.", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "1. kvartal", - "2. kvartal", - "3. kvartal", - "4. kvartal", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "buddhistisk kalender" }, { "calendarname.gregorian", @@ -136,122 +200,23 @@ } }, { "islamic.DatePatterns", - new String[] { - "EEEE d. MMMM y GGGG", - "d. MMMM y GGGG", - "d. MMM y GGGG", - "d/M/y", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "s\u00f8n.", - "man.", - "tir.", - "ons.", - "tor.", - "fre.", - "l\u00f8r.", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "s\u00f8ndag", - "mandag", - "tirsdag", - "onsdag", - "torsdag", - "fredag", - "l\u00f8rdag", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "S", - "M", - "T", - "O", - "T", - "F", - "L", - } - }, - { "islamic.Eras", - new String[] { - "", - "AH", - } - }, + sharedDayNarrows }, { "islamic.QuarterAbbreviations", - new String[] { - "1. kvt.", - "2. kvt.", - "3. kvt.", - "4. kvt.", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "1. kvartal", - "2. kvartal", - "3. kvartal", - "4. kvartal", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, + sharedQuarterNames }, { "islamic.TimePatterns", - new String[] { - "HH.mm.ss zzzz", - "HH.mm.ss z", - "HH.mm.ss", - "HH.mm", - } - }, - { "islamic.long.Eras", - new String[] { - "", - "AH", - } - }, + sharedTimePatterns }, { "islamic.narrow.AmPmMarkers", - new String[] { - "a", - "p", - } - }, - { "islamic.narrow.Eras", - new String[] { - "", - "AH", - } - }, - { "islamic.short.Eras", - new String[] { - "", - "AH", - } - }, + sharedNarrowAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE d. MMMM y G", - "d. MMMM y G", - "d. MMM y G", - "d/M/y", - } - }, - { "java.time.buddhist.long.Eras", - new String[] { - "BC", - "BE", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.buddhist.short.Eras", new String[] { "BC", @@ -259,86 +224,25 @@ } }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE d. MMMM y G", - "d. MMMM y G", - "d. MMM y G", - "d/M/y", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE d. MMMM y G", - "d. MMMM y G", - "d. MMM y G", - "d/M/y", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.long.Eras", - javatimelongEras }, + sharedJavaTimeLongEras }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE d. MMMM y G", - "d. MMMM y G", - "d. MMM y G", - "d/M/y", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", - javatimelongEras }, - { "roc.AmPmMarkers", - new String[] { - "AM", - "PM", - } - }, + sharedJavaTimeLongEras }, { "roc.DatePatterns", - new String[] { - "EEEE d. MMMM y GGGG", - "d. MMMM y GGGG", - "d. MMM y GGGG", - "d/M/y", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "s\u00f8n.", - "man.", - "tir.", - "ons.", - "tor.", - "fre.", - "l\u00f8r.", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "s\u00f8ndag", - "mandag", - "tirsdag", - "onsdag", - "torsdag", - "fredag", - "l\u00f8rdag", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "S", - "M", - "T", - "O", - "T", - "F", - "L", - } - }, + sharedDayNarrows }, { "roc.Eras", - new String[] { - "Before R.O.C.", - "Minguo", - } - }, + sharedEras }, { "roc.MonthAbbreviations", new String[] { "jan.", @@ -391,53 +295,19 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "1. kvt.", - "2. kvt.", - "3. kvt.", - "4. kvt.", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "1. kvartal", - "2. kvartal", - "3. kvartal", - "4. kvartal", - } - }, + sharedQuarterNames }, { "roc.TimePatterns", - new String[] { - "HH.mm.ss zzzz", - "HH.mm.ss z", - "HH.mm.ss", - "HH.mm", - } - }, + sharedTimePatterns }, { "roc.long.Eras", - new String[] { - "Before R.O.C.", - "Minguo", - } - }, + sharedEras }, { "roc.narrow.AmPmMarkers", - new String[] { - "a", - "p", - } - }, + sharedNarrowAmPmMarkers }, { "roc.narrow.Eras", - new String[] { - "Before R.O.C.", - "Minguo", - } - }, + sharedEras }, { "roc.short.Eras", - new String[] { - "Before R.O.C.", - "Minguo", - } - }, + sharedEras }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_de.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_de.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_de.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,19 +72,87 @@ public class JavaTimeSupplementary_de extends OpenListResourceBundle { @Override protected final Object[][] getContents() { - final String[] javatimelongEras = { + final String[] sharedQuarterNames = { + "1. Quartal", + "2. Quartal", + "3. Quartal", + "4. Quartal", + }; + + final String[] sharedAmPmMarkers = { + "vorm.", + "nachm.", + }; + + final String[] sharedDatePatterns = { + "EEEE, d. MMMM y GGGG", + "d. MMMM y GGGG", + "dd.MM.y GGGG", + "dd.MM.yy G", + }; + + final String[] sharedDayAbbreviations = { + "So.", + "Mo.", + "Di.", + "Mi.", + "Do.", + "Fr.", + "Sa.", + }; + + final String[] sharedDayNames = { + "Sonntag", + "Montag", + "Dienstag", + "Mittwoch", + "Donnerstag", + "Freitag", + "Samstag", + }; + + final String[] sharedDayNarrows = { + "S", + "M", + "D", + "M", + "D", + "F", + "S", + }; + + final String[] sharedQuarterAbbreviations = { + "Q1", + "Q2", + "Q3", + "Q4", + }; + + final String[] sharedNarrowAmPmMarkers = { + "vm.", + "nm.", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, d. MMMM y G", + "d. MMMM y G", + "dd.MM.y G", + "dd.MM.yy GGGGG", + }; + + final String[] sharedJavaTimeLongEras = { "v. Chr.", "n. Chr.", }; + + final String[] sharedEras = { + "Before R.O.C.", + "Minguo", + }; + return new Object[][] { { "QuarterNames", - new String[] { - "1. Quartal", - "2. Quartal", - "3. Quartal", - "4. Quartal", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "Buddhistischer Kalender" }, { "calendarname.gregorian", @@ -120,134 +188,25 @@ { "field.zone", "Zeitzone" }, { "islamic.AmPmMarkers", - new String[] { - "vorm.", - "nachm.", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "EEEE, d. MMMM y GGGG", - "d. MMMM y GGGG", - "dd.MM.y GGGG", - "dd.MM.yy G", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "So.", - "Mo.", - "Di.", - "Mi.", - "Do.", - "Fr.", - "Sa.", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "Sonntag", - "Montag", - "Dienstag", - "Mittwoch", - "Donnerstag", - "Freitag", - "Samstag", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "S", - "M", - "D", - "M", - "D", - "F", - "S", - } - }, - { "islamic.Eras", - new String[] { - "", - "AH", - } - }, + sharedDayNarrows }, { "islamic.QuarterAbbreviations", - new String[] { - "Q1", - "Q2", - "Q3", - "Q4", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "1. Quartal", - "2. Quartal", - "3. Quartal", - "4. Quartal", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, - { "islamic.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedQuarterNames }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "vorm.", - "nachm.", - } - }, - { "islamic.long.Eras", - new String[] { - "", - "AH", - } - }, + sharedAmPmMarkers }, { "islamic.narrow.AmPmMarkers", - new String[] { - "vm.", - "nm.", - } - }, - { "islamic.narrow.Eras", - new String[] { - "", - "AH", - } - }, - { "islamic.short.Eras", - new String[] { - "", - "AH", - } - }, + sharedNarrowAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE, d. MMMM y G", - "d. MMMM y G", - "dd.MM.y G", - "dd.MM.yy GGGGG", - } - }, - { "java.time.buddhist.long.Eras", - new String[] { - "BC", - "BE", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.buddhist.short.Eras", new String[] { "BC", @@ -255,86 +214,27 @@ } }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE, d. MMMM y G", - "d. MMMM y G", - "dd.MM.y G", - "dd.MM.yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE, d. MMMM y G", - "d. MMMM y G", - "dd.MM.y G", - "dd.MM.yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.long.Eras", - javatimelongEras }, + sharedJavaTimeLongEras }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE, d. MMMM y G", - "d. MMMM y G", - "dd.MM.y G", - "dd.MM.yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", - javatimelongEras }, + sharedJavaTimeLongEras }, { "roc.AmPmMarkers", - new String[] { - "vorm.", - "nachm.", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "EEEE, d. MMMM y GGGG", - "d. MMMM y GGGG", - "dd.MM.y GGGG", - "dd.MM.yy G", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "So.", - "Mo.", - "Di.", - "Mi.", - "Do.", - "Fr.", - "Sa.", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "Sonntag", - "Montag", - "Dienstag", - "Mittwoch", - "Donnerstag", - "Freitag", - "Samstag", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "S", - "M", - "D", - "M", - "D", - "F", - "S", - } - }, + sharedDayNarrows }, { "roc.Eras", - new String[] { - "Before R.O.C.", - "Minguo", - } - }, + sharedEras }, { "roc.MonthAbbreviations", new String[] { "Jan.", @@ -387,59 +287,19 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "Q1", - "Q2", - "Q3", - "Q4", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "1. Quartal", - "2. Quartal", - "3. Quartal", - "4. Quartal", - } - }, - { "roc.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedQuarterNames }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "vorm.", - "nachm.", - } - }, + sharedAmPmMarkers }, { "roc.long.Eras", - new String[] { - "Before R.O.C.", - "Minguo", - } - }, + sharedEras }, { "roc.narrow.AmPmMarkers", - new String[] { - "vm.", - "nm.", - } - }, + sharedNarrowAmPmMarkers }, { "roc.narrow.Eras", - new String[] { - "Before R.O.C.", - "Minguo", - } - }, + sharedEras }, { "roc.short.Eras", - new String[] { - "Before R.O.C.", - "Minguo", - } - }, + sharedEras }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_de_AT.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_de_AT.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_de_AT.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. * 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,7 @@ /* * COPYRIGHT AND PERMISSION NOTICE * - * Copyright (C) 1991-2015 Unicode, Inc. All rights reserved. + * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved. * Distributed under the Terms of Use in * http://www.unicode.org/copyright.html. * diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_el.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_el.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_el.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,23 +72,91 @@ public class JavaTimeSupplementary_el extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "\u03a41", + "\u03a42", + "\u03a43", + "\u03a44", + }; + + final String[] sharedQuarterNames = { + "1\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf", + "2\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf", + "3\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf", + "4\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf", + }; + + final String[] sharedAmPmMarkers = { + "\u03c0.\u03bc.", + "\u03bc.\u03bc.", + }; + + final String[] sharedDatePatterns = { + "EEEE, d MMMM y GGGG", + "d MMMM y GGGG", + "d MMM y GGGG", + "d/M/y G", + }; + + final String[] sharedDayAbbreviations = { + "\u039a\u03c5\u03c1", + "\u0394\u03b5\u03c5", + "\u03a4\u03c1\u03af", + "\u03a4\u03b5\u03c4", + "\u03a0\u03ad\u03bc", + "\u03a0\u03b1\u03c1", + "\u03a3\u03ac\u03b2", + }; + + final String[] sharedDayNames = { + "\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae", + "\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1", + "\u03a4\u03c1\u03af\u03c4\u03b7", + "\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7", + "\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7", + "\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae", + "\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf", + }; + + final String[] sharedDayNarrows = { + "\u039a", + "\u0394", + "\u03a4", + "\u03a4", + "\u03a0", + "\u03a0", + "\u03a3", + }; + + final String[] sharedTimePatterns = { + "h:mm:ss a zzzz", + "h:mm:ss a z", + "h:mm:ss a", + "h:mm a", + }; + + final String[] sharedNarrowAmPmMarkers = { + "\u03c0\u03bc", + "\u03bc\u03bc", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, d MMMM y G", + "d MMMM y G", + "d MMM y G", + "d/M/y GGGGG", + }; + + final String[] sharedEras = { + "\u03a0\u03c1\u03b9\u03bd R.O.C.", + "R.O.C.", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "\u03a41", - "\u03a42", - "\u03a43", - "\u03a44", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "1\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf", - "2\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf", - "3\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf", - "4\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "\u0392\u03bf\u03c5\u03b4\u03b9\u03c3\u03c4\u03b9\u03ba\u03cc \u03b7\u03bc\u03b5\u03c1\u03bf\u03bb\u03cc\u03b3\u03b9\u03bf" }, { "calendarname.gregorian", @@ -124,110 +192,27 @@ { "field.zone", "\u03b6\u03ce\u03bd\u03b7 \u03ce\u03c1\u03b1\u03c2" }, { "islamic.AmPmMarkers", - new String[] { - "\u03c0.\u03bc.", - "\u03bc.\u03bc.", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "EEEE, d MMMM y GGGG", - "d MMMM y GGGG", - "d MMM y GGGG", - "d/M/y G", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "\u039a\u03c5\u03c1", - "\u0394\u03b5\u03c5", - "\u03a4\u03c1\u03af", - "\u03a4\u03b5\u03c4", - "\u03a0\u03ad\u03bc", - "\u03a0\u03b1\u03c1", - "\u03a3\u03ac\u03b2", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae", - "\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1", - "\u03a4\u03c1\u03af\u03c4\u03b7", - "\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7", - "\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7", - "\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae", - "\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "\u039a", - "\u0394", - "\u03a4", - "\u03a4", - "\u03a0", - "\u03a0", - "\u03a3", - } - }, + sharedDayNarrows }, { "islamic.QuarterAbbreviations", - new String[] { - "\u03a41", - "\u03a42", - "\u03a43", - "\u03a44", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "1\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf", - "2\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf", - "3\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf", - "4\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, + sharedQuarterNames }, { "islamic.TimePatterns", - new String[] { - "h:mm:ss a zzzz", - "h:mm:ss a z", - "h:mm:ss a", - "h:mm a", - } - }, + sharedTimePatterns }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "\u03c0.\u03bc.", - "\u03bc.\u03bc.", - } - }, + sharedAmPmMarkers }, { "islamic.narrow.AmPmMarkers", - new String[] { - "\u03c0\u03bc", - "\u03bc\u03bc", - } - }, + sharedNarrowAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE, d MMMM y G", - "d MMMM y G", - "d MMM y G", - "d/M/y GGGGG", - } - }, - { "java.time.buddhist.long.Eras", - new String[] { - "BC", - "BE", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.buddhist.short.Eras", new String[] { "BC", @@ -235,13 +220,7 @@ } }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE, d MMMM y G", - "d MMMM y G", - "d MMM y G", - "d/M/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", new String[] { "EEEE, d MMMM, y G", @@ -257,13 +236,7 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE, d MMMM y G", - "d MMMM y G", - "d MMM y G", - "d/M/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "\u03c0.\u03a7.", @@ -271,58 +244,17 @@ } }, { "roc.AmPmMarkers", - new String[] { - "\u03c0.\u03bc.", - "\u03bc.\u03bc.", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "EEEE, d MMMM y GGGG", - "d MMMM y GGGG", - "d MMM y GGGG", - "d/M/y G", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "\u039a\u03c5\u03c1", - "\u0394\u03b5\u03c5", - "\u03a4\u03c1\u03af", - "\u03a4\u03b5\u03c4", - "\u03a0\u03ad\u03bc", - "\u03a0\u03b1\u03c1", - "\u03a3\u03ac\u03b2", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae", - "\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1", - "\u03a4\u03c1\u03af\u03c4\u03b7", - "\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7", - "\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7", - "\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae", - "\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "\u039a", - "\u0394", - "\u03a4", - "\u03a4", - "\u03a0", - "\u03a0", - "\u03a3", - } - }, + sharedDayNarrows }, { "roc.Eras", - new String[] { - "\u03a0\u03c1\u03b9\u03bd R.O.C.", - "R.O.C.", - } - }, + sharedEras }, { "roc.MonthAbbreviations", new String[] { "\u0399\u03b1\u03bd", @@ -375,59 +307,21 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "\u03a41", - "\u03a42", - "\u03a43", - "\u03a44", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "1\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf", - "2\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf", - "3\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf", - "4\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf", - } - }, + sharedQuarterNames }, { "roc.TimePatterns", - new String[] { - "h:mm:ss a zzzz", - "h:mm:ss a z", - "h:mm:ss a", - "h:mm a", - } - }, + sharedTimePatterns }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "\u03c0.\u03bc.", - "\u03bc.\u03bc.", - } - }, + sharedAmPmMarkers }, { "roc.long.Eras", - new String[] { - "\u03a0\u03c1\u03b9\u03bd R.O.C.", - "R.O.C.", - } - }, + sharedEras }, { "roc.narrow.AmPmMarkers", - new String[] { - "\u03c0\u03bc", - "\u03bc\u03bc", - } - }, + sharedNarrowAmPmMarkers }, { "roc.narrow.Eras", - new String[] { - "\u03a0\u03c1\u03b9\u03bd R.O.C.", - "R.O.C.", - } - }, + sharedEras }, { "roc.short.Eras", - new String[] { - "\u03a0\u03c1\u03b9\u03bd R.O.C.", - "R.O.C.", - } - }, + sharedEras }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_AU.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_AU.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_AU.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,123 +72,100 @@ public class JavaTimeSupplementary_en_AU extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedAmPmMarkers = { + "am", + "pm", + }; + + final String[] sharedDatePatterns = { + "EEEE, d MMMM y GGGG", + "d MMMM y GGGG", + "d MMM y GGGG", + "dd/MM/y G", + }; + + final String[] sharedDayAbbreviations = { + "Sun.", + "Mon.", + "Tue.", + "Wed.", + "Thu.", + "Fri.", + "Sat.", + }; + + final String[] sharedDayNarrows = { + "Su.", + "M.", + "Tu.", + "W.", + "Th.", + "F.", + "Sa.", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, d MMMM y G", + "d MMMM y G", + "d MMM y G", + "dd/MM/y GGGGG", + }; + + final String[] sharedMonthNarrows = { + "Jan.", + "Feb.", + "Mar.", + "Apr.", + "May", + "Jun.", + "Jul.", + "Aug.", + "Sep.", + "Oct.", + "Nov.", + "Dec.", + "", + }; + return new Object[][] { { "field.dayperiod", "am/pm" }, { "islamic.AmPmMarkers", - new String[] { - "am", - "pm", - } - }, + sharedAmPmMarkers }, + { "islamic.DatePatterns", + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "Sun.", - "Mon.", - "Tue.", - "Wed.", - "Thu.", - "Fri.", - "Sat.", - } - }, + sharedDayAbbreviations }, { "islamic.DayNarrows", - new String[] { - "Su.", - "M.", - "Tu.", - "W.", - "Th.", - "F.", - "Sa.", - } - }, + sharedDayNarrows }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "am", - "pm", - } - }, + sharedAmPmMarkers }, { "islamic.narrow.AmPmMarkers", - new String[] { - "am", - "pm", - } - }, + sharedAmPmMarkers }, + { "java.time.buddhist.DatePatterns", + sharedJavaTimeDatePatterns }, + { "java.time.islamic.DatePatterns", + sharedJavaTimeDatePatterns }, + { "java.time.japanese.DatePatterns", + sharedJavaTimeDatePatterns }, + { "java.time.roc.DatePatterns", + sharedJavaTimeDatePatterns }, { "roc.AmPmMarkers", - new String[] { - "am", - "pm", - } - }, + sharedAmPmMarkers }, + { "roc.DatePatterns", + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "Sun.", - "Mon.", - "Tue.", - "Wed.", - "Thu.", - "Fri.", - "Sat.", - } - }, + sharedDayAbbreviations }, { "roc.DayNarrows", - new String[] { - "Su.", - "M.", - "Tu.", - "W.", - "Th.", - "F.", - "Sa.", - } - }, + sharedDayNarrows }, { "roc.MonthAbbreviations", - new String[] { - "Jan.", - "Feb.", - "Mar.", - "Apr.", - "May", - "Jun.", - "Jul.", - "Aug.", - "Sep.", - "Oct.", - "Nov.", - "Dec.", - "", - } - }, + sharedMonthNarrows }, { "roc.MonthNarrows", - new String[] { - "Jan.", - "Feb.", - "Mar.", - "Apr.", - "May", - "Jun.", - "Jul.", - "Aug.", - "Sep.", - "Oct.", - "Nov.", - "Dec.", - "", - } - }, + sharedMonthNarrows }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "am", - "pm", - } - }, + sharedAmPmMarkers }, { "roc.narrow.AmPmMarkers", - new String[] { - "am", - "pm", - } - }, + sharedAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_CA.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_CA.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_CA.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. * 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,7 @@ /* * COPYRIGHT AND PERMISSION NOTICE * - * Copyright (C) 1991-2015 Unicode, Inc. All rights reserved. + * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved. * Distributed under the Terms of Use in * http://www.unicode.org/copyright.html. * @@ -72,55 +72,33 @@ public class JavaTimeSupplementary_en_CA extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedDatePatterns = { + "EEEE, MMMM d, y GGGG", + "MMMM d, y GGGG", + "MMM d, y GGGG", + "G y-MM-dd", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, MMMM d, y G", + "MMMM d, y G", + "MMM d, y G", + "GGGGG y-MM-dd", + }; + return new Object[][] { { "islamic.DatePatterns", - new String[] { - "EEEE, MMMM d, y GGGG", - "MMMM d, y GGGG", - "MMM d, y GGGG", - "G y-MM-dd", - } - }, + sharedDatePatterns }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE, MMMM d, y G", - "MMMM d, y G", - "MMM d, y G", - "GGGGG y-MM-dd", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE, MMMM d, y G", - "MMMM d, y G", - "MMM d, y G", - "GGGGG y-MM-dd", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE, MMMM d, y G", - "MMMM d, y G", - "MMM d, y G", - "GGGGG y-MM-dd", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE, MMMM d, y G", - "MMMM d, y G", - "MMM d, y G", - "GGGGG y-MM-dd", - } - }, + sharedJavaTimeDatePatterns }, { "roc.DatePatterns", - new String[] { - "EEEE, MMMM d, y GGGG", - "MMMM d, y GGGG", - "MMM d, y GGGG", - "G y-MM-dd", - } - }, + sharedDatePatterns }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_GB.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_GB.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_GB.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,61 +72,59 @@ public class JavaTimeSupplementary_en_GB extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedAmPmMarkers = { + "am", + "pm", + }; + + final String[] sharedDatePatterns = { + "EEEE, d MMMM y GGGG", + "d MMMM y GGGG", + "d MMM y GGGG", + "dd/MM/y G", + }; + + final String[] sharedTimePatterns = { + "HH:mm:ss zzzz", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, d MMMM y G", + "d MMMM y G", + "d MMM y G", + "dd/MM/y GGGGG", + }; + return new Object[][] { { "field.dayperiod", "am/pm" }, { "islamic.AmPmMarkers", - new String[] { - "am", - "pm", - } - }, + sharedAmPmMarkers }, + { "islamic.DatePatterns", + sharedDatePatterns }, { "islamic.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedTimePatterns }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "am", - "pm", - } - }, - { "islamic.narrow.AmPmMarkers", - new String[] { - "a", - "p", - } - }, + sharedAmPmMarkers }, + { "java.time.buddhist.DatePatterns", + sharedJavaTimeDatePatterns }, + { "java.time.islamic.DatePatterns", + sharedJavaTimeDatePatterns }, + { "java.time.japanese.DatePatterns", + sharedJavaTimeDatePatterns }, + { "java.time.roc.DatePatterns", + sharedJavaTimeDatePatterns }, { "roc.AmPmMarkers", - new String[] { - "am", - "pm", - } - }, + sharedAmPmMarkers }, + { "roc.DatePatterns", + sharedDatePatterns }, { "roc.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedTimePatterns }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "am", - "pm", - } - }, - { "roc.narrow.AmPmMarkers", - new String[] { - "a", - "p", - } - }, + sharedAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_IE.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_IE.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_IE.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,45 +72,43 @@ public class JavaTimeSupplementary_en_IE extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedAmPmMarkers = { + "a.m.", + "p.m.", + }; + + final String[] sharedDatePatterns = { + "EEEE d MMMM y GGGG", + "GGGG y MMMM d", + "GGGG y MMM d", + "G y-MM-dd", + }; + + final String[] sharedTimePatterns = { + "HH:mm:ss zzzz", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE d MMMM y G", + "G y MMMM d", + "G y MMM d", + "GGGGG y-MM-dd", + }; + return new Object[][] { { "islamic.AmPmMarkers", - new String[] { - "a.m.", - "p.m.", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "EEEE d MMMM y GGGG", - "GGGG y MMMM d", - "GGGG y MMM d", - "G y-MM-dd", - } - }, + sharedDatePatterns }, { "islamic.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedTimePatterns }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "G y MMMM d", - "G y MMM d", - "GGGGG y-MM-dd", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "G y MMMM d", - "G y MMM d", - "GGGGG y-MM-dd", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", new String[] { "EEEE d MMMM y G", @@ -120,35 +118,13 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "G y MMMM d", - "G y MMM d", - "GGGGG y-MM-dd", - } - }, + sharedJavaTimeDatePatterns }, { "roc.AmPmMarkers", - new String[] { - "a.m.", - "p.m.", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "EEEE d MMMM y GGGG", - "GGGG y MMMM d", - "GGGG y MMM d", - "G y-MM-dd", - } - }, + sharedDatePatterns }, { "roc.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedTimePatterns }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_IN.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_IN.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_IN.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. * 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,7 @@ /* * COPYRIGHT AND PERMISSION NOTICE * - * Copyright (C) 1991-2015 Unicode, Inc. All rights reserved. + * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved. * Distributed under the Terms of Use in * http://www.unicode.org/copyright.html. * @@ -72,31 +72,27 @@ public class JavaTimeSupplementary_en_IN extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedDatePatterns = { + "EEEE d MMMM y GGGG", + "GGGG y MMMM d", + "dd-MMM-y GGGG", + "G y-MM-dd", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE d MMMM y G", + "G y MMMM d", + "dd-MMM-y G", + "GGGGG y-MM-dd", + }; + return new Object[][] { { "islamic.DatePatterns", - new String[] { - "EEEE d MMMM y GGGG", - "GGGG y MMMM d", - "dd-MMM-y GGGG", - "G y-MM-dd", - } - }, + sharedDatePatterns }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "G y MMMM d", - "dd-MMM-y G", - "GGGGG y-MM-dd", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "G y MMMM d", - "dd-MMM-y G", - "GGGGG y-MM-dd", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", new String[] { "EEEE d MMMM y G", @@ -106,21 +102,9 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "G y MMMM d", - "dd-MMM-y G", - "GGGGG y-MM-dd", - } - }, + sharedJavaTimeDatePatterns }, { "roc.DatePatterns", - new String[] { - "EEEE d MMMM y GGGG", - "GGGG y MMMM d", - "dd-MMM-y GGGG", - "G y-MM-dd", - } - }, + sharedDatePatterns }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_MT.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_MT.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_MT.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. * 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,39 +72,36 @@ public class JavaTimeSupplementary_en_MT extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedDatePatterns = { + "GGGG y MMMM d, EEEE", + "dd MMMM y GGGG", + "dd MMM y GGGG", + "G y-MM-dd", + }; + + final String[] sharedTimePatterns = { + "HH:mm:ss zzzz", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + }; + + final String[] sharedJavaTimeDatePatterns = { + "G y MMMM d, EEEE", + "dd MMMM y G", + "dd MMM y G", + "GGGGG y-MM-dd", + }; + return new Object[][] { { "islamic.DatePatterns", - new String[] { - "GGGG y MMMM d, EEEE", - "dd MMMM y GGGG", - "dd MMM y GGGG", - "G y-MM-dd", - } - }, + sharedDatePatterns }, { "islamic.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedTimePatterns }, { "java.time.buddhist.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "dd MMMM y G", - "dd MMM y G", - "GGGGG y-MM-dd", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "dd MMMM y G", - "dd MMM y G", - "GGGGG y-MM-dd", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", new String[] { "EEEE, MMMM d, y G", @@ -114,29 +111,11 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "dd MMMM y G", - "dd MMM y G", - "GGGGG y-MM-dd", - } - }, + sharedJavaTimeDatePatterns }, { "roc.DatePatterns", - new String[] { - "GGGG y MMMM d, EEEE", - "dd MMMM y GGGG", - "dd MMM y GGGG", - "G y-MM-dd", - } - }, + sharedDatePatterns }, { "roc.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedTimePatterns }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_NZ.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_NZ.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_NZ.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. * 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,7 @@ /* * COPYRIGHT AND PERMISSION NOTICE * - * Copyright (C) 1991-2015 Unicode, Inc. All rights reserved. + * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved. * Distributed under the Terms of Use in * http://www.unicode.org/copyright.html. * @@ -72,31 +72,27 @@ public class JavaTimeSupplementary_en_NZ extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedDatePatterns = { + "GGGG y MMMM d, EEEE", + "GGGG y MMMM d", + "d/MM/y GGGG", + "d/MM/y G", + }; + + final String[] sharedJavaTimeDatePatterns = { + "G y MMMM d, EEEE", + "G y MMMM d", + "d/MM/y G", + "d/MM/y GGGGG", + }; + return new Object[][] { { "islamic.DatePatterns", - new String[] { - "GGGG y MMMM d, EEEE", - "GGGG y MMMM d", - "d/MM/y GGGG", - "d/MM/y G", - } - }, + sharedDatePatterns }, { "java.time.buddhist.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "d/MM/y G", - "d/MM/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "d/MM/y G", - "d/MM/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", new String[] { "EEEE, MMMM d, y G", @@ -106,21 +102,9 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "d/MM/y G", - "d/MM/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "roc.DatePatterns", - new String[] { - "GGGG y MMMM d, EEEE", - "GGGG y MMMM d", - "d/MM/y GGGG", - "d/MM/y G", - } - }, + sharedDatePatterns }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_SG.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_SG.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_SG.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved. * 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,7 @@ /* * COPYRIGHT AND PERMISSION NOTICE * - * Copyright (C) 1991-2015 Unicode, Inc. All rights reserved. + * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved. * Distributed under the Terms of Use in * http://www.unicode.org/copyright.html. * @@ -72,31 +72,27 @@ public class JavaTimeSupplementary_en_SG extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedDatePatterns = { + "GGGG y MMMM d, EEEE", + "GGGG y MMMM d", + "GGGG y MMM d", + "d/M/yy G", + }; + + final String[] sharedJavaTimeDatePatterns = { + "G y MMMM d, EEEE", + "G y MMMM d", + "G y MMM d", + "d/M/yy GGGGG", + }; + return new Object[][] { { "islamic.DatePatterns", - new String[] { - "GGGG y MMMM d, EEEE", - "GGGG y MMMM d", - "GGGG y MMM d", - "d/M/yy G", - } - }, + sharedDatePatterns }, { "java.time.buddhist.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "G y MMM d", - "d/M/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "G y MMM d", - "d/M/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", new String[] { "EEEE, MMMM d, y G", @@ -106,21 +102,9 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "G y MMM d", - "d/M/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "roc.DatePatterns", - new String[] { - "GGGG y MMMM d, EEEE", - "GGGG y MMMM d", - "GGGG y MMM d", - "d/M/yy G", - } - }, + sharedDatePatterns }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_ZA.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_ZA.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_ZA.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. * 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,7 @@ /* * COPYRIGHT AND PERMISSION NOTICE * - * Copyright (C) 1991-2015 Unicode, Inc. All rights reserved. + * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved. * Distributed under the Terms of Use in * http://www.unicode.org/copyright.html. * @@ -72,55 +72,33 @@ public class JavaTimeSupplementary_en_ZA extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedDatePatterns = { + "EEEE, dd MMMM y GGGG", + "dd MMMM y GGGG", + "dd MMM y GGGG", + "G y/MM/dd", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, dd MMMM y G", + "dd MMMM y G", + "dd MMM y G", + "GGGGG y/MM/dd", + }; + return new Object[][] { { "islamic.DatePatterns", - new String[] { - "EEEE, dd MMMM y GGGG", - "dd MMMM y GGGG", - "dd MMM y GGGG", - "G y/MM/dd", - } - }, + sharedDatePatterns }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE, dd MMMM y G", - "dd MMMM y G", - "dd MMM y G", - "GGGGG y/MM/dd", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE, dd MMMM y G", - "dd MMMM y G", - "dd MMM y G", - "GGGGG y/MM/dd", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE, dd MMMM y G", - "dd MMMM y G", - "dd MMM y G", - "GGGGG y/MM/dd", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE, dd MMMM y G", - "dd MMMM y G", - "dd MMM y G", - "GGGGG y/MM/dd", - } - }, + sharedJavaTimeDatePatterns }, { "roc.DatePatterns", - new String[] { - "EEEE, dd MMMM y GGGG", - "dd MMMM y GGGG", - "dd MMM y GGGG", - "G y/MM/dd", - } - }, + sharedDatePatterns }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,23 +72,86 @@ public class JavaTimeSupplementary_es extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "T1", + "T2", + "T3", + "T4", + }; + + final String[] sharedQuarterNames = { + "1.er trimestre", + "2.\u00ba trimestre", + "3.er trimestre", + "4.\u00ba trimestre", + }; + + final String[] sharedAmPmMarkers = { + "a. m.", + "p. m.", + }; + + final String[] sharedDatePatterns = { + "EEEE, d 'de' MMMM 'de' y GGGG", + "d 'de' MMMM 'de' y GGGG", + "d/M/y GGGG", + "d/M/yy GGGG", + }; + + final String[] sharedDayAbbreviations = { + "dom.", + "lun.", + "mar.", + "mi\u00e9.", + "jue.", + "vie.", + "s\u00e1b.", + }; + + final String[] sharedDayNames = { + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado", + }; + + final String[] sharedDayNarrows = { + "D", + "L", + "M", + "X", + "J", + "V", + "S", + }; + + final String[] sharedTimePatterns = { + "H:mm:ss (zzzz)", + "H:mm:ss z", + "H:mm:ss", + "H:mm", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, d 'de' MMMM 'de' y G", + "d 'de' MMMM 'de' y G", + "d/M/y G", + "d/M/yy G", + }; + + final String[] sharedEras = { + "antes de R.O.C.", + "", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "T1", - "T2", - "T3", - "T4", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "1.er trimestre", - "2.\u00ba trimestre", - "3.er trimestre", - "4.\u00ba trimestre", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "calendario budista" }, { "calendarname.gregorian", @@ -124,134 +187,27 @@ { "field.zone", "zona horaria" }, { "islamic.AmPmMarkers", - new String[] { - "a. m.", - "p. m.", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "EEEE, d 'de' MMMM 'de' y GGGG", - "d 'de' MMMM 'de' y GGGG", - "d/M/y GGGG", - "d/M/yy GGGG", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "dom.", - "lun.", - "mar.", - "mi\u00e9.", - "jue.", - "vie.", - "s\u00e1b.", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "domingo", - "lunes", - "martes", - "mi\u00e9rcoles", - "jueves", - "viernes", - "s\u00e1bado", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "D", - "L", - "M", - "X", - "J", - "V", - "S", - } - }, - { "islamic.Eras", - new String[] { - "", - "AH", - } - }, + sharedDayNarrows }, { "islamic.QuarterAbbreviations", - new String[] { - "T1", - "T2", - "T3", - "T4", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "1.er trimestre", - "2.\u00ba trimestre", - "3.er trimestre", - "4.\u00ba trimestre", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, + sharedQuarterNames }, { "islamic.TimePatterns", - new String[] { - "H:mm:ss (zzzz)", - "H:mm:ss z", - "H:mm:ss", - "H:mm", - } - }, + sharedTimePatterns }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "a. m.", - "p. m.", - } - }, - { "islamic.long.Eras", - new String[] { - "", - "AH", - } - }, + sharedAmPmMarkers }, { "islamic.narrow.AmPmMarkers", - new String[] { - "a. m.", - "p. m.", - } - }, - { "islamic.narrow.Eras", - new String[] { - "", - "AH", - } - }, - { "islamic.short.Eras", - new String[] { - "", - "AH", - } - }, + sharedAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE, d 'de' MMMM 'de' y G", - "d 'de' MMMM 'de' y G", - "d/M/y G", - "d/M/yy G", - } - }, - { "java.time.buddhist.long.Eras", - new String[] { - "BC", - "BE", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.buddhist.short.Eras", new String[] { "BC", @@ -259,13 +215,7 @@ } }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE, d 'de' MMMM 'de' y G", - "d 'de' MMMM 'de' y G", - "d/M/y G", - "d/M/yy G", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", new String[] { "EEEE, d 'de' MMMM 'de' y G", @@ -281,13 +231,7 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE, d 'de' MMMM 'de' y G", - "d 'de' MMMM 'de' y G", - "d/M/y G", - "d/M/yy G", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "antes de Cristo", @@ -295,58 +239,17 @@ } }, { "roc.AmPmMarkers", - new String[] { - "a. m.", - "p. m.", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "EEEE, d 'de' MMMM 'de' y GGGG", - "d 'de' MMMM 'de' y GGGG", - "d/M/y GGGG", - "d/M/yy GGGG", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "dom.", - "lun.", - "mar.", - "mi\u00e9.", - "jue.", - "vie.", - "s\u00e1b.", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "domingo", - "lunes", - "martes", - "mi\u00e9rcoles", - "jueves", - "viernes", - "s\u00e1bado", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "D", - "L", - "M", - "X", - "J", - "V", - "S", - } - }, + sharedDayNarrows }, { "roc.Eras", - new String[] { - "antes de R.O.C.", - "", - } - }, + sharedEras }, { "roc.MonthAbbreviations", new String[] { "ene.", @@ -399,59 +302,21 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "T1", - "T2", - "T3", - "T4", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "1.er trimestre", - "2.\u00ba trimestre", - "3.er trimestre", - "4.\u00ba trimestre", - } - }, + sharedQuarterNames }, { "roc.TimePatterns", - new String[] { - "H:mm:ss (zzzz)", - "H:mm:ss z", - "H:mm:ss", - "H:mm", - } - }, + sharedTimePatterns }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "a. m.", - "p. m.", - } - }, + sharedAmPmMarkers }, { "roc.long.Eras", - new String[] { - "antes de R.O.C.", - "", - } - }, + sharedEras }, { "roc.narrow.AmPmMarkers", - new String[] { - "a. m.", - "p. m.", - } - }, + sharedAmPmMarkers }, { "roc.narrow.Eras", - new String[] { - "antes de R.O.C.", - "", - } - }, + sharedEras }, { "roc.short.Eras", - new String[] { - "antes de R.O.C.", - "", - } - }, + sharedEras }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_AR.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_AR.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,180 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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. + */ + +/* + * COPYRIGHT AND PERMISSION NOTICE + * + * Copyright (C) 1991-2016 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 of the Unicode data files and any associated documentation + * (the "Data Files") or Unicode software and any associated documentation + * (the "Software") to deal in the Data Files or Software + * without restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, and/or sell copies of + * the Data Files or Software, and to permit persons to whom the Data Files + * or Software are furnished to do so, provided that + * (a) this copyright and permission notice appear with all copies + * of the Data Files or Software, + * (b) this copyright and permission notice appear in associated + * documentation, and + * (c) there is clear notice in each modified Data File or in the Software + * as well as in the documentation associated with the Data File(s) or + * Software that the data or software has been modified. + * + * THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS + * NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL + * DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THE DATA FILES OR SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, + * use or other dealings in these Data Files or Software without prior + * written authorization of the copyright holder. + */ + +// Note: this file has been generated by a tool. + +package sun.text.resources.ext; + +import sun.util.resources.OpenListResourceBundle; + +public class JavaTimeSupplementary_es_AR extends OpenListResourceBundle { + @Override + protected final Object[][] getContents() { + final String[] sharedAmPmMarkers = { + "a.m.", + "p.m.", + }; + + final String[] sharedDatePatterns = { + "GGGG y MMMM d, EEEE", + "GGGG y MMMM d", + "GGGG y MMM d", + "dd/MM/yy G", + }; + + final String[] sharedDayNarrows = { + "d", + "l", + "m", + "m", + "j", + "v", + "s", + }; + + final String[] sharedTimePatterns = { + "HH:mm:ss zzzz", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + }; + + final String[] sharedJavaTimeDatePatterns = { + "G y MMMM d, EEEE", + "G y MMMM d", + "G y MMM d", + "dd/MM/yy GGGGG", + }; + + return new Object[][] { + { "field.dayperiod", + "a.m./p.m." }, + { "islamic.AmPmMarkers", + sharedAmPmMarkers }, + { "islamic.DatePatterns", + sharedDatePatterns }, + { "islamic.DayNarrows", + sharedDayNarrows }, + { "islamic.TimePatterns", + sharedTimePatterns }, + { "islamic.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "islamic.narrow.AmPmMarkers", + sharedAmPmMarkers }, + { "java.time.buddhist.DatePatterns", + sharedJavaTimeDatePatterns }, + { "java.time.islamic.DatePatterns", + sharedJavaTimeDatePatterns }, + { "java.time.roc.DatePatterns", + sharedJavaTimeDatePatterns }, + { "roc.AmPmMarkers", + sharedAmPmMarkers }, + { "roc.DatePatterns", + sharedDatePatterns }, + { "roc.DayNarrows", + sharedDayNarrows }, + { "roc.MonthAbbreviations", + new String[] { + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "sep.", + "oct.", + "nov.", + "dic.", + "", + } + }, + { "roc.MonthNarrows", + new String[] { + "e", + "f", + "m", + "a", + "m", + "j", + "j", + "a", + "s", + "o", + "n", + "d", + "", + } + }, + { "roc.TimePatterns", + sharedTimePatterns }, + { "roc.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "roc.narrow.AmPmMarkers", + sharedAmPmMarkers }, + }; + } +} diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_BO.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_BO.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,182 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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. + */ + +/* + * COPYRIGHT AND PERMISSION NOTICE + * + * Copyright (C) 1991-2016 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 of the Unicode data files and any associated documentation + * (the "Data Files") or Unicode software and any associated documentation + * (the "Software") to deal in the Data Files or Software + * without restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, and/or sell copies of + * the Data Files or Software, and to permit persons to whom the Data Files + * or Software are furnished to do so, provided that + * (a) this copyright and permission notice appear with all copies + * of the Data Files or Software, + * (b) this copyright and permission notice appear in associated + * documentation, and + * (c) there is clear notice in each modified Data File or in the Software + * as well as in the documentation associated with the Data File(s) or + * Software that the data or software has been modified. + * + * THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS + * NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL + * DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THE DATA FILES OR SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, + * use or other dealings in these Data Files or Software without prior + * written authorization of the copyright holder. + */ + +// Note: this file has been generated by a tool. + +package sun.text.resources.ext; + +import sun.util.resources.OpenListResourceBundle; + +public class JavaTimeSupplementary_es_BO extends OpenListResourceBundle { + @Override + protected final Object[][] getContents() { + final String[] sharedAmPmMarkers = { + "a.m.", + "p.m.", + }; + + final String[] sharedDatePatterns = { + "GGGG y MMMM d, EEEE", + "GGGG y MMMM d", + "GGGG y MMM d", + "dd/MM/yy G", + }; + + final String[] sharedDayNarrows = { + "d", + "l", + "m", + "m", + "j", + "v", + "s", + }; + + final String[] sharedTimePatterns = { + "HH:mm:ss zzzz", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + }; + + final String[] sharedJavaTimeDatePatterns = { + "G y MMMM d, EEEE", + "G y MMMM d", + "G y MMM d", + "dd/MM/yy GGGGG", + }; + + return new Object[][] { + { "field.dayperiod", + "a.m./p.m." }, + { "field.zone", + "Zona horaria" }, + { "islamic.AmPmMarkers", + sharedAmPmMarkers }, + { "islamic.DatePatterns", + sharedDatePatterns }, + { "islamic.DayNarrows", + sharedDayNarrows }, + { "islamic.TimePatterns", + sharedTimePatterns }, + { "islamic.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "islamic.narrow.AmPmMarkers", + sharedAmPmMarkers }, + { "java.time.buddhist.DatePatterns", + sharedJavaTimeDatePatterns }, + { "java.time.islamic.DatePatterns", + sharedJavaTimeDatePatterns }, + { "java.time.roc.DatePatterns", + sharedJavaTimeDatePatterns }, + { "roc.AmPmMarkers", + sharedAmPmMarkers }, + { "roc.DatePatterns", + sharedDatePatterns }, + { "roc.DayNarrows", + sharedDayNarrows }, + { "roc.MonthAbbreviations", + new String[] { + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "sep.", + "oct.", + "nov.", + "dic.", + "", + } + }, + { "roc.MonthNarrows", + new String[] { + "e", + "f", + "m", + "a", + "m", + "j", + "j", + "a", + "s", + "o", + "n", + "d", + "", + } + }, + { "roc.TimePatterns", + sharedTimePatterns }, + { "roc.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "roc.narrow.AmPmMarkers", + sharedAmPmMarkers }, + }; + } +} diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_CL.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_CL.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_CL.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,47 +72,74 @@ public class JavaTimeSupplementary_es_CL extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterNames = { + "1.\u00b0 trimestre", + "2.\u00b0 trimestre", + "3.\u00b0 trimestre", + "4.\u00ba trimestre", + }; + + final String[] sharedAmPmMarkers = { + "a.m.", + "p.m.", + }; + + final String[] sharedDatePatterns = { + "GGGG y MMMM d, EEEE", + "GGGG y MMMM d", + "dd-MM-y GGGG", + "dd-MM-y G", + }; + + final String[] sharedDayNarrows = { + "d", + "l", + "m", + "m", + "j", + "v", + "s", + }; + + final String[] sharedTimePatterns = { + "HH:mm:ss zzzz", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + }; + + final String[] sharedJavaTimeDatePatterns = { + "G y MMMM d, EEEE", + "G y MMMM d", + "dd-MM-y G", + "dd-MM-y GGGGG", + }; + return new Object[][] { { "QuarterNames", - new String[] { - "1.\u00b0 trimestre", - "2.\u00b0 trimestre", - "3.\u00b0 trimestre", - "4.\u00ba trimestre", - } - }, + sharedQuarterNames }, + { "field.dayperiod", + "a.m./p.m." }, + { "field.zone", + "Zona horaria" }, + { "islamic.AmPmMarkers", + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "GGGG y MMMM d, EEEE", - "GGGG y MMMM d", - "dd-MM-y GGGG", - "dd-MM-y G", - } - }, + sharedDatePatterns }, + { "islamic.DayNarrows", + sharedDayNarrows }, { "islamic.QuarterNames", - new String[] { - "1.\u00b0 trimestre", - "2.\u00b0 trimestre", - "3.\u00b0 trimestre", - "4.\u00ba trimestre", - } - }, + sharedQuarterNames }, + { "islamic.TimePatterns", + sharedTimePatterns }, + { "islamic.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "islamic.narrow.AmPmMarkers", + sharedAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "dd-MM-y G", - "dd-MM-y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "dd-MM-y G", - "dd-MM-y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", new String[] { "EEEE, d 'de' MMMM 'de' y G", @@ -122,29 +149,38 @@ } }, { "java.time.roc.DatePatterns", + sharedJavaTimeDatePatterns }, + { "roc.AmPmMarkers", + sharedAmPmMarkers }, + { "roc.DatePatterns", + sharedDatePatterns }, + { "roc.DayNarrows", + sharedDayNarrows }, + { "roc.MonthNarrows", new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "dd-MM-y G", - "dd-MM-y GGGGG", - } - }, - { "roc.DatePatterns", - new String[] { - "GGGG y MMMM d, EEEE", - "GGGG y MMMM d", - "dd-MM-y GGGG", - "dd-MM-y G", + "e", + "f", + "m", + "a", + "m", + "j", + "j", + "a", + "s", + "o", + "n", + "d", + "", } }, { "roc.QuarterNames", - new String[] { - "1.\u00b0 trimestre", - "2.\u00b0 trimestre", - "3.\u00b0 trimestre", - "4.\u00ba trimestre", - } - }, + sharedQuarterNames }, + { "roc.TimePatterns", + sharedTimePatterns }, + { "roc.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "roc.narrow.AmPmMarkers", + sharedAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_CO.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_CO.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_CO.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,50 +72,61 @@ public class JavaTimeSupplementary_es_CO extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedAmPmMarkers = { + "a.m.", + "p.m.", + }; + + final String[] sharedDatePatterns = { + "GGGG y MMMM d, EEEE", + "GGGG y MMMM d", + "d/MM/y GGGG", + "d/MM/yy G", + }; + + final String[] sharedDayNarrows = { + "d", + "l", + "m", + "m", + "j", + "v", + "s", + }; + + final String[] sharedTimePatterns = { + "h:mm:ss a zzzz", + "h:mm:ss a z", + "h:mm:ss a", + "h:mm a", + }; + + final String[] sharedJavaTimeDatePatterns = { + "G y MMMM d, EEEE", + "G y MMMM d", + "d/MM/y G", + "d/MM/yy GGGGG", + }; + return new Object[][] { + { "field.zone", + "Zona horaria" }, + { "islamic.AmPmMarkers", + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "GGGG y MMMM d, EEEE", - "GGGG y MMMM d", - "d/MM/y GGGG", - "d/MM/yy G", - } - }, + sharedDatePatterns }, { "islamic.DayNarrows", - new String[] { - "d", - "l", - "m", - "m", - "j", - "v", - "s", - } - }, + sharedDayNarrows }, { "islamic.TimePatterns", - new String[] { - "h:mm:ss a zzzz", - "h:mm:ss a z", - "h:mm:ss a", - "h:mm a", - } - }, + sharedTimePatterns }, + { "islamic.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "islamic.narrow.AmPmMarkers", + sharedAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "d/MM/y G", - "d/MM/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "d/MM/y G", - "d/MM/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", new String[] { "EEEE, d 'de' MMMM 'de' y G", @@ -125,40 +136,36 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "d/MM/y G", - "d/MM/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, + { "roc.AmPmMarkers", + sharedAmPmMarkers }, { "roc.DatePatterns", + sharedDatePatterns }, + { "roc.DayNarrows", + sharedDayNarrows }, + { "roc.MonthNarrows", new String[] { - "GGGG y MMMM d, EEEE", - "GGGG y MMMM d", - "d/MM/y GGGG", - "d/MM/yy G", - } - }, - { "roc.DayNarrows", - new String[] { - "d", - "l", + "e", + "f", "m", + "a", "m", "j", - "v", + "j", + "a", "s", + "o", + "n", + "d", + "", } }, { "roc.TimePatterns", - new String[] { - "h:mm:ss a zzzz", - "h:mm:ss a z", - "h:mm:ss a", - "h:mm a", - } - }, + sharedTimePatterns }, + { "roc.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "roc.narrow.AmPmMarkers", + sharedAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_CR.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_CR.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,182 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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. + */ + +/* + * COPYRIGHT AND PERMISSION NOTICE + * + * Copyright (C) 1991-2016 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 of the Unicode data files and any associated documentation + * (the "Data Files") or Unicode software and any associated documentation + * (the "Software") to deal in the Data Files or Software + * without restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, and/or sell copies of + * the Data Files or Software, and to permit persons to whom the Data Files + * or Software are furnished to do so, provided that + * (a) this copyright and permission notice appear with all copies + * of the Data Files or Software, + * (b) this copyright and permission notice appear in associated + * documentation, and + * (c) there is clear notice in each modified Data File or in the Software + * as well as in the documentation associated with the Data File(s) or + * Software that the data or software has been modified. + * + * THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS + * NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL + * DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THE DATA FILES OR SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, + * use or other dealings in these Data Files or Software without prior + * written authorization of the copyright holder. + */ + +// Note: this file has been generated by a tool. + +package sun.text.resources.ext; + +import sun.util.resources.OpenListResourceBundle; + +public class JavaTimeSupplementary_es_CR extends OpenListResourceBundle { + @Override + protected final Object[][] getContents() { + final String[] sharedAmPmMarkers = { + "a.m.", + "p.m.", + }; + + final String[] sharedDatePatterns = { + "GGGG y MMMM d, EEEE", + "GGGG y MMMM d", + "GGGG y MMM d", + "dd/MM/yy G", + }; + + final String[] sharedDayNarrows = { + "d", + "l", + "m", + "m", + "j", + "v", + "s", + }; + + final String[] sharedTimePatterns = { + "HH:mm:ss zzzz", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + }; + + final String[] sharedJavaTimeDatePatterns = { + "G y MMMM d, EEEE", + "G y MMMM d", + "G y MMM d", + "dd/MM/yy GGGGG", + }; + + return new Object[][] { + { "field.dayperiod", + "a.m./p.m." }, + { "field.zone", + "Zona horaria" }, + { "islamic.AmPmMarkers", + sharedAmPmMarkers }, + { "islamic.DatePatterns", + sharedDatePatterns }, + { "islamic.DayNarrows", + sharedDayNarrows }, + { "islamic.TimePatterns", + sharedTimePatterns }, + { "islamic.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "islamic.narrow.AmPmMarkers", + sharedAmPmMarkers }, + { "java.time.buddhist.DatePatterns", + sharedJavaTimeDatePatterns }, + { "java.time.islamic.DatePatterns", + sharedJavaTimeDatePatterns }, + { "java.time.roc.DatePatterns", + sharedJavaTimeDatePatterns }, + { "roc.AmPmMarkers", + sharedAmPmMarkers }, + { "roc.DatePatterns", + sharedDatePatterns }, + { "roc.DayNarrows", + sharedDayNarrows }, + { "roc.MonthAbbreviations", + new String[] { + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "sep.", + "oct.", + "nov.", + "dic.", + "", + } + }, + { "roc.MonthNarrows", + new String[] { + "e", + "f", + "m", + "a", + "m", + "j", + "j", + "a", + "s", + "o", + "n", + "d", + "", + } + }, + { "roc.TimePatterns", + sharedTimePatterns }, + { "roc.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "roc.narrow.AmPmMarkers", + sharedAmPmMarkers }, + }; + } +} diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_DO.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_DO.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_DO.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,15 +72,54 @@ public class JavaTimeSupplementary_es_DO extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "Q1", + "Q2", + "Q3", + "Q4", + }; + + final String[] sharedAmPmMarkers = { + "a.m.", + "p.m.", + }; + + final String[] sharedDatePatterns = { + "GGGG y MMMM d, EEEE", + "GGGG y MMMM d", + "dd/MM/y GGGG", + "G y-MM-dd", + }; + + final String[] sharedDayNarrows = { + "d", + "l", + "m", + "m", + "j", + "v", + "s", + }; + + final String[] sharedTimePatterns = { + "h:mm:ss a zzzz", + "h:mm:ss a z", + "h:mm:ss a", + "h:mm a", + }; + + final String[] sharedJavaTimeDatePatterns = { + "G y MMMM d, EEEE", + "G y MMMM d", + "dd/MM/y G", + "GGGGG y-MM-dd", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "Q1", - "Q2", - "Q3", - "Q4", - } - }, + sharedQuarterAbbreviations }, + { "field.dayperiod", + "a.m./p.m." }, { "field.era", "Era" }, { "field.minute", @@ -95,78 +134,76 @@ "D\u00eda de la semana" }, { "field.year", "A\u00f1o" }, + { "field.zone", + "Zona horaria" }, + { "islamic.AmPmMarkers", + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "GGGG y MMMM d, EEEE", - "GGGG y MMMM d", - "dd/MM/y GGGG", - "G y-MM-dd", - } - }, + sharedDatePatterns }, + { "islamic.DayNarrows", + sharedDayNarrows }, { "islamic.QuarterAbbreviations", + sharedQuarterAbbreviations }, + { "islamic.TimePatterns", + sharedTimePatterns }, + { "islamic.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "islamic.narrow.AmPmMarkers", + sharedAmPmMarkers }, + { "java.time.buddhist.DatePatterns", + sharedJavaTimeDatePatterns }, + { "java.time.islamic.DatePatterns", + sharedJavaTimeDatePatterns }, + { "java.time.roc.DatePatterns", + sharedJavaTimeDatePatterns }, + { "roc.AmPmMarkers", + sharedAmPmMarkers }, + { "roc.DatePatterns", + sharedDatePatterns }, + { "roc.DayNarrows", + sharedDayNarrows }, + { "roc.MonthAbbreviations", new String[] { - "Q1", - "Q2", - "Q3", - "Q4", - } - }, - { "islamic.TimePatterns", - new String[] { - "h:mm:ss a zzzz", - "h:mm:ss a z", - "h:mm:ss a", - "h:mm a", + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "sep.", + "oct.", + "nov.", + "dic.", + "", } }, - { "java.time.buddhist.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "dd/MM/y G", - "GGGGG y-MM-dd", - } - }, - { "java.time.islamic.DatePatterns", + { "roc.MonthNarrows", new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "dd/MM/y G", - "GGGGG y-MM-dd", - } - }, - { "java.time.roc.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "dd/MM/y G", - "GGGGG y-MM-dd", - } - }, - { "roc.DatePatterns", - new String[] { - "GGGG y MMMM d, EEEE", - "GGGG y MMMM d", - "dd/MM/y GGGG", - "G y-MM-dd", + "e", + "f", + "m", + "a", + "m", + "j", + "j", + "a", + "s", + "o", + "n", + "d", + "", } }, { "roc.QuarterAbbreviations", - new String[] { - "Q1", - "Q2", - "Q3", - "Q4", - } - }, + sharedQuarterAbbreviations }, { "roc.TimePatterns", - new String[] { - "h:mm:ss a zzzz", - "h:mm:ss a z", - "h:mm:ss a", - "h:mm a", - } - }, + sharedTimePatterns }, + { "roc.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "roc.narrow.AmPmMarkers", + sharedAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_EC.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_EC.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,182 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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. + */ + +/* + * COPYRIGHT AND PERMISSION NOTICE + * + * Copyright (C) 1991-2016 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 of the Unicode data files and any associated documentation + * (the "Data Files") or Unicode software and any associated documentation + * (the "Software") to deal in the Data Files or Software + * without restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, and/or sell copies of + * the Data Files or Software, and to permit persons to whom the Data Files + * or Software are furnished to do so, provided that + * (a) this copyright and permission notice appear with all copies + * of the Data Files or Software, + * (b) this copyright and permission notice appear in associated + * documentation, and + * (c) there is clear notice in each modified Data File or in the Software + * as well as in the documentation associated with the Data File(s) or + * Software that the data or software has been modified. + * + * THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS + * NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL + * DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THE DATA FILES OR SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, + * use or other dealings in these Data Files or Software without prior + * written authorization of the copyright holder. + */ + +// Note: this file has been generated by a tool. + +package sun.text.resources.ext; + +import sun.util.resources.OpenListResourceBundle; + +public class JavaTimeSupplementary_es_EC extends OpenListResourceBundle { + @Override + protected final Object[][] getContents() { + final String[] sharedAmPmMarkers = { + "a.m.", + "p.m.", + }; + + final String[] sharedDatePatterns = { + "GGGG y MMMM d, EEEE", + "GGGG y MMMM d", + "GGGG y MMM d", + "dd/MM/yy G", + }; + + final String[] sharedDayNarrows = { + "d", + "l", + "m", + "m", + "j", + "v", + "s", + }; + + final String[] sharedTimePatterns = { + "HH:mm:ss zzzz", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + }; + + final String[] sharedJavaTimeDatePatterns = { + "G y MMMM d, EEEE", + "G y MMMM d", + "G y MMM d", + "dd/MM/yy GGGGG", + }; + + return new Object[][] { + { "field.dayperiod", + "a.m./p.m." }, + { "field.zone", + "Zona horaria" }, + { "islamic.AmPmMarkers", + sharedAmPmMarkers }, + { "islamic.DatePatterns", + sharedDatePatterns }, + { "islamic.DayNarrows", + sharedDayNarrows }, + { "islamic.TimePatterns", + sharedTimePatterns }, + { "islamic.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "islamic.narrow.AmPmMarkers", + sharedAmPmMarkers }, + { "java.time.buddhist.DatePatterns", + sharedJavaTimeDatePatterns }, + { "java.time.islamic.DatePatterns", + sharedJavaTimeDatePatterns }, + { "java.time.roc.DatePatterns", + sharedJavaTimeDatePatterns }, + { "roc.AmPmMarkers", + sharedAmPmMarkers }, + { "roc.DatePatterns", + sharedDatePatterns }, + { "roc.DayNarrows", + sharedDayNarrows }, + { "roc.MonthAbbreviations", + new String[] { + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "sep.", + "oct.", + "nov.", + "dic.", + "", + } + }, + { "roc.MonthNarrows", + new String[] { + "e", + "f", + "m", + "a", + "m", + "j", + "j", + "a", + "s", + "o", + "n", + "d", + "", + } + }, + { "roc.TimePatterns", + sharedTimePatterns }, + { "roc.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "roc.narrow.AmPmMarkers", + sharedAmPmMarkers }, + }; + } +} diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_GT.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_GT.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_GT.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. * 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,7 @@ /* * COPYRIGHT AND PERMISSION NOTICE * - * Copyright (C) 1991-2015 Unicode, Inc. All rights reserved. + * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved. * Distributed under the Terms of Use in * http://www.unicode.org/copyright.html. * @@ -72,31 +72,63 @@ public class JavaTimeSupplementary_es_GT extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedAmPmMarkers = { + "a.m.", + "p.m.", + }; + + final String[] sharedDatePatterns = { + "GGGG y MMMM d, EEEE", + "GGGG y MMMM d", + "d/MM/y GGGG", + "d/MM/yy G", + }; + + final String[] sharedDayNarrows = { + "d", + "l", + "m", + "m", + "j", + "v", + "s", + }; + + final String[] sharedTimePatterns = { + "HH:mm:ss zzzz", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + }; + + final String[] sharedJavaTimeDatePatterns = { + "G y MMMM d, EEEE", + "G y MMMM d", + "d/MM/y G", + "d/MM/yy GGGGG", + }; + return new Object[][] { + { "field.dayperiod", + "a.m./p.m." }, + { "field.zone", + "Zona horaria" }, + { "islamic.AmPmMarkers", + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "GGGG y MMMM d, EEEE", - "GGGG y MMMM d", - "d/MM/y GGGG", - "d/MM/yy G", - } - }, + sharedDatePatterns }, + { "islamic.DayNarrows", + sharedDayNarrows }, + { "islamic.TimePatterns", + sharedTimePatterns }, + { "islamic.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "islamic.narrow.AmPmMarkers", + sharedAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "d/MM/y G", - "d/MM/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "d/MM/y G", - "d/MM/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", new String[] { "EEEE, d 'de' MMMM 'de' y G", @@ -106,21 +138,53 @@ } }, { "java.time.roc.DatePatterns", + sharedJavaTimeDatePatterns }, + { "roc.AmPmMarkers", + sharedAmPmMarkers }, + { "roc.DatePatterns", + sharedDatePatterns }, + { "roc.DayNarrows", + sharedDayNarrows }, + { "roc.MonthAbbreviations", new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "d/MM/y G", - "d/MM/yy GGGGG", + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "sep.", + "oct.", + "nov.", + "dic.", + "", } }, - { "roc.DatePatterns", + { "roc.MonthNarrows", new String[] { - "GGGG y MMMM d, EEEE", - "GGGG y MMMM d", - "d/MM/y GGGG", - "d/MM/yy G", + "e", + "f", + "m", + "a", + "m", + "j", + "j", + "a", + "s", + "o", + "n", + "d", + "", } }, + { "roc.TimePatterns", + sharedTimePatterns }, + { "roc.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "roc.narrow.AmPmMarkers", + sharedAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_HN.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_HN.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_HN.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. * 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,7 @@ /* * COPYRIGHT AND PERMISSION NOTICE * - * Copyright (C) 1991-2015 Unicode, Inc. All rights reserved. + * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved. * Distributed under the Terms of Use in * http://www.unicode.org/copyright.html. * @@ -72,31 +72,63 @@ public class JavaTimeSupplementary_es_HN extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedAmPmMarkers = { + "a.m.", + "p.m.", + }; + + final String[] sharedDatePatterns = { + "EEEE dd 'de' MMMM 'de' y GGGG", + "dd 'de' MMMM 'de' y GGGG", + "GGGG y MMM d", + "G y-MM-dd", + }; + + final String[] sharedDayNarrows = { + "d", + "l", + "m", + "m", + "j", + "v", + "s", + }; + + final String[] sharedTimePatterns = { + "HH:mm:ss zzzz", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE dd 'de' MMMM 'de' y G", + "dd 'de' MMMM 'de' y G", + "G y MMM d", + "GGGGG y-MM-dd", + }; + return new Object[][] { + { "field.dayperiod", + "a.m./p.m." }, + { "field.zone", + "Zona horaria" }, + { "islamic.AmPmMarkers", + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "EEEE dd 'de' MMMM 'de' y GGGG", - "dd 'de' MMMM 'de' y GGGG", - "GGGG y MMM d", - "G y-MM-dd", - } - }, + sharedDatePatterns }, + { "islamic.DayNarrows", + sharedDayNarrows }, + { "islamic.TimePatterns", + sharedTimePatterns }, + { "islamic.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "islamic.narrow.AmPmMarkers", + sharedAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE dd 'de' MMMM 'de' y G", - "dd 'de' MMMM 'de' y G", - "G y MMM d", - "GGGGG y-MM-dd", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE dd 'de' MMMM 'de' y G", - "dd 'de' MMMM 'de' y G", - "G y MMM d", - "GGGGG y-MM-dd", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", new String[] { "EEEE dd 'de' MMMM 'de' y G", @@ -106,21 +138,53 @@ } }, { "java.time.roc.DatePatterns", + sharedJavaTimeDatePatterns }, + { "roc.AmPmMarkers", + sharedAmPmMarkers }, + { "roc.DatePatterns", + sharedDatePatterns }, + { "roc.DayNarrows", + sharedDayNarrows }, + { "roc.MonthAbbreviations", new String[] { - "EEEE dd 'de' MMMM 'de' y G", - "dd 'de' MMMM 'de' y G", - "G y MMM d", - "GGGGG y-MM-dd", + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "sep.", + "oct.", + "nov.", + "dic.", + "", } }, - { "roc.DatePatterns", + { "roc.MonthNarrows", new String[] { - "EEEE dd 'de' MMMM 'de' y GGGG", - "dd 'de' MMMM 'de' y GGGG", - "GGGG y MMM d", - "G y-MM-dd", + "e", + "f", + "m", + "a", + "m", + "j", + "j", + "a", + "s", + "o", + "n", + "d", + "", } }, + { "roc.TimePatterns", + sharedTimePatterns }, + { "roc.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "roc.narrow.AmPmMarkers", + sharedAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_MX.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_MX.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_MX.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,96 +72,102 @@ public class JavaTimeSupplementary_es_MX extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "1er. trim.", + "2\u00ba. trim.", + "3er. trim.", + "4\u00ba trim.", + }; + + final String[] sharedQuarterNames = { + "1er. trimestre", + "2\u00ba. trimestre", + "3er. trimestre", + "4\u00ba trimestre", + }; + + final String[] sharedQuarterNarrows = { + "1T", + "2T", + "3T", + "4T", + }; + + final String[] sharedAmPmMarkers = { + "a.m.", + "p.m.", + }; + + final String[] sharedDatePatterns = { + "GGGG y MMMM d, EEEE", + "GGGG y MMMM d", + "d MMM, y GGGG", + "G y-MM-dd", + }; + + final String[] sharedDayNarrows = { + "D", + "L", + "M", + "M", + "J", + "V", + "S", + }; + + final String[] sharedTimePatterns = { + "HH:mm:ss zzzz", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + }; + + final String[] sharedJavaTimeDatePatterns = { + "G y MMMM d, EEEE", + "G y MMMM d", + "d MMM, y G", + "GGGGG y-MM-dd", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "1er. trim.", - "2\u00ba. trim.", - "3er. trim.", - "4\u00ba trim.", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "1er. trimestre", - "2\u00ba. trimestre", - "3er. trimestre", - "4\u00ba trimestre", - } - }, + sharedQuarterNames }, { "QuarterNarrows", - new String[] { - "1T", - "2T", - "3T", - "4T", - } - }, + sharedQuarterNarrows }, { "calendarname.gregorian", "Calendario gregoriano" }, { "calendarname.gregory", "Calendario gregoriano" }, { "calendarname.roc", "calendario minguo" }, + { "field.dayperiod", + "a.m./p.m." }, + { "field.zone", + "Zona horaria" }, + { "islamic.AmPmMarkers", + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "GGGG y MMMM d, EEEE", - "GGGG y MMMM d", - "d MMM, y GGGG", - "G y-MM-dd", - } - }, + sharedDatePatterns }, { "islamic.DayNarrows", - new String[] { - "D", - "L", - "M", - "M", - "J", - "V", - "S", - } - }, + sharedDayNarrows }, { "islamic.QuarterAbbreviations", - new String[] { - "1er. trim.", - "2\u00ba. trim.", - "3er. trim.", - "4\u00ba trim.", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "1er. trimestre", - "2\u00ba. trimestre", - "3er. trimestre", - "4\u00ba trimestre", - } - }, + sharedQuarterNames }, { "islamic.QuarterNarrows", - new String[] { - "1T", - "2T", - "3T", - "4T", - } - }, + sharedQuarterNarrows }, + { "islamic.TimePatterns", + sharedTimePatterns }, + { "islamic.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "islamic.narrow.AmPmMarkers", + sharedAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "d MMM, y G", - "GGGGG y-MM-dd", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "d MMM, y G", - "GGGGG y-MM-dd", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", new String[] { "EEEE, d 'de' MMMM 'de' y G", @@ -171,32 +177,13 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "d MMM, y G", - "GGGGG y-MM-dd", - } - }, + sharedJavaTimeDatePatterns }, + { "roc.AmPmMarkers", + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "GGGG y MMMM d, EEEE", - "GGGG y MMMM d", - "d MMM, y GGGG", - "G y-MM-dd", - } - }, + sharedDatePatterns }, { "roc.DayNarrows", - new String[] { - "D", - "L", - "M", - "M", - "J", - "V", - "S", - } - }, + sharedDayNarrows }, { "roc.MonthAbbreviations", new String[] { "ene", @@ -214,30 +201,35 @@ "", } }, - { "roc.QuarterAbbreviations", + { "roc.MonthNarrows", new String[] { - "1er. trim.", - "2\u00ba. trim.", - "3er. trim.", - "4\u00ba trim.", + "e", + "f", + "m", + "a", + "m", + "j", + "j", + "a", + "s", + "o", + "n", + "d", + "", } }, + { "roc.QuarterAbbreviations", + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "1er. trimestre", - "2\u00ba. trimestre", - "3er. trimestre", - "4\u00ba trimestre", - } - }, + sharedQuarterNames }, { "roc.QuarterNarrows", - new String[] { - "1T", - "2T", - "3T", - "4T", - } - }, + sharedQuarterNarrows }, + { "roc.TimePatterns", + sharedTimePatterns }, + { "roc.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "roc.narrow.AmPmMarkers", + sharedAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_PA.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_PA.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_PA.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,63 +72,76 @@ public class JavaTimeSupplementary_es_PA extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterNames = { + "1er. trimestre", + "2do. trimestre", + "3er. trimestre", + "4.\u00ba trimestre", + }; + + final String[] sharedAmPmMarkers = { + "a.m.", + "p.m.", + }; + + final String[] sharedDatePatterns = { + "GGGG y MMMM d, EEEE", + "GGGG y MMMM d", + "MM/dd/y GGGG", + "MM/dd/yy G", + }; + + final String[] sharedDayNarrows = { + "d", + "l", + "m", + "m", + "j", + "v", + "s", + }; + + final String[] sharedTimePatterns = { + "h:mm:ss a zzzz", + "h:mm:ss a z", + "h:mm:ss a", + "h:mm a", + }; + + final String[] sharedJavaTimeDatePatterns = { + "G y MMMM d, EEEE", + "G y MMMM d", + "MM/dd/y G", + "MM/dd/yy GGGGG", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "1er. trimestre", - "2do. trimestre", - "3er. trimestre", - "4.\u00ba trimestre", - } - }, + sharedQuarterNames }, { "QuarterNames", - new String[] { - "1er. trimestre", - "2do. trimestre", - "3er. trimestre", - "4.\u00ba trimestre", - } - }, + sharedQuarterNames }, + { "field.dayperiod", + "a.m./p.m." }, + { "field.zone", + "Zona horaria" }, + { "islamic.AmPmMarkers", + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "GGGG y MMMM d, EEEE", - "GGGG y MMMM d", - "MM/dd/y GGGG", - "MM/dd/yy G", - } - }, + sharedDatePatterns }, + { "islamic.DayNarrows", + sharedDayNarrows }, { "islamic.QuarterNames", - new String[] { - "1er. trimestre", - "2do. trimestre", - "3er. trimestre", - "4.\u00ba trimestre", - } - }, + sharedQuarterNames }, { "islamic.TimePatterns", - new String[] { - "h:mm:ss a zzzz", - "h:mm:ss a z", - "h:mm:ss a", - "h:mm a", - } - }, + sharedTimePatterns }, + { "islamic.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "islamic.narrow.AmPmMarkers", + sharedAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "MM/dd/y G", - "MM/dd/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "MM/dd/y G", - "MM/dd/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", new String[] { "EEEE, d 'de' MMMM 'de' y G", @@ -138,37 +151,55 @@ } }, { "java.time.roc.DatePatterns", + sharedJavaTimeDatePatterns }, + { "roc.AmPmMarkers", + sharedAmPmMarkers }, + { "roc.DatePatterns", + sharedDatePatterns }, + { "roc.DayNarrows", + sharedDayNarrows }, + { "roc.MonthAbbreviations", new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "MM/dd/y G", - "MM/dd/yy GGGGG", + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "sep.", + "oct.", + "nov.", + "dic.", + "", } }, - { "roc.DatePatterns", + { "roc.MonthNarrows", new String[] { - "GGGG y MMMM d, EEEE", - "GGGG y MMMM d", - "MM/dd/y GGGG", - "MM/dd/yy G", + "e", + "f", + "m", + "a", + "m", + "j", + "j", + "a", + "s", + "o", + "n", + "d", + "", } }, { "roc.QuarterNames", - new String[] { - "1er. trimestre", - "2do. trimestre", - "3er. trimestre", - "4.\u00ba trimestre", - } - }, + sharedQuarterNames }, { "roc.TimePatterns", - new String[] { - "h:mm:ss a zzzz", - "h:mm:ss a z", - "h:mm:ss a", - "h:mm a", - } - }, + sharedTimePatterns }, + { "roc.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "roc.narrow.AmPmMarkers", + sharedAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_PE.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_PE.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_PE.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. * 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,7 @@ /* * COPYRIGHT AND PERMISSION NOTICE * - * Copyright (C) 1991-2015 Unicode, Inc. All rights reserved. + * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved. * Distributed under the Terms of Use in * http://www.unicode.org/copyright.html. * @@ -72,31 +72,63 @@ public class JavaTimeSupplementary_es_PE extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedAmPmMarkers = { + "a.m.", + "p.m.", + }; + + final String[] sharedDatePatterns = { + "GGGG y MMMM d, EEEE", + "GGGG y MMMM d", + "GGGG y MMM d", + "d/MM/yy G", + }; + + final String[] sharedDayNarrows = { + "d", + "l", + "m", + "m", + "j", + "v", + "s", + }; + + final String[] sharedTimePatterns = { + "HH:mm:ss zzzz", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + }; + + final String[] sharedJavaTimeDatePatterns = { + "G y MMMM d, EEEE", + "G y MMMM d", + "G y MMM d", + "d/MM/yy GGGGG", + }; + return new Object[][] { + { "field.dayperiod", + "a.m./p.m." }, + { "field.zone", + "Zona horaria" }, + { "islamic.AmPmMarkers", + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "GGGG y MMMM d, EEEE", - "GGGG y MMMM d", - "GGGG y MMM d", - "d/MM/yy G", - } - }, + sharedDatePatterns }, + { "islamic.DayNarrows", + sharedDayNarrows }, + { "islamic.TimePatterns", + sharedTimePatterns }, + { "islamic.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "islamic.narrow.AmPmMarkers", + sharedAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "G y MMM d", - "d/MM/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "G y MMM d", - "d/MM/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", new String[] { "EEEE, d 'de' MMMM 'de' y G", @@ -106,21 +138,13 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "G y MMM d", - "d/MM/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, + { "roc.AmPmMarkers", + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "GGGG y MMMM d, EEEE", - "GGGG y MMMM d", - "GGGG y MMM d", - "d/MM/yy G", - } - }, + sharedDatePatterns }, + { "roc.DayNarrows", + sharedDayNarrows }, { "roc.MonthAbbreviations", new String[] { "ene.", @@ -155,6 +179,29 @@ "", } }, + { "roc.MonthNarrows", + new String[] { + "e", + "f", + "m", + "a", + "m", + "j", + "j", + "a", + "s", + "o", + "n", + "d", + "", + } + }, + { "roc.TimePatterns", + sharedTimePatterns }, + { "roc.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "roc.narrow.AmPmMarkers", + sharedAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_PR.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_PR.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_PR.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,39 +72,63 @@ public class JavaTimeSupplementary_es_PR extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedAmPmMarkers = { + "a.m.", + "p.m.", + }; + + final String[] sharedDatePatterns = { + "GGGG y MMMM d, EEEE", + "GGGG y MMMM d", + "MM/dd/y GGGG", + "MM/dd/yy G", + }; + + final String[] sharedDayNarrows = { + "d", + "l", + "m", + "m", + "j", + "v", + "s", + }; + + final String[] sharedTimePatterns = { + "h:mm:ss a zzzz", + "h:mm:ss a z", + "h:mm:ss a", + "h:mm a", + }; + + final String[] sharedJavaTimeDatePatterns = { + "G y MMMM d, EEEE", + "G y MMMM d", + "MM/dd/y G", + "MM/dd/yy GGGGG", + }; + return new Object[][] { + { "field.dayperiod", + "a.m./p.m." }, + { "field.zone", + "Zona horaria" }, + { "islamic.AmPmMarkers", + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "GGGG y MMMM d, EEEE", - "GGGG y MMMM d", - "MM/dd/y GGGG", - "MM/dd/yy G", - } - }, + sharedDatePatterns }, + { "islamic.DayNarrows", + sharedDayNarrows }, { "islamic.TimePatterns", - new String[] { - "h:mm:ss a zzzz", - "h:mm:ss a z", - "h:mm:ss a", - "h:mm a", - } - }, + sharedTimePatterns }, + { "islamic.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "islamic.narrow.AmPmMarkers", + sharedAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "MM/dd/y G", - "MM/dd/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "MM/dd/y G", - "MM/dd/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", new String[] { "EEEE, d 'de' MMMM 'de' y G", @@ -114,29 +138,53 @@ } }, { "java.time.roc.DatePatterns", + sharedJavaTimeDatePatterns }, + { "roc.AmPmMarkers", + sharedAmPmMarkers }, + { "roc.DatePatterns", + sharedDatePatterns }, + { "roc.DayNarrows", + sharedDayNarrows }, + { "roc.MonthAbbreviations", new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "MM/dd/y G", - "MM/dd/yy GGGGG", + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "sep.", + "oct.", + "nov.", + "dic.", + "", } }, - { "roc.DatePatterns", + { "roc.MonthNarrows", new String[] { - "GGGG y MMMM d, EEEE", - "GGGG y MMMM d", - "MM/dd/y GGGG", - "MM/dd/yy G", + "e", + "f", + "m", + "a", + "m", + "j", + "j", + "a", + "s", + "o", + "n", + "d", + "", } }, { "roc.TimePatterns", - new String[] { - "h:mm:ss a zzzz", - "h:mm:ss a z", - "h:mm:ss a", - "h:mm a", - } - }, + sharedTimePatterns }, + { "roc.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "roc.narrow.AmPmMarkers", + sharedAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_PY.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_PY.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,163 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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. + */ + +/* + * COPYRIGHT AND PERMISSION NOTICE + * + * Copyright (C) 1991-2016 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 of the Unicode data files and any associated documentation + * (the "Data Files") or Unicode software and any associated documentation + * (the "Software") to deal in the Data Files or Software + * without restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, and/or sell copies of + * the Data Files or Software, and to permit persons to whom the Data Files + * or Software are furnished to do so, provided that + * (a) this copyright and permission notice appear with all copies + * of the Data Files or Software, + * (b) this copyright and permission notice appear in associated + * documentation, and + * (c) there is clear notice in each modified Data File or in the Software + * as well as in the documentation associated with the Data File(s) or + * Software that the data or software has been modified. + * + * THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS + * NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL + * DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THE DATA FILES OR SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, + * use or other dealings in these Data Files or Software without prior + * written authorization of the copyright holder. + */ + +// Note: this file has been generated by a tool. + +package sun.text.resources.ext; + +import sun.util.resources.OpenListResourceBundle; + +public class JavaTimeSupplementary_es_PY extends OpenListResourceBundle { + @Override + protected final Object[][] getContents() { + final String[] sharedAmPmMarkers = { + "a.m.", + "p.m.", + }; + + final String[] sharedDatePatterns = { + "GGGG y MMMM d, EEEE", + "GGGG y MMMM d", + "GGGG y MMM d", + "dd/MM/yy G", + }; + + final String[] sharedDayNarrows = { + "d", + "l", + "m", + "m", + "j", + "v", + "s", + }; + + final String[] sharedTimePatterns = { + "HH:mm:ss zzzz", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + }; + + final String[] sharedJavaTimeDatePatterns = { + "G y MMMM d, EEEE", + "G y MMMM d", + "G y MMM d", + "dd/MM/yy GGGGG", + }; + + return new Object[][] { + { "field.dayperiod", + "a.m./p.m." }, + { "islamic.AmPmMarkers", + sharedAmPmMarkers }, + { "islamic.DatePatterns", + sharedDatePatterns }, + { "islamic.DayNarrows", + sharedDayNarrows }, + { "islamic.TimePatterns", + sharedTimePatterns }, + { "islamic.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "islamic.narrow.AmPmMarkers", + sharedAmPmMarkers }, + { "java.time.buddhist.DatePatterns", + sharedJavaTimeDatePatterns }, + { "java.time.islamic.DatePatterns", + sharedJavaTimeDatePatterns }, + { "java.time.roc.DatePatterns", + sharedJavaTimeDatePatterns }, + { "roc.AmPmMarkers", + sharedAmPmMarkers }, + { "roc.DatePatterns", + sharedDatePatterns }, + { "roc.DayNarrows", + sharedDayNarrows }, + { "roc.MonthNarrows", + new String[] { + "e", + "f", + "m", + "a", + "m", + "j", + "j", + "a", + "s", + "o", + "n", + "d", + "", + } + }, + { "roc.TimePatterns", + sharedTimePatterns }, + { "roc.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "roc.narrow.AmPmMarkers", + sharedAmPmMarkers }, + }; + } +} diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_US.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_US.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_US.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,27 +72,75 @@ public class JavaTimeSupplementary_es_US extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedAmPmMarkers = { + "AM", + "PM", + }; + + final String[] sharedDatePatterns = { + "GGGG y MMMM d, EEEE", + "GGGG y MMMM d", + "GGGG y MMM d", + "dd/MM/yy G", + }; + + final String[] sharedDayNarrows = { + "d", + "l", + "m", + "m", + "j", + "v", + "s", + }; + + final String[] sharedTimePatterns = { + "h:mm:ss a zzzz", + "h:mm:ss a z", + "h:mm:ss a", + "h:mm a", + }; + + final String[] sharedAbbreviatedAmPmMarkers = { + "a.m.", + "p.m.", + }; + + final String[] sharedNarrowAmPmMarkers = { + "a", + "p", + }; + + final String[] sharedJavaTimeDatePatterns = { + "G y MMMM d, EEEE", + "G y MMMM d", + "G y MMM d", + "dd/MM/yy GGGGG", + }; + return new Object[][] { + { "field.dayperiod", + "a.m./p.m." }, + { "field.zone", + "Zona horaria" }, { "islamic.AmPmMarkers", - new String[] { - "AM", - "PM", - } - }, + sharedAmPmMarkers }, + { "islamic.DatePatterns", + sharedDatePatterns }, + { "islamic.DayNarrows", + sharedDayNarrows }, { "islamic.TimePatterns", - new String[] { - "h:mm:ss a zzzz", - "h:mm:ss a z", - "h:mm:ss a", - "h:mm a", - } - }, + sharedTimePatterns }, + { "islamic.abbreviated.AmPmMarkers", + sharedAbbreviatedAmPmMarkers }, { "islamic.narrow.AmPmMarkers", - new String[] { - "a", - "p", - } - }, + sharedNarrowAmPmMarkers }, + { "java.time.buddhist.DatePatterns", + sharedJavaTimeDatePatterns }, + { "java.time.islamic.DatePatterns", + sharedJavaTimeDatePatterns }, + { "java.time.roc.DatePatterns", + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "a.C.", @@ -100,25 +148,51 @@ } }, { "roc.AmPmMarkers", + sharedAmPmMarkers }, + { "roc.DatePatterns", + sharedDatePatterns }, + { "roc.DayNarrows", + sharedDayNarrows }, + { "roc.MonthAbbreviations", new String[] { - "AM", - "PM", + "ene.", + "feb.", + "mar.", + "abr.", + "may.", + "jun.", + "jul.", + "ago.", + "sep.", + "oct.", + "nov.", + "dic.", + "", + } + }, + { "roc.MonthNarrows", + new String[] { + "e", + "f", + "m", + "a", + "m", + "j", + "j", + "a", + "s", + "o", + "n", + "d", + "", } }, { "roc.TimePatterns", - new String[] { - "h:mm:ss a zzzz", - "h:mm:ss a z", - "h:mm:ss a", - "h:mm a", - } - }, + sharedTimePatterns }, + { "roc.abbreviated.AmPmMarkers", + sharedAbbreviatedAmPmMarkers }, { "roc.narrow.AmPmMarkers", - new String[] { - "a", - "p", - } - }, + sharedNarrowAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_UY.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_UY.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_UY.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. * 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,7 @@ /* * COPYRIGHT AND PERMISSION NOTICE * - * Copyright (C) 1991-2015 Unicode, Inc. All rights reserved. + * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved. * Distributed under the Terms of Use in * http://www.unicode.org/copyright.html. * @@ -72,7 +72,71 @@ public class JavaTimeSupplementary_es_UY extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedAmPmMarkers = { + "a.m.", + "p.m.", + }; + + final String[] sharedDatePatterns = { + "GGGG y MMMM d, EEEE", + "GGGG y MMMM d", + "GGGG y MMM d", + "dd/MM/yy G", + }; + + final String[] sharedDayNarrows = { + "d", + "l", + "m", + "m", + "j", + "v", + "s", + }; + + final String[] sharedTimePatterns = { + "HH:mm:ss zzzz", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + }; + + final String[] sharedJavaTimeDatePatterns = { + "G y MMMM d, EEEE", + "G y MMMM d", + "G y MMM d", + "dd/MM/yy GGGGG", + }; + return new Object[][] { + { "field.dayperiod", + "a.m./p.m." }, + { "field.zone", + "Zona horaria" }, + { "islamic.AmPmMarkers", + sharedAmPmMarkers }, + { "islamic.DatePatterns", + sharedDatePatterns }, + { "islamic.DayNarrows", + sharedDayNarrows }, + { "islamic.TimePatterns", + sharedTimePatterns }, + { "islamic.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "islamic.narrow.AmPmMarkers", + sharedAmPmMarkers }, + { "java.time.buddhist.DatePatterns", + sharedJavaTimeDatePatterns }, + { "java.time.islamic.DatePatterns", + sharedJavaTimeDatePatterns }, + { "java.time.roc.DatePatterns", + sharedJavaTimeDatePatterns }, + { "roc.AmPmMarkers", + sharedAmPmMarkers }, + { "roc.DatePatterns", + sharedDatePatterns }, + { "roc.DayNarrows", + sharedDayNarrows }, { "roc.MonthAbbreviations", new String[] { "ene.", @@ -107,6 +171,29 @@ "", } }, + { "roc.MonthNarrows", + new String[] { + "e", + "f", + "m", + "a", + "m", + "j", + "j", + "a", + "s", + "o", + "n", + "d", + "", + } + }, + { "roc.TimePatterns", + sharedTimePatterns }, + { "roc.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "roc.narrow.AmPmMarkers", + sharedAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_VE.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_VE.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_VE.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,55 +72,109 @@ public class JavaTimeSupplementary_es_VE extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterNames = { + "1er trimestre", + "2do trimestre", + "3er trimestre", + "4to trimestre", + }; + + final String[] sharedAmPmMarkers = { + "a.m.", + "p.m.", + }; + + final String[] sharedDatePatterns = { + "GGGG y MMMM d, EEEE", + "GGGG y MMMM d", + "GGGG y MMM d", + "dd/MM/yy G", + }; + + final String[] sharedDayNarrows = { + "d", + "l", + "m", + "m", + "j", + "v", + "s", + }; + + final String[] sharedTimePatterns = { + "h:mm:ss a zzzz", + "h:mm:ss a z", + "h:mm:ss a", + "h:mm a", + }; + + final String[] sharedJavaTimeDatePatterns = { + "G y MMMM d, EEEE", + "G y MMMM d", + "G y MMM d", + "dd/MM/yy GGGGG", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "1er trimestre", - "2do trimestre", - "3er trimestre", - "4to trimestre", - } - }, + sharedQuarterNames }, { "QuarterNames", + sharedQuarterNames }, + { "field.dayperiod", + "a.m./p.m." }, + { "field.zone", + "Zona horaria" }, + { "islamic.AmPmMarkers", + sharedAmPmMarkers }, + { "islamic.DatePatterns", + sharedDatePatterns }, + { "islamic.DayNarrows", + sharedDayNarrows }, + { "islamic.QuarterNames", + sharedQuarterNames }, + { "islamic.TimePatterns", + sharedTimePatterns }, + { "islamic.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "islamic.narrow.AmPmMarkers", + sharedAmPmMarkers }, + { "java.time.buddhist.DatePatterns", + sharedJavaTimeDatePatterns }, + { "java.time.islamic.DatePatterns", + sharedJavaTimeDatePatterns }, + { "java.time.roc.DatePatterns", + sharedJavaTimeDatePatterns }, + { "roc.AmPmMarkers", + sharedAmPmMarkers }, + { "roc.DatePatterns", + sharedDatePatterns }, + { "roc.DayNarrows", + sharedDayNarrows }, + { "roc.MonthNarrows", new String[] { - "1er trimestre", - "2do trimestre", - "3er trimestre", - "4to trimestre", - } - }, - { "islamic.QuarterNames", - new String[] { - "1er trimestre", - "2do trimestre", - "3er trimestre", - "4to trimestre", - } - }, - { "islamic.TimePatterns", - new String[] { - "h:mm:ss a zzzz", - "h:mm:ss a z", - "h:mm:ss a", - "h:mm a", + "e", + "f", + "m", + "a", + "m", + "j", + "j", + "a", + "s", + "o", + "n", + "d", + "", } }, { "roc.QuarterNames", - new String[] { - "1er trimestre", - "2do trimestre", - "3er trimestre", - "4to trimestre", - } - }, + sharedQuarterNames }, { "roc.TimePatterns", - new String[] { - "h:mm:ss a zzzz", - "h:mm:ss a z", - "h:mm:ss a", - "h:mm a", - } - }, + sharedTimePatterns }, + { "roc.abbreviated.AmPmMarkers", + sharedAmPmMarkers }, + { "roc.narrow.AmPmMarkers", + sharedAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_et.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_et.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_et.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,23 +72,71 @@ public class JavaTimeSupplementary_et extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "K1", + "K2", + "K3", + "K4", + }; + + final String[] sharedQuarterNames = { + "1. kvartal", + "2. kvartal", + "3. kvartal", + "4. kvartal", + }; + + final String[] sharedDatePatterns = { + "EEEE, d. MMMM y GGGG", + "d. MMMM y GGGG", + "dd.MM.y GGGG", + "dd.MM.y G", + }; + + final String[] sharedDayNarrows = { + "P", + "E", + "T", + "K", + "N", + "R", + "L", + }; + + final String[] sharedDayNames = { + "p\u00fchap\u00e4ev", + "esmasp\u00e4ev", + "teisip\u00e4ev", + "kolmap\u00e4ev", + "neljap\u00e4ev", + "reede", + "laup\u00e4ev", + }; + + final String[] sharedTimePatterns = { + "H:mm.ss zzzz", + "H:mm.ss z", + "H:mm.ss", + "H:mm", + }; + + final String[] sharedNarrowAmPmMarkers = { + "a", + "p", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, d. MMMM y G", + "d. MMMM y G", + "dd.MM.y G", + "dd.MM.y GGGGG", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "K1", - "K2", - "K3", - "K4", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "1. kvartal", - "2. kvartal", - "3. kvartal", - "4. kvartal", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "budistlik kalender" }, { "calendarname.gregorian", @@ -130,108 +178,27 @@ } }, { "islamic.DatePatterns", - new String[] { - "EEEE, d. MMMM y GGGG", - "d. MMMM y GGGG", - "dd.MM.y GGGG", - "dd.MM.y G", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "P", - "E", - "T", - "K", - "N", - "R", - "L", - } - }, + sharedDayNarrows }, { "islamic.DayNames", - new String[] { - "p\u00fchap\u00e4ev", - "esmasp\u00e4ev", - "teisip\u00e4ev", - "kolmap\u00e4ev", - "neljap\u00e4ev", - "reede", - "laup\u00e4ev", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "P", - "E", - "T", - "K", - "N", - "R", - "L", - } - }, + sharedDayNarrows }, { "islamic.QuarterAbbreviations", - new String[] { - "K1", - "K2", - "K3", - "K4", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "1. kvartal", - "2. kvartal", - "3. kvartal", - "4. kvartal", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, + sharedQuarterNames }, { "islamic.TimePatterns", - new String[] { - "H:mm.ss zzzz", - "H:mm.ss z", - "H:mm.ss", - "H:mm", - } - }, + sharedTimePatterns }, { "islamic.narrow.AmPmMarkers", - new String[] { - "a", - "p", - } - }, + sharedNarrowAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE, d. MMMM y G", - "d. MMMM y G", - "dd.MM.y G", - "dd.MM.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE, d. MMMM y G", - "d. MMMM y G", - "dd.MM.y G", - "dd.MM.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE, d. MMMM y G", - "d. MMMM y G", - "dd.MM.y G", - "dd.MM.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.long.Eras", new String[] { "enne Kristust", @@ -239,66 +206,21 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE, d. MMMM y G", - "d. MMMM y G", - "dd.MM.y G", - "dd.MM.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "e.m.a.", "m.a.j.", } }, - { "roc.AmPmMarkers", - new String[] { - "AM", - "PM", - } - }, { "roc.DatePatterns", - new String[] { - "EEEE, d. MMMM y GGGG", - "d. MMMM y GGGG", - "dd.MM.y GGGG", - "dd.MM.y G", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "P", - "E", - "T", - "K", - "N", - "R", - "L", - } - }, + sharedDayNarrows }, { "roc.DayNames", - new String[] { - "p\u00fchap\u00e4ev", - "esmasp\u00e4ev", - "teisip\u00e4ev", - "kolmap\u00e4ev", - "neljap\u00e4ev", - "reede", - "laup\u00e4ev", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "P", - "E", - "T", - "K", - "N", - "R", - "L", - } - }, + sharedDayNarrows }, { "roc.MonthAbbreviations", new String[] { "jaan", @@ -351,35 +273,13 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "K1", - "K2", - "K3", - "K4", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "1. kvartal", - "2. kvartal", - "3. kvartal", - "4. kvartal", - } - }, + sharedQuarterNames }, { "roc.TimePatterns", - new String[] { - "H:mm.ss zzzz", - "H:mm.ss z", - "H:mm.ss", - "H:mm", - } - }, + sharedTimePatterns }, { "roc.narrow.AmPmMarkers", - new String[] { - "a", - "p", - } - }, + sharedNarrowAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_fi.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_fi.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_fi.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,23 +72,102 @@ public class JavaTimeSupplementary_fi extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "1. nelj.", + "2. nelj.", + "3. nelj.", + "4. nelj.", + }; + + final String[] sharedQuarterNames = { + "1. nelj\u00e4nnes", + "2. nelj\u00e4nnes", + "3. nelj\u00e4nnes", + "4. nelj\u00e4nnes", + }; + + final String[] sharedAmPmMarkers = { + "ap.", + "ip.", + }; + + final String[] sharedDatePatterns = { + "EEEE d. MMMM y GGGG", + "d. MMMM y GGGG", + "d.M.y GGGG", + "d.M.y G", + }; + + final String[] sharedDayAbbreviations = { + "su", + "ma", + "ti", + "ke", + "to", + "pe", + "la", + }; + + final String[] sharedDayNames = { + "sunnuntaina", + "maanantaina", + "tiistaina", + "keskiviikkona", + "torstaina", + "perjantaina", + "lauantaina", + }; + + final String[] sharedDayNarrows = { + "S", + "M", + "T", + "K", + "T", + "P", + "L", + }; + + final String[] sharedTimePatterns = { + "H.mm.ss zzzz", + "H.mm.ss z", + "H.mm.ss", + "H.mm", + }; + + final String[] sharedJavaTimeDatePatterns = { + "cccc d. MMMM y G", + "d. MMMM y G", + "d.M.y G", + "d.M.y GGGGG", + }; + + final String[] sharedEras = { + "Before R.O.C.", + "Minguo", + }; + + final String[] sharedMonthNames = { + "tammikuuta", + "helmikuuta", + "maaliskuuta", + "huhtikuuta", + "toukokuuta", + "kes\u00e4kuuta", + "hein\u00e4kuuta", + "elokuuta", + "syyskuuta", + "lokakuuta", + "marraskuuta", + "joulukuuta", + "", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "1. nelj.", - "2. nelj.", - "3. nelj.", - "4. nelj.", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "1. nelj\u00e4nnes", - "2. nelj\u00e4nnes", - "3. nelj\u00e4nnes", - "4. nelj\u00e4nnes", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "buddhalainen kalenteri" }, { "calendarname.gregorian", @@ -126,52 +205,15 @@ { "field.zone", "aikavy\u00f6hyke" }, { "islamic.AmPmMarkers", - new String[] { - "ap.", - "ip.", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "EEEE d. MMMM y GGGG", - "d. MMMM y GGGG", - "d.M.y GGGG", - "d.M.y G", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "su", - "ma", - "ti", - "ke", - "to", - "pe", - "la", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "sunnuntaina", - "maanantaina", - "tiistaina", - "keskiviikkona", - "torstaina", - "perjantaina", - "lauantaina", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "S", - "M", - "T", - "K", - "T", - "P", - "L", - } - }, + sharedDayNarrows }, { "islamic.MonthNames", new String[] { "muharram", @@ -190,49 +232,15 @@ } }, { "islamic.QuarterAbbreviations", - new String[] { - "1. nelj.", - "2. nelj.", - "3. nelj.", - "4. nelj.", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "1. nelj\u00e4nnes", - "2. nelj\u00e4nnes", - "3. nelj\u00e4nnes", - "4. nelj\u00e4nnes", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, + sharedQuarterNames }, { "islamic.TimePatterns", - new String[] { - "H.mm.ss zzzz", - "H.mm.ss z", - "H.mm.ss", - "H.mm", - } - }, + sharedTimePatterns }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "ap.", - "ip.", - } - }, + sharedAmPmMarkers }, { "islamic.narrow.AmPmMarkers", - new String[] { - "ap.", - "ip.", - } - }, + sharedAmPmMarkers }, { "java.time.DatePatterns", new String[] { "cccc d. MMMM y", @@ -242,19 +250,7 @@ } }, { "java.time.buddhist.DatePatterns", - new String[] { - "cccc d. MMMM y G", - "d. MMMM y G", - "d.M.y G", - "d.M.y GGGGG", - } - }, - { "java.time.buddhist.long.Eras", - new String[] { - "BC", - "BE", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.buddhist.short.Eras", new String[] { "BC", @@ -262,21 +258,9 @@ } }, { "java.time.islamic.DatePatterns", - new String[] { - "cccc d. MMMM y G", - "d. MMMM y G", - "d.M.y G", - "d.M.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "cccc d. MMMM y G", - "d. MMMM y G", - "d.M.y G", - "d.M.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.long.Eras", new String[] { "ennen Kristuksen syntym\u00e4\u00e4", @@ -284,13 +268,7 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "cccc d. MMMM y G", - "d. MMMM y G", - "d.M.y G", - "d.M.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "eKr.", @@ -298,92 +276,21 @@ } }, { "roc.AmPmMarkers", - new String[] { - "ap.", - "ip.", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "EEEE d. MMMM y GGGG", - "d. MMMM y GGGG", - "d.M.y GGGG", - "d.M.y G", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "su", - "ma", - "ti", - "ke", - "to", - "pe", - "la", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "sunnuntaina", - "maanantaina", - "tiistaina", - "keskiviikkona", - "torstaina", - "perjantaina", - "lauantaina", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "S", - "M", - "T", - "K", - "T", - "P", - "L", - } - }, + sharedDayNarrows }, { "roc.Eras", - new String[] { - "Before R.O.C.", - "Minguo", - } - }, + sharedEras }, { "roc.MonthAbbreviations", - new String[] { - "tammikuuta", - "helmikuuta", - "maaliskuuta", - "huhtikuuta", - "toukokuuta", - "kes\u00e4kuuta", - "hein\u00e4kuuta", - "elokuuta", - "syyskuuta", - "lokakuuta", - "marraskuuta", - "joulukuuta", - "", - } - }, + sharedMonthNames }, { "roc.MonthNames", - new String[] { - "tammikuuta", - "helmikuuta", - "maaliskuuta", - "huhtikuuta", - "toukokuuta", - "kes\u00e4kuuta", - "hein\u00e4kuuta", - "elokuuta", - "syyskuuta", - "lokakuuta", - "marraskuuta", - "joulukuuta", - "", - } - }, + sharedMonthNames }, { "roc.MonthNarrows", new String[] { "T", @@ -402,59 +309,21 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "1. nelj.", - "2. nelj.", - "3. nelj.", - "4. nelj.", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "1. nelj\u00e4nnes", - "2. nelj\u00e4nnes", - "3. nelj\u00e4nnes", - "4. nelj\u00e4nnes", - } - }, + sharedQuarterNames }, { "roc.TimePatterns", - new String[] { - "H.mm.ss zzzz", - "H.mm.ss z", - "H.mm.ss", - "H.mm", - } - }, + sharedTimePatterns }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "ap.", - "ip.", - } - }, + sharedAmPmMarkers }, { "roc.long.Eras", - new String[] { - "Before R.O.C.", - "Minguo", - } - }, + sharedEras }, { "roc.narrow.AmPmMarkers", - new String[] { - "ap.", - "ip.", - } - }, + sharedAmPmMarkers }, { "roc.narrow.Eras", - new String[] { - "Before R.O.C.", - "Minguo", - } - }, + sharedEras }, { "roc.short.Eras", - new String[] { - "Before R.O.C.", - "Minguo", - } - }, + sharedEras }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_fr.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_fr.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_fr.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,27 +72,84 @@ public class JavaTimeSupplementary_fr extends OpenListResourceBundle { @Override protected final Object[][] getContents() { - final String[] javatimebuddhistlongEras = { + final String[] sharedQuarterAbbreviations = { + "T1", + "T2", + "T3", + "T4", + }; + + final String[] sharedQuarterNames = { + "1er trimestre", + "2e trimestre", + "3e trimestre", + "4e trimestre", + }; + + final String[] sharedAmPmMarkers = { + "AM", + "PM", + }; + + final String[] sharedDatePatterns = { + "EEEE d MMMM y GGGG", + "d MMMM y GGGG", + "d MMM y GGGG", + "dd/MM/y G", + }; + + final String[] sharedDayAbbreviations = { + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam.", + }; + + final String[] sharedDayNames = { + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi", + }; + + final String[] sharedDayNarrows = { + "D", + "L", + "M", + "M", + "J", + "V", + "S", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE d MMMM y G", + "d MMMM y G", + "d MMM y G", + "dd/MM/y GGGGG", + }; + + final String[] sharedJavaTimeLongEras = { "BC", "\u00e8re bouddhiste", }; + + final String[] sharedEras = { + "avant RdC", + "RdC", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "T1", - "T2", - "T3", - "T4", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "1er trimestre", - "2e trimestre", - "3e trimestre", - "4e trimestre", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "calendrier bouddhiste" }, { "calendarname.gregorian", @@ -128,58 +185,15 @@ { "field.zone", "fuseau horaire" }, { "islamic.AmPmMarkers", - new String[] { - "AM", - "PM", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "EEEE d MMMM y GGGG", - "d MMMM y GGGG", - "d MMM y GGGG", - "dd/MM/y G", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "dim.", - "lun.", - "mar.", - "mer.", - "jeu.", - "ven.", - "sam.", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "dimanche", - "lundi", - "mardi", - "mercredi", - "jeudi", - "vendredi", - "samedi", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "D", - "L", - "M", - "M", - "J", - "V", - "S", - } - }, - { "islamic.Eras", - new String[] { - "", - "AH", - } - }, + sharedDayNarrows }, { "islamic.MonthAbbreviations", new String[] { "mouh.", @@ -215,89 +229,21 @@ } }, { "islamic.QuarterAbbreviations", - new String[] { - "T1", - "T2", - "T3", - "T4", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "1er trimestre", - "2e trimestre", - "3e trimestre", - "4e trimestre", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, - { "islamic.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, - { "islamic.long.Eras", - new String[] { - "", - "AH", - } - }, + sharedQuarterNames }, { "islamic.narrow.AmPmMarkers", - new String[] { - "AM", - "PM", - } - }, - { "islamic.narrow.Eras", - new String[] { - "", - "AH", - } - }, - { "islamic.short.Eras", - new String[] { - "", - "AH", - } - }, + sharedAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "d MMMM y G", - "d MMM y G", - "dd/MM/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.buddhist.long.Eras", - javatimebuddhistlongEras }, + sharedJavaTimeLongEras }, { "java.time.buddhist.short.Eras", - javatimebuddhistlongEras }, + sharedJavaTimeLongEras }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "d MMMM y G", - "d MMM y G", - "dd/MM/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "d MMMM y G", - "d MMM y G", - "dd/MM/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.long.Eras", new String[] { "avant J\u00e9sus-Christ", @@ -305,72 +251,23 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "d MMMM y G", - "d MMM y G", - "dd/MM/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "BC", "ap. J.-C.", } }, - { "roc.AmPmMarkers", - new String[] { - "AM", - "PM", - } - }, { "roc.DatePatterns", - new String[] { - "EEEE d MMMM y GGGG", - "d MMMM y GGGG", - "d MMM y GGGG", - "dd/MM/y G", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "dim.", - "lun.", - "mar.", - "mer.", - "jeu.", - "ven.", - "sam.", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "dimanche", - "lundi", - "mardi", - "mercredi", - "jeudi", - "vendredi", - "samedi", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "D", - "L", - "M", - "M", - "J", - "V", - "S", - } - }, + sharedDayNarrows }, { "roc.Eras", - new String[] { - "avant RdC", - "RdC", - } - }, + sharedEras }, { "roc.MonthAbbreviations", new String[] { "janv.", @@ -423,53 +320,15 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "T1", - "T2", - "T3", - "T4", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "1er trimestre", - "2e trimestre", - "3e trimestre", - "4e trimestre", - } - }, - { "roc.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedQuarterNames }, { "roc.long.Eras", - new String[] { - "avant RdC", - "RdC", - } - }, - { "roc.narrow.AmPmMarkers", - new String[] { - "AM", - "PM", - } - }, + sharedEras }, { "roc.narrow.Eras", - new String[] { - "avant RdC", - "RdC", - } - }, + sharedEras }, { "roc.short.Eras", - new String[] { - "avant RdC", - "RdC", - } - }, + sharedEras }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_fr_BE.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_fr_BE.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_fr_BE.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. * 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,7 @@ /* * COPYRIGHT AND PERMISSION NOTICE * - * Copyright (C) 1991-2015 Unicode, Inc. All rights reserved. + * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved. * Distributed under the Terms of Use in * http://www.unicode.org/copyright.html. * @@ -72,6 +72,20 @@ public class JavaTimeSupplementary_fr_BE extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedTimePatterns = { + "H 'h' mm 'min' ss 's' zzzz", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE d MMMM y G", + "d MMMM y G", + "d MMM y G", + "d/MM/yy GGGGG", + }; + return new Object[][] { { "islamic.DatePatterns", new String[] { @@ -82,37 +96,13 @@ } }, { "islamic.TimePatterns", - new String[] { - "H 'h' mm 'min' ss 's' zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedTimePatterns }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "d MMMM y G", - "d MMM y G", - "d/MM/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "d MMMM y G", - "d MMM y G", - "d/MM/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "d MMMM y G", - "d MMM y G", - "d/MM/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.roc.DatePatterns", new String[] { "G y MMMM d, EEEE", @@ -130,13 +120,7 @@ } }, { "roc.TimePatterns", - new String[] { - "H 'h' mm 'min' ss 's' zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedTimePatterns }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_fr_CA.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_fr_CA.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_fr_CA.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,6 +72,18 @@ public class JavaTimeSupplementary_fr_CA extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedNarrowAmPmMarkers = { + "a", + "p", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE d MMMM y G", + "d MMMM y G", + "d MMM y G", + "yy-MM-dd GGGGG", + }; + return new Object[][] { { "islamic.DatePatterns", new String[] { @@ -82,19 +94,9 @@ } }, { "islamic.narrow.AmPmMarkers", - new String[] { - "a", - "p", - } - }, + sharedNarrowAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "d MMMM y G", - "d MMM y G", - "yy-MM-dd GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", new String[] { "EEEE d MMMM y G", @@ -104,13 +106,7 @@ } }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "d MMMM y G", - "d MMM y G", - "yy-MM-dd GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.roc.DatePatterns", new String[] { "G y MMMM d, EEEE", @@ -128,11 +124,7 @@ } }, { "roc.narrow.AmPmMarkers", - new String[] { - "a", - "p", - } - }, + sharedNarrowAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_fr_CH.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_fr_CH.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_fr_CH.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. * 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,7 @@ /* * COPYRIGHT AND PERMISSION NOTICE * - * Copyright (C) 1991-2015 Unicode, Inc. All rights reserved. + * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved. * Distributed under the Terms of Use in * http://www.unicode.org/copyright.html. * @@ -72,6 +72,20 @@ public class JavaTimeSupplementary_fr_CH extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedTimePatterns = { + "HH.mm:ss 'h' zzzz", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, d MMMM y G", + "d MMMM y G", + "d MMM y G", + "dd.MM.yy GGGGG", + }; + return new Object[][] { { "islamic.DatePatterns", new String[] { @@ -82,37 +96,13 @@ } }, { "islamic.TimePatterns", - new String[] { - "HH.mm:ss 'h' zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedTimePatterns }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE, d MMMM y G", - "d MMMM y G", - "d MMM y G", - "dd.MM.yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE, d MMMM y G", - "d MMMM y G", - "d MMM y G", - "dd.MM.yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE, d MMMM y G", - "d MMMM y G", - "d MMM y G", - "dd.MM.yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.roc.DatePatterns", new String[] { "EEEE, d MMMM y G", @@ -130,13 +120,7 @@ } }, { "roc.TimePatterns", - new String[] { - "HH.mm:ss 'h' zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedTimePatterns }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ga.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ga.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ga.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,23 +72,79 @@ public class JavaTimeSupplementary_ga extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "R1", + "R2", + "R3", + "R4", + }; + + final String[] sharedQuarterNames = { + "1\u00fa r\u00e1ithe", + "2\u00fa r\u00e1ithe", + "3\u00fa r\u00e1ithe", + "4\u00fa r\u00e1ithe", + }; + + final String[] sharedAmPmMarkers = { + "a.m.", + "p.m.", + }; + + final String[] sharedDatePatterns = { + "EEEE d MMMM y GGGG", + "d MMMM y GGGG", + "d MMM y GGGG", + "dd/MM/y G", + }; + + final String[] sharedDayAbbreviations = { + "Domh", + "Luan", + "M\u00e1irt", + "C\u00e9ad", + "D\u00e9ar", + "Aoine", + "Sath", + }; + + final String[] sharedDayNames = { + "D\u00e9 Domhnaigh", + "D\u00e9 Luain", + "D\u00e9 M\u00e1irt", + "D\u00e9 C\u00e9adaoin", + "D\u00e9ardaoin", + "D\u00e9 hAoine", + "D\u00e9 Sathairn", + }; + + final String[] sharedDayNarrows = { + "D", + "L", + "M", + "C", + "D", + "A", + "S", + }; + + final String[] sharedNarrowAmPmMarkers = { + "a", + "p", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE d MMMM y G", + "d MMMM y G", + "d MMM y G", + "dd/MM/y GGGGG", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "R1", - "R2", - "R3", - "R4", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "1\u00fa r\u00e1ithe", - "2\u00fa r\u00e1ithe", - "3\u00fa r\u00e1ithe", - "4\u00fa r\u00e1ithe", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "F\u00e9ilire B\u00fada\u00edoch" }, { "calendarname.gregorian", @@ -122,120 +178,29 @@ { "field.zone", "Crios Ama" }, { "islamic.AmPmMarkers", - new String[] { - "a.m.", - "p.m.", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "EEEE d MMMM y GGGG", - "d MMMM y GGGG", - "d MMM y GGGG", - "dd/MM/y G", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "Domh", - "Luan", - "M\u00e1irt", - "C\u00e9ad", - "D\u00e9ar", - "Aoine", - "Sath", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "D\u00e9 Domhnaigh", - "D\u00e9 Luain", - "D\u00e9 M\u00e1irt", - "D\u00e9 C\u00e9adaoin", - "D\u00e9ardaoin", - "D\u00e9 hAoine", - "D\u00e9 Sathairn", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "D", - "L", - "M", - "C", - "D", - "A", - "S", - } - }, + sharedDayNarrows }, { "islamic.QuarterAbbreviations", - new String[] { - "R1", - "R2", - "R3", - "R4", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "1\u00fa r\u00e1ithe", - "2\u00fa r\u00e1ithe", - "3\u00fa r\u00e1ithe", - "4\u00fa r\u00e1ithe", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, - { "islamic.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedQuarterNames }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "a.m.", - "p.m.", - } - }, + sharedAmPmMarkers }, { "islamic.narrow.AmPmMarkers", - new String[] { - "a", - "p", - } - }, + sharedNarrowAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "d MMMM y G", - "d MMM y G", - "dd/MM/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "d MMMM y G", - "d MMM y G", - "dd/MM/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "d MMMM y G", - "d MMM y G", - "dd/MM/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.long.Eras", new String[] { "Roimh Chr\u00edost", @@ -243,13 +208,7 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "d MMMM y G", - "d MMM y G", - "dd/MM/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "RC", @@ -257,52 +216,15 @@ } }, { "roc.AmPmMarkers", - new String[] { - "a.m.", - "p.m.", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "EEEE d MMMM y GGGG", - "d MMMM y GGGG", - "d MMM y GGGG", - "dd/MM/y G", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "Domh", - "Luan", - "M\u00e1irt", - "C\u00e9ad", - "D\u00e9ar", - "Aoine", - "Sath", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "D\u00e9 Domhnaigh", - "D\u00e9 Luain", - "D\u00e9 M\u00e1irt", - "D\u00e9 C\u00e9adaoin", - "D\u00e9ardaoin", - "D\u00e9 hAoine", - "D\u00e9 Sathairn", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "D", - "L", - "M", - "C", - "D", - "A", - "S", - } - }, + sharedDayNarrows }, { "roc.MonthAbbreviations", new String[] { "Ean", @@ -355,41 +277,13 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "R1", - "R2", - "R3", - "R4", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "1\u00fa r\u00e1ithe", - "2\u00fa r\u00e1ithe", - "3\u00fa r\u00e1ithe", - "4\u00fa r\u00e1ithe", - } - }, - { "roc.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedQuarterNames }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "a.m.", - "p.m.", - } - }, + sharedAmPmMarkers }, { "roc.narrow.AmPmMarkers", - new String[] { - "a", - "p", - } - }, + sharedNarrowAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_hi_IN.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_hi_IN.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_hi_IN.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,23 +72,91 @@ public class JavaTimeSupplementary_hi_IN extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "\u0924\u093f1", + "\u0924\u093f2", + "\u0924\u093f3", + "\u0924\u093f4", + }; + + final String[] sharedQuarterNames = { + "\u092a\u0939\u0932\u0940 \u0924\u093f\u092e\u093e\u0939\u0940", + "\u0926\u0942\u0938\u0930\u0940 \u0924\u093f\u092e\u093e\u0939\u0940", + "\u0924\u0940\u0938\u0930\u0940 \u0924\u093f\u092e\u093e\u0939\u0940", + "\u091a\u094c\u0925\u0940 \u0924\u093f\u092e\u093e\u0939\u0940", + }; + + final String[] sharedAmPmMarkers = { + "\u092a\u0942\u0930\u094d\u0935\u093e\u0939\u094d\u0928", + "\u0905\u092a\u0930\u093e\u0939\u094d\u0928", + }; + + final String[] sharedDatePatterns = { + "GGGG EEEE, d MMMM y", + "GGGG d MMMM y", + "GGGG d MMM y", + "GGGG d/M/y", + }; + + final String[] sharedDayAbbreviations = { + "\u0930\u0935\u093f", + "\u0938\u094b\u092e", + "\u092e\u0902\u0917\u0932", + "\u092c\u0941\u0927", + "\u0917\u0941\u0930\u0941", + "\u0936\u0941\u0915\u094d\u0930", + "\u0936\u0928\u093f", + }; + + final String[] sharedDayNames = { + "\u0930\u0935\u093f\u0935\u093e\u0930", + "\u0938\u094b\u092e\u0935\u093e\u0930", + "\u092e\u0902\u0917\u0932\u0935\u093e\u0930", + "\u092c\u0941\u0927\u0935\u093e\u0930", + "\u0917\u0941\u0930\u0941\u0935\u093e\u0930", + "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930", + "\u0936\u0928\u093f\u0935\u093e\u0930", + }; + + final String[] sharedDayNarrows = { + "\u0930", + "\u0938\u094b", + "\u092e\u0902", + "\u092c\u0941", + "\u0917\u0941", + "\u0936\u0941", + "\u0936", + }; + + final String[] sharedTimePatterns = { + "h:mm:ss a zzzz", + "h:mm:ss a z", + "h:mm:ss a", + "h:mm a", + }; + + final String[] sharedAbbreviatedAmPmMarkers = { + "\u092a\u0942\u0930\u094d\u0935", + "\u0905\u092a\u0930", + }; + + final String[] sharedNarrowAmPmMarkers = { + "\u092a\u0942", + "\u0905", + }; + + final String[] sharedJavaTimeDatePatterns = { + "G EEEE, d MMMM y", + "G d MMMM y", + "G d MMM y", + "G d/M/y", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "\u0924\u093f1", - "\u0924\u093f2", - "\u0924\u093f3", - "\u0924\u093f4", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "\u092a\u0939\u0932\u0940 \u0924\u093f\u092e\u093e\u0939\u0940", - "\u0926\u0942\u0938\u0930\u0940 \u0924\u093f\u092e\u093e\u0939\u0940", - "\u0924\u0940\u0938\u0930\u0940 \u0924\u093f\u092e\u093e\u0939\u0940", - "\u091a\u094c\u0925\u0940 \u0924\u093f\u092e\u093e\u0939\u0940", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "\u092c\u094c\u0926\u094d\u0927 \u092a\u0902\u091a\u093e\u0902\u0917" }, { "calendarname.gregorian", @@ -124,52 +192,15 @@ { "field.zone", "\u0938\u092e\u092f \u0915\u094d\u0937\u0947\u0924\u094d\u0930" }, { "islamic.AmPmMarkers", - new String[] { - "\u092a\u0942\u0930\u094d\u0935\u093e\u0939\u094d\u0928", - "\u0905\u092a\u0930\u093e\u0939\u094d\u0928", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "GGGG EEEE, d MMMM y", - "GGGG d MMMM y", - "GGGG d MMM y", - "GGGG d/M/y", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "\u0930\u0935\u093f", - "\u0938\u094b\u092e", - "\u092e\u0902\u0917\u0932", - "\u092c\u0941\u0927", - "\u0917\u0941\u0930\u0941", - "\u0936\u0941\u0915\u094d\u0930", - "\u0936\u0928\u093f", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "\u0930\u0935\u093f\u0935\u093e\u0930", - "\u0938\u094b\u092e\u0935\u093e\u0930", - "\u092e\u0902\u0917\u0932\u0935\u093e\u0930", - "\u092c\u0941\u0927\u0935\u093e\u0930", - "\u0917\u0941\u0930\u0941\u0935\u093e\u0930", - "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930", - "\u0936\u0928\u093f\u0935\u093e\u0930", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "\u0930", - "\u0938\u094b", - "\u092e\u0902", - "\u092c\u0941", - "\u0917\u0941", - "\u0936\u0941", - "\u0936", - } - }, + sharedDayNarrows }, { "islamic.MonthNames", new String[] { "\u092e\u0941\u0939\u0930\u094d\u0930\u092e", @@ -188,73 +219,21 @@ } }, { "islamic.QuarterAbbreviations", - new String[] { - "\u0924\u093f1", - "\u0924\u093f2", - "\u0924\u093f3", - "\u0924\u093f4", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "\u092a\u0939\u0932\u0940 \u0924\u093f\u092e\u093e\u0939\u0940", - "\u0926\u0942\u0938\u0930\u0940 \u0924\u093f\u092e\u093e\u0939\u0940", - "\u0924\u0940\u0938\u0930\u0940 \u0924\u093f\u092e\u093e\u0939\u0940", - "\u091a\u094c\u0925\u0940 \u0924\u093f\u092e\u093e\u0939\u0940", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, + sharedQuarterNames }, { "islamic.TimePatterns", - new String[] { - "h:mm:ss a zzzz", - "h:mm:ss a z", - "h:mm:ss a", - "h:mm a", - } - }, + sharedTimePatterns }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "\u092a\u0942\u0930\u094d\u0935", - "\u0905\u092a\u0930", - } - }, + sharedAbbreviatedAmPmMarkers }, { "islamic.narrow.AmPmMarkers", - new String[] { - "\u092a\u0942", - "\u0905", - } - }, + sharedNarrowAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "G EEEE, d MMMM y", - "G d MMMM y", - "G d MMM y", - "G d/M/y", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "G EEEE, d MMMM y", - "G d MMMM y", - "G d MMM y", - "G d/M/y", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "G EEEE, d MMMM y", - "G d MMMM y", - "G d MMM y", - "G d/M/y", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.long.Eras", new String[] { "\u0908\u0938\u0935\u0940 \u0938\u0928", @@ -280,13 +259,7 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "G EEEE, d MMMM y", - "G d MMMM y", - "G d MMM y", - "G d/M/y", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "\u0908\u0938\u093e\u092a\u0942\u0930\u094d\u0935", @@ -294,52 +267,15 @@ } }, { "roc.AmPmMarkers", - new String[] { - "\u092a\u0942\u0930\u094d\u0935\u093e\u0939\u094d\u0928", - "\u0905\u092a\u0930\u093e\u0939\u094d\u0928", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "GGGG EEEE, d MMMM y", - "GGGG d MMMM y", - "GGGG d MMM y", - "GGGG d/M/y", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "\u0930\u0935\u093f", - "\u0938\u094b\u092e", - "\u092e\u0902\u0917\u0932", - "\u092c\u0941\u0927", - "\u0917\u0941\u0930\u0941", - "\u0936\u0941\u0915\u094d\u0930", - "\u0936\u0928\u093f", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "\u0930\u0935\u093f\u0935\u093e\u0930", - "\u0938\u094b\u092e\u0935\u093e\u0930", - "\u092e\u0902\u0917\u0932\u0935\u093e\u0930", - "\u092c\u0941\u0927\u0935\u093e\u0930", - "\u0917\u0941\u0930\u0941\u0935\u093e\u0930", - "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930", - "\u0936\u0928\u093f\u0935\u093e\u0930", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "\u0930", - "\u0938\u094b", - "\u092e\u0902", - "\u092c\u0941", - "\u0917\u0941", - "\u0936\u0941", - "\u0936", - } - }, + sharedDayNarrows }, { "roc.MonthAbbreviations", new String[] { "\u091c\u0928\u0970", @@ -392,41 +328,15 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "\u0924\u093f1", - "\u0924\u093f2", - "\u0924\u093f3", - "\u0924\u093f4", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "\u092a\u0939\u0932\u0940 \u0924\u093f\u092e\u093e\u0939\u0940", - "\u0926\u0942\u0938\u0930\u0940 \u0924\u093f\u092e\u093e\u0939\u0940", - "\u0924\u0940\u0938\u0930\u0940 \u0924\u093f\u092e\u093e\u0939\u0940", - "\u091a\u094c\u0925\u0940 \u0924\u093f\u092e\u093e\u0939\u0940", - } - }, + sharedQuarterNames }, { "roc.TimePatterns", - new String[] { - "h:mm:ss a zzzz", - "h:mm:ss a z", - "h:mm:ss a", - "h:mm a", - } - }, + sharedTimePatterns }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "\u092a\u0942\u0930\u094d\u0935", - "\u0905\u092a\u0930", - } - }, + sharedAbbreviatedAmPmMarkers }, { "roc.narrow.AmPmMarkers", - new String[] { - "\u092a\u0942", - "\u0905", - } - }, + sharedNarrowAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_hr.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_hr.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_hr.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,31 +72,88 @@ public class JavaTimeSupplementary_hr extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "1kv", + "2kv", + "3kv", + "4kv", + }; + + final String[] sharedQuarterNames = { + "1. kvartal", + "2. kvartal", + "3. kvartal", + "4. kvartal", + }; + + final String[] sharedQuarterNarrows = { + "1.", + "2.", + "3.", + "4.", + }; + + final String[] sharedAmPmMarkers = { + "AM", + "PM", + }; + + final String[] sharedDayAbbreviations = { + "ned", + "pon", + "uto", + "sri", + "\u010det", + "pet", + "sub", + }; + + final String[] sharedDayNames = { + "nedjelja", + "ponedjeljak", + "utorak", + "srijeda", + "\u010detvrtak", + "petak", + "subota", + }; + + final String[] sharedDayNarrows = { + "N", + "P", + "U", + "S", + "\u010c", + "P", + "S", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, d. MMMM y. G", + "d. MMMM y. G", + "d. MMM y. G", + "dd.MM.y. GGGGG", + }; + + final String[] sharedJavaTimeDatePatterns2 = { + "EEEE, d. MMMM y. G", + "d. MMMM y. G", + "d. M. y. G", + "d.M.y. GGGGG", + }; + + final String[] sharedEras = { + "prije R.O.C.", + "R.O.C.", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "1kv", - "2kv", - "3kv", - "4kv", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "1. kvartal", - "2. kvartal", - "3. kvartal", - "4. kvartal", - } - }, + sharedQuarterNames }, { "QuarterNarrows", - new String[] { - "1.", - "2.", - "3.", - "4.", - } - }, + sharedQuarterNarrows }, { "calendarname.buddhist", "budisti\u010dki kalendar" }, { "calendarname.gregorian", @@ -132,11 +189,7 @@ { "field.zone", "vremenska zona" }, { "islamic.AmPmMarkers", - new String[] { - "AM", - "PM", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", new String[] { "EEEE, d. MMMM y. GGGG", @@ -146,114 +199,21 @@ } }, { "islamic.DayAbbreviations", - new String[] { - "ned", - "pon", - "uto", - "sri", - "\u010det", - "pet", - "sub", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "nedjelja", - "ponedjeljak", - "utorak", - "srijeda", - "\u010detvrtak", - "petak", - "subota", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "N", - "P", - "U", - "S", - "\u010c", - "P", - "S", - } - }, - { "islamic.Eras", - new String[] { - "", - "AH", - } - }, + sharedDayNarrows }, { "islamic.QuarterAbbreviations", - new String[] { - "1kv", - "2kv", - "3kv", - "4kv", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "1. kvartal", - "2. kvartal", - "3. kvartal", - "4. kvartal", - } - }, + sharedQuarterNames }, { "islamic.QuarterNarrows", - new String[] { - "1.", - "2.", - "3.", - "4.", - } - }, - { "islamic.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, - { "islamic.long.Eras", - new String[] { - "", - "AH", - } - }, + sharedQuarterNarrows }, { "islamic.narrow.AmPmMarkers", - new String[] { - "AM", - "PM", - } - }, - { "islamic.narrow.Eras", - new String[] { - "", - "AH", - } - }, - { "islamic.short.Eras", - new String[] { - "", - "AH", - } - }, + sharedAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE, d. MMMM y. G", - "d. MMMM y. G", - "d. MMM y. G", - "dd.MM.y. GGGGG", - } - }, - { "java.time.buddhist.long.Eras", - new String[] { - "BC", - "BE", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.buddhist.short.Eras", new String[] { "BC", @@ -261,21 +221,9 @@ } }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE, d. MMMM y. G", - "d. MMMM y. G", - "d. M. y. G", - "d.M.y. GGGGG", - } - }, + sharedJavaTimeDatePatterns2 }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE, d. MMMM y. G", - "d. MMMM y. G", - "d. M. y. G", - "d.M.y. GGGGG", - } - }, + sharedJavaTimeDatePatterns2 }, { "java.time.japanese.long.Eras", new String[] { "poslije Krista", @@ -301,25 +249,13 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE, d. MMMM y. G", - "d. MMMM y. G", - "d. MMM y. G", - "dd.MM.y. GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "Prije Krista", "Poslije Krista", } }, - { "roc.AmPmMarkers", - new String[] { - "AM", - "PM", - } - }, { "roc.DatePatterns", new String[] { "EEEE, d. MMMM y. GGGG", @@ -329,44 +265,13 @@ } }, { "roc.DayAbbreviations", - new String[] { - "ned", - "pon", - "uto", - "sri", - "\u010det", - "pet", - "sub", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "nedjelja", - "ponedjeljak", - "utorak", - "srijeda", - "\u010detvrtak", - "petak", - "subota", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "N", - "P", - "U", - "S", - "\u010c", - "P", - "S", - } - }, + sharedDayNarrows }, { "roc.Eras", - new String[] { - "prije R.O.C.", - "R.O.C.", - } - }, + sharedEras }, { "roc.MonthAbbreviations", new String[] { "sij", @@ -419,61 +324,17 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "1kv", - "2kv", - "3kv", - "4kv", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "1. kvartal", - "2. kvartal", - "3. kvartal", - "4. kvartal", - } - }, + sharedQuarterNames }, { "roc.QuarterNarrows", - new String[] { - "1.", - "2.", - "3.", - "4.", - } - }, - { "roc.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedQuarterNarrows }, { "roc.long.Eras", - new String[] { - "prije R.O.C.", - "R.O.C.", - } - }, - { "roc.narrow.AmPmMarkers", - new String[] { - "AM", - "PM", - } - }, + sharedEras }, { "roc.narrow.Eras", - new String[] { - "prije R.O.C.", - "R.O.C.", - } - }, + sharedEras }, { "roc.short.Eras", - new String[] { - "prije R.O.C.", - "R.O.C.", - } - }, + sharedEras }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_hu.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_hu.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_hu.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,35 +72,105 @@ public class JavaTimeSupplementary_hu extends OpenListResourceBundle { @Override protected final Object[][] getContents() { - final String[] javatimebuddhistlongEras = { + final String[] sharedQuarterAbbreviations = { + "N1", + "N2", + "N3", + "N4", + }; + + final String[] sharedQuarterNames = { + "I. negyed\u00e9v", + "II. negyed\u00e9v", + "III. negyed\u00e9v", + "IV. negyed\u00e9v", + }; + + final String[] sharedQuarterNarrows = { + "1.", + "2.", + "3.", + "4.", + }; + + final String[] sharedAmPmMarkers = { + "de.", + "du.", + }; + + final String[] sharedDatePatterns = { + "GGGG y. MMMM d., EEEE", + "GGGG y. MMMM d.", + "GGGG y. MMM d.", + "G y. M. d.", + }; + + final String[] sharedDayAbbreviations = { + "V", + "H", + "K", + "Sze", + "Cs", + "P", + "Szo", + }; + + final String[] sharedDayNames = { + "vas\u00e1rnap", + "h\u00e9tf\u0151", + "kedd", + "szerda", + "cs\u00fct\u00f6rt\u00f6k", + "p\u00e9ntek", + "szombat", + }; + + final String[] sharedDayNarrows = { + "V", + "H", + "K", + "Sz", + "Cs", + "P", + "Sz", + }; + + final String[] sharedEras = { + "", + "MF", + }; + + final String[] sharedTimePatterns = { + "H:mm:ss zzzz", + "H:mm:ss z", + "H:mm:ss", + "H:mm", + }; + + final String[] sharedJavaTimeDatePatterns = { + "G y. MMMM d., EEEE", + "G y. MMMM d.", + "G y. MMM d.", + "GGGGG y. M. d.", + }; + + final String[] sharedJavaTimeLongEras = { "BC", "BK", }; + + final String[] sharedShortEras = { + "R.O.C. el\u0151tt", + "", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "N1", - "N2", - "N3", - "N4", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "I. negyed\u00e9v", - "II. negyed\u00e9v", - "III. negyed\u00e9v", - "IV. negyed\u00e9v", - } - }, + sharedQuarterNames }, { "QuarterNarrows", - new String[] { - "1.", - "2.", - "3.", - "4.", - } - }, + sharedQuarterNarrows }, { "calendarname.buddhist", "Buddhista napt\u00e1r" }, { "calendarname.gregorian", @@ -136,58 +206,17 @@ { "field.zone", "id\u0151z\u00f3na" }, { "islamic.AmPmMarkers", - new String[] { - "de.", - "du.", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "GGGG y. MMMM d., EEEE", - "GGGG y. MMMM d.", - "GGGG y. MMM d.", - "G y. M. d.", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "V", - "H", - "K", - "Sze", - "Cs", - "P", - "Szo", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "vas\u00e1rnap", - "h\u00e9tf\u0151", - "kedd", - "szerda", - "cs\u00fct\u00f6rt\u00f6k", - "p\u00e9ntek", - "szombat", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "V", - "H", - "K", - "Sz", - "Cs", - "P", - "Sz", - } - }, + sharedDayNarrows }, { "islamic.Eras", - new String[] { - "", - "MF", - } - }, + sharedEras }, { "islamic.MonthAbbreviations", new String[] { "Moh.", @@ -223,87 +252,31 @@ } }, { "islamic.QuarterAbbreviations", - new String[] { - "N1", - "N2", - "N3", - "N4", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "I. negyed\u00e9v", - "II. negyed\u00e9v", - "III. negyed\u00e9v", - "IV. negyed\u00e9v", - } - }, + sharedQuarterNames }, { "islamic.QuarterNarrows", - new String[] { - "1.", - "2.", - "3.", - "4.", - } - }, + sharedQuarterNarrows }, { "islamic.TimePatterns", - new String[] { - "H:mm:ss zzzz", - "H:mm:ss z", - "H:mm:ss", - "H:mm", - } - }, + sharedTimePatterns }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "de.", - "du.", - } - }, + sharedAmPmMarkers }, { "islamic.long.Eras", - new String[] { - "", - "MF", - } - }, + sharedEras }, { "islamic.narrow.AmPmMarkers", - new String[] { - "de.", - "du.", - } - }, + sharedAmPmMarkers }, { "islamic.narrow.Eras", - new String[] { - "", - "MF", - } - }, + sharedEras }, { "islamic.short.Eras", - new String[] { - "", - "MF", - } - }, + sharedEras }, { "java.time.buddhist.DatePatterns", - new String[] { - "G y. MMMM d., EEEE", - "G y. MMMM d.", - "G y. MMM d.", - "GGGGG y. M. d.", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.buddhist.long.Eras", - javatimebuddhistlongEras }, + sharedJavaTimeLongEras }, { "java.time.buddhist.short.Eras", - javatimebuddhistlongEras }, + sharedJavaTimeLongEras }, { "java.time.islamic.DatePatterns", - new String[] { - "G y. MMMM d., EEEE", - "G y. MMMM d.", - "G y. MMM d.", - "GGGGG y. M. d.", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", new String[] { "G y. MMMM d., EEEE", @@ -319,13 +292,7 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "G y. MMMM d., EEEE", - "G y. MMMM d.", - "G y. MMM d.", - "GGGGG y. M. d.", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "i.e.", @@ -333,58 +300,17 @@ } }, { "roc.AmPmMarkers", - new String[] { - "de.", - "du.", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "GGGG y. MMMM d., EEEE", - "GGGG y. MMMM d.", - "GGGG y. MMM d.", - "G y. M. d.", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "V", - "H", - "K", - "Sze", - "Cs", - "P", - "Szo", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "vas\u00e1rnap", - "h\u00e9tf\u0151", - "kedd", - "szerda", - "cs\u00fct\u00f6rt\u00f6k", - "p\u00e9ntek", - "szombat", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "V", - "H", - "K", - "Sz", - "Cs", - "P", - "Sz", - } - }, + sharedDayNarrows }, { "roc.Eras", - new String[] { - "R.O.C. el\u0151tt", - "", - } - }, + sharedShortEras }, { "roc.MonthAbbreviations", new String[] { "jan.", @@ -437,67 +363,23 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "N1", - "N2", - "N3", - "N4", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "I. negyed\u00e9v", - "II. negyed\u00e9v", - "III. negyed\u00e9v", - "IV. negyed\u00e9v", - } - }, + sharedQuarterNames }, { "roc.QuarterNarrows", - new String[] { - "1.", - "2.", - "3.", - "4.", - } - }, + sharedQuarterNarrows }, { "roc.TimePatterns", - new String[] { - "H:mm:ss zzzz", - "H:mm:ss z", - "H:mm:ss", - "H:mm", - } - }, + sharedTimePatterns }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "de.", - "du.", - } - }, + sharedAmPmMarkers }, { "roc.long.Eras", - new String[] { - "R.O.C. el\u0151tt", - "", - } - }, + sharedShortEras }, { "roc.narrow.AmPmMarkers", - new String[] { - "de.", - "du.", - } - }, + sharedAmPmMarkers }, { "roc.narrow.Eras", - new String[] { - "R.O.C. el\u0151tt", - "", - } - }, + sharedShortEras }, { "roc.short.Eras", - new String[] { - "R.O.C. el\u0151tt", - "", - } - }, + sharedShortEras }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_in.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_in.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_in.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,23 +72,94 @@ public class JavaTimeSupplementary_in extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "K1", + "K2", + "K3", + "K4", + }; + + final String[] sharedQuarterNames = { + "Kuartal ke-1", + "Kuartal ke-2", + "Kuartal ke-3", + "Kuartal ke-4", + }; + + final String[] sharedAmPmMarkers = { + "AM", + "PM", + }; + + final String[] sharedDatePatterns = { + "EEEE, dd MMMM y GGGG", + "d MMMM y GGGG", + "d MMM y GGGG", + "d/M/y G", + }; + + final String[] sharedDayAbbreviations = { + "Min", + "Sen", + "Sel", + "Rab", + "Kam", + "Jum", + "Sab", + }; + + final String[] sharedDayNames = { + "Minggu", + "Senin", + "Selasa", + "Rabu", + "Kamis", + "Jumat", + "Sabtu", + }; + + final String[] sharedDayNarrows = { + "M", + "S", + "S", + "R", + "K", + "J", + "S", + }; + + final String[] sharedTimePatterns = { + "HH.mm.ss zzzz", + "HH.mm.ss z", + "HH.mm.ss", + "HH.mm", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, dd MMMM y G", + "d MMMM y G", + "d MMM y G", + "d/M/y GGGGG", + }; + + final String[] sharedJavaTimeLongEras = { + "M", + "Meiji", + "Taish\u014d", + "Sh\u014dwa", + "Heisei", + }; + + final String[] sharedEras = { + "Sebelum R.O.C.", + "R.O.C.", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "K1", - "K2", - "K3", - "K4", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "Kuartal ke-1", - "Kuartal ke-2", - "Kuartal ke-3", - "Kuartal ke-4", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "Kalender Buddha" }, { "calendarname.gregorian", @@ -122,58 +193,15 @@ { "field.zone", "Zona Waktu" }, { "islamic.AmPmMarkers", - new String[] { - "AM", - "PM", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "EEEE, dd MMMM y GGGG", - "d MMMM y GGGG", - "d MMM y GGGG", - "d/M/y G", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "Min", - "Sen", - "Sel", - "Rab", - "Kam", - "Jum", - "Sab", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "Minggu", - "Senin", - "Selasa", - "Rabu", - "Kamis", - "Jumat", - "Sabtu", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "M", - "S", - "S", - "R", - "K", - "J", - "S", - } - }, - { "islamic.Eras", - new String[] { - "", - "AH", - } - }, + sharedDayNarrows }, { "islamic.MonthAbbreviations", new String[] { "Muh.", @@ -209,75 +237,15 @@ } }, { "islamic.QuarterAbbreviations", - new String[] { - "K1", - "K2", - "K3", - "K4", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "Kuartal ke-1", - "Kuartal ke-2", - "Kuartal ke-3", - "Kuartal ke-4", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, + sharedQuarterNames }, { "islamic.TimePatterns", - new String[] { - "HH.mm.ss zzzz", - "HH.mm.ss z", - "HH.mm.ss", - "HH.mm", - } - }, - { "islamic.long.Eras", - new String[] { - "", - "AH", - } - }, + sharedTimePatterns }, { "islamic.narrow.AmPmMarkers", - new String[] { - "AM", - "PM", - } - }, - { "islamic.narrow.Eras", - new String[] { - "", - "AH", - } - }, - { "islamic.short.Eras", - new String[] { - "", - "AH", - } - }, + sharedAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE, dd MMMM y G", - "d MMMM y G", - "d MMM y G", - "d/M/y GGGGG", - } - }, - { "java.time.buddhist.long.Eras", - new String[] { - "BC", - "BE", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.buddhist.short.Eras", new String[] { "BC", @@ -285,39 +253,13 @@ } }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE, dd MMMM y G", - "d MMMM y G", - "d MMM y G", - "d/M/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE, dd MMMM y G", - "d MMMM y G", - "d MMM y G", - "d/M/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.long.Eras", - new String[] { - "M", - "Meiji", - "Taish\u014d", - "Sh\u014dwa", - "Heisei", - } - }, + sharedJavaTimeLongEras }, { "java.time.japanese.short.Eras", - new String[] { - "M", - "Meiji", - "Taish\u014d", - "Sh\u014dwa", - "Heisei", - } - }, + sharedJavaTimeLongEras }, { "java.time.long.Eras", new String[] { "Sebelum Masehi", @@ -325,72 +267,23 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE, dd MMMM y G", - "d MMMM y G", - "d MMM y G", - "d/M/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "BCE", "CE", } }, - { "roc.AmPmMarkers", - new String[] { - "AM", - "PM", - } - }, { "roc.DatePatterns", - new String[] { - "EEEE, dd MMMM y GGGG", - "d MMMM y GGGG", - "d MMM y GGGG", - "d/M/y G", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "Min", - "Sen", - "Sel", - "Rab", - "Kam", - "Jum", - "Sab", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "Minggu", - "Senin", - "Selasa", - "Rabu", - "Kamis", - "Jumat", - "Sabtu", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "M", - "S", - "S", - "R", - "K", - "J", - "S", - } - }, + sharedDayNarrows }, { "roc.Eras", - new String[] { - "Sebelum R.O.C.", - "R.O.C.", - } - }, + sharedEras }, { "roc.MonthAbbreviations", new String[] { "Jan", @@ -443,53 +336,17 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "K1", - "K2", - "K3", - "K4", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "Kuartal ke-1", - "Kuartal ke-2", - "Kuartal ke-3", - "Kuartal ke-4", - } - }, + sharedQuarterNames }, { "roc.TimePatterns", - new String[] { - "HH.mm.ss zzzz", - "HH.mm.ss z", - "HH.mm.ss", - "HH.mm", - } - }, + sharedTimePatterns }, { "roc.long.Eras", - new String[] { - "Sebelum R.O.C.", - "R.O.C.", - } - }, - { "roc.narrow.AmPmMarkers", - new String[] { - "AM", - "PM", - } - }, + sharedEras }, { "roc.narrow.Eras", - new String[] { - "Sebelum R.O.C.", - "R.O.C.", - } - }, + sharedEras }, { "roc.short.Eras", - new String[] { - "Sebelum R.O.C.", - "R.O.C.", - } - }, + sharedEras }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_is.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_is.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_is.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,23 +72,79 @@ public class JavaTimeSupplementary_is extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "F1", + "F2", + "F3", + "F4", + }; + + final String[] sharedQuarterNames = { + "1. fj\u00f3r\u00f0ungur", + "2. fj\u00f3r\u00f0ungur", + "3. fj\u00f3r\u00f0ungur", + "4. fj\u00f3r\u00f0ungur", + }; + + final String[] sharedAmPmMarkers = { + "f.h.", + "e.h.", + }; + + final String[] sharedDatePatterns = { + "EEEE, d. MMMM y GGGG", + "d. MMMM y GGGG", + "d.M.y GGGG", + "d.M.y G", + }; + + final String[] sharedDayAbbreviations = { + "sun.", + "m\u00e1n.", + "\u00feri.", + "mi\u00f0.", + "fim.", + "f\u00f6s.", + "lau.", + }; + + final String[] sharedDayNames = { + "sunnudagur", + "m\u00e1nudagur", + "\u00feri\u00f0judagur", + "mi\u00f0vikudagur", + "fimmtudagur", + "f\u00f6studagur", + "laugardagur", + }; + + final String[] sharedDayNarrows = { + "S", + "M", + "\u00de", + "M", + "F", + "F", + "L", + }; + + final String[] sharedNarrowAmPmMarkers = { + "f.", + "e.", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, d. MMMM y G", + "d. MMMM y G", + "d.M.y G", + "d.M.y GGGGG", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "F1", - "F2", - "F3", - "F4", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "1. fj\u00f3r\u00f0ungur", - "2. fj\u00f3r\u00f0ungur", - "3. fj\u00f3r\u00f0ungur", - "4. fj\u00f3r\u00f0ungur", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "B\u00fadd\u00edskt dagatal" }, { "calendarname.gregorian", @@ -124,120 +180,29 @@ { "field.zone", "t\u00edmabelti" }, { "islamic.AmPmMarkers", - new String[] { - "f.h.", - "e.h.", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "EEEE, d. MMMM y GGGG", - "d. MMMM y GGGG", - "d.M.y GGGG", - "d.M.y G", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "sun.", - "m\u00e1n.", - "\u00feri.", - "mi\u00f0.", - "fim.", - "f\u00f6s.", - "lau.", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "sunnudagur", - "m\u00e1nudagur", - "\u00feri\u00f0judagur", - "mi\u00f0vikudagur", - "fimmtudagur", - "f\u00f6studagur", - "laugardagur", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "S", - "M", - "\u00de", - "M", - "F", - "F", - "L", - } - }, + sharedDayNarrows }, { "islamic.QuarterAbbreviations", - new String[] { - "F1", - "F2", - "F3", - "F4", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "1. fj\u00f3r\u00f0ungur", - "2. fj\u00f3r\u00f0ungur", - "3. fj\u00f3r\u00f0ungur", - "4. fj\u00f3r\u00f0ungur", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, - { "islamic.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedQuarterNames }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "f.h.", - "e.h.", - } - }, + sharedAmPmMarkers }, { "islamic.narrow.AmPmMarkers", - new String[] { - "f.", - "e.", - } - }, + sharedNarrowAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE, d. MMMM y G", - "d. MMMM y G", - "d.M.y G", - "d.M.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE, d. MMMM y G", - "d. MMMM y G", - "d.M.y G", - "d.M.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE, d. MMMM y G", - "d. MMMM y G", - "d.M.y G", - "d.M.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.long.Eras", new String[] { "fyrir Krist", @@ -245,13 +210,7 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE, d. MMMM y G", - "d. MMMM y G", - "d.M.y G", - "d.M.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "f.Kr.", @@ -259,52 +218,15 @@ } }, { "roc.AmPmMarkers", - new String[] { - "f.h.", - "e.h.", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "EEEE, d. MMMM y GGGG", - "d. MMMM y GGGG", - "d.M.y GGGG", - "d.M.y G", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "sun.", - "m\u00e1n.", - "\u00feri.", - "mi\u00f0.", - "fim.", - "f\u00f6s.", - "lau.", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "sunnudagur", - "m\u00e1nudagur", - "\u00feri\u00f0judagur", - "mi\u00f0vikudagur", - "fimmtudagur", - "f\u00f6studagur", - "laugardagur", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "S", - "M", - "\u00de", - "M", - "F", - "F", - "L", - } - }, + sharedDayNarrows }, { "roc.MonthAbbreviations", new String[] { "jan.", @@ -357,41 +279,13 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "F1", - "F2", - "F3", - "F4", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "1. fj\u00f3r\u00f0ungur", - "2. fj\u00f3r\u00f0ungur", - "3. fj\u00f3r\u00f0ungur", - "4. fj\u00f3r\u00f0ungur", - } - }, - { "roc.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedQuarterNames }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "f.h.", - "e.h.", - } - }, + sharedAmPmMarkers }, { "roc.narrow.AmPmMarkers", - new String[] { - "f.", - "e.", - } - }, + sharedNarrowAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_it.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_it.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_it.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,23 +72,84 @@ public class JavaTimeSupplementary_it extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "T1", + "T2", + "T3", + "T4", + }; + + final String[] sharedQuarterNames = { + "1\u00ba trimestre", + "2\u00ba trimestre", + "3\u00ba trimestre", + "4\u00ba trimestre", + }; + + final String[] sharedDatePatterns = { + "EEEE d MMMM y GGGG", + "dd MMMM y GGGG", + "dd MMM y GGGG", + "dd/MM/yy G", + }; + + final String[] sharedDayAbbreviations = { + "dom", + "lun", + "mar", + "mer", + "gio", + "ven", + "sab", + }; + + final String[] sharedDayNames = { + "domenica", + "luned\u00ec", + "marted\u00ec", + "mercoled\u00ec", + "gioved\u00ec", + "venerd\u00ec", + "sabato", + }; + + final String[] sharedDayNarrows = { + "D", + "L", + "M", + "M", + "G", + "V", + "S", + }; + + final String[] sharedNarrowAmPmMarkers = { + "m.", + "p.", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE d MMMM y G", + "dd MMMM y G", + "dd MMM y G", + "dd/MM/yy GGGGG", + }; + + final String[] sharedJavaTimeLongEras = { + "BC", + "EB", + }; + + final String[] sharedEras = { + "Prima di R.O.C.", + "Minguo", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "T1", - "T2", - "T3", - "T4", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "1\u00ba trimestre", - "2\u00ba trimestre", - "3\u00ba trimestre", - "4\u00ba trimestre", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "Calendario buddista" }, { "calendarname.gregorian", @@ -132,144 +193,29 @@ } }, { "islamic.DatePatterns", - new String[] { - "EEEE d MMMM y GGGG", - "dd MMMM y GGGG", - "dd MMM y GGGG", - "dd/MM/yy G", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "dom", - "lun", - "mar", - "mer", - "gio", - "ven", - "sab", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "domenica", - "luned\u00ec", - "marted\u00ec", - "mercoled\u00ec", - "gioved\u00ec", - "venerd\u00ec", - "sabato", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "D", - "L", - "M", - "M", - "G", - "V", - "S", - } - }, - { "islamic.Eras", - new String[] { - "", - "AH", - } - }, + sharedDayNarrows }, { "islamic.QuarterAbbreviations", - new String[] { - "T1", - "T2", - "T3", - "T4", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "1\u00ba trimestre", - "2\u00ba trimestre", - "3\u00ba trimestre", - "4\u00ba trimestre", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, - { "islamic.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, - { "islamic.long.Eras", - new String[] { - "", - "AH", - } - }, + sharedQuarterNames }, { "islamic.narrow.AmPmMarkers", - new String[] { - "m.", - "p.", - } - }, - { "islamic.narrow.Eras", - new String[] { - "", - "AH", - } - }, - { "islamic.short.Eras", - new String[] { - "", - "AH", - } - }, + sharedNarrowAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "dd MMMM y G", - "dd MMM y G", - "dd/MM/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.buddhist.long.Eras", - new String[] { - "BC", - "EB", - } - }, + sharedJavaTimeLongEras }, { "java.time.buddhist.short.Eras", - new String[] { - "BC", - "EB", - } - }, + sharedJavaTimeLongEras }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "dd MMMM y G", - "dd MMM y G", - "dd/MM/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "dd MMMM y G", - "dd MMM y G", - "dd/MM/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.long.Eras", new String[] { "a.C.", @@ -277,72 +223,23 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "dd MMMM y G", - "dd MMM y G", - "dd/MM/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "BC", "dopo Cristo", } }, - { "roc.AmPmMarkers", - new String[] { - "AM", - "PM", - } - }, { "roc.DatePatterns", - new String[] { - "EEEE d MMMM y GGGG", - "dd MMMM y GGGG", - "dd MMM y GGGG", - "dd/MM/yy G", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "dom", - "lun", - "mar", - "mer", - "gio", - "ven", - "sab", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "domenica", - "luned\u00ec", - "marted\u00ec", - "mercoled\u00ec", - "gioved\u00ec", - "venerd\u00ec", - "sabato", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "D", - "L", - "M", - "M", - "G", - "V", - "S", - } - }, + sharedDayNarrows }, { "roc.Eras", - new String[] { - "Prima di R.O.C.", - "Minguo", - } - }, + sharedEras }, { "roc.MonthAbbreviations", new String[] { "gen", @@ -395,53 +292,17 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "T1", - "T2", - "T3", - "T4", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "1\u00ba trimestre", - "2\u00ba trimestre", - "3\u00ba trimestre", - "4\u00ba trimestre", - } - }, - { "roc.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedQuarterNames }, { "roc.long.Eras", - new String[] { - "Prima di R.O.C.", - "Minguo", - } - }, + sharedEras }, { "roc.narrow.AmPmMarkers", - new String[] { - "m.", - "p.", - } - }, + sharedNarrowAmPmMarkers }, { "roc.narrow.Eras", - new String[] { - "Prima di R.O.C.", - "Minguo", - } - }, + sharedEras }, { "roc.short.Eras", - new String[] { - "Prima di R.O.C.", - "Minguo", - } - }, + sharedEras }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_it_CH.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_it_CH.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_it_CH.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,55 +72,33 @@ public class JavaTimeSupplementary_it_CH extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedDatePatterns = { + "EEEE, d MMMM y GGGG", + "d MMMM y GGGG", + "d MMM y GGGG", + "dd.MM.yy G", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, d MMMM y G", + "d MMMM y G", + "d MMM y G", + "dd.MM.yy GGGGG", + }; + return new Object[][] { { "islamic.DatePatterns", - new String[] { - "EEEE, d MMMM y GGGG", - "d MMMM y GGGG", - "d MMM y GGGG", - "dd.MM.yy G", - } - }, + sharedDatePatterns }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE, d MMMM y G", - "d MMMM y G", - "d MMM y G", - "dd.MM.yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE, d MMMM y G", - "d MMMM y G", - "d MMM y G", - "dd.MM.yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE, d MMMM y G", - "d MMMM y G", - "d MMM y G", - "dd.MM.yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE, d MMMM y G", - "d MMMM y G", - "d MMM y G", - "dd.MM.yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "roc.DatePatterns", - new String[] { - "EEEE, d MMMM y GGGG", - "d MMMM y GGGG", - "d MMM y GGGG", - "dd.MM.yy G", - } - }, + sharedDatePatterns }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_iw.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_iw.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_iw.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,23 +72,72 @@ public class JavaTimeSupplementary_iw extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterNames = { + "\u05e8\u05d1\u05e2\u05d5\u05df 1", + "\u05e8\u05d1\u05e2\u05d5\u05df 2", + "\u05e8\u05d1\u05e2\u05d5\u05df 3", + "\u05e8\u05d1\u05e2\u05d5\u05df 4", + }; + + final String[] sharedAmPmMarkers = { + "\u05dc\u05e4\u05e0\u05d4\u05f4\u05e6", + "\u05d0\u05d7\u05d4\u05f4\u05e6", + }; + + final String[] sharedDayAbbreviations = { + "\u05d9\u05d5\u05dd \u05d0\u05f3", + "\u05d9\u05d5\u05dd \u05d1\u05f3", + "\u05d9\u05d5\u05dd \u05d2\u05f3", + "\u05d9\u05d5\u05dd \u05d3\u05f3", + "\u05d9\u05d5\u05dd \u05d4\u05f3", + "\u05d9\u05d5\u05dd \u05d5\u05f3", + "\u05e9\u05d1\u05ea", + }; + + final String[] sharedDayNames = { + "\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df", + "\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9", + "\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9", + "\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9", + "\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9", + "\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9", + "\u05d9\u05d5\u05dd \u05e9\u05d1\u05ea", + }; + + final String[] sharedDayNarrows = { + "\u05d0\u05f3", + "\u05d1\u05f3", + "\u05d2\u05f3", + "\u05d3\u05f3", + "\u05d4\u05f3", + "\u05d5\u05f3", + "\u05e9\u05f3", + }; + + final String[] sharedEras = { + "", + "\u05e9\u05e0\u05ea \u05d4\u05d9\u05d2\u05f3\u05e8\u05d4", + }; + + final String[] sharedTimePatterns = { + "H:mm:ss zzzz", + "H:mm:ss z", + "H:mm:ss", + "H:mm", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, d \u05d1MMMM y G", + "d \u05d1MMMM y G", + "d \u05d1MMM y G", + "d.M.y GGGGG", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "\u05e8\u05d1\u05e2\u05d5\u05df 1", - "\u05e8\u05d1\u05e2\u05d5\u05df 2", - "\u05e8\u05d1\u05e2\u05d5\u05df 3", - "\u05e8\u05d1\u05e2\u05d5\u05df 4", - } - }, + sharedQuarterNames }, { "QuarterNames", - new String[] { - "\u05e8\u05d1\u05e2\u05d5\u05df 1", - "\u05e8\u05d1\u05e2\u05d5\u05df 2", - "\u05e8\u05d1\u05e2\u05d5\u05df 3", - "\u05e8\u05d1\u05e2\u05d5\u05df 4", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "\u05dc\u05d5\u05d7 \u05e9\u05e0\u05d4 \u05d1\u05d5\u05d3\u05d4\u05d9\u05e1\u05d8\u05d9" }, { "calendarname.gregorian", @@ -124,11 +173,7 @@ { "field.zone", "\u05d0\u05d6\u05d5\u05e8" }, { "islamic.AmPmMarkers", - new String[] { - "\u05dc\u05e4\u05e0\u05d4\u05f4\u05e6", - "\u05d0\u05d7\u05d4\u05f4\u05e6", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", new String[] { "EEEE, d \u05d1MMMM y GGGG", @@ -138,44 +183,13 @@ } }, { "islamic.DayAbbreviations", - new String[] { - "\u05d9\u05d5\u05dd \u05d0\u05f3", - "\u05d9\u05d5\u05dd \u05d1\u05f3", - "\u05d9\u05d5\u05dd \u05d2\u05f3", - "\u05d9\u05d5\u05dd \u05d3\u05f3", - "\u05d9\u05d5\u05dd \u05d4\u05f3", - "\u05d9\u05d5\u05dd \u05d5\u05f3", - "\u05e9\u05d1\u05ea", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df", - "\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9", - "\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9", - "\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9", - "\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9", - "\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9", - "\u05d9\u05d5\u05dd \u05e9\u05d1\u05ea", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "\u05d0\u05f3", - "\u05d1\u05f3", - "\u05d2\u05f3", - "\u05d3\u05f3", - "\u05d4\u05f3", - "\u05d5\u05f3", - "\u05e9\u05f3", - } - }, + sharedDayNarrows }, { "islamic.Eras", - new String[] { - "", - "\u05e9\u05e0\u05ea \u05d4\u05d9\u05d2\u05f3\u05e8\u05d4", - } - }, + sharedEras }, { "islamic.MonthAbbreviations", new String[] { "\u05de\u05d5\u05d7\u05e8\u05dd", @@ -211,69 +225,21 @@ } }, { "islamic.QuarterAbbreviations", - new String[] { - "\u05e8\u05d1\u05e2\u05d5\u05df 1", - "\u05e8\u05d1\u05e2\u05d5\u05df 2", - "\u05e8\u05d1\u05e2\u05d5\u05df 3", - "\u05e8\u05d1\u05e2\u05d5\u05df 4", - } - }, + sharedQuarterNames }, { "islamic.QuarterNames", - new String[] { - "\u05e8\u05d1\u05e2\u05d5\u05df 1", - "\u05e8\u05d1\u05e2\u05d5\u05df 2", - "\u05e8\u05d1\u05e2\u05d5\u05df 3", - "\u05e8\u05d1\u05e2\u05d5\u05df 4", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, + sharedQuarterNames }, { "islamic.TimePatterns", - new String[] { - "H:mm:ss zzzz", - "H:mm:ss z", - "H:mm:ss", - "H:mm", - } - }, + sharedTimePatterns }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "\u05dc\u05e4\u05e0\u05d4\u05f4\u05e6", - "\u05d0\u05d7\u05d4\u05f4\u05e6", - } - }, + sharedAmPmMarkers }, { "islamic.long.Eras", - new String[] { - "", - "\u05e9\u05e0\u05ea \u05d4\u05d9\u05d2\u05f3\u05e8\u05d4", - } - }, + sharedEras }, { "islamic.narrow.Eras", - new String[] { - "", - "\u05e9\u05e0\u05ea \u05d4\u05d9\u05d2\u05f3\u05e8\u05d4", - } - }, + sharedEras }, { "islamic.short.Eras", - new String[] { - "", - "\u05e9\u05e0\u05ea \u05d4\u05d9\u05d2\u05f3\u05e8\u05d4", - } - }, + sharedEras }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE, d \u05d1MMMM y G", - "d \u05d1MMMM y G", - "d \u05d1MMM y G", - "d.M.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", new String[] { "EEEE, d \u05d1MMMM y G", @@ -283,13 +249,7 @@ } }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE, d \u05d1MMMM y G", - "d \u05d1MMMM y G", - "d \u05d1MMM y G", - "d.M.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.long.Eras", new String[] { "\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e1\u05e4\u05d9\u05e8\u05d4", @@ -297,13 +257,7 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE, d \u05d1MMMM y G", - "d \u05d1MMMM y G", - "d \u05d1MMM y G", - "d.M.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "\u05dc\u05e1\u05d4\"\u05e0", @@ -311,11 +265,7 @@ } }, { "roc.AmPmMarkers", - new String[] { - "\u05dc\u05e4\u05e0\u05d4\u05f4\u05e6", - "\u05d0\u05d7\u05d4\u05f4\u05e6", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", new String[] { "EEEE, d \u05d1MMMM y GGGG", @@ -325,38 +275,11 @@ } }, { "roc.DayAbbreviations", - new String[] { - "\u05d9\u05d5\u05dd \u05d0\u05f3", - "\u05d9\u05d5\u05dd \u05d1\u05f3", - "\u05d9\u05d5\u05dd \u05d2\u05f3", - "\u05d9\u05d5\u05dd \u05d3\u05f3", - "\u05d9\u05d5\u05dd \u05d4\u05f3", - "\u05d9\u05d5\u05dd \u05d5\u05f3", - "\u05e9\u05d1\u05ea", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df", - "\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9", - "\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9", - "\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9", - "\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9", - "\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9", - "\u05d9\u05d5\u05dd \u05e9\u05d1\u05ea", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "\u05d0\u05f3", - "\u05d1\u05f3", - "\u05d2\u05f3", - "\u05d3\u05f3", - "\u05d4\u05f3", - "\u05d5\u05f3", - "\u05e9\u05f3", - } - }, + sharedDayNarrows }, { "roc.MonthAbbreviations", new String[] { "\u05d9\u05e0\u05d5\u05f3", @@ -391,59 +314,16 @@ "", } }, - { "roc.MonthNarrows", - new String[] { - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "10", - "11", - "12", - "", - } - }, { "roc.QuarterAbbreviations", - new String[] { - "\u05e8\u05d1\u05e2\u05d5\u05df 1", - "\u05e8\u05d1\u05e2\u05d5\u05df 2", - "\u05e8\u05d1\u05e2\u05d5\u05df 3", - "\u05e8\u05d1\u05e2\u05d5\u05df 4", - } - }, + sharedQuarterNames }, { "roc.QuarterNames", - new String[] { - "\u05e8\u05d1\u05e2\u05d5\u05df 1", - "\u05e8\u05d1\u05e2\u05d5\u05df 2", - "\u05e8\u05d1\u05e2\u05d5\u05df 3", - "\u05e8\u05d1\u05e2\u05d5\u05df 4", - } - }, + sharedQuarterNames }, { "roc.TimePatterns", - new String[] { - "H:mm:ss zzzz", - "H:mm:ss z", - "H:mm:ss", - "H:mm", - } - }, + sharedTimePatterns }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "\u05dc\u05e4\u05e0\u05d4\u05f4\u05e6", - "\u05d0\u05d7\u05d4\u05f4\u05e6", - } - }, + sharedAmPmMarkers }, { "roc.narrow.AmPmMarkers", - new String[] { - "\u05dc\u05e4\u05e0\u05d4\u05f4\u05e6", - "\u05d0\u05d7\u05d4\u05f4\u05e6", - } - }, + sharedAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ja.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ja.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ja.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,19 +72,119 @@ public class JavaTimeSupplementary_ja extends OpenListResourceBundle { @Override protected final Object[][] getContents() { - final String[] javatimelongEras = { + final String[] sharedQuarterNames = { + "\u7b2c1\u56db\u534a\u671f", + "\u7b2c2\u56db\u534a\u671f", + "\u7b2c3\u56db\u534a\u671f", + "\u7b2c4\u56db\u534a\u671f", + }; + + final String[] sharedAmPmMarkers = { + "\u5348\u524d", + "\u5348\u5f8c", + }; + + final String[] sharedDatePatterns = { + "GGGGy\u5e74M\u6708d\u65e5EEEE", + "GGGGy\u5e74M\u6708d\u65e5", + "GGGGy/MM/dd", + "GGGGy/MM/dd", + }; + + final String[] sharedDayNarrows = { + "\u65e5", + "\u6708", + "\u706b", + "\u6c34", + "\u6728", + "\u91d1", + "\u571f", + }; + + final String[] sharedDayNames = { + "\u65e5\u66dc\u65e5", + "\u6708\u66dc\u65e5", + "\u706b\u66dc\u65e5", + "\u6c34\u66dc\u65e5", + "\u6728\u66dc\u65e5", + "\u91d1\u66dc\u65e5", + "\u571f\u66dc\u65e5", + }; + + final String[] sharedMonthNames = { + "\u30e0\u30cf\u30c3\u30e9\u30e0", + "\u30b5\u30d5\u30a2\u30eb", + "\u30e9\u30d3\u30fc\u30fb\u30a6\u30eb\u30fb\u30a2\u30a6\u30ef\u30eb", + "\u30e9\u30d3\u30fc\u30fb\u30a6\u30c3\u30fb\u30b5\u30fc\u30cb\u30fc", + "\u30b8\u30e5\u30de\u30fc\u30c0\u30eb\u30fb\u30a2\u30a6\u30ef\u30eb", + "\u30b8\u30e5\u30de\u30fc\u30c0\u30c3\u30b5\u30fc\u30cb\u30fc", + "\u30e9\u30b8\u30e3\u30d6", + "\u30b7\u30e3\u30a2\u30d0\u30fc\u30f3", + "\u30e9\u30de\u30c0\u30fc\u30f3", + "\u30b7\u30e3\u30a6\u30ef\u30fc\u30eb", + "\u30ba\u30eb\u30fb\u30ab\u30a4\u30c0", + "\u30ba\u30eb\u30fb\u30d2\u30c3\u30b8\u30e3", + "", + }; + + final String[] sharedQuarterAbbreviations = { + "Q1", + "Q2", + "Q3", + "Q4", + }; + + final String[] sharedTimePatterns = { + "H\u6642mm\u5206ss\u79d2 zzzz", + "H:mm:ss z", + "H:mm:ss", + "H:mm", + }; + + final String[] sharedJavaTimeDatePatterns = { + "Gy\u5e74M\u6708d\u65e5EEEE", + "Gy\u5e74M\u6708d\u65e5", + "Gy/MM/dd", + "Gy/MM/dd", + }; + + final String[] sharedJavaTimeLongEras = { + "\u897f\u66a6", + "\u660e\u6cbb", + "\u5927\u6b63", + "\u662d\u548c", + "\u5e73\u6210", + }; + + final String[] sharedJavaTimeShortEras = { "\u7d00\u5143\u524d", "\u897f\u66a6", }; + + final String[] sharedEras = { + "\u6c11\u56fd\u524d", + "\u6c11\u56fd", + }; + + final String[] sharedMonthAbbreviations = { + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708", + "", + }; + return new Object[][] { { "QuarterNames", - new String[] { - "\u7b2c1\u56db\u534a\u671f", - "\u7b2c2\u56db\u534a\u671f", - "\u7b2c3\u56db\u534a\u671f", - "\u7b2c4\u56db\u534a\u671f", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "\u30bf\u30a4\u4ecf\u6559\u66a6" }, { "calendarname.gregorian", @@ -122,154 +222,29 @@ { "field.zone", "\u30bf\u30a4\u30e0\u30be\u30fc\u30f3" }, { "islamic.AmPmMarkers", - new String[] { - "\u5348\u524d", - "\u5348\u5f8c", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "GGGGy\u5e74M\u6708d\u65e5EEEE", - "GGGGy\u5e74M\u6708d\u65e5", - "GGGGy/MM/dd", - "GGGGy/MM/dd", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "\u65e5", - "\u6708", - "\u706b", - "\u6c34", - "\u6728", - "\u91d1", - "\u571f", - } - }, + sharedDayNarrows }, { "islamic.DayNames", - new String[] { - "\u65e5\u66dc\u65e5", - "\u6708\u66dc\u65e5", - "\u706b\u66dc\u65e5", - "\u6c34\u66dc\u65e5", - "\u6728\u66dc\u65e5", - "\u91d1\u66dc\u65e5", - "\u571f\u66dc\u65e5", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "\u65e5", - "\u6708", - "\u706b", - "\u6c34", - "\u6728", - "\u91d1", - "\u571f", - } - }, - { "islamic.Eras", - new String[] { - "", - "AH", - } - }, + sharedDayNarrows }, { "islamic.MonthAbbreviations", - new String[] { - "\u30e0\u30cf\u30c3\u30e9\u30e0", - "\u30b5\u30d5\u30a2\u30eb", - "\u30e9\u30d3\u30fc\u30fb\u30a6\u30eb\u30fb\u30a2\u30a6\u30ef\u30eb", - "\u30e9\u30d3\u30fc\u30fb\u30a6\u30c3\u30fb\u30b5\u30fc\u30cb\u30fc", - "\u30b8\u30e5\u30de\u30fc\u30c0\u30eb\u30fb\u30a2\u30a6\u30ef\u30eb", - "\u30b8\u30e5\u30de\u30fc\u30c0\u30c3\u30b5\u30fc\u30cb\u30fc", - "\u30e9\u30b8\u30e3\u30d6", - "\u30b7\u30e3\u30a2\u30d0\u30fc\u30f3", - "\u30e9\u30de\u30c0\u30fc\u30f3", - "\u30b7\u30e3\u30a6\u30ef\u30fc\u30eb", - "\u30ba\u30eb\u30fb\u30ab\u30a4\u30c0", - "\u30ba\u30eb\u30fb\u30d2\u30c3\u30b8\u30e3", - "", - } - }, + sharedMonthNames }, { "islamic.MonthNames", - new String[] { - "\u30e0\u30cf\u30c3\u30e9\u30e0", - "\u30b5\u30d5\u30a2\u30eb", - "\u30e9\u30d3\u30fc\u30fb\u30a6\u30eb\u30fb\u30a2\u30a6\u30ef\u30eb", - "\u30e9\u30d3\u30fc\u30fb\u30a6\u30c3\u30fb\u30b5\u30fc\u30cb\u30fc", - "\u30b8\u30e5\u30de\u30fc\u30c0\u30eb\u30fb\u30a2\u30a6\u30ef\u30eb", - "\u30b8\u30e5\u30de\u30fc\u30c0\u30c3\u30b5\u30fc\u30cb\u30fc", - "\u30e9\u30b8\u30e3\u30d6", - "\u30b7\u30e3\u30a2\u30d0\u30fc\u30f3", - "\u30e9\u30de\u30c0\u30fc\u30f3", - "\u30b7\u30e3\u30a6\u30ef\u30fc\u30eb", - "\u30ba\u30eb\u30fb\u30ab\u30a4\u30c0", - "\u30ba\u30eb\u30fb\u30d2\u30c3\u30b8\u30e3", - "", - } - }, + sharedMonthNames }, { "islamic.QuarterAbbreviations", - new String[] { - "Q1", - "Q2", - "Q3", - "Q4", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "\u7b2c1\u56db\u534a\u671f", - "\u7b2c2\u56db\u534a\u671f", - "\u7b2c3\u56db\u534a\u671f", - "\u7b2c4\u56db\u534a\u671f", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, + sharedQuarterNames }, { "islamic.TimePatterns", - new String[] { - "H\u6642mm\u5206ss\u79d2 zzzz", - "H:mm:ss z", - "H:mm:ss", - "H:mm", - } - }, + sharedTimePatterns }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "\u5348\u524d", - "\u5348\u5f8c", - } - }, - { "islamic.long.Eras", - new String[] { - "", - "AH", - } - }, + sharedAmPmMarkers }, { "islamic.narrow.AmPmMarkers", - new String[] { - "\u5348\u524d", - "\u5348\u5f8c", - } - }, - { "islamic.narrow.Eras", - new String[] { - "", - "AH", - } - }, - { "islamic.short.Eras", - new String[] { - "", - "AH", - } - }, + sharedAmPmMarkers }, { "java.time.buddhist.DatePatterns", new String[] { "GGGGy\u5e74M\u6708d\u65e5EEEE", @@ -291,13 +266,7 @@ } }, { "java.time.islamic.DatePatterns", - new String[] { - "Gy\u5e74M\u6708d\u65e5EEEE", - "Gy\u5e74M\u6708d\u65e5", - "Gy/MM/dd", - "Gy/MM/dd", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", new String[] { "Gy'\u5e74'M'\u6708'd'\u65e5'", @@ -307,193 +276,47 @@ } }, { "java.time.japanese.long.Eras", - new String[] { - "\u897f\u66a6", - "\u660e\u6cbb", - "\u5927\u6b63", - "\u662d\u548c", - "\u5e73\u6210", - } - }, + sharedJavaTimeLongEras }, { "java.time.japanese.short.Eras", - new String[] { - "\u897f\u66a6", - "\u660e\u6cbb", - "\u5927\u6b63", - "\u662d\u548c", - "\u5e73\u6210", - } - }, + sharedJavaTimeLongEras }, { "java.time.long.Eras", - javatimelongEras }, + sharedJavaTimeShortEras }, { "java.time.roc.DatePatterns", - new String[] { - "Gy\u5e74M\u6708d\u65e5EEEE", - "Gy\u5e74M\u6708d\u65e5", - "Gy/MM/dd", - "Gy/MM/dd", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", - javatimelongEras }, + sharedJavaTimeShortEras }, { "roc.AmPmMarkers", - new String[] { - "\u5348\u524d", - "\u5348\u5f8c", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "GGGGy\u5e74M\u6708d\u65e5EEEE", - "GGGGy\u5e74M\u6708d\u65e5", - "GGGGy/MM/dd", - "GGGGy/MM/dd", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "\u65e5", - "\u6708", - "\u706b", - "\u6c34", - "\u6728", - "\u91d1", - "\u571f", - } - }, + sharedDayNarrows }, { "roc.DayNames", - new String[] { - "\u65e5\u66dc\u65e5", - "\u6708\u66dc\u65e5", - "\u706b\u66dc\u65e5", - "\u6c34\u66dc\u65e5", - "\u6728\u66dc\u65e5", - "\u91d1\u66dc\u65e5", - "\u571f\u66dc\u65e5", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "\u65e5", - "\u6708", - "\u706b", - "\u6c34", - "\u6728", - "\u91d1", - "\u571f", - } - }, + sharedDayNarrows }, { "roc.Eras", - new String[] { - "\u6c11\u56fd\u524d", - "\u6c11\u56fd", - } - }, + sharedEras }, { "roc.MonthAbbreviations", - new String[] { - "1\u6708", - "2\u6708", - "3\u6708", - "4\u6708", - "5\u6708", - "6\u6708", - "7\u6708", - "8\u6708", - "9\u6708", - "10\u6708", - "11\u6708", - "12\u6708", - "", - } - }, + sharedMonthAbbreviations }, { "roc.MonthNames", - new String[] { - "1\u6708", - "2\u6708", - "3\u6708", - "4\u6708", - "5\u6708", - "6\u6708", - "7\u6708", - "8\u6708", - "9\u6708", - "10\u6708", - "11\u6708", - "12\u6708", - "", - } - }, - { "roc.MonthNarrows", - new String[] { - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "10", - "11", - "12", - "", - } - }, + sharedMonthAbbreviations }, { "roc.QuarterAbbreviations", - new String[] { - "Q1", - "Q2", - "Q3", - "Q4", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "\u7b2c1\u56db\u534a\u671f", - "\u7b2c2\u56db\u534a\u671f", - "\u7b2c3\u56db\u534a\u671f", - "\u7b2c4\u56db\u534a\u671f", - } - }, + sharedQuarterNames }, { "roc.TimePatterns", - new String[] { - "H\u6642mm\u5206ss\u79d2 zzzz", - "H:mm:ss z", - "H:mm:ss", - "H:mm", - } - }, + sharedTimePatterns }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "\u5348\u524d", - "\u5348\u5f8c", - } - }, + sharedAmPmMarkers }, { "roc.long.Eras", - new String[] { - "\u6c11\u56fd\u524d", - "\u6c11\u56fd", - } - }, + sharedEras }, { "roc.narrow.AmPmMarkers", - new String[] { - "\u5348\u524d", - "\u5348\u5f8c", - } - }, + sharedAmPmMarkers }, { "roc.narrow.Eras", - new String[] { - "\u6c11\u56fd\u524d", - "\u6c11\u56fd", - } - }, + sharedEras }, { "roc.short.Eras", - new String[] { - "\u6c11\u56fd\u524d", - "\u6c11\u56fd", - } - }, + sharedEras }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ko.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ko.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ko.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,31 +72,110 @@ public class JavaTimeSupplementary_ko extends OpenListResourceBundle { @Override protected final Object[][] getContents() { - final String[] javatimebuddhistlongEras = { + final String[] sharedQuarterAbbreviations = { + "1\ubd84\uae30", + "2\ubd84\uae30", + "3\ubd84\uae30", + "4\ubd84\uae30", + }; + + final String[] sharedQuarterNames = { + "\uc81c 1/4\ubd84\uae30", + "\uc81c 2/4\ubd84\uae30", + "\uc81c 3/4\ubd84\uae30", + "\uc81c 4/4\ubd84\uae30", + }; + + final String[] sharedAmPmMarkers = { + "\uc624\uc804", + "\uc624\ud6c4", + }; + + final String[] sharedDatePatterns = { + "GGGG y\ub144 M\uc6d4 d\uc77c EEEE", + "GGGG y\ub144 M\uc6d4 d\uc77c", + "GGGG y. M. d.", + "GGGG y. M. d.", + }; + + final String[] sharedDayNarrows = { + "\uc77c", + "\uc6d4", + "\ud654", + "\uc218", + "\ubaa9", + "\uae08", + "\ud1a0", + }; + + final String[] sharedDayNames = { + "\uc77c\uc694\uc77c", + "\uc6d4\uc694\uc77c", + "\ud654\uc694\uc77c", + "\uc218\uc694\uc77c", + "\ubaa9\uc694\uc77c", + "\uae08\uc694\uc77c", + "\ud1a0\uc694\uc77c", + }; + + final String[] sharedTimePatterns = { + "a h\uc2dc m\ubd84 s\ucd08 zzzz", + "a h\uc2dc m\ubd84 s\ucd08 z", + "a h:mm:ss", + "a h:mm", + }; + + final String[] sharedJavaTimeDatePatterns = { + "G y\ub144 M\uc6d4 d\uc77c EEEE", + "G y\ub144 M\uc6d4 d\uc77c", + "G y. M. d.", + "G y. M. d.", + }; + + final String[] sharedJavaTimeLongEras = { "BC", "\ubd88\uae30", }; - final String[] javatimelongEras = { + + final String[] sharedJavaTimeShortEras = { + "\uc11c\uae30", + "\uba54\uc774\uc9c0", + "\ub2e4\uc774\uc1fc", + "\uc1fc\uc640", + "\ud5e4\uc774\uc138\uc774", + }; + + final String[] sharedJavaTimeShortEras2 = { "\uae30\uc6d0\uc804", "\uc11c\uae30", }; + + final String[] sharedEras = { + "\uc911\ud654\ubbfc\uad6d\uc804", + "\uc911\ud654\ubbfc\uad6d", + }; + + final String[] sharedMonthNames = { + "1\uc6d4", + "2\uc6d4", + "3\uc6d4", + "4\uc6d4", + "5\uc6d4", + "6\uc6d4", + "7\uc6d4", + "8\uc6d4", + "9\uc6d4", + "10\uc6d4", + "11\uc6d4", + "12\uc6d4", + "", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "1\ubd84\uae30", - "2\ubd84\uae30", - "3\ubd84\uae30", - "4\ubd84\uae30", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "\uc81c 1/4\ubd84\uae30", - "\uc81c 2/4\ubd84\uae30", - "\uc81c 3/4\ubd84\uae30", - "\uc81c 4/4\ubd84\uae30", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "\ubd88\uad50\ub825" }, { "calendarname.gregorian", @@ -132,58 +211,15 @@ { "field.zone", "\uc2dc\uac04\ub300" }, { "islamic.AmPmMarkers", - new String[] { - "\uc624\uc804", - "\uc624\ud6c4", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "GGGG y\ub144 M\uc6d4 d\uc77c EEEE", - "GGGG y\ub144 M\uc6d4 d\uc77c", - "GGGG y. M. d.", - "GGGG y. M. d.", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "\uc77c", - "\uc6d4", - "\ud654", - "\uc218", - "\ubaa9", - "\uae08", - "\ud1a0", - } - }, + sharedDayNarrows }, { "islamic.DayNames", - new String[] { - "\uc77c\uc694\uc77c", - "\uc6d4\uc694\uc77c", - "\ud654\uc694\uc77c", - "\uc218\uc694\uc77c", - "\ubaa9\uc694\uc77c", - "\uae08\uc694\uc77c", - "\ud1a0\uc694\uc77c", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "\uc77c", - "\uc6d4", - "\ud654", - "\uc218", - "\ubaa9", - "\uae08", - "\ud1a0", - } - }, - { "islamic.Eras", - new String[] { - "", - "AH", - } - }, + sharedDayNarrows }, { "islamic.MonthNames", new String[] { "\ubb34\ud558\ub78c", @@ -202,81 +238,25 @@ } }, { "islamic.QuarterAbbreviations", - new String[] { - "1\ubd84\uae30", - "2\ubd84\uae30", - "3\ubd84\uae30", - "4\ubd84\uae30", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "\uc81c 1/4\ubd84\uae30", - "\uc81c 2/4\ubd84\uae30", - "\uc81c 3/4\ubd84\uae30", - "\uc81c 4/4\ubd84\uae30", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, + sharedQuarterNames }, { "islamic.TimePatterns", - new String[] { - "a h\uc2dc m\ubd84 s\ucd08 zzzz", - "a h\uc2dc m\ubd84 s\ucd08 z", - "a h:mm:ss", - "a h:mm", - } - }, - { "islamic.long.Eras", - new String[] { - "", - "AH", - } - }, + sharedTimePatterns }, { "islamic.narrow.AmPmMarkers", new String[] { "AM", "PM", } }, - { "islamic.narrow.Eras", - new String[] { - "", - "AH", - } - }, - { "islamic.short.Eras", - new String[] { - "", - "AH", - } - }, { "java.time.buddhist.DatePatterns", - new String[] { - "G y\ub144 M\uc6d4 d\uc77c EEEE", - "G y\ub144 M\uc6d4 d\uc77c", - "G y. M. d.", - "G y. M. d.", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.buddhist.long.Eras", - javatimebuddhistlongEras }, + sharedJavaTimeLongEras }, { "java.time.buddhist.short.Eras", - javatimebuddhistlongEras }, + sharedJavaTimeLongEras }, { "java.time.islamic.DatePatterns", - new String[] { - "G y\ub144 M\uc6d4 d\uc77c EEEE", - "G y\ub144 M\uc6d4 d\uc77c", - "G y. M. d.", - "G y. M. d.", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", new String[] { "G y\ub144 M\uc6d4 d\uc77c EEEE", @@ -286,187 +266,45 @@ } }, { "java.time.japanese.long.Eras", - new String[] { - "\uc11c\uae30", - "\uba54\uc774\uc9c0", - "\ub2e4\uc774\uc1fc", - "\uc1fc\uc640", - "\ud5e4\uc774\uc138\uc774", - } - }, + sharedJavaTimeShortEras }, { "java.time.japanese.short.Eras", - new String[] { - "\uc11c\uae30", - "\uba54\uc774\uc9c0", - "\ub2e4\uc774\uc1fc", - "\uc1fc\uc640", - "\ud5e4\uc774\uc138\uc774", - } - }, + sharedJavaTimeShortEras }, { "java.time.long.Eras", - javatimelongEras }, + sharedJavaTimeShortEras2 }, { "java.time.roc.DatePatterns", - new String[] { - "G y\ub144 M\uc6d4 d\uc77c EEEE", - "G y\ub144 M\uc6d4 d\uc77c", - "G y. M. d.", - "G y. M. d.", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", - javatimelongEras }, + sharedJavaTimeShortEras2 }, { "roc.AmPmMarkers", - new String[] { - "\uc624\uc804", - "\uc624\ud6c4", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "GGGG y\ub144 M\uc6d4 d\uc77c EEEE", - "GGGG y\ub144 M\uc6d4 d\uc77c", - "GGGG y. M. d.", - "GGGG y. M. d.", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "\uc77c", - "\uc6d4", - "\ud654", - "\uc218", - "\ubaa9", - "\uae08", - "\ud1a0", - } - }, + sharedDayNarrows }, { "roc.DayNames", - new String[] { - "\uc77c\uc694\uc77c", - "\uc6d4\uc694\uc77c", - "\ud654\uc694\uc77c", - "\uc218\uc694\uc77c", - "\ubaa9\uc694\uc77c", - "\uae08\uc694\uc77c", - "\ud1a0\uc694\uc77c", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "\uc77c", - "\uc6d4", - "\ud654", - "\uc218", - "\ubaa9", - "\uae08", - "\ud1a0", - } - }, + sharedDayNarrows }, { "roc.Eras", - new String[] { - "\uc911\ud654\ubbfc\uad6d\uc804", - "\uc911\ud654\ubbfc\uad6d", - } - }, + sharedEras }, { "roc.MonthAbbreviations", - new String[] { - "1\uc6d4", - "2\uc6d4", - "3\uc6d4", - "4\uc6d4", - "5\uc6d4", - "6\uc6d4", - "7\uc6d4", - "8\uc6d4", - "9\uc6d4", - "10\uc6d4", - "11\uc6d4", - "12\uc6d4", - "", - } - }, + sharedMonthNames }, { "roc.MonthNames", - new String[] { - "1\uc6d4", - "2\uc6d4", - "3\uc6d4", - "4\uc6d4", - "5\uc6d4", - "6\uc6d4", - "7\uc6d4", - "8\uc6d4", - "9\uc6d4", - "10\uc6d4", - "11\uc6d4", - "12\uc6d4", - "", - } - }, + sharedMonthNames }, { "roc.MonthNarrows", - new String[] { - "1\uc6d4", - "2\uc6d4", - "3\uc6d4", - "4\uc6d4", - "5\uc6d4", - "6\uc6d4", - "7\uc6d4", - "8\uc6d4", - "9\uc6d4", - "10\uc6d4", - "11\uc6d4", - "12\uc6d4", - "", - } - }, + sharedMonthNames }, { "roc.QuarterAbbreviations", - new String[] { - "1\ubd84\uae30", - "2\ubd84\uae30", - "3\ubd84\uae30", - "4\ubd84\uae30", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "\uc81c 1/4\ubd84\uae30", - "\uc81c 2/4\ubd84\uae30", - "\uc81c 3/4\ubd84\uae30", - "\uc81c 4/4\ubd84\uae30", - } - }, + sharedQuarterNames }, { "roc.TimePatterns", - new String[] { - "a h\uc2dc m\ubd84 s\ucd08 zzzz", - "a h\uc2dc m\ubd84 s\ucd08 z", - "a h:mm:ss", - "a h:mm", - } - }, + sharedTimePatterns }, { "roc.long.Eras", - new String[] { - "\uc911\ud654\ubbfc\uad6d\uc804", - "\uc911\ud654\ubbfc\uad6d", - } - }, - { "roc.narrow.AmPmMarkers", - new String[] { - "AM", - "PM", - } - }, + sharedEras }, { "roc.narrow.Eras", - new String[] { - "\uc911\ud654\ubbfc\uad6d\uc804", - "\uc911\ud654\ubbfc\uad6d", - } - }, + sharedEras }, { "roc.short.Eras", - new String[] { - "\uc911\ud654\ubbfc\uad6d\uc804", - "\uc911\ud654\ubbfc\uad6d", - } - }, + sharedEras }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_lt.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_lt.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_lt.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,23 +72,84 @@ public class JavaTimeSupplementary_lt extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "I k.", + "II k.", + "III k.", + "IV k.", + }; + + final String[] sharedQuarterNames = { + "I ketvirtis", + "II ketvirtis", + "III ketvirtis", + "IV ketvirtis", + }; + + final String[] sharedAmPmMarkers = { + "prie\u0161piet", + "popiet", + }; + + final String[] sharedDatePatterns = { + "y MMMM d GGGG, EEEE", + "y MMMM d GGGG", + "y MMM d GGGG", + "y-MM-dd GGGG", + }; + + final String[] sharedDayAbbreviations = { + "sk", + "pr", + "an", + "tr", + "kt", + "pn", + "\u0161t", + }; + + final String[] sharedDayNames = { + "sekmadienis", + "pirmadienis", + "antradienis", + "tre\u010diadienis", + "ketvirtadienis", + "penktadienis", + "\u0161e\u0161tadienis", + }; + + final String[] sharedDayNarrows = { + "S", + "P", + "A", + "T", + "K", + "P", + "\u0160", + }; + + final String[] sharedNarrowAmPmMarkers = { + "pr. p.", + "pop.", + }; + + final String[] sharedJavaTimeDatePatterns = { + "y MMMM d G, EEEE", + "y MMMM d G", + "y MMM d G", + "y-MM-dd G", + }; + + final String[] sharedEras = { + "Prie\u0161 R.O.C.", + "R.O.C.", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "I k.", - "II k.", - "III k.", - "IV k.", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "I ketvirtis", - "II ketvirtis", - "III ketvirtis", - "IV ketvirtis", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "budist\u0173 kalendorius" }, { "calendarname.gregorian", @@ -126,134 +187,25 @@ { "field.zone", "laiko juosta" }, { "islamic.AmPmMarkers", - new String[] { - "prie\u0161piet", - "popiet", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "y MMMM d GGGG, EEEE", - "y MMMM d GGGG", - "y MMM d GGGG", - "y-MM-dd GGGG", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "sk", - "pr", - "an", - "tr", - "kt", - "pn", - "\u0161t", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "sekmadienis", - "pirmadienis", - "antradienis", - "tre\u010diadienis", - "ketvirtadienis", - "penktadienis", - "\u0161e\u0161tadienis", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "S", - "P", - "A", - "T", - "K", - "P", - "\u0160", - } - }, - { "islamic.Eras", - new String[] { - "", - "AH", - } - }, + sharedDayNarrows }, { "islamic.QuarterAbbreviations", - new String[] { - "I k.", - "II k.", - "III k.", - "IV k.", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "I ketvirtis", - "II ketvirtis", - "III ketvirtis", - "IV ketvirtis", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, - { "islamic.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedQuarterNames }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "prie\u0161piet", - "popiet", - } - }, - { "islamic.long.Eras", - new String[] { - "", - "AH", - } - }, + sharedAmPmMarkers }, { "islamic.narrow.AmPmMarkers", - new String[] { - "pr. p.", - "pop.", - } - }, - { "islamic.narrow.Eras", - new String[] { - "", - "AH", - } - }, - { "islamic.short.Eras", - new String[] { - "", - "AH", - } - }, + sharedNarrowAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "y MMMM d G, EEEE", - "y MMMM d G", - "y MMM d G", - "y-MM-dd G", - } - }, - { "java.time.buddhist.long.Eras", - new String[] { - "BC", - "BE", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.buddhist.short.Eras", new String[] { "BC", @@ -261,21 +213,9 @@ } }, { "java.time.islamic.DatePatterns", - new String[] { - "y MMMM d G, EEEE", - "y MMMM d G", - "y MMM d G", - "y-MM-dd G", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "y MMMM d G, EEEE", - "y MMMM d G", - "y MMM d G", - "y-MM-dd G", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.long.Eras", new String[] { "po Kristaus", @@ -301,13 +241,7 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "y MMMM d G, EEEE", - "y MMMM d G", - "y MMM d G", - "y-MM-dd G", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "pr.Kr.", @@ -315,58 +249,17 @@ } }, { "roc.AmPmMarkers", - new String[] { - "prie\u0161piet", - "popiet", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "y MMMM d GGGG, EEEE", - "y MMMM d GGGG", - "y MMM d GGGG", - "y-MM-dd GGGG", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "sk", - "pr", - "an", - "tr", - "kt", - "pn", - "\u0161t", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "sekmadienis", - "pirmadienis", - "antradienis", - "tre\u010diadienis", - "ketvirtadienis", - "penktadienis", - "\u0161e\u0161tadienis", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "S", - "P", - "A", - "T", - "K", - "P", - "\u0160", - } - }, + sharedDayNarrows }, { "roc.Eras", - new String[] { - "Prie\u0161 R.O.C.", - "R.O.C.", - } - }, + sharedEras }, { "roc.MonthAbbreviations", new String[] { "saus.", @@ -419,59 +312,19 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "I k.", - "II k.", - "III k.", - "IV k.", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "I ketvirtis", - "II ketvirtis", - "III ketvirtis", - "IV ketvirtis", - } - }, - { "roc.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedQuarterNames }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "prie\u0161piet", - "popiet", - } - }, + sharedAmPmMarkers }, { "roc.long.Eras", - new String[] { - "Prie\u0161 R.O.C.", - "R.O.C.", - } - }, + sharedEras }, { "roc.narrow.AmPmMarkers", - new String[] { - "pr. p.", - "pop.", - } - }, + sharedNarrowAmPmMarkers }, { "roc.narrow.Eras", - new String[] { - "Prie\u0161 R.O.C.", - "R.O.C.", - } - }, + sharedEras }, { "roc.short.Eras", - new String[] { - "Prie\u0161 R.O.C.", - "R.O.C.", - } - }, + sharedEras }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_lv.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_lv.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_lv.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,31 +72,88 @@ public class JavaTimeSupplementary_lv extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "1.\u00a0cet.", + "2.\u00a0cet.", + "3.\u00a0cet.", + "4.\u00a0cet.", + }; + + final String[] sharedQuarterNames = { + "1. ceturksnis", + "2. ceturksnis", + "3. ceturksnis", + "4. ceturksnis", + }; + + final String[] sharedQuarterNarrows = { + "1.", + "2.", + "3.", + "4.", + }; + + final String[] sharedAmPmMarkers = { + "priek\u0161pusdien\u0101", + "p\u0113cpusdien\u0101", + }; + + final String[] sharedDatePatterns = { + "EEEE, y. 'gada' d. MMMM GGGG", + "y. 'gada' d. MMMM GGGG", + "y. 'gada' d. MMM GGGG", + "dd.MM.y G", + }; + + final String[] sharedDayAbbreviations = { + "Sv", + "Pr", + "Ot", + "Tr", + "Ce", + "Pk", + "Se", + }; + + final String[] sharedDayNames = { + "sv\u0113tdiena", + "pirmdiena", + "otrdiena", + "tre\u0161diena", + "ceturtdiena", + "piektdiena", + "sestdiena", + }; + + final String[] sharedDayNarrows = { + "S", + "P", + "O", + "T", + "C", + "P", + "S", + }; + + final String[] sharedNarrowAmPmMarkers = { + "priek\u0161p.", + "p\u0113cp.", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, y. 'gada' d. MMMM G", + "y. 'gada' d. MMMM G", + "y. 'gada' d. MMM G", + "dd.MM.y GGGGG", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "1.\u00a0cet.", - "2.\u00a0cet.", - "3.\u00a0cet.", - "4.\u00a0cet.", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "1. ceturksnis", - "2. ceturksnis", - "3. ceturksnis", - "4. ceturksnis", - } - }, + sharedQuarterNames }, { "QuarterNarrows", - new String[] { - "1.", - "2.", - "3.", - "4.", - } - }, + sharedQuarterNarrows }, { "calendarname.buddhist", "budistu kalend\u0101rs" }, { "calendarname.gregorian", @@ -132,52 +189,15 @@ { "field.zone", "laika josla" }, { "islamic.AmPmMarkers", - new String[] { - "priek\u0161pusdien\u0101", - "p\u0113cpusdien\u0101", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "EEEE, y. 'gada' d. MMMM GGGG", - "y. 'gada' d. MMMM GGGG", - "y. 'gada' d. MMM GGGG", - "dd.MM.y G", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "Sv", - "Pr", - "Ot", - "Tr", - "Ce", - "Pk", - "Se", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "sv\u0113tdiena", - "pirmdiena", - "otrdiena", - "tre\u0161diena", - "ceturtdiena", - "piektdiena", - "sestdiena", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "S", - "P", - "O", - "T", - "C", - "P", - "S", - } - }, + sharedDayNarrows }, { "islamic.MonthNames", new String[] { "muharams", @@ -196,73 +216,21 @@ } }, { "islamic.QuarterAbbreviations", - new String[] { - "1.\u00a0cet.", - "2.\u00a0cet.", - "3.\u00a0cet.", - "4.\u00a0cet.", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "1. ceturksnis", - "2. ceturksnis", - "3. ceturksnis", - "4. ceturksnis", - } - }, + sharedQuarterNames }, { "islamic.QuarterNarrows", - new String[] { - "1.", - "2.", - "3.", - "4.", - } - }, - { "islamic.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedQuarterNarrows }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "priek\u0161p.", - "p\u0113cp.", - } - }, + sharedNarrowAmPmMarkers }, { "islamic.narrow.AmPmMarkers", - new String[] { - "priek\u0161p.", - "p\u0113cp.", - } - }, + sharedNarrowAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE, y. 'gada' d. MMMM G", - "y. 'gada' d. MMMM G", - "y. 'gada' d. MMM G", - "dd.MM.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE, y. 'gada' d. MMMM G", - "y. 'gada' d. MMMM G", - "y. 'gada' d. MMM G", - "dd.MM.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE, y. 'gada' d. MMMM G", - "y. 'gada' d. MMMM G", - "y. 'gada' d. MMM G", - "dd.MM.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.long.Eras", new String[] { "pirms m\u016bsu \u0113ras", @@ -270,13 +238,7 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE, y. 'gada' d. MMMM G", - "y. 'gada' d. MMMM G", - "y. 'gada' d. MMM G", - "dd.MM.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "pm\u0113", @@ -284,52 +246,15 @@ } }, { "roc.AmPmMarkers", - new String[] { - "priek\u0161pusdien\u0101", - "p\u0113cpusdien\u0101", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "EEEE, y. 'gada' d. MMMM GGGG", - "y. 'gada' d. MMMM GGGG", - "y. 'gada' d. MMM GGGG", - "dd.MM.y G", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "Sv", - "Pr", - "Ot", - "Tr", - "Ce", - "Pk", - "Se", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "sv\u0113tdiena", - "pirmdiena", - "otrdiena", - "tre\u0161diena", - "ceturtdiena", - "piektdiena", - "sestdiena", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "S", - "P", - "O", - "T", - "C", - "P", - "S", - } - }, + sharedDayNarrows }, { "roc.MonthAbbreviations", new String[] { "janv.", @@ -382,49 +307,15 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "1.\u00a0cet.", - "2.\u00a0cet.", - "3.\u00a0cet.", - "4.\u00a0cet.", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "1. ceturksnis", - "2. ceturksnis", - "3. ceturksnis", - "4. ceturksnis", - } - }, + sharedQuarterNames }, { "roc.QuarterNarrows", - new String[] { - "1.", - "2.", - "3.", - "4.", - } - }, - { "roc.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedQuarterNarrows }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "priek\u0161p.", - "p\u0113cp.", - } - }, + sharedNarrowAmPmMarkers }, { "roc.narrow.AmPmMarkers", - new String[] { - "priek\u0161p.", - "p\u0113cp.", - } - }, + sharedNarrowAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_mk.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_mk.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_mk.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,23 +72,79 @@ public class JavaTimeSupplementary_mk extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "\u0458\u0430\u043d-\u043c\u0430\u0440", + "\u0430\u043f\u0440-\u0458\u0443\u043d", + "\u0458\u0443\u043b-\u0441\u0435\u043f", + "\u043e\u043a\u0442-\u0434\u0435\u043a", + }; + + final String[] sharedQuarterNames = { + "\u043f\u0440\u0432\u043e \u0442\u0440\u043e\u043c\u0435\u0441\u0435\u0447\u0458\u0435", + "\u0432\u0442\u043e\u0440\u043e \u0442\u0440\u043e\u043c\u0435\u0441\u0435\u0447\u0458\u0435", + "\u0442\u0440\u0435\u0442\u043e \u0442\u0440\u043e\u043c\u0435\u0441\u0435\u0447\u0458\u0435", + "\u0447\u0435\u0442\u0432\u0440\u0442\u043e \u0442\u0440\u043e\u043c\u0435\u0441\u0435\u0447\u0458\u0435", + }; + + final String[] sharedAmPmMarkers = { + "\u043f\u0440\u0435\u0442\u043f\u043b\u0430\u0434\u043d\u0435", + "\u043f\u043e\u043f\u043b\u0430\u0434\u043d\u0435", + }; + + final String[] sharedDatePatterns = { + "EEEE, dd MMMM y '\u0433'. GGGG", + "dd MMMM y '\u0433'. GGGG", + "dd.M.y GGGG", + "dd.M.y G", + }; + + final String[] sharedDayAbbreviations = { + "\u043d\u0435\u0434.", + "\u043f\u043e\u043d.", + "\u0432\u0442.", + "\u0441\u0440\u0435.", + "\u0447\u0435\u0442.", + "\u043f\u0435\u0442.", + "\u0441\u0430\u0431.", + }; + + final String[] sharedDayNames = { + "\u043d\u0435\u0434\u0435\u043b\u0430", + "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a", + "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", + "\u0441\u0440\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0440\u0442\u043e\u043a", + "\u043f\u0435\u0442\u043e\u043a", + "\u0441\u0430\u0431\u043e\u0442\u0430", + }; + + final String[] sharedDayNarrows = { + "\u043d", + "\u043f", + "\u0432", + "\u0441", + "\u0447", + "\u043f", + "\u0441", + }; + + final String[] sharedNarrowAmPmMarkers = { + "\u043f\u0440\u0435\u0442.", + "\u043f\u043e\u043f\u043b.", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, dd MMMM y '\u0433'. G", + "dd MMMM y '\u0433'. G", + "dd.M.y G", + "dd.M.y GGGGG", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "\u0458\u0430\u043d-\u043c\u0430\u0440", - "\u0430\u043f\u0440-\u0458\u0443\u043d", - "\u0458\u0443\u043b-\u0441\u0435\u043f", - "\u043e\u043a\u0442-\u0434\u0435\u043a", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "\u043f\u0440\u0432\u043e \u0442\u0440\u043e\u043c\u0435\u0441\u0435\u0447\u0458\u0435", - "\u0432\u0442\u043e\u0440\u043e \u0442\u0440\u043e\u043c\u0435\u0441\u0435\u0447\u0458\u0435", - "\u0442\u0440\u0435\u0442\u043e \u0442\u0440\u043e\u043c\u0435\u0441\u0435\u0447\u0458\u0435", - "\u0447\u0435\u0442\u0432\u0440\u0442\u043e \u0442\u0440\u043e\u043c\u0435\u0441\u0435\u0447\u0458\u0435", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "\u0411\u0443\u0434\u0438\u0441\u0442\u0438\u0447\u043a\u0438 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440" }, { "calendarname.gregorian", @@ -124,120 +180,29 @@ { "field.zone", "\u0432\u0440\u0435\u043c\u0435\u043d\u0441\u043a\u0430 \u0437\u043e\u043d\u0430" }, { "islamic.AmPmMarkers", - new String[] { - "\u043f\u0440\u0435\u0442\u043f\u043b\u0430\u0434\u043d\u0435", - "\u043f\u043e\u043f\u043b\u0430\u0434\u043d\u0435", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "EEEE, dd MMMM y '\u0433'. GGGG", - "dd MMMM y '\u0433'. GGGG", - "dd.M.y GGGG", - "dd.M.y G", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "\u043d\u0435\u0434.", - "\u043f\u043e\u043d.", - "\u0432\u0442.", - "\u0441\u0440\u0435.", - "\u0447\u0435\u0442.", - "\u043f\u0435\u0442.", - "\u0441\u0430\u0431.", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "\u043d\u0435\u0434\u0435\u043b\u0430", - "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a", - "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", - "\u0441\u0440\u0435\u0434\u0430", - "\u0447\u0435\u0442\u0432\u0440\u0442\u043e\u043a", - "\u043f\u0435\u0442\u043e\u043a", - "\u0441\u0430\u0431\u043e\u0442\u0430", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "\u043d", - "\u043f", - "\u0432", - "\u0441", - "\u0447", - "\u043f", - "\u0441", - } - }, + sharedDayNarrows }, { "islamic.QuarterAbbreviations", - new String[] { - "\u0458\u0430\u043d-\u043c\u0430\u0440", - "\u0430\u043f\u0440-\u0458\u0443\u043d", - "\u0458\u0443\u043b-\u0441\u0435\u043f", - "\u043e\u043a\u0442-\u0434\u0435\u043a", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "\u043f\u0440\u0432\u043e \u0442\u0440\u043e\u043c\u0435\u0441\u0435\u0447\u0458\u0435", - "\u0432\u0442\u043e\u0440\u043e \u0442\u0440\u043e\u043c\u0435\u0441\u0435\u0447\u0458\u0435", - "\u0442\u0440\u0435\u0442\u043e \u0442\u0440\u043e\u043c\u0435\u0441\u0435\u0447\u0458\u0435", - "\u0447\u0435\u0442\u0432\u0440\u0442\u043e \u0442\u0440\u043e\u043c\u0435\u0441\u0435\u0447\u0458\u0435", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, - { "islamic.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedQuarterNames }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "\u043f\u0440\u0435\u0442\u043f\u043b\u0430\u0434\u043d\u0435", - "\u043f\u043e\u043f\u043b\u0430\u0434\u043d\u0435", - } - }, + sharedAmPmMarkers }, { "islamic.narrow.AmPmMarkers", - new String[] { - "\u043f\u0440\u0435\u0442.", - "\u043f\u043e\u043f\u043b.", - } - }, + sharedNarrowAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE, dd MMMM y '\u0433'. G", - "dd MMMM y '\u0433'. G", - "dd.M.y G", - "dd.M.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE, dd MMMM y '\u0433'. G", - "dd MMMM y '\u0433'. G", - "dd.M.y G", - "dd.M.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE, dd MMMM y '\u0433'. G", - "dd MMMM y '\u0433'. G", - "dd.M.y G", - "dd.M.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.long.Eras", new String[] { "\u043f\u0440\u0435\u0434 \u043d\u0430\u0448\u0430\u0442\u0430 \u0435\u0440\u0430", @@ -245,13 +210,7 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE, dd MMMM y '\u0433'. G", - "dd MMMM y '\u0433'. G", - "dd.M.y G", - "dd.M.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "\u043f\u0440.\u043d.\u0435.", @@ -259,52 +218,15 @@ } }, { "roc.AmPmMarkers", - new String[] { - "\u043f\u0440\u0435\u0442\u043f\u043b\u0430\u0434\u043d\u0435", - "\u043f\u043e\u043f\u043b\u0430\u0434\u043d\u0435", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "EEEE, dd MMMM y '\u0433'. GGGG", - "dd MMMM y '\u0433'. GGGG", - "dd.M.y GGGG", - "dd.M.y G", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "\u043d\u0435\u0434.", - "\u043f\u043e\u043d.", - "\u0432\u0442.", - "\u0441\u0440\u0435.", - "\u0447\u0435\u0442.", - "\u043f\u0435\u0442.", - "\u0441\u0430\u0431.", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "\u043d\u0435\u0434\u0435\u043b\u0430", - "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a", - "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", - "\u0441\u0440\u0435\u0434\u0430", - "\u0447\u0435\u0442\u0432\u0440\u0442\u043e\u043a", - "\u043f\u0435\u0442\u043e\u043a", - "\u0441\u0430\u0431\u043e\u0442\u0430", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "\u043d", - "\u043f", - "\u0432", - "\u0441", - "\u0447", - "\u043f", - "\u0441", - } - }, + sharedDayNarrows }, { "roc.MonthAbbreviations", new String[] { "\u0458\u0430\u043d.", @@ -357,41 +279,13 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "\u0458\u0430\u043d-\u043c\u0430\u0440", - "\u0430\u043f\u0440-\u0458\u0443\u043d", - "\u0458\u0443\u043b-\u0441\u0435\u043f", - "\u043e\u043a\u0442-\u0434\u0435\u043a", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "\u043f\u0440\u0432\u043e \u0442\u0440\u043e\u043c\u0435\u0441\u0435\u0447\u0458\u0435", - "\u0432\u0442\u043e\u0440\u043e \u0442\u0440\u043e\u043c\u0435\u0441\u0435\u0447\u0458\u0435", - "\u0442\u0440\u0435\u0442\u043e \u0442\u0440\u043e\u043c\u0435\u0441\u0435\u0447\u0458\u0435", - "\u0447\u0435\u0442\u0432\u0440\u0442\u043e \u0442\u0440\u043e\u043c\u0435\u0441\u0435\u0447\u0458\u0435", - } - }, - { "roc.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedQuarterNames }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "\u043f\u0440\u0435\u0442\u043f\u043b\u0430\u0434\u043d\u0435", - "\u043f\u043e\u043f\u043b\u0430\u0434\u043d\u0435", - } - }, + sharedAmPmMarkers }, { "roc.narrow.AmPmMarkers", - new String[] { - "\u043f\u0440\u0435\u0442.", - "\u043f\u043e\u043f\u043b.", - } - }, + sharedNarrowAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ms.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ms.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ms.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,23 +72,86 @@ public class JavaTimeSupplementary_ms extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "S1", + "S2", + "S3", + "S4", + }; + + final String[] sharedQuarterNames = { + "Suku pertama", + "Suku Ke-2", + "Suku Ke-3", + "Suku Ke-4", + }; + + final String[] sharedAmPmMarkers = { + "PG", + "PTG", + }; + + final String[] sharedDatePatterns = { + "EEEE, d MMMM y GGGG", + "d MMMM y GGGG", + "dd/MM/y GGGG", + "d/MM/y G", + }; + + final String[] sharedDayAbbreviations = { + "Ahd", + "Isn", + "Sel", + "Rab", + "Kha", + "Jum", + "Sab", + }; + + final String[] sharedDayNames = { + "Ahad", + "Isnin", + "Selasa", + "Rabu", + "Khamis", + "Jumaat", + "Sabtu", + }; + + final String[] sharedDayNarrows = { + "A", + "I", + "S", + "R", + "K", + "J", + "S", + }; + + final String[] sharedTimePatterns = { + "h:mm:ss a zzzz", + "h:mm:ss a z", + "h:mm:ss a", + "h:mm a", + }; + + final String[] sharedNarrowAmPmMarkers = { + "a", + "p", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, d MMMM y G", + "d MMMM y G", + "dd/MM/y G", + "d/MM/y GGGGG", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "S1", - "S2", - "S3", - "S4", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "Suku pertama", - "Suku Ke-2", - "Suku Ke-3", - "Suku Ke-4", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "Kalendar Buddha" }, { "calendarname.gregorian", @@ -122,134 +185,27 @@ { "field.zone", "Zon Waktu" }, { "islamic.AmPmMarkers", - new String[] { - "PG", - "PTG", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "EEEE, d MMMM y GGGG", - "d MMMM y GGGG", - "dd/MM/y GGGG", - "d/MM/y G", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "Ahd", - "Isn", - "Sel", - "Rab", - "Kha", - "Jum", - "Sab", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "Ahad", - "Isnin", - "Selasa", - "Rabu", - "Khamis", - "Jumaat", - "Sabtu", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "A", - "I", - "S", - "R", - "K", - "J", - "S", - } - }, - { "islamic.Eras", - new String[] { - "", - "AH", - } - }, + sharedDayNarrows }, { "islamic.QuarterAbbreviations", - new String[] { - "S1", - "S2", - "S3", - "S4", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "Suku pertama", - "Suku Ke-2", - "Suku Ke-3", - "Suku Ke-4", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, + sharedQuarterNames }, { "islamic.TimePatterns", - new String[] { - "h:mm:ss a zzzz", - "h:mm:ss a z", - "h:mm:ss a", - "h:mm a", - } - }, + sharedTimePatterns }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "PG", - "PTG", - } - }, - { "islamic.long.Eras", - new String[] { - "", - "AH", - } - }, + sharedAmPmMarkers }, { "islamic.narrow.AmPmMarkers", - new String[] { - "a", - "p", - } - }, - { "islamic.narrow.Eras", - new String[] { - "", - "AH", - } - }, - { "islamic.short.Eras", - new String[] { - "", - "AH", - } - }, + sharedNarrowAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE, d MMMM y G", - "d MMMM y G", - "dd/MM/y G", - "d/MM/y GGGGG", - } - }, - { "java.time.buddhist.long.Eras", - new String[] { - "BC", - "BE", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.buddhist.short.Eras", new String[] { "BC", @@ -257,21 +213,9 @@ } }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE, d MMMM y G", - "d MMMM y G", - "dd/MM/y G", - "d/MM/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE, d MMMM y G", - "d MMMM y G", - "dd/MM/y G", - "d/MM/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.long.Eras", new String[] { "S.M.", @@ -279,13 +223,7 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE, d MMMM y G", - "d MMMM y G", - "dd/MM/y G", - "d/MM/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "BCE", @@ -293,52 +231,15 @@ } }, { "roc.AmPmMarkers", - new String[] { - "PG", - "PTG", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "EEEE, d MMMM y GGGG", - "d MMMM y GGGG", - "dd/MM/y GGGG", - "d/MM/y G", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "Ahd", - "Isn", - "Sel", - "Rab", - "Kha", - "Jum", - "Sab", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "Ahad", - "Isnin", - "Selasa", - "Rabu", - "Khamis", - "Jumaat", - "Sabtu", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "A", - "I", - "S", - "R", - "K", - "J", - "S", - } - }, + sharedDayNarrows }, { "roc.MonthAbbreviations", new String[] { "Jan", @@ -391,41 +292,15 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "S1", - "S2", - "S3", - "S4", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "Suku pertama", - "Suku Ke-2", - "Suku Ke-3", - "Suku Ke-4", - } - }, + sharedQuarterNames }, { "roc.TimePatterns", - new String[] { - "h:mm:ss a zzzz", - "h:mm:ss a z", - "h:mm:ss a", - "h:mm a", - } - }, + sharedTimePatterns }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "PG", - "PTG", - } - }, + sharedAmPmMarkers }, { "roc.narrow.AmPmMarkers", - new String[] { - "a", - "p", - } - }, + sharedNarrowAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_mt.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_mt.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_mt.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,23 +72,69 @@ public class JavaTimeSupplementary_mt extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "K1", + "K2", + "K3", + "K4", + }; + + final String[] sharedQuarterNames = { + "1el kwart", + "2ni kwart", + "3et kwart", + "4ba\u2019 kwart", + }; + + final String[] sharedDatePatterns = { + "EEEE, d 'ta'\u2019 MMMM y GGGG", + "d 'ta'\u2019 MMMM y GGGG", + "dd MMM y GGGG", + "dd/MM/y G", + }; + + final String[] sharedDayAbbreviations = { + "\u0126ad", + "Tne", + "Tli", + "Erb", + "\u0126am", + "\u0120im", + "Sib", + }; + + final String[] sharedDayNames = { + "Il-\u0126add", + "It-Tnejn", + "It-Tlieta", + "L-Erbg\u0127a", + "Il-\u0126amis", + "Il-\u0120img\u0127a", + "Is-Sibt", + }; + + final String[] sharedDayNarrows = { + "\u0126", + "T", + "T", + "E", + "\u0126", + "\u0120", + "S", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, d 'ta'\u2019 MMMM y G", + "d 'ta'\u2019 MMMM y G", + "dd MMM y G", + "dd/MM/y GGGGG", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "K1", - "K2", - "K3", - "K4", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "1el kwart", - "2ni kwart", - "3et kwart", - "4ba\u2019 kwart", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "Kalendarju Buddist" }, { "calendarname.gregorian", @@ -126,94 +172,23 @@ } }, { "islamic.DatePatterns", - new String[] { - "EEEE, d 'ta'\u2019 MMMM y GGGG", - "d 'ta'\u2019 MMMM y GGGG", - "dd MMM y GGGG", - "dd/MM/y G", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "\u0126ad", - "Tne", - "Tli", - "Erb", - "\u0126am", - "\u0120im", - "Sib", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "Il-\u0126add", - "It-Tnejn", - "It-Tlieta", - "L-Erbg\u0127a", - "Il-\u0126amis", - "Il-\u0120img\u0127a", - "Is-Sibt", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "\u0126", - "T", - "T", - "E", - "\u0126", - "\u0120", - "S", - } - }, + sharedDayNarrows }, { "islamic.QuarterAbbreviations", - new String[] { - "K1", - "K2", - "K3", - "K4", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "1el kwart", - "2ni kwart", - "3et kwart", - "4ba\u2019 kwart", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, + sharedQuarterNames }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE, d 'ta'\u2019 MMMM y G", - "d 'ta'\u2019 MMMM y G", - "dd MMM y G", - "dd/MM/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE, d 'ta'\u2019 MMMM y G", - "d 'ta'\u2019 MMMM y G", - "dd MMM y G", - "dd/MM/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE, d 'ta'\u2019 MMMM y G", - "d 'ta'\u2019 MMMM y G", - "dd MMM y G", - "dd/MM/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.long.Eras", new String[] { "Qabel Kristu", @@ -221,66 +196,21 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE, d 'ta'\u2019 MMMM y G", - "d 'ta'\u2019 MMMM y G", - "dd MMM y G", - "dd/MM/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "QK", "WK", } }, - { "roc.AmPmMarkers", - new String[] { - "AM", - "PM", - } - }, { "roc.DatePatterns", - new String[] { - "EEEE, d 'ta'\u2019 MMMM y GGGG", - "d 'ta'\u2019 MMMM y GGGG", - "dd MMM y GGGG", - "dd/MM/y G", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "\u0126ad", - "Tne", - "Tli", - "Erb", - "\u0126am", - "\u0120im", - "Sib", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "Il-\u0126add", - "It-Tnejn", - "It-Tlieta", - "L-Erbg\u0127a", - "Il-\u0126amis", - "Il-\u0120img\u0127a", - "Is-Sibt", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "\u0126", - "T", - "T", - "E", - "\u0126", - "\u0120", - "S", - } - }, + sharedDayNarrows }, { "roc.MonthAbbreviations", new String[] { "Jan", @@ -333,21 +263,9 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "K1", - "K2", - "K3", - "K4", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "1el kwart", - "2ni kwart", - "3et kwart", - "4ba\u2019 kwart", - } - }, + sharedQuarterNames }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_nl.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_nl.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_nl.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,23 +72,84 @@ public class JavaTimeSupplementary_nl extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "K1", + "K2", + "K3", + "K4", + }; + + final String[] sharedQuarterNames = { + "1e kwartaal", + "2e kwartaal", + "3e kwartaal", + "4e kwartaal", + }; + + final String[] sharedAmPmMarkers = { + "a.m.", + "p.m.", + }; + + final String[] sharedDatePatterns = { + "EEEE d MMMM y GGGG", + "d MMMM y GGGG", + "d MMM y GGGG", + "dd-MM-yy G", + }; + + final String[] sharedDayAbbreviations = { + "zo", + "ma", + "di", + "wo", + "do", + "vr", + "za", + }; + + final String[] sharedDayNames = { + "zondag", + "maandag", + "dinsdag", + "woensdag", + "donderdag", + "vrijdag", + "zaterdag", + }; + + final String[] sharedDayNarrows = { + "Z", + "M", + "D", + "W", + "D", + "V", + "Z", + }; + + final String[] sharedEras = { + "", + "Sa\u02bbna Hizjria", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE d MMMM y G", + "d MMMM y G", + "d MMM y G", + "dd-MM-yy GGGGG", + }; + + final String[] sharedShortEras = { + "voor R.O.C.", + "Minguo", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "K1", - "K2", - "K3", - "K4", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "1e kwartaal", - "2e kwartaal", - "3e kwartaal", - "4e kwartaal", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "Boeddhistische kalender" }, { "calendarname.gregorian", @@ -126,58 +187,17 @@ { "field.zone", "tijdzone" }, { "islamic.AmPmMarkers", - new String[] { - "a.m.", - "p.m.", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "EEEE d MMMM y GGGG", - "d MMMM y GGGG", - "d MMM y GGGG", - "dd-MM-yy G", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "zo", - "ma", - "di", - "wo", - "do", - "vr", - "za", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "zondag", - "maandag", - "dinsdag", - "woensdag", - "donderdag", - "vrijdag", - "zaterdag", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "Z", - "M", - "D", - "W", - "D", - "V", - "Z", - } - }, + sharedDayNarrows }, { "islamic.Eras", - new String[] { - "", - "Sa\u02bbna Hizjria", - } - }, + sharedEras }, { "islamic.MonthAbbreviations", new String[] { "Moeh.", @@ -213,81 +233,21 @@ } }, { "islamic.QuarterAbbreviations", - new String[] { - "K1", - "K2", - "K3", - "K4", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "1e kwartaal", - "2e kwartaal", - "3e kwartaal", - "4e kwartaal", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, - { "islamic.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedQuarterNames }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "a.m.", - "p.m.", - } - }, + sharedAmPmMarkers }, { "islamic.long.Eras", - new String[] { - "", - "Sa\u02bbna Hizjria", - } - }, + sharedEras }, { "islamic.narrow.AmPmMarkers", - new String[] { - "a.m.", - "p.m.", - } - }, + sharedAmPmMarkers }, { "islamic.narrow.Eras", - new String[] { - "", - "Sa\u02bbna Hizjria", - } - }, + sharedEras }, { "islamic.short.Eras", - new String[] { - "", - "Sa\u02bbna Hizjria", - } - }, + sharedEras }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "d MMMM y G", - "d MMM y G", - "dd-MM-yy GGGGG", - } - }, - { "java.time.buddhist.long.Eras", - new String[] { - "BC", - "BE", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.buddhist.short.Eras", new String[] { "BC", @@ -295,21 +255,9 @@ } }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "d MMMM y G", - "d MMM y G", - "dd-MM-yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "d MMMM y G", - "d MMM y G", - "dd-MM-yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.long.Eras", new String[] { "na Christus", @@ -335,13 +283,7 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "d MMMM y G", - "d MMM y G", - "dd-MM-yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "v. Chr.", @@ -349,58 +291,17 @@ } }, { "roc.AmPmMarkers", - new String[] { - "a.m.", - "p.m.", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "EEEE d MMMM y GGGG", - "d MMMM y GGGG", - "d MMM y GGGG", - "dd-MM-yy G", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "zo", - "ma", - "di", - "wo", - "do", - "vr", - "za", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "zondag", - "maandag", - "dinsdag", - "woensdag", - "donderdag", - "vrijdag", - "zaterdag", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "Z", - "M", - "D", - "W", - "D", - "V", - "Z", - } - }, + sharedDayNarrows }, { "roc.Eras", - new String[] { - "voor R.O.C.", - "Minguo", - } - }, + sharedShortEras }, { "roc.MonthAbbreviations", new String[] { "jan.", @@ -453,59 +354,19 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "K1", - "K2", - "K3", - "K4", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "1e kwartaal", - "2e kwartaal", - "3e kwartaal", - "4e kwartaal", - } - }, - { "roc.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedQuarterNames }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "a.m.", - "p.m.", - } - }, + sharedAmPmMarkers }, { "roc.long.Eras", - new String[] { - "voor R.O.C.", - "Minguo", - } - }, + sharedShortEras }, { "roc.narrow.AmPmMarkers", - new String[] { - "a.m.", - "p.m.", - } - }, + sharedAmPmMarkers }, { "roc.narrow.Eras", - new String[] { - "voor R.O.C.", - "Minguo", - } - }, + sharedShortEras }, { "roc.short.Eras", - new String[] { - "voor R.O.C.", - "Minguo", - } - }, + sharedShortEras }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_nl_BE.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_nl_BE.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_nl_BE.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. * 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,7 @@ /* * COPYRIGHT AND PERMISSION NOTICE * - * Copyright (C) 1991-2015 Unicode, Inc. All rights reserved. + * Copyright (C) 1991-2016 Unicode, Inc. All rights reserved. * Distributed under the Terms of Use in * http://www.unicode.org/copyright.html. * @@ -72,55 +72,33 @@ public class JavaTimeSupplementary_nl_BE extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedDatePatterns = { + "EEEE d MMMM y GGGG", + "d MMMM y GGGG", + "d MMM y GGGG", + "d/MM/yy G", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE d MMMM y G", + "d MMMM y G", + "d MMM y G", + "d/MM/yy GGGGG", + }; + return new Object[][] { { "islamic.DatePatterns", - new String[] { - "EEEE d MMMM y GGGG", - "d MMMM y GGGG", - "d MMM y GGGG", - "d/MM/yy G", - } - }, + sharedDatePatterns }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "d MMMM y G", - "d MMM y G", - "d/MM/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "d MMMM y G", - "d MMM y G", - "d/MM/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "d MMMM y G", - "d MMM y G", - "d/MM/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "d MMMM y G", - "d MMM y G", - "d/MM/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "roc.DatePatterns", - new String[] { - "EEEE d MMMM y GGGG", - "d MMMM y GGGG", - "d MMM y GGGG", - "d/MM/yy G", - } - }, + sharedDatePatterns }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_no.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_no.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_no.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,31 +72,100 @@ public class JavaTimeSupplementary_no extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "K1", + "K2", + "K3", + "K4", + }; + + final String[] sharedQuarterNames = { + "1. kvartal", + "2. kvartal", + "3. kvartal", + "4. kvartal", + }; + + final String[] sharedQuarterNarrows = { + "1.", + "2.", + "3.", + "4.", + }; + + final String[] sharedAmPmMarkers = { + "a.m.", + "p.m.", + }; + + final String[] sharedDatePatterns = { + "EEEE d. MMMM y GGGG", + "d. MMMM y GGGG", + "d. MMM y GGGG", + "d.M. y GGGG", + }; + + final String[] sharedDayAbbreviations = { + "s\u00f8n.", + "man.", + "tir.", + "ons.", + "tor.", + "fre.", + "l\u00f8r.", + }; + + final String[] sharedDayNames = { + "s\u00f8ndag", + "mandag", + "tirsdag", + "onsdag", + "torsdag", + "fredag", + "l\u00f8rdag", + }; + + final String[] sharedDayNarrows = { + "S", + "M", + "T", + "O", + "T", + "F", + "L", + }; + + final String[] sharedTimePatterns = { + "HH.mm.ss zzzz", + "HH.mm.ss z", + "HH.mm.ss", + "HH.mm", + }; + + final String[] sharedNarrowAmPmMarkers = { + "a", + "p", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE d. MMMM y G", + "d. MMMM y G", + "d. MMM y G", + "d.M. y G", + }; + + final String[] sharedEras = { + "Before R.O.C.", + "Minguo", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "K1", - "K2", - "K3", - "K4", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "1. kvartal", - "2. kvartal", - "3. kvartal", - "4. kvartal", - } - }, + sharedQuarterNames }, { "QuarterNarrows", - new String[] { - "1.", - "2.", - "3.", - "4.", - } - }, + sharedQuarterNarrows }, { "calendarname.buddhist", "buddhistisk kalender" }, { "calendarname.gregorian", @@ -134,58 +203,15 @@ { "field.zone", "tidssone" }, { "islamic.AmPmMarkers", - new String[] { - "a.m.", - "p.m.", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "EEEE d. MMMM y GGGG", - "d. MMMM y GGGG", - "d. MMM y GGGG", - "d.M. y GGGG", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "s\u00f8n.", - "man.", - "tir.", - "ons.", - "tor.", - "fre.", - "l\u00f8r.", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "s\u00f8ndag", - "mandag", - "tirsdag", - "onsdag", - "torsdag", - "fredag", - "l\u00f8rdag", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "S", - "M", - "T", - "O", - "T", - "F", - "L", - } - }, - { "islamic.Eras", - new String[] { - "", - "AH", - } - }, + sharedDayNarrows }, { "islamic.MonthAbbreviations", new String[] { "muh.", @@ -221,81 +247,19 @@ } }, { "islamic.QuarterAbbreviations", - new String[] { - "K1", - "K2", - "K3", - "K4", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "1. kvartal", - "2. kvartal", - "3. kvartal", - "4. kvartal", - } - }, + sharedQuarterNames }, { "islamic.QuarterNarrows", - new String[] { - "1.", - "2.", - "3.", - "4.", - } - }, + sharedQuarterNarrows }, { "islamic.TimePatterns", - new String[] { - "HH.mm.ss zzzz", - "HH.mm.ss z", - "HH.mm.ss", - "HH.mm", - } - }, + sharedTimePatterns }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "a.m.", - "p.m.", - } - }, - { "islamic.long.Eras", - new String[] { - "", - "AH", - } - }, + sharedAmPmMarkers }, { "islamic.narrow.AmPmMarkers", - new String[] { - "a", - "p", - } - }, - { "islamic.narrow.Eras", - new String[] { - "", - "AH", - } - }, - { "islamic.short.Eras", - new String[] { - "", - "AH", - } - }, + sharedNarrowAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE d. MMMM y G", - "d. MMMM y G", - "d. MMM y G", - "d.M. y G", - } - }, - { "java.time.buddhist.long.Eras", - new String[] { - "BC", - "BE", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.buddhist.short.Eras", new String[] { "BC", @@ -303,13 +267,7 @@ } }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE d. MMMM y G", - "d. MMMM y G", - "d. MMM y G", - "d.M. y G", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", new String[] { "EEEE d. MMMM y G", @@ -343,13 +301,7 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE d. MMMM y G", - "d. MMMM y G", - "d. MMM y G", - "d.M. y G", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "f.Kr.", @@ -357,58 +309,17 @@ } }, { "roc.AmPmMarkers", - new String[] { - "a.m.", - "p.m.", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "EEEE d. MMMM y GGGG", - "d. MMMM y GGGG", - "d. MMM y GGGG", - "d.M. y GGGG", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "s\u00f8n.", - "man.", - "tir.", - "ons.", - "tor.", - "fre.", - "l\u00f8r.", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "s\u00f8ndag", - "mandag", - "tirsdag", - "onsdag", - "torsdag", - "fredag", - "l\u00f8rdag", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "S", - "M", - "T", - "O", - "T", - "F", - "L", - } - }, + sharedDayNarrows }, { "roc.Eras", - new String[] { - "Before R.O.C.", - "Minguo", - } - }, + sharedEras }, { "roc.MonthAbbreviations", new String[] { "jan.", @@ -461,67 +372,23 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "K1", - "K2", - "K3", - "K4", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "1. kvartal", - "2. kvartal", - "3. kvartal", - "4. kvartal", - } - }, + sharedQuarterNames }, { "roc.QuarterNarrows", - new String[] { - "1.", - "2.", - "3.", - "4.", - } - }, + sharedQuarterNarrows }, { "roc.TimePatterns", - new String[] { - "HH.mm.ss zzzz", - "HH.mm.ss z", - "HH.mm.ss", - "HH.mm", - } - }, + sharedTimePatterns }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "a.m.", - "p.m.", - } - }, + sharedAmPmMarkers }, { "roc.long.Eras", - new String[] { - "Before R.O.C.", - "Minguo", - } - }, + sharedEras }, { "roc.narrow.AmPmMarkers", - new String[] { - "a", - "p", - } - }, + sharedNarrowAmPmMarkers }, { "roc.narrow.Eras", - new String[] { - "Before R.O.C.", - "Minguo", - } - }, + sharedEras }, { "roc.short.Eras", - new String[] { - "Before R.O.C.", - "Minguo", - } - }, + sharedEras }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_pl.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_pl.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_pl.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,27 +72,84 @@ public class JavaTimeSupplementary_pl extends OpenListResourceBundle { @Override protected final Object[][] getContents() { - final String[] javatimelongEras = { + final String[] sharedQuarterAbbreviations = { + "K1", + "K2", + "K3", + "K4", + }; + + final String[] sharedQuarterNames = { + "I kwarta\u0142", + "II kwarta\u0142", + "III kwarta\u0142", + "IV kwarta\u0142", + }; + + final String[] sharedDatePatterns = { + "EEEE, d MMMM y GGGG", + "d MMMM y GGGG", + "d MMM y GGGG", + "dd.MM.y GGGG", + }; + + final String[] sharedDayAbbreviations = { + "niedz.", + "pon.", + "wt.", + "\u015br.", + "czw.", + "pt.", + "sob.", + }; + + final String[] sharedDayNames = { + "niedziela", + "poniedzia\u0142ek", + "wtorek", + "\u015broda", + "czwartek", + "pi\u0105tek", + "sobota", + }; + + final String[] sharedDayNarrows = { + "N", + "P", + "W", + "\u015a", + "C", + "P", + "S", + }; + + final String[] sharedNarrowAmPmMarkers = { + "a", + "p", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, d MMMM y G", + "d MMMM y G", + "d MMM y G", + "dd.MM.y G", + }; + + final String[] sharedJavaTimeLongEras = { "p.n.e.", "n.e.", }; + + final String[] sharedEras = { + "Przed ROC", + "ROC", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "K1", - "K2", - "K3", - "K4", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "I kwarta\u0142", - "II kwarta\u0142", - "III kwarta\u0142", - "IV kwarta\u0142", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "kalendarz buddyjski" }, { "calendarname.gregorian", @@ -136,46 +193,13 @@ } }, { "islamic.DatePatterns", - new String[] { - "EEEE, d MMMM y GGGG", - "d MMMM y GGGG", - "d MMM y GGGG", - "dd.MM.y GGGG", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "niedz.", - "pon.", - "wt.", - "\u015br.", - "czw.", - "pt.", - "sob.", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "niedziela", - "poniedzia\u0142ek", - "wtorek", - "\u015broda", - "czwartek", - "pi\u0105tek", - "sobota", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "N", - "P", - "W", - "\u015a", - "C", - "P", - "S", - } - }, + sharedDayNarrows }, { "islamic.MonthAbbreviations", new String[] { "Muh.", @@ -211,57 +235,13 @@ } }, { "islamic.QuarterAbbreviations", - new String[] { - "K1", - "K2", - "K3", - "K4", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "I kwarta\u0142", - "II kwarta\u0142", - "III kwarta\u0142", - "IV kwarta\u0142", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, - { "islamic.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedQuarterNames }, { "islamic.narrow.AmPmMarkers", - new String[] { - "a", - "p", - } - }, + sharedNarrowAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE, d MMMM y G", - "d MMMM y G", - "d MMM y G", - "dd.MM.y G", - } - }, - { "java.time.buddhist.long.Eras", - new String[] { - "BC", - "BE", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.buddhist.short.Eras", new String[] { "BC", @@ -269,86 +249,25 @@ } }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE, d MMMM y G", - "d MMMM y G", - "d MMM y G", - "dd.MM.y G", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE, d MMMM y G", - "d MMMM y G", - "d MMM y G", - "dd.MM.y G", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.long.Eras", - javatimelongEras }, + sharedJavaTimeLongEras }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE, d MMMM y G", - "d MMMM y G", - "d MMM y G", - "dd.MM.y G", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", - javatimelongEras }, - { "roc.AmPmMarkers", - new String[] { - "AM", - "PM", - } - }, + sharedJavaTimeLongEras }, { "roc.DatePatterns", - new String[] { - "EEEE, d MMMM y GGGG", - "d MMMM y GGGG", - "d MMM y GGGG", - "dd.MM.y GGGG", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "niedz.", - "pon.", - "wt.", - "\u015br.", - "czw.", - "pt.", - "sob.", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "niedziela", - "poniedzia\u0142ek", - "wtorek", - "\u015broda", - "czwartek", - "pi\u0105tek", - "sobota", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "N", - "P", - "W", - "\u015a", - "C", - "P", - "S", - } - }, + sharedDayNarrows }, { "roc.Eras", - new String[] { - "Przed ROC", - "ROC", - } - }, + sharedEras }, { "roc.MonthAbbreviations", new String[] { "sty", @@ -401,53 +320,17 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "K1", - "K2", - "K3", - "K4", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "I kwarta\u0142", - "II kwarta\u0142", - "III kwarta\u0142", - "IV kwarta\u0142", - } - }, - { "roc.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedQuarterNames }, { "roc.long.Eras", - new String[] { - "Przed ROC", - "ROC", - } - }, + sharedEras }, { "roc.narrow.AmPmMarkers", - new String[] { - "a", - "p", - } - }, + sharedNarrowAmPmMarkers }, { "roc.narrow.Eras", - new String[] { - "Przed ROC", - "ROC", - } - }, + sharedEras }, { "roc.short.Eras", - new String[] { - "Przed ROC", - "ROC", - } - }, + sharedEras }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_pt.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_pt.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_pt.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,23 +72,79 @@ public class JavaTimeSupplementary_pt extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "T1", + "T2", + "T3", + "T4", + }; + + final String[] sharedQuarterNames = { + "1\u00ba trimestre", + "2\u00ba trimestre", + "3\u00ba trimestre", + "4\u00ba trimestre", + }; + + final String[] sharedDatePatterns = { + "EEEE, d 'de' MMMM 'de' y GGGG", + "d 'de' MMMM 'de' y GGGG", + "dd/MM/y GGGG", + "dd/MM/yy G", + }; + + final String[] sharedDayAbbreviations = { + "dom", + "seg", + "ter", + "qua", + "qui", + "sex", + "s\u00e1b", + }; + + final String[] sharedDayNames = { + "domingo", + "segunda-feira", + "ter\u00e7a-feira", + "quarta-feira", + "quinta-feira", + "sexta-feira", + "s\u00e1bado", + }; + + final String[] sharedDayNarrows = { + "D", + "S", + "T", + "Q", + "Q", + "S", + "S", + }; + + final String[] sharedNarrowAmPmMarkers = { + "a", + "p", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, d 'de' MMMM 'de' y G", + "d 'de' MMMM 'de' y G", + "dd/MM/y G", + "dd/MM/yy GGGGG", + }; + + final String[] sharedEras = { + "Antes de R.O.C.", + "R.O.C.", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "T1", - "T2", - "T3", - "T4", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "1\u00ba trimestre", - "2\u00ba trimestre", - "3\u00ba trimestre", - "4\u00ba trimestre", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "Calend\u00e1rio Budista" }, { "calendarname.gregorian", @@ -130,122 +186,21 @@ } }, { "islamic.DatePatterns", - new String[] { - "EEEE, d 'de' MMMM 'de' y GGGG", - "d 'de' MMMM 'de' y GGGG", - "dd/MM/y GGGG", - "dd/MM/yy G", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "dom", - "seg", - "ter", - "qua", - "qui", - "sex", - "s\u00e1b", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "domingo", - "segunda-feira", - "ter\u00e7a-feira", - "quarta-feira", - "quinta-feira", - "sexta-feira", - "s\u00e1bado", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "D", - "S", - "T", - "Q", - "Q", - "S", - "S", - } - }, - { "islamic.Eras", - new String[] { - "", - "AH", - } - }, + sharedDayNarrows }, { "islamic.QuarterAbbreviations", - new String[] { - "T1", - "T2", - "T3", - "T4", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "1\u00ba trimestre", - "2\u00ba trimestre", - "3\u00ba trimestre", - "4\u00ba trimestre", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, - { "islamic.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, - { "islamic.long.Eras", - new String[] { - "", - "AH", - } - }, + sharedQuarterNames }, { "islamic.narrow.AmPmMarkers", - new String[] { - "a", - "p", - } - }, - { "islamic.narrow.Eras", - new String[] { - "", - "AH", - } - }, - { "islamic.short.Eras", - new String[] { - "", - "AH", - } - }, + sharedNarrowAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE, d 'de' MMMM 'de' y G", - "d 'de' MMMM 'de' y G", - "dd/MM/y G", - "dd/MM/yy GGGGG", - } - }, - { "java.time.buddhist.long.Eras", - new String[] { - "BC", - "BE", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.buddhist.short.Eras", new String[] { "BC", @@ -253,21 +208,9 @@ } }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE, d 'de' MMMM 'de' y G", - "d 'de' MMMM 'de' y G", - "dd/MM/y G", - "dd/MM/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE, d 'de' MMMM 'de' y G", - "d 'de' MMMM 'de' y G", - "dd/MM/y G", - "dd/MM/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.long.Eras", new String[] { "antes de Cristo", @@ -275,72 +218,23 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE, d 'de' MMMM 'de' y G", - "d 'de' MMMM 'de' y G", - "dd/MM/y G", - "dd/MM/yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "a.C.", "d.C.", } }, - { "roc.AmPmMarkers", - new String[] { - "AM", - "PM", - } - }, { "roc.DatePatterns", - new String[] { - "EEEE, d 'de' MMMM 'de' y GGGG", - "d 'de' MMMM 'de' y GGGG", - "dd/MM/y GGGG", - "dd/MM/yy G", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "dom", - "seg", - "ter", - "qua", - "qui", - "sex", - "s\u00e1b", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "domingo", - "segunda-feira", - "ter\u00e7a-feira", - "quarta-feira", - "quinta-feira", - "sexta-feira", - "s\u00e1bado", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "D", - "S", - "T", - "Q", - "Q", - "S", - "S", - } - }, + sharedDayNarrows }, { "roc.Eras", - new String[] { - "Antes de R.O.C.", - "R.O.C.", - } - }, + sharedEras }, { "roc.MonthAbbreviations", new String[] { "jan", @@ -393,53 +287,17 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "T1", - "T2", - "T3", - "T4", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "1\u00ba trimestre", - "2\u00ba trimestre", - "3\u00ba trimestre", - "4\u00ba trimestre", - } - }, - { "roc.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedQuarterNames }, { "roc.long.Eras", - new String[] { - "Antes de R.O.C.", - "R.O.C.", - } - }, + sharedEras }, { "roc.narrow.AmPmMarkers", - new String[] { - "a", - "p", - } - }, + sharedNarrowAmPmMarkers }, { "roc.narrow.Eras", - new String[] { - "Antes de R.O.C.", - "R.O.C.", - } - }, + sharedEras }, { "roc.short.Eras", - new String[] { - "Antes de R.O.C.", - "R.O.C.", - } - }, + sharedEras }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_pt_PT.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_pt_PT.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_pt_PT.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,23 +72,52 @@ public class JavaTimeSupplementary_pt_PT extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterNames = { + "1.\u00ba trimestre", + "2.\u00ba trimestre", + "3.\u00ba trimestre", + "4.\u00ba trimestre", + }; + + final String[] sharedAmPmMarkers = { + "da manh\u00e3", + "da tarde", + }; + + final String[] sharedDatePatterns = { + "GGGG y MMMM d, EEEE", + "GGGG y MMMM d", + "GGGG y MMM d", + "d/M/y GGGG", + }; + + final String[] sharedDayAbbreviations = { + "domingo", + "segunda", + "ter\u00e7a", + "quarta", + "quinta", + "sexta", + "s\u00e1bado", + }; + + final String[] sharedNarrowAmPmMarkers = { + "a.m.", + "p.m.", + }; + + final String[] sharedJavaTimeDatePatterns = { + "G y MMMM d, EEEE", + "G y MMMM d", + "G y MMM d", + "d/M/y G", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "1.\u00ba trimestre", - "2.\u00ba trimestre", - "3.\u00ba trimestre", - "4.\u00ba trimestre", - } - }, + sharedQuarterNames }, { "QuarterNames", - new String[] { - "1.\u00ba trimestre", - "2.\u00ba trimestre", - "3.\u00ba trimestre", - "4.\u00ba trimestre", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "Calend\u00e1rio budista" }, { "calendarname.gregorian", @@ -100,66 +129,21 @@ { "calendarname.japanese", "Calend\u00e1rio japon\u00eas" }, { "islamic.AmPmMarkers", - new String[] { - "da manh\u00e3", - "da tarde", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "GGGG y MMMM d, EEEE", - "GGGG y MMMM d", - "GGGG y MMM d", - "d/M/y GGGG", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "domingo", - "segunda", - "ter\u00e7a", - "quarta", - "quinta", - "sexta", - "s\u00e1bado", - } - }, + sharedDayAbbreviations }, { "islamic.QuarterNames", - new String[] { - "1.\u00ba trimestre", - "2.\u00ba trimestre", - "3.\u00ba trimestre", - "4.\u00ba trimestre", - } - }, + sharedQuarterNames }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "a.m.", - "p.m.", - } - }, + sharedNarrowAmPmMarkers }, { "islamic.narrow.AmPmMarkers", - new String[] { - "a.m.", - "p.m.", - } - }, + sharedNarrowAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "G y MMM d", - "d/M/y G", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "G y MMM d", - "d/M/y G", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", new String[] { "EEEE, d 'de' MMMM 'de' y G", @@ -169,58 +153,19 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "G y MMMM d, EEEE", - "G y MMMM d", - "G y MMM d", - "d/M/y G", - } - }, + sharedJavaTimeDatePatterns }, { "roc.AmPmMarkers", - new String[] { - "da manh\u00e3", - "da tarde", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "GGGG y MMMM d, EEEE", - "GGGG y MMMM d", - "GGGG y MMM d", - "d/M/y GGGG", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "domingo", - "segunda", - "ter\u00e7a", - "quarta", - "quinta", - "sexta", - "s\u00e1bado", - } - }, + sharedDayAbbreviations }, { "roc.QuarterNames", - new String[] { - "1.\u00ba trimestre", - "2.\u00ba trimestre", - "3.\u00ba trimestre", - "4.\u00ba trimestre", - } - }, + sharedQuarterNames }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "a.m.", - "p.m.", - } - }, + sharedNarrowAmPmMarkers }, { "roc.narrow.AmPmMarkers", - new String[] { - "a.m.", - "p.m.", - } - }, + sharedNarrowAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ro.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ro.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ro.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,23 +72,74 @@ public class JavaTimeSupplementary_ro extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "trim. I", + "trim. II", + "trim. III", + "trim. IV", + }; + + final String[] sharedQuarterNames = { + "trimestrul I", + "trimestrul al II-lea", + "trimestrul al III-lea", + "trimestrul al IV-lea", + }; + + final String[] sharedAmPmMarkers = { + "a.m.", + "p.m.", + }; + + final String[] sharedDatePatterns = { + "EEEE, d MMMM y GGGG", + "d MMMM y GGGG", + "dd.MM.y GGGG", + "dd.MM.y G", + }; + + final String[] sharedDayAbbreviations = { + "dum.", + "lun.", + "mar.", + "mie.", + "joi", + "vin.", + "s\u00e2m.", + }; + + final String[] sharedDayNames = { + "duminic\u0103", + "luni", + "mar\u021bi", + "miercuri", + "joi", + "vineri", + "s\u00e2mb\u0103t\u0103", + }; + + final String[] sharedDayNarrows = { + "D", + "L", + "M", + "M", + "J", + "V", + "S", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, d MMMM y G", + "d MMMM y G", + "dd.MM.y G", + "dd.MM.y GGGGG", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "trim. I", - "trim. II", - "trim. III", - "trim. IV", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "trimestrul I", - "trimestrul al II-lea", - "trimestrul al III-lea", - "trimestrul al IV-lea", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "calendar budist" }, { "calendarname.gregorian", @@ -124,128 +175,25 @@ { "field.zone", "Fus orar" }, { "islamic.AmPmMarkers", - new String[] { - "a.m.", - "p.m.", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "EEEE, d MMMM y GGGG", - "d MMMM y GGGG", - "dd.MM.y GGGG", - "dd.MM.y G", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "dum.", - "lun.", - "mar.", - "mie.", - "joi", - "vin.", - "s\u00e2m.", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "duminic\u0103", - "luni", - "mar\u021bi", - "miercuri", - "joi", - "vineri", - "s\u00e2mb\u0103t\u0103", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "D", - "L", - "M", - "M", - "J", - "V", - "S", - } - }, - { "islamic.Eras", - new String[] { - "", - "AH", - } - }, + sharedDayNarrows }, { "islamic.QuarterAbbreviations", - new String[] { - "trim. I", - "trim. II", - "trim. III", - "trim. IV", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "trimestrul I", - "trimestrul al II-lea", - "trimestrul al III-lea", - "trimestrul al IV-lea", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, - { "islamic.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedQuarterNames }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "a.m.", - "p.m.", - } - }, - { "islamic.long.Eras", - new String[] { - "", - "AH", - } - }, + sharedAmPmMarkers }, { "islamic.narrow.AmPmMarkers", - new String[] { - "a.m.", - "p.m.", - } - }, - { "islamic.narrow.Eras", - new String[] { - "", - "AH", - } - }, - { "islamic.short.Eras", - new String[] { - "", - "AH", - } - }, + sharedAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE, d MMMM y G", - "d MMMM y G", - "dd.MM.y G", - "dd.MM.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.buddhist.long.Eras", new String[] { "BC", @@ -259,21 +207,9 @@ } }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE, d MMMM y G", - "d MMMM y G", - "dd.MM.y G", - "dd.MM.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE, d MMMM y G", - "d MMMM y G", - "dd.MM.y G", - "dd.MM.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.long.Eras", new String[] { "\u00eenainte de Hristos", @@ -281,13 +217,7 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE, d MMMM y G", - "d MMMM y G", - "dd.MM.y G", - "dd.MM.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "d.C.", @@ -295,52 +225,15 @@ } }, { "roc.AmPmMarkers", - new String[] { - "a.m.", - "p.m.", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "EEEE, d MMMM y GGGG", - "d MMMM y GGGG", - "dd.MM.y GGGG", - "dd.MM.y G", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "dum.", - "lun.", - "mar.", - "mie.", - "joi", - "vin.", - "s\u00e2m.", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "duminic\u0103", - "luni", - "mar\u021bi", - "miercuri", - "joi", - "vineri", - "s\u00e2mb\u0103t\u0103", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "D", - "L", - "M", - "M", - "J", - "V", - "S", - } - }, + sharedDayNarrows }, { "roc.MonthAbbreviations", new String[] { "ian.", @@ -393,41 +286,13 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "trim. I", - "trim. II", - "trim. III", - "trim. IV", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "trimestrul I", - "trimestrul al II-lea", - "trimestrul al III-lea", - "trimestrul al IV-lea", - } - }, - { "roc.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedQuarterNames }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "a.m.", - "p.m.", - } - }, + sharedAmPmMarkers }, { "roc.narrow.AmPmMarkers", - new String[] { - "a.m.", - "p.m.", - } - }, + sharedAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ru.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ru.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ru.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,23 +72,92 @@ public class JavaTimeSupplementary_ru extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "1-\u0439 \u043a\u0432.", + "2-\u0439 \u043a\u0432.", + "3-\u0439 \u043a\u0432.", + "4-\u0439 \u043a\u0432.", + }; + + final String[] sharedQuarterNames = { + "1-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", + "2-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", + "3-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", + "4-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", + }; + + final String[] sharedAmPmMarkers = { + "\u0414\u041f", + "\u041f\u041f", + }; + + final String[] sharedDatePatterns = { + "EEEE, d MMMM y '\u0433'. GGGG", + "d MMMM y '\u0433'. GGGG", + "d MMM y '\u0433'. GGGG", + "dd.MM.y GGGG", + }; + + final String[] sharedDayNarrows = { + "\u0432\u0441", + "\u043f\u043d", + "\u0432\u0442", + "\u0441\u0440", + "\u0447\u0442", + "\u043f\u0442", + "\u0441\u0431", + }; + + final String[] sharedDayNames = { + "\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435", + "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a", + "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", + "\u0441\u0440\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0435\u0440\u0433", + "\u043f\u044f\u0442\u043d\u0438\u0446\u0430", + "\u0441\u0443\u0431\u0431\u043e\u0442\u0430", + }; + + final String[] sharedMonthNames = { + "\u041c\u0443\u0445\u0430\u0440\u0440\u0430\u043c", + "\u0421\u0430\u0444\u0430\u0440", + "\u0420\u0430\u0431\u0438-\u0443\u043b\u044c-\u0430\u0432\u0432\u0430\u043b\u044c", + "\u0420\u0430\u0431\u0438-\u0443\u043b\u044c-\u0430\u0445\u0438\u0440", + "\u0414\u0436\u0443\u043c\u0430\u0434-\u0443\u043b\u044c-\u0430\u0432\u0432\u0430\u043b\u044c", + "\u0414\u0436\u0443\u043c\u0430\u0434-\u0443\u043b\u044c-\u0430\u0445\u0438\u0440", + "\u0420\u0430\u0434\u0436\u0430\u0431", + "\u0428\u0430\u0430\u0431\u0430\u043d", + "\u0420\u0430\u043c\u0430\u0434\u0430\u043d", + "\u0428\u0430\u0432\u0432\u0430\u043b\u044c", + "\u0417\u0443\u043b\u044c-\u041a\u0430\u0430\u0434\u0430", + "\u0417\u0443\u043b\u044c-\u0425\u0438\u0434\u0436\u0436\u0430", + "", + }; + + final String[] sharedTimePatterns = { + "H:mm:ss zzzz", + "H:mm:ss z", + "H:mm:ss", + "H:mm", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, d MMMM y '\u0433'. G", + "d MMMM y '\u0433'. G", + "d MMM y '\u0433'. G", + "dd.MM.y G", + }; + + final String[] sharedEras = { + "Before R.O.C.", + "Minguo", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "1-\u0439 \u043a\u0432.", - "2-\u0439 \u043a\u0432.", - "3-\u0439 \u043a\u0432.", - "4-\u0439 \u043a\u0432.", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "1-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "2-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "3-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "4-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "\u0431\u0443\u0434\u0434\u0438\u0439\u0441\u043a\u0438\u0439 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c" }, { "calendarname.gregorian", @@ -126,144 +195,31 @@ { "field.zone", "\u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u043f\u043e\u044f\u0441" }, { "islamic.AmPmMarkers", - new String[] { - "\u0414\u041f", - "\u041f\u041f", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "EEEE, d MMMM y '\u0433'. GGGG", - "d MMMM y '\u0433'. GGGG", - "d MMM y '\u0433'. GGGG", - "dd.MM.y GGGG", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "\u0432\u0441", - "\u043f\u043d", - "\u0432\u0442", - "\u0441\u0440", - "\u0447\u0442", - "\u043f\u0442", - "\u0441\u0431", - } - }, + sharedDayNarrows }, { "islamic.DayNames", - new String[] { - "\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435", - "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a", - "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", - "\u0441\u0440\u0435\u0434\u0430", - "\u0447\u0435\u0442\u0432\u0435\u0440\u0433", - "\u043f\u044f\u0442\u043d\u0438\u0446\u0430", - "\u0441\u0443\u0431\u0431\u043e\u0442\u0430", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "\u0432\u0441", - "\u043f\u043d", - "\u0432\u0442", - "\u0441\u0440", - "\u0447\u0442", - "\u043f\u0442", - "\u0441\u0431", - } - }, + sharedDayNarrows }, { "islamic.MonthAbbreviations", - new String[] { - "\u041c\u0443\u0445\u0430\u0440\u0440\u0430\u043c", - "\u0421\u0430\u0444\u0430\u0440", - "\u0420\u0430\u0431\u0438-\u0443\u043b\u044c-\u0430\u0432\u0432\u0430\u043b\u044c", - "\u0420\u0430\u0431\u0438-\u0443\u043b\u044c-\u0430\u0445\u0438\u0440", - "\u0414\u0436\u0443\u043c\u0430\u0434-\u0443\u043b\u044c-\u0430\u0432\u0432\u0430\u043b\u044c", - "\u0414\u0436\u0443\u043c\u0430\u0434-\u0443\u043b\u044c-\u0430\u0445\u0438\u0440", - "\u0420\u0430\u0434\u0436\u0430\u0431", - "\u0428\u0430\u0430\u0431\u0430\u043d", - "\u0420\u0430\u043c\u0430\u0434\u0430\u043d", - "\u0428\u0430\u0432\u0432\u0430\u043b\u044c", - "\u0417\u0443\u043b\u044c-\u041a\u0430\u0430\u0434\u0430", - "\u0417\u0443\u043b\u044c-\u0425\u0438\u0434\u0436\u0436\u0430", - "", - } - }, + sharedMonthNames }, { "islamic.MonthNames", - new String[] { - "\u041c\u0443\u0445\u0430\u0440\u0440\u0430\u043c", - "\u0421\u0430\u0444\u0430\u0440", - "\u0420\u0430\u0431\u0438-\u0443\u043b\u044c-\u0430\u0432\u0432\u0430\u043b\u044c", - "\u0420\u0430\u0431\u0438-\u0443\u043b\u044c-\u0430\u0445\u0438\u0440", - "\u0414\u0436\u0443\u043c\u0430\u0434-\u0443\u043b\u044c-\u0430\u0432\u0432\u0430\u043b\u044c", - "\u0414\u0436\u0443\u043c\u0430\u0434-\u0443\u043b\u044c-\u0430\u0445\u0438\u0440", - "\u0420\u0430\u0434\u0436\u0430\u0431", - "\u0428\u0430\u0430\u0431\u0430\u043d", - "\u0420\u0430\u043c\u0430\u0434\u0430\u043d", - "\u0428\u0430\u0432\u0432\u0430\u043b\u044c", - "\u0417\u0443\u043b\u044c-\u041a\u0430\u0430\u0434\u0430", - "\u0417\u0443\u043b\u044c-\u0425\u0438\u0434\u0436\u0436\u0430", - "", - } - }, + sharedMonthNames }, { "islamic.QuarterAbbreviations", - new String[] { - "1-\u0439 \u043a\u0432.", - "2-\u0439 \u043a\u0432.", - "3-\u0439 \u043a\u0432.", - "4-\u0439 \u043a\u0432.", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "1-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "2-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "3-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "4-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, + sharedQuarterNames }, { "islamic.TimePatterns", - new String[] { - "H:mm:ss zzzz", - "H:mm:ss z", - "H:mm:ss", - "H:mm", - } - }, + sharedTimePatterns }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "\u0414\u041f", - "\u041f\u041f", - } - }, + sharedAmPmMarkers }, { "islamic.narrow.AmPmMarkers", - new String[] { - "\u0414\u041f", - "\u041f\u041f", - } - }, + sharedAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE, d MMMM y '\u0433'. G", - "d MMMM y '\u0433'. G", - "d MMM y '\u0433'. G", - "dd.MM.y G", - } - }, - { "java.time.buddhist.long.Eras", - new String[] { - "BC", - "BE", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.buddhist.short.Eras", new String[] { "BC", @@ -271,21 +227,9 @@ } }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE, d MMMM y '\u0433'. G", - "d MMMM y '\u0433'. G", - "d MMM y '\u0433'. G", - "dd.MM.y G", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE, d MMMM y '\u0433'. G", - "d MMMM y '\u0433'. G", - "d MMM y '\u0433'. G", - "dd.MM.y G", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.long.Eras", new String[] { "\u043e\u0442 \u0420\u043e\u0436\u0434\u0435\u0441\u0442\u0432\u0430 \u0425\u0440\u0438\u0441\u0442\u043e\u0432\u0430", @@ -311,13 +255,7 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE, d MMMM y '\u0433'. G", - "d MMMM y '\u0433'. G", - "d MMM y '\u0433'. G", - "dd.MM.y G", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "\u0434\u043e \u043d.\u044d.", @@ -325,58 +263,17 @@ } }, { "roc.AmPmMarkers", - new String[] { - "\u0414\u041f", - "\u041f\u041f", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "EEEE, d MMMM y '\u0433'. GGGG", - "d MMMM y '\u0433'. GGGG", - "d MMM y '\u0433'. GGGG", - "dd.MM.y GGGG", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "\u0432\u0441", - "\u043f\u043d", - "\u0432\u0442", - "\u0441\u0440", - "\u0447\u0442", - "\u043f\u0442", - "\u0441\u0431", - } - }, + sharedDayNarrows }, { "roc.DayNames", - new String[] { - "\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435", - "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a", - "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", - "\u0441\u0440\u0435\u0434\u0430", - "\u0447\u0435\u0442\u0432\u0435\u0440\u0433", - "\u043f\u044f\u0442\u043d\u0438\u0446\u0430", - "\u0441\u0443\u0431\u0431\u043e\u0442\u0430", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "\u0432\u0441", - "\u043f\u043d", - "\u0432\u0442", - "\u0441\u0440", - "\u0447\u0442", - "\u043f\u0442", - "\u0441\u0431", - } - }, + sharedDayNarrows }, { "roc.Eras", - new String[] { - "Before R.O.C.", - "Minguo", - } - }, + sharedEras }, { "roc.MonthAbbreviations", new String[] { "\u044f\u043d\u0432.", @@ -429,59 +326,21 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "1-\u0439 \u043a\u0432.", - "2-\u0439 \u043a\u0432.", - "3-\u0439 \u043a\u0432.", - "4-\u0439 \u043a\u0432.", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "1-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "2-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "3-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "4-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - } - }, + sharedQuarterNames }, { "roc.TimePatterns", - new String[] { - "H:mm:ss zzzz", - "H:mm:ss z", - "H:mm:ss", - "H:mm", - } - }, + sharedTimePatterns }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "\u0414\u041f", - "\u041f\u041f", - } - }, + sharedAmPmMarkers }, { "roc.long.Eras", - new String[] { - "Before R.O.C.", - "Minguo", - } - }, + sharedEras }, { "roc.narrow.AmPmMarkers", - new String[] { - "\u0414\u041f", - "\u041f\u041f", - } - }, + sharedAmPmMarkers }, { "roc.narrow.Eras", - new String[] { - "Before R.O.C.", - "Minguo", - } - }, + sharedEras }, { "roc.short.Eras", - new String[] { - "Before R.O.C.", - "Minguo", - } - }, + sharedEras }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sk.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sk.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sk.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,15 +72,79 @@ public class JavaTimeSupplementary_sk extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterNames = { + "1. \u0161tvr\u0165rok", + "2. \u0161tvr\u0165rok", + "3. \u0161tvr\u0165rok", + "4. \u0161tvr\u0165rok", + }; + + final String[] sharedAmPmMarkers = { + "AM", + "PM", + }; + + final String[] sharedDatePatterns = { + "EEEE, d. M. y GGGG", + "d. M. y GGGG", + "d. M. y GGGG", + "d.M.y G", + }; + + final String[] sharedDayAbbreviations = { + "ne", + "po", + "ut", + "st", + "\u0161t", + "pi", + "so", + }; + + final String[] sharedDayNames = { + "nede\u013ea", + "pondelok", + "utorok", + "streda", + "\u0161tvrtok", + "piatok", + "sobota", + }; + + final String[] sharedDayNarrows = { + "n", + "p", + "u", + "s", + "\u0161", + "p", + "s", + }; + + final String[] sharedQuarterAbbreviations = { + "Q1", + "Q2", + "Q3", + "Q4", + }; + + final String[] sharedTimePatterns = { + "H:mm:ss zzzz", + "H:mm:ss z", + "H:mm:ss", + "H:mm", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, d. M. y G", + "d. M. y G", + "d. M. y G", + "d.M.y GGGGG", + }; + return new Object[][] { { "QuarterNames", - new String[] { - "1. \u0161tvr\u0165rok", - "2. \u0161tvr\u0165rok", - "3. \u0161tvr\u0165rok", - "4. \u0161tvr\u0165rok", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "buddhistick\u00fd kalend\u00e1r" }, { "calendarname.gregorian", @@ -116,114 +180,29 @@ { "field.zone", "\u010dasov\u00e9 p\u00e1smo" }, { "islamic.AmPmMarkers", - new String[] { - "AM", - "PM", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "EEEE, d. M. y GGGG", - "d. M. y GGGG", - "d. M. y GGGG", - "d.M.y G", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "ne", - "po", - "ut", - "st", - "\u0161t", - "pi", - "so", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "nede\u013ea", - "pondelok", - "utorok", - "streda", - "\u0161tvrtok", - "piatok", - "sobota", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "n", - "p", - "u", - "s", - "\u0161", - "p", - "s", - } - }, + sharedDayNarrows }, { "islamic.QuarterAbbreviations", - new String[] { - "Q1", - "Q2", - "Q3", - "Q4", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "1. \u0161tvr\u0165rok", - "2. \u0161tvr\u0165rok", - "3. \u0161tvr\u0165rok", - "4. \u0161tvr\u0165rok", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, + sharedQuarterNames }, { "islamic.TimePatterns", - new String[] { - "H:mm:ss zzzz", - "H:mm:ss z", - "H:mm:ss", - "H:mm", - } - }, + sharedTimePatterns }, { "islamic.narrow.AmPmMarkers", - new String[] { - "AM", - "PM", - } - }, + sharedAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE, d. M. y G", - "d. M. y G", - "d. M. y G", - "d.M.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE, d. M. y G", - "d. M. y G", - "d. M. y G", - "d.M.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE, d. M. y G", - "d. M. y G", - "d. M. y G", - "d.M.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.long.Eras", new String[] { "pred Kristom", @@ -231,66 +210,21 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE, d. M. y G", - "d. M. y G", - "d. M. y G", - "d.M.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "pred n.l.", "n.l.", } }, - { "roc.AmPmMarkers", - new String[] { - "AM", - "PM", - } - }, { "roc.DatePatterns", - new String[] { - "EEEE, d. M. y GGGG", - "d. M. y GGGG", - "d. M. y GGGG", - "d.M.y G", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "ne", - "po", - "ut", - "st", - "\u0161t", - "pi", - "so", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "nede\u013ea", - "pondelok", - "utorok", - "streda", - "\u0161tvrtok", - "piatok", - "sobota", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "n", - "p", - "u", - "s", - "\u0161", - "p", - "s", - } - }, + sharedDayNarrows }, { "roc.MonthAbbreviations", new String[] { "jan", @@ -343,35 +277,11 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "Q1", - "Q2", - "Q3", - "Q4", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "1. \u0161tvr\u0165rok", - "2. \u0161tvr\u0165rok", - "3. \u0161tvr\u0165rok", - "4. \u0161tvr\u0165rok", - } - }, + sharedQuarterNames }, { "roc.TimePatterns", - new String[] { - "H:mm:ss zzzz", - "H:mm:ss z", - "H:mm:ss", - "H:mm", - } - }, - { "roc.narrow.AmPmMarkers", - new String[] { - "AM", - "PM", - } - }, + sharedTimePatterns }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sl.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sl.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sl.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,23 +72,79 @@ public class JavaTimeSupplementary_sl extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "1. \u010det.", + "2. \u010det.", + "3. \u010det.", + "4. \u010det.", + }; + + final String[] sharedQuarterNames = { + "1. \u010detrtletje", + "2. \u010detrtletje", + "3. \u010detrtletje", + "4. \u010detrtletje", + }; + + final String[] sharedAmPmMarkers = { + "dop.", + "pop.", + }; + + final String[] sharedDatePatterns = { + "EEEE, dd. MMMM y GGGG", + "dd. MMMM y GGGG", + "d. MMM y GGGG", + "d. MM. yy G", + }; + + final String[] sharedDayAbbreviations = { + "ned.", + "pon.", + "tor.", + "sre.", + "\u010det.", + "pet.", + "sob.", + }; + + final String[] sharedDayNames = { + "nedelja", + "ponedeljek", + "torek", + "sreda", + "\u010detrtek", + "petek", + "sobota", + }; + + final String[] sharedDayNarrows = { + "n", + "p", + "t", + "s", + "\u010d", + "p", + "s", + }; + + final String[] sharedNarrowAmPmMarkers = { + "d", + "p", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, dd. MMMM y G", + "dd. MMMM y G", + "d. MMM y G", + "d. MM. yy GGGGG", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "1. \u010det.", - "2. \u010det.", - "3. \u010det.", - "4. \u010det.", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "1. \u010detrtletje", - "2. \u010detrtletje", - "3. \u010detrtletje", - "4. \u010detrtletje", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "budisti\u010dni koledar" }, { "calendarname.gregorian", @@ -124,120 +180,29 @@ { "field.zone", "\u010dasovni pas" }, { "islamic.AmPmMarkers", - new String[] { - "dop.", - "pop.", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "EEEE, dd. MMMM y GGGG", - "dd. MMMM y GGGG", - "d. MMM y GGGG", - "d. MM. yy G", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "ned.", - "pon.", - "tor.", - "sre.", - "\u010det.", - "pet.", - "sob.", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "nedelja", - "ponedeljek", - "torek", - "sreda", - "\u010detrtek", - "petek", - "sobota", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "n", - "p", - "t", - "s", - "\u010d", - "p", - "s", - } - }, + sharedDayNarrows }, { "islamic.QuarterAbbreviations", - new String[] { - "1. \u010det.", - "2. \u010det.", - "3. \u010det.", - "4. \u010det.", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "1. \u010detrtletje", - "2. \u010detrtletje", - "3. \u010detrtletje", - "4. \u010detrtletje", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, - { "islamic.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedQuarterNames }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "dop.", - "pop.", - } - }, + sharedAmPmMarkers }, { "islamic.narrow.AmPmMarkers", - new String[] { - "d", - "p", - } - }, + sharedNarrowAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE, dd. MMMM y G", - "dd. MMMM y G", - "d. MMM y G", - "d. MM. yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE, dd. MMMM y G", - "dd. MMMM y G", - "d. MMM y G", - "d. MM. yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE, dd. MMMM y G", - "dd. MMMM y G", - "d. MMM y G", - "d. MM. yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.long.Eras", new String[] { "pred Kristusom", @@ -245,13 +210,7 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE, dd. MMMM y G", - "dd. MMMM y G", - "d. MMM y G", - "d. MM. yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "pr.n.\u0161.", @@ -259,52 +218,15 @@ } }, { "roc.AmPmMarkers", - new String[] { - "dop.", - "pop.", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "EEEE, dd. MMMM y GGGG", - "dd. MMMM y GGGG", - "d. MMM y GGGG", - "d. MM. yy G", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "ned.", - "pon.", - "tor.", - "sre.", - "\u010det.", - "pet.", - "sob.", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "nedelja", - "ponedeljek", - "torek", - "sreda", - "\u010detrtek", - "petek", - "sobota", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "n", - "p", - "t", - "s", - "\u010d", - "p", - "s", - } - }, + sharedDayNarrows }, { "roc.MonthAbbreviations", new String[] { "jan.", @@ -357,41 +279,13 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "1. \u010det.", - "2. \u010det.", - "3. \u010det.", - "4. \u010det.", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "1. \u010detrtletje", - "2. \u010detrtletje", - "3. \u010detrtletje", - "4. \u010detrtletje", - } - }, - { "roc.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedQuarterNames }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "dop.", - "pop.", - } - }, + sharedAmPmMarkers }, { "roc.narrow.AmPmMarkers", - new String[] { - "d", - "p", - } - }, + sharedNarrowAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sq.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sq.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sq.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,23 +72,81 @@ public class JavaTimeSupplementary_sq extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "tremujori I", + "tremujori II", + "tremujori III", + "tremujori IV", + }; + + final String[] sharedQuarterNames = { + "tremujori i par\u00eb", + "tremujori i dyt\u00eb", + "tremujori i tret\u00eb", + "tremujori i kat\u00ebrt", + }; + + final String[] sharedAmPmMarkers = { + "e paradites", + "e pasdites", + }; + + final String[] sharedDatePatterns = { + "EEEE, d MMM y GGGG", + "d MMM y GGGG", + "d MMM y GGGG", + "d.M.y G", + }; + + final String[] sharedDayAbbreviations = { + "Die", + "H\u00ebn", + "Mar", + "M\u00ebr", + "Enj", + "Pre", + "Sht", + }; + + final String[] sharedDayNames = { + "e diel", + "e h\u00ebn\u00eb", + "e mart\u00eb", + "e m\u00ebrkur\u00eb", + "e enjte", + "e premte", + "e shtun\u00eb", + }; + + final String[] sharedDayNarrows = { + "D", + "H", + "M", + "M", + "E", + "P", + "S", + }; + + final String[] sharedTimePatterns = { + "h:mm:ss a, zzzz", + "h:mm:ss a, z", + "h:mm:ss a", + "h:mm a", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, d MMM y G", + "d MMM y G", + "d MMM y G", + "d.M.y GGGGG", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "tremujori I", - "tremujori II", - "tremujori III", - "tremujori IV", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "tremujori i par\u00eb", - "tremujori i dyt\u00eb", - "tremujori i tret\u00eb", - "tremujori i kat\u00ebrt", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "kalendar budist" }, { "calendarname.gregorian", @@ -126,120 +184,31 @@ { "field.zone", "brezi orar" }, { "islamic.AmPmMarkers", - new String[] { - "e paradites", - "e pasdites", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "EEEE, d MMM y GGGG", - "d MMM y GGGG", - "d MMM y GGGG", - "d.M.y G", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "Die", - "H\u00ebn", - "Mar", - "M\u00ebr", - "Enj", - "Pre", - "Sht", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "e diel", - "e h\u00ebn\u00eb", - "e mart\u00eb", - "e m\u00ebrkur\u00eb", - "e enjte", - "e premte", - "e shtun\u00eb", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "D", - "H", - "M", - "M", - "E", - "P", - "S", - } - }, + sharedDayNarrows }, { "islamic.QuarterAbbreviations", - new String[] { - "tremujori I", - "tremujori II", - "tremujori III", - "tremujori IV", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "tremujori i par\u00eb", - "tremujori i dyt\u00eb", - "tremujori i tret\u00eb", - "tremujori i kat\u00ebrt", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, + sharedQuarterNames }, { "islamic.TimePatterns", - new String[] { - "h:mm:ss a, zzzz", - "h:mm:ss a, z", - "h:mm:ss a", - "h:mm a", - } - }, + sharedTimePatterns }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "e paradites", - "e pasdites", - } - }, + sharedAmPmMarkers }, { "islamic.narrow.AmPmMarkers", - new String[] { - "e paradites", - "e pasdites", - } - }, + sharedAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE, d MMM y G", - "d MMM y G", - "d MMM y G", - "d.M.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE, d MMM y G", - "d MMM y G", - "d MMM y G", - "d.M.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE, d MMM y G", - "d MMM y G", - "d MMM y G", - "d.M.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.long.Eras", new String[] { "para er\u00ebs s\u00eb re", @@ -247,13 +216,7 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE, d MMM y G", - "d MMM y G", - "d MMM y G", - "d.M.y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "p.e.r.", @@ -261,52 +224,15 @@ } }, { "roc.AmPmMarkers", - new String[] { - "e paradites", - "e pasdites", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "EEEE, d MMM y GGGG", - "d MMM y GGGG", - "d MMM y GGGG", - "d.M.y G", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "Die", - "H\u00ebn", - "Mar", - "M\u00ebr", - "Enj", - "Pre", - "Sht", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "e diel", - "e h\u00ebn\u00eb", - "e mart\u00eb", - "e m\u00ebrkur\u00eb", - "e enjte", - "e premte", - "e shtun\u00eb", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "D", - "H", - "M", - "M", - "E", - "P", - "S", - } - }, + sharedDayNarrows }, { "roc.MonthAbbreviations", new String[] { "Jan", @@ -359,41 +285,15 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "tremujori I", - "tremujori II", - "tremujori III", - "tremujori IV", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "tremujori i par\u00eb", - "tremujori i dyt\u00eb", - "tremujori i tret\u00eb", - "tremujori i kat\u00ebrt", - } - }, + sharedQuarterNames }, { "roc.TimePatterns", - new String[] { - "h:mm:ss a, zzzz", - "h:mm:ss a, z", - "h:mm:ss a", - "h:mm a", - } - }, + sharedTimePatterns }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "e paradites", - "e pasdites", - } - }, + sharedAmPmMarkers }, { "roc.narrow.AmPmMarkers", - new String[] { - "e paradites", - "e pasdites", - } - }, + sharedAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sr.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sr.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sr.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,31 +72,110 @@ public class JavaTimeSupplementary_sr extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "\u041a1", + "\u041a2", + "\u041a3", + "\u041a4", + }; + + final String[] sharedQuarterNames = { + "\u043f\u0440\u0432\u0438 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", + "\u0434\u0440\u0443\u0433\u0438 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", + "\u0442\u0440\u0435\u045b\u0438 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", + "\u0447\u0435\u0442\u0432\u0440\u0442\u0438 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", + }; + + final String[] sharedQuarterNarrows = { + "1.", + "2.", + "3.", + "4.", + }; + + final String[] sharedAmPmMarkers = { + "\u043f\u0440\u0435 \u043f\u043e\u0434\u043d\u0435", + "\u043f\u043e \u043f\u043e\u0434\u043d\u0435", + }; + + final String[] sharedDatePatterns = { + "EEEE, dd. MMMM y. GGGG", + "dd. MMMM y. GGGG", + "dd.MM.y. GGGG", + "d.M.y. G", + }; + + final String[] sharedDayAbbreviations = { + "\u043d\u0435\u0434", + "\u043f\u043e\u043d", + "\u0443\u0442\u043e", + "\u0441\u0440\u0435", + "\u0447\u0435\u0442", + "\u043f\u0435\u0442", + "\u0441\u0443\u0431", + }; + + final String[] sharedDayNames = { + "\u043d\u0435\u0434\u0435\u0459\u0430", + "\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a", + "\u0443\u0442\u043e\u0440\u0430\u043a", + "\u0441\u0440\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a", + "\u043f\u0435\u0442\u0430\u043a", + "\u0441\u0443\u0431\u043e\u0442\u0430", + }; + + final String[] sharedDayNarrows = { + "\u043d", + "\u043f", + "\u0443", + "\u0441", + "\u0447", + "\u043f", + "\u0441", + }; + + final String[] sharedEras = { + "", + "\u0410\u0425", + }; + + final String[] sharedTimePatterns = { + "HH.mm.ss zzzz", + "HH.mm.ss z", + "HH.mm.ss", + "HH.mm", + }; + + final String[] sharedNarrowAmPmMarkers = { + "a", + "p", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, dd. MMMM y. G", + "dd. MMMM y. G", + "dd.MM.y. G", + "d.M.y. GGGGG", + }; + + final String[] sharedJavaTimeLongEras = { + "BC", + "\u0411\u0415", + }; + + final String[] sharedShortEras = { + "\u041f\u0440\u0435 \u0420\u041a", + "\u0420\u041a", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "\u041a1", - "\u041a2", - "\u041a3", - "\u041a4", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "\u043f\u0440\u0432\u0438 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "\u0434\u0440\u0443\u0433\u0438 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "\u0442\u0440\u0435\u045b\u0438 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "\u0447\u0435\u0442\u0432\u0440\u0442\u0438 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - } - }, + sharedQuarterNames }, { "QuarterNarrows", - new String[] { - "1.", - "2.", - "3.", - "4.", - } - }, + sharedQuarterNarrows }, { "calendarname.buddhist", "\u0431\u0443\u0434\u0438\u0441\u0442\u0438\u0447\u043a\u0438 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440" }, { "calendarname.gregorian", @@ -132,58 +211,17 @@ { "field.zone", "\u0432\u0440\u0435\u043c\u0435\u043d\u0441\u043a\u0430 \u0437\u043e\u043d\u0430" }, { "islamic.AmPmMarkers", - new String[] { - "\u043f\u0440\u0435 \u043f\u043e\u0434\u043d\u0435", - "\u043f\u043e \u043f\u043e\u0434\u043d\u0435", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "EEEE, dd. MMMM y. GGGG", - "dd. MMMM y. GGGG", - "dd.MM.y. GGGG", - "d.M.y. G", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "\u043d\u0435\u0434", - "\u043f\u043e\u043d", - "\u0443\u0442\u043e", - "\u0441\u0440\u0435", - "\u0447\u0435\u0442", - "\u043f\u0435\u0442", - "\u0441\u0443\u0431", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "\u043d\u0435\u0434\u0435\u0459\u0430", - "\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a", - "\u0443\u0442\u043e\u0440\u0430\u043a", - "\u0441\u0440\u0435\u0434\u0430", - "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a", - "\u043f\u0435\u0442\u0430\u043a", - "\u0441\u0443\u0431\u043e\u0442\u0430", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "\u043d", - "\u043f", - "\u0443", - "\u0441", - "\u0447", - "\u043f", - "\u0441", - } - }, + sharedDayNarrows }, { "islamic.Eras", - new String[] { - "", - "\u0410\u0425", - } - }, + sharedEras }, { "islamic.MonthNames", new String[] { "\u041c\u0443\u0440\u0430\u0445\u0430\u043c", @@ -202,95 +240,31 @@ } }, { "islamic.QuarterAbbreviations", - new String[] { - "\u041a1", - "\u041a2", - "\u041a3", - "\u041a4", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "\u043f\u0440\u0432\u0438 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "\u0434\u0440\u0443\u0433\u0438 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "\u0442\u0440\u0435\u045b\u0438 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "\u0447\u0435\u0442\u0432\u0440\u0442\u0438 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - } - }, + sharedQuarterNames }, { "islamic.QuarterNarrows", - new String[] { - "1.", - "2.", - "3.", - "4.", - } - }, + sharedQuarterNarrows }, { "islamic.TimePatterns", - new String[] { - "HH.mm.ss zzzz", - "HH.mm.ss z", - "HH.mm.ss", - "HH.mm", - } - }, + sharedTimePatterns }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "\u043f\u0440\u0435 \u043f\u043e\u0434\u043d\u0435", - "\u043f\u043e \u043f\u043e\u0434\u043d\u0435", - } - }, + sharedAmPmMarkers }, { "islamic.long.Eras", - new String[] { - "", - "\u0410\u0425", - } - }, + sharedEras }, { "islamic.narrow.AmPmMarkers", - new String[] { - "a", - "p", - } - }, + sharedNarrowAmPmMarkers }, { "islamic.narrow.Eras", - new String[] { - "", - "\u0410\u0425", - } - }, + sharedEras }, { "islamic.short.Eras", - new String[] { - "", - "\u0410\u0425", - } - }, + sharedEras }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE, dd. MMMM y. G", - "dd. MMMM y. G", - "dd.MM.y. G", - "d.M.y. GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.buddhist.long.Eras", - new String[] { - "BC", - "\u0411\u0415", - } - }, + sharedJavaTimeLongEras }, { "java.time.buddhist.short.Eras", - new String[] { - "BC", - "\u0411\u0415", - } - }, + sharedJavaTimeLongEras }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE, dd. MMMM y. G", - "dd. MMMM y. G", - "dd.MM.y. G", - "d.M.y. GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", new String[] { "EEEE, MMMM d, y G", @@ -324,13 +298,7 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE, dd. MMMM y. G", - "dd. MMMM y. G", - "dd.MM.y. G", - "d.M.y. GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "\u043f. \u043d. \u0435.", @@ -338,58 +306,17 @@ } }, { "roc.AmPmMarkers", - new String[] { - "\u043f\u0440\u0435 \u043f\u043e\u0434\u043d\u0435", - "\u043f\u043e \u043f\u043e\u0434\u043d\u0435", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "EEEE, dd. MMMM y. GGGG", - "dd. MMMM y. GGGG", - "dd.MM.y. GGGG", - "d.M.y. G", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "\u043d\u0435\u0434", - "\u043f\u043e\u043d", - "\u0443\u0442\u043e", - "\u0441\u0440\u0435", - "\u0447\u0435\u0442", - "\u043f\u0435\u0442", - "\u0441\u0443\u0431", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "\u043d\u0435\u0434\u0435\u0459\u0430", - "\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a", - "\u0443\u0442\u043e\u0440\u0430\u043a", - "\u0441\u0440\u0435\u0434\u0430", - "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a", - "\u043f\u0435\u0442\u0430\u043a", - "\u0441\u0443\u0431\u043e\u0442\u0430", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "\u043d", - "\u043f", - "\u0443", - "\u0441", - "\u0447", - "\u043f", - "\u0441", - } - }, + sharedDayNarrows }, { "roc.Eras", - new String[] { - "\u041f\u0440\u0435 \u0420\u041a", - "\u0420\u041a", - } - }, + sharedShortEras }, { "roc.MonthAbbreviations", new String[] { "\u0458\u0430\u043d", @@ -442,67 +369,23 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "\u041a1", - "\u041a2", - "\u041a3", - "\u041a4", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "\u043f\u0440\u0432\u0438 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "\u0434\u0440\u0443\u0433\u0438 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "\u0442\u0440\u0435\u045b\u0438 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "\u0447\u0435\u0442\u0432\u0440\u0442\u0438 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - } - }, + sharedQuarterNames }, { "roc.QuarterNarrows", - new String[] { - "1.", - "2.", - "3.", - "4.", - } - }, + sharedQuarterNarrows }, { "roc.TimePatterns", - new String[] { - "HH.mm.ss zzzz", - "HH.mm.ss z", - "HH.mm.ss", - "HH.mm", - } - }, + sharedTimePatterns }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "\u043f\u0440\u0435 \u043f\u043e\u0434\u043d\u0435", - "\u043f\u043e \u043f\u043e\u0434\u043d\u0435", - } - }, + sharedAmPmMarkers }, { "roc.long.Eras", - new String[] { - "\u041f\u0440\u0435 \u0420\u041a", - "\u0420\u041a", - } - }, + sharedShortEras }, { "roc.narrow.AmPmMarkers", - new String[] { - "a", - "p", - } - }, + sharedNarrowAmPmMarkers }, { "roc.narrow.Eras", - new String[] { - "\u041f\u0440\u0435 \u0420\u041a", - "\u0420\u041a", - } - }, + sharedShortEras }, { "roc.short.Eras", - new String[] { - "\u041f\u0440\u0435 \u0420\u041a", - "\u0420\u041a", - } - }, + sharedShortEras }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sr_BA.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sr_BA.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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. + */ + +/* + * COPYRIGHT AND PERMISSION NOTICE + * + * Copyright (C) 1991-2016 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 of the Unicode data files and any associated documentation + * (the "Data Files") or Unicode software and any associated documentation + * (the "Software") to deal in the Data Files or Software + * without restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, and/or sell copies of + * the Data Files or Software, and to permit persons to whom the Data Files + * or Software are furnished to do so, provided that + * (a) this copyright and permission notice appear with all copies + * of the Data Files or Software, + * (b) this copyright and permission notice appear in associated + * documentation, and + * (c) there is clear notice in each modified Data File or in the Software + * as well as in the documentation associated with the Data File(s) or + * Software that the data or software has been modified. + * + * THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS + * NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL + * DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THE DATA FILES OR SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, + * use or other dealings in these Data Files or Software without prior + * written authorization of the copyright holder. + */ + +// Note: this file has been generated by a tool. + +package sun.text.resources.ext; + +import sun.util.resources.OpenListResourceBundle; + +public class JavaTimeSupplementary_sr_BA extends OpenListResourceBundle { + @Override + protected final Object[][] getContents() { + final String[] sharedTimePatterns = { + "HH:mm:ss zzzz", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + }; + + return new Object[][] { + { "islamic.TimePatterns", + sharedTimePatterns }, + { "roc.TimePatterns", + sharedTimePatterns }, + }; + } +} diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sr_Latn.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sr_Latn.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sr_Latn.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,23 +72,75 @@ public class JavaTimeSupplementary_sr_Latn extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "K1", + "K2", + "K3", + "K4", + }; + + final String[] sharedQuarterNames = { + "prvi kvartal", + "drugi kvartal", + "tre\u0107i kvartal", + "\u010detvrti kvartal", + }; + + final String[] sharedAmPmMarkers = { + "pre podne", + "po podne", + }; + + final String[] sharedDayAbbreviations = { + "ned", + "pon", + "uto", + "sre", + "\u010det", + "pet", + "sub", + }; + + final String[] sharedDayNames = { + "nedelja", + "ponedeljak", + "utorak", + "sreda", + "\u010detvrtak", + "petak", + "subota", + }; + + final String[] sharedDayNarrows = { + "n", + "p", + "u", + "s", + "\u010d", + "p", + "s", + }; + + final String[] sharedEras = { + "", + "AH", + }; + + final String[] sharedJavaTimeLongEras = { + "BC", + "BE", + }; + + final String[] sharedShortEras = { + "Pre RK", + "RK", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "K1", - "K2", - "K3", - "K4", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "prvi kvartal", - "drugi kvartal", - "tre\u0107i kvartal", - "\u010detvrti kvartal", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "budisti\u010dki kalendar" }, { "calendarname.gregorian", @@ -124,50 +176,15 @@ { "field.zone", "vremenska zona" }, { "islamic.AmPmMarkers", - new String[] { - "pre podne", - "po podne", - } - }, + sharedAmPmMarkers }, { "islamic.DayAbbreviations", - new String[] { - "ned", - "pon", - "uto", - "sre", - "\u010det", - "pet", - "sub", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "nedelja", - "ponedeljak", - "utorak", - "sreda", - "\u010detvrtak", - "petak", - "subota", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "n", - "p", - "u", - "s", - "\u010d", - "p", - "s", - } - }, + sharedDayNarrows }, { "islamic.Eras", - new String[] { - "", - "AH", - } - }, + sharedEras }, { "islamic.MonthNames", new String[] { "Muraham", @@ -186,57 +203,21 @@ } }, { "islamic.QuarterAbbreviations", - new String[] { - "K1", - "K2", - "K3", - "K4", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "prvi kvartal", - "drugi kvartal", - "tre\u0107i kvartal", - "\u010detvrti kvartal", - } - }, + sharedQuarterNames }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "pre podne", - "po podne", - } - }, + sharedAmPmMarkers }, { "islamic.long.Eras", - new String[] { - "", - "AH", - } - }, + sharedEras }, { "islamic.narrow.Eras", - new String[] { - "", - "AH", - } - }, + sharedEras }, { "islamic.short.Eras", - new String[] { - "", - "AH", - } - }, + sharedEras }, { "java.time.buddhist.long.Eras", - new String[] { - "BC", - "BE", - } - }, + sharedJavaTimeLongEras }, { "java.time.buddhist.short.Eras", - new String[] { - "BC", - "BE", - } - }, + sharedJavaTimeLongEras }, { "java.time.japanese.long.Eras", new String[] { "nove ere", @@ -268,50 +249,15 @@ } }, { "roc.AmPmMarkers", - new String[] { - "pre podne", - "po podne", - } - }, + sharedAmPmMarkers }, { "roc.DayAbbreviations", - new String[] { - "ned", - "pon", - "uto", - "sre", - "\u010det", - "pet", - "sub", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "nedelja", - "ponedeljak", - "utorak", - "sreda", - "\u010detvrtak", - "petak", - "subota", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "n", - "p", - "u", - "s", - "\u010d", - "p", - "s", - } - }, + sharedDayNarrows }, { "roc.Eras", - new String[] { - "Pre RK", - "RK", - } - }, + sharedShortEras }, { "roc.MonthAbbreviations", new String[] { "jan", @@ -364,45 +310,17 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "K1", - "K2", - "K3", - "K4", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "prvi kvartal", - "drugi kvartal", - "tre\u0107i kvartal", - "\u010detvrti kvartal", - } - }, + sharedQuarterNames }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "pre podne", - "po podne", - } - }, + sharedAmPmMarkers }, { "roc.long.Eras", - new String[] { - "Pre RK", - "RK", - } - }, + sharedShortEras }, { "roc.narrow.Eras", - new String[] { - "Pre RK", - "RK", - } - }, + sharedShortEras }, { "roc.short.Eras", - new String[] { - "Pre RK", - "RK", - } - }, + sharedShortEras }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sv.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sv.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sv.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,27 +72,91 @@ public class JavaTimeSupplementary_sv extends OpenListResourceBundle { @Override protected final Object[][] getContents() { - final String[] javatimelongEras = { + final String[] sharedQuarterAbbreviations = { + "K1", + "K2", + "K3", + "K4", + }; + + final String[] sharedQuarterNames = { + "1:a kvartalet", + "2:a kvartalet", + "3:e kvartalet", + "4:e kvartalet", + }; + + final String[] sharedAmPmMarkers = { + "fm", + "em", + }; + + final String[] sharedDatePatterns = { + "EEEE d MMMM y GGGG", + "d MMMM y GGGG", + "d MMM y GGGG", + "GGGG y-MM-dd", + }; + + final String[] sharedDayAbbreviations = { + "s\u00f6n", + "m\u00e5n", + "tis", + "ons", + "tors", + "fre", + "l\u00f6r", + }; + + final String[] sharedDayNames = { + "s\u00f6ndag", + "m\u00e5ndag", + "tisdag", + "onsdag", + "torsdag", + "fredag", + "l\u00f6rdag", + }; + + final String[] sharedDayNarrows = { + "S", + "M", + "T", + "O", + "T", + "F", + "L", + }; + + final String[] sharedTimePatterns = { + "'kl'. HH:mm:ss zzzz", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE d MMMM y G", + "d MMMM y G", + "d MMM y G", + "G y-MM-dd", + }; + + final String[] sharedJavaTimeLongEras = { "f\u00f6re Kristus", "efter Kristus", }; + + final String[] sharedEras = { + "f\u00f6re R.K.", + "R.K.", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "K1", - "K2", - "K3", - "K4", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "1:a kvartalet", - "2:a kvartalet", - "3:e kvartalet", - "4:e kvartalet", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "buddistisk kalender" }, { "calendarname.gregorian", @@ -130,58 +194,15 @@ { "field.zone", "tidszon" }, { "islamic.AmPmMarkers", - new String[] { - "fm", - "em", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "EEEE d MMMM y GGGG", - "d MMMM y GGGG", - "d MMM y GGGG", - "GGGG y-MM-dd", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "s\u00f6n", - "m\u00e5n", - "tis", - "ons", - "tors", - "fre", - "l\u00f6r", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "s\u00f6ndag", - "m\u00e5ndag", - "tisdag", - "onsdag", - "torsdag", - "fredag", - "l\u00f6rdag", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "S", - "M", - "T", - "O", - "T", - "F", - "L", - } - }, - { "islamic.Eras", - new String[] { - "", - "AH", - } - }, + sharedDayNarrows }, { "islamic.MonthNames", new String[] { "muharram", @@ -200,81 +221,17 @@ } }, { "islamic.QuarterAbbreviations", - new String[] { - "K1", - "K2", - "K3", - "K4", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "1:a kvartalet", - "2:a kvartalet", - "3:e kvartalet", - "4:e kvartalet", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, + sharedQuarterNames }, { "islamic.TimePatterns", - new String[] { - "'kl'. HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedTimePatterns }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "fm", - "em", - } - }, - { "islamic.long.Eras", - new String[] { - "", - "AH", - } - }, + sharedAmPmMarkers }, { "islamic.narrow.AmPmMarkers", - new String[] { - "fm", - "em", - } - }, - { "islamic.narrow.Eras", - new String[] { - "", - "AH", - } - }, - { "islamic.short.Eras", - new String[] { - "", - "AH", - } - }, + sharedAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "d MMMM y G", - "d MMM y G", - "G y-MM-dd", - } - }, - { "java.time.buddhist.long.Eras", - new String[] { - "BC", - "BE", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.buddhist.short.Eras", new String[] { "BC", @@ -282,21 +239,9 @@ } }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "d MMMM y G", - "d MMM y G", - "G y-MM-dd", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "d MMMM y G", - "d MMM y G", - "G y-MM-dd", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.long.Eras", new String[] { "efter Kristus", @@ -316,70 +261,23 @@ } }, { "java.time.long.Eras", - javatimelongEras }, + sharedJavaTimeLongEras }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE d MMMM y G", - "d MMMM y G", - "d MMM y G", - "G y-MM-dd", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", - javatimelongEras }, + sharedJavaTimeLongEras }, { "roc.AmPmMarkers", - new String[] { - "fm", - "em", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "EEEE d MMMM y GGGG", - "d MMMM y GGGG", - "d MMM y GGGG", - "GGGG y-MM-dd", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "s\u00f6n", - "m\u00e5n", - "tis", - "ons", - "tors", - "fre", - "l\u00f6r", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "s\u00f6ndag", - "m\u00e5ndag", - "tisdag", - "onsdag", - "torsdag", - "fredag", - "l\u00f6rdag", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "S", - "M", - "T", - "O", - "T", - "F", - "L", - } - }, + sharedDayNarrows }, { "roc.Eras", - new String[] { - "f\u00f6re R.K.", - "R.K.", - } - }, + sharedEras }, { "roc.MonthAbbreviations", new String[] { "jan.", @@ -432,59 +330,21 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "K1", - "K2", - "K3", - "K4", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "1:a kvartalet", - "2:a kvartalet", - "3:e kvartalet", - "4:e kvartalet", - } - }, + sharedQuarterNames }, { "roc.TimePatterns", - new String[] { - "'kl'. HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedTimePatterns }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "fm", - "em", - } - }, + sharedAmPmMarkers }, { "roc.long.Eras", - new String[] { - "f\u00f6re R.K.", - "R.K.", - } - }, + sharedEras }, { "roc.narrow.AmPmMarkers", - new String[] { - "fm", - "em", - } - }, + sharedAmPmMarkers }, { "roc.narrow.Eras", - new String[] { - "f\u00f6re R.K.", - "R.K.", - } - }, + sharedEras }, { "roc.short.Eras", - new String[] { - "f\u00f6re R.K.", - "R.K.", - } - }, + sharedEras }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_th.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_th.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_th.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,23 +72,99 @@ public class JavaTimeSupplementary_th extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterNames = { + "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 1", + "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 2", + "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 3", + "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 4", + }; + + final String[] sharedAmPmMarkers = { + "\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07", + "\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07", + }; + + final String[] sharedDayAbbreviations = { + "\u0e2d\u0e32.", + "\u0e08.", + "\u0e2d.", + "\u0e1e.", + "\u0e1e\u0e24.", + "\u0e28.", + "\u0e2a.", + }; + + final String[] sharedDayNames = { + "\u0e27\u0e31\u0e19\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c", + "\u0e27\u0e31\u0e19\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c", + "\u0e27\u0e31\u0e19\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23", + "\u0e27\u0e31\u0e19\u0e1e\u0e38\u0e18", + "\u0e27\u0e31\u0e19\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35", + "\u0e27\u0e31\u0e19\u0e28\u0e38\u0e01\u0e23\u0e4c", + "\u0e27\u0e31\u0e19\u0e40\u0e2a\u0e32\u0e23\u0e4c", + }; + + final String[] sharedDayNarrows = { + "\u0e2d\u0e32", + "\u0e08", + "\u0e2d", + "\u0e1e", + "\u0e1e\u0e24", + "\u0e28", + "\u0e2a", + }; + + final String[] sharedEras = { + "", + "\u0e2e.\u0e28.", + }; + + final String[] sharedTimePatterns = { + "H \u0e19\u0e32\u0e2c\u0e34\u0e01\u0e32 mm \u0e19\u0e32\u0e17\u0e35 ss \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35 zzzz", + "H \u0e19\u0e32\u0e2c\u0e34\u0e01\u0e32 mm \u0e19\u0e32\u0e17\u0e35 ss \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35 z", + "HH:mm:ss", + "HH:mm", + }; + + final String[] sharedNarrowAmPmMarkers = { + "a", + "p", + }; + + final String[] sharedJavaTimeLongEras = { + "\u0e04.\u0e28.", + "\u0e40\u0e21\u0e08\u0e34", + "\u0e17\u0e30\u0e2d\u0e34\u0e42\u0e0a", + "\u0e42\u0e0a\u0e27\u0e30", + "\u0e40\u0e2e\u0e40\u0e0b", + }; + + final String[] sharedShortEras = { + "\u0e1b\u0e35\u0e01\u0e48\u0e2d\u0e19\u0e44\u0e15\u0e49\u0e2b\u0e27\u0e31\u0e19", + "\u0e44\u0e15\u0e49\u0e2b\u0e27\u0e31\u0e19", + }; + + final String[] sharedMonthNarrows = { + "\u0e21.\u0e04.", + "\u0e01.\u0e1e.", + "\u0e21\u0e35.\u0e04.", + "\u0e40\u0e21.\u0e22.", + "\u0e1e.\u0e04.", + "\u0e21\u0e34.\u0e22.", + "\u0e01.\u0e04.", + "\u0e2a.\u0e04.", + "\u0e01.\u0e22.", + "\u0e15.\u0e04.", + "\u0e1e.\u0e22.", + "\u0e18.\u0e04.", + "", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 1", - "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 2", - "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 3", - "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 4", - } - }, + sharedQuarterNames }, { "QuarterNames", - new String[] { - "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 1", - "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 2", - "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 3", - "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 4", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "\u0e1b\u0e0f\u0e34\u0e17\u0e34\u0e19\u0e1e\u0e38\u0e17\u0e18" }, { "calendarname.gregorian", @@ -126,11 +202,7 @@ { "field.zone", "\u0e40\u0e02\u0e15\u0e40\u0e27\u0e25\u0e32" }, { "islamic.AmPmMarkers", - new String[] { - "\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07", - "\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", new String[] { "EEEE\u0e17\u0e35\u0e48 d MMMM GGGG y", @@ -140,44 +212,13 @@ } }, { "islamic.DayAbbreviations", - new String[] { - "\u0e2d\u0e32.", - "\u0e08.", - "\u0e2d.", - "\u0e1e.", - "\u0e1e\u0e24.", - "\u0e28.", - "\u0e2a.", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "\u0e27\u0e31\u0e19\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c", - "\u0e27\u0e31\u0e19\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c", - "\u0e27\u0e31\u0e19\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23", - "\u0e27\u0e31\u0e19\u0e1e\u0e38\u0e18", - "\u0e27\u0e31\u0e19\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35", - "\u0e27\u0e31\u0e19\u0e28\u0e38\u0e01\u0e23\u0e4c", - "\u0e27\u0e31\u0e19\u0e40\u0e2a\u0e32\u0e23\u0e4c", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "\u0e2d\u0e32", - "\u0e08", - "\u0e2d", - "\u0e1e", - "\u0e1e\u0e24", - "\u0e28", - "\u0e2a", - } - }, + sharedDayNarrows }, { "islamic.Eras", - new String[] { - "", - "\u0e2e.\u0e28.", - } - }, + sharedEras }, { "islamic.MonthAbbreviations", new String[] { "\u0e21\u0e38\u0e2e\u0e31\u0e23.", @@ -213,43 +254,13 @@ } }, { "islamic.QuarterAbbreviations", - new String[] { - "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 1", - "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 2", - "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 3", - "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 4", - } - }, + sharedQuarterNames }, { "islamic.QuarterNames", - new String[] { - "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 1", - "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 2", - "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 3", - "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 4", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, + sharedQuarterNames }, { "islamic.TimePatterns", - new String[] { - "H \u0e19\u0e32\u0e2c\u0e34\u0e01\u0e32 mm \u0e19\u0e32\u0e17\u0e35 ss \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35 zzzz", - "H \u0e19\u0e32\u0e2c\u0e34\u0e01\u0e32 mm \u0e19\u0e32\u0e17\u0e35 ss \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35 z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedTimePatterns }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07", - "\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07", - } - }, + sharedAmPmMarkers }, { "islamic.long.Eras", new String[] { "", @@ -257,23 +268,11 @@ } }, { "islamic.narrow.AmPmMarkers", - new String[] { - "a", - "p", - } - }, + sharedNarrowAmPmMarkers }, { "islamic.narrow.Eras", - new String[] { - "", - "\u0e2e.\u0e28.", - } - }, + sharedEras }, { "islamic.short.Eras", - new String[] { - "", - "\u0e2e.\u0e28.", - } - }, + sharedEras }, { "java.time.buddhist.DatePatterns", new String[] { "EEEE\u0e17\u0e35\u0e48 d MMMM G y", @@ -311,23 +310,9 @@ } }, { "java.time.japanese.long.Eras", - new String[] { - "\u0e04.\u0e28.", - "\u0e40\u0e21\u0e08\u0e34", - "\u0e17\u0e30\u0e2d\u0e34\u0e42\u0e0a", - "\u0e42\u0e0a\u0e27\u0e30", - "\u0e40\u0e2e\u0e40\u0e0b", - } - }, + sharedJavaTimeLongEras }, { "java.time.japanese.short.Eras", - new String[] { - "\u0e04.\u0e28.", - "\u0e40\u0e21\u0e08\u0e34", - "\u0e17\u0e30\u0e2d\u0e34\u0e42\u0e0a", - "\u0e42\u0e0a\u0e27\u0e30", - "\u0e40\u0e2e\u0e40\u0e0b", - } - }, + sharedJavaTimeLongEras }, { "java.time.long.Eras", new String[] { "\u0e1b\u0e35\u0e01\u0e48\u0e2d\u0e19\u0e04\u0e23\u0e34\u0e2a\u0e15\u0e4c\u0e28\u0e31\u0e01\u0e23\u0e32\u0e0a", @@ -349,11 +334,7 @@ } }, { "roc.AmPmMarkers", - new String[] { - "\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07", - "\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", new String[] { "EEEE\u0e17\u0e35\u0e48 d MMMM \u0e1b\u0e35GGGG\u0e17\u0e35\u0e48 y", @@ -363,61 +344,15 @@ } }, { "roc.DayAbbreviations", - new String[] { - "\u0e2d\u0e32.", - "\u0e08.", - "\u0e2d.", - "\u0e1e.", - "\u0e1e\u0e24.", - "\u0e28.", - "\u0e2a.", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "\u0e27\u0e31\u0e19\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c", - "\u0e27\u0e31\u0e19\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c", - "\u0e27\u0e31\u0e19\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23", - "\u0e27\u0e31\u0e19\u0e1e\u0e38\u0e18", - "\u0e27\u0e31\u0e19\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35", - "\u0e27\u0e31\u0e19\u0e28\u0e38\u0e01\u0e23\u0e4c", - "\u0e27\u0e31\u0e19\u0e40\u0e2a\u0e32\u0e23\u0e4c", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "\u0e2d\u0e32", - "\u0e08", - "\u0e2d", - "\u0e1e", - "\u0e1e\u0e24", - "\u0e28", - "\u0e2a", - } - }, + sharedDayNarrows }, { "roc.Eras", - new String[] { - "\u0e1b\u0e35\u0e01\u0e48\u0e2d\u0e19\u0e44\u0e15\u0e49\u0e2b\u0e27\u0e31\u0e19", - "\u0e44\u0e15\u0e49\u0e2b\u0e27\u0e31\u0e19", - } - }, + sharedShortEras }, { "roc.MonthAbbreviations", - new String[] { - "\u0e21.\u0e04.", - "\u0e01.\u0e1e.", - "\u0e21\u0e35.\u0e04.", - "\u0e40\u0e21.\u0e22.", - "\u0e1e.\u0e04.", - "\u0e21\u0e34.\u0e22.", - "\u0e01.\u0e04.", - "\u0e2a.\u0e04.", - "\u0e01.\u0e22.", - "\u0e15.\u0e04.", - "\u0e1e.\u0e22.", - "\u0e18.\u0e04.", - "", - } - }, + sharedMonthNarrows }, { "roc.MonthNames", new String[] { "\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21", @@ -436,76 +371,23 @@ } }, { "roc.MonthNarrows", - new String[] { - "\u0e21.\u0e04.", - "\u0e01.\u0e1e.", - "\u0e21\u0e35.\u0e04.", - "\u0e40\u0e21.\u0e22.", - "\u0e1e.\u0e04.", - "\u0e21\u0e34.\u0e22.", - "\u0e01.\u0e04.", - "\u0e2a.\u0e04.", - "\u0e01.\u0e22.", - "\u0e15.\u0e04.", - "\u0e1e.\u0e22.", - "\u0e18.\u0e04.", - "", - } - }, + sharedMonthNarrows }, { "roc.QuarterAbbreviations", - new String[] { - "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 1", - "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 2", - "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 3", - "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 4", - } - }, + sharedQuarterNames }, { "roc.QuarterNames", - new String[] { - "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 1", - "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 2", - "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 3", - "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 4", - } - }, + sharedQuarterNames }, { "roc.TimePatterns", - new String[] { - "H \u0e19\u0e32\u0e2c\u0e34\u0e01\u0e32 mm \u0e19\u0e32\u0e17\u0e35 ss \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35 zzzz", - "H \u0e19\u0e32\u0e2c\u0e34\u0e01\u0e32 mm \u0e19\u0e32\u0e17\u0e35 ss \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35 z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedTimePatterns }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07", - "\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07", - } - }, + sharedAmPmMarkers }, { "roc.long.Eras", - new String[] { - "\u0e1b\u0e35\u0e01\u0e48\u0e2d\u0e19\u0e44\u0e15\u0e49\u0e2b\u0e27\u0e31\u0e19", - "\u0e44\u0e15\u0e49\u0e2b\u0e27\u0e31\u0e19", - } - }, + sharedShortEras }, { "roc.narrow.AmPmMarkers", - new String[] { - "a", - "p", - } - }, + sharedNarrowAmPmMarkers }, { "roc.narrow.Eras", - new String[] { - "\u0e1b\u0e35\u0e01\u0e48\u0e2d\u0e19\u0e44\u0e15\u0e49\u0e2b\u0e27\u0e31\u0e19", - "\u0e44\u0e15\u0e49\u0e2b\u0e27\u0e31\u0e19", - } - }, + sharedShortEras }, { "roc.short.Eras", - new String[] { - "\u0e1b\u0e35\u0e01\u0e48\u0e2d\u0e19\u0e44\u0e15\u0e49\u0e2b\u0e27\u0e31\u0e19", - "\u0e44\u0e15\u0e49\u0e2b\u0e27\u0e31\u0e19", - } - }, + sharedShortEras }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_tr.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_tr.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_tr.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,31 +72,114 @@ public class JavaTimeSupplementary_tr extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "\u00c71", + "\u00c72", + "\u00c73", + "\u00c74", + }; + + final String[] sharedQuarterNames = { + "1. \u00e7eyrek", + "2. \u00e7eyrek", + "3. \u00e7eyrek", + "4. \u00e7eyrek", + }; + + final String[] sharedQuarterNarrows = { + "1.", + "2.", + "3.", + "4.", + }; + + final String[] sharedAmPmMarkers = { + "\u00d6\u00d6", + "\u00d6S", + }; + + final String[] sharedDatePatterns = { + "GGGG d MMMM y EEEE", + "GGGG d MMMM y", + "GGGG d MMM y", + "G d.MM.y", + }; + + final String[] sharedDayAbbreviations = { + "Paz", + "Pzt", + "Sal", + "\u00c7ar", + "Per", + "Cum", + "Cmt", + }; + + final String[] sharedDayNames = { + "Pazar", + "Pazartesi", + "Sal\u0131", + "\u00c7ar\u015famba", + "Per\u015fembe", + "Cuma", + "Cumartesi", + }; + + final String[] sharedDayNarrows = { + "P", + "P", + "S", + "\u00c7", + "P", + "C", + "C", + }; + + final String[] sharedEras = { + "", + "Hicri", + }; + + final String[] sharedMonthNames = { + "Muharrem", + "Safer", + "Rebi\u00fclevvel", + "Rebi\u00fclahir", + "Cemaziyelevvel", + "Cemaziyelahir", + "Recep", + "\u015eaban", + "Ramazan", + "\u015eevval", + "Zilkade", + "Zilhicce", + "", + }; + + final String[] sharedNarrowAmPmMarkers = { + "\u00f6\u00f6", + "\u00f6s", + }; + + final String[] sharedJavaTimeDatePatterns = { + "G d MMMM y EEEE", + "G d MMMM y", + "G d MMM y", + "GGGGG d.MM.y", + }; + + final String[] sharedShortEras = { + "Before R.O.C.", + "Minguo", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "\u00c71", - "\u00c72", - "\u00c73", - "\u00c74", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "1. \u00e7eyrek", - "2. \u00e7eyrek", - "3. \u00e7eyrek", - "4. \u00e7eyrek", - } - }, + sharedQuarterNames }, { "QuarterNarrows", - new String[] { - "1.", - "2.", - "3.", - "4.", - } - }, + sharedQuarterNarrows }, { "calendarname.buddhist", "Budist Takvimi" }, { "calendarname.gregorian", @@ -134,168 +217,39 @@ { "field.zone", "Saat Dilimi" }, { "islamic.AmPmMarkers", - new String[] { - "\u00d6\u00d6", - "\u00d6S", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "GGGG d MMMM y EEEE", - "GGGG d MMMM y", - "GGGG d MMM y", - "G d.MM.y", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "Paz", - "Pzt", - "Sal", - "\u00c7ar", - "Per", - "Cum", - "Cmt", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "Pazar", - "Pazartesi", - "Sal\u0131", - "\u00c7ar\u015famba", - "Per\u015fembe", - "Cuma", - "Cumartesi", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "P", - "P", - "S", - "\u00c7", - "P", - "C", - "C", - } - }, + sharedDayNarrows }, { "islamic.Eras", - new String[] { - "", - "Hicri", - } - }, + sharedEras }, { "islamic.MonthAbbreviations", - new String[] { - "Muharrem", - "Safer", - "Rebi\u00fclevvel", - "Rebi\u00fclahir", - "Cemaziyelevvel", - "Cemaziyelahir", - "Recep", - "\u015eaban", - "Ramazan", - "\u015eevval", - "Zilkade", - "Zilhicce", - "", - } - }, + sharedMonthNames }, { "islamic.MonthNames", - new String[] { - "Muharrem", - "Safer", - "Rebi\u00fclevvel", - "Rebi\u00fclahir", - "Cemaziyelevvel", - "Cemaziyelahir", - "Recep", - "\u015eaban", - "Ramazan", - "\u015eevval", - "Zilkade", - "Zilhicce", - "", - } - }, + sharedMonthNames }, { "islamic.QuarterAbbreviations", - new String[] { - "\u00c71", - "\u00c72", - "\u00c73", - "\u00c74", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "1. \u00e7eyrek", - "2. \u00e7eyrek", - "3. \u00e7eyrek", - "4. \u00e7eyrek", - } - }, + sharedQuarterNames }, { "islamic.QuarterNarrows", - new String[] { - "1.", - "2.", - "3.", - "4.", - } - }, - { "islamic.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedQuarterNarrows }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "\u00d6\u00d6", - "\u00d6S", - } - }, + sharedAmPmMarkers }, { "islamic.long.Eras", - new String[] { - "", - "Hicri", - } - }, + sharedEras }, { "islamic.narrow.AmPmMarkers", - new String[] { - "\u00f6\u00f6", - "\u00f6s", - } - }, + sharedNarrowAmPmMarkers }, { "islamic.narrow.Eras", - new String[] { - "", - "Hicri", - } - }, + sharedEras }, { "islamic.short.Eras", - new String[] { - "", - "Hicri", - } - }, + sharedEras }, { "java.time.buddhist.DatePatterns", - new String[] { - "G d MMMM y EEEE", - "G d MMMM y", - "G d MMM y", - "GGGGG d.MM.y", - } - }, - { "java.time.buddhist.long.Eras", - new String[] { - "BC", - "BE", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.buddhist.short.Eras", new String[] { "BC", @@ -303,13 +257,7 @@ } }, { "java.time.islamic.DatePatterns", - new String[] { - "G d MMMM y EEEE", - "G d MMMM y", - "G d MMM y", - "GGGGG d.MM.y", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", new String[] { "d MMMM y G EEEE", @@ -325,13 +273,7 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "G d MMMM y EEEE", - "G d MMMM y", - "G d MMM y", - "GGGGG d.MM.y", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "M\u00d6", @@ -339,58 +281,17 @@ } }, { "roc.AmPmMarkers", - new String[] { - "\u00d6\u00d6", - "\u00d6S", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "GGGG d MMMM y EEEE", - "GGGG d MMMM y", - "GGGG d MMM y", - "G d.MM.y", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "Paz", - "Pzt", - "Sal", - "\u00c7ar", - "Per", - "Cum", - "Cmt", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "Pazar", - "Pazartesi", - "Sal\u0131", - "\u00c7ar\u015famba", - "Per\u015fembe", - "Cuma", - "Cumartesi", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "P", - "P", - "S", - "\u00c7", - "P", - "C", - "C", - } - }, + sharedDayNarrows }, { "roc.Eras", - new String[] { - "Before R.O.C.", - "Minguo", - } - }, + sharedShortEras }, { "roc.MonthAbbreviations", new String[] { "Oca", @@ -443,67 +344,21 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "\u00c71", - "\u00c72", - "\u00c73", - "\u00c74", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "1. \u00e7eyrek", - "2. \u00e7eyrek", - "3. \u00e7eyrek", - "4. \u00e7eyrek", - } - }, + sharedQuarterNames }, { "roc.QuarterNarrows", - new String[] { - "1.", - "2.", - "3.", - "4.", - } - }, - { "roc.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedQuarterNarrows }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "\u00d6\u00d6", - "\u00d6S", - } - }, + sharedAmPmMarkers }, { "roc.long.Eras", - new String[] { - "Before R.O.C.", - "Minguo", - } - }, + sharedShortEras }, { "roc.narrow.AmPmMarkers", - new String[] { - "\u00f6\u00f6", - "\u00f6s", - } - }, + sharedNarrowAmPmMarkers }, { "roc.narrow.Eras", - new String[] { - "Before R.O.C.", - "Minguo", - } - }, + sharedShortEras }, { "roc.short.Eras", - new String[] { - "Before R.O.C.", - "Minguo", - } - }, + sharedShortEras }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_uk.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_uk.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_uk.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,23 +72,74 @@ public class JavaTimeSupplementary_uk extends OpenListResourceBundle { @Override protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "1-\u0439 \u043a\u0432.", + "2-\u0439 \u043a\u0432.", + "3-\u0439 \u043a\u0432.", + "4-\u0439 \u043a\u0432.", + }; + + final String[] sharedQuarterNames = { + "1-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", + "2-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", + "3-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", + "4-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", + }; + + final String[] sharedAmPmMarkers = { + "\u0434\u043f", + "\u043f\u043f", + }; + + final String[] sharedDatePatterns = { + "EEEE, d MMMM y '\u0440'. GGGG", + "d MMMM y '\u0440'. GGGG", + "d MMM y GGGG", + "dd.MM.yy G", + }; + + final String[] sharedDayAbbreviations = { + "\u041d\u0434", + "\u041f\u043d", + "\u0412\u0442", + "\u0421\u0440", + "\u0427\u0442", + "\u041f\u0442", + "\u0421\u0431", + }; + + final String[] sharedDayNames = { + "\u043d\u0435\u0434\u0456\u043b\u044f", + "\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a", + "\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a", + "\u0441\u0435\u0440\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0435\u0440", + "\u043f\u02bc\u044f\u0442\u043d\u0438\u0446\u044f", + "\u0441\u0443\u0431\u043e\u0442\u0430", + }; + + final String[] sharedDayNarrows = { + "\u041d", + "\u041f", + "\u0412", + "\u0421", + "\u0427", + "\u041f", + "\u0421", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, d MMMM y '\u0440'. G", + "d MMMM y '\u0440'. G", + "d MMM y G", + "dd.MM.yy GGGGG", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "1-\u0439 \u043a\u0432.", - "2-\u0439 \u043a\u0432.", - "3-\u0439 \u043a\u0432.", - "4-\u0439 \u043a\u0432.", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "1-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "2-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "3-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "4-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "\u0431\u0443\u0434\u0434\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440" }, { "calendarname.gregorian", @@ -124,52 +175,15 @@ { "field.zone", "\u0447\u0430\u0441\u043e\u0432\u0438\u0439 \u043f\u043e\u044f\u0441" }, { "islamic.AmPmMarkers", - new String[] { - "\u0434\u043f", - "\u043f\u043f", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", - new String[] { - "EEEE, d MMMM y '\u0440'. GGGG", - "d MMMM y '\u0440'. GGGG", - "d MMM y GGGG", - "dd.MM.yy G", - } - }, + sharedDatePatterns }, { "islamic.DayAbbreviations", - new String[] { - "\u041d\u0434", - "\u041f\u043d", - "\u0412\u0442", - "\u0421\u0440", - "\u0427\u0442", - "\u041f\u0442", - "\u0421\u0431", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "\u043d\u0435\u0434\u0456\u043b\u044f", - "\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a", - "\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a", - "\u0441\u0435\u0440\u0435\u0434\u0430", - "\u0447\u0435\u0442\u0432\u0435\u0440", - "\u043f\u02bc\u044f\u0442\u043d\u0438\u0446\u044f", - "\u0441\u0443\u0431\u043e\u0442\u0430", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "\u041d", - "\u041f", - "\u0412", - "\u0421", - "\u0427", - "\u041f", - "\u0421", - } - }, + sharedDayNarrows }, { "islamic.MonthNames", new String[] { "\u041c\u0443\u0445\u0430\u0440\u0440\u0430\u043c", @@ -188,73 +202,19 @@ } }, { "islamic.QuarterAbbreviations", - new String[] { - "1-\u0439 \u043a\u0432.", - "2-\u0439 \u043a\u0432.", - "3-\u0439 \u043a\u0432.", - "4-\u0439 \u043a\u0432.", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "1-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "2-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "3-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "4-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, - { "islamic.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedQuarterNames }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "\u0434\u043f", - "\u043f\u043f", - } - }, + sharedAmPmMarkers }, { "islamic.narrow.AmPmMarkers", - new String[] { - "\u0434\u043f", - "\u043f\u043f", - } - }, + sharedAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE, d MMMM y '\u0440'. G", - "d MMMM y '\u0440'. G", - "d MMM y G", - "dd.MM.yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.islamic.DatePatterns", - new String[] { - "EEEE, d MMMM y '\u0440'. G", - "d MMMM y '\u0440'. G", - "d MMM y G", - "dd.MM.yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.japanese.DatePatterns", - new String[] { - "EEEE, d MMMM y '\u0440'. G", - "d MMMM y '\u0440'. G", - "d MMM y G", - "dd.MM.yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.long.Eras", new String[] { "\u0434\u043e \u043d\u0430\u0448\u043e\u0457 \u0435\u0440\u0438", @@ -262,13 +222,7 @@ } }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE, d MMMM y '\u0440'. G", - "d MMMM y '\u0440'. G", - "d MMM y G", - "dd.MM.yy GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", new String[] { "\u0434\u043e \u043d.\u0435.", @@ -276,52 +230,15 @@ } }, { "roc.AmPmMarkers", - new String[] { - "\u0434\u043f", - "\u043f\u043f", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", - new String[] { - "EEEE, d MMMM y '\u0440'. GGGG", - "d MMMM y '\u0440'. GGGG", - "d MMM y GGGG", - "dd.MM.yy G", - } - }, + sharedDatePatterns }, { "roc.DayAbbreviations", - new String[] { - "\u041d\u0434", - "\u041f\u043d", - "\u0412\u0442", - "\u0421\u0440", - "\u0427\u0442", - "\u041f\u0442", - "\u0421\u0431", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "\u043d\u0435\u0434\u0456\u043b\u044f", - "\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a", - "\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a", - "\u0441\u0435\u0440\u0435\u0434\u0430", - "\u0447\u0435\u0442\u0432\u0435\u0440", - "\u043f\u02bc\u044f\u0442\u043d\u0438\u0446\u044f", - "\u0441\u0443\u0431\u043e\u0442\u0430", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "\u041d", - "\u041f", - "\u0412", - "\u0421", - "\u0427", - "\u041f", - "\u0421", - } - }, + sharedDayNarrows }, { "roc.MonthAbbreviations", new String[] { "\u0441\u0456\u0447.", @@ -374,41 +291,13 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "1-\u0439 \u043a\u0432.", - "2-\u0439 \u043a\u0432.", - "3-\u0439 \u043a\u0432.", - "4-\u0439 \u043a\u0432.", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "1-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "2-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "3-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "4-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - } - }, - { "roc.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedQuarterNames }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "\u0434\u043f", - "\u043f\u043f", - } - }, + sharedAmPmMarkers }, { "roc.narrow.AmPmMarkers", - new String[] { - "\u0434\u043f", - "\u043f\u043f", - } - }, + sharedAmPmMarkers }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_vi.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_vi.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_vi.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,19 +72,80 @@ public class JavaTimeSupplementary_vi extends OpenListResourceBundle { @Override protected final Object[][] getContents() { - final String[] javatimelongEras = { + final String[] sharedQuarterNames = { + "Qu\u00fd 1", + "Qu\u00fd 2", + "Qu\u00fd 3", + "Qu\u00fd 4", + }; + + final String[] sharedAmPmMarkers = { + "SA", + "CH", + }; + + final String[] sharedDayAbbreviations = { + "CN", + "Th 2", + "Th 3", + "Th 4", + "Th 5", + "Th 6", + "Th 7", + }; + + final String[] sharedDayNames = { + "Ch\u1ee7 Nh\u1eadt", + "Th\u1ee9 Hai", + "Th\u1ee9 Ba", + "Th\u1ee9 T\u01b0", + "Th\u1ee9 N\u0103m", + "Th\u1ee9 S\u00e1u", + "Th\u1ee9 B\u1ea3y", + }; + + final String[] sharedDayNarrows = { + "CN", + "T2", + "T3", + "T4", + "T5", + "T6", + "T7", + }; + + final String[] sharedQuarterAbbreviations = { + "Q1", + "Q2", + "Q3", + "Q4", + }; + + final String[] sharedNarrowAmPmMarkers = { + "s", + "c", + }; + + final String[] sharedJavaTimeDatePatterns = { + "EEEE, 'ng\u00e0y' dd MMMM 'n\u0103m' y G", + "'Ng\u00e0y' dd 'th\u00e1ng' M 'n\u0103m' y G", + "dd-MM-y G", + "dd/MM/y GGGGG", + }; + + final String[] sharedJavaTimeLongEras = { "tr. CN", "sau CN", }; + + final String[] sharedEras = { + "Tr\u01b0\u1edbc R.O.C", + "R.O.C.", + }; + return new Object[][] { { "QuarterNames", - new String[] { - "Qu\u00fd 1", - "Qu\u00fd 2", - "Qu\u00fd 3", - "Qu\u00fd 4", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "L\u1ecbch Ph\u1eadt Gi\u00e1o" }, { "calendarname.gregorian", @@ -122,11 +183,7 @@ { "field.zone", "M\u00fai gi\u1edd" }, { "islamic.AmPmMarkers", - new String[] { - "SA", - "CH", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", new String[] { "EEEE, 'ng\u00e0y' dd 'th\u00e1ng' MM 'n\u0103m' y GGGG", @@ -136,120 +193,21 @@ } }, { "islamic.DayAbbreviations", - new String[] { - "CN", - "Th 2", - "Th 3", - "Th 4", - "Th 5", - "Th 6", - "Th 7", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "Ch\u1ee7 Nh\u1eadt", - "Th\u1ee9 Hai", - "Th\u1ee9 Ba", - "Th\u1ee9 T\u01b0", - "Th\u1ee9 N\u0103m", - "Th\u1ee9 S\u00e1u", - "Th\u1ee9 B\u1ea3y", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "CN", - "T2", - "T3", - "T4", - "T5", - "T6", - "T7", - } - }, - { "islamic.Eras", - new String[] { - "", - "AH", - } - }, + sharedDayNarrows }, { "islamic.QuarterAbbreviations", - new String[] { - "Q1", - "Q2", - "Q3", - "Q4", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "Qu\u00fd 1", - "Qu\u00fd 2", - "Qu\u00fd 3", - "Qu\u00fd 4", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, - { "islamic.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedQuarterNames }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "SA", - "CH", - } - }, - { "islamic.long.Eras", - new String[] { - "", - "AH", - } - }, + sharedAmPmMarkers }, { "islamic.narrow.AmPmMarkers", - new String[] { - "s", - "c", - } - }, - { "islamic.narrow.Eras", - new String[] { - "", - "AH", - } - }, - { "islamic.short.Eras", - new String[] { - "", - "AH", - } - }, + sharedNarrowAmPmMarkers }, { "java.time.buddhist.DatePatterns", - new String[] { - "EEEE, 'ng\u00e0y' dd MMMM 'n\u0103m' y G", - "'Ng\u00e0y' dd 'th\u00e1ng' M 'n\u0103m' y G", - "dd-MM-y G", - "dd/MM/y GGGGG", - } - }, - { "java.time.buddhist.long.Eras", - new String[] { - "BC", - "BE", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.buddhist.short.Eras", new String[] { "BC", @@ -273,23 +231,13 @@ } }, { "java.time.long.Eras", - javatimelongEras }, + sharedJavaTimeLongEras }, { "java.time.roc.DatePatterns", - new String[] { - "EEEE, 'ng\u00e0y' dd MMMM 'n\u0103m' y G", - "'Ng\u00e0y' dd 'th\u00e1ng' M 'n\u0103m' y G", - "dd-MM-y G", - "dd/MM/y GGGGG", - } - }, + sharedJavaTimeDatePatterns }, { "java.time.short.Eras", - javatimelongEras }, + sharedJavaTimeLongEras }, { "roc.AmPmMarkers", - new String[] { - "SA", - "CH", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", new String[] { "EEEE, 'ng\u00e0y' dd MMMM 'n\u0103m' y GGGG", @@ -299,44 +247,13 @@ } }, { "roc.DayAbbreviations", - new String[] { - "CN", - "Th 2", - "Th 3", - "Th 4", - "Th 5", - "Th 6", - "Th 7", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "Ch\u1ee7 Nh\u1eadt", - "Th\u1ee9 Hai", - "Th\u1ee9 Ba", - "Th\u1ee9 T\u01b0", - "Th\u1ee9 N\u0103m", - "Th\u1ee9 S\u00e1u", - "Th\u1ee9 B\u1ea3y", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "CN", - "T2", - "T3", - "T4", - "T5", - "T6", - "T7", - } - }, + sharedDayNarrows }, { "roc.Eras", - new String[] { - "Tr\u01b0\u1edbc R.O.C", - "R.O.C.", - } - }, + sharedEras }, { "roc.MonthAbbreviations", new String[] { "thg 1", @@ -371,77 +288,20 @@ "", } }, - { "roc.MonthNarrows", - new String[] { - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "10", - "11", - "12", - "", - } - }, { "roc.QuarterAbbreviations", - new String[] { - "Q1", - "Q2", - "Q3", - "Q4", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "Qu\u00fd 1", - "Qu\u00fd 2", - "Qu\u00fd 3", - "Qu\u00fd 4", - } - }, - { "roc.TimePatterns", - new String[] { - "HH:mm:ss zzzz", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - } - }, + sharedQuarterNames }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "SA", - "CH", - } - }, + sharedAmPmMarkers }, { "roc.long.Eras", - new String[] { - "Tr\u01b0\u1edbc R.O.C", - "R.O.C.", - } - }, + sharedEras }, { "roc.narrow.AmPmMarkers", - new String[] { - "s", - "c", - } - }, + sharedNarrowAmPmMarkers }, { "roc.narrow.Eras", - new String[] { - "Tr\u01b0\u1edbc R.O.C", - "R.O.C.", - } - }, + sharedEras }, { "roc.short.Eras", - new String[] { - "Tr\u01b0\u1edbc R.O.C", - "R.O.C.", - } - }, + sharedEras }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_zh.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_zh.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_zh.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,7 +72,61 @@ public class JavaTimeSupplementary_zh extends OpenListResourceBundle { @Override protected final Object[][] getContents() { - final String[] rocMonthAbbreviations = { + final String[] sharedQuarterAbbreviations = { + "1\u5b63\u5ea6", + "2\u5b63\u5ea6", + "3\u5b63\u5ea6", + "4\u5b63\u5ea6", + }; + + final String[] sharedQuarterNames = { + "\u7b2c\u4e00\u5b63\u5ea6", + "\u7b2c\u4e8c\u5b63\u5ea6", + "\u7b2c\u4e09\u5b63\u5ea6", + "\u7b2c\u56db\u5b63\u5ea6", + }; + + final String[] sharedAmPmMarkers = { + "\u4e0a\u5348", + "\u4e0b\u5348", + }; + + final String[] sharedDayAbbreviations = { + "\u5468\u65e5", + "\u5468\u4e00", + "\u5468\u4e8c", + "\u5468\u4e09", + "\u5468\u56db", + "\u5468\u4e94", + "\u5468\u516d", + }; + + final String[] sharedDayNames = { + "\u661f\u671f\u65e5", + "\u661f\u671f\u4e00", + "\u661f\u671f\u4e8c", + "\u661f\u671f\u4e09", + "\u661f\u671f\u56db", + "\u661f\u671f\u4e94", + "\u661f\u671f\u516d", + }; + + final String[] sharedDayNarrows = { + "\u65e5", + "\u4e00", + "\u4e8c", + "\u4e09", + "\u56db", + "\u4e94", + "\u516d", + }; + + final String[] sharedEras = { + "", + "\u4f0a\u65af\u5170\u5386", + }; + + final String[] sharedMonthAbbreviations = { "1\u6708", "2\u6708", "3\u6708", @@ -87,7 +141,8 @@ "12\u6708", "", }; - final String[] rocMonthNames = { + + final String[] sharedMonthNames = { "\u4e00\u6708", "\u4e8c\u6708", "\u4e09\u6708", @@ -102,31 +157,42 @@ "\u5341\u4e8c\u6708", "", }; - final String[] javatimebuddhistlongEras = { + + final String[] sharedTimePatterns = { + "zzzz ah:mm:ss", + "z ah:mm:ss", + "ah:mm:ss", + "ah:mm", + }; + + final String[] sharedJavaTimeLongEras = { "BC", "\u4f5b\u5386", }; - final String[] javatimelongEras = { + + final String[] sharedJavaTimeShortEras = { + "\u516c\u5143", + "\u660e\u6cbb", + "\u5927\u6b63", + "\u662d\u548c", + "\u5e73\u6210", + }; + + final String[] sharedJavaTimeShortEras2 = { "\u516c\u5143\u524d", "\u516c\u5143", }; + + final String[] sharedShortEras = { + "\u6c11\u56fd\u524d", + "\u6c11\u56fd", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "1\u5b63\u5ea6", - "2\u5b63\u5ea6", - "3\u5b63\u5ea6", - "4\u5b63\u5ea6", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "\u7b2c\u4e00\u5b63\u5ea6", - "\u7b2c\u4e8c\u5b63\u5ea6", - "\u7b2c\u4e09\u5b63\u5ea6", - "\u7b2c\u56db\u5b63\u5ea6", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "\u4f5b\u6559\u65e5\u5386" }, { "calendarname.gregorian", @@ -162,11 +228,7 @@ { "field.zone", "\u65f6\u533a" }, { "islamic.AmPmMarkers", - new String[] { - "\u4e0a\u5348", - "\u4e0b\u5348", - } - }, + sharedAmPmMarkers }, { "islamic.DatePatterns", new String[] { "GGGGy\u5e74M\u6708d\u65e5EEEE", @@ -176,110 +238,33 @@ } }, { "islamic.DayAbbreviations", - new String[] { - "\u5468\u65e5", - "\u5468\u4e00", - "\u5468\u4e8c", - "\u5468\u4e09", - "\u5468\u56db", - "\u5468\u4e94", - "\u5468\u516d", - } - }, + sharedDayAbbreviations }, { "islamic.DayNames", - new String[] { - "\u661f\u671f\u65e5", - "\u661f\u671f\u4e00", - "\u661f\u671f\u4e8c", - "\u661f\u671f\u4e09", - "\u661f\u671f\u56db", - "\u661f\u671f\u4e94", - "\u661f\u671f\u516d", - } - }, + sharedDayNames }, { "islamic.DayNarrows", - new String[] { - "\u65e5", - "\u4e00", - "\u4e8c", - "\u4e09", - "\u56db", - "\u4e94", - "\u516d", - } - }, + sharedDayNarrows }, { "islamic.Eras", - new String[] { - "", - "\u4f0a\u65af\u5170\u5386", - } - }, + sharedEras }, { "islamic.MonthAbbreviations", - rocMonthAbbreviations }, + sharedMonthAbbreviations }, { "islamic.MonthNames", - rocMonthNames }, + sharedMonthNames }, { "islamic.QuarterAbbreviations", - new String[] { - "1\u5b63\u5ea6", - "2\u5b63\u5ea6", - "3\u5b63\u5ea6", - "4\u5b63\u5ea6", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "\u7b2c\u4e00\u5b63\u5ea6", - "\u7b2c\u4e8c\u5b63\u5ea6", - "\u7b2c\u4e09\u5b63\u5ea6", - "\u7b2c\u56db\u5b63\u5ea6", - } - }, - { "islamic.QuarterNarrows", - new String[] { - "1", - "2", - "3", - "4", - } - }, + sharedQuarterNames }, { "islamic.TimePatterns", - new String[] { - "zzzz ah:mm:ss", - "z ah:mm:ss", - "ah:mm:ss", - "ah:mm", - } - }, + sharedTimePatterns }, { "islamic.abbreviated.AmPmMarkers", - new String[] { - "\u4e0a\u5348", - "\u4e0b\u5348", - } - }, + sharedAmPmMarkers }, { "islamic.long.Eras", - new String[] { - "", - "\u4f0a\u65af\u5170\u5386", - } - }, + sharedEras }, { "islamic.narrow.AmPmMarkers", - new String[] { - "\u4e0a\u5348", - "\u4e0b\u5348", - } - }, + sharedAmPmMarkers }, { "islamic.narrow.Eras", - new String[] { - "", - "\u4f0a\u65af\u5170\u5386", - } - }, + sharedEras }, { "islamic.short.Eras", - new String[] { - "", - "\u4f0a\u65af\u5170\u5386", - } - }, + sharedEras }, { "java.time.buddhist.DatePatterns", new String[] { "Gy\u5e74M\u6708d\u65e5EEEE", @@ -289,9 +274,9 @@ } }, { "java.time.buddhist.long.Eras", - javatimebuddhistlongEras }, + sharedJavaTimeLongEras }, { "java.time.buddhist.short.Eras", - javatimebuddhistlongEras }, + sharedJavaTimeLongEras }, { "java.time.islamic.DatePatterns", new String[] { "Gy\u5e74M\u6708d\u65e5EEEE", @@ -309,25 +294,11 @@ } }, { "java.time.japanese.long.Eras", - new String[] { - "\u516c\u5143", - "\u660e\u6cbb", - "\u5927\u6b63", - "\u662d\u548c", - "\u5e73\u6210", - } - }, + sharedJavaTimeShortEras }, { "java.time.japanese.short.Eras", - new String[] { - "\u516c\u5143", - "\u660e\u6cbb", - "\u5927\u6b63", - "\u662d\u548c", - "\u5e73\u6210", - } - }, + sharedJavaTimeShortEras }, { "java.time.long.Eras", - javatimelongEras }, + sharedJavaTimeShortEras2 }, { "java.time.roc.DatePatterns", new String[] { "Gy\u5e74M\u6708d\u65e5EEEE", @@ -337,13 +308,9 @@ } }, { "java.time.short.Eras", - javatimelongEras }, + sharedJavaTimeShortEras2 }, { "roc.AmPmMarkers", - new String[] { - "\u4e0a\u5348", - "\u4e0b\u5348", - } - }, + sharedAmPmMarkers }, { "roc.DatePatterns", new String[] { "GGGGy\u5e74M\u6708d\u65e5EEEE", @@ -353,119 +320,33 @@ } }, { "roc.DayAbbreviations", - new String[] { - "\u5468\u65e5", - "\u5468\u4e00", - "\u5468\u4e8c", - "\u5468\u4e09", - "\u5468\u56db", - "\u5468\u4e94", - "\u5468\u516d", - } - }, + sharedDayAbbreviations }, { "roc.DayNames", - new String[] { - "\u661f\u671f\u65e5", - "\u661f\u671f\u4e00", - "\u661f\u671f\u4e8c", - "\u661f\u671f\u4e09", - "\u661f\u671f\u56db", - "\u661f\u671f\u4e94", - "\u661f\u671f\u516d", - } - }, + sharedDayNames }, { "roc.DayNarrows", - new String[] { - "\u65e5", - "\u4e00", - "\u4e8c", - "\u4e09", - "\u56db", - "\u4e94", - "\u516d", - } - }, + sharedDayNarrows }, { "roc.Eras", - new String[] { - "\u6c11\u56fd\u524d", - "\u6c11\u56fd", - } - }, + sharedShortEras }, { "roc.MonthAbbreviations", - rocMonthAbbreviations }, + sharedMonthAbbreviations }, { "roc.MonthNames", - rocMonthNames }, - { "roc.MonthNarrows", - new String[] { - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "10", - "11", - "12", - "", - } - }, + sharedMonthNames }, { "roc.QuarterAbbreviations", - new String[] { - "1\u5b63\u5ea6", - "2\u5b63\u5ea6", - "3\u5b63\u5ea6", - "4\u5b63\u5ea6", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "\u7b2c\u4e00\u5b63\u5ea6", - "\u7b2c\u4e8c\u5b63\u5ea6", - "\u7b2c\u4e09\u5b63\u5ea6", - "\u7b2c\u56db\u5b63\u5ea6", - } - }, + sharedQuarterNames }, { "roc.TimePatterns", - new String[] { - "zzzz ah:mm:ss", - "z ah:mm:ss", - "ah:mm:ss", - "ah:mm", - } - }, + sharedTimePatterns }, { "roc.abbreviated.AmPmMarkers", - new String[] { - "\u4e0a\u5348", - "\u4e0b\u5348", - } - }, + sharedAmPmMarkers }, { "roc.long.Eras", - new String[] { - "\u6c11\u56fd\u524d", - "\u6c11\u56fd", - } - }, + sharedShortEras }, { "roc.narrow.AmPmMarkers", - new String[] { - "\u4e0a\u5348", - "\u4e0b\u5348", - } - }, + sharedAmPmMarkers }, { "roc.narrow.Eras", - new String[] { - "\u6c11\u56fd\u524d", - "\u6c11\u56fd", - } - }, + sharedShortEras }, { "roc.short.Eras", - new String[] { - "\u6c11\u56fd\u524d", - "\u6c11\u56fd", - } - }, + sharedShortEras }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_zh_HK.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_zh_HK.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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. + */ + +/* + * COPYRIGHT AND PERMISSION NOTICE + * + * Copyright (C) 1991-2016 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 of the Unicode data files and any associated documentation + * (the "Data Files") or Unicode software and any associated documentation + * (the "Software") to deal in the Data Files or Software + * without restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, and/or sell copies of + * the Data Files or Software, and to permit persons to whom the Data Files + * or Software are furnished to do so, provided that + * (a) this copyright and permission notice appear with all copies + * of the Data Files or Software, + * (b) this copyright and permission notice appear in associated + * documentation, and + * (c) there is clear notice in each modified Data File or in the Software + * as well as in the documentation associated with the Data File(s) or + * Software that the data or software has been modified. + * + * THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS + * NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL + * DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THE DATA FILES OR SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, + * use or other dealings in these Data Files or Software without prior + * written authorization of the copyright holder. + */ + +// Note: this file has been generated by a tool. + +package sun.text.resources.ext; + +import sun.util.resources.OpenListResourceBundle; + +public class JavaTimeSupplementary_zh_HK extends OpenListResourceBundle { + @Override + protected final Object[][] getContents() { + final String[] sharedQuarterAbbreviations = { + "Q1", + "Q2", + "Q3", + "Q4", + }; + + final String[] sharedJavaTimeDatePatterns = { + "Gy\u5e74M\u6708d\u65e5EEEE", + "Gy\u5e74M\u6708d\u65e5", + "Gy\u5e74M\u6708d\u65e5", + "Gy/M/d", + }; + + final String[] sharedJavaTimeLongEras = { + "\u516c\u5143\u524d", + "\u516c\u5143", + }; + + return new Object[][] { + { "QuarterAbbreviations", + sharedQuarterAbbreviations }, + { "field.week", + "\u661f\u671f" }, + { "field.weekday", + "\u661f\u671f\u5e7e" }, + { "islamic.QuarterAbbreviations", + sharedQuarterAbbreviations }, + { "java.time.japanese.DatePatterns", + sharedJavaTimeDatePatterns }, + { "java.time.long.Eras", + sharedJavaTimeLongEras }, + { "java.time.roc.DatePatterns", + sharedJavaTimeDatePatterns }, + { "java.time.short.Eras", + sharedJavaTimeLongEras }, + { "roc.DatePatterns", + new String[] { + "GGGGy\u5e74M\u6708d\u65e5EEEE", + "GGGGy\u5e74M\u6708d\u65e5", + "GGGGy\u5e74M\u6708d\u65e5", + "GGGGy/M/d", + } + }, + { "roc.QuarterAbbreviations", + sharedQuarterAbbreviations }, + }; + } +} diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_zh_SG.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_zh_SG.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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. + */ + +/* + * COPYRIGHT AND PERMISSION NOTICE + * + * Copyright (C) 1991-2016 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 of the Unicode data files and any associated documentation + * (the "Data Files") or Unicode software and any associated documentation + * (the "Software") to deal in the Data Files or Software + * without restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, and/or sell copies of + * the Data Files or Software, and to permit persons to whom the Data Files + * or Software are furnished to do so, provided that + * (a) this copyright and permission notice appear with all copies + * of the Data Files or Software, + * (b) this copyright and permission notice appear in associated + * documentation, and + * (c) there is clear notice in each modified Data File or in the Software + * as well as in the documentation associated with the Data File(s) or + * Software that the data or software has been modified. + * + * THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS + * NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL + * DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THE DATA FILES OR SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, + * use or other dealings in these Data Files or Software without prior + * written authorization of the copyright holder. + */ + +// Note: this file has been generated by a tool. + +package sun.text.resources.ext; + +import sun.util.resources.OpenListResourceBundle; + +public class JavaTimeSupplementary_zh_SG extends OpenListResourceBundle { + @Override + protected final Object[][] getContents() { + final String[] sharedDatePatterns = { + "GGGGy\u5e74M\u6708d\u65e5EEEE", + "GGGGy\u5e74M\u6708d\u65e5", + "GGGGy\u5e74M\u6708d\u65e5", + "GGGGd/M/yy", + }; + + final String[] sharedJavaTimeDatePatterns = { + "Gy\u5e74M\u6708d\u65e5EEEE", + "Gy\u5e74M\u6708d\u65e5", + "Gy\u5e74M\u6708d\u65e5", + "Gd/M/yy", + }; + + return new Object[][] { + { "islamic.DatePatterns", + sharedDatePatterns }, + { "java.time.buddhist.DatePatterns", + sharedJavaTimeDatePatterns }, + { "java.time.islamic.DatePatterns", + sharedJavaTimeDatePatterns }, + { "java.time.japanese.DatePatterns", + sharedJavaTimeDatePatterns }, + { "java.time.roc.DatePatterns", + sharedJavaTimeDatePatterns }, + { "roc.DatePatterns", + sharedDatePatterns }, + }; + } +} diff -r 25903fca5876 -r 0ac35f4c3936 jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_zh_TW.java --- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_zh_TW.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_zh_TW.java Tue Jul 05 13:50:37 2016 -0700 @@ -72,27 +72,86 @@ public class JavaTimeSupplementary_zh_TW extends OpenListResourceBundle { @Override protected final Object[][] getContents() { - final String[] javatimelongEras = { + final String[] sharedQuarterAbbreviations = { + "1\u5b63", + "2\u5b63", + "3\u5b63", + "4\u5b63", + }; + + final String[] sharedQuarterNames = { + "\u7b2c1\u5b63", + "\u7b2c2\u5b63", + "\u7b2c3\u5b63", + "\u7b2c4\u5b63", + }; + + final String[] sharedDayAbbreviations = { + "\u9031\u65e5", + "\u9031\u4e00", + "\u9031\u4e8c", + "\u9031\u4e09", + "\u9031\u56db", + "\u9031\u4e94", + "\u9031\u516d", + }; + + final String[] sharedEras = { + "", + "\u4f0a\u65af\u862d\u66c6", + }; + + final String[] sharedMonthNames = { + "\u7a46\u54c8\u862d\u59c6\u6708", + "\u8272\u6cd5\u723e\u6708", + "\u8cf4\u6bd4\u6708 I", + "\u8cf4\u6bd4\u6708 II", + "\u4e3b\u99ac\u9054\u6708 I", + "\u4e3b\u99ac\u9054\u6708 II", + "\u8cf4\u54f2\u535c\u6708", + "\u820d\u723e\u90a6\u6708", + "\u8cf4\u8cb7\u4e39\u6708", + "\u9583\u74e6\u9b6f\u6708", + "\u90fd\u723e\u5580\u723e\u5fb7\u6708", + "\u90fd\u723e\u9ed1\u54f2\u6708", + "", + }; + + final String[] sharedTimePatterns = { + "ah:mm:ss [zzzz]", + "ah:mm:ss [z]", + "ah:mm:ss", + "ah:mm", + }; + + final String[] sharedJavaTimeLongEras = { + "BC", + "\u4f5b\u66c6", + }; + + final String[] sharedJavaTimeShortEras = { + "\u897f\u5143", + "\u660e\u6cbb", + "\u5927\u6b63", + "\u662d\u548c", + "\u5e73\u6210", + }; + + final String[] sharedJavaTimeShortEras2 = { "\u897f\u5143\u524d", "\u897f\u5143", }; + + final String[] sharedShortEras = { + "\u6c11\u570b\u524d", + "\u6c11\u570b", + }; + return new Object[][] { { "QuarterAbbreviations", - new String[] { - "1\u5b63", - "2\u5b63", - "3\u5b63", - "4\u5b63", - } - }, + sharedQuarterAbbreviations }, { "QuarterNames", - new String[] { - "\u7b2c1\u5b63", - "\u7b2c2\u5b63", - "\u7b2c3\u5b63", - "\u7b2c4\u5b63", - } - }, + sharedQuarterNames }, { "calendarname.buddhist", "\u4f5b\u66c6" }, { "calendarname.gregorian", @@ -124,98 +183,25 @@ { "field.zone", "\u6642\u5340" }, { "islamic.DayAbbreviations", - new String[] { - "\u9031\u65e5", - "\u9031\u4e00", - "\u9031\u4e8c", - "\u9031\u4e09", - "\u9031\u56db", - "\u9031\u4e94", - "\u9031\u516d", - } - }, + sharedDayAbbreviations }, { "islamic.Eras", - new String[] { - "", - "\u4f0a\u65af\u862d\u66c6", - } - }, + sharedEras }, { "islamic.MonthAbbreviations", - new String[] { - "\u7a46\u54c8\u862d\u59c6\u6708", - "\u8272\u6cd5\u723e\u6708", - "\u8cf4\u6bd4\u6708 I", - "\u8cf4\u6bd4\u6708 II", - "\u4e3b\u99ac\u9054\u6708 I", - "\u4e3b\u99ac\u9054\u6708 II", - "\u8cf4\u54f2\u535c\u6708", - "\u820d\u723e\u90a6\u6708", - "\u8cf4\u8cb7\u4e39\u6708", - "\u9583\u74e6\u9b6f\u6708", - "\u90fd\u723e\u5580\u723e\u5fb7\u6708", - "\u90fd\u723e\u9ed1\u54f2\u6708", - "", - } - }, + sharedMonthNames }, { "islamic.MonthNames", - new String[] { - "\u7a46\u54c8\u862d\u59c6\u6708", - "\u8272\u6cd5\u723e\u6708", - "\u8cf4\u6bd4\u6708 I", - "\u8cf4\u6bd4\u6708 II", - "\u4e3b\u99ac\u9054\u6708 I", - "\u4e3b\u99ac\u9054\u6708 II", - "\u8cf4\u54f2\u535c\u6708", - "\u820d\u723e\u90a6\u6708", - "\u8cf4\u8cb7\u4e39\u6708", - "\u9583\u74e6\u9b6f\u6708", - "\u90fd\u723e\u5580\u723e\u5fb7\u6708", - "\u90fd\u723e\u9ed1\u54f2\u6708", - "", - } - }, + sharedMonthNames }, { "islamic.QuarterAbbreviations", - new String[] { - "1\u5b63", - "2\u5b63", - "3\u5b63", - "4\u5b63", - } - }, + sharedQuarterAbbreviations }, { "islamic.QuarterNames", - new String[] { - "\u7b2c1\u5b63", - "\u7b2c2\u5b63", - "\u7b2c3\u5b63", - "\u7b2c4\u5b63", - } - }, + sharedQuarterNames }, { "islamic.TimePatterns", - new String[] { - "ah:mm:ss [zzzz]", - "ah:mm:ss [z]", - "ah:mm:ss", - "ah:mm", - } - }, + sharedTimePatterns }, { "islamic.long.Eras", - new String[] { - "", - "\u4f0a\u65af\u862d\u66c6", - } - }, + sharedEras }, { "islamic.narrow.Eras", - new String[] { - "", - "\u4f0a\u65af\u862d\u66c6", - } - }, + sharedEras }, { "islamic.short.Eras", - new String[] { - "", - "\u4f0a\u65af\u862d\u66c6", - } - }, + sharedEras }, { "java.time.buddhist.DatePatterns", new String[] { "Gy\u5e74M\u6708d\u65e5EEEE", @@ -225,17 +211,9 @@ } }, { "java.time.buddhist.long.Eras", - new String[] { - "BC", - "\u4f5b\u66c6", - } - }, + sharedJavaTimeLongEras }, { "java.time.buddhist.short.Eras", - new String[] { - "BC", - "\u4f5b\u66c6", - } - }, + sharedJavaTimeLongEras }, { "java.time.japanese.DatePatterns", new String[] { "Gy\u5e74M\u6708d\u65e5EEEE", @@ -245,25 +223,11 @@ } }, { "java.time.japanese.long.Eras", - new String[] { - "\u897f\u5143", - "\u660e\u6cbb", - "\u5927\u6b63", - "\u662d\u548c", - "\u5e73\u6210", - } - }, + sharedJavaTimeShortEras }, { "java.time.japanese.short.Eras", - new String[] { - "\u897f\u5143", - "\u660e\u6cbb", - "\u5927\u6b63", - "\u662d\u548c", - "\u5e73\u6210", - } - }, + sharedJavaTimeShortEras }, { "java.time.long.Eras", - javatimelongEras }, + sharedJavaTimeShortEras2 }, { "java.time.roc.DatePatterns", new String[] { "Gy\u5e74M\u6708d\u65e5 EEEE", @@ -273,7 +237,7 @@ } }, { "java.time.short.Eras", - javatimelongEras }, + sharedJavaTimeShortEras2 }, { "roc.DatePatterns", new String[] { "GGGGy\u5e74M\u6708d\u65e5 EEEE", @@ -283,22 +247,9 @@ } }, { "roc.DayAbbreviations", - new String[] { - "\u9031\u65e5", - "\u9031\u4e00", - "\u9031\u4e8c", - "\u9031\u4e09", - "\u9031\u56db", - "\u9031\u4e94", - "\u9031\u516d", - } - }, + sharedDayAbbreviations }, { "roc.Eras", - new String[] { - "\u6c11\u570b\u524d", - "\u6c11\u570b", - } - }, + sharedShortEras }, { "roc.MonthNames", new String[] { "1\u6708", @@ -317,47 +268,17 @@ } }, { "roc.QuarterAbbreviations", - new String[] { - "1\u5b63", - "2\u5b63", - "3\u5b63", - "4\u5b63", - } - }, + sharedQuarterAbbreviations }, { "roc.QuarterNames", - new String[] { - "\u7b2c1\u5b63", - "\u7b2c2\u5b63", - "\u7b2c3\u5b63", - "\u7b2c4\u5b63", - } - }, + sharedQuarterNames }, { "roc.TimePatterns", - new String[] { - "ah:mm:ss [zzzz]", - "ah:mm:ss [z]", - "ah:mm:ss", - "ah:mm", - } - }, + sharedTimePatterns }, { "roc.long.Eras", - new String[] { - "\u6c11\u570b\u524d", - "\u6c11\u570b", - } - }, + sharedShortEras }, { "roc.narrow.Eras", - new String[] { - "\u6c11\u570b\u524d", - "\u6c11\u570b", - } - }, + sharedShortEras }, { "roc.short.Eras", - new String[] { - "\u6c11\u570b\u524d", - "\u6c11\u570b", - } - }, + sharedShortEras }, }; } } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/test/ProblemList.txt --- a/jdk/test/ProblemList.txt Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/test/ProblemList.txt Tue Jul 05 13:50:37 2016 -0700 @@ -219,8 +219,6 @@ sun/security/tools/keytool/ListKeychainStore.sh 8156889 macosx-all -sun/security/mscapi/ShortRSAKey1024.sh 8153948 windows-all - sun/security/tools/jarsigner/warnings/BadKeyUsageTest.java 8026393 generic-all sun/security/pkcs11/Cipher/ReinitCipher.java 8077138,8023434 windows-all diff -r 25903fca5876 -r 0ac35f4c3936 jdk/test/com/sun/crypto/provider/KeyAgreement/SupportedDHParamGens.java --- a/jdk/test/com/sun/crypto/provider/KeyAgreement/SupportedDHParamGens.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/test/com/sun/crypto/provider/KeyAgreement/SupportedDHParamGens.java Tue Jul 05 13:50:37 2016 -0700 @@ -29,8 +29,8 @@ * @run main/timeout=300 SupportedDHParamGens 768 * @run main/timeout=300 SupportedDHParamGens 832 * @run main/timeout=300 SupportedDHParamGens 1024 - * @run main/timeout=300 SupportedDHParamGens 2048 - * @run main/timeout=450 SupportedDHParamGens 3072 + * @run main/timeout=600 SupportedDHParamGens 2048 + * @run main/timeout=700 SupportedDHParamGens 3072 */ import java.math.BigInteger; diff -r 25903fca5876 -r 0ac35f4c3936 jdk/test/java/lang/annotation/AnnotationVerifier.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/lang/annotation/AnnotationVerifier.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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. + */ + +/* + * Create class file using ASM, slightly modified the ASMifier output + */ + +import sun.reflect.annotation.AnnotationType; +import java.lang.annotation.AnnotationFormatError; +import org.testng.annotations.*; + +/* + * @test + * @bug 8158510 + * @summary Verify valid annotation + * @modules java.base/jdk.internal.org.objectweb.asm + * @modules java.base/sun.reflect.annotation + * @clean AnnotationWithVoidReturn.class AnnotationWithParameter.class + * @compile -XDignore.symbol.file ClassFileGenerator.java + * @run main ClassFileGenerator + * @run testng AnnotationVerifier + */ + +public class AnnotationVerifier { + + @AnnotationWithParameter + @AnnotationWithVoidReturn + static class BadAnnotation { + } + + @Test + @ExpectedExceptions(IllegalArgumentException.class) + public void annotationValidationIAE() { + AnnotationType.getInstance(AnnotationWithParameter.class); + } + + @Test(expectedExceptions = AnnotationFormatError.class) + public void annotationValidationAFE() { + BadAnnotation.class.getAnnotation(AnnotationWithVoidReturn.class); + } +} diff -r 25903fca5876 -r 0ac35f4c3936 jdk/test/java/lang/annotation/ClassFileGenerator.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/lang/annotation/ClassFileGenerator.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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. + */ + +/* + * Create class file using ASM, slightly modified the ASMifier output + */ + + + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import jdk.internal.org.objectweb.asm.*; + + +public class ClassFileGenerator { + + public static void main(String... args) throws Exception { + classFileWriter("AnnotationWithVoidReturn.class", AnnoationWithVoidReturnDump.dump()); + classFileWriter("AnnotationWithParameter.class", AnnoationWithParameterDump.dump()); + } + + private static void classFileWriter(String name, byte[] contents) throws IOException { + try (FileOutputStream fos = new FileOutputStream(new File(System.getProperty("test.classes"), + name))) { + fos.write(contents); + } + } + + /* + Following code create equivalent classfile, + which is not allowed by javac. + + @Retention(RetentionPolicy.RUNTIME) + public @interface AnnotationWithVoidReturn { + void m() default 1; + } + */ + + private static class AnnoationWithVoidReturnDump implements Opcodes { + public static byte[] dump() throws Exception { + ClassWriter cw = new ClassWriter(0); + MethodVisitor mv; + AnnotationVisitor av0; + + cw.visit(52, ACC_PUBLIC + ACC_ANNOTATION + ACC_ABSTRACT + +ACC_INTERFACE, + "AnnotationWithVoidReturn", null, + "java/lang/Object", new String[]{"java/lang/annotation/Annotation"}); + + { + av0 = cw.visitAnnotation("Ljava/lang/annotation/Retention;", true); + av0.visitEnum("value", "Ljava/lang/annotation/RetentionPolicy;", + "RUNTIME"); + av0.visitEnd(); + } + { + mv = cw.visitMethod(ACC_PUBLIC + ACC_ABSTRACT, "m", "()V", null, null); + mv.visitEnd(); + } + { + av0 = mv.visitAnnotationDefault(); + av0.visit(null, new Integer(1)); + av0.visitEnd(); + } + cw.visitEnd(); + + return cw.toByteArray(); + + } + } + + /* + Following code create equivalent classfile, + which is not allowed by javac. + + @Retention(RetentionPolicy.RUNTIME) + public @interface AnnotationWithParameter { + int m(int x); + } + */ + + private static class AnnoationWithParameterDump implements Opcodes { + public static byte[] dump() throws Exception { + + ClassWriter cw = new ClassWriter(0); + MethodVisitor mv; + AnnotationVisitor av0; + + cw.visit(52, ACC_PUBLIC + ACC_ANNOTATION + ACC_ABSTRACT + ACC_INTERFACE, + "AnnotationWithParameter", null, + "java/lang/Object", new String[]{"java/lang/annotation/Annotation"}); + + { + av0 = cw.visitAnnotation("Ljava/lang/annotation/Retention;", true); + av0.visitEnum("value", "Ljava/lang/annotation/RetentionPolicy;", + "RUNTIME"); + av0.visitEnd(); + } + { + mv = cw.visitMethod(ACC_PUBLIC + ACC_ABSTRACT, + "badValue", + "(I)I", // Bad method with a parameter + null, null); + mv.visitEnd(); + } + { + av0 = mv.visitAnnotationDefault(); + av0.visit(null, new Integer(-1)); + av0.visitEnd(); + } + cw.visitEnd(); + + return cw.toByteArray(); + } + } + +} diff -r 25903fca5876 -r 0ac35f4c3936 jdk/test/java/lang/invoke/MethodHandlesTest.java --- a/jdk/test/java/lang/invoke/MethodHandlesTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/test/java/lang/invoke/MethodHandlesTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -2792,7 +2792,7 @@ System.arraycopy(steps, 0, preSteps, 1, nargs); System.arraycopy(finis, 0, preFinis, 0, nargs); // finis are also offset by 1 for pre-checked loops // Convert to clause-major form. - MethodHandle[][] preClauses = new MethodHandle[nargs+1][4]; + MethodHandle[][] preClauses = new MethodHandle[nargs + 1][4]; MethodHandle[][] postClauses = new MethodHandle[nargs][4]; toClauseMajor(preClauses, preInits, preSteps, prePreds, preFinis); toClauseMajor(postClauses, inits, steps, usePreds, finis); diff -r 25903fca5876 -r 0ac35f4c3936 jdk/test/sun/security/jca/PreferredProviderNegativeTest.java --- a/jdk/test/sun/security/jca/PreferredProviderNegativeTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/test/sun/security/jca/PreferredProviderNegativeTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -62,7 +62,7 @@ } } else { if (!cipher.getProvider().getName().equals(arrays[1])) { - throw new RuntimeException("Test Faild:The provider could be " + throw new RuntimeException("Test Failed:The provider could be " + "set by valid provider."); } } @@ -73,13 +73,13 @@ * Test that the setting of the security property after Cipher.getInstance() * does not influence previously loaded instances */ - public static void afterJCESet(String value) + public static void afterJCESet(String value, String expected) throws NoSuchAlgorithmException, NoSuchPaddingException { String[] arrays = value.split(":"); Cipher cipher = Cipher.getInstance(arrays[0]); Security.setProperty(SEC_PREF_PROP, value); - if (!cipher.getProvider().getName().equals("SunJCE")) { + if (!cipher.getProvider().getName().equals(expected)) { throw new RuntimeException("Test Failed:The security property can't" + " be updated after JCE load."); } @@ -105,25 +105,28 @@ public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException { + String expected; + String value = args[1]; + // If OS is solaris, expect OracleUcrypto, otherwise SunJCE + if (System.getProperty("os.name").toLowerCase().contains("sun")) { + expected = "OracleUcrypto"; + } else { + expected = "SunJCE"; + } + if (args.length >= 2) { switch (args[0]) { case "preSet": boolean negativeProvider = Boolean.valueOf(args[2]); - boolean solaris = System.getProperty("os.name") - .toLowerCase().contains("sun"); - String value = args[1]; - if (args[1].split(":").length < 2) { - if (solaris) { - value += ":OracleUcrypto"; - } else { - value += ":SunJCE"; - } + if (!args[1].contains(":")) { + value += ":" + expected; } PreferredProviderNegativeTest.preJCESet( value, negativeProvider); break; case "afterSet": - PreferredProviderNegativeTest.afterJCESet(args[1]); + PreferredProviderNegativeTest.afterJCESet(args[1], + expected); break; case "invalidAlg": PreferredProviderNegativeTest.invalidAlg(args[1]); diff -r 25903fca5876 -r 0ac35f4c3936 jdk/test/sun/security/jca/PreferredProviderTest.java --- a/jdk/test/sun/security/jca/PreferredProviderTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/test/sun/security/jca/PreferredProviderTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -38,6 +38,7 @@ * @bug 8076359 8133151 8145344 8150512 8155847 * @summary Test the value for new jdk.security.provider.preferred * security property + * @run main/othervm PreferredProviderTest */ public class PreferredProviderTest { @@ -59,12 +60,14 @@ verifyDigestProvider(os, type, Arrays.asList( new DataTuple("SHA-256", "SUN"))); } else { - //For solaris the preferred algorithm/provider is already set in - //java.security file which will be verified. + //Solaris has different providers that support the same algorithm + //which makes for better testing. switch (type) { case "sparcv9": preferredProp = "AES:SunJCE, SHA1:SUN, Group.SHA2:SUN, " + "HmacSHA1:SunJCE, Group.HmacSHA2:SunJCE"; + Security.setProperty( + "jdk.security.provider.preferred", preferredProp); verifyPreferredProviderProperty(os, type, preferredProp); verifyDigestProvider(os, type, Arrays.asList( @@ -89,7 +92,8 @@ "HmacSHA1:SunJCE, Group.HmacSHA2:SunJCE, " + "RSA:SunRsaSign, SHA1withRSA:SunRsaSign, " + "Group.SHA2RSA:SunRsaSign"; - + Security.setProperty( + "jdk.security.provider.preferred", preferredProp); verifyPreferredProviderProperty(os, type, preferredProp); verifyKeyFactoryProvider(os, type, Arrays.asList( diff -r 25903fca5876 -r 0ac35f4c3936 jdk/test/sun/security/mscapi/ShortRSAKeyWithinTLS.java --- a/jdk/test/sun/security/mscapi/ShortRSAKeyWithinTLS.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/test/sun/security/mscapi/ShortRSAKeyWithinTLS.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,10 @@ */ import java.io.*; +import java.net.*; +import java.util.*; import java.security.*; +import java.security.cert.*; import javax.net.*; import javax.net.ssl.*; @@ -71,22 +74,34 @@ void doServerSide() throws Exception { // load the key store - KeyStore ks = KeyStore.getInstance("Windows-MY", "SunMSCAPI"); - ks.load(null, null); + serverKS = KeyStore.getInstance("Windows-MY", "SunMSCAPI"); + serverKS.load(null, null); System.out.println("Loaded keystore: Windows-MY"); // check key size - checkKeySize(ks); + checkKeySize(serverKS); // initialize the SSLContext KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509"); - kmf.init(ks, null); + kmf.init(serverKS, null); TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509"); - tmf.init(ks); + tmf.init(serverKS); + TrustManager[] tms = tmf.getTrustManagers(); + if (tms == null || tms.length == 0) { + throw new Exception("unexpected trust manager implementation"); + } else { + if (!(tms[0] instanceof X509TrustManager)) { + throw new Exception("unexpected trust manager" + + " implementation: " + + tms[0].getClass().getCanonicalName()); + } + } + serverTM = new MyExtendedX509TM((X509TrustManager)tms[0]); + tms = new TrustManager[] {serverTM}; SSLContext ctx = SSLContext.getInstance("TLS"); - ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null); + ctx.init(kmf.getKeyManagers(), tms, null); ServerSocketFactory ssf = ctx.getServerSocketFactory(); SSLServerSocket sslServerSocket = (SSLServerSocket) @@ -228,6 +243,8 @@ Thread clientThread = null; Thread serverThread = null; + KeyStore serverKS; + MyExtendedX509TM serverTM; /* * Primary constructor, used to drive remainder of the test. @@ -348,5 +365,60 @@ } } } + + + class MyExtendedX509TM extends X509ExtendedTrustManager + implements X509TrustManager { + + X509TrustManager tm; + + MyExtendedX509TM(X509TrustManager tm) { + this.tm = tm; + } + + public void checkClientTrusted(X509Certificate chain[], String authType) + throws CertificateException { + tm.checkClientTrusted(chain, authType); + } + + public void checkServerTrusted(X509Certificate chain[], String authType) + throws CertificateException { + tm.checkServerTrusted(chain, authType); + } + + public X509Certificate[] getAcceptedIssuers() { + List certs = new ArrayList<>(); + try { + for (X509Certificate c : tm.getAcceptedIssuers()) { + if (serverKS.getCertificateAlias(c).equals(keyAlias)) + certs.add(c); + } + } catch (KeyStoreException kse) { + throw new RuntimeException(kse); + } + return certs.toArray(new X509Certificate[certs.size()]); + } + + public void checkClientTrusted(X509Certificate[] chain, String authType, + Socket socket) throws CertificateException { + tm.checkClientTrusted(chain, authType); + } + + public void checkServerTrusted(X509Certificate[] chain, String authType, + Socket socket) throws CertificateException { + tm.checkServerTrusted(chain, authType); + } + + public void checkClientTrusted(X509Certificate[] chain, String authType, + SSLEngine engine) throws CertificateException { + tm.checkClientTrusted(chain, authType); + } + + public void checkServerTrusted(X509Certificate[] chain, String authType, + SSLEngine engine) throws CertificateException { + tm.checkServerTrusted(chain, authType); + } + } + } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/test/sun/security/provider/NSASuiteB/TestDSAGenParameterSpec.java --- a/jdk/test/sun/security/provider/NSASuiteB/TestDSAGenParameterSpec.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/test/sun/security/provider/NSASuiteB/TestDSAGenParameterSpec.java Tue Jul 05 13:50:37 2016 -0700 @@ -35,7 +35,6 @@ /* * @test * @bug 8075286 - * @key intermittent * @summary Verify that DSAGenParameterSpec can and can only be used to generate * DSA within some certain range of key sizes as described in the class * specification (L, N) as (1024, 160), (2048, 224), (2048, 256) and diff -r 25903fca5876 -r 0ac35f4c3936 jdk/test/sun/security/tools/keytool/DefaultSignatureAlgorithm.java --- a/jdk/test/sun/security/tools/keytool/DefaultSignatureAlgorithm.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/test/sun/security/tools/keytool/DefaultSignatureAlgorithm.java Tue Jul 05 13:50:37 2016 -0700 @@ -26,6 +26,17 @@ * @bug 8138766 * @summary New default -sigalg for keytool * @modules java.base/sun.security.tools.keytool + * @run main/othervm DefaultSignatureAlgorithm RSA 1024 SHA256withRSA + * @run main/othervm DefaultSignatureAlgorithm RSA 3072 SHA256withRSA + * @run main/othervm DefaultSignatureAlgorithm RSA 3073 SHA384withRSA + * @run main/othervm DefaultSignatureAlgorithm DSA 1024 SHA256withDSA + * @run main/othervm/timeout=700 DefaultSignatureAlgorithm DSA 3072 + * SHA256withDSA + * @run main/othervm DefaultSignatureAlgorithm EC 192 SHA256withECDSA + * @run main/othervm DefaultSignatureAlgorithm EC 384 SHA384withECDSA + * @run main/othervm DefaultSignatureAlgorithm EC 571 SHA512withECDSA + * @run main/othervm DefaultSignatureAlgorithm EC 571 SHA256withECDSA + * SHA256withECDSA */ import sun.security.tools.keytool.Main; @@ -36,29 +47,17 @@ public class DefaultSignatureAlgorithm { - private static int counter = 0; - public static void main(String[] args) throws Exception { - - // Calculating large RSA keys are too slow. - run("RSA", 1024, null, "SHA256withRSA"); - run("RSA", 3072, null, "SHA256withRSA"); - run("RSA", 3073, null, "SHA384withRSA"); - - run("DSA", 1024, null, "SHA256withDSA"); - run("DSA", 3072, null, "SHA256withDSA"); - - run("EC", 192, null, "SHA256withECDSA"); - run("EC", 384, null, "SHA384withECDSA"); - run("EC", 571, null, "SHA512withECDSA"); - - // If you specify one, it will be used. - run("EC", 571, "SHA256withECDSA", "SHA256withECDSA"); + if(args == null || args.length < 3) { + throw new RuntimeException("Invalid arguments provided."); + } + String sigAlg = (args.length == 4) ? args[3] : null; + run(args[0], Integer.valueOf(args[1]), args[2], sigAlg); } private static void run(String keyAlg, int keySize, - String sigAlg, String expectedSigAlg) throws Exception { - String alias = keyAlg + keySize + (counter++); + String expectedSigAlg, String sigAlg) throws Exception { + String alias = keyAlg + keySize + System.currentTimeMillis(); String cmd = "-keystore ks -storepass changeit" + " -keypass changeit -alias " + alias + " -keyalg " + keyAlg + " -keysize " + keySize + diff -r 25903fca5876 -r 0ac35f4c3936 jdk/test/sun/security/tools/keytool/PrintSSL.java --- a/jdk/test/sun/security/tools/keytool/PrintSSL.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/test/sun/security/tools/keytool/PrintSSL.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,36 +21,74 @@ * questions. */ -// Read printssl.sh, this Java program starts an SSL server +/* + * @test + * @bug 6480981 8160624 + * @modules java.base/sun.security.tools.keytool + * @summary keytool should be able to import certificates from remote SSL server + * @run main/othervm PrintSSL + */ +import java.io.IOException; import java.net.ServerSocket; +import java.util.concurrent.CountDownLatch; import javax.net.ssl.SSLServerSocketFactory; import javax.net.ssl.SSLSocket; public class PrintSSL { + public static void main(String[] args) throws Exception { - System.setProperty("javax.net.ssl.keyStorePassword", "passphrase"); - System.setProperty("javax.net.ssl.keyStore", - System.getProperty("test.src", "./") - + "/../../../../javax/net/ssl/etc/keystore"); - SSLServerSocketFactory sslssf = - (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); - final ServerSocket server = sslssf.createServerSocket(0); - System.out.println(server.getLocalPort()); - System.out.flush(); - Thread t = new Thread() { - public void run() { - try { - Thread.sleep(30000); - server.close(); - } catch (Exception e) { - ; - } - throw new RuntimeException("Timeout"); + + int port = new Server().start(); + if(port == -1) { + throw new RuntimeException("Unable start ssl server."); + } + String vmOpt = System.getProperty("TESTTOOLVMOPTS"); + String cmd = String.format( + "-debug %s -printcert -sslserver localhost:%s", + ((vmOpt == null) ? "" : vmOpt ), port); + sun.security.tools.keytool.Main.main(cmd.split("\\s+")); + } + + private static class Server implements Runnable { + + private volatile int serverPort = -1; + private final CountDownLatch untilServerReady = new CountDownLatch(1); + + public int start() throws InterruptedException { + + Thread server = new Thread(this); + server.setDaemon(true); + server.start(); + untilServerReady.await(); + return this.getServerPort(); + } + + @Override + public void run() { + + System.setProperty("javax.net.ssl.keyStorePassword", "passphrase"); + System.setProperty("javax.net.ssl.keyStore", + System.getProperty("test.src", "./") + + "/../../../../javax/net/ssl/etc/keystore"); + SSLServerSocketFactory sslssf = + (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); + try (ServerSocket server = sslssf.createServerSocket(0)) { + this.serverPort = server.getLocalPort(); + System.out.printf("%nServer started on: %s%n", getServerPort()); + untilServerReady.countDown(); + ((SSLSocket)server.accept()).startHandshake(); + } catch (Throwable e) { + e.printStackTrace(System.out); + untilServerReady.countDown(); } - }; - t.setDaemon(true); - t.start(); - ((SSLSocket)server.accept()).startHandshake(); + + } + + public int getServerPort() { + return this.serverPort; + } + } + } diff -r 25903fca5876 -r 0ac35f4c3936 jdk/test/sun/security/tools/keytool/printssl.sh --- a/jdk/test/sun/security/tools/keytool/printssl.sh Thu Jun 30 14:57:30 2016 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,72 +0,0 @@ -# -# 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 -# 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 6480981 -# @summary keytool should be able to import certificates from remote SSL servers - -if [ "${TESTSRC}" = "" ] ; then - TESTSRC="." -fi -if [ "${TESTJAVA}" = "" ] ; then - echo "TESTJAVA not set. Test cannot execute." - echo "FAILED!!!" - exit 1 -fi -if [ "${COMPILEJAVA}" = "" ]; then - COMPILEJAVA="${TESTJAVA}" -fi - -# set platform-dependent variables -OS=`uname -s` -case "$OS" in - SunOS | Linux | Darwin | AIX ) - FS="/" - ;; - CYGWIN* ) - FS="/" - ;; - Windows_* ) - FS="\\" - ;; - * ) - echo "Unrecognized operating system!" - exit 1; - ;; -esac - -${COMPILEJAVA}${FS}bin${FS}javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . ${TESTSRC}${FS}PrintSSL.java || exit 10 -${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -Dtest.src=$TESTSRC PrintSSL | ( - read PORT - if [ "$PORT" = "" ]; then - echo "Server not started" - exit 2 - else - ${TESTJAVA}${FS}bin${FS}keytool ${TESTTOOLVMOPTS} -printcert -sslserver localhost:$PORT - fi -) -status=$? - -rm PrintSSL*.class - -exit $status diff -r 25903fca5876 -r 0ac35f4c3936 jdk/test/sun/text/resources/JavaTimeSupplementaryTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/text/resources/JavaTimeSupplementaryTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,153 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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 8159943 + * @modules java.base/sun.util.locale.provider + * java.base/sun.util.resources + * jdk.localedata + * @summary Test for checking consistency between CLDR and COMPAT locale data + * for java.time. + */ + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Objects; +import java.util.ResourceBundle; +import java.util.Set; +import java.util.TreeSet; +import java.util.stream.Collectors; +import sun.util.locale.provider.LocaleProviderAdapter.Type; +import sun.util.locale.provider.LocaleProviderAdapter; + +public class JavaTimeSupplementaryTest { + // COMPAT-to-CLDR locale mapping + private static final Map LOCALEMAP; + static { + LOCALEMAP = new HashMap<>(); + LOCALEMAP.put(new Locale("hi", "IN"), new Locale("hi")); + LOCALEMAP.put(new Locale("no", "NO", "NY"), new Locale("nn", "NO")); + LOCALEMAP.put(new Locale("no"), new Locale("nb")); + LOCALEMAP.put(Locale.TAIWAN, Locale.forLanguageTag("zh-Hant")); + LOCALEMAP.put(new Locale("zh", "HK"), Locale.forLanguageTag("zh-Hant-HK")); + LOCALEMAP.put(new Locale("zh", "SG"), Locale.forLanguageTag("zh-Hans-SG")); + LOCALEMAP.put(new Locale("sr", "BA"), Locale.forLanguageTag("sr-Cyrl-BA")); + } + + private static final String[] PREFIXES = { + "Quarter", + "java.time.", + "calendarname.", + "field.", + "islamic.", + "roc.", + }; + + // All available locales for the COMPAT FormatData resource bundles + static final List COMPAT_LOCALES + = Arrays.asList(LocaleProviderAdapter.forJRE() + .getDateFormatSymbolsProvider().getAvailableLocales()); + + static int errors; + + public static void main(String... args) { + for (Locale locale : COMPAT_LOCALES) { + ResourceBundle compat + = LocaleProviderAdapter.forJRE() + .getLocaleResources(locale).getJavaTimeFormatData(); + if (!compat.getLocale().equals(locale)) { + continue; + } + Locale cldrLocale = toCldrLocale(locale); + ResourceBundle cldr + = LocaleProviderAdapter.forType(Type.CLDR) + .getLocaleResources(locale).getJavaTimeFormatData(); + if (!cldr.getLocale().equals(cldrLocale)) { + continue; + } + compareResources(compat, cldr); + } + if (errors > 0) { + throw new RuntimeException(errors + " failure(s)"); + } + } + + private static Locale toCldrLocale(Locale compatLocale) { + Locale loc = LOCALEMAP.get(compatLocale); + return loc != null ? loc: compatLocale; + } + + private static void compareResources(ResourceBundle compat, ResourceBundle cldr) { + Set supplementalKeys = getSupplementalKeys(compat); + for (String key : supplementalKeys) { + Object compatData = compat.getObject(key); + String cldrKey = toCldrKey(key); + Object cldrData = cldr.containsKey(cldrKey) ? cldr.getObject(cldrKey) : null; + if (!Objects.deepEquals(compatData, cldrData)) { + // OK if key is for the Buddhist or Japanese calendars which had been + // supported before java.time, or if key is "java.time.short.Eras" due + // to legacy era names. + if (!(key.contains("buddhist") || key.contains("japanese") + || key.equals("java.time.short.Eras"))) { + errors++; + System.out.print("Failure: "); + } + System.out.println("diff: " + compat.getLocale().toLanguageTag() + "\n" + + " COMPAT: " + key + " -> " + toString(compatData) + "\n" + + " CLDR: " + cldrKey + " -> " + toString(cldrData)); + } + } + } + + private static Set getSupplementalKeys(ResourceBundle rb) { + // Collect keys starting with any of PREFIXES + Set keys = rb.keySet().stream() + .filter(k -> Arrays.stream(PREFIXES).anyMatch(p -> k.startsWith(p))) + .collect(Collectors.toCollection(TreeSet::new)); + return keys; + } + + /** + * Removes "java.time." prefix where it's unused in CLDR. + */ + private static String toCldrKey(String key) { + if (key.contains("short.Eras")) { + key = key.replace("short.", ""); + } + if (key.startsWith("java.time.") && key.endsWith(".Eras")) { + return key.substring("java.time.".length()); + } + return key; + } + + private static String toString(Object data) { + if (data instanceof String[]) { + return Arrays.toString((String[]) data); + } + return data.toString(); + } +} diff -r 25903fca5876 -r 0ac35f4c3936 jdk/test/tools/launcher/modules/dryrun/DryRunTest.java --- a/jdk/test/tools/launcher/modules/dryrun/DryRunTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/jdk/test/tools/launcher/modules/dryrun/DryRunTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -60,6 +60,7 @@ // the module main class private static final String MAIN_CLASS = "jdk.test.Main"; + private static final String MAIN_CLINIT_CLASS = "jdk.test.MainWithClinit"; @BeforeTest @@ -99,13 +100,27 @@ String dir = MODS_DIR.toString(); String mid = TEST_MODULE + "/" + MAIN_CLASS; - // java -modulepath mods -module $TESTMODULE/$MAINCLASS // no resolution failure int exitValue = exec("--dry-run", "-modulepath", dir, "-m", mid); assertTrue(exitValue == 0); } /** + * Test dryrun that does not invoke of the main class + */ + public void testMainClinit() throws Exception { + String dir = MODS_DIR.toString(); + String mid = TEST_MODULE + "/" + MAIN_CLINIT_CLASS; + + int exitValue = exec("--dry-run", "-modulepath", dir, "-m", mid); + assertTrue(exitValue == 0); + + // expect the test to fail if main class is initialized + exitValue = exec("-modulepath", dir, "-m", mid); + assertTrue(exitValue != 0); + } + + /** * Test non-existence module in -addmods */ public void testNonExistAddModules() throws Exception { diff -r 25903fca5876 -r 0ac35f4c3936 jdk/test/tools/launcher/modules/dryrun/src/test/jdk/test/MainWithClinit.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/tools/launcher/modules/dryrun/src/test/jdk/test/MainWithClinit.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package jdk.test; + +public class MainWithClinit { + static { + fail(); + } + + private static void fail() { + throw new RuntimeException("MainWithClinit:: invoked"); + } + + public static void main(String[] args) { + System.out.println("hi"); + } +} diff -r 25903fca5876 -r 0ac35f4c3936 langtools/.hgtags --- a/langtools/.hgtags Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/.hgtags Tue Jul 05 13:50:37 2016 -0700 @@ -367,3 +367,4 @@ 203a9e1b82b6cc7918f96a92e5a7eb28eafcdd18 jdk-9+122 d0c742ddfb01ebe427720798c4c8335023ae20f8 jdk-9+123 26aa3caa778eab1c931910149c414783ee83bce7 jdk-9+124 +2d65e127e93d5ff0df61bf78e57d7f46a2f1edeb jdk-9+125 diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractAnnotationValueVisitor6.java --- a/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractAnnotationValueVisitor6.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractAnnotationValueVisitor6.java Tue Jul 05 13:50:37 2016 -0700 @@ -113,7 +113,7 @@ /** * {@inheritDoc} * - *

The default implementation of this method in {@code + * @implSpec The default implementation of this method in {@code * AbstractAnnotationValueVisitor6} will always throw {@code * UnknownAnnotationValueException}. This behavior is not * required of a subclass. @@ -121,6 +121,7 @@ * @param av {@inheritDoc} * @param p {@inheritDoc} */ + @Override public R visitUnknown(AnnotationValue av, P p) { throw new UnknownAnnotationValueException(av, p); } diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractElementVisitor6.java --- a/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractElementVisitor6.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractElementVisitor6.java Tue Jul 05 13:50:37 2016 -0700 @@ -118,25 +118,28 @@ /** * {@inheritDoc} * - *

The default implementation of this method in + * @implSpec The default implementation of this method in * {@code AbstractElementVisitor6} will always throw * {@code UnknownElementException}. * This behavior is not required of a subclass. * - * @param e the element to visit - * @param p a visitor-specified parameter + * @param e {@inheritDoc} + * @param p {@inheritDoc} * @return a visitor-specified result * @throws UnknownElementException * a visitor implementation may optionally throw this exception */ + @Override public R visitUnknown(Element e, P p) { throw new UnknownElementException(e, p); } /** - * Visits a {@code ModuleElement} by calling {@code + * {@inheritDoc} + * + * @implSpec Visits a {@code ModuleElement} by calling {@code * visitUnknown}. - + * * @param e {@inheritDoc} * @param p {@inheritDoc} * @return the result of {@code visitUnknown} diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitor6.java --- a/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitor6.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitor6.java Tue Jul 05 13:50:37 2016 -0700 @@ -114,9 +114,11 @@ } /** - * Visits a {@code UnionType} element by calling {@code + * {@inheritDoc} + * + * @implSpec Visits a {@code UnionType} element by calling {@code * visitUnknown}. - + * * @param t {@inheritDoc} * @param p {@inheritDoc} * @return the result of {@code visitUnknown} @@ -128,15 +130,18 @@ } /** - * Visits an {@code IntersectionType} element by calling {@code + * {@inheritDoc} + * + * @implSpec Visits an {@code IntersectionType} element by calling {@code * visitUnknown}. - + * * @param t {@inheritDoc} * @param p {@inheritDoc} * @return the result of {@code visitUnknown} * * @since 1.8 */ + @Override public R visitIntersection(IntersectionType t, P p) { return visitUnknown(t, p); } @@ -144,16 +149,18 @@ /** * {@inheritDoc} * - *

The default implementation of this method in {@code + * @implSpec The default implementation of this method in {@code * AbstractTypeVisitor6} will always throw {@code * UnknownTypeException}. This behavior is not required of a * subclass. * - * @param t the type to visit + * @param t {@inheritDoc} + * @param p {@inheritDoc} * @return a visitor-specified result * @throws UnknownTypeException * a visitor implementation may optionally throw this exception */ + @Override public R visitUnknown(TypeMirror t, P p) { throw new UnknownTypeException(t, p); } diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitor7.java --- a/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitor7.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitor7.java Tue Jul 05 13:50:37 2016 -0700 @@ -89,5 +89,6 @@ * @param p {@inheritDoc} * @return the result of the visit as defined by a subclass */ + @Override public abstract R visitUnion(UnionType t, P p); } diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitor8.java --- a/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitor8.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitor8.java Tue Jul 05 13:50:37 2016 -0700 @@ -88,5 +88,6 @@ * @param p {@inheritDoc} * @return the result of the visit as defined by a subclass */ + @Override public abstract R visitIntersection(IntersectionType t, P p); } diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symbol.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symbol.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symbol.java Tue Jul 05 13:50:37 2016 -0700 @@ -1367,6 +1367,10 @@ t.interfaces_field = null; t.all_interfaces_field = null; } + clearAnnotationMetadata(); + } + + public void clearAnnotationMetadata() { metadata = null; annotationTypeMetadata = AnnotationTypeMetadata.notAnAnnotationType(); } diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java Tue Jul 05 13:50:37 2016 -0700 @@ -1126,10 +1126,13 @@ @Override public Boolean visitWildcardType(WildcardType t, Type s) { - if (s.isPartial()) - return visit(s, t); - else + if (!s.hasTag(WILDCARD)) { return false; + } else { + WildcardType t2 = (WildcardType)s; + return (t.kind == t2.kind || (t.isExtendsBound() && s.isExtendsBound())) && + isSameType(t.type, t2.type, true); + } } @Override diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Enter.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Enter.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Enter.java Tue Jul 05 13:50:37 2016 -0700 @@ -438,6 +438,7 @@ c.flags_field = chk.checkFlags(tree.pos(), tree.mods.flags, c, tree); c.sourcefile = env.toplevel.sourcefile; c.members_field = WriteableScope.create(c); + c.clearAnnotationMetadata(); ClassType ct = (ClassType)c.type; if (owner.kind != PCK && (c.flags_field & STATIC) == 0) { @@ -457,6 +458,7 @@ // Enter type parameters. ct.typarams_field = classEnter(tree.typarams, localEnv); + ct.allparams_field = null; // install further completer for this type. c.completer = typeEnter; diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/InferenceContext.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/InferenceContext.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/InferenceContext.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. * 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 @@ * This code and its internal interfaces are subject to change or * deletion without notice. */ -class InferenceContext { +public class InferenceContext { /** list of inference vars as undet vars */ List undetvars; @@ -112,6 +112,13 @@ } /** + * returns the list of undetermined variables in this inference context + */ + public List undetVars() { + return undetvars; + } + + /** * returns the list of uninstantiated variables (as type-variables) in this * inference context */ @@ -208,7 +215,7 @@ * undet vars (used ahead of subtyping/compatibility checks to allow propagation * of inference constraints). */ - final Type asUndetVar(Type t) { + public final Type asUndetVar(Type t) { return types.subst(t, inferencevars, undetvars); } @@ -286,7 +293,7 @@ /** * Save the state of this inference context */ - List save() { + public List save() { ListBuffer buf = new ListBuffer<>(); for (Type t : undetvars) { buf.add(((UndetVar)t).dup(infer.types)); @@ -298,7 +305,7 @@ * Consider that the number of saved undetermined variables can be different to the current * amount. This is because new captured variables could have been added. */ - void rollback(List saved_undet) { + public void rollback(List saved_undet) { Assert.check(saved_undet != null); //restore bounds (note: we need to preserve the old instances) ListBuffer newUndetVars = new ListBuffer<>(); diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java Tue Jul 05 13:50:37 2016 -0700 @@ -50,6 +50,7 @@ import javax.tools.JavaFileObject.Kind; import javax.tools.StandardLocation; +import com.sun.tools.javac.code.ClassFinder; import com.sun.tools.javac.code.Directive; import com.sun.tools.javac.code.Directive.ExportsDirective; import com.sun.tools.javac.code.Directive.RequiresDirective; @@ -101,6 +102,8 @@ import com.sun.tools.javac.tree.JCTree.JCDirective; import com.sun.tools.javac.tree.JCTree.Tag; +import com.sun.tools.javac.util.Abort; +import com.sun.tools.javac.util.Position; import static com.sun.tools.javac.code.Flags.ABSTRACT; import static com.sun.tools.javac.code.Flags.ENUM; @@ -217,6 +220,9 @@ for (ModuleSymbol msym: roots) { msym.complete(); } + } catch (CompletionFailure ex) { + log.error(JCDiagnostic.DiagnosticFlag.NON_DEFERRABLE, Position.NOPOS, "cant.access", ex.sym, ex.getDetailValue()); + if (ex instanceof ClassFinder.BadClassFile) throw new Abort(); } finally { depth--; } @@ -503,7 +509,9 @@ for (ModuleSymbol ms : allModules()) { if (ms == syms.unnamedModule || ms == msym) continue; - RequiresDirective d = new RequiresDirective(ms, EnumSet.of(RequiresFlag.PUBLIC)); + Set flags = (ms.flags_field & Flags.AUTOMATIC_MODULE) != 0 ? + EnumSet.of(RequiresFlag.PUBLIC) : EnumSet.noneOf(RequiresFlag.class); + RequiresDirective d = new RequiresDirective(ms, flags); directives.add(d); requires.add(d); } @@ -1000,29 +1008,19 @@ Set readable = new LinkedHashSet<>(); Set requiresPublic = new HashSet<>(); - if ((msym.flags() & Flags.AUTOMATIC_MODULE) == 0) { - for (RequiresDirective d : msym.requires) { - d.module.complete(); - readable.add(d.module); - Set s = retrieveRequiresPublic(d.module); - Assert.checkNonNull(s, () -> "no entry in cache for " + d.module); - readable.addAll(s); - if (d.flags.contains(RequiresFlag.PUBLIC)) { - requiresPublic.add(d.module); - requiresPublic.addAll(s); - } + + for (RequiresDirective d : msym.requires) { + d.module.complete(); + readable.add(d.module); + Set s = retrieveRequiresPublic(d.module); + Assert.checkNonNull(s, () -> "no entry in cache for " + d.module); + readable.addAll(s); + if (d.flags.contains(RequiresFlag.PUBLIC)) { + requiresPublic.add(d.module); + requiresPublic.addAll(s); } - } else { - //the module graph may contain cycles involving automatic modules - //handle automatic modules separatelly: - Set s = retrieveRequiresPublic(msym); + } - readable.addAll(s); - requiresPublic.addAll(s); - - //ensure the unnamed module is added (it is not requires public): - readable.add(syms.unnamedModule); - } requiresPublicCache.put(msym, requiresPublic); initVisiblePackages(msym, readable); for (ExportsDirective d: msym.exports) { diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java Tue Jul 05 13:50:37 2016 -0700 @@ -241,7 +241,14 @@ public final List> completeEnvs(List> envs) { boolean firstToComplete = queue.isEmpty(); - doCompleteEnvs(envs); + Phase prevTopLevelPhase = topLevelPhase; + + try { + topLevelPhase = this; + doCompleteEnvs(envs); + } finally { + topLevelPhase = prevTopLevelPhase; + } if (firstToComplete) { List> out = queue.toList(); @@ -278,6 +285,7 @@ } private final ImportsPhase completeClass = new ImportsPhase(); + private Phase topLevelPhase; /**Analyze import clauses. */ @@ -773,6 +781,15 @@ @Override public void complete(Symbol sym) throws CompletionFailure { + Assert.check((topLevelPhase instanceof ImportsPhase) || + (topLevelPhase == this)); + + if (topLevelPhase != this) { + //only do the processing based on dependencies in the HierarchyPhase: + sym.completer = this; + return ; + } + Env env = typeEnvs.get((ClassSymbol) sym); super.doCompleteEnvs(List.of(env)); diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/BaseFileManager.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/BaseFileManager.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/BaseFileManager.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,10 +25,8 @@ package com.sun.tools.javac.file; -import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; -import java.io.OutputStreamWriter; import java.lang.ref.SoftReference; import java.lang.reflect.Constructor; import java.lang.reflect.Method; @@ -43,7 +41,6 @@ import java.nio.charset.IllegalCharsetNameException; import java.nio.charset.UnsupportedCharsetException; import java.nio.file.Path; -import java.nio.file.Paths; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; @@ -65,7 +62,6 @@ import com.sun.tools.javac.util.Context; import com.sun.tools.javac.util.DefinedBy; import com.sun.tools.javac.util.DefinedBy.Api; -import com.sun.tools.javac.util.JCDiagnostic.SimpleDiagnosticPosition; import com.sun.tools.javac.util.Log; import com.sun.tools.javac.util.Options; @@ -334,8 +330,7 @@ private String defaultEncodingName; private String getDefaultEncodingName() { if (defaultEncodingName == null) { - defaultEncodingName = - new OutputStreamWriter(new ByteArrayOutputStream()).getEncoding(); + defaultEncodingName = Charset.defaultCharset().name(); } return defaultEncodingName; } diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java Tue Jul 05 13:50:37 2016 -0700 @@ -2418,6 +2418,9 @@ // reset and read rest of classinfo bp = startbp; int n = nextChar(); + if ((flags & MODULE) != 0 && n > 0) { + throw badClassFile("module.info.invalid.super.class"); + } if (ct.supertype_field == null) ct.supertype_field = (n == 0) ? Type.noType diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Tue Jul 05 13:50:37 2016 -0700 @@ -1506,7 +1506,6 @@ } public void visitClassDef(JCClassDecl node) { if (node.sym != null) { - node.sym.reset(); node.sym.completer = new ImplicitCompleter(topLevel); } node.sym = null; @@ -1605,7 +1604,7 @@ /** * Convert import-style string for supported annotations into a - * regex matching that string. If the string is a valid + * regex matching that string. If the string is not a valid * import-style string, return a regex that won't match anything. */ private static Pattern importStringToPattern(String s, Processor p, Log log) { diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties Tue Jul 05 13:50:37 2016 -0700 @@ -1850,6 +1850,9 @@ compiler.misc.class.file.wrong.class=\ class file contains wrong class: {0} +compiler.misc.module.info.invalid.super.class=\ + module-info with invalid super class + compiler.misc.class.file.not.found=\ class file for {0} not found diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/doclets/StandardDoclet.java --- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/doclets/StandardDoclet.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/doclets/StandardDoclet.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. * 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,7 +62,7 @@ return htmlDoclet.sourceVersion(); } - public boolean run(DocletEnvironment root) { - return htmlDoclet.run(root); + public boolean run(DocletEnvironment docEnv) { + return htmlDoclet.run(docEnv); } } diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassUseWriter.java --- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassUseWriter.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassUseWriter.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved. * 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,7 +178,7 @@ */ public static void generate(ConfigurationImpl configuration, ClassTree classtree) { ClassUseMapper mapper = new ClassUseMapper(configuration, classtree); - for (TypeElement aClass : configuration.root.getIncludedClasses()) { + for (TypeElement aClass : configuration.docEnv.getIncludedClasses()) { // If -nodeprecated option is set and the containing package is marked // as deprecated, do not generate the class-use page. We will still generate // the class-use page if the class is marked as deprecated but the containing diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassWriterImpl.java --- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassWriterImpl.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassWriterImpl.java Tue Jul 05 13:50:37 2016 -0700 @@ -208,7 +208,7 @@ bodyTree.addContent(HtmlConstants.START_OF_CLASS_DATA); HtmlTree div = new HtmlTree(HtmlTag.DIV); div.addStyle(HtmlStyle.header); - ModuleElement mdle = configuration.root.getElementUtils().getModuleOf(typeElement); + ModuleElement mdle = configuration.docEnv.getElementUtils().getModuleOf(typeElement); if (mdle != null && !mdle.isUnnamed()) { Content classModuleLabel = HtmlTree.SPAN(HtmlStyle.moduleLabelInClass, moduleLabel); Content moduleNameDiv = HtmlTree.DIV(HtmlStyle.subTitle, classModuleLabel); diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ConfigurationImpl.java --- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ConfigurationImpl.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ConfigurationImpl.java Tue Jul 05 13:50:37 2016 -0700 @@ -360,10 +360,10 @@ if (!validateOptions()) { return false; } - if (!root.getSpecifiedElements().isEmpty()) { + if (!docEnv.getSpecifiedElements().isEmpty()) { Map map = new HashMap<>(); PackageElement pkg; - List classes = new ArrayList<>(root.getIncludedClasses()); + List classes = new ArrayList<>(docEnv.getIncludedClasses()); for (TypeElement aClass : classes) { pkg = utils.containingPackage(aClass); if (!map.containsKey(utils.getPackageName(pkg))) { @@ -372,7 +372,7 @@ } } setCreateOverview(); - setTopFile(root); + setTopFile(docEnv); workArounds.initDocLint(doclintOpts.values(), tagletManager.getCustomTagNames(), Utils.toLowerCase(htmlVersion.name())); return true; @@ -441,8 +441,8 @@ return null; } - protected boolean checkForDeprecation(DocletEnvironment root) { - for (TypeElement te : root.getIncludedClasses()) { + protected boolean checkForDeprecation(DocletEnvironment docEnv) { + for (TypeElement te : docEnv.getIncludedClasses()) { if (isGeneratedDoc(te)) { return true; } @@ -496,7 +496,7 @@ */ @Override public JavaFileManager getFileManager() { - return root.getJavaFileManager(); + return docEnv.getJavaFileManager(); } @Override diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDoclet.java --- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDoclet.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDoclet.java Tue Jul 05 13:50:37 2016 -0700 @@ -82,12 +82,12 @@ /** * The "start" method as required by Javadoc. * - * @param root the root of the documentation tree. + * @param docEnv the root of the documentation tree. * @see jdk.doclet.DocletEnvironment * @return true if the doclet ran without encountering any errors. */ - public boolean run(DocletEnvironment root) { - return startDoclet(root); + public boolean run(DocletEnvironment docEnv) { + return startDoclet(docEnv); } /** @@ -109,12 +109,12 @@ * * @see jdk.doclet.RootDoc */ - protected void generateOtherFiles(DocletEnvironment root, ClassTree classtree) + protected void generateOtherFiles(DocletEnvironment docEnv, ClassTree classtree) throws Exception { - super.generateOtherFiles(root, classtree); + super.generateOtherFiles(docEnv, classtree); if (configuration.linksource) { SourceToHTMLConverter.convertRoot(configuration, - root, DocPaths.SOURCE_OUTPUT); + docEnv, DocPaths.SOURCE_OUTPUT); } if (configuration.topFile.isEmpty()) { diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageFrameWriter.java --- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageFrameWriter.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageFrameWriter.java Tue Jul 05 13:50:37 2016 -0700 @@ -86,7 +86,7 @@ this.packageElement = packageElement; if (utils.getSpecifiedPackages().isEmpty()) { documentedClasses = new TreeSet<>(utils.makeGeneralPurposeComparator()); - documentedClasses.addAll(configuration.root.getIncludedClasses()); + documentedClasses.addAll(configuration.docEnv.getIncludedClasses()); } } diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageIndexWriter.java --- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageIndexWriter.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageIndexWriter.java Tue Jul 05 13:50:37 2016 -0700 @@ -59,7 +59,7 @@ /** * Root of the program structure. Used for "overview" documentation. */ - private DocletEnvironment root; + private DocletEnvironment docEnv; /** * Map representing the group of packages as specified on the command line. @@ -87,7 +87,7 @@ */ public PackageIndexWriter(ConfigurationImpl configuration, DocPath filename) throws IOException { super(configuration, filename); - this.root = configuration.root; + this.docEnv = configuration.docEnv; groupPackageMap = configuration.group.groupPackages(packages); groupList = configuration.group.getGroupList(); } diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageWriterImpl.java --- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageWriterImpl.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageWriterImpl.java Tue Jul 05 13:50:37 2016 -0700 @@ -125,7 +125,7 @@ } HtmlTree div = new HtmlTree(HtmlTag.DIV); div.addStyle(HtmlStyle.header); - ModuleElement mdle = configuration.root.getElementUtils().getModuleOf(packageElement); + ModuleElement mdle = configuration.docEnv.getElementUtils().getModuleOf(packageElement); if (mdle != null && !mdle.isUnnamed()) { Content classModuleLabel = HtmlTree.SPAN(HtmlStyle.moduleLabelInClass, moduleLabel); Content moduleNameDiv = HtmlTree.DIV(HtmlStyle.subTitle, classModuleLabel); diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SerializedFormWriterImpl.java --- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SerializedFormWriterImpl.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SerializedFormWriterImpl.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved. * 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,7 +70,7 @@ public SerializedFormWriterImpl(ConfigurationImpl configuration) throws IOException { super(configuration, DocPaths.SERIALIZED_FORM); - visibleClasses = configuration.root.getIncludedClasses(); + visibleClasses = configuration.docEnv.getIncludedClasses(); } /** diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SourceToHTMLConverter.java --- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SourceToHTMLConverter.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SourceToHTMLConverter.java Tue Jul 05 13:50:37 2016 -0700 @@ -75,7 +75,7 @@ private final ConfigurationImpl configuration; private final Utils utils; - private final DocletEnvironment rootDoc; + private final DocletEnvironment docEnv; private DocPath outputdir; @@ -89,7 +89,7 @@ DocPath outputdir) { this.configuration = configuration; this.utils = configuration.utils; - this.rootDoc = rd; + this.docEnv = rd; this.outputdir = outputdir; } @@ -97,16 +97,16 @@ * Translate the TypeElements in the given DocletEnvironment to HTML representation. * * @param configuration the configuration. - * @param root the DocletEnvironment to convert. + * @param docEnv the DocletEnvironment to convert. * @param outputdir the name of the directory to output to. */ - public static void convertRoot(ConfigurationImpl configuration, DocletEnvironment root, + public static void convertRoot(ConfigurationImpl configuration, DocletEnvironment docEnv, DocPath outputdir) { - new SourceToHTMLConverter(configuration, root, outputdir).generate(); + new SourceToHTMLConverter(configuration, docEnv, outputdir).generate(); } void generate() { - if (rootDoc == null || outputdir == null) { + if (docEnv == null || outputdir == null) { return; } for (PackageElement pkg : utils.getSpecifiedPackages()) { diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/AbstractDoclet.java --- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/AbstractDoclet.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/AbstractDoclet.java Tue Jul 05 13:50:37 2016 -0700 @@ -91,7 +91,7 @@ */ public boolean startDoclet(DocletEnvironment root) { configuration = configuration(); - configuration.root = root; + configuration.docEnv = root; configuration.cmtUtils = new CommentUtils(configuration); configuration.utils = new Utils(configuration); utils = configuration.utils; diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/CommentUtils.java --- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/CommentUtils.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/CommentUtils.java Tue Jul 05 13:50:37 2016 -0700 @@ -66,9 +66,9 @@ protected CommentUtils(Configuration configuration) { this.configuration = configuration; - trees = configuration.root.getDocTrees(); + trees = configuration.docEnv.getDocTrees(); treeFactory = trees.getDocTreeFactory(); - elementUtils = configuration.root.getElementUtils(); + elementUtils = configuration.docEnv.getElementUtils(); } public List makePropertyDescriptionTree(List content) { diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/Configuration.java --- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/Configuration.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/Configuration.java Tue Jul 05 13:50:37 2016 -0700 @@ -179,7 +179,7 @@ /** * The Root of the generated Program Structure from the Doclet API. */ - public DocletEnvironment root; + public DocletEnvironment docEnv; /** * An utility class for commonly used helpers @@ -365,7 +365,7 @@ metakeywords = new MetaKeywords(this); optionsProcessed = new ArrayList<>(); groups = new ArrayList<>(0); - overviewElement = new OverviewElement(root); + overviewElement = new OverviewElement(docEnv); } /** @@ -388,7 +388,7 @@ // Build the modules structure used by the doclet modulePackages = new TreeMap<>(utils.makeModuleComparator()); for (PackageElement p: packages) { - ModuleElement mdle = root.getElementUtils().getModuleOf(p); + ModuleElement mdle = docEnv.getElementUtils().getModuleOf(p); if (mdle != null && !mdle.isUnnamed()) { Set s = modulePackages.get(mdle); if (s == null) diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/WorkArounds.java --- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/WorkArounds.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/WorkArounds.java Tue Jul 05 13:50:37 2016 -0700 @@ -65,8 +65,8 @@ import com.sun.tools.javac.util.Names; import jdk.javadoc.internal.doclets.toolkit.util.Utils; -import jdk.javadoc.internal.tool.DocEnv; -import jdk.javadoc.internal.tool.RootDocImpl; +import jdk.javadoc.internal.tool.ToolEnvironment; +import jdk.javadoc.internal.tool.DocEnvImpl; import static com.sun.tools.javac.code.Kinds.Kind.*; import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE; @@ -87,7 +87,7 @@ public class WorkArounds { public final Configuration configuration; - public final DocEnv env; + public final ToolEnvironment toolEnv; public final Utils utils; private DocLint doclint; @@ -95,7 +95,7 @@ public WorkArounds(Configuration configuration) { this.configuration = configuration; this.utils = this.configuration.utils; - this.env = ((RootDocImpl)this.configuration.root).env; + this.toolEnv = ((DocEnvImpl)this.configuration.docEnv).toolEnv; } Map shouldCheck = new HashMap<>(); @@ -135,7 +135,7 @@ doclintOpts.add(DocLint.XCUSTOM_TAGS_PREFIX + customTags.toString()); doclintOpts.add(DocLint.XHTML_VERSION_PREFIX + htmlVersion); - JavacTask t = BasicJavacTask.instance(env.context); + JavacTask t = BasicJavacTask.instance(toolEnv.context); doclint = new DocLint(); // standard doclet normally generates H1, H2 doclintOpts.add(DocLint.XIMPLICIT_HEADERS + "2"); @@ -151,7 +151,7 @@ // so we use javac directly, investigate why jx.l.m is not cutting it. public List interfaceTypesOf(TypeMirror type) { com.sun.tools.javac.util.List interfaces = - ((RootDocImpl)configuration.root).env.getTypes().interfaces((com.sun.tools.javac.code.Type)type); + ((DocEnvImpl)configuration.docEnv).toolEnv.getTypes().interfaces((com.sun.tools.javac.code.Type)type); if (interfaces.isEmpty()) { return Collections.emptyList(); } @@ -171,7 +171,7 @@ if (!utils.getDeprecatedTrees(e).isEmpty()) { return true; } - JavacTypes jctypes = ((RootDocImpl)configuration.root).env.typeutils; + JavacTypes jctypes = ((DocEnvImpl)configuration.docEnv).toolEnv.typeutils; TypeMirror deprecatedType = utils.getDeprecatedType(); for (AnnotationMirror anno : e.getAnnotationMirrors()) { if (jctypes.isSameType(anno.getAnnotationType().asElement().asType(), deprecatedType)) @@ -187,7 +187,7 @@ // TODO: implement using jx.l.model public boolean isVisible(TypeElement te) { - return env.isVisible((ClassSymbol)te); + return toolEnv.isVisible((ClassSymbol)te); } // TODO: fix the caller @@ -197,13 +197,13 @@ //TODO: DocTrees: Trees.getPath(Element e) is slow a factor 4-5 times. public Map getElementToTreePath() { - return env.elementToTreePath; + return toolEnv.elementToTreePath; } // TODO: needs to ported to jx.l.m. public TypeElement searchClass(TypeElement klass, String className) { // search by qualified name first - TypeElement te = configuration.root.getElementUtils().getTypeElement(className); + TypeElement te = configuration.docEnv.getElementUtils().getTypeElement(className); if (te != null) { return te; } @@ -233,7 +233,7 @@ if (tsym.sourcefile != null) { //### This information is available only for source classes. - Env compenv = env.getEnv(tsym); + Env compenv = toolEnv.getEnv(tsym); if (compenv == null) { return null; } @@ -271,12 +271,12 @@ } MethodSymbol sym = (MethodSymbol)method; ClassSymbol origin = (ClassSymbol) sym.owner; - for (com.sun.tools.javac.code.Type t = env.getTypes().supertype(origin.type); + for (com.sun.tools.javac.code.Type t = toolEnv.getTypes().supertype(origin.type); t.hasTag(com.sun.tools.javac.code.TypeTag.CLASS); - t = env.getTypes().supertype(t)) { + t = toolEnv.getTypes().supertype(t)) { ClassSymbol c = (ClassSymbol) t.tsym; for (com.sun.tools.javac.code.Symbol sym2 : c.members().getSymbolsByName(sym.name)) { - if (sym.overrides(sym2, origin, env.getTypes(), true)) { + if (sym.overrides(sym2, origin, toolEnv.getTypes(), true)) { return t; } } @@ -286,7 +286,7 @@ // TODO: investigate and reimplement without javac dependencies. public boolean shouldDocument(Element e) { - return env.shouldDocument(e); + return toolEnv.shouldDocument(e); } //------------------Start of Serializable Implementation---------------------// @@ -295,7 +295,7 @@ public SortedSet getSerializableFields(Utils utils, TypeElement klass) { NewSerializedForm sf = serializedForms.get(klass); if (sf == null) { - sf = new NewSerializedForm(utils, configuration.root.getElementUtils(), klass); + sf = new NewSerializedForm(utils, configuration.docEnv.getElementUtils(), klass); serializedForms.put(klass, sf); } return sf.fields; @@ -304,7 +304,7 @@ public SortedSet getSerializationMethods(Utils utils, TypeElement klass) { NewSerializedForm sf = serializedForms.get(klass); if (sf == null) { - sf = new NewSerializedForm(utils, configuration.root.getElementUtils(), klass); + sf = new NewSerializedForm(utils, configuration.docEnv.getElementUtils(), klass); serializedForms.put(klass, sf); } return sf.methods; @@ -316,7 +316,7 @@ } else { NewSerializedForm sf = serializedForms.get(klass); if (sf == null) { - sf = new NewSerializedForm(utils, configuration.root.getElementUtils(), klass); + sf = new NewSerializedForm(utils, configuration.docEnv.getElementUtils(), klass); serializedForms.put(klass, sf); } return sf.definesSerializableFields; @@ -533,7 +533,7 @@ // TODO: this is a fast way to get the JavaFileObject for // a package.html file, however we need to eliminate this. public JavaFileObject getJavaFileObject(PackageElement pe) { - return env.pkgToJavaFOMap.get(pe); + return toolEnv.pkgToJavaFOMap.get(pe); } // TODO: we need to eliminate this, as it is hacky. diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/SerializedFormBuilder.java --- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/SerializedFormBuilder.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/SerializedFormBuilder.java Tue Jul 05 13:50:37 2016 -0700 @@ -125,7 +125,7 @@ */ public void build() throws IOException { SortedSet rootclasses = new TreeSet<>(utils.makeGeneralPurposeComparator()); - rootclasses.addAll(configuration.root.getIncludedClasses()); + rootclasses.addAll(configuration.docEnv.getIncludedClasses()); if (!serialClassFoundToDocument(rootclasses)) { //Nothing to document. return; diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/ValueTaglet.java --- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/ValueTaglet.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/ValueTaglet.java Tue Jul 05 13:50:37 2016 -0700 @@ -161,7 +161,7 @@ memberName = sigValues[0]; } else { //Case 3: @value in different class. - Elements elements = config.root.getElementUtils(); + Elements elements = config.docEnv.getElementUtils(); te = elements.getTypeElement(sigValues[0]); memberName = sigValues[1]; } diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/ClassTree.java --- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/ClassTree.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/ClassTree.java Tue Jul 05 13:50:37 2016 -0700 @@ -113,7 +113,7 @@ baseEnums = new TreeSet<>(comparator); baseClasses = new TreeSet<>(comparator); baseInterfaces = new TreeSet<>(comparator); - buildTree(configuration.root.getIncludedClasses()); + buildTree(configuration.docEnv.getIncludedClasses()); } /** @@ -130,7 +130,7 @@ baseEnums = new TreeSet<>(comparator); baseClasses = new TreeSet<>(comparator); baseInterfaces = new TreeSet<>(comparator); - buildTree(configuration.root.getIncludedClasses()); + buildTree(configuration.docEnv.getIncludedClasses()); } /** diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/ClassUseMapper.java --- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/ClassUseMapper.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/ClassUseMapper.java Tue Jul 05 13:50:37 2016 -0700 @@ -187,15 +187,15 @@ */ public final Map> annotationToField = new HashMap<>(); - private final DocletEnvironment root; + private final DocletEnvironment docEnv; private final Elements elementUtils; private final Types typeUtils; private final Utils utils; public ClassUseMapper(ConfigurationImpl configuration, ClassTree classtree) { - root = configuration.root; - elementUtils = root.getElementUtils(); - typeUtils = root.getTypeUtils(); + docEnv = configuration.docEnv; + elementUtils = docEnv.getElementUtils(); + typeUtils = docEnv.getTypeUtils(); utils = configuration.utils; this.classtree = classtree; classToPackage = new TreeMap<>(utils.makeClassUseComparator()); @@ -208,7 +208,7 @@ implementingClasses(intfc); } // Map methods, fields, constructors using a class. - Set classes = root.getIncludedClasses(); + Set classes = docEnv.getIncludedClasses(); for (TypeElement aClass : classes) { PackageElement pkg = elementUtils.getPackageOf(aClass); mapAnnotations(classToPackageAnnotations, pkg, pkg); diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/CommentHelper.java --- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/CommentHelper.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/CommentHelper.java Tue Jul 05 13:50:37 2016 -0700 @@ -148,7 +148,7 @@ if (symbol == null) { return null; } - return c.root.getTypeUtils().asElement(symbol); + return c.docEnv.getTypeUtils().asElement(symbol); } // case A: the element contains no comments associated and // the comments need to be copied from ancestor @@ -172,7 +172,7 @@ } return null; } - DocTrees doctrees = c.root.getDocTrees(); + DocTrees doctrees = c.docEnv.getDocTrees(); return doctrees.getElement(docTreePath); } @@ -419,7 +419,7 @@ } public List getFirstSentenceTrees(Configuration c, List body) { - List firstSentence = c.root.getDocTrees().getFirstSentence(body); + List firstSentence = c.docEnv.getDocTrees().getFirstSentence(body); return firstSentence; } diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DeprecatedAPIListBuilder.java --- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DeprecatedAPIListBuilder.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DeprecatedAPIListBuilder.java Tue Jul 05 13:50:37 2016 -0700 @@ -96,7 +96,7 @@ } } deprecatedMap.put(DeprElementKind.PACKAGE, pset); - for (Element e : configuration.root.getIncludedClasses()) { + for (Element e : configuration.docEnv.getIncludedClasses()) { TypeElement te = (TypeElement)e; SortedSet eset; if (utils.isDeprecated(e)) { diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/IndexBuilder.java --- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/IndexBuilder.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/IndexBuilder.java Tue Jul 05 13:50:37 2016 -0700 @@ -110,7 +110,7 @@ comparator = classesOnly ? utils.makeAllClassesComparator() : utils.makeIndexUseComparator(); - buildIndexMap(configuration.root); + buildIndexMap(configuration.docEnv); } /** diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/PackageListWriter.java --- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/PackageListWriter.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/PackageListWriter.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved. * 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,7 +70,7 @@ PackageListWriter packgen; try { packgen = new PackageListWriter(configuration); - packgen.generatePackageListFile(configuration.root); + packgen.generatePackageListFile(configuration.docEnv); packgen.close(); } catch (IOException exc) { configuration.message.error("doclet.exception_encountered", diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Utils.java --- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Utils.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Utils.java Tue Jul 05 13:50:37 2016 -0700 @@ -108,9 +108,9 @@ public Utils(Configuration c) { configuration = c; - elementUtils = c.root.getElementUtils(); - typeUtils = c.root.getTypeUtils(); - docTrees = c.root.getDocTrees(); + elementUtils = c.docEnv.getElementUtils(); + typeUtils = c.docEnv.getTypeUtils(); + docTrees = c.docEnv.getDocTrees(); } // our own little symbol table @@ -530,7 +530,7 @@ public boolean isFunctionalInterface(AnnotationMirror amirror) { return amirror.getAnnotationType().equals(getFunctionalInterface()) && - configuration.root.getSourceVersion() + configuration.docEnv.getSourceVersion() .compareTo(SourceVersion.RELEASE_8) >= 0; } @@ -2223,9 +2223,9 @@ private void initSpecifiedElements() { specifiedClasses = new LinkedHashSet<>( - ElementFilter.typesIn(configuration.root.getSpecifiedElements())); + ElementFilter.typesIn(configuration.docEnv.getSpecifiedElements())); specifiedPackages = new LinkedHashSet<>( - ElementFilter.packagesIn(configuration.root.getSpecifiedElements())); + ElementFilter.packagesIn(configuration.docEnv.getSpecifiedElements())); } public Set getSpecifiedClasses() { @@ -2571,7 +2571,7 @@ } public boolean isIncluded(Element e) { - return configuration.root.isIncluded(e); + return configuration.docEnv.isIncluded(e); } /** diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/DocEnv.java --- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/DocEnv.java Thu Jun 30 14:57:30 2016 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,848 +0,0 @@ -/* - * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. - * 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.javadoc.internal.tool; - - -import java.lang.reflect.Modifier; -import java.util.*; - -import javax.lang.model.element.Element; -import javax.lang.model.element.ExecutableElement; -import javax.lang.model.element.PackageElement; -import javax.lang.model.element.TypeElement; -import javax.lang.model.element.VariableElement; -import javax.lang.model.util.Elements; -import javax.lang.model.util.SimpleElementVisitor9; -import javax.tools.JavaFileManager; -import javax.tools.JavaFileObject; - -import com.sun.source.util.DocTrees; -import com.sun.source.util.TreePath; -import com.sun.tools.javac.api.JavacTrees; -import com.sun.tools.javac.code.ClassFinder; -import com.sun.tools.javac.code.Flags; -import com.sun.tools.javac.code.Kinds.Kind; -import com.sun.tools.javac.code.Source; -import com.sun.tools.javac.code.Symbol; -import com.sun.tools.javac.code.Symbol.ClassSymbol; -import com.sun.tools.javac.code.Symbol.CompletionFailure; -import com.sun.tools.javac.code.Symbol.MethodSymbol; -import com.sun.tools.javac.code.Symbol.ModuleSymbol; -import com.sun.tools.javac.code.Symbol.PackageSymbol; -import com.sun.tools.javac.code.Symbol.VarSymbol; -import com.sun.tools.javac.code.Symtab; -import com.sun.tools.javac.comp.AttrContext; -import com.sun.tools.javac.comp.Check; -import com.sun.tools.javac.comp.Enter; -import com.sun.tools.javac.comp.Env; -import com.sun.tools.javac.file.JavacFileManager; -import com.sun.tools.javac.model.JavacElements; -import com.sun.tools.javac.model.JavacTypes; -import com.sun.tools.javac.tree.JCTree; -import com.sun.tools.javac.tree.JCTree.JCClassDecl; -import com.sun.tools.javac.tree.JCTree.JCCompilationUnit; -import com.sun.tools.javac.tree.JCTree.JCPackageDecl; -import com.sun.tools.javac.util.Context; -import com.sun.tools.javac.util.Convert; -import com.sun.tools.javac.util.DefinedBy; -import com.sun.tools.javac.util.DefinedBy.Api; -import com.sun.tools.javac.util.Name; -import com.sun.tools.javac.util.Names; - -import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE; - -/** - * Holds the environment for a run of javadoc. - * Holds only the information needed throughout the - * run and not the compiler info that could be GC'ed - * or ported. - * - *

This is NOT part of any supported API. - * If you write code that depends on this, you do so at your own risk. - * This code and its internal interfaces are subject to change or - * deletion without notice. - * - * @author Robert Field - * @author Neal Gafter (rewrite) - * @author Scott Seligman (generics) - */ -public class DocEnv { - protected static final Context.Key docEnvKey = new Context.Key<>(); - - public static DocEnv instance(Context context) { - DocEnv instance = context.get(docEnvKey); - if (instance == null) - instance = new DocEnv(context); - return instance; - } - - private final Messager messager; - - /** Predefined symbols known to the compiler. */ - public final Symtab syms; - - /** Referenced directly in RootDocImpl. */ - private final ClassFinder finder; - - /** Javadoc's own version of the compiler's enter phase. */ - final Enter enter; - - /** The name table. */ - private Names names; - - /** The encoding name. */ - private String encoding; - - final Symbol externalizableSym; - - /** Access filter (public, protected, ...). */ - protected ModifierFilter filter; - - /** - * True if we do not want to print any notifications at all. - */ - boolean quiet = false; - - Check chk; - com.sun.tools.javac.code.Types types; - JavaFileManager fileManager; - public final Context context; - - WeakHashMap treePaths = new WeakHashMap<>(); - - public final HashMap pkgToJavaFOMap = new HashMap<>(); - - /** Allow documenting from class files? */ - boolean docClasses = false; - - /** - * The source language version. - */ - public final Source source; - - public final Elements elements; - - public final JavacTypes typeutils; - - protected RootDocImpl root; - - public final DocTrees docTrees; - - public final Map elementToTreePath; - - /** - * Constructor - * - * @param context Context for this javadoc instance. - */ - protected DocEnv(Context context) { - context.put(docEnvKey, this); - this.context = context; - - messager = Messager.instance0(context); - syms = Symtab.instance(context); - finder = JavadocClassFinder.instance(context); - enter = JavadocEnter.instance(context); - names = Names.instance(context); - externalizableSym = syms.enterClass(syms.java_base, names.fromString("java.io.Externalizable")); - chk = Check.instance(context); - types = com.sun.tools.javac.code.Types.instance(context); - fileManager = context.get(JavaFileManager.class); - if (fileManager instanceof JavacFileManager) { - ((JavacFileManager)fileManager).setSymbolFileEnabled(false); - } - docTrees = JavacTrees.instance(context); - source = Source.instance(context); - elements = JavacElements.instance(context); - typeutils = JavacTypes.instance(context); - elementToTreePath = new HashMap<>(); - } - - public void intialize(String encoding, - String showAccess, - String overviewpath, - List javaNames, - Iterable fileObjects, - List subPackages, - List excludedPackages, - boolean docClasses, - boolean quiet) { - this.filter = ModifierFilter.getModifierFilter(showAccess); - this.quiet = quiet; - - this.setEncoding(encoding); - this.docClasses = docClasses; - } - - /** - * Load a class by qualified name. - */ - public TypeElement loadClass(String name) { - try { - Name nameImpl = names.fromString(name); - ModuleSymbol mod = syms.inferModule(Convert.packagePart(nameImpl)); - ClassSymbol c = finder.loadClass(mod != null ? mod : syms.errModule, nameImpl); - return c; - } catch (CompletionFailure ex) { - chk.completionError(null, ex); - return null; - } - } - - private boolean isSynthetic(long flags) { - return (flags & Flags.SYNTHETIC) != 0; - } - - private boolean isSynthetic(Symbol sym) { - return isSynthetic(sym.flags_field); - } - - SimpleElementVisitor9 shouldDocumentVisitor = null; - public boolean shouldDocument(Element e) { - if (shouldDocumentVisitor == null) { - shouldDocumentVisitor = new SimpleElementVisitor9() { - - @Override @DefinedBy(Api.LANGUAGE_MODEL) - public Boolean visitType(TypeElement e, Void p) { - return shouldDocument((ClassSymbol)e); - } - - @Override @DefinedBy(Api.LANGUAGE_MODEL) - public Boolean visitVariable(VariableElement e, Void p) { - return shouldDocument((VarSymbol)e); - } - - @Override @DefinedBy(Api.LANGUAGE_MODEL) - public Boolean visitExecutable(ExecutableElement e, Void p) { - return shouldDocument((MethodSymbol)e); - } - }; - } - return shouldDocumentVisitor.visit(e); - } - - /** Check whether this member should be documented. */ - public boolean shouldDocument(VarSymbol sym) { - long mod = sym.flags(); - if (isSynthetic(mod)) { - return false; - } - return filter.checkModifier(translateModifiers(mod)); - } - - /** Check whether this member should be documented. */ - public boolean shouldDocument(MethodSymbol sym) { - long mod = sym.flags(); - if (isSynthetic(mod)) { - return false; - } - return filter.checkModifier(translateModifiers(mod)); - } - - void setElementToTreePath(Element e, TreePath tree) { - if (e == null || tree == null) - return; - elementToTreePath.put(e, tree); - } - - private boolean hasLeaf(ClassSymbol sym) { - TreePath path = elementToTreePath.get(sym); - if (path == null) - return false; - return path.getLeaf() != null; - } - - /** check whether this class should be documented. */ - public boolean shouldDocument(ClassSymbol sym) { - return - !isSynthetic(sym.flags_field) && // no synthetics - (docClasses || hasLeaf(sym)) && - isVisible(sym); - } - - //### Comment below is inaccurate wrt modifier filter testing - /** - * Check the visibility if this is an nested class. - * if this is not a nested class, return true. - * if this is an static visible nested class, - * return true. - * if this is an visible nested class - * if the outer class is visible return true. - * else return false. - * IMPORTANT: This also allows, static nested classes - * to be defined inside an nested class, which is not - * allowed by the compiler. So such an test case will - * not reach upto this method itself, but if compiler - * allows it, then that will go through. - */ - public boolean isVisible(ClassSymbol sym) { - long mod = sym.flags_field; - if (!filter.checkModifier(translateModifiers(mod))) { - return false; - } - ClassSymbol encl = sym.owner.enclClass(); - return (encl == null || (mod & Flags.STATIC) != 0 || isVisible(encl)); - } - - //---------------- print forwarders ----------------// - - // ERRORS - /** - * Print error message, increment error count. - * - * @param msg message to print. - */ - public void printError(String msg) { - messager.printError(msg); - } - -// /** -// * Print error message, increment error count. -// * -// * @param key selects message from resource -// */ -// public void error(Element element, String key) { -// if (element == null) -// messager.error(key); -// else -// messager.error(element, key); -// } -// -// public void error(String prefix, String key) { -// printError(prefix + ":" + messager.getText(key)); -// } -// -// /** -// * Print error message, increment error count. -// * -// * @param path the path to the source -// * @param key selects message from resource -// */ -// public void error(DocTreePath path, String key) { -// messager.error(path, key); -// } -// -// /** -// * Print error message, increment error count. -// * -// * @param path the path to the source -// * @param msg message to print. -// */ -// public void printError(DocTreePath path, String msg) { -// messager.printError(path, msg); -// } -// -// /** -// * Print error message, increment error count. -// * @param e the target element -// * @param msg message to print. -// */ -// public void printError(Element e, String msg) { -// messager.printError(e, msg); -// } - - /** - * Print error message, increment error count. - * - * @param element the source element - * @param key selects message from resource - * @param args replacement arguments - */ - public void error(Element element, String key, String... args) { - if (element == null) - messager.error(key, (Object[]) args); - else - messager.error(element, key, (Object[]) args); - } - - // WARNINGS - -// /** -// * Print warning message, increment warning count. -// * -// * @param msg message to print. -// */ -// public void printWarning(String msg) { -// messager.printWarning(msg); -// } -// -// public void warning(String key) { -// warning((Element)null, key); -// } - - public void warning(String key, String... args) { - warning((Element)null, key, args); - } - -// /** -// * Print warning message, increment warning count. -// * -// * @param element the source element -// * @param key selects message from resource -// */ -// public void warning(Element element, String key) { -// if (element == null) -// messager.warning(key); -// else -// messager.warning(element, key); -// } -// -// /** -// * Print warning message, increment warning count. -// * -// * @param path the path to the source -// * @param msg message to print. -// */ -// public void printWarning(DocTreePath path, String msg) { -// messager.printWarning(path, msg); -// } -// -// /** -// * Print warning message, increment warning count. -// * -// * @param e the source element -// * @param msg message to print. -// */ -// public void printWarning(Element e, String msg) { -// messager.printWarning(e, msg); -// } - - /** - * Print warning message, increment warning count. - * - * @param e the source element - * @param key selects message from resource - * @param args the replace arguments - */ - public void warning(Element e, String key, String... args) { - if (e == null) - messager.warning(key, (Object[]) args); - else - messager.warning(e, key, (Object[]) args); - } - -// Note: no longer required -// /** -// * Print a message. -// * -// * @param msg message to print. -// */ -// public void printNotice(String msg) { -// if (quiet) { -// return; -// } -// messager.printNotice(msg); -// } - -// Note: no longer required -// /** -// * Print a message. -// * -// * @param e the source element -// * @param msg message to print. -// */ -// public void printNotice(Element e, String msg) { -// if (quiet) { -// return; -// } -// messager.printNotice(e, msg); -// } - - // NOTICES - /** - * Print a message. - * - * @param key selects message from resource - */ - public void notice(String key) { - if (quiet) { - return; - } - messager.notice(key); - } - -// Note: not used anymore -// /** -// * Print a message. -// * -// * @param path the path to the source -// * @param msg message to print. -// */ -// public void printNotice(DocTreePath path, String msg) { -// if (quiet) { -// return; -// } -// messager.printNotice(path, msg); -// } - - /** - * Print a message. - * - * @param key selects message from resource - * @param a1 first argument - */ - public void notice(String key, String a1) { - if (quiet) { - return; - } - messager.notice(key, a1); - } - -// Note: not used anymore -// /** -// * Print a message. -// * -// * @param key selects message from resource -// * @param a1 first argument -// * @param a2 second argument -// */ -// public void notice(String key, String a1, String a2) { -// if (quiet) { -// return; -// } -// messager.notice(key, a1, a2); -// } -// - -// Note: not used anymore -// /** -// * Print a message. -// * -// * @param key selects message from resource -// * @param a1 first argument -// * @param a2 second argument -// * @param a3 third argument -// */ -// public void notice(String key, String a1, String a2, String a3) { -// if (quiet) { -// return; -// } -// messager.notice(key, a1, a2, a3); -// } - - /** - * Exit, reporting errors and warnings. - */ - public void exit() { - // Messager should be replaced by a more general - // compilation environment. This can probably - // subsume DocEnv as well. - throw new Messager.ExitJavadoc(); - } - - /** - * Adds all inner classes of this class, and their inner classes recursively, to the list - */ - void addAllClasses(Collection list, TypeElement typeElement, boolean filtered) { - ClassSymbol klass = (ClassSymbol)typeElement; - try { - if (isSynthetic(klass.flags())) return; - // sometimes synthetic classes are not marked synthetic - if (!JavadocTool.isValidClassName(klass.name.toString())) return; - if (filtered && !shouldDocument(klass)) return; - if (list.contains(klass)) return; - list.add(klass); - for (Symbol sym : klass.members().getSymbols(NON_RECURSIVE)) { - if (sym != null && sym.kind == Kind.TYP) { - ClassSymbol s = (ClassSymbol)sym; - if (!isSynthetic(s.flags())) { - addAllClasses(list, s, filtered); - } - } - } - } catch (CompletionFailure e) { - // quietly ignore completion failures - } - } - - /** - * Return a list of all classes contained in this package, including - * member classes of those classes, and their member classes, etc. - */ - void addAllClasses(Collection list, PackageElement pkg) { - boolean filtered = true; - PackageSymbol sym = (PackageSymbol)pkg; - for (Symbol isym : sym.members().getSymbols(NON_RECURSIVE)) { - if (isym != null) { - ClassSymbol s = (ClassSymbol)isym; - if (!isSynthetic(s)) { - addAllClasses(list, s, filtered); - } - } - } - } - - TreePath getTreePath(JCCompilationUnit tree) { - TreePath p = treePaths.get(tree); - if (p == null) - treePaths.put(tree, p = new TreePath(tree)); - return p; - } - - TreePath getTreePath(JCCompilationUnit toplevel, JCPackageDecl tree) { - TreePath p = treePaths.get(tree); - if (p == null) - treePaths.put(tree, p = new TreePath(getTreePath(toplevel), tree)); - return p; - } - - TreePath getTreePath(JCCompilationUnit toplevel, JCClassDecl tree) { - TreePath p = treePaths.get(tree); - if (p == null) - treePaths.put(tree, p = new TreePath(getTreePath(toplevel), tree)); - return p; - } - - TreePath getTreePath(JCCompilationUnit toplevel, JCClassDecl cdecl, JCTree tree) { - return new TreePath(getTreePath(toplevel, cdecl), tree); - } - - public com.sun.tools.javac.code.Types getTypes() { - return types; - } - - /** - * Set the encoding. - */ - public void setEncoding(String encoding) { - this.encoding = encoding; - } - - public Env getEnv(ClassSymbol tsym) { - return enter.getEnv(tsym); - } - - /** - * Get the encoding. - */ - public String getEncoding() { - return encoding; - } - - /** - * Convert modifier bits from private coding used by - * the compiler to that of java.lang.reflect.Modifier. - */ - static int translateModifiers(long flags) { - int result = 0; - if ((flags & Flags.ABSTRACT) != 0) - result |= Modifier.ABSTRACT; - if ((flags & Flags.FINAL) != 0) - result |= Modifier.FINAL; - if ((flags & Flags.INTERFACE) != 0) - result |= Modifier.INTERFACE; - if ((flags & Flags.NATIVE) != 0) - result |= Modifier.NATIVE; - if ((flags & Flags.PRIVATE) != 0) - result |= Modifier.PRIVATE; - if ((flags & Flags.PROTECTED) != 0) - result |= Modifier.PROTECTED; - if ((flags & Flags.PUBLIC) != 0) - result |= Modifier.PUBLIC; - if ((flags & Flags.STATIC) != 0) - result |= Modifier.STATIC; - if ((flags & Flags.SYNCHRONIZED) != 0) - result |= Modifier.SYNCHRONIZED; - if ((flags & Flags.TRANSIENT) != 0) - result |= Modifier.TRANSIENT; - if ((flags & Flags.VOLATILE) != 0) - result |= Modifier.VOLATILE; - return result; - } - - private final Set includedSet = new HashSet<>(); - - public void setIncluded(Element element) { - includedSet.add(element); - } - - private SimpleElementVisitor9 includedVisitor = null; - - public boolean isIncluded(Element e) { - if (e == null) { - return false; - } - if (includedVisitor == null) { - includedVisitor = new SimpleElementVisitor9() { - @Override @DefinedBy(Api.LANGUAGE_MODEL) - public Boolean visitType(TypeElement e, Void p) { - if (includedSet.contains(e)) { - return true; - } - if (shouldDocument(e)) { - // Class is nameable from top-level and - // the class and all enclosing classes - // pass the modifier filter. - PackageElement pkg = elements.getPackageOf(e); - if (includedSet.contains(pkg)) { - setIncluded(e); - return true; - } - Element enclosing = e.getEnclosingElement(); - if (enclosing != null && includedSet.contains(enclosing)) { - setIncluded(e); - return true; - } - } - return false; - } - - @Override @DefinedBy(Api.LANGUAGE_MODEL) - public Boolean visitPackage(PackageElement e, Void p) { - return includedSet.contains(e); - } - - @Override @DefinedBy(Api.LANGUAGE_MODEL) - public Boolean visitUnknown(Element e, Void p) { - throw new AssertionError("unknown element: " + e); - } - - @Override @DefinedBy(Api.LANGUAGE_MODEL) - public Boolean defaultAction(Element e, Void p) { - return visit(e.getEnclosingElement()) && shouldDocument(e); - } - }; - } - return includedVisitor.visit(e); - } - - public boolean isQuiet() { - return quiet; - } - - /** - * A class which filters the access flags on classes, fields, methods, etc. - * - *

- * This is NOT part of any supported API. If you write code that depends on this, you do so - * at your own risk. This code and its internal interfaces are subject to change or deletion - * without notice. - * - * @see javax.lang.model.element.Modifier - * @author Robert Field - */ - - private static class ModifierFilter { - - static enum FilterFlag { - PACKAGE, - PRIVATE, - PROTECTED, - PUBLIC - } - - private Set oneOf; - - /** - * Constructor - Specify a filter. - * - * @param oneOf a set containing desired flags to be matched. - */ - ModifierFilter(Set oneOf) { - this.oneOf = oneOf; - } - - /** - * Constructor - Specify a filter. - * - * @param oneOf an array containing desired flags to be matched. - */ - ModifierFilter(FilterFlag... oneOf) { - this.oneOf = new HashSet<>(); - this.oneOf.addAll(Arrays.asList(oneOf)); - } - - static ModifierFilter getModifierFilter(String showAccess) { - switch (showAccess) { - case "public": - return new ModifierFilter(FilterFlag.PUBLIC); - case "package": - return new ModifierFilter(FilterFlag.PUBLIC, FilterFlag.PROTECTED, - FilterFlag.PACKAGE); - case "private": - return new ModifierFilter(FilterFlag.PRIVATE); - default: - return new ModifierFilter(FilterFlag.PUBLIC, FilterFlag.PROTECTED); - } - } - - private boolean hasFlag(long flag, long modifierBits) { - return (flag & modifierBits) != 0; - } - - private List flagsToModifiers(long modifierBits) { - List list = new ArrayList<>(); - boolean isPackage = true; - if (hasFlag(com.sun.tools.javac.code.Flags.PRIVATE, modifierBits)) { - list.add(FilterFlag.PRIVATE); - isPackage = false; - } - if (hasFlag(com.sun.tools.javac.code.Flags.PROTECTED, modifierBits)) { - list.add(FilterFlag.PROTECTED); - isPackage = false; - } - if (hasFlag(com.sun.tools.javac.code.Flags.PUBLIC, modifierBits)) { - list.add(FilterFlag.PUBLIC); - isPackage = false; - } - if (isPackage) { - list.add(FilterFlag.PACKAGE); - } - return list; - } - - /** - * Filter on modifier bits. - * - * @param modifierBits Bits as specified in the Modifier class - * - * @return Whether the modifierBits pass this filter. - */ - public boolean checkModifier(int modifierBits) { - return checkModifier(flagsToModifiers(modifierBits)); - } - - /** - * Filter on Filter flags - * - * @param modifiers Flags as specified in the FilterFlags enumeration. - * - * @return if the modifier is contained. - */ - public boolean checkModifier(List modifiers) { - if (oneOf.contains(FilterFlag.PRIVATE)) { - return true; - } - for (FilterFlag mod : modifiers) { - if (oneOf.contains(mod)) { - return true; - } - } - return false; - } - - } // end ModifierFilter -} diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/DocEnvImpl.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/DocEnvImpl.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,304 @@ +/* + * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. + * 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.javadoc.internal.tool; + +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import javax.lang.model.SourceVersion; +import javax.lang.model.element.Element; +import javax.lang.model.element.PackageElement; +import javax.lang.model.element.TypeElement; +import javax.lang.model.util.Elements; +import javax.lang.model.util.Types; +import javax.tools.JavaFileManager; + +import com.sun.source.util.DocTrees; +import com.sun.tools.javac.code.Source; +import com.sun.tools.javac.tree.JCTree.JCClassDecl; +import jdk.javadoc.doclet.DocletEnvironment; + +/** + * This class holds the information from one run of javadoc. + * Particularly the packages, classes and options specified + * by the user. + * + *

This is NOT part of any supported API. + * If you write code that depends on this, you do so at your own risk. + * This code and its internal interfaces are subject to change or + * deletion without notice. + * + * @author Robert Field + * @author Atul M Dambalkar + * @author Neal Gafter (rewrite) + */ +public class DocEnvImpl implements DocletEnvironment { + + /** + * list of classes specified on the command line. + */ + private Set cmdLineClasses; + + /** + * list of packages specified on the command line. + */ + private Set cmdLinePackages; + + public final ToolEnvironment toolEnv; + + /** + * Constructor used when reading source files. + * + * @param toolEnv the documentation environment, state for this javadoc run + * @param classes list of classes specified on the commandline + * @param packages list of package names specified on the commandline + */ + public DocEnvImpl(ToolEnvironment toolEnv, List classes, List packages) { + this.toolEnv = toolEnv; + setPackages(toolEnv, packages); + setClasses(toolEnv, classes); + } + + /** + * Constructor used when reading class files. + * + * @param toolEnv the documentation environment, state for this javadoc run + * @param classes list of class names specified on the commandline + */ + public DocEnvImpl(ToolEnvironment toolEnv, List classes) { + //super(env, null); + this.toolEnv = toolEnv; + + Set classList = new LinkedHashSet<>(); + for (String className : classes) { + TypeElement c = toolEnv.loadClass(className); + if (c == null) + toolEnv.error(null, "javadoc.class_not_found", className); + else + classList.add(c); + } + cmdLineClasses = classList; + } + + /** + * Initialize classes information. Those classes are input from + * command line. + * + * @param toolEnv the compilation environment + * @param classes a list of ClassDeclaration + */ + private void setClasses(ToolEnvironment toolEnv, List classes) { + Set result = new LinkedHashSet<>(); + classes.stream().filter((def) -> (toolEnv.shouldDocument(def.sym))).forEach((def) -> { + TypeElement te = (TypeElement)def.sym; + if (te != null) { + toolEnv.setIncluded((Element)def.sym); + result.add(te); + } + }); + cmdLineClasses = Collections.unmodifiableSet(result); + } + + /** + * Initialize packages information. + * + * @param toolEnv the compilation environment + * @param packages a list of package names (String) + */ + private void setPackages(ToolEnvironment toolEnv, List packages) { + Set packlist = new LinkedHashSet<>(); + packages.stream().forEach((name) -> { + PackageElement pkg = getElementUtils().getPackageElement(name); + if (pkg != null) { + toolEnv.setIncluded(pkg); + packlist.add(pkg); + } else { + toolEnv.warning("main.no_source_files_for_package", name); + } + }); + cmdLinePackages = Collections.unmodifiableSet(packlist); + } + + /** + * Packages specified on the command line. + */ + public Set specifiedPackages() { + return cmdLinePackages; + } + + /** + * Classes and interfaces specified on the command line, + * including their inner classes + */ + public Set specifiedClasses() { + Set out = new LinkedHashSet<>(); + cmdLineClasses.stream().forEach((te) -> { + toolEnv.addAllClasses(out, te, true); + }); + return out; + } + + private Set classesToDocument = null; + /** + * Return all classes and interfaces (including those inside + * packages) to be documented. + */ + public Set getIncludedClasses() { + if (classesToDocument == null) { + Set classes = new LinkedHashSet<>(); + + cmdLineClasses.stream().forEach((te) -> { + toolEnv.addAllClasses(classes, te, true); + }); + cmdLinePackages.stream().forEach((pkg) -> { + toolEnv.addAllClasses(classes, pkg); + }); + classesToDocument = Collections.unmodifiableSet(classes); + } + return classesToDocument; + } + + /** + * Return the name of this item. + * + * @return the string "*RootDocImpl*". + */ + public String name() { + return "*RootDocImpl*"; + } + + /** + * Return the name of this Doc item. + * + * @return the string "*RootDocImpl*". + */ + public String qualifiedName() { + return "*RootDocImpl*"; + } + + /** + * Return true if this Element is included in the active set. + * RootDocImpl isn't even a program entity so it is always false. + */ + @Override + public boolean isIncluded(Element e) { + return toolEnv.isIncluded(e); + } + +// Note: these reporting methods are no longer used. +// /** +// * Print error message, increment error count. +// * +// * @param msg message to print +// */ +// public void printError(String msg) { +// env.printError(msg); +// } +// +// /** +// * Print error message, increment error count. +// * +// * @param msg message to print +// */ +// public void printError(DocTreePath path, String msg) { +// env.printError(path, msg); +// } +// +// public void printError(Element e, String msg) { +// env.printError(e, msg); +// } +// +// public void printWarning(Element e, String msg) { +// env.printWarning(e, msg); +// } +// +// public void printNotice(Element e, String msg) { +// env.printNotice(e, msg); +// } +// +// /** +// * Print warning message, increment warning count. +// * +// * @param msg message to print +// */ +// public void printWarning(String msg) { +// env.printWarning(msg); +// } + + /** + * Return the current file manager. + */ + public JavaFileManager getFileManager() { + return toolEnv.fileManager; + } + + @Override + public DocTrees getDocTrees() { + return toolEnv.docTrees; + } + + @Override + public Elements getElementUtils() { + return toolEnv.elements; + } + + @Override + public List getSelectedElements(List elements) { + return elements.stream() + .filter(e -> isIncluded(e)) + .collect(Collectors.toList()); + } + + @Override + public Set getSpecifiedElements() { + Set out = new LinkedHashSet<>(); + specifiedPackages().stream().forEach((pe) -> { + out.add(pe); + }); + specifiedClasses().stream().forEach((e) -> { + out.add(e); + }); + return out; + } + + @Override + public Types getTypeUtils() { + return toolEnv.typeutils; + } + + @Override + public JavaFileManager getJavaFileManager() { + return toolEnv.fileManager; + } + + @Override + public SourceVersion getSourceVersion() { + return Source.toSourceVersion(toolEnv.source); + } +} diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocClassFinder.java --- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocClassFinder.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocClassFinder.java Tue Jul 05 13:50:37 2016 -0700 @@ -60,7 +60,7 @@ }); } - private DocEnv docenv; + private ToolEnvironment toolEnv; private EnumSet all = EnumSet.of(JavaFileObject.Kind.CLASS, JavaFileObject.Kind.SOURCE, JavaFileObject.Kind.HTML); @@ -72,7 +72,7 @@ public JavadocClassFinder(Context context) { super(context); - docenv = DocEnv.instance(context); + toolEnv = ToolEnvironment.instance(context); preferSource = true; trees = JavacTrees.instance(context); } @@ -82,7 +82,7 @@ */ @Override protected EnumSet getPackageFileKinds() { - return docenv.docClasses ? noSource : all; + return toolEnv.docClasses ? noSource : all; } /** @@ -91,7 +91,7 @@ @Override protected void extraFileActions(PackageSymbol pack, JavaFileObject fo) { if (fo.isNameCompatible("package", JavaFileObject.Kind.HTML)) { - docenv.pkgToJavaFOMap.put(pack, fo); + toolEnv.pkgToJavaFOMap.put(pack, fo); trees.putJavaFileObject(pack, fo); } } diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocEnter.java --- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocEnter.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocEnter.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved. * 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,11 +67,11 @@ protected JavadocEnter(Context context) { super(context); messager = Messager.instance0(context); - docenv = DocEnv.instance(context); + toolEnv = ToolEnvironment.instance(context); } final Messager messager; - final DocEnv docenv; + final ToolEnvironment toolEnv; @Override public void main(List trees) { @@ -87,8 +87,8 @@ super.visitTopLevel(tree); if (tree.sourcefile.isNameCompatible("package-info", JavaFileObject.Kind.SOURCE)) { JCPackageDecl pd = tree.getPackage(); - TreePath tp = pd == null ? docenv.getTreePath(tree) : docenv.getTreePath(tree, pd); - docenv.setElementToTreePath(tree.packge, tp); + TreePath tp = pd == null ? toolEnv.getTreePath(tree) : toolEnv.getTreePath(tree, pd); + toolEnv.setElementToTreePath(tree.packge, tp); } } @@ -98,7 +98,7 @@ if (tree.sym == null) return; if (tree.sym.kind == TYP || tree.sym.kind == ERR) { ClassSymbol c = tree.sym; - docenv.setElementToTreePath(c, docenv.getTreePath(env.toplevel, tree)); + toolEnv.setElementToTreePath(c, toolEnv.getTreePath(env.toplevel, tree)); } } diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocMemberEnter.java --- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocMemberEnter.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocMemberEnter.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. * 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,11 +63,11 @@ }); } - final DocEnv docenv; + final ToolEnvironment toolEnv; protected JavadocMemberEnter(Context context) { super(context); - docenv = DocEnv.instance(context); + toolEnv = ToolEnvironment.instance(context); } @Override @@ -75,12 +75,12 @@ super.visitMethodDef(tree); MethodSymbol meth = tree.sym; if (meth == null || meth.kind != MTH) return; - TreePath treePath = docenv.getTreePath(env.toplevel, env.enclClass, tree); + TreePath treePath = toolEnv.getTreePath(env.toplevel, env.enclClass, tree); // do not add those methods that may be mandated by the spec, // or those that are synthesized, thus if it does not exist in // tree best to let other logic determine the TreePath. if (env.enclClass.defs.contains(tree)) { - docenv.setElementToTreePath(meth, treePath); + toolEnv.setElementToTreePath(meth, treePath); } // release resources tree.body = null; @@ -101,7 +101,7 @@ } super.visitVarDef(tree); if (tree.sym != null && tree.sym.kind == VAR && !isParameter(tree.sym)) { - docenv.setElementToTreePath(tree.sym, docenv.getTreePath(env.toplevel, env.enclClass, tree)); + toolEnv.setElementToTreePath(tree.sym, toolEnv.getTreePath(env.toplevel, env.enclClass, tree)); } } diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocTool.java --- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocTool.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocTool.java Tue Jul 05 13:50:37 2016 -0700 @@ -74,7 +74,7 @@ * @author Neal Gafter */ public class JavadocTool extends com.sun.tools.javac.main.JavaCompiler { - DocEnv docenv; + ToolEnvironment toolEnv; final Messager messager; final ClassFinder javadocFinder; @@ -138,8 +138,8 @@ List excludedPackages, boolean docClasses, boolean quiet) throws IOException { - docenv = DocEnv.instance(context); - docenv.intialize(encoding, showAccess, overviewpath, args, fileObjects, + toolEnv = ToolEnvironment.instance(context); + toolEnv.intialize(encoding, showAccess, overviewpath, args, fileObjects, subPackages, excludedPackages, docClasses, quiet); javadocFinder.sourceCompleter = docClasses ? Completer.NULL_COMPLETER : sourceCompleter; @@ -148,12 +148,12 @@ // If -Xclasses is set, the args should be a series of class names for (String arg: args) { if (!isValidPackageName(arg)) // checks - docenv.error(null, "main.illegal_class_name", arg); + toolEnv.error(null, "main.illegal_class_name", arg); } if (messager.nerrors() != 0) { return null; } - return new RootDocImpl(docenv, args); + return new DocEnvImpl(toolEnv, args); } ListBuffer classTrees = new ListBuffer<>(); @@ -161,15 +161,15 @@ try { - StandardJavaFileManager fm = docenv.fileManager instanceof StandardJavaFileManager - ? (StandardJavaFileManager) docenv.fileManager : null; + StandardJavaFileManager fm = toolEnv.fileManager instanceof StandardJavaFileManager + ? (StandardJavaFileManager) toolEnv.fileManager : null; Set packageNames = new LinkedHashSet<>(); // Normally, the args should be a series of package names or file names. // Parse the files and collect the package names. for (String arg: args) { if (fm != null && arg.endsWith(".java") && new File(arg).exists()) { if (new File(arg).getName().equals("module-info.java")) { - docenv.warning("main.file_ignored", arg); + toolEnv.warning("main.file_ignored", arg); } else { parse(fm.getJavaFileObjects(arg), classTrees, true); } @@ -179,9 +179,9 @@ if (fm == null) throw new IllegalArgumentException(); else - docenv.error(null, "main.file_not_found", arg); + toolEnv.error(null, "main.file_not_found", arg); } else { - docenv.error(null, "main.illegal_package_name", arg); + toolEnv.error(null, "main.illegal_package_name", arg); } } @@ -193,10 +193,10 @@ // Build up the complete list of any packages to be documented Location location = modules.multiModuleMode ? StandardLocation.MODULE_SOURCE_PATH - : docenv.fileManager.hasLocation(StandardLocation.SOURCE_PATH) ? StandardLocation.SOURCE_PATH + : toolEnv.fileManager.hasLocation(StandardLocation.SOURCE_PATH) ? StandardLocation.SOURCE_PATH : StandardLocation.CLASS_PATH; - PackageTable t = new PackageTable(docenv.fileManager, location) + PackageTable t = new PackageTable(toolEnv.fileManager, location) .packages(packageNames) .subpackages(subPackages, excludedPackages); @@ -206,9 +206,9 @@ ListBuffer packageTrees = new ListBuffer<>(); for (String packageName: includedPackages) { List files = t.getFiles(packageName); - docenv.notice("main.Loading_source_files_for_package", packageName); + toolEnv.notice("main.Loading_source_files_for_package", packageName); if (files.isEmpty()) - docenv.warning("main.no_source_files_for_package", packageName); + toolEnv.warning("main.no_source_files_for_package", packageName); parse(files, packageTrees, false); } modules.enter(packageTrees.toList(), null); @@ -218,7 +218,7 @@ } // Enter symbols for all files - docenv.notice("main.Building_tree"); + toolEnv.notice("main.Building_tree"); javadocEnter.main(classTrees.toList().appendList(packageTrees.toList())); enterDone = true; @@ -226,9 +226,9 @@ if (messager.nerrors() != 0) return null; - docenv.root = new RootDocImpl(docenv, listClasses(classTrees.toList()), + toolEnv.docEnv = new DocEnvImpl(toolEnv, listClasses(classTrees.toList()), new ArrayList<>(includedPackages)); - return docenv.root; + return toolEnv.docEnv; } /** Is the given string a valid package name? */ @@ -246,7 +246,7 @@ for (JavaFileObject fo: files) { if (uniquefiles.add(fo)) { // ignore duplicates if (trace) - docenv.notice("main.Loading_source_file", fo.getName()); + toolEnv.notice("main.Loading_source_file", fo.getName()); trees.append(parse(fo)); } } diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/RootDocImpl.java --- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/RootDocImpl.java Thu Jun 30 14:57:30 2016 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,304 +0,0 @@ -/* - * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. - * 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.javadoc.internal.tool; - -import java.util.Collections; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; - -import javax.lang.model.SourceVersion; -import javax.lang.model.element.Element; -import javax.lang.model.element.PackageElement; -import javax.lang.model.element.TypeElement; -import javax.lang.model.util.Elements; -import javax.lang.model.util.Types; -import javax.tools.JavaFileManager; - -import com.sun.source.util.DocTrees; -import com.sun.tools.javac.code.Source; -import com.sun.tools.javac.tree.JCTree.JCClassDecl; -import jdk.javadoc.doclet.DocletEnvironment; - -/** - * This class holds the information from one run of javadoc. - * Particularly the packages, classes and options specified - * by the user. - * - *

This is NOT part of any supported API. - * If you write code that depends on this, you do so at your own risk. - * This code and its internal interfaces are subject to change or - * deletion without notice. - * - * @author Robert Field - * @author Atul M Dambalkar - * @author Neal Gafter (rewrite) - */ -public class RootDocImpl implements DocletEnvironment { - - /** - * list of classes specified on the command line. - */ - private Set cmdLineClasses; - - /** - * list of packages specified on the command line. - */ - private Set cmdLinePackages; - - public final DocEnv env; - - /** - * Constructor used when reading source files. - * - * @param env the documentation environment, state for this javadoc run - * @param classes list of classes specified on the commandline - * @param packages list of package names specified on the commandline - */ - public RootDocImpl(DocEnv env, List classes, List packages) { - this.env = env; - setPackages(env, packages); - setClasses(env, classes); - } - - /** - * Constructor used when reading class files. - * - * @param env the documentation environment, state for this javadoc run - * @param classes list of class names specified on the commandline - */ - public RootDocImpl(DocEnv env, List classes) { - //super(env, null); - this.env = env; - - Set classList = new LinkedHashSet<>(); - for (String className : classes) { - TypeElement c = env.loadClass(className); - if (c == null) - env.error(null, "javadoc.class_not_found", className); - else - classList.add(c); - } - cmdLineClasses = classList; - } - - /** - * Initialize classes information. Those classes are input from - * command line. - * - * @param env the compilation environment - * @param classes a list of ClassDeclaration - */ - private void setClasses(DocEnv env, List classes) { - Set result = new LinkedHashSet<>(); - classes.stream().filter((def) -> (env.shouldDocument(def.sym))).forEach((def) -> { - TypeElement te = (TypeElement)def.sym; - if (te != null) { - env.setIncluded((Element)def.sym); - result.add(te); - } - }); - cmdLineClasses = Collections.unmodifiableSet(result); - } - - /** - * Initialize packages information. - * - * @param env the compilation environment - * @param packages a list of package names (String) - */ - private void setPackages(DocEnv env, List packages) { - Set packlist = new LinkedHashSet<>(); - packages.stream().forEach((name) -> { - PackageElement pkg = getElementUtils().getPackageElement(name); - if (pkg != null) { - env.setIncluded(pkg); - packlist.add(pkg); - } else { - env.warning("main.no_source_files_for_package", name); - } - }); - cmdLinePackages = Collections.unmodifiableSet(packlist); - } - - /** - * Packages specified on the command line. - */ - public Set specifiedPackages() { - return cmdLinePackages; - } - - /** - * Classes and interfaces specified on the command line, - * including their inner classes - */ - public Set specifiedClasses() { - Set out = new LinkedHashSet<>(); - cmdLineClasses.stream().forEach((te) -> { - env.addAllClasses(out, te, true); - }); - return out; - } - - private Set classesToDocument = null; - /** - * Return all classes and interfaces (including those inside - * packages) to be documented. - */ - public Set getIncludedClasses() { - if (classesToDocument == null) { - Set classes = new LinkedHashSet<>(); - - cmdLineClasses.stream().forEach((te) -> { - env.addAllClasses(classes, te, true); - }); - cmdLinePackages.stream().forEach((pkg) -> { - env.addAllClasses(classes, pkg); - }); - classesToDocument = Collections.unmodifiableSet(classes); - } - return classesToDocument; - } - - /** - * Return the name of this item. - * - * @return the string "*RootDocImpl*". - */ - public String name() { - return "*RootDocImpl*"; - } - - /** - * Return the name of this Doc item. - * - * @return the string "*RootDocImpl*". - */ - public String qualifiedName() { - return "*RootDocImpl*"; - } - - /** - * Return true if this Element is included in the active set. - * RootDocImpl isn't even a program entity so it is always false. - */ - @Override - public boolean isIncluded(Element e) { - return env.isIncluded(e); - } - -// Note: these reporting methods are no longer used. -// /** -// * Print error message, increment error count. -// * -// * @param msg message to print -// */ -// public void printError(String msg) { -// env.printError(msg); -// } -// -// /** -// * Print error message, increment error count. -// * -// * @param msg message to print -// */ -// public void printError(DocTreePath path, String msg) { -// env.printError(path, msg); -// } -// -// public void printError(Element e, String msg) { -// env.printError(e, msg); -// } -// -// public void printWarning(Element e, String msg) { -// env.printWarning(e, msg); -// } -// -// public void printNotice(Element e, String msg) { -// env.printNotice(e, msg); -// } -// -// /** -// * Print warning message, increment warning count. -// * -// * @param msg message to print -// */ -// public void printWarning(String msg) { -// env.printWarning(msg); -// } - - /** - * Return the current file manager. - */ - public JavaFileManager getFileManager() { - return env.fileManager; - } - - @Override - public DocTrees getDocTrees() { - return env.docTrees; - } - - @Override - public Elements getElementUtils() { - return env.elements; - } - - @Override - public List getSelectedElements(List elements) { - return elements.stream() - .filter(e -> isIncluded(e)) - .collect(Collectors.toList()); - } - - @Override - public Set getSpecifiedElements() { - Set out = new LinkedHashSet<>(); - specifiedPackages().stream().forEach((pe) -> { - out.add(pe); - }); - specifiedClasses().stream().forEach((e) -> { - out.add(e); - }); - return out; - } - - @Override - public Types getTypeUtils() { - return env.typeutils; - } - - @Override - public JavaFileManager getJavaFileManager() { - return env.fileManager; - } - - @Override - public SourceVersion getSourceVersion() { - return Source.toSourceVersion(env.source); - } -} diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/ToolEnvironment.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/ToolEnvironment.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,848 @@ +/* + * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. + * 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.javadoc.internal.tool; + + +import java.lang.reflect.Modifier; +import java.util.*; + +import javax.lang.model.element.Element; +import javax.lang.model.element.ExecutableElement; +import javax.lang.model.element.PackageElement; +import javax.lang.model.element.TypeElement; +import javax.lang.model.element.VariableElement; +import javax.lang.model.util.Elements; +import javax.lang.model.util.SimpleElementVisitor9; +import javax.tools.JavaFileManager; +import javax.tools.JavaFileObject; + +import com.sun.source.util.DocTrees; +import com.sun.source.util.TreePath; +import com.sun.tools.javac.api.JavacTrees; +import com.sun.tools.javac.code.ClassFinder; +import com.sun.tools.javac.code.Flags; +import com.sun.tools.javac.code.Kinds.Kind; +import com.sun.tools.javac.code.Source; +import com.sun.tools.javac.code.Symbol; +import com.sun.tools.javac.code.Symbol.ClassSymbol; +import com.sun.tools.javac.code.Symbol.CompletionFailure; +import com.sun.tools.javac.code.Symbol.MethodSymbol; +import com.sun.tools.javac.code.Symbol.ModuleSymbol; +import com.sun.tools.javac.code.Symbol.PackageSymbol; +import com.sun.tools.javac.code.Symbol.VarSymbol; +import com.sun.tools.javac.code.Symtab; +import com.sun.tools.javac.comp.AttrContext; +import com.sun.tools.javac.comp.Check; +import com.sun.tools.javac.comp.Enter; +import com.sun.tools.javac.comp.Env; +import com.sun.tools.javac.file.JavacFileManager; +import com.sun.tools.javac.model.JavacElements; +import com.sun.tools.javac.model.JavacTypes; +import com.sun.tools.javac.tree.JCTree; +import com.sun.tools.javac.tree.JCTree.JCClassDecl; +import com.sun.tools.javac.tree.JCTree.JCCompilationUnit; +import com.sun.tools.javac.tree.JCTree.JCPackageDecl; +import com.sun.tools.javac.util.Context; +import com.sun.tools.javac.util.Convert; +import com.sun.tools.javac.util.DefinedBy; +import com.sun.tools.javac.util.DefinedBy.Api; +import com.sun.tools.javac.util.Name; +import com.sun.tools.javac.util.Names; + +import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE; + +/** + * Holds the environment for a run of javadoc. + * Holds only the information needed throughout the + * run and not the compiler info that could be GC'ed + * or ported. + * + *

This is NOT part of any supported API. + * If you write code that depends on this, you do so at your own risk. + * This code and its internal interfaces are subject to change or + * deletion without notice. + * + * @author Robert Field + * @author Neal Gafter (rewrite) + * @author Scott Seligman (generics) + */ +public class ToolEnvironment { + protected static final Context.Key ToolEnvKey = new Context.Key<>(); + + public static ToolEnvironment instance(Context context) { + ToolEnvironment instance = context.get(ToolEnvKey); + if (instance == null) + instance = new ToolEnvironment(context); + return instance; + } + + private final Messager messager; + + /** Predefined symbols known to the compiler. */ + public final Symtab syms; + + /** Referenced directly in RootDocImpl. */ + private final ClassFinder finder; + + /** Javadoc's own version of the compiler's enter phase. */ + final Enter enter; + + /** The name table. */ + private Names names; + + /** The encoding name. */ + private String encoding; + + final Symbol externalizableSym; + + /** Access filter (public, protected, ...). */ + protected ModifierFilter filter; + + /** + * True if we do not want to print any notifications at all. + */ + boolean quiet = false; + + Check chk; + com.sun.tools.javac.code.Types types; + JavaFileManager fileManager; + public final Context context; + + WeakHashMap treePaths = new WeakHashMap<>(); + + public final HashMap pkgToJavaFOMap = new HashMap<>(); + + /** Allow documenting from class files? */ + boolean docClasses = false; + + /** + * The source language version. + */ + public final Source source; + + public final Elements elements; + + public final JavacTypes typeutils; + + protected DocEnvImpl docEnv; + + public final DocTrees docTrees; + + public final Map elementToTreePath; + + /** + * Constructor + * + * @param context Context for this javadoc instance. + */ + protected ToolEnvironment(Context context) { + context.put(ToolEnvKey, this); + this.context = context; + + messager = Messager.instance0(context); + syms = Symtab.instance(context); + finder = JavadocClassFinder.instance(context); + enter = JavadocEnter.instance(context); + names = Names.instance(context); + externalizableSym = syms.enterClass(syms.java_base, names.fromString("java.io.Externalizable")); + chk = Check.instance(context); + types = com.sun.tools.javac.code.Types.instance(context); + fileManager = context.get(JavaFileManager.class); + if (fileManager instanceof JavacFileManager) { + ((JavacFileManager)fileManager).setSymbolFileEnabled(false); + } + docTrees = JavacTrees.instance(context); + source = Source.instance(context); + elements = JavacElements.instance(context); + typeutils = JavacTypes.instance(context); + elementToTreePath = new HashMap<>(); + } + + public void intialize(String encoding, + String showAccess, + String overviewpath, + List javaNames, + Iterable fileObjects, + List subPackages, + List excludedPackages, + boolean docClasses, + boolean quiet) { + this.filter = ModifierFilter.getModifierFilter(showAccess); + this.quiet = quiet; + + this.setEncoding(encoding); + this.docClasses = docClasses; + } + + /** + * Load a class by qualified name. + */ + public TypeElement loadClass(String name) { + try { + Name nameImpl = names.fromString(name); + ModuleSymbol mod = syms.inferModule(Convert.packagePart(nameImpl)); + ClassSymbol c = finder.loadClass(mod != null ? mod : syms.errModule, nameImpl); + return c; + } catch (CompletionFailure ex) { + chk.completionError(null, ex); + return null; + } + } + + private boolean isSynthetic(long flags) { + return (flags & Flags.SYNTHETIC) != 0; + } + + private boolean isSynthetic(Symbol sym) { + return isSynthetic(sym.flags_field); + } + + SimpleElementVisitor9 shouldDocumentVisitor = null; + public boolean shouldDocument(Element e) { + if (shouldDocumentVisitor == null) { + shouldDocumentVisitor = new SimpleElementVisitor9() { + + @Override @DefinedBy(Api.LANGUAGE_MODEL) + public Boolean visitType(TypeElement e, Void p) { + return shouldDocument((ClassSymbol)e); + } + + @Override @DefinedBy(Api.LANGUAGE_MODEL) + public Boolean visitVariable(VariableElement e, Void p) { + return shouldDocument((VarSymbol)e); + } + + @Override @DefinedBy(Api.LANGUAGE_MODEL) + public Boolean visitExecutable(ExecutableElement e, Void p) { + return shouldDocument((MethodSymbol)e); + } + }; + } + return shouldDocumentVisitor.visit(e); + } + + /** Check whether this member should be documented. */ + public boolean shouldDocument(VarSymbol sym) { + long mod = sym.flags(); + if (isSynthetic(mod)) { + return false; + } + return filter.checkModifier(translateModifiers(mod)); + } + + /** Check whether this member should be documented. */ + public boolean shouldDocument(MethodSymbol sym) { + long mod = sym.flags(); + if (isSynthetic(mod)) { + return false; + } + return filter.checkModifier(translateModifiers(mod)); + } + + void setElementToTreePath(Element e, TreePath tree) { + if (e == null || tree == null) + return; + elementToTreePath.put(e, tree); + } + + private boolean hasLeaf(ClassSymbol sym) { + TreePath path = elementToTreePath.get(sym); + if (path == null) + return false; + return path.getLeaf() != null; + } + + /** check whether this class should be documented. */ + public boolean shouldDocument(ClassSymbol sym) { + return + !isSynthetic(sym.flags_field) && // no synthetics + (docClasses || hasLeaf(sym)) && + isVisible(sym); + } + + //### Comment below is inaccurate wrt modifier filter testing + /** + * Check the visibility if this is an nested class. + * if this is not a nested class, return true. + * if this is an static visible nested class, + * return true. + * if this is an visible nested class + * if the outer class is visible return true. + * else return false. + * IMPORTANT: This also allows, static nested classes + * to be defined inside an nested class, which is not + * allowed by the compiler. So such an test case will + * not reach upto this method itself, but if compiler + * allows it, then that will go through. + */ + public boolean isVisible(ClassSymbol sym) { + long mod = sym.flags_field; + if (!filter.checkModifier(translateModifiers(mod))) { + return false; + } + ClassSymbol encl = sym.owner.enclClass(); + return (encl == null || (mod & Flags.STATIC) != 0 || isVisible(encl)); + } + + //---------------- print forwarders ----------------// + + // ERRORS + /** + * Print error message, increment error count. + * + * @param msg message to print. + */ + public void printError(String msg) { + messager.printError(msg); + } + +// /** +// * Print error message, increment error count. +// * +// * @param key selects message from resource +// */ +// public void error(Element element, String key) { +// if (element == null) +// messager.error(key); +// else +// messager.error(element, key); +// } +// +// public void error(String prefix, String key) { +// printError(prefix + ":" + messager.getText(key)); +// } +// +// /** +// * Print error message, increment error count. +// * +// * @param path the path to the source +// * @param key selects message from resource +// */ +// public void error(DocTreePath path, String key) { +// messager.error(path, key); +// } +// +// /** +// * Print error message, increment error count. +// * +// * @param path the path to the source +// * @param msg message to print. +// */ +// public void printError(DocTreePath path, String msg) { +// messager.printError(path, msg); +// } +// +// /** +// * Print error message, increment error count. +// * @param e the target element +// * @param msg message to print. +// */ +// public void printError(Element e, String msg) { +// messager.printError(e, msg); +// } + + /** + * Print error message, increment error count. + * + * @param element the source element + * @param key selects message from resource + * @param args replacement arguments + */ + public void error(Element element, String key, String... args) { + if (element == null) + messager.error(key, (Object[]) args); + else + messager.error(element, key, (Object[]) args); + } + + // WARNINGS + +// /** +// * Print warning message, increment warning count. +// * +// * @param msg message to print. +// */ +// public void printWarning(String msg) { +// messager.printWarning(msg); +// } +// +// public void warning(String key) { +// warning((Element)null, key); +// } + + public void warning(String key, String... args) { + warning((Element)null, key, args); + } + +// /** +// * Print warning message, increment warning count. +// * +// * @param element the source element +// * @param key selects message from resource +// */ +// public void warning(Element element, String key) { +// if (element == null) +// messager.warning(key); +// else +// messager.warning(element, key); +// } +// +// /** +// * Print warning message, increment warning count. +// * +// * @param path the path to the source +// * @param msg message to print. +// */ +// public void printWarning(DocTreePath path, String msg) { +// messager.printWarning(path, msg); +// } +// +// /** +// * Print warning message, increment warning count. +// * +// * @param e the source element +// * @param msg message to print. +// */ +// public void printWarning(Element e, String msg) { +// messager.printWarning(e, msg); +// } + + /** + * Print warning message, increment warning count. + * + * @param e the source element + * @param key selects message from resource + * @param args the replace arguments + */ + public void warning(Element e, String key, String... args) { + if (e == null) + messager.warning(key, (Object[]) args); + else + messager.warning(e, key, (Object[]) args); + } + +// Note: no longer required +// /** +// * Print a message. +// * +// * @param msg message to print. +// */ +// public void printNotice(String msg) { +// if (quiet) { +// return; +// } +// messager.printNotice(msg); +// } + +// Note: no longer required +// /** +// * Print a message. +// * +// * @param e the source element +// * @param msg message to print. +// */ +// public void printNotice(Element e, String msg) { +// if (quiet) { +// return; +// } +// messager.printNotice(e, msg); +// } + + // NOTICES + /** + * Print a message. + * + * @param key selects message from resource + */ + public void notice(String key) { + if (quiet) { + return; + } + messager.notice(key); + } + +// Note: not used anymore +// /** +// * Print a message. +// * +// * @param path the path to the source +// * @param msg message to print. +// */ +// public void printNotice(DocTreePath path, String msg) { +// if (quiet) { +// return; +// } +// messager.printNotice(path, msg); +// } + + /** + * Print a message. + * + * @param key selects message from resource + * @param a1 first argument + */ + public void notice(String key, String a1) { + if (quiet) { + return; + } + messager.notice(key, a1); + } + +// Note: not used anymore +// /** +// * Print a message. +// * +// * @param key selects message from resource +// * @param a1 first argument +// * @param a2 second argument +// */ +// public void notice(String key, String a1, String a2) { +// if (quiet) { +// return; +// } +// messager.notice(key, a1, a2); +// } +// + +// Note: not used anymore +// /** +// * Print a message. +// * +// * @param key selects message from resource +// * @param a1 first argument +// * @param a2 second argument +// * @param a3 third argument +// */ +// public void notice(String key, String a1, String a2, String a3) { +// if (quiet) { +// return; +// } +// messager.notice(key, a1, a2, a3); +// } + + /** + * Exit, reporting errors and warnings. + */ + public void exit() { + // Messager should be replaced by a more general + // compilation environment. This can probably + // subsume DocEnv as well. + throw new Messager.ExitJavadoc(); + } + + /** + * Adds all inner classes of this class, and their inner classes recursively, to the list + */ + void addAllClasses(Collection list, TypeElement typeElement, boolean filtered) { + ClassSymbol klass = (ClassSymbol)typeElement; + try { + if (isSynthetic(klass.flags())) return; + // sometimes synthetic classes are not marked synthetic + if (!JavadocTool.isValidClassName(klass.name.toString())) return; + if (filtered && !shouldDocument(klass)) return; + if (list.contains(klass)) return; + list.add(klass); + for (Symbol sym : klass.members().getSymbols(NON_RECURSIVE)) { + if (sym != null && sym.kind == Kind.TYP) { + ClassSymbol s = (ClassSymbol)sym; + if (!isSynthetic(s.flags())) { + addAllClasses(list, s, filtered); + } + } + } + } catch (CompletionFailure e) { + // quietly ignore completion failures + } + } + + /** + * Return a list of all classes contained in this package, including + * member classes of those classes, and their member classes, etc. + */ + void addAllClasses(Collection list, PackageElement pkg) { + boolean filtered = true; + PackageSymbol sym = (PackageSymbol)pkg; + for (Symbol isym : sym.members().getSymbols(NON_RECURSIVE)) { + if (isym != null) { + ClassSymbol s = (ClassSymbol)isym; + if (!isSynthetic(s)) { + addAllClasses(list, s, filtered); + } + } + } + } + + TreePath getTreePath(JCCompilationUnit tree) { + TreePath p = treePaths.get(tree); + if (p == null) + treePaths.put(tree, p = new TreePath(tree)); + return p; + } + + TreePath getTreePath(JCCompilationUnit toplevel, JCPackageDecl tree) { + TreePath p = treePaths.get(tree); + if (p == null) + treePaths.put(tree, p = new TreePath(getTreePath(toplevel), tree)); + return p; + } + + TreePath getTreePath(JCCompilationUnit toplevel, JCClassDecl tree) { + TreePath p = treePaths.get(tree); + if (p == null) + treePaths.put(tree, p = new TreePath(getTreePath(toplevel), tree)); + return p; + } + + TreePath getTreePath(JCCompilationUnit toplevel, JCClassDecl cdecl, JCTree tree) { + return new TreePath(getTreePath(toplevel, cdecl), tree); + } + + public com.sun.tools.javac.code.Types getTypes() { + return types; + } + + /** + * Set the encoding. + */ + public void setEncoding(String encoding) { + this.encoding = encoding; + } + + public Env getEnv(ClassSymbol tsym) { + return enter.getEnv(tsym); + } + + /** + * Get the encoding. + */ + public String getEncoding() { + return encoding; + } + + /** + * Convert modifier bits from private coding used by + * the compiler to that of java.lang.reflect.Modifier. + */ + static int translateModifiers(long flags) { + int result = 0; + if ((flags & Flags.ABSTRACT) != 0) + result |= Modifier.ABSTRACT; + if ((flags & Flags.FINAL) != 0) + result |= Modifier.FINAL; + if ((flags & Flags.INTERFACE) != 0) + result |= Modifier.INTERFACE; + if ((flags & Flags.NATIVE) != 0) + result |= Modifier.NATIVE; + if ((flags & Flags.PRIVATE) != 0) + result |= Modifier.PRIVATE; + if ((flags & Flags.PROTECTED) != 0) + result |= Modifier.PROTECTED; + if ((flags & Flags.PUBLIC) != 0) + result |= Modifier.PUBLIC; + if ((flags & Flags.STATIC) != 0) + result |= Modifier.STATIC; + if ((flags & Flags.SYNCHRONIZED) != 0) + result |= Modifier.SYNCHRONIZED; + if ((flags & Flags.TRANSIENT) != 0) + result |= Modifier.TRANSIENT; + if ((flags & Flags.VOLATILE) != 0) + result |= Modifier.VOLATILE; + return result; + } + + private final Set includedSet = new HashSet<>(); + + public void setIncluded(Element element) { + includedSet.add(element); + } + + private SimpleElementVisitor9 includedVisitor = null; + + public boolean isIncluded(Element e) { + if (e == null) { + return false; + } + if (includedVisitor == null) { + includedVisitor = new SimpleElementVisitor9() { + @Override @DefinedBy(Api.LANGUAGE_MODEL) + public Boolean visitType(TypeElement e, Void p) { + if (includedSet.contains(e)) { + return true; + } + if (shouldDocument(e)) { + // Class is nameable from top-level and + // the class and all enclosing classes + // pass the modifier filter. + PackageElement pkg = elements.getPackageOf(e); + if (includedSet.contains(pkg)) { + setIncluded(e); + return true; + } + Element enclosing = e.getEnclosingElement(); + if (enclosing != null && includedSet.contains(enclosing)) { + setIncluded(e); + return true; + } + } + return false; + } + + @Override @DefinedBy(Api.LANGUAGE_MODEL) + public Boolean visitPackage(PackageElement e, Void p) { + return includedSet.contains(e); + } + + @Override @DefinedBy(Api.LANGUAGE_MODEL) + public Boolean visitUnknown(Element e, Void p) { + throw new AssertionError("unknown element: " + e); + } + + @Override @DefinedBy(Api.LANGUAGE_MODEL) + public Boolean defaultAction(Element e, Void p) { + return visit(e.getEnclosingElement()) && shouldDocument(e); + } + }; + } + return includedVisitor.visit(e); + } + + public boolean isQuiet() { + return quiet; + } + + /** + * A class which filters the access flags on classes, fields, methods, etc. + * + *

+ * This is NOT part of any supported API. If you write code that depends on this, you do so + * at your own risk. This code and its internal interfaces are subject to change or deletion + * without notice. + * + * @see javax.lang.model.element.Modifier + * @author Robert Field + */ + + private static class ModifierFilter { + + static enum FilterFlag { + PACKAGE, + PRIVATE, + PROTECTED, + PUBLIC + } + + private Set oneOf; + + /** + * Constructor - Specify a filter. + * + * @param oneOf a set containing desired flags to be matched. + */ + ModifierFilter(Set oneOf) { + this.oneOf = oneOf; + } + + /** + * Constructor - Specify a filter. + * + * @param oneOf an array containing desired flags to be matched. + */ + ModifierFilter(FilterFlag... oneOf) { + this.oneOf = new HashSet<>(); + this.oneOf.addAll(Arrays.asList(oneOf)); + } + + static ModifierFilter getModifierFilter(String showAccess) { + switch (showAccess) { + case "public": + return new ModifierFilter(FilterFlag.PUBLIC); + case "package": + return new ModifierFilter(FilterFlag.PUBLIC, FilterFlag.PROTECTED, + FilterFlag.PACKAGE); + case "private": + return new ModifierFilter(FilterFlag.PRIVATE); + default: + return new ModifierFilter(FilterFlag.PUBLIC, FilterFlag.PROTECTED); + } + } + + private boolean hasFlag(long flag, long modifierBits) { + return (flag & modifierBits) != 0; + } + + private List flagsToModifiers(long modifierBits) { + List list = new ArrayList<>(); + boolean isPackage = true; + if (hasFlag(com.sun.tools.javac.code.Flags.PRIVATE, modifierBits)) { + list.add(FilterFlag.PRIVATE); + isPackage = false; + } + if (hasFlag(com.sun.tools.javac.code.Flags.PROTECTED, modifierBits)) { + list.add(FilterFlag.PROTECTED); + isPackage = false; + } + if (hasFlag(com.sun.tools.javac.code.Flags.PUBLIC, modifierBits)) { + list.add(FilterFlag.PUBLIC); + isPackage = false; + } + if (isPackage) { + list.add(FilterFlag.PACKAGE); + } + return list; + } + + /** + * Filter on modifier bits. + * + * @param modifierBits Bits as specified in the Modifier class + * + * @return Whether the modifierBits pass this filter. + */ + public boolean checkModifier(int modifierBits) { + return checkModifier(flagsToModifiers(modifierBits)); + } + + /** + * Filter on Filter flags + * + * @param modifiers Flags as specified in the FilterFlags enumeration. + * + * @return if the modifier is contained. + */ + public boolean checkModifier(List modifiers) { + if (oneOf.contains(FilterFlag.PRIVATE)) { + return true; + } + for (FilterFlag mod : modifiers) { + if (oneOf.contains(mod)) { + return true; + } + } + return false; + } + + } // end ModifierFilter +} diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.jshell/share/classes/jdk/jshell/DeclarationSnippet.java --- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/DeclarationSnippet.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/DeclarationSnippet.java Tue Jul 05 13:50:37 2016 -0700 @@ -55,8 +55,9 @@ DeclarationSnippet(DeclarationKey key, String userSource, Wrap guts, String unitName, SubKind subkind, Wrap corralled, Collection declareReferences, - Collection bodyReferences) { - super(key, userSource, guts, unitName, subkind); + Collection bodyReferences, + DiagList syntheticDiags) { + super(key, userSource, guts, unitName, subkind, syntheticDiags); this.corralled = corralled; this.declareReferences = declareReferences; this.bodyReferences = bodyReferences; diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.jshell/share/classes/jdk/jshell/ErroneousSnippet.java --- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/ErroneousSnippet.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/ErroneousSnippet.java Tue Jul 05 13:50:37 2016 -0700 @@ -28,8 +28,7 @@ import jdk.jshell.Key.ErroneousKey; /** - * A snippet of code that is not valid Java programming language code, and for - * which the kind of snippet could not be determined. + * A snippet of code that is not valid Java programming language code. * The Kind is {@link jdk.jshell.Snippet.Kind#ERRONEOUS ERRONEOUS}. *

* ErroneousSnippet is immutable: an access to @@ -38,7 +37,21 @@ */ public class ErroneousSnippet extends Snippet { - ErroneousSnippet(ErroneousKey key, String userSource, Wrap guts, SubKind subkind) { - super(key, userSource, guts, null, subkind); + private final Kind probableKind; + + ErroneousSnippet(ErroneousKey key, String userSource, Wrap guts, + Kind probableKind, SubKind subkind) { + super(key, userSource, guts, null, subkind, null); + this.probableKind = probableKind; + } + + /** + * Returns what appears to be the intended Kind in this erroneous snippet. + * + * @return the probable Kind; or {@link Kind#ERRONEOUS} if that cannot be + * determined. + */ + public Kind probableKind() { + return probableKind; } } diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.jshell/share/classes/jdk/jshell/Eval.java --- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/Eval.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/Eval.java Tue Jul 05 13:50:37 2016 -0700 @@ -52,6 +52,7 @@ import jdk.jshell.Key.ErroneousKey; import jdk.jshell.Key.MethodKey; import jdk.jshell.Key.TypeDeclKey; +import jdk.jshell.Snippet.Kind; import jdk.jshell.Snippet.SubKind; import jdk.jshell.TaskFactory.AnalyzeTask; import jdk.jshell.TaskFactory.BaseTask; @@ -62,6 +63,7 @@ import jdk.jshell.Snippet.Status; import static java.util.stream.Collectors.toList; import static java.util.stream.Collectors.toSet; +import static java.util.Collections.singletonList; import static jdk.internal.jshell.debug.InternalDebugControl.DBG_GEN; import static jdk.jshell.Util.DOIT_METHOD_NAME; import static jdk.jshell.Util.PREFIX_PATTERN; @@ -89,24 +91,75 @@ this.state = state; } + /** + * Evaluates a snippet of source. + * + * @param userSource the source of the snippet + * @return the list of primary and update events + * @throws IllegalStateException + */ List eval(String userSource) throws IllegalStateException { + List allEvents = new ArrayList<>(); + for (Snippet snip : sourceToSnippets(userSource)) { + if (snip.kind() == Kind.ERRONEOUS) { + state.maps.installSnippet(snip); + allEvents.add(new SnippetEvent( + snip, Status.NONEXISTENT, Status.REJECTED, + false, null, null, null)); + } else { + allEvents.addAll(declare(snip, snip.syntheticDiags())); + } + } + return allEvents; + } + + /** + * Converts the user source of a snippet into a Snippet list -- Snippet will + * have wrappers. + * + * @param userSource the source of the snippet + * @return usually a singleton list of Snippet, but may be empty or multiple + */ + List sourceToSnippetsWithWrappers(String userSource) { + List snippets = sourceToSnippets(userSource); + for (Snippet snip : snippets) { + if (snip.outerWrap() == null) { + snip.setOuterWrap( + (snip.kind() == Kind.IMPORT) + ? state.outerMap.wrapImport(snip.guts(), snip) + : state.outerMap.wrapInTrialClass(snip.guts()) + ); + } + } + return snippets; + } + + /** + * Converts the user source of a snippet into a Snippet object (or list of + * objects in the case of: int x, y, z;). Does not install the Snippets + * or execute them. + * + * @param userSource the source of the snippet + * @return usually a singleton list of Snippet, but may be empty or multiple + */ + private List sourceToSnippets(String userSource) { String compileSource = Util.trimEnd(new MaskCommentsAndModifiers(userSource, false).cleared()); if (compileSource.length() == 0) { return Collections.emptyList(); } - // String folding messes up position information. ParseTask pt = state.taskFactory.new ParseTask(compileSource); + List units = pt.units(); + if (units.isEmpty()) { + return compileFailResult(pt, userSource, Kind.ERRONEOUS); + } + Tree unitTree = units.get(0); if (pt.getDiagnostics().hasOtherThanNotStatementErrors()) { - return compileFailResult(pt, userSource); + return compileFailResult(pt, userSource, kindOfTree(unitTree)); } - List units = pt.units(); - if (units.isEmpty()) { - return compileFailResult(pt, userSource); - } - // Erase illegal modifiers + // Erase illegal/ignored modifiers compileSource = new MaskCommentsAndModifiers(compileSource, true).cleared(); - Tree unitTree = units.get(0); + state.debug(DBG_GEN, "Kind: %s -- %s\n", unitTree.getKind(), unitTree); switch (unitTree.getKind()) { case IMPORT: @@ -130,7 +183,7 @@ } } - private List processImport(String userSource, String compileSource) { + private List processImport(String userSource, String compileSource) { Wrap guts = Wrap.simpleWrap(compileSource); Matcher mat = IMPORT_PATTERN.matcher(compileSource); String fullname; @@ -155,7 +208,7 @@ : (isStatic ? SINGLE_STATIC_IMPORT_SUBKIND : SINGLE_TYPE_IMPORT_SUBKIND); Snippet snip = new ImportSnippet(state.keyMap.keyForImport(keyName, snippetKind), userSource, guts, fullname, name, snippetKind, fullkey, isStatic, isStar); - return declare(snip); + return singletonList(snip); } private static class EvalPretty extends Pretty { @@ -187,8 +240,8 @@ } } - private List processVariables(String userSource, List units, String compileSource, ParseTask pt) { - List allEvents = new ArrayList<>(); + private List processVariables(String userSource, List units, String compileSource, ParseTask pt) { + List snippets = new ArrayList<>(); TreeDissector dis = TreeDissector.createByFirstClass(pt); for (Tree unitTree : units) { VariableTree vt = (VariableTree) unitTree; @@ -224,18 +277,16 @@ int nameEnd = nameStart + name.length(); Range rname = new Range(nameStart, nameEnd); Wrap guts = Wrap.varWrap(compileSource, rtype, sbBrackets.toString(), rname, rinit); + DiagList modDiag = modifierDiagnostics(vt.getModifiers(), dis, true); Snippet snip = new VarSnippet(state.keyMap.keyForVariable(name), userSource, guts, name, subkind, typeName, - tds.declareReferences()); - DiagList modDiag = modifierDiagnostics(vt.getModifiers(), dis, true); - List res1 = declare(snip, modDiag); - allEvents.addAll(res1); + tds.declareReferences(), modDiag); + snippets.add(snip); } - - return allEvents; + return snippets; } - private List processExpression(String userSource, String compileSource) { + private List processExpression(String userSource, String compileSource) { String name = null; ExpressionInfo ei = typeOfExpression(compileSource); ExpressionTree assignVar; @@ -266,7 +317,7 @@ guts = Wrap.tempVarWrap(compileSource, typeName, name); Collection declareReferences = null; //TODO snip = new VarSnippet(state.keyMap.keyForVariable(name), userSource, guts, - name, SubKind.TEMP_VAR_EXPRESSION_SUBKIND, typeName, declareReferences); + name, SubKind.TEMP_VAR_EXPRESSION_SUBKIND, typeName, declareReferences, null); } else { guts = Wrap.methodReturnWrap(compileSource); snip = new ExpressionSnippet(state.keyMap.keyForExpression(name, typeName), userSource, guts, @@ -282,15 +333,15 @@ at = trialCompile(guts); } if (at.hasErrors()) { - return compileFailResult(at, userSource); + return compileFailResult(at, userSource, Kind.EXPRESSION); } } snip = new StatementSnippet(state.keyMap.keyForStatement(), userSource, guts); } - return declare(snip); + return singletonList(snip); } - private List processClass(String userSource, Tree unitTree, String compileSource, SubKind snippetKind, ParseTask pt) { + private List processClass(String userSource, Tree unitTree, String compileSource, SubKind snippetKind, ParseTask pt) { TreeDependencyScanner tds = new TreeDependencyScanner(); tds.scan(unitTree); @@ -306,11 +357,11 @@ Wrap guts = Wrap.classMemberWrap(compileSource); Snippet snip = new TypeDeclSnippet(key, userSource, guts, name, snippetKind, - corralled, tds.declareReferences(), tds.bodyReferences()); - return declare(snip, modDiag); + corralled, tds.declareReferences(), tds.bodyReferences(), modDiag); + return singletonList(snip); } - private List processStatement(String userSource, String compileSource) { + private List processStatement(String userSource, String compileSource) { Wrap guts = Wrap.methodWrap(compileSource); // Check for unreachable by trying AnalyzeTask at = trialCompile(guts); @@ -325,15 +376,15 @@ at = trialCompile(guts); } if (at.hasErrors()) { - return compileFailResult(at, userSource); + return compileFailResult(at, userSource, Kind.STATEMENT); } } } else { - return compileFailResult(at, userSource); + return compileFailResult(at, userSource, Kind.STATEMENT); } } Snippet snip = new StatementSnippet(state.keyMap.keyForStatement(), userSource, guts); - return declare(snip); + return singletonList(snip); } private AnalyzeTask trialCompile(Wrap guts) { @@ -341,7 +392,7 @@ return state.taskFactory.new AnalyzeTask(outer); } - private List processMethod(String userSource, Tree unitTree, String compileSource, ParseTask pt) { + private List processMethod(String userSource, Tree unitTree, String compileSource, ParseTask pt) { TreeDependencyScanner tds = new TreeDependencyScanner(); tds.scan(unitTree); TreeDissector dis = TreeDissector.createByFirstClass(pt); @@ -360,7 +411,7 @@ Wrap corralled = new Corraller(key.index(), pt.getContext()).corralMethod(mt); if (modDiag.hasErrors()) { - return compileFailResult(modDiag, userSource); + return compileFailResult(modDiag, userSource, Kind.METHOD); } Wrap guts = Wrap.classMemberWrap(compileSource); Range typeRange = dis.treeToRange(returnType); @@ -368,37 +419,76 @@ Snippet snip = new MethodSnippet(key, userSource, guts, name, signature, - corralled, tds.declareReferences(), tds.bodyReferences()); - return declare(snip, modDiag); + corralled, tds.declareReferences(), tds.bodyReferences(), modDiag); + return singletonList(snip); } - /** - * The snippet has failed, return with the rejected event - * - * @param xt the task from which to extract the failure diagnostics - * @param userSource the incoming bad user source - * @return a rejected snippet event - */ - private List compileFailResult(BaseTask xt, String userSource) { - return compileFailResult(xt.getDiagnostics(), userSource); + private Kind kindOfTree(Tree tree) { + switch (tree.getKind()) { + case IMPORT: + return Kind.IMPORT; + case VARIABLE: + return Kind.VAR; + case EXPRESSION_STATEMENT: + return Kind.EXPRESSION; + case CLASS: + case ENUM: + case ANNOTATION_TYPE: + case INTERFACE: + return Kind.TYPE_DECL; + case METHOD: + return Kind.METHOD; + default: + return Kind.STATEMENT; + } } /** - * The snippet has failed, return with the rejected event + * The snippet has failed, return with the rejected snippet + * + * @param xt the task from which to extract the failure diagnostics + * @param userSource the incoming bad user source + * @return a rejected snippet + */ + private List compileFailResult(BaseTask xt, String userSource, Kind probableKind) { + return compileFailResult(xt.getDiagnostics(), userSource, probableKind); + } + + /** + * The snippet has failed, return with the rejected snippet * * @param diags the failure diagnostics * @param userSource the incoming bad user source - * @return a rejected snippet event + * @return a rejected snippet */ - private List compileFailResult(DiagList diags, String userSource) { + private List compileFailResult(DiagList diags, String userSource, Kind probableKind) { ErroneousKey key = state.keyMap.keyForErroneous(); - Snippet snip = new ErroneousSnippet(key, userSource, null, SubKind.UNKNOWN_SUBKIND); + Snippet snip = new ErroneousSnippet(key, userSource, null, + probableKind, SubKind.UNKNOWN_SUBKIND); snip.setFailed(diags); - state.maps.installSnippet(snip); - return Collections.singletonList(new SnippetEvent( - snip, Status.NONEXISTENT, Status.REJECTED, - false, null, null, null) - ); + + // Install wrapper for query by SourceCodeAnalysis.wrapper + String compileSource = Util.trimEnd(new MaskCommentsAndModifiers(userSource, true).cleared()); + OuterWrap outer; + switch (probableKind) { + case IMPORT: + outer = state.outerMap.wrapImport(Wrap.simpleWrap(compileSource), snip); + break; + case EXPRESSION: + outer = state.outerMap.wrapInTrialClass(Wrap.methodReturnWrap(compileSource)); + break; + case VAR: + case TYPE_DECL: + case METHOD: + outer = state.outerMap.wrapInTrialClass(Wrap.classMemberWrap(compileSource)); + break; + default: + outer = state.outerMap.wrapInTrialClass(Wrap.methodWrap(compileSource)); + break; + } + snip.setOuterWrap(outer); + + return singletonList(snip); } private ExpressionInfo typeOfExpression(String expression) { @@ -430,10 +520,6 @@ return events(c, outs, null, null); } - private List declare(Snippet si) { - return declare(si, new DiagList()); - } - private List declare(Snippet si, DiagList generatedDiagnostics) { Unit c = new Unit(state, si, null, generatedDiagnostics); Set ins = new LinkedHashSet<>(); diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.jshell/share/classes/jdk/jshell/ExpressionSnippet.java --- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/ExpressionSnippet.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/ExpressionSnippet.java Tue Jul 05 13:50:37 2016 -0700 @@ -39,7 +39,7 @@ public class ExpressionSnippet extends Snippet { ExpressionSnippet(ExpressionKey key, String userSource, Wrap guts, String name, SubKind subkind) { - super(key, userSource, guts, name, subkind); + super(key, userSource, guts, name, subkind, null); } /** diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.jshell/share/classes/jdk/jshell/ImportSnippet.java --- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/ImportSnippet.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/ImportSnippet.java Tue Jul 05 13:50:37 2016 -0700 @@ -46,7 +46,7 @@ ImportSnippet(ImportKey key, String userSource, Wrap guts, String fullname, String name, SubKind subkind, String fullkey, boolean isStatic, boolean isStar) { - super(key, userSource, guts, name, subkind); + super(key, userSource, guts, name, subkind, null); this.fullname = fullname; this.fullkey = fullkey; this.isStatic = isStatic; diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.jshell/share/classes/jdk/jshell/JShell.java --- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/JShell.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/JShell.java Tue Jul 05 13:50:37 2016 -0700 @@ -89,6 +89,7 @@ final Supplier tempVariableNameGenerator; final BiFunction idGenerator; final List extraRemoteVMOptions; + final List extraCompilerOptions; final ExecutionControl executionControl; private int nextKeyIndex = 1; @@ -112,6 +113,7 @@ this.tempVariableNameGenerator = b.tempVariableNameGenerator; this.idGenerator = b.idGenerator; this.extraRemoteVMOptions = b.extraRemoteVMOptions; + this.extraCompilerOptions = b.extraCompilerOptions; this.executionControl = b.executionControl==null ? new FailOverExecutionControl( new JDIExecutionControl(), @@ -151,6 +153,7 @@ Supplier tempVariableNameGenerator = null; BiFunction idGenerator = null; List extraRemoteVMOptions = new ArrayList<>(); + List extraCompilerOptions = new ArrayList<>(); ExecutionControl executionControl; Builder() { } @@ -289,6 +292,21 @@ } /** + * Adds compiler options. These additional options will be used on + * parsing, analysis, and code generation calls to the compiler. + * Options which interfere with results are not supported and have + * undefined effects on JShell's operation. + * + * @param options the addition options for compiler invocations + * @return the {@code Builder} instance (for use in chained + * initialization) + */ + public Builder compilerOptions(String... options) { + this.extraCompilerOptions.addAll(Arrays.asList(options)); + return this; + } + + /** * Sets the custom engine for execution. Snippet execution will be * provided by the specified {@link ExecutionControl} instance. * @@ -359,7 +377,9 @@ * Evaluate the input String, including definition and/or execution, if * applicable. The input is checked for errors, unless the errors can be * deferred (as is the case with some unresolvedDependencies references), - * errors will abort evaluation. The input should be + * errors will abort evaluation. + *

+ * The input should be * exactly one complete snippet of source code, that is, one expression, * statement, variable declaration, method declaration, class declaration, * or import. diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.jshell/share/classes/jdk/jshell/MethodSnippet.java --- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/MethodSnippet.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/MethodSnippet.java Tue Jul 05 13:50:37 2016 -0700 @@ -44,8 +44,10 @@ MethodSnippet(MethodKey key, String userSource, Wrap guts, String name, String signature, Wrap corralled, - Collection declareReferences, Collection bodyReferences) { - super(key, userSource, guts, name, SubKind.METHOD_SUBKIND, corralled, declareReferences, bodyReferences); + Collection declareReferences, Collection bodyReferences, + DiagList syntheticDiags) { + super(key, userSource, guts, name, SubKind.METHOD_SUBKIND, corralled, + declareReferences, bodyReferences, syntheticDiags); this.signature = signature; } diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.jshell/share/classes/jdk/jshell/OuterImportSnippetWrap.java --- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/OuterImportSnippetWrap.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/OuterImportSnippetWrap.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,8 +25,6 @@ package jdk.jshell; -import java.util.IdentityHashMap; -import java.util.List; import javax.tools.Diagnostic; import javax.tools.JavaFileObject; diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.jshell/share/classes/jdk/jshell/PersistentSnippet.java --- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/PersistentSnippet.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/PersistentSnippet.java Tue Jul 05 13:50:37 2016 -0700 @@ -37,8 +37,9 @@ */ public abstract class PersistentSnippet extends Snippet { - PersistentSnippet(Key key, String userSource, Wrap guts, String unitName, SubKind subkind) { - super(key, userSource, guts, unitName, subkind); + PersistentSnippet(Key key, String userSource, Wrap guts, String unitName, + SubKind subkind, DiagList syntheticDiags) { + super(key, userSource, guts, unitName, subkind, syntheticDiags); } /** diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.jshell/share/classes/jdk/jshell/Snippet.java --- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/Snippet.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/Snippet.java Tue Jul 05 13:50:37 2016 -0700 @@ -563,13 +563,18 @@ private Status status; private List unresolved; private DiagList diagnostics; + private final DiagList syntheticDiags; - Snippet(Key key, String userSource, Wrap guts, String unitName, SubKind subkind) { + Snippet(Key key, String userSource, Wrap guts, String unitName, + SubKind subkind, DiagList syntheticDiags) { this.key = key; this.source = userSource; this.guts = guts; this.unitName = unitName; this.subkind = subkind; + this.syntheticDiags = syntheticDiags==null + ? new DiagList() + : syntheticDiags; this.status = Status.NONEXISTENT; setSequenceNumber(0); } @@ -644,6 +649,10 @@ return diagnostics; } + DiagList syntheticDiags() { + return syntheticDiags; + } + /** * @return the corralled guts */ diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.jshell/share/classes/jdk/jshell/SourceCodeAnalysis.java --- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/SourceCodeAnalysis.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/SourceCodeAnalysis.java Tue Jul 05 13:50:37 2016 -0700 @@ -25,6 +25,7 @@ package jdk.jshell; +import java.util.Collection; import java.util.List; /** @@ -92,6 +93,51 @@ public abstract QualifiedNames listQualifiedNames(String code, int cursor); /** + * Returns the wrapper information for the {@code Snippet}. The wrapper changes as + * the environment changes, so calls to this method at different times may + * yield different results. + * + * @param snippet the {@code Snippet} from which to retrieve the wrapper + * @return information on the wrapper + */ + public abstract SnippetWrapper wrapper(Snippet snippet); + + /** + * Returns the wrapper information for the snippet within the + * input source string. + *

+ * Wrapper information for malformed and incomplete + * snippets also generate wrappers. The list is in snippet encounter + * order. The wrapper changes as the environment changes, so calls to this + * method at different times may yield different results. + *

+ * The input should be + * exactly one complete snippet of source code, that is, one expression, + * statement, variable declaration, method declaration, class declaration, + * or import. + * To break arbitrary input into individual complete snippets, use + * {@link SourceCodeAnalysis#analyzeCompletion(String)}. + *

+ * The wrapper may not match that returned by + * {@link SourceCodeAnalysis#wrapper(Snippet) wrapper(Snippet)}, + * were the source converted to a {@code Snippet}. + * + * @param input the source input from which to generate wrappers + * @return a list of wrapper information + */ + public abstract List wrappers(String input); + + /** + * Returns a collection of {@code Snippet}s which might need updating if the + * given {@code Snippet} is updated. The returned collection is designed to + * be inclusive and may include many false positives. + * + * @param snippet the {@code Snippet} whose dependents are requested + * @return the collection of dependents + */ + public abstract Collection dependents(Snippet snippet); + + /** * Internal only constructor */ SourceCodeAnalysis() {} @@ -302,7 +348,7 @@ } /** - * Indicates whether the result is based on up to date data. The + * Indicates whether the result is based on up-to-date data. The * {@link SourceCodeAnalysis#listQualifiedNames(java.lang.String, int) listQualifiedNames} * method may return before the classpath is fully inspected, in which case this method will * return {@code false}. If the result is based on a fully inspected classpath, this method @@ -327,4 +373,83 @@ } } + + /** + * The wrapping of a snippet of Java source into valid top-level Java + * source. The wrapping will always either be an import or include a + * synthetic class at the top-level. If a synthetic class is generated, it + * will be proceeded by the package and import declarations, and may contain + * synthetic class members. + *

+ * This interface, in addition to the mapped form, provides the context and + * position mapping information. + */ + public interface SnippetWrapper { + + /** + * Returns the input that is wrapped. For + * {@link SourceCodeAnalysis#wrappers(java.lang.String) wrappers(String)}, + * this is the source of the snippet within the input. A variable + * declaration of {@code N} variables will map to {@code N} wrappers + * with the source separated. + *

+ * For {@link SourceCodeAnalysis#wrapper(Snippet) wrapper(Snippet)}, + * this is {@link Snippet#source() }. + * + * @return the input source corresponding to the wrapper. + */ + String source(); + + /** + * Returns a Java class definition that wraps the + * {@link SnippetWrapper#source()} or, if an import, the import source. + *

+ * If the input is not a valid Snippet, this will not be a valid + * class/import definition. + *

+ * The source may be divided and mapped to different locations within + * the wrapped source. + * + * @return the source wrapped into top-level Java code + */ + String wrapped(); + + /** + * Returns the fully qualified class name of the + * {@link SnippetWrapper#wrapped() } class. + * For erroneous input, a best guess is returned. + * + * @return the name of the synthetic wrapped class; if an import, the + * name is not defined + */ + String fullClassName(); + + /** + * Returns the {@link Snippet.Kind} of the + * {@link SnippetWrapper#source()}. + * + * @return an enum representing the general kind of snippet. + */ + Snippet.Kind kind(); + + /** + * Maps character position within the source to character position + * within the wrapped. + * + * @param pos the position in {@link SnippetWrapper#source()} + * @return the corresponding position in + * {@link SnippetWrapper#wrapped() } + */ + int sourceToWrappedPosition(int pos); + + /** + * Maps character position within the wrapped to character position + * within the source. + * + * @param pos the position in {@link SnippetWrapper#wrapped()} + * @return the corresponding position in + * {@link SnippetWrapper#source() } + */ + int wrappedToSourcePosition(int pos); + } } diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.jshell/share/classes/jdk/jshell/SourceCodeAnalysisImpl.java --- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/SourceCodeAnalysisImpl.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/SourceCodeAnalysisImpl.java Tue Jul 05 13:50:37 2016 -0700 @@ -413,6 +413,55 @@ return result; } + @Override + public SnippetWrapper wrapper(Snippet snippet) { + return new SnippetWrapper() { + @Override + public String source() { + return snippet.source(); + } + + @Override + public String wrapped() { + return snippet.outerWrap().wrapped(); + } + + @Override + public String fullClassName() { + return snippet.classFullName(); + } + + @Override + public Snippet.Kind kind() { + return snippet.kind() == Snippet.Kind.ERRONEOUS + ? ((ErroneousSnippet) snippet).probableKind() + : snippet.kind(); + } + + @Override + public int sourceToWrappedPosition(int pos) { + return snippet.outerWrap().snippetIndexToWrapIndex(pos); + } + + @Override + public int wrappedToSourcePosition(int pos) { + return snippet.outerWrap().wrapIndexToSnippetIndex(pos); + } + }; + } + + @Override + public List wrappers(String input) { + return proc.eval.sourceToSnippetsWithWrappers(input).stream() + .map(sn -> wrapper(sn)) + .collect(toList()); + } + + @Override + public Collection dependents(Snippet snippet) { + return proc.maps.getDependents(snippet); + } + private boolean isStaticContext(AnalyzeTask at, TreePath path) { switch (path.getLeaf().getKind()) { case ARRAY_TYPE: diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.jshell/share/classes/jdk/jshell/StatementSnippet.java --- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/StatementSnippet.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/StatementSnippet.java Tue Jul 05 13:50:37 2016 -0700 @@ -39,6 +39,6 @@ public class StatementSnippet extends Snippet { StatementSnippet(StatementKey key, String userSource, Wrap guts) { - super(key, userSource, guts, null, SubKind.STATEMENT_SUBKIND); + super(key, userSource, guts, null, SubKind.STATEMENT_SUBKIND, null); } } diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.jshell/share/classes/jdk/jshell/TaskFactory.java --- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/TaskFactory.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/TaskFactory.java Tue Jul 05 13:50:37 2016 -0700 @@ -328,7 +328,9 @@ SourceHandler sh, String... extraOptions) { this.sourceHandler = sh; - List options = Arrays.asList(extraOptions); + List options = new ArrayList<>(extraOptions.length + state.extraCompilerOptions.size()); + options.addAll(Arrays.asList(extraOptions)); + options.addAll(state.extraCompilerOptions); Iterable compilationUnits = inputs .map(in -> sh.sourceToFileObject(fileManager, in)) .collect(Collectors.toList()); diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.jshell/share/classes/jdk/jshell/TypeDeclSnippet.java --- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/TypeDeclSnippet.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/TypeDeclSnippet.java Tue Jul 05 13:50:37 2016 -0700 @@ -42,8 +42,10 @@ TypeDeclSnippet(TypeDeclKey key, String userSource, Wrap guts, String unitName, SubKind subkind, Wrap corralled, Collection declareReferences, - Collection bodyReferences) { - super(key, userSource, guts, unitName, subkind, corralled, declareReferences, bodyReferences); + Collection bodyReferences, + DiagList syntheticDiags) { + super(key, userSource, guts, unitName, subkind, corralled, + declareReferences, bodyReferences, syntheticDiags); } /**** internal access ****/ diff -r 25903fca5876 -r 0ac35f4c3936 langtools/src/jdk.jshell/share/classes/jdk/jshell/VarSnippet.java --- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/VarSnippet.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/VarSnippet.java Tue Jul 05 13:50:37 2016 -0700 @@ -43,8 +43,10 @@ VarSnippet(VarKey key, String userSource, Wrap guts, String name, SubKind subkind, String typeName, - Collection declareReferences) { - super(key, userSource, guts, name, subkind, null, declareReferences, null); + Collection declareReferences, + DiagList syntheticDiags) { + super(key, userSource, guts, name, subkind, null, declareReferences, + null, syntheticDiags); this.typeName = typeName; } diff -r 25903fca5876 -r 0ac35f4c3936 langtools/test/ProblemList.txt --- a/langtools/test/ProblemList.txt Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/test/ProblemList.txt Tue Jul 05 13:50:37 2016 -0700 @@ -76,6 +76,7 @@ tools/javac/annotations/typeAnnotations/referenceinfos/Lambda.java 8057687 generic-all emit correct byte code an attributes for type annotations tools/javac/annotations/typeAnnotations/referenceinfos/NestedTypes.java 8057687 generic-all emit correct byte code an attributes for type annotations tools/javac/warnings/suppress/TypeAnnotations.java 8057683 generic-all improve ordering of errors with type annotations +tools/javac/modules/T8159439/NPEForModuleInfoWithNonZeroSuperClassTest.java 8160396 generic-all current version of jtreg needs a new promotion to include lastes version of ASM ########################################################################### # diff -r 25903fca5876 -r 0ac35f4c3936 langtools/test/jdk/jshell/CompilerOptionsTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/jdk/jshell/CompilerOptionsTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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 8159635 + * @summary Test setting compiler options + * @build KullaTesting TestingInputStream + * @run testng CompilerOptionsTest + */ + +import javax.tools.Diagnostic; +import org.testng.annotations.Test; +import org.testng.annotations.BeforeMethod; +import static jdk.jshell.Snippet.Status.VALID; + +@Test +public class CompilerOptionsTest extends KullaTesting { + + @BeforeMethod + @Override + public void setUp() { + setUp(b -> b.compilerOptions("-source", "7", "-Xlint:cast")); + } + + public void testLint() { + assertDeclareWarn1("String s = (String)\"hello\";", + new ExpectedDiagnostic("compiler.warn.redundant.cast", 11, 26, 11, -1, -1, Diagnostic.Kind.WARNING)); + } + + public void testSourceVersion() { + assertEval("import java.util.function.*;", added(VALID)); + assertDeclareFail("Function f = x -> x*2;", + new ExpectedDiagnostic("compiler.err.lambda.not.supported.in.source", 32, 32, 32, -1, -1, Diagnostic.Kind.ERROR)); + } +} diff -r 25903fca5876 -r 0ac35f4c3936 langtools/test/jdk/jshell/KullaTesting.java --- a/langtools/test/jdk/jshell/KullaTesting.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/test/jdk/jshell/KullaTesting.java Tue Jul 05 13:50:37 2016 -0700 @@ -37,6 +37,7 @@ import java.util.Map; import java.util.Set; import java.util.TreeMap; +import java.util.function.Consumer; import java.util.function.Predicate; import java.util.function.Supplier; import java.util.stream.Collectors; @@ -154,29 +155,23 @@ @BeforeMethod public void setUp() { + setUp(b -> {}); + } + + public void setUp(ExecutionControl ec) { + setUp(b -> b.executionEngine(ec)); + } + + public void setUp(Consumer bc) { inStream = new TestingInputStream(); outStream = new ByteArrayOutputStream(); errStream = new ByteArrayOutputStream(); - state = JShell.builder() + JShell.Builder builder = JShell.builder() .in(inStream) .out(new PrintStream(outStream)) - .err(new PrintStream(errStream)) - .build(); - allSnippets = new LinkedHashSet<>(); - idToSnippet = new LinkedHashMap<>(); - classpath = new ArrayList<>(); - } - - public void setUp(ExecutionControl ec) { - inStream = new TestingInputStream(); - outStream = new ByteArrayOutputStream(); - errStream = new ByteArrayOutputStream(); - state = JShell.builder() - .executionEngine(ec) - .in(inStream) - .out(new PrintStream(outStream)) - .err(new PrintStream(errStream)) - .build(); + .err(new PrintStream(errStream)); + bc.accept(builder); + state = builder.build(); allSnippets = new LinkedHashSet<>(); idToSnippet = new LinkedHashMap<>(); classpath = new ArrayList<>(); diff -r 25903fca5876 -r 0ac35f4c3936 langtools/test/jdk/jshell/WrapperTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/jdk/jshell/WrapperTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,205 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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., start1 Franklin St, Fifth Floor, Boston, MA 02110-1length01 USA. + * + * Please contact Oracle, start00 Oracle Parkway, Redwood Shores, CA 9406start USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8159111 + * @summary test wrappers and dependencies + * @modules jdk.jshell/jdk.jshell + * @build KullaTesting + * @run testng WrapperTest + */ + +import java.util.Collection; +import java.util.List; +import org.testng.annotations.Test; +import jdk.jshell.ErroneousSnippet; +import jdk.jshell.Snippet; +import jdk.jshell.Snippet.Kind; +import jdk.jshell.SourceCodeAnalysis.SnippetWrapper; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertTrue; +import static jdk.jshell.Snippet.Status.RECOVERABLE_DEFINED; +import static jdk.jshell.Snippet.Status.VALID; + +@Test +public class WrapperTest extends KullaTesting { + + public void testMethod() { + String src = "void glib() { System.out.println(\"hello\"); }"; + List swl = getState().sourceCodeAnalysis().wrappers(src); + assertEquals(swl.size(), 1, "unexpected list length"); + assertWrapperHas(swl.get(0), src, Kind.METHOD, "void", "glib", "println"); + assertPosition(swl.get(0), src, 0, 4); + assertPosition(swl.get(0), src, 5, 4); + assertPosition(swl.get(0), src, 15, 6); + + Snippet g = methodKey(assertEval(src, added(VALID))); + SnippetWrapper swg = getState().sourceCodeAnalysis().wrapper(g); + assertWrapperHas(swg, src, Kind.METHOD, "void", "glib", "println"); + assertPosition(swg, src, 0, 4); + assertPosition(swg, src, 5, 4); + assertPosition(swg, src, 15, 6); + } + + @Test(enabled = false) // TODO 8159740 + public void testMethodCorralled() { + String src = "void glib() { f(); }"; + Snippet g = methodKey(assertEval(src, added(RECOVERABLE_DEFINED))); + SnippetWrapper swg = getState().sourceCodeAnalysis().wrapper(g); + assertWrapperHas(swg, src, Kind.METHOD, "void", "glib"); + assertPosition(swg, src, 5, 4); + } + + public void testMethodBad() { + String src = "void flob() { ?????; }"; + List swl = getState().sourceCodeAnalysis().wrappers(src); + assertEquals(swl.size(), 1, "unexpected list length"); + assertWrapperHas(swl.get(0), src, Kind.METHOD, "void", "flob", "?????"); + assertPosition(swl.get(0), src, 9, 2); + + Snippet f = key(assertEvalFail(src)); + assertEquals(f.kind(), Kind.ERRONEOUS); + assertEquals(((ErroneousSnippet)f).probableKind(), Kind.METHOD); + SnippetWrapper sw = getState().sourceCodeAnalysis().wrapper(f); + assertWrapperHas(sw, src, Kind.METHOD, "void", "flob", "?????"); + assertPosition(swl.get(0), src, 14, 5); + } + + public void testVar() { + String src = "int gx = 1234;"; + List swl = getState().sourceCodeAnalysis().wrappers(src); + assertEquals(swl.size(), 1, "unexpected list length"); + assertWrapperHas(swl.get(0), src, Kind.VAR, "int", "gx", "1234"); + assertPosition(swl.get(0), src, 4, 2); + + Snippet g = varKey(assertEval(src, added(VALID))); + SnippetWrapper swg = getState().sourceCodeAnalysis().wrapper(g); + assertWrapperHas(swg, src, Kind.VAR, "int", "gx", "1234"); + assertPosition(swg, src, 0, 3); + } + + public void testVarBad() { + String src = "double dd = ?????;"; + List swl = getState().sourceCodeAnalysis().wrappers(src); + assertEquals(swl.size(), 1, "unexpected list length"); + assertWrapperHas(swl.get(0), src, Kind.VAR, "double", "dd", "?????"); + assertPosition(swl.get(0), src, 9, 2); + + Snippet f = key(assertEvalFail(src)); + assertEquals(f.kind(), Kind.ERRONEOUS); + assertEquals(((ErroneousSnippet)f).probableKind(), Kind.VAR); + SnippetWrapper sw = getState().sourceCodeAnalysis().wrapper(f); + assertWrapperHas(sw, src, Kind.VAR, "double", "dd", "?????"); + assertPosition(swl.get(0), src, 12, 5); + } + + public void testImport() { + String src = "import java.lang.*;"; + List swl = getState().sourceCodeAnalysis().wrappers(src); + assertEquals(swl.size(), 1, "unexpected list length"); + assertWrapperHas(swl.get(0), src, Kind.IMPORT, "import", "java.lang"); + assertPosition(swl.get(0), src, 7, 4); + + Snippet g = key(assertEval(src, added(VALID))); + SnippetWrapper swg = getState().sourceCodeAnalysis().wrapper(g); + assertWrapperHas(swg, src, Kind.IMPORT, "import", "java.lang"); + assertPosition(swg, src, 0, 6); + } + + public void testImportBad() { + String src = "import java.?????;"; + List swl = getState().sourceCodeAnalysis().wrappers(src); + assertEquals(swl.size(), 1, "unexpected list length"); + assertWrapperHas(swl.get(0), src, Kind.IMPORT, "import", "?????"); + assertPosition(swl.get(0), src, 7, 4); + + Snippet f = key(assertEvalFail(src)); + assertEquals(f.kind(), Kind.ERRONEOUS); + assertEquals(((ErroneousSnippet)f).probableKind(), Kind.IMPORT); + SnippetWrapper sw = getState().sourceCodeAnalysis().wrapper(f); + assertWrapperHas(sw, src, Kind.IMPORT, "import", "?????"); + assertPosition(swl.get(0), src, 0, 6); + } + + public void testErroneous() { + String src = "@@@@@@@@@@"; + List swl = getState().sourceCodeAnalysis().wrappers(src); + assertEquals(swl.size(), 1, "unexpected list length"); + assertWrapperHas(swl.get(0), src, Kind.ERRONEOUS, "@@@@@@@@@@"); + assertPosition(swl.get(0), src, 0, 10); + + Snippet f = key(assertEvalFail(src)); + assertEquals(f.kind(), Kind.ERRONEOUS); + assertEquals(((ErroneousSnippet)f).probableKind(), Kind.ERRONEOUS); + SnippetWrapper sw = getState().sourceCodeAnalysis().wrapper(f); + assertWrapperHas(sw, src, Kind.ERRONEOUS, "@@@@@@@@@@"); + assertPosition(swl.get(0), src, 0, 10); + } + + public void testEmpty() { + String src = ""; + List swl = getState().sourceCodeAnalysis().wrappers(src); + assertEquals(swl.size(), 0, "expected empty list"); + } + + public void testDependencies() { + Snippet a = key(assertEval("int aaa = 6;", added(VALID))); + Snippet b = key(assertEval("class B { B(int x) { aaa = x; } }", added(VALID))); + Snippet c = key(assertEval("B ccc() { return new B(aaa); }", added(VALID))); + Collection dep; + dep = getState().sourceCodeAnalysis().dependents(c); + assertEquals(dep.size(), 0); + dep = getState().sourceCodeAnalysis().dependents(b); + assertEquals(dep.size(), 1); + assertTrue(dep.contains(c)); + dep = getState().sourceCodeAnalysis().dependents(a); + assertEquals(dep.size(), 2); + assertTrue(dep.contains(c)); + assertTrue(dep.contains(b)); + } + + private void assertWrapperHas(SnippetWrapper sw, String source, Kind kind, String... has) { + assertEquals(sw.source(), source); + assertEquals(sw.kind(), kind); + if (kind == Kind.IMPORT) { + assertTrue(sw.wrapped().contains("import")); + } else { + String cn = sw.fullClassName(); + int idx = cn.lastIndexOf("."); + assertTrue(sw.wrapped().contains(cn.substring(idx+1))); + assertTrue(sw.wrapped().contains("class")); + } + for (String s : has) { + assertTrue(sw.wrapped().contains(s)); + } + } + + private void assertPosition(SnippetWrapper sw, String source, int start, int length) { + int wpg = sw.sourceToWrappedPosition(start); + assertEquals(sw.wrapped().substring(wpg, wpg+length), + source.substring(start, start+length), + "position " + wpg + " in " + sw.wrapped()); + assertEquals(sw.wrappedToSourcePosition(wpg), start); + } +} diff -r 25903fca5876 -r 0ac35f4c3936 langtools/test/tools/javac/T8159970/TypeEqualityInInferenceTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/T8159970/TypeEqualityInInferenceTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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 8159970 + * @summary javac, JLS8 18.2.4 is not completely implemented by the compiler + * @library /tools/lib/types + * @modules jdk.compiler/com.sun.tools.javac.api + * jdk.compiler/com.sun.tools.javac.main + * jdk.compiler/com.sun.tools.javac.code + * jdk.compiler/com.sun.tools.javac.comp + * jdk.compiler/com.sun.tools.javac.tree + * jdk.compiler/com.sun.tools.javac.util + * jdk.compiler/com.sun.tools.javac.file + * @build TypeHarness + * @run main TypeEqualityInInferenceTest + */ + +import java.util.ArrayList; +import java.util.List; + +import com.sun.tools.javac.code.Type; +import com.sun.tools.javac.code.Type.UndetVar; +import com.sun.tools.javac.code.Type.UndetVar.InferenceBound; +import com.sun.tools.javac.util.Assert; + +public class TypeEqualityInInferenceTest extends TypeHarness { + StrToTypeFactory strToTypeFactory; + + public static void main(String... args) throws Exception { + new TypeEqualityInInferenceTest().runAll(); + } + + void runAll() { + List imports = new ArrayList<>(); + imports.add("java.util.*"); + List typeVars = new ArrayList<>(); + typeVars.add("T"); + strToTypeFactory = new StrToTypeFactory(null, imports, typeVars); + + runTest("List", "List", predef.stringType); + runTest("List", "List", predef.objectType); + runTest("List", "List", predef.stringType); + } + + void runTest(String freeTypeStr, String typeStr, Type equalityBoundType) { + Type freeType = strToTypeFactory.getType(freeTypeStr); + Type aType = strToTypeFactory.getType(typeStr); + + withInferenceContext(strToTypeFactory.getTypeVars(), inferenceContext -> { + assertSameType(inferenceContext.asUndetVar(freeType), aType); + UndetVar undetVarForT = (UndetVar)inferenceContext.undetVars().head; + checkEqualityBound(undetVarForT, equalityBoundType); + }); + + withInferenceContext(strToTypeFactory.getTypeVars(), inferenceContext -> { + assertSameType(aType, inferenceContext.asUndetVar(freeType)); + UndetVar undetVarForT = (UndetVar)inferenceContext.undetVars().head; + checkEqualityBound(undetVarForT, equalityBoundType); + }); + } + + void checkEqualityBound(UndetVar uv, Type boundType) { + com.sun.tools.javac.util.List equalBounds = uv.getBounds(InferenceBound.EQ); + Assert.check(!equalBounds.isEmpty() && equalBounds.length() == 1, + "undetVar must have only one equality bound"); + Type bound = equalBounds.head; + Assert.check(bound == boundType, "equal bound must be of type " + boundType); + } +} diff -r 25903fca5876 -r 0ac35f4c3936 langtools/test/tools/javac/diags/examples.not-yet.txt --- a/langtools/test/tools/javac/diags/examples.not-yet.txt Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/test/tools/javac/diags/examples.not-yet.txt Tue Jul 05 13:50:37 2016 -0700 @@ -120,6 +120,7 @@ compiler.misc.bad.module-info.name # bad class file compiler.err.locn.bad.module-info # bad class file compiler.err.locn.cant.read.file # bad class file +compiler.misc.module.info.invalid.super.class # bad class file compiler.err.locn.cant.read.directory # file system issue compiler.misc.unnamed.module # fragment uninteresting in and of itself compiler.misc.kindname.module # fragment uninteresting in and of itself diff -r 25903fca5876 -r 0ac35f4c3936 langtools/test/tools/javac/file/T8132857.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/file/T8132857.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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 8132857 + * @summary Verify an up-to-date name for UTF-8 encoding is provided in error messages. + * @modules jdk.compiler + */ + +import java.io.*; +import java.nio.charset.Charset; + +public class T8132857 { + public static void main(String... args) throws Exception{ + new T8132857().run(); + } + + void run() throws IOException { + if (!Charset.defaultCharset().equals(Charset.forName("UTF-8"))) { + System.err.println("skipping test, default charset is not UTF-8"); + return; + } + + File src = new File("src"); + src.mkdirs(); + try (OutputStream out = new FileOutputStream(new File(src, "Test.java"))) { + out.write('/'); + out.write('/'); + out.write(0b1100_0000); + out.write('a'); + } + + try (StringWriter out = new StringWriter(); PrintWriter pw = new PrintWriter(out)) { + int rc = com.sun.tools.javac.Main.compile(new String[] {"-XDrawDiagnostics", "src/Test.java"}, pw); + + pw.flush(); + + String lineSeparator = System.getProperty("line.separator"); + String expected = + "Test.java:1:3: compiler.err.illegal.char.for.encoding: C0, UTF-8" + lineSeparator + + "1 error" + lineSeparator; + String actual = out.toString(); + + System.err.println(actual); + + if (rc == 0) { + throw new Error("compilation unexpectedly passed: " + rc); + } + + if (!expected.equals(actual)) { + throw new Error("unexpected output: " + actual); + } + } + } + +} + diff -r 25903fca5876 -r 0ac35f4c3936 langtools/test/tools/javac/importscope/T8148131/A.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/importscope/T8148131/A.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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 8148131 + * @summary Ensuring order of inputs does not affect compilability of the sources + * @compile A.java B.java C.java D.java + * @compile A.java B.java D.java C.java + * @compile A.java C.java B.java D.java + * @compile A.java C.java D.java B.java + * @compile A.java D.java B.java C.java + * @compile A.java D.java C.java B.java + * @compile D.java A.java B.java C.java + * @compile D.java A.java C.java B.java + * @compile D.java B.java A.java C.java + * @compile D.java B.java C.java A.java + * @compile D.java C.java B.java A.java + * @compile D.java C.java A.java B.java + */ +package pkg; + +import pkg.B.BInner; + +class A implements BInner {} diff -r 25903fca5876 -r 0ac35f4c3936 langtools/test/tools/javac/importscope/T8148131/B.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/importscope/T8148131/B.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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 pkg; + +class B implements C.DInner { + interface BInner {} +} diff -r 25903fca5876 -r 0ac35f4c3936 langtools/test/tools/javac/importscope/T8148131/C.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/importscope/T8148131/C.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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 pkg; + +class C extends D {} diff -r 25903fca5876 -r 0ac35f4c3936 langtools/test/tools/javac/importscope/T8148131/D.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/importscope/T8148131/D.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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 pkg; + +class D { + interface DInner {} +} diff -r 25903fca5876 -r 0ac35f4c3936 langtools/test/tools/javac/modules/AutomaticModules.java --- a/langtools/test/tools/javac/modules/AutomaticModules.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/test/tools/javac/modules/AutomaticModules.java Tue Jul 05 13:50:37 2016 -0700 @@ -23,9 +23,11 @@ /** * @test + * @bug 8155026 * @summary Test automatic modules * @library /tools/lib * @modules + * java.desktop * jdk.compiler/com.sun.tools.javac.api * jdk.compiler/com.sun.tools.javac.main * @build toolbox.ToolBox toolbox.JavacTask toolbox.JarTask ModuleTestBase @@ -34,11 +36,12 @@ import java.nio.file.Files; import java.nio.file.Path; +import java.util.Arrays; +import java.util.List; import toolbox.JarTask; import toolbox.JavacTask; import toolbox.Task; -import toolbox.ToolBox; public class AutomaticModules extends ModuleTestBase { @@ -86,11 +89,11 @@ Files.createDirectories(classes); tb.writeJavaFiles(m1, - "module m1 { requires test.api; }", + "module m1 { requires test.api; requires java.desktop; }", "package impl; public class Impl { public void e(api.Api api) { api.actionPerformed(null); } }"); new JavacTask(tb) - .options("-modulesourcepath", moduleSrc.toString(), "-modulepath", modulePath.toString(), "-addmods", "java.desktop") + .options("-modulesourcepath", moduleSrc.toString(), "-modulepath", modulePath.toString()) .outdir(classes) .files(findJavaFiles(moduleSrc)) .run() @@ -224,4 +227,85 @@ .run() .writeAll(); } + + @Test + public void testAutomaticAndNamedModules(Path base) throws Exception { + Path modulePath = base.resolve("module-path"); + + Files.createDirectories(modulePath); + + for (char c : new char[] {'A', 'B'}) { + Path automaticSrc = base.resolve("automaticSrc" + c); + tb.writeJavaFiles(automaticSrc, "package api" + c + "; public class Api {}"); + Path automaticClasses = base.resolve("automaticClasses" + c); + tb.createDirectories(automaticClasses); + + String automaticLog = new JavacTask(tb) + .outdir(automaticClasses) + .files(findJavaFiles(automaticSrc)) + .run() + .writeAll() + .getOutput(Task.OutputKind.DIRECT); + + if (!automaticLog.isEmpty()) + throw new Exception("expected output not found: " + automaticLog); + + Path automaticJar = modulePath.resolve("automatic" + c + "-1.0.jar"); + + new JarTask(tb, automaticJar) + .baseDir(automaticClasses) + .files("api" + c + "/Api.class") + .run(); + } + + Path moduleSrc = base.resolve("module-src"); + + tb.writeJavaFiles(moduleSrc.resolve("m1"), + "module m1 { requires automaticA; }", + "package impl; public class Impl { apiA.Api a; apiB.Api b; m2.M2 m;}"); + + tb.writeJavaFiles(moduleSrc.resolve("m2"), + "module m2 { exports m2; }", + "package m2; public class M2 { }"); + + Path classes = base.resolve("classes"); + + Files.createDirectories(classes); + + List log = new JavacTask(tb) + .options("-modulesourcepath", moduleSrc.toString(), + "-modulepath", modulePath.toString(), + "-addmods", "automaticB", + "-XDrawDiagnostics") + .outdir(classes) + .files(findJavaFiles(moduleSrc)) + .run(Task.Expect.FAIL) + .writeAll() + .getOutputLines(Task.OutputKind.DIRECT); + + List expected = Arrays.asList("Impl.java:1:61: compiler.err.not.def.access.package.cant.access: m2.M2, m2", + "1 error"); + + if (!expected.equals(log)) { + throw new Exception("expected output not found: " + log); + } + + log = new JavacTask(tb) + .options("-modulesourcepath", moduleSrc.toString(), + "-modulepath", modulePath.toString(), + "-XDrawDiagnostics") + .outdir(classes) + .files(findJavaFiles(moduleSrc)) + .run(Task.Expect.FAIL) + .writeAll() + .getOutputLines(Task.OutputKind.DIRECT); + + expected = Arrays.asList("Impl.java:1:51: compiler.err.doesnt.exist: apiB", + "Impl.java:1:61: compiler.err.not.def.access.package.cant.access: m2.M2, m2", + "2 errors"); + + if (!expected.equals(log)) { + throw new Exception("expected output not found: " + log); + } + } } diff -r 25903fca5876 -r 0ac35f4c3936 langtools/test/tools/javac/modules/T8159439/NPEForModuleInfoWithNonZeroSuperClassTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/modules/T8159439/NPEForModuleInfoWithNonZeroSuperClassTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,9 @@ +/* + * @test /nodynamiccopyright/ + * @bug 8159439 + * @summary javac throws NPE with Module attribute and super_class != 0 + * @build module-info + * @compile/fail/ref=NPEForModuleInfoWithNonZeroSuperClassTest.out -XDrawDiagnostics NPEForModuleInfoWithNonZeroSuperClassTest.java + */ + +class NPEForModuleInfoWithNonZeroSuperClassTest {} diff -r 25903fca5876 -r 0ac35f4c3936 langtools/test/tools/javac/modules/T8159439/NPEForModuleInfoWithNonZeroSuperClassTest.out --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/modules/T8159439/NPEForModuleInfoWithNonZeroSuperClassTest.out Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,2 @@ +- compiler.err.cant.access: mod.module-info, (compiler.misc.bad.class.file.header: module-info.class, (compiler.misc.module.info.invalid.super.class)) +1 error diff -r 25903fca5876 -r 0ac35f4c3936 langtools/test/tools/javac/modules/T8159439/module-info.jcod --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/modules/T8159439/module-info.jcod Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,55 @@ +module mod { + 0xCAFEBABE; + 0; // minor version + 53; // version + [] { // Constant Pool + ; // first element is empty + Utf8 "mod/module-info"; // #1 + class #1; // #2 + Utf8 "java/lang/Object"; // #3 + class #3; // #4 + Utf8 "java.base"; // #5 + Utf8 "pkg"; // #6 + Utf8 "Module"; // #7 + Utf8 "Version"; // #8 + Utf8 "6.0"; // #9 + } // Constant Pool + + 0x8000; // access + #2;// this_cpx + #4;// super_cpx + + [] { // Interfaces + } // Interfaces + + [] { // fields + } // fields + + [] { // methods + } // methods + + [] { // Attributes + Attr(#7) { // Module + [] { // requires + #5 0x8020; + } // requires + + [] { // exports + #6 + [] { // to + }; // end to + } // exports + + [] { // uses + } // uses + + [] { // provides + } // provides + + } // end Module + ; + Attr(#8) { // Version + 0x0009; + } // end Version + } // Attributes +} // end module mod diff -r 25903fca5876 -r 0ac35f4c3936 langtools/test/tools/javac/processing/8132446/Processor.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/processing/8132446/Processor.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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.IOError; +import java.io.IOException; +import java.io.OutputStream; +import java.nio.charset.StandardCharsets; +import java.util.Set; + +import javax.annotation.processing.RoundEnvironment; +import javax.annotation.processing.SupportedAnnotationTypes; +import javax.lang.model.element.Element; +import javax.lang.model.element.TypeElement; +import javax.tools.JavaFileObject; + +// This processor generates the missing annotation types of the form AutoAnnotation_* +// thereby making sure annotation processing doesn't abort/crash on account of that. +@SupportedAnnotationTypes("*") +public class Processor extends JavacTestingAbstractProcessor { + + @Override + public boolean process(Set annotations, RoundEnvironment roundEnv) { + if (!roundEnv.processingOver()) { + for (Element element : roundEnv.getRootElements()) { + String elementName = element.getSimpleName().toString(); + if (elementName.startsWith("AutoAnnotation_")) { + continue; + } + String name = "AutoAnnotation_" + elementName; + JavaFileObject jfo; + try { + jfo = processingEnv.getFiler().createSourceFile(name, element); + } catch (IOException e) { + throw new IOError(e); + } + try (OutputStream os = jfo.openOutputStream()) { + String output = String.format("public @interface %s {}", name); + os.write(output.getBytes(StandardCharsets.UTF_8)); + } catch (IOException e) { + throw new IOError(e); + } + } + } + return false; + } +} \ No newline at end of file diff -r 25903fca5876 -r 0ac35f4c3936 langtools/test/tools/javac/processing/8132446/T8132446.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/processing/8132446/T8132446.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * 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 8132446 + * @summary AsssertionError in ClassSymbol.setAnnotationType + * @library /tools/javac/lib + * @modules java.compiler + * jdk.compiler + * @build Processor + * @compile -processor Processor T8132446.java + * @compile -processor Processor T8132446.java + */ + + +@Deprecated +@AutoAnnotation_T8132446 +public class T8132446 {} diff -r 25903fca5876 -r 0ac35f4c3936 langtools/test/tools/javac/types/BoxingConversionTest.java --- a/langtools/test/tools/javac/types/BoxingConversionTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/test/tools/javac/types/BoxingConversionTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. * 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,17 +26,18 @@ * @bug 7006109 * @summary Add test library to simplify the task of writing automated type-system tests * @author mcimadamore - * @library . + * @library /tools/lib/types * @modules jdk.compiler/com.sun.tools.javac.code * jdk.compiler/com.sun.tools.javac.comp * jdk.compiler/com.sun.tools.javac.file * jdk.compiler/com.sun.tools.javac.util + * jdk.compiler/com.sun.tools.javac.main + * jdk.compiler/com.sun.tools.javac.tree + * @build TypeHarness * @run main BoxingConversionTest */ import com.sun.tools.javac.code.Type; -import com.sun.tools.javac.code.Type.*; -import com.sun.tools.javac.code.Symbol.*; import java.lang.reflect.Array; import java.util.EnumSet; diff -r 25903fca5876 -r 0ac35f4c3936 langtools/test/tools/javac/types/CastTest.java --- a/langtools/test/tools/javac/types/CastTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/test/tools/javac/types/CastTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. * 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,11 +26,14 @@ * @bug 7006109 * @summary Add test library to simplify the task of writing automated type-system tests * @author mcimadamore - * @library . + * @library /tools/lib/types * @modules jdk.compiler/com.sun.tools.javac.code * jdk.compiler/com.sun.tools.javac.comp * jdk.compiler/com.sun.tools.javac.file * jdk.compiler/com.sun.tools.javac.util + * jdk.compiler/com.sun.tools.javac.main + * jdk.compiler/com.sun.tools.javac.tree + * @build TypeHarness * @run main CastTest */ diff -r 25903fca5876 -r 0ac35f4c3936 langtools/test/tools/javac/types/GenericTypeWellFormednessTest.java --- a/langtools/test/tools/javac/types/GenericTypeWellFormednessTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/test/tools/javac/types/GenericTypeWellFormednessTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. * 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,11 +26,14 @@ * @bug 7007432 7006109 * @summary Test generic types well-formedness * @author mcimadamore - * @library . + * @library /tools/lib/types * @modules jdk.compiler/com.sun.tools.javac.code * jdk.compiler/com.sun.tools.javac.comp * jdk.compiler/com.sun.tools.javac.file * jdk.compiler/com.sun.tools.javac.util + * jdk.compiler/com.sun.tools.javac.main + * jdk.compiler/com.sun.tools.javac.tree + * @build TypeHarness * @run main GenericTypeWellFormednessTest */ diff -r 25903fca5876 -r 0ac35f4c3936 langtools/test/tools/javac/types/PrimitiveConversionTest.java --- a/langtools/test/tools/javac/types/PrimitiveConversionTest.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/test/tools/javac/types/PrimitiveConversionTest.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. * 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,17 +26,19 @@ * @bug 7006109 * @summary Add test library to simplify the task of writing automated type-system tests * @author mcimadamore - * @library . + * @library /tools/lib/types * @modules jdk.compiler/com.sun.tools.javac.code * jdk.compiler/com.sun.tools.javac.comp * jdk.compiler/com.sun.tools.javac.file * jdk.compiler/com.sun.tools.javac.util + * jdk.compiler/com.sun.tools.javac.main + * jdk.compiler/com.sun.tools.javac.tree + * @build TypeHarness * @run main PrimitiveConversionTest */ import com.sun.tools.javac.code.Type; import com.sun.tools.javac.code.Type.*; -import com.sun.tools.javac.code.Symbol.*; import java.lang.reflect.Array; import java.util.EnumSet; diff -r 25903fca5876 -r 0ac35f4c3936 langtools/test/tools/javac/types/TestComparisons.java --- a/langtools/test/tools/javac/types/TestComparisons.java Thu Jun 30 14:57:30 2016 -0700 +++ b/langtools/test/tools/javac/types/TestComparisons.java Tue Jul 05 13:50:37 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved. * 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,8 +29,6 @@ */ import java.io.*; -import java.lang.reflect.Array; -import java.util.EnumSet; public class TestComparisons { diff -r 25903fca5876 -r 0ac35f4c3936 langtools/test/tools/javac/types/TypeHarness.java --- a/langtools/test/tools/javac/types/TypeHarness.java Thu Jun 30 14:57:30 2016 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,333 +0,0 @@ -/* - * 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. - */ - -import com.sun.tools.javac.code.BoundKind; -import com.sun.tools.javac.code.Flags; -import com.sun.tools.javac.util.Context; -import com.sun.tools.javac.code.Types; -import com.sun.tools.javac.code.Symtab; -import com.sun.tools.javac.code.Type; -import com.sun.tools.javac.code.Type.*; -import com.sun.tools.javac.code.Symbol.*; -import com.sun.tools.javac.comp.Check; -import com.sun.tools.javac.util.List; -import com.sun.tools.javac.util.ListBuffer; -import com.sun.tools.javac.util.Name; -import com.sun.tools.javac.util.Names; -import com.sun.tools.javac.file.JavacFileManager; - -/** - * Test harness whose goal is to simplify the task of writing type-system - * regression test. It provides functionalities to build custom types as well - * as to access the underlying javac's symbol table in order to retrieve - * predefined types. Among the features supported by the harness are: type - * substitution, type containment, subtyping, cast-conversion, assigment - * conversion. - * - * This class is meant to be a common super class for all concrete type test - * classes. A subclass can access the type-factory and the test methods so as - * to write compact tests. An example is reported below: - * - *

- * Type X = fac.TypeVariable();
- * Type Y = fac.TypeVariable();
- * Type A_X_Y = fac.Class(0, X, Y);
- * Type A_Obj_Obj = fac.Class(0,
- *           predef.objectType,
- *           predef.objectType);
- * checkSameType(A_Obj_Obj, subst(A_X_Y,
- *           Mapping(X, predef.objectType),
- *           Mapping(Y, predef.objectType)));
- * 
- * - * The above code is used to create two class types, namely {@code A} and - * {@code A} where both {@code X} and {@code Y} are type-variables. - * The code then verifies that {@code [X:=Object,Y:=Object]A == A}. - * - * @author mcimadamore - */ -public class TypeHarness { - - protected Types types; - protected Check chk; - protected Symtab predef; - protected Names names; - protected Factory fac; - - protected TypeHarness() { - Context ctx = new Context(); - JavacFileManager.preRegister(ctx); - types = Types.instance(ctx); - chk = Check.instance(ctx); - predef = Symtab.instance(ctx); - names = Names.instance(ctx); - fac = new Factory(); - } - - // - - /** assert that 's' is a subtype of 't' */ - public void assertSubtype(Type s, Type t) { - assertSubtype(s, t, true); - } - - /** assert that 's' is/is not a subtype of 't' */ - public void assertSubtype(Type s, Type t, boolean expected) { - if (types.isSubtype(s, t) != expected) { - String msg = expected ? - " is not a subtype of " : - " is a subtype of "; - error(s + msg + t); - } - } - - /** assert that 's' is the same type as 't' */ - public void assertSameType(Type s, Type t) { - assertSameType(s, t, true); - } - - /** assert that 's' is/is not the same type as 't' */ - public void assertSameType(Type s, Type t, boolean expected) { - if (types.isSameType(s, t) != expected) { - String msg = expected ? - " is not the same type as " : - " is the same type as "; - error(s + msg + t); - } - } - - /** assert that 's' is castable to 't' */ - public void assertCastable(Type s, Type t) { - assertCastable(s, t, true); - } - - /** assert that 's' is/is not castable to 't' */ - public void assertCastable(Type s, Type t, boolean expected) { - if (types.isCastable(s, t) != expected) { - String msg = expected ? - " is not castable to " : - " is castable to "; - error(s + msg + t); - } - } - - /** assert that 's' is convertible (method invocation conversion) to 't' */ - public void assertConvertible(Type s, Type t) { - assertCastable(s, t, true); - } - - /** assert that 's' is/is not convertible (method invocation conversion) to 't' */ - public void assertConvertible(Type s, Type t, boolean expected) { - if (types.isConvertible(s, t) != expected) { - String msg = expected ? - " is not convertible to " : - " is convertible to "; - error(s + msg + t); - } - } - - /** assert that 's' is assignable to 't' */ - public void assertAssignable(Type s, Type t) { - assertCastable(s, t, true); - } - - /** assert that 's' is/is not assignable to 't' */ - public void assertAssignable(Type s, Type t, boolean expected) { - if (types.isAssignable(s, t) != expected) { - String msg = expected ? - " is not assignable to " : - " is assignable to "; - error(s + msg + t); - } - } - - /** assert that generic type 't' is well-formed */ - public void assertValidGenericType(Type t) { - assertValidGenericType(t, true); - } - - /** assert that 's' is/is not assignable to 't' */ - public void assertValidGenericType(Type t, boolean expected) { - if (chk.checkValidGenericType(t) != expected) { - String msg = expected ? - " is not a valid generic type" : - " is a valid generic type"; - error(t + msg + " " + t.tsym.type); - } - } - // - - private void error(String msg) { - throw new AssertionError("Unexpected result: " + msg); - } - - // - - /** compute the erasure of a type 't' */ - public Type erasure(Type t) { - return types.erasure(t); - } - - /** compute the capture of a type 't' */ - public Type capture(Type t) { - return types.capture(t); - } - - /** compute the boxed type associated with 't' */ - public Type box(Type t) { - if (!t.isPrimitive()) { - throw new AssertionError("Cannot box non-primitive type: " + t); - } - return types.boxedClass(t).type; - } - - /** compute the unboxed type associated with 't' */ - public Type unbox(Type t) { - Type u = types.unboxedType(t); - if (t == null) { - throw new AssertionError("Cannot unbox reference type: " + t); - } else { - return u; - } - } - - /** compute a type substitution on 't' given a list of type mappings */ - public Type subst(Type t, Mapping... maps) { - ListBuffer from = new ListBuffer<>(); - ListBuffer to = new ListBuffer<>(); - for (Mapping tm : maps) { - from.append(tm.from); - to.append(tm.to); - } - return types.subst(t, from.toList(), to.toList()); - } - - /** create a fresh type mapping from a type to another */ - public Mapping Mapping(Type from, Type to) { - return new Mapping(from, to); - } - - public static class Mapping { - Type from; - Type to; - private Mapping(Type from, Type to) { - this.from = from; - this.to = to; - } - } - // - - // - - /** - * This class is used to create Java types in a simple way. All main - * kinds of type are supported: primitive, reference, non-denotable. The - * factory also supports creation of constant types (used by the compiler - * to represent the type of a literal). - */ - public class Factory { - - private int synthNameCount = 0; - - private Name syntheticName() { - return names.fromString("A$" + synthNameCount++); - } - - public ClassType Class(long flags, Type... typeArgs) { - ClassSymbol csym = new ClassSymbol(flags, syntheticName(), predef.noSymbol); - csym.type = new ClassType(Type.noType, List.from(typeArgs), csym); - ((ClassType)csym.type).supertype_field = predef.objectType; - return (ClassType)csym.type; - } - - public ClassType Class(Type... typeArgs) { - return Class(0, typeArgs); - } - - public ClassType Interface(Type... typeArgs) { - return Class(Flags.INTERFACE, typeArgs); - } - - public ClassType Interface(long flags, Type... typeArgs) { - return Class(Flags.INTERFACE | flags, typeArgs); - } - - public Type Constant(byte b) { - return predef.byteType.constType(b); - } - - public Type Constant(short s) { - return predef.shortType.constType(s); - } - - public Type Constant(int i) { - return predef.intType.constType(i); - } - - public Type Constant(long l) { - return predef.longType.constType(l); - } - - public Type Constant(float f) { - return predef.floatType.constType(f); - } - - public Type Constant(double d) { - return predef.doubleType.constType(d); - } - - public Type Constant(char c) { - return predef.charType.constType(c + 0); - } - - public ArrayType Array(Type elemType) { - return new ArrayType(elemType, predef.arrayClass); - } - - public TypeVar TypeVariable() { - return TypeVariable(predef.objectType); - } - - public TypeVar TypeVariable(Type bound) { - TypeSymbol tvsym = new TypeVariableSymbol(0, syntheticName(), null, predef.noSymbol); - tvsym.type = new TypeVar(tvsym, bound, null); - return (TypeVar)tvsym.type; - } - - public WildcardType Wildcard(BoundKind bk, Type bound) { - return new WildcardType(bound, bk, predef.boundClass); - } - - public CapturedType CapturedVariable(Type upper, Type lower) { - return new CapturedType(syntheticName(), predef.noSymbol, upper, lower, null); - } - - public ClassType Intersection(Type classBound, Type... intfBounds) { - ClassType ct = Class(Flags.COMPOUND); - ct.supertype_field = classBound; - ct.interfaces_field = List.from(intfBounds); - return ct; - } - } - // -} diff -r 25903fca5876 -r 0ac35f4c3936 langtools/test/tools/lib/types/TypeHarness.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/lib/types/TypeHarness.java Tue Jul 05 13:50:37 2016 -0700 @@ -0,0 +1,540 @@ +/* + * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. + * 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.URI; +import java.util.function.Consumer; +import java.util.stream.Collectors; + +import javax.tools.JavaFileObject; +import javax.tools.SimpleJavaFileObject; + +import com.sun.tools.javac.code.BoundKind; +import com.sun.tools.javac.code.Flags; +import com.sun.tools.javac.util.Context; +import com.sun.tools.javac.code.Types; +import com.sun.tools.javac.code.Symtab; +import com.sun.tools.javac.code.Type; +import com.sun.tools.javac.code.Type.*; +import com.sun.tools.javac.code.Symbol.*; +import com.sun.tools.javac.comp.Attr; +import com.sun.tools.javac.comp.Check; +import com.sun.tools.javac.comp.Infer; +import com.sun.tools.javac.comp.InferenceContext; +import com.sun.tools.javac.util.List; +import com.sun.tools.javac.util.ListBuffer; +import com.sun.tools.javac.util.Name; +import com.sun.tools.javac.util.Names; +import com.sun.tools.javac.file.JavacFileManager; +import com.sun.tools.javac.main.JavaCompiler; +import com.sun.tools.javac.tree.JCTree.JCVariableDecl; +import com.sun.tools.javac.util.Abort; +import com.sun.tools.javac.util.Assert; +import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition; + +import static com.sun.tools.javac.util.List.*; + +/** + * Test harness whose goal is to simplify the task of writing type-system + * regression test. It provides functionalities to build custom types as well + * as to access the underlying javac's symbol table in order to retrieve + * predefined types. Among the features supported by the harness are: type + * substitution, type containment, subtyping, cast-conversion, assigment + * conversion. + * + * This class is meant to be a common super class for all concrete type test + * classes. A subclass can access the type-factory and the test methods so as + * to write compact tests. An example is reported below: + * + *
+ * Type X = fac.TypeVariable();
+ * Type Y = fac.TypeVariable();
+ * Type A_X_Y = fac.Class(0, X, Y);
+ * Type A_Obj_Obj = fac.Class(0,
+ *           predef.objectType,
+ *           predef.objectType);
+ * checkSameType(A_Obj_Obj, subst(A_X_Y,
+ *           Mapping(X, predef.objectType),
+ *           Mapping(Y, predef.objectType)));
+ * 
+ * + * The above code is used to create two class types, namely {@code A} and + * {@code A} where both {@code X} and {@code Y} are type-variables. + * The code then verifies that {@code [X:=Object,Y:=Object]A == A}. + * + * @author mcimadamore + */ +public class TypeHarness { + + protected Types types; + protected Check chk; + protected Symtab predef; + protected Names names; + protected ReusableJavaCompiler tool; + protected Infer infer; + + protected Factory fac; + + protected TypeHarness() { + Context ctx = new Context(); + JavacFileManager.preRegister(ctx); + MyAttr.preRegister(ctx); + tool = new ReusableJavaCompiler(ctx); + types = Types.instance(ctx); + infer = Infer.instance(ctx); + chk = Check.instance(ctx); + predef = Symtab.instance(ctx); + names = Names.instance(ctx); + fac = new Factory(); + } + + // + + /** assert that 's' is a subtype of 't' */ + public void assertSubtype(Type s, Type t) { + assertSubtype(s, t, true); + } + + /** assert that 's' is/is not a subtype of 't' */ + public void assertSubtype(Type s, Type t, boolean expected) { + if (types.isSubtype(s, t) != expected) { + String msg = expected ? + " is not a subtype of " : + " is a subtype of "; + error(s + msg + t); + } + } + + /** assert that 's' is the same type as 't' */ + public void assertSameType(Type s, Type t) { + assertSameType(s, t, true); + } + + /** assert that 's' is/is not the same type as 't' */ + public void assertSameType(Type s, Type t, boolean expected) { + if (types.isSameType(s, t) != expected) { + String msg = expected ? + " is not the same type as " : + " is the same type as "; + error(s + msg + t); + } + } + + /** assert that 's' is castable to 't' */ + public void assertCastable(Type s, Type t) { + assertCastable(s, t, true); + } + + /** assert that 's' is/is not castable to 't' */ + public void assertCastable(Type s, Type t, boolean expected) { + if (types.isCastable(s, t) != expected) { + String msg = expected ? + " is not castable to " : + " is castable to "; + error(s + msg + t); + } + } + + /** assert that 's' is convertible (method invocation conversion) to 't' */ + public void assertConvertible(Type s, Type t) { + assertCastable(s, t, true); + } + + /** assert that 's' is/is not convertible (method invocation conversion) to 't' */ + public void assertConvertible(Type s, Type t, boolean expected) { + if (types.isConvertible(s, t) != expected) { + String msg = expected ? + " is not convertible to " : + " is convertible to "; + error(s + msg + t); + } + } + + /** assert that 's' is assignable to 't' */ + public void assertAssignable(Type s, Type t) { + assertCastable(s, t, true); + } + + /** assert that 's' is/is not assignable to 't' */ + public void assertAssignable(Type s, Type t, boolean expected) { + if (types.isAssignable(s, t) != expected) { + String msg = expected ? + " is not assignable to " : + " is assignable to "; + error(s + msg + t); + } + } + + /** assert that generic type 't' is well-formed */ + public void assertValidGenericType(Type t) { + assertValidGenericType(t, true); + } + + /** assert that 's' is/is not assignable to 't' */ + public void assertValidGenericType(Type t, boolean expected) { + if (chk.checkValidGenericType(t) != expected) { + String msg = expected ? + " is not a valid generic type" : + " is a valid generic type"; + error(t + msg + " " + t.tsym.type); + } + } + // + + /** Creates an inference context given a list of type variables and performs the given action on it. + * The intention is to provide a way to do unit testing on inference contexts. + * @param typeVars a list of type variables to create the inference context from + * @param consumer the action to be performed on the inference context + */ + protected void withInferenceContext(List typeVars, Consumer consumer) { + Assert.check(!typeVars.isEmpty(), "invalid parameter, empty type variables list"); + ListBuffer undetVarsBuffer = new ListBuffer(); + typeVars.stream().map((tv) -> new UndetVar((TypeVar)tv, null, types)).forEach((undetVar) -> { + undetVarsBuffer.add(undetVar); + }); + List undetVarsList = undetVarsBuffer.toList(); + InferenceContext inferenceContext = new InferenceContext(infer, nil(), undetVarsList); + inferenceContext.rollback(undetVarsList); + consumer.accept(inferenceContext); + } + + private void error(String msg) { + throw new AssertionError("Unexpected result: " + msg); + } + + // + + /** compute the erasure of a type 't' */ + public Type erasure(Type t) { + return types.erasure(t); + } + + /** compute the capture of a type 't' */ + public Type capture(Type t) { + return types.capture(t); + } + + /** compute the boxed type associated with 't' */ + public Type box(Type t) { + if (!t.isPrimitive()) { + throw new AssertionError("Cannot box non-primitive type: " + t); + } + return types.boxedClass(t).type; + } + + /** compute the unboxed type associated with 't' */ + public Type unbox(Type t) { + Type u = types.unboxedType(t); + if (t == null) { + throw new AssertionError("Cannot unbox reference type: " + t); + } else { + return u; + } + } + + /** compute a type substitution on 't' given a list of type mappings */ + public Type subst(Type t, Mapping... maps) { + ListBuffer from = new ListBuffer<>(); + ListBuffer to = new ListBuffer<>(); + for (Mapping tm : maps) { + from.append(tm.from); + to.append(tm.to); + } + return types.subst(t, from.toList(), to.toList()); + } + + /** create a fresh type mapping from a type to another */ + public Mapping Mapping(Type from, Type to) { + return new Mapping(from, to); + } + + public static class Mapping { + Type from; + Type to; + private Mapping(Type from, Type to) { + this.from = from; + this.to = to; + } + } + // + + // + + /** + * This class is used to create Java types in a simple way. All main + * kinds of type are supported: primitive, reference, non-denotable. The + * factory also supports creation of constant types (used by the compiler + * to represent the type of a literal). + */ + public class Factory { + + private int synthNameCount = 0; + + private Name syntheticName() { + return names.fromString("A$" + synthNameCount++); + } + + public ClassType Class(long flags, Type... typeArgs) { + ClassSymbol csym = new ClassSymbol(flags, syntheticName(), predef.noSymbol); + csym.type = new ClassType(Type.noType, List.from(typeArgs), csym); + ((ClassType)csym.type).supertype_field = predef.objectType; + return (ClassType)csym.type; + } + + public ClassType Class(Type... typeArgs) { + return Class(0, typeArgs); + } + + public ClassType Interface(Type... typeArgs) { + return Class(Flags.INTERFACE, typeArgs); + } + + public ClassType Interface(long flags, Type... typeArgs) { + return Class(Flags.INTERFACE | flags, typeArgs); + } + + public Type Constant(byte b) { + return predef.byteType.constType(b); + } + + public Type Constant(short s) { + return predef.shortType.constType(s); + } + + public Type Constant(int i) { + return predef.intType.constType(i); + } + + public Type Constant(long l) { + return predef.longType.constType(l); + } + + public Type Constant(float f) { + return predef.floatType.constType(f); + } + + public Type Constant(double d) { + return predef.doubleType.constType(d); + } + + public Type Constant(char c) { + return predef.charType.constType(c + 0); + } + + public ArrayType Array(Type elemType) { + return new ArrayType(elemType, predef.arrayClass); + } + + public TypeVar TypeVariable() { + return TypeVariable(predef.objectType); + } + + public TypeVar TypeVariable(Type bound) { + TypeSymbol tvsym = new TypeVariableSymbol(0, syntheticName(), null, predef.noSymbol); + tvsym.type = new TypeVar(tvsym, bound, null); + return (TypeVar)tvsym.type; + } + + public WildcardType Wildcard(BoundKind bk, Type bound) { + return new WildcardType(bound, bk, predef.boundClass); + } + + public CapturedType CapturedVariable(Type upper, Type lower) { + return new CapturedType(syntheticName(), predef.noSymbol, upper, lower, null); + } + + public ClassType Intersection(Type classBound, Type... intfBounds) { + ClassType ct = Class(Flags.COMPOUND); + ct.supertype_field = classBound; + ct.interfaces_field = List.from(intfBounds); + return ct; + } + } + // + + // + /** + * StrToTypeFactory is a class provided to ease the creation of complex types from Strings. + * The client code can specify a package, a list of imports and a list of type variables when + * creating an instance of StrToTypeFactory. Later types including, or not, these type variables + * can be created by the factory. All occurrences of the same type variable in a type defined + * using a String are guaranteed to refer to the same type variable in the created type. + * + * An example is reported below: + * + *
+     * List imports = new ArrayList<>();
+     * imports.add("java.util.*");
+     * List typeVars = new ArrayList<>();
+     * typeVars.add("T");
+     * strToTypeFactory = new StrToTypeFactory(null, imports, typeVars);
+     *
+     * Type freeType = strToTypeFactory.getType("List");
+     * Type aType = strToTypeFactory.getType("List");
+     *
+     * // method withInferenceContext() belongs to TypeHarness
+     * withInferenceContext(strToTypeFactory.getTypeVars(), inferenceContext -> {
+     *     assertSameType(inferenceContext.asUndetVar(freeType), aType);
+     *     UndetVar undetVarForT = (UndetVar)inferenceContext.undetVars().head;
+     *     com.sun.tools.javac.util.List equalBounds = undetVarForT.getBounds(InferenceBound.EQ);
+     *     Assert.check(!equalBounds.isEmpty() && equalBounds.length() == 1,
+     *          "undetVar must have only one equality bound");
+     * });
+     * 
+ */ + public class StrToTypeFactory { + int id = 0; + String pkg; + java.util.List imports; + public java.util.List typeVarDecls; + public List typeVariables; + + public StrToTypeFactory(String pkg, java.util.List imports, java.util.List typeVarDecls) { + this.pkg = pkg; + this.imports = imports; + this.typeVarDecls = typeVarDecls; + this.typeVariables = from(typeVarDecls.stream() + .map(this::typeVarName) + .map(this::getType) + .collect(Collectors.toList()) + ); + } + + TypeVar getTypeVarFromStr(String name) { + if (typeVarDecls == null) { + return null; + } + int index = typeVarDecls.indexOf(name); + if (index != -1) { + return (TypeVar)typeVariables.get(index); + } + return null; + } + + List getTypeVars() { + return typeVariables; + } + + String typeVarName(String typeVarDecl) { + String[] ss = typeVarDecl.split(" "); + return ss[0]; + } + + public final Type getType(String type) { + JavaSource source = new JavaSource(type); + MyAttr.theType = null; + MyAttr.typeParameters = List.nil(); + tool.clear(); + List inputs = of(source); + try { + tool.compile(inputs); + } catch (Throwable ex) { + throw new Abort(ex); + } + if (typeVariables != null) { + return types.subst(MyAttr.theType, MyAttr.typeParameters, typeVariables); + } + return MyAttr.theType; + } + + class JavaSource extends SimpleJavaFileObject { + + String id; + String type; + String template = "#Package;\n" + + "#Imports\n" + + "class G#Id#TypeVars {\n" + + " #FieldType var;" + + "}"; + + JavaSource(String type) { + super(URI.create("myfo:/Test.java"), JavaFileObject.Kind.SOURCE); + this.id = String.valueOf(StrToTypeFactory.this.id++); + this.type = type; + } + + @Override + public CharSequence getCharContent(boolean ignoreEncodingErrors) { + String impStmts = imports.size() > 0 ? + imports.stream().map(i -> "import " + i + ";").collect(Collectors.joining("\n")) : ""; + String tvars = typeVarDecls.size() > 0 ? + typeVarDecls.stream().collect(Collectors.joining(",", "<", ">")) : ""; + return template + .replace("#Package", (pkg == null) ? "" : "package " + pkg + ";") + .replace("#Imports", impStmts) + .replace("#Id", id) + .replace("#TypeVars", tvars) + .replace("#FieldType", type); + } + } + } + //
+ + // + static class MyAttr extends Attr { + + private static Type theType; + private static List typeParameters = List.nil(); + + static void preRegister(Context context) { + context.put(attrKey, (com.sun.tools.javac.util.Context.Factory) c -> new MyAttr(c)); + } + + MyAttr(Context context) { + super(context); + } + + @Override + public void visitVarDef(JCVariableDecl tree) { + super.visitVarDef(tree); + theType = tree.type; + } + + @Override + public void attribClass(DiagnosticPosition pos, ClassSymbol c) { + super.attribClass(pos, c); + ClassType ct = (ClassType)c.type; + typeParameters = ct.typarams_field; + } + } + + static class ReusableJavaCompiler extends JavaCompiler { + ReusableJavaCompiler(Context context) { + super(context); + } + + @Override + protected void checkReusable() { + // do nothing + } + + @Override + public void close() { + //do nothing + } + + void clear() { + newRound(); + } + } + // +} diff -r 25903fca5876 -r 0ac35f4c3936 make/CompileJavaModules.gmk --- a/make/CompileJavaModules.gmk Thu Jun 30 14:57:30 2016 -0700 +++ b/make/CompileJavaModules.gmk Tue Jul 05 13:50:37 2016 -0700 @@ -55,10 +55,6 @@ # data files and shouldn't go in the product java.base_EXCLUDE_FILES += sun/text/resources/BreakIteratorRules.java -ifeq ($(OPENJDK_TARGET_OS), macosx) - java.base_EXCLUDE_FILES += sun/nio/fs/GnomeFileTypeDetector.java -endif - ifneq ($(filter solaris macosx linux windows,$(OPENJDK_TARGET_OS)), ) java.base_EXCLUDE_FILES += \ sun/nio/ch/AbstractPollSelectorImpl.java \ diff -r 25903fca5876 -r 0ac35f4c3936 make/Main.gmk --- a/make/Main.gmk Thu Jun 30 14:57:30 2016 -0700 +++ b/make/Main.gmk Tue Jul 05 13:50:37 2016 -0700 @@ -633,7 +633,9 @@ # Jmods cannot be created until we have the jlink tool ready to run, which requires # all java modules to be compiled and jdk.jlink-launchers. - $(JMOD_TARGETS): java.base-libs jdk.jlink-launchers + # And we also need to copy jvm.cfg (done in java.base-copy) and tzdb.dat (done in + # java.base-gendata) to the appropriate location otherwise jimage, jlink and jmod won't start. + $(JMOD_TARGETS): java.base-libs java.base-copy java.base-gendata jdk.jlink-launchers # When creating a BUILDJDK, the java compilation has already been done by the # normal build and copied in. ifneq ($(CREATING_BUILDJDK), true) diff -r 25903fca5876 -r 0ac35f4c3936 make/jprt.properties --- a/make/jprt.properties Thu Jun 30 14:57:30 2016 -0700 +++ b/make/jprt.properties Tue Jul 05 13:50:37 2016 -0700 @@ -75,7 +75,7 @@ jprt.macosx.jdk9.target.attribute.compilerXcode511.appliesTo.builds=none # Set up the run flavors (jvm variants) -jprt.run.flavors=c1,c2,default,${my.additional.run.flavors} +jprt.run.flavors=c2,default,${my.additional.run.flavors} # Setup jib profiles jprt.linux_i586.product.build.jib.profile=linux-x86 @@ -208,10 +208,10 @@ my.test.target.set= \ solaris_sparcv9_5.11-product-c2-TESTNAME, \ solaris_x64_5.11-product-c2-TESTNAME, \ - linux_i586_3.8-product-{c1|c2}-TESTNAME, \ + linux_i586_3.8-product-c2-TESTNAME, \ linux_x64_3.8-product-c2-TESTNAME, \ macosx_x64_10.9-product-c2-TESTNAME, \ - windows_i586_6.3-product-c1-TESTNAME, \ + windows_i586_6.3-product-c2-TESTNAME, \ windows_x64_6.3-product-c2-TESTNAME # Default vm test targets (testset=default) @@ -296,7 +296,7 @@ my.test.target.set.jck= \ solaris_sparcv9_5.11-product-c2-JCK7TESTRULE, \ solaris_x64_5.11-product-c2-JCK7TESTRULE, \ - linux_i586_3.8-product-c1-JCK7TESTRULE, \ + linux_i586_3.8-product-c2-JCK7TESTRULE, \ linux_x64_3.8-product-c2-JCK7TESTRULE # JCK testset targets diff -r 25903fca5876 -r 0ac35f4c3936 nashorn/.hgtags --- a/nashorn/.hgtags Thu Jun 30 14:57:30 2016 -0700 +++ b/nashorn/.hgtags Tue Jul 05 13:50:37 2016 -0700 @@ -358,3 +358,4 @@ b1de131a3fed6845c78bdda358ee127532f16a3f jdk-9+122 9ed859b4faaf9ff7cd35f9e7f51c7e630303067a jdk-9+123 5d68f5155dded7efec7d5aca5d631caa7ee1042b jdk-9+124 +a32d419d73fe881a935b567c57dab9bfe3ed5f92 jdk-9+125 diff -r 25903fca5876 -r 0ac35f4c3936 nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/Source.java --- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/Source.java Thu Jun 30 14:57:30 2016 -0700 +++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/Source.java Tue Jul 05 13:50:37 2016 -0700 @@ -36,6 +36,7 @@ import java.io.Reader; import java.lang.ref.WeakReference; import java.net.MalformedURLException; +import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.net.URLConnection; @@ -75,8 +76,8 @@ private final String name; /** - * Base directory the File or base part of the URL. Used to implement __DIR__. - * Used to load scripts relative to the 'directory' or 'base' URL of current script. + * Base path or URL of this source. Used to implement __DIR__, which can be + * used to load scripts relative to the location of the current script. * This will be null when it can't be computed. */ private final String base; @@ -875,31 +876,25 @@ } /** - * Get the base url. This is currently used for testing only + * Returns the base directory or URL for the given URL. Used to implement __DIR__. * @param url a URL - * @return base URL for url + * @return base path or URL, or null if argument is not a hierarchical URL */ public static String baseURL(final URL url) { - if (url.getProtocol().equals("file")) { - try { - final Path path = Paths.get(url.toURI()); + try { + final URI uri = url.toURI(); + + if (uri.getScheme().equals("file")) { + final Path path = Paths.get(uri); final Path parent = path.getParent(); return (parent != null) ? (parent + File.separator) : null; - } catch (final SecurityException | URISyntaxException | IOError e) { + } + if (uri.isOpaque() || uri.getPath() == null || uri.getPath().isEmpty()) { return null; } - } + return uri.resolve("").toString(); - // FIXME: is there a better way to find 'base' URL of a given URL? - String path = url.getPath(); - if (path.isEmpty()) { - return null; - } - path = path.substring(0, path.lastIndexOf('/') + 1); - final int port = url.getPort(); - try { - return new URL(url.getProtocol(), url.getHost(), port, path).toString(); - } catch (final MalformedURLException e) { + } catch (final SecurityException | URISyntaxException | IOError e) { return null; } } diff -r 25903fca5876 -r 0ac35f4c3936 nashorn/test/Makefile --- a/nashorn/test/Makefile Thu Jun 30 14:57:30 2016 -0700 +++ b/nashorn/test/Makefile Tue Jul 05 13:50:37 2016 -0700 @@ -118,19 +118,6 @@ JAVA_VM_ARGS = $(JPRT_PRODUCT_VM_ARGS) endif -# jtreg -nativepath -# -# Local make tests will be TEST_IMAGE_DIR and JPRT with jprt.use.reg.test.bundle=true -# should be JPRT_TESTNATIVE_PATH -ifdef TEST_IMAGE_DIR - TESTNATIVE_DIR = $(TEST_IMAGE_DIR) -else ifdef JPRT_TESTNATIVE_PATH - TESTNATIVE_DIR = $(JPRT_TESTNATIVE_PATH) -endif -ifdef TESTNATIVE_DIR - JTREG_NATIVE_PATH = -nativepath:$(shell $(GETMIXEDPATH) "$(TESTNATIVE_DIR)/nashorn/jtreg/native") -endif - # jtreg failure handler config ifeq ($(FAILURE_HANDLER_DIR), ) ifneq ($(TESTNATIVE_DIR), ) diff -r 25903fca5876 -r 0ac35f4c3936 test/jtreg-ext/requires/VMProps.java --- a/test/jtreg-ext/requires/VMProps.java Thu Jun 30 14:57:30 2016 -0700 +++ b/test/jtreg-ext/requires/VMProps.java Tue Jul 05 13:50:37 2016 -0700 @@ -23,6 +23,8 @@ package requires; import java.io.IOException; +import java.lang.management.ManagementFactory; +import java.lang.management.RuntimeMXBean; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; @@ -52,10 +54,30 @@ map.put("vm.flavor", vmFlavor()); map.put("vm.compMode", vmCompMode()); map.put("vm.bits", vmBits()); + map.put("vm.flightRecorder", vmFlightRecorder()); + map.put("vm.simpleArch", vmArch()); dump(map); return map; } + + /** + * @return vm.simpleArch value of "os.simpleArch" property of tested JDK. + */ + protected String vmArch() { + String arch = System.getProperty("os.arch"); + if (arch.equals("x86_64") || arch.equals("amd64")) { + return "x64"; + } + else if (arch.contains("86")) { + return "x86"; + } else { + return arch; + } + } + + + /** * @return VM type value extracted from the "java.vm.name" property. */ @@ -104,6 +126,27 @@ } /** + * @return "true" if Flight Recorder is enabled, "false" if is disabled. + */ + protected String vmFlightRecorder() { + RuntimeMXBean runtimeMxBean = ManagementFactory.getRuntimeMXBean(); + List arguments = runtimeMxBean.getInputArguments(); + if (arguments.contains("-XX:+UnlockCommercialFeatures")) { + if (arguments.contains("-XX:+FlightRecorder")) { + return "true"; + } + if (arguments.contains("-XX:-FlightRecorder")) { + return "false"; + } + if (arguments.stream() + .anyMatch(option -> option.startsWith("-XX:StartFlightRecording"))) { + return "true"; + } + } + return "false"; + } + + /** * Dumps the map to the file if the file name is given as the property. * This functionality could be helpful to know context in the real * execution. @@ -116,9 +159,9 @@ return; } List lines = new ArrayList<>(); - map.forEach((k,v) -> lines.add(k + ":" + v)); + map.forEach((k, v) -> lines.add(k + ":" + v)); try { - Files.write(Paths.get(dumpFileName), lines); + Files.write(Paths.get(dumpFileName), lines); } catch (IOException e) { throw new RuntimeException("Failed to dump properties into '" + dumpFileName + "'", e); @@ -131,6 +174,6 @@ */ public static void main(String args[]) { Map map = new VMProps().call(); - map.forEach((k,v) -> System.out.println(k + ": '" + v + "'")); + map.forEach((k, v) -> System.out.println(k + ": '" + v + "'")); } } diff -r 25903fca5876 -r 0ac35f4c3936 test/lib/sun/hotspot/WhiteBox.java --- a/test/lib/sun/hotspot/WhiteBox.java Thu Jun 30 14:57:30 2016 -0700 +++ b/test/lib/sun/hotspot/WhiteBox.java Tue Jul 05 13:50:37 2016 -0700 @@ -376,6 +376,7 @@ public native void freeMetaspace(ClassLoader classLoader, long addr, long size); public native long incMetaspaceCapacityUntilGC(long increment); public native long metaspaceCapacityUntilGC(); + public native boolean metaspaceShouldConcurrentCollect(); // Don't use these methods directly // Use sun.hotspot.gc.GC class instead.