--- a/.hgtags Fri Jul 01 12:32:21 2016 +0200
+++ b/.hgtags Fri Jul 01 16:55:44 2016 -0700
@@ -366,3 +366,5 @@
18e5cdecb37a2f03ba74f6c8f022858bcbaacf56 jdk-9+121
7693aa00e131493ceb42b93305e2f014c9922a3b jdk-9+122
d53037a90c441cb528dc41c30827985de0e67c62 jdk-9+123
+2a5697a98620c4f40e4a1a71478464399b8878de jdk-9+124
+3aa52182b3ad7c5b3a61cf05a59dd07e4c5884e5 jdk-9+125
--- a/.hgtags-top-repo Fri Jul 01 12:32:21 2016 +0200
+++ b/.hgtags-top-repo Fri Jul 01 16:55:44 2016 -0700
@@ -367,3 +367,4 @@
346be2df0f5b31d423807f53a719d1b9a67f3354 jdk-9+122
405d811c0d7b9b48ff718ae6c240b732f098c028 jdk-9+123
f80c841ae2545eaf9acd2724bccc305d98cefbe2 jdk-9+124
+9aa7d40f3a453f51e47f4c1b19eff5740a74a9f8 jdk-9+125
--- a/common/autoconf/boot-jdk.m4 Fri Jul 01 12:32:21 2016 +0200
+++ b/common/autoconf/boot-jdk.m4 Fri Jul 01 16:55:44 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)
--- a/common/autoconf/bootcycle-spec.gmk.in Fri Jul 01 12:32:21 2016 +0200
+++ b/common/autoconf/bootcycle-spec.gmk.in Fri Jul 01 16:55:44 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@
--- a/common/autoconf/generated-configure.sh Fri Jul 01 12:32:21 2016 +0200
+++ b/common/autoconf/generated-configure.sh Fri Jul 01 16:55:44 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=1466007828
+DATE_WHEN_GENERATED=1467223237
###############################################################################
#
@@ -36621,7 +36622,6 @@
# Setup the assembler (AS)
#
if test "x$OPENJDK_TARGET_OS" = xsolaris; then
- # FIXME: should this really be solaris, or solstudio?
# Publish this variable in the help.
@@ -37105,6 +37105,9 @@
fi
fi
+ if test "x$AS" = x; then
+ as_fn_error $? "Solaris assembler (as) is required. Please install via \"pkg install pkg:/developer/assembler\"." "$LINENO" 5
+ fi
else
# FIXME: is this correct for microsoft?
AS="$CC -c"
@@ -65120,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
@@ -65177,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"
--- a/common/autoconf/spec.gmk.in Fri Jul 01 12:32:21 2016 +0200
+++ b/common/autoconf/spec.gmk.in Fri Jul 01 16:55:44 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
--- a/common/autoconf/toolchain.m4 Fri Jul 01 12:32:21 2016 +0200
+++ b/common/autoconf/toolchain.m4 Fri Jul 01 16:55:44 2016 -0700
@@ -597,9 +597,11 @@
# Setup the assembler (AS)
#
if test "x$OPENJDK_TARGET_OS" = xsolaris; then
- # FIXME: should this really be solaris, or solstudio?
BASIC_PATH_PROGS(AS, as)
BASIC_FIXUP_EXECUTABLE(AS)
+ if test "x$AS" = x; then
+ AC_MSG_ERROR([Solaris assembler (as) is required. Please install via "pkg install pkg:/developer/assembler".])
+ fi
else
# FIXME: is this correct for microsoft?
AS="$CC -c"
--- a/common/bin/compare.sh Fri Jul 01 12:32:21 2016 +0200
+++ b/common/bin/compare.sh Fri Jul 01 16:55:44 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
--- a/corba/.hgtags Fri Jul 01 12:32:21 2016 +0200
+++ b/corba/.hgtags Fri Jul 01 16:55:44 2016 -0700
@@ -366,3 +366,5 @@
9a5fc5a27560ac272c1341f8f3838338fba49059 jdk-9+121
a39131aafc51a6fd8836e6ebe1b04458702ce7d6 jdk-9+122
e33a34cc551907617d8129c4faaf1a5a7e61d21c jdk-9+123
+45121d5afb9d5bfadab75378572ad96832e0809e jdk-9+124
+1d48e67d1b91eb9f72e49e69a4021edb85e357fc jdk-9+125
--- a/corba/src/java.corba/share/classes/com/sun/corba/se/impl/io/IIOPInputStream.java Fri Jul 01 12:32:21 2016 +0200
+++ b/corba/src/java.corba/share/classes/com/sun/corba/se/impl/io/IIOPInputStream.java Fri Jul 01 16:55:44 2016 -0700
@@ -2230,7 +2230,7 @@
* REVISIT -- This code doesn't do what the comment says to when
* getField() is null!
*/
- private void inputClassFields(Object o, Class cl,
+ private void inputClassFields(Object o, Class<?> cl,
ObjectStreamField[] fields,
com.sun.org.omg.SendingContext.CodeBase sender)
throws InvalidClassException, StreamCorruptedException,
@@ -2239,6 +2239,8 @@
int primFields = fields.length - currentClassDesc.objFields;
+ // this will leave primitives in the inputstream
+ // should really consume and discard where necessary
if (o != null) {
for (int i = 0; i < primFields; ++i) {
inputPrimitiveField(o, cl, fields[i]);
@@ -2264,21 +2266,32 @@
}
try {
- Class fieldCl = fields[i].getClazz();
+ Class<?> fieldCl = fields[i].getClazz();
if ((objectValue != null)
&& (!fieldCl.isAssignableFrom(
objectValue.getClass()))) {
throw new IllegalArgumentException("Field mismatch");
}
- Field classField = null;
+ Field declaredClassField = null;
+ final String inputStreamFieldName = fields[i].getName();
try {
- classField = cl.getDeclaredField(fields[i].getName());
- } catch (NoSuchFieldException nsfEx) {
- throw new IllegalArgumentException(nsfEx);
+ declaredClassField = getDeclaredField( cl, inputStreamFieldName);
+ } catch (PrivilegedActionException paEx) {
+ throw new IllegalArgumentException(
+ (NoSuchFieldException) paEx.getException());
} catch (SecurityException secEx) {
- throw new IllegalArgumentException(secEx.getCause());
+ throw new IllegalArgumentException(secEx);
+ } catch (NullPointerException npEx) {
+ continue;
+ } catch (NoSuchFieldException e) {
+ continue;
}
- Class<?> declaredFieldClass = classField.getType();
+
+ if (declaredClassField == null) {
+ continue;
+ }
+
+ Class<?> declaredFieldClass = declaredClassField.getType();
// check input field type is a declared field type
// input field is a subclass of the declared field
@@ -2291,15 +2304,24 @@
}
bridge.putObject( o, fields[i].getFieldID(), objectValue ) ;
// reflective code: fields[i].getField().set( o, objectValue ) ;
- } catch (IllegalArgumentException e) {
- ClassCastException exc = new ClassCastException("Assigning instance of class " +
- objectValue.getClass().getName() +
- " to field " +
- currentClassDesc.getName() +
- '#' +
- fields[i].getField().getName());
- exc.initCause( e ) ;
- throw exc ;
+ } catch (IllegalArgumentException iaEx) {
+ String objectValueClassName = "null";
+ String currentClassDescClassName = "null";
+ String fieldName = "null";
+ if (objectValue != null) {
+ objectValueClassName = objectValue.getClass().getName();
+ }
+ if (currentClassDesc != null) {
+ currentClassDescClassName = currentClassDesc.getName();
+ }
+ if (fields[i] != null && fields[i].getField() != null) {
+ fieldName = fields[i].getField().getName();
+ }
+ ClassCastException ccEx = new ClassCastException(
+ "Assigning instance of class " + objectValueClassName
+ + " to field " + currentClassDescClassName + '#' + fieldName);
+ ccEx.initCause( iaEx ) ;
+ throw ccEx ;
}
} // end : for loop
}
@@ -2592,12 +2614,11 @@
throw cce ;
}
}
-
}
- private static void setObjectField(Object o, Class c, String fieldName, Object v) {
+ private static void setObjectField(Object o, Class<?> c, String fieldName, Object v) {
try {
- Field fld = c.getDeclaredField( fieldName ) ;
+ Field fld = getDeclaredField( c, fieldName ) ;
Class fieldCl = fld.getType();
if(v != null && !fieldCl.isInstance(v)) {
throw new Exception();
@@ -2617,10 +2638,10 @@
}
}
- private static void setBooleanField(Object o, Class c, String fieldName, boolean v)
+ private static void setBooleanField(Object o, Class<?> c, String fieldName, boolean v)
{
try {
- Field fld = c.getDeclaredField( fieldName ) ;
+ Field fld = getDeclaredField( c, fieldName ) ;
if ((fld != null) && (fld.getType() == Boolean.TYPE)) {
long key = bridge.objectFieldOffset( fld ) ;
bridge.putBoolean( o, key, v ) ;
@@ -2640,10 +2661,10 @@
}
}
- private static void setByteField(Object o, Class c, String fieldName, byte v)
+ private static void setByteField(Object o, Class<?> c, String fieldName, byte v)
{
try {
- Field fld = c.getDeclaredField( fieldName ) ;
+ Field fld = getDeclaredField( c, fieldName ) ;
if ((fld != null) && (fld.getType() == Byte.TYPE)) {
long key = bridge.objectFieldOffset( fld ) ;
bridge.putByte( o, key, v ) ;
@@ -2663,10 +2684,10 @@
}
}
- private static void setCharField(Object o, Class c, String fieldName, char v)
+ private static void setCharField(Object o, Class<?> c, String fieldName, char v)
{
try {
- Field fld = c.getDeclaredField( fieldName ) ;
+ Field fld = getDeclaredField( c, fieldName ) ;
if ((fld != null) && (fld.getType() == Character.TYPE)) {
long key = bridge.objectFieldOffset( fld ) ;
bridge.putChar( o, key, v ) ;
@@ -2686,10 +2707,10 @@
}
}
- private static void setShortField(Object o, Class c, String fieldName, short v)
+ private static void setShortField(Object o, Class<?> c, String fieldName, short v)
{
try {
- Field fld = c.getDeclaredField( fieldName ) ;
+ Field fld = getDeclaredField( c, fieldName ) ;
if ((fld != null) && (fld.getType() == Short.TYPE)) {
long key = bridge.objectFieldOffset( fld ) ;
bridge.putShort( o, key, v ) ;
@@ -2709,10 +2730,10 @@
}
}
- private static void setIntField(Object o, Class c, String fieldName, int v)
+ private static void setIntField(Object o, Class<?> c, String fieldName, int v)
{
try {
- Field fld = c.getDeclaredField( fieldName ) ;
+ Field fld = getDeclaredField( c, fieldName ) ;
if ((fld != null) && (fld.getType() == Integer.TYPE)) {
long key = bridge.objectFieldOffset( fld ) ;
bridge.putInt( o, key, v ) ;
@@ -2732,10 +2753,10 @@
}
}
- private static void setLongField(Object o, Class c, String fieldName, long v)
+ private static void setLongField(Object o, Class<?> c, String fieldName, long v)
{
try {
- Field fld = c.getDeclaredField( fieldName ) ;
+ Field fld = getDeclaredField( c, fieldName ) ;
if ((fld != null) && (fld.getType() == Long.TYPE)) {
long key = bridge.objectFieldOffset( fld ) ;
bridge.putLong( o, key, v ) ;
@@ -2755,10 +2776,10 @@
}
}
- private static void setFloatField(Object o, Class c, String fieldName, float v)
+ private static void setFloatField(Object o, Class<?> c, String fieldName, float v)
{
try {
- Field fld = c.getDeclaredField( fieldName ) ;
+ Field fld = getDeclaredField( c, fieldName ) ;
if ((fld != null) && (fld.getType() == Float.TYPE)) {
long key = bridge.objectFieldOffset( fld ) ;
bridge.putFloat( o, key, v ) ;
@@ -2778,10 +2799,10 @@
}
}
- private static void setDoubleField(Object o, Class c, String fieldName, double v)
+ private static void setDoubleField(Object o, Class<?> c, String fieldName, double v)
{
try {
- Field fld = c.getDeclaredField( fieldName ) ;
+ Field fld = getDeclaredField( c, fieldName ) ;
if ((fld != null) && (fld.getType() == Double.TYPE)) {
long key = bridge.objectFieldOffset( fld ) ;
bridge.putDouble( o, key, v ) ;
@@ -2801,6 +2822,22 @@
}
}
+
+ private static Field getDeclaredField(final Class<?> c,
+ final String fieldName)
+ throws PrivilegedActionException, NoSuchFieldException, SecurityException {
+ if (System.getSecurityManager() == null) {
+ return c.getDeclaredField(fieldName);
+ } else {
+ return AccessController
+ .doPrivileged(new PrivilegedExceptionAction<Field>() {
+ public Field run() throws NoSuchFieldException {
+ return c.getDeclaredField(fieldName);
+ }
+ });
+ }
+ }
+
/**
* This class maintains a map of stream position to
* an Object currently being deserialized. It is used
@@ -2811,12 +2848,12 @@
*/
static class ActiveRecursionManager
{
- private Map offsetToObjectMap;
+ private Map<Integer, Object> offsetToObjectMap;
public ActiveRecursionManager() {
// A hash map is unsynchronized and allows
// null values
- offsetToObjectMap = new HashMap();
+ offsetToObjectMap = new HashMap<>();
}
// Called right after allocating a new object.
--- a/hotspot/.hgtags Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/.hgtags Fri Jul 01 16:55:44 2016 -0700
@@ -526,3 +526,5 @@
7e293105dbb0789a468655f81320c891f491f371 jdk-9+121
af6b4ad908e732d23021f12e8322b204433d5cf6 jdk-9+122
75f81e1fecfb444f34f357295fe06af60e2762d9 jdk-9+123
+479631362b4930be985245ea063d87d821a472eb jdk-9+124
+bb640b49741af3f57f9994129934c46fc173219f jdk-9+125
--- a/hotspot/make/lib/JvmOverrideFiles.gmk Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/make/lib/JvmOverrideFiles.gmk Fri Jul 01 16:55:44 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
--- a/hotspot/src/cpu/aarch64/vm/aarch64.ad Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/cpu/aarch64/vm/aarch64.ad Fri Jul 01 16:55:44 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);
%}
%}
--- a/hotspot/src/cpu/aarch64/vm/c1_Runtime1_aarch64.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/cpu/aarch64/vm/c1_Runtime1_aarch64.cpp Fri Jul 01 16:55:44 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);
--- a/hotspot/src/cpu/aarch64/vm/interp_masm_aarch64.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/cpu/aarch64/vm/interp_masm_aarch64.cpp Fri Jul 01 16:55:44 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);
--- a/hotspot/src/cpu/aarch64/vm/stubGenerator_aarch64.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/cpu/aarch64/vm/stubGenerator_aarch64.cpp Fri Jul 01 16:55:44 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
--- a/hotspot/src/cpu/aarch64/vm/templateInterpreterGenerator_aarch64.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/cpu/aarch64/vm/templateInterpreterGenerator_aarch64.cpp Fri Jul 01 16:55:44 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
{
--- a/hotspot/src/cpu/aarch64/vm/templateTable_aarch64.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/cpu/aarch64/vm/templateTable_aarch64.cpp Fri Jul 01 16:55:44 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);
--- a/hotspot/src/cpu/ppc/vm/assembler_ppc.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/cpu/ppc/vm/assembler_ppc.hpp Fri Jul 01 16:55:44 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);
--- a/hotspot/src/cpu/ppc/vm/assembler_ppc.inline.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/cpu/ppc/vm/assembler_ppc.inline.hpp Fri Jul 01 16:55:44 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)); }
--- a/hotspot/src/cpu/ppc/vm/register_ppc.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/cpu/ppc/vm/register_ppc.cpp Fri Jul 01 16:55:44 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";
+}
+
--- a/hotspot/src/cpu/ppc/vm/register_ppc.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/cpu/ppc/vm/register_ppc.hpp Fri Jul 01 16:55:44 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;
--- a/hotspot/src/cpu/ppc/vm/stubGenerator_ppc.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/cpu/ppc/vm/stubGenerator_ppc.cpp Fri Jul 01 16:55:44 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
--- a/hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp Fri Jul 01 16:55:44 2016 -0700
@@ -38,7 +38,7 @@
# include <sys/sysinfo.h>
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)());
}
--- a/hotspot/src/cpu/ppc/vm/vm_version_ppc.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/cpu/ppc/vm/vm_version_ppc.hpp Fri Jul 01 16:55:44 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
--- a/hotspot/src/cpu/x86/vm/c1_LinearScan_x86.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/cpu/x86/vm/c1_LinearScan_x86.cpp Fri Jul 01 16:55:44 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");
--- a/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp Fri Jul 01 16:55:44 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);
--- a/hotspot/src/cpu/x86/vm/vm_version_x86.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/cpu/x86/vm/vm_version_x86.cpp Fri Jul 01 16:55:44 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);
}
--- a/hotspot/src/cpu/x86/vm/x86.ad Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/cpu/x86/vm/x86.ad Fri Jul 01 16:55:44 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:
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/memory/Universe.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/memory/Universe.java Fri Jul 01 16:55:44 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() {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/memory/UniverseExt.java Fri Jul 01 16:55:44 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) { }
+}
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCIRuntime.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCIRuntime.java Fri Jul 01 16:55:44 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<Class<? extends Architecture>, JVMCIBackend> backends = new HashMap<>();
- private final Iterable<HotSpotVMEventListener> vmEventListeners;
+ private volatile List<HotSpotVMEventListener> vmEventListeners;
+
+ private Iterable<HotSpotVMEventListener> getVmEventListeners() {
+ if (vmEventListeners == null) {
+ synchronized (this) {
+ if (vmEventListeners == null) {
+ List<HotSpotVMEventListener> 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);
}
}
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotMemoryAccessProviderImpl.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotMemoryAccessProviderImpl.java Fri Jul 01 16:55:44 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");
}
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.meta/src/jdk/vm/ci/meta/MemoryAccessProvider.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.meta/src/jdk/vm/ci/meta/MemoryAccessProvider.java Fri Jul 01 16:55:44 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
--- a/hotspot/src/os/aix/vm/globals_aix.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/os/aix/vm/globals_aix.hpp Fri Jul 01 16:55:44 2016 -0700
@@ -35,6 +35,7 @@
product, \
product_pd, \
diagnostic, \
+ diagnostic_pd, \
notproduct, \
range, \
constraint, \
--- a/hotspot/src/os/aix/vm/libo4.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/os/aix/vm/libo4.cpp Fri Jul 01 16:55:44 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;
+}
--- a/hotspot/src/os/aix/vm/libo4.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/os/aix/vm/libo4.hpp Fri Jul 01 16:55:44 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
-
--- a/hotspot/src/os/aix/vm/libperfstat_aix.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/os/aix/vm/libperfstat_aix.cpp Fri Jul 01 16:55:44 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;
+ }
}
}
}
--- a/hotspot/src/os/aix/vm/libperfstat_aix.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/os/aix/vm/libperfstat_aix.hpp Fri Jul 01 16:55:44 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<<SBITS) times the average number of runnables processes during the last 1, 5 and 15 minutes. */
+ /* To calculate the load average, divide the numbers by (1<<SBITS). SBITS is defined in <sys/proc.h>. */
+ 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 {
--- a/hotspot/src/os/bsd/vm/globals_bsd.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/os/bsd/vm/globals_bsd.hpp Fri Jul 01 16:55:44 2016 -0700
@@ -33,6 +33,7 @@
product, \
product_pd, \
diagnostic, \
+ diagnostic_pd, \
notproduct, \
range, \
constraint, \
--- a/hotspot/src/os/linux/vm/globals_linux.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/os/linux/vm/globals_linux.hpp Fri Jul 01 16:55:44 2016 -0700
@@ -33,6 +33,7 @@
product, \
product_pd, \
diagnostic, \
+ diagnostic_pd, \
notproduct, \
range, \
constraint, \
--- a/hotspot/src/os/solaris/vm/globals_solaris.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/os/solaris/vm/globals_solaris.hpp Fri Jul 01 16:55:44 2016 -0700
@@ -33,6 +33,7 @@
product, \
product_pd, \
diagnostic, \
+ diagnostic_pd, \
notproduct, \
range, \
constraint, \
--- a/hotspot/src/os/windows/vm/globals_windows.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/os/windows/vm/globals_windows.hpp Fri Jul 01 16:55:44 2016 -0700
@@ -33,6 +33,7 @@
product, \
product_pd, \
diagnostic, \
+ diagnostic_pd, \
notproduct, \
range, \
constraint, \
--- a/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp Fri Jul 01 16:55:44 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;
}
}
-
-
}
--- a/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp Fri Jul 01 16:55:44 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);
}
--- a/hotspot/src/share/vm/c1/c1_IR.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/c1/c1_IR.cpp Fri Jul 01 16:55:44 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);
--- a/hotspot/src/share/vm/c1/c1_Instruction.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/c1/c1_Instruction.hpp Fri Jul 01 16:55:44 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()));
--- a/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp Fri Jul 01 16:55:44 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);
--- a/hotspot/src/share/vm/c1/c1_LinearScan.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/c1/c1_LinearScan.cpp Fri Jul 01 16:55:44 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--) {
--- a/hotspot/src/share/vm/c1/c1_ValueSet.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/c1/c1_ValueSet.hpp Fri Jul 01 16:55:44 2016 -0700
@@ -53,7 +53,6 @@
};
inline ValueSet::ValueSet() : _map(Instruction::number_of_instructions()) {
- _map.clear();
}
--- a/hotspot/src/share/vm/c1/c1_globals.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/c1/c1_globals.cpp Fri Jul 01 16:55:44 2016 -0700
@@ -30,6 +30,7 @@
MATERIALIZE_PRODUCT_FLAG, \
MATERIALIZE_PD_PRODUCT_FLAG, \
MATERIALIZE_DIAGNOSTIC_FLAG, \
+ MATERIALIZE_PD_DIAGNOSTIC_FLAG, \
MATERIALIZE_NOTPRODUCT_FLAG, \
IGNORE_RANGE, \
IGNORE_CONSTRAINT, \
--- a/hotspot/src/share/vm/c1/c1_globals.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/c1/c1_globals.hpp Fri Jul 01 16:55:44 2016 -0700
@@ -65,6 +65,7 @@
product, \
product_pd, \
diagnostic, \
+ diagnostic_pd, \
notproduct, \
range, \
constraint, \
@@ -356,6 +357,7 @@
DECLARE_PRODUCT_FLAG, \
DECLARE_PD_PRODUCT_FLAG, \
DECLARE_DIAGNOSTIC_FLAG, \
+ DECLARE_PD_DIAGNOSTIC_FLAG, \
DECLARE_NOTPRODUCT_FLAG, \
IGNORE_RANGE, \
IGNORE_CONSTRAINT, \
--- a/hotspot/src/share/vm/ci/ciMethod.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/ci/ciMethod.cpp Fri Jul 01 16:55:44 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);
--- a/hotspot/src/share/vm/classfile/classFileParser.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/classfile/classFileParser.cpp Fri Jul 01 16:55:44 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 <init>
// or <clinit>. Note that method names may not be <init> or <clinit> 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);
--- a/hotspot/src/share/vm/classfile/classLoader.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/classfile/classLoader.cpp Fri Jul 01 16:55:44 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();
--- a/hotspot/src/share/vm/classfile/classLoader.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/classfile/classLoader.hpp Fri Jul 01 16:55:44 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); }
--- a/hotspot/src/share/vm/classfile/classLoaderExt.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/classfile/classLoaderExt.hpp Fri Jul 01 16:55:44 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
--- a/hotspot/src/share/vm/classfile/javaClasses.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/classfile/javaClasses.cpp Fri Jul 01 16:55:44 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);
--- a/hotspot/src/share/vm/classfile/javaClasses.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/classfile/javaClasses.hpp Fri Jul 01 16:55:44 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);
};
--- a/hotspot/src/share/vm/classfile/moduleEntry.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/classfile/moduleEntry.cpp Fri Jul 01 16:55:44 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<Symbol*, mtModule>::add_entry(index, (HashtableEntry<Symbol*, mtModule>*)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();
--- a/hotspot/src/share/vm/classfile/modules.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/classfile/modules.cpp Fri Jul 01 16:55:44 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);
}
}
--- a/hotspot/src/share/vm/classfile/packageEntry.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/classfile/packageEntry.cpp Fri Jul 01 16:55:44 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<Symbol*, mtModule>::add_entry(index, (HashtableEntry<Symbol*, mtModule>*)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;
--- a/hotspot/src/share/vm/classfile/packageEntry.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/classfile/packageEntry.hpp Fri Jul 01 16:55:44 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;
--- a/hotspot/src/share/vm/classfile/systemDictionary.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/classfile/systemDictionary.cpp Fri Jul 01 16:55:44 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,
--- a/hotspot/src/share/vm/classfile/systemDictionaryShared.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/classfile/systemDictionaryShared.hpp Fri Jul 01 16:55:44 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,
--- a/hotspot/src/share/vm/compiler/methodLiveness.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/compiler/methodLiveness.cpp Fri Jul 01 16:55:44 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<MethodLiveness::BasicBlock*>(analyzer->arena(), 5, 0, NULL);
_exception_predecessors =
new (analyzer->arena()) GrowableArray<MethodLiveness::BasicBlock*>(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);
--- a/hotspot/src/share/vm/gc/cms/concurrentMarkSweepGeneration.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/gc/cms/concurrentMarkSweepGeneration.cpp Fri Jul 01 16:55:44 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();
--- a/hotspot/src/share/vm/gc/g1/g1CollectedHeap.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/gc/g1/g1CollectedHeap.cpp Fri Jul 01 16:55:44 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);
}
--- a/hotspot/src/share/vm/gc/g1/g1CollectedHeap.inline.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/gc/g1/g1CollectedHeap.inline.hpp Fri Jul 01 16:55:44 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.
--- a/hotspot/src/share/vm/gc/g1/g1StringDedupStat.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/gc/g1/g1StringDedupStat.cpp Fri Jul 01 16:55:44 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),
--- a/hotspot/src/share/vm/gc/g1/g1_globals.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/gc/g1/g1_globals.cpp Fri Jul 01 16:55:44 2016 -0700
@@ -30,6 +30,7 @@
MATERIALIZE_PRODUCT_FLAG, \
MATERIALIZE_PD_PRODUCT_FLAG, \
MATERIALIZE_DIAGNOSTIC_FLAG, \
+ MATERIALIZE_PD_DIAGNOSTIC_FLAG, \
MATERIALIZE_EXPERIMENTAL_FLAG, \
MATERIALIZE_NOTPRODUCT_FLAG, \
MATERIALIZE_MANAGEABLE_FLAG, \
--- a/hotspot/src/share/vm/gc/g1/g1_globals.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/gc/g1/g1_globals.hpp Fri Jul 01 16:55:44 2016 -0700
@@ -36,6 +36,7 @@
product, \
product_pd, \
diagnostic, \
+ diagnostic_pd, \
experimental, \
notproduct, \
manageable, \
@@ -323,6 +324,7 @@
DECLARE_PRODUCT_FLAG, \
DECLARE_PD_PRODUCT_FLAG, \
DECLARE_DIAGNOSTIC_FLAG, \
+ DECLARE_PD_DIAGNOSTIC_FLAG, \
DECLARE_EXPERIMENTAL_FLAG, \
DECLARE_NOTPRODUCT_FLAG, \
DECLARE_MANAGEABLE_FLAG, \
--- a/hotspot/src/share/vm/gc/parallel/psPromotionManager.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/gc/parallel/psPromotionManager.cpp Fri Jul 01 16:55:44 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) {
--- a/hotspot/src/share/vm/gc/serial/defNewGeneration.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/gc/serial/defNewGeneration.cpp Fri Jul 01 16:55:44 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) {
--- a/hotspot/src/share/vm/gc/shared/collectedHeap.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/gc/shared/collectedHeap.cpp Fri Jul 01 16:55:44 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
--- a/hotspot/src/share/vm/gc/shared/preservedMarks.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/gc/shared/preservedMarks.cpp Fri Jul 01 16:55:44 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);
+ }
+}
--- a/hotspot/src/share/vm/gc/shared/preservedMarks.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/gc/shared/preservedMarks.hpp Fri Jul 01 16:55:44 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<mtGC> {
private:
// true -> _stacks will be allocated in the C heap
@@ -91,13 +110,6 @@
// or == NULL if they have not.
Padded<PreservedMarks>* _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 <class E>
- 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();
--- a/hotspot/src/share/vm/gc/shared/preservedMarks.inline.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/gc/shared/preservedMarks.inline.hpp Fri Jul 01 16:55:44 2016 -0700
@@ -49,8 +49,7 @@
obj->init_mark();
}
-template <class E>
-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,
--- a/hotspot/src/share/vm/gc/shared/threadLocalAllocBuffer.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/gc/shared/threadLocalAllocBuffer.hpp Fri Jul 01 16:55:44 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; }
--- a/hotspot/src/share/vm/gc/shared/workgroup.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/gc/shared/workgroup.cpp Fri Jul 01 16:55:44 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);
}
--- a/hotspot/src/share/vm/gc/shared/workgroup.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/gc/shared/workgroup.hpp Fri Jul 01 16:55:44 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:
--- a/hotspot/src/share/vm/jvmci/jvmciRuntime.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/jvmci/jvmciRuntime.hpp Fri Jul 01 16:55:44 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
--- a/hotspot/src/share/vm/jvmci/jvmci_globals.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/jvmci/jvmci_globals.cpp Fri Jul 01 16:55:44 2016 -0700
@@ -32,6 +32,7 @@
MATERIALIZE_PRODUCT_FLAG, \
MATERIALIZE_PD_PRODUCT_FLAG, \
MATERIALIZE_DIAGNOSTIC_FLAG, \
+ MATERIALIZE_PD_DIAGNOSTIC_FLAG, \
MATERIALIZE_EXPERIMENTAL_FLAG, \
MATERIALIZE_NOTPRODUCT_FLAG,
IGNORE_RANGE, \
@@ -89,6 +90,7 @@
JVMCI_IGNORE_FLAG_FOUR_PARAM, \
JVMCI_IGNORE_FLAG_THREE_PARAM, \
JVMCI_DIAGNOSTIC_FLAG_VALUE_CHANGED_CHECK_CODE, \
+ JVMCI_IGNORE_FLAG_THREE_PARAM, \
JVMCI_IGNORE_FLAG_FOUR_PARAM, \
JVMCI_IGNORE_FLAG_FOUR_PARAM, \
IGNORE_RANGE, \
@@ -104,6 +106,7 @@
JVMCI_IGNORE_FLAG_FOUR_PARAM, \
JVMCI_IGNORE_FLAG_THREE_PARAM, \
JVMCI_IGNORE_FLAG_FOUR_PARAM, \
+ JVMCI_IGNORE_FLAG_THREE_PARAM, \
JVMCI_EXPERIMENTAL_FLAG_VALUE_CHANGED_CHECK_CODE, \
JVMCI_IGNORE_FLAG_FOUR_PARAM, \
IGNORE_RANGE, \
@@ -129,6 +132,7 @@
JVMCI_PRODUCT_FLAG_VALUE_CHANGED_CHECK_CODE, \
JVMCI_PD_PRODUCT_FLAG_VALUE_CHANGED_CHECK_CODE, \
JVMCI_IGNORE_FLAG_FOUR_PARAM, \
+ JVMCI_IGNORE_FLAG_THREE_PARAM, \
JVMCI_IGNORE_FLAG_FOUR_PARAM, \
JVMCI_NOTPRODUCT_FLAG_VALUE_CHANGED_CHECK_CODE, \
IGNORE_RANGE, \
@@ -168,6 +172,7 @@
JVMCI_IGNORE_FLAG_FOUR_PARAM, \
JVMCI_IGNORE_FLAG_THREE_PARAM, \
JVMCI_DIAGNOSTIC_FLAG_CHECK_PRINT_ERR_MSG_CODE, \
+ JVMCI_IGNORE_FLAG_THREE_PARAM, \
JVMCI_IGNORE_FLAG_FOUR_PARAM, \
JVMCI_IGNORE_FLAG_FOUR_PARAM, \
IGNORE_RANGE, \
@@ -181,6 +186,7 @@
JVMCI_IGNORE_FLAG_FOUR_PARAM, \
JVMCI_IGNORE_FLAG_THREE_PARAM, \
JVMCI_IGNORE_FLAG_FOUR_PARAM, \
+ JVMCI_IGNORE_FLAG_THREE_PARAM, \
JVMCI_EXPERIMENTAL_FLAG_CHECK_PRINT_ERR_MSG_CODE, \
JVMCI_IGNORE_FLAG_FOUR_PARAM, \
IGNORE_RANGE, \
@@ -206,6 +212,7 @@
JVMCI_PRODUCT_FLAG_CHECK_PRINT_ERR_MSG_CODE, \
JVMCI_PD_PRODUCT_FLAG_CHECK_PRINT_ERR_MSG_CODE, \
JVMCI_IGNORE_FLAG_FOUR_PARAM, \
+ JVMCI_IGNORE_FLAG_THREE_PARAM, \
JVMCI_IGNORE_FLAG_FOUR_PARAM, \
JVMCI_NOTPRODUCT_FLAG_CHECK_PRINT_ERR_MSG_CODE, \
IGNORE_RANGE, \
--- a/hotspot/src/share/vm/jvmci/jvmci_globals.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/jvmci/jvmci_globals.hpp Fri Jul 01 16:55:44 2016 -0700
@@ -37,6 +37,7 @@
product, \
product_pd, \
diagnostic, \
+ diagnostic_pd, \
experimental, \
notproduct, \
range, \
@@ -102,6 +103,7 @@
DECLARE_PRODUCT_FLAG, \
DECLARE_PD_PRODUCT_FLAG, \
DECLARE_DIAGNOSTIC_FLAG, \
+ DECLARE_PD_DIAGNOSTIC_FLAG, \
DECLARE_EXPERIMENTAL_FLAG, \
DECLARE_NOTPRODUCT_FLAG, \
IGNORE_RANGE, \
--- a/hotspot/src/share/vm/logging/logConfiguration.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/logging/logConfiguration.cpp Fri Jul 01 16:55:44 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() {
--- a/hotspot/src/share/vm/memory/metaspace.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/memory/metaspace.cpp Fri Jul 01 16:55:44 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
--- a/hotspot/src/share/vm/oops/instanceKlass.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/oops/instanceKlass.cpp Fri Jul 01 16:55:44 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());
}
--- a/hotspot/src/share/vm/oops/instanceKlass.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/oops/instanceKlass.hpp Fri Jul 01 16:55:44 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
--- a/hotspot/src/share/vm/oops/method.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/oops/method.hpp Fri Jul 01 16:55:44 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(); }
--- a/hotspot/src/share/vm/opto/arraycopynode.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/opto/arraycopynode.cpp Fri Jul 01 16:55:44 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);
}
}
--- a/hotspot/src/share/vm/opto/arraycopynode.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/opto/arraycopynode.hpp Fri Jul 01 16:55:44 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
--- a/hotspot/src/share/vm/opto/c2_globals.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/opto/c2_globals.cpp Fri Jul 01 16:55:44 2016 -0700
@@ -30,6 +30,7 @@
MATERIALIZE_PRODUCT_FLAG, \
MATERIALIZE_PD_PRODUCT_FLAG, \
MATERIALIZE_DIAGNOSTIC_FLAG, \
+ MATERIALIZE_PD_DIAGNOSTIC_FLAG, \
MATERIALIZE_EXPERIMENTAL_FLAG, \
MATERIALIZE_NOTPRODUCT_FLAG, \
IGNORE_RANGE, \
--- a/hotspot/src/share/vm/opto/c2_globals.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/opto/c2_globals.hpp Fri Jul 01 16:55:44 2016 -0700
@@ -66,6 +66,7 @@
product, \
product_pd, \
diagnostic, \
+ diagnostic_pd, \
experimental, \
notproduct, \
range, \
@@ -203,7 +204,7 @@
"Map number of unrolls for main loop via " \
"Superword Level Parallelism analysis") \
\
- product_pd(bool, PostLoopMultiversioning, \
+ diagnostic_pd(bool, PostLoopMultiversioning, \
"Multi versioned post loops to eliminate range checks") \
\
notproduct(bool, TraceSuperWordLoopUnrollAnalysis, false, \
@@ -764,6 +765,7 @@
DECLARE_PRODUCT_FLAG, \
DECLARE_PD_PRODUCT_FLAG, \
DECLARE_DIAGNOSTIC_FLAG, \
+ DECLARE_PD_DIAGNOSTIC_FLAG, \
DECLARE_EXPERIMENTAL_FLAG, \
DECLARE_NOTPRODUCT_FLAG, \
IGNORE_RANGE, \
--- a/hotspot/src/share/vm/opto/graphKit.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/opto/graphKit.cpp Fri Jul 01 16:55:44 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.
--- a/hotspot/src/share/vm/opto/macro.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/opto/macro.cpp Fri Jul 01 16:55:44 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);
--- a/hotspot/src/share/vm/opto/memnode.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/opto/memnode.cpp Fri Jul 01 16:55:44 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);
--- a/hotspot/src/share/vm/opto/parse.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/opto/parse.hpp Fri Jul 01 16:55:44 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);
--- a/hotspot/src/share/vm/opto/parse1.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/opto/parse1.cpp Fri Jul 01 16:55:44 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");
--- a/hotspot/src/share/vm/prims/jvm.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/prims/jvm.cpp Fri Jul 01 16:55:44 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);
}
}
--- a/hotspot/src/share/vm/prims/jvmtiEnv.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/prims/jvmtiEnv.cpp Fri Jul 01 16:55:44 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 */
--- a/hotspot/src/share/vm/prims/methodHandles.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/prims/methodHandles.cpp Fri Jul 01 16:55:44 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
--- a/hotspot/src/share/vm/prims/methodHandles.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/prims/methodHandles.hpp Fri Jul 01 16:55:44 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:
--- a/hotspot/src/share/vm/prims/unsafe.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/prims/unsafe.cpp Fri Jul 01 16:55:44 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),
--- a/hotspot/src/share/vm/prims/whitebox.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/prims/whitebox.cpp Fri Jul 01 16:55:44 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 },
--- a/hotspot/src/share/vm/runtime/commandLineFlagConstraintList.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/runtime/commandLineFlagConstraintList.cpp Fri Jul 01 16:55:44 2016 -0700
@@ -211,6 +211,7 @@
#define EMIT_CONSTRAINT_MANAGEABLE_FLAG(type, name, value, doc) ); emit_constraint_##type(#name
#define EMIT_CONSTRAINT_PRODUCT_RW_FLAG(type, name, value, doc) ); emit_constraint_##type(#name
#define EMIT_CONSTRAINT_PD_PRODUCT_FLAG(type, name, doc) ); emit_constraint_##type(#name
+#define EMIT_CONSTRAINT_PD_DIAGNOSTIC_FLAG(type, name, doc) ); emit_constraint_##type(#name
#define EMIT_CONSTRAINT_DEVELOPER_FLAG(type, name, value, doc) ); emit_constraint_##type(#name
#define EMIT_CONSTRAINT_PD_DEVELOPER_FLAG(type, name, doc) ); emit_constraint_##type(#name
#define EMIT_CONSTRAINT_NOTPRODUCT_FLAG(type, name, value, doc) ); emit_constraint_##type(#name
@@ -233,6 +234,7 @@
EMIT_CONSTRAINT_PRODUCT_FLAG,
EMIT_CONSTRAINT_PD_PRODUCT_FLAG,
EMIT_CONSTRAINT_DIAGNOSTIC_FLAG,
+ EMIT_CONSTRAINT_PD_DIAGNOSTIC_FLAG,
EMIT_CONSTRAINT_EXPERIMENTAL_FLAG,
EMIT_CONSTRAINT_NOTPRODUCT_FLAG,
EMIT_CONSTRAINT_MANAGEABLE_FLAG,
@@ -260,6 +262,7 @@
EMIT_CONSTRAINT_PRODUCT_FLAG,
EMIT_CONSTRAINT_PD_PRODUCT_FLAG,
EMIT_CONSTRAINT_DIAGNOSTIC_FLAG,
+ EMIT_CONSTRAINT_PD_DIAGNOSTIC_FLAG,
EMIT_CONSTRAINT_NOTPRODUCT_FLAG,
IGNORE_RANGE,
EMIT_CONSTRAINT_CHECK,
@@ -272,6 +275,7 @@
EMIT_CONSTRAINT_PRODUCT_FLAG,
EMIT_CONSTRAINT_PD_PRODUCT_FLAG,
EMIT_CONSTRAINT_DIAGNOSTIC_FLAG,
+ EMIT_CONSTRAINT_PD_DIAGNOSTIC_FLAG,
EMIT_CONSTRAINT_EXPERIMENTAL_FLAG,
EMIT_CONSTRAINT_NOTPRODUCT_FLAG,
IGNORE_RANGE,
@@ -285,6 +289,7 @@
EMIT_CONSTRAINT_PRODUCT_FLAG,
EMIT_CONSTRAINT_PD_PRODUCT_FLAG,
EMIT_CONSTRAINT_DIAGNOSTIC_FLAG,
+ EMIT_CONSTRAINT_PD_DIAGNOSTIC_FLAG,
EMIT_CONSTRAINT_EXPERIMENTAL_FLAG,
EMIT_CONSTRAINT_NOTPRODUCT_FLAG,
EMIT_CONSTRAINT_MANAGEABLE_FLAG,
--- a/hotspot/src/share/vm/runtime/commandLineFlagRangeList.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/runtime/commandLineFlagRangeList.cpp Fri Jul 01 16:55:44 2016 -0700
@@ -278,6 +278,7 @@
#define EMIT_RANGE_MANAGEABLE_FLAG(type, name, value, doc) ); emit_range_##type(#name
#define EMIT_RANGE_PRODUCT_RW_FLAG(type, name, value, doc) ); emit_range_##type(#name
#define EMIT_RANGE_PD_PRODUCT_FLAG(type, name, doc) ); emit_range_##type(#name
+#define EMIT_RANGE_PD_DIAGNOSTIC_FLAG(type, name, doc) ); emit_range_##type(#name
#define EMIT_RANGE_DEVELOPER_FLAG(type, name, value, doc) ); emit_range_##type(#name
#define EMIT_RANGE_PD_DEVELOPER_FLAG(type, name, doc) ); emit_range_##type(#name
#define EMIT_RANGE_NOTPRODUCT_FLAG(type, name, value, doc) ); emit_range_##type(#name
@@ -299,6 +300,7 @@
EMIT_RANGE_PRODUCT_FLAG,
EMIT_RANGE_PD_PRODUCT_FLAG,
EMIT_RANGE_DIAGNOSTIC_FLAG,
+ EMIT_RANGE_PD_DIAGNOSTIC_FLAG,
EMIT_RANGE_EXPERIMENTAL_FLAG,
EMIT_RANGE_NOTPRODUCT_FLAG,
EMIT_RANGE_MANAGEABLE_FLAG,
@@ -325,6 +327,7 @@
EMIT_RANGE_PRODUCT_FLAG,
EMIT_RANGE_PD_PRODUCT_FLAG,
EMIT_RANGE_DIAGNOSTIC_FLAG,
+ EMIT_RANGE_PD_DIAGNOSTIC_FLAG,
EMIT_RANGE_EXPERIMENTAL_FLAG,
EMIT_RANGE_NOTPRODUCT_FLAG,
EMIT_RANGE_CHECK,
@@ -338,6 +341,7 @@
EMIT_RANGE_PRODUCT_FLAG,
EMIT_RANGE_PD_PRODUCT_FLAG,
EMIT_RANGE_DIAGNOSTIC_FLAG,
+ EMIT_RANGE_PD_DIAGNOSTIC_FLAG,
EMIT_RANGE_NOTPRODUCT_FLAG,
EMIT_RANGE_CHECK,
IGNORE_CONSTRAINT,
@@ -350,6 +354,7 @@
EMIT_RANGE_PRODUCT_FLAG,
EMIT_RANGE_PD_PRODUCT_FLAG,
EMIT_RANGE_DIAGNOSTIC_FLAG,
+ EMIT_RANGE_PD_DIAGNOSTIC_FLAG,
EMIT_RANGE_EXPERIMENTAL_FLAG,
EMIT_RANGE_NOTPRODUCT_FLAG,
EMIT_RANGE_CHECK,
@@ -363,6 +368,7 @@
EMIT_RANGE_PRODUCT_FLAG,
EMIT_RANGE_PD_PRODUCT_FLAG,
EMIT_RANGE_DIAGNOSTIC_FLAG,
+ EMIT_RANGE_PD_DIAGNOSTIC_FLAG,
EMIT_RANGE_EXPERIMENTAL_FLAG,
EMIT_RANGE_NOTPRODUCT_FLAG,
EMIT_RANGE_MANAGEABLE_FLAG,
--- a/hotspot/src/share/vm/runtime/commandLineFlagWriteableList.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/runtime/commandLineFlagWriteableList.cpp Fri Jul 01 16:55:44 2016 -0700
@@ -108,6 +108,7 @@
#define EMIT_WRITEABLE_PD_PRODUCT_FLAG(type, name, doc) ); emit_writeable_##type(#name
#define EMIT_WRITEABLE_DEVELOPER_FLAG(type, name, value, doc) ); emit_writeable_##type(#name
#define EMIT_WRITEABLE_PD_DEVELOPER_FLAG(type, name, doc) ); emit_writeable_##type(#name
+#define EMIT_WRITEABLE_PD_DIAGNOSTIC_FLAG(type, name, doc) ); emit_writeable_##type(#name
#define EMIT_WRITEABLE_NOTPRODUCT_FLAG(type, name, value, doc) ); emit_writeable_##type(#name
#define EMIT_WRITEABLE_LP64_PRODUCT_FLAG(type, name, value, doc) ); emit_writeable_##type(#name
@@ -126,6 +127,7 @@
EMIT_WRITEABLE_PRODUCT_FLAG,
EMIT_WRITEABLE_PD_PRODUCT_FLAG,
EMIT_WRITEABLE_DIAGNOSTIC_FLAG,
+ EMIT_WRITEABLE_PD_DIAGNOSTIC_FLAG,
EMIT_WRITEABLE_EXPERIMENTAL_FLAG,
EMIT_WRITEABLE_NOTPRODUCT_FLAG,
EMIT_WRITEABLE_MANAGEABLE_FLAG,
@@ -152,6 +154,7 @@
EMIT_WRITEABLE_PRODUCT_FLAG,
EMIT_WRITEABLE_PD_PRODUCT_FLAG,
EMIT_WRITEABLE_DIAGNOSTIC_FLAG,
+ EMIT_WRITEABLE_PD_DIAGNOSTIC_FLAG,
EMIT_WRITEABLE_EXPERIMENTAL_FLAG,
EMIT_WRITEABLE_NOTPRODUCT_FLAG,
IGNORE_RANGE,
@@ -165,6 +168,7 @@
EMIT_WRITEABLE_PRODUCT_FLAG,
EMIT_WRITEABLE_PD_PRODUCT_FLAG,
EMIT_WRITEABLE_DIAGNOSTIC_FLAG,
+ EMIT_WRITEABLE_PD_DIAGNOSTIC_FLAG,
EMIT_WRITEABLE_NOTPRODUCT_FLAG,
IGNORE_RANGE,
IGNORE_CONSTRAINT,
@@ -177,6 +181,7 @@
EMIT_WRITEABLE_PRODUCT_FLAG,
EMIT_WRITEABLE_PD_PRODUCT_FLAG,
EMIT_WRITEABLE_DIAGNOSTIC_FLAG,
+ EMIT_WRITEABLE_PD_DIAGNOSTIC_FLAG,
EMIT_WRITEABLE_EXPERIMENTAL_FLAG,
EMIT_WRITEABLE_NOTPRODUCT_FLAG,
IGNORE_RANGE,
@@ -190,6 +195,7 @@
EMIT_WRITEABLE_PRODUCT_FLAG,
EMIT_WRITEABLE_PD_PRODUCT_FLAG,
EMIT_WRITEABLE_DIAGNOSTIC_FLAG,
+ EMIT_WRITEABLE_PD_DIAGNOSTIC_FLAG,
EMIT_WRITEABLE_EXPERIMENTAL_FLAG,
EMIT_WRITEABLE_NOTPRODUCT_FLAG,
EMIT_WRITEABLE_MANAGEABLE_FLAG,
--- a/hotspot/src/share/vm/runtime/deoptimization.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/runtime/deoptimization.cpp Fri Jul 01 16:55:44 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,
--- a/hotspot/src/share/vm/runtime/globals.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/runtime/globals.cpp Fri Jul 01 16:55:44 2016 -0700
@@ -58,6 +58,7 @@
MATERIALIZE_PRODUCT_FLAG, \
MATERIALIZE_PD_PRODUCT_FLAG, \
MATERIALIZE_DIAGNOSTIC_FLAG, \
+ MATERIALIZE_PD_DIAGNOSTIC_FLAG, \
MATERIALIZE_EXPERIMENTAL_FLAG, \
MATERIALIZE_NOTPRODUCT_FLAG, \
MATERIALIZE_MANAGEABLE_FLAG, \
@@ -72,6 +73,7 @@
MATERIALIZE_PRODUCT_FLAG, \
MATERIALIZE_PD_PRODUCT_FLAG, \
MATERIALIZE_DIAGNOSTIC_FLAG, \
+ MATERIALIZE_PD_DIAGNOSTIC_FLAG, \
MATERIALIZE_NOTPRODUCT_FLAG, \
IGNORE_RANGE, \
IGNORE_CONSTRAINT, \
@@ -650,6 +652,7 @@
#define RUNTIME_PRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_PRODUCT) },
#define RUNTIME_PD_PRODUCT_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_PRODUCT | Flag::KIND_PLATFORM_DEPENDENT) },
#define RUNTIME_DIAGNOSTIC_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_DIAGNOSTIC) },
+#define RUNTIME_PD_DIAGNOSTIC_FLAG_STRUCT(type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_DIAGNOSTIC | Flag::KIND_PLATFORM_DEPENDENT) },
#define RUNTIME_EXPERIMENTAL_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_EXPERIMENTAL) },
#define RUNTIME_MANAGEABLE_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_MANAGEABLE) },
#define RUNTIME_PRODUCT_RW_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_PRODUCT | Flag::KIND_READ_WRITE) },
@@ -660,6 +663,7 @@
#define JVMCI_PRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_PRODUCT) },
#define JVMCI_PD_PRODUCT_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_PRODUCT | Flag::KIND_PLATFORM_DEPENDENT) },
#define JVMCI_DIAGNOSTIC_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_DIAGNOSTIC) },
+#define JVMCI_PD_DIAGNOSTIC_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_DIAGNOSTIC | Flag::KIND_PLATFORM_DEPENDENT) },
#define JVMCI_EXPERIMENTAL_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_EXPERIMENTAL) },
#define JVMCI_DEVELOP_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_DEVELOP) },
#define JVMCI_PD_DEVELOP_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_DEVELOP | Flag::KIND_PLATFORM_DEPENDENT) },
@@ -674,6 +678,7 @@
#define C1_PRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_PRODUCT) },
#define C1_PD_PRODUCT_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_PRODUCT | Flag::KIND_PLATFORM_DEPENDENT) },
#define C1_DIAGNOSTIC_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_DIAGNOSTIC) },
+#define C1_PD_DIAGNOSTIC_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_DIAGNOSTIC | Flag::KIND_PLATFORM_DEPENDENT) },
#define C1_DEVELOP_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_DEVELOP) },
#define C1_PD_DEVELOP_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_DEVELOP | Flag::KIND_PLATFORM_DEPENDENT) },
#define C1_NOTPRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_NOT_PRODUCT) },
@@ -681,6 +686,7 @@
#define C2_PRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_PRODUCT) },
#define C2_PD_PRODUCT_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_PRODUCT | Flag::KIND_PLATFORM_DEPENDENT) },
#define C2_DIAGNOSTIC_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_DIAGNOSTIC) },
+#define C2_PD_DIAGNOSTIC_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_DIAGNOSTIC | Flag::KIND_PLATFORM_DEPENDENT) },
#define C2_EXPERIMENTAL_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_EXPERIMENTAL) },
#define C2_DEVELOP_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_DEVELOP) },
#define C2_PD_DEVELOP_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_DEVELOP | Flag::KIND_PLATFORM_DEPENDENT) },
@@ -695,6 +701,7 @@
#define SHARK_PRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_PRODUCT) },
#define SHARK_PD_PRODUCT_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_PRODUCT | Flag::KIND_PLATFORM_DEPENDENT) },
#define SHARK_DIAGNOSTIC_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_DIAGNOSTIC) },
+#define SHARK_PD_DIAGNOSTIC_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_DIAGNOSTIC | Flag::KIND_PLATFORM_DEPENDENT) },
#define SHARK_DEVELOP_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_DEVELOP) },
#define SHARK_PD_DEVELOP_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_DEVELOP | Flag::KIND_PLATFORM_DEPENDENT) },
#define SHARK_NOTPRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_NOT_PRODUCT) },
@@ -705,6 +712,7 @@
RUNTIME_PRODUCT_FLAG_STRUCT, \
RUNTIME_PD_PRODUCT_FLAG_STRUCT, \
RUNTIME_DIAGNOSTIC_FLAG_STRUCT, \
+ RUNTIME_PD_DIAGNOSTIC_FLAG_STRUCT, \
RUNTIME_EXPERIMENTAL_FLAG_STRUCT, \
RUNTIME_NOTPRODUCT_FLAG_STRUCT, \
RUNTIME_MANAGEABLE_FLAG_STRUCT, \
@@ -718,6 +726,7 @@
RUNTIME_PRODUCT_FLAG_STRUCT, \
RUNTIME_PD_PRODUCT_FLAG_STRUCT, \
RUNTIME_DIAGNOSTIC_FLAG_STRUCT, \
+ RUNTIME_PD_DIAGNOSTIC_FLAG_STRUCT, \
RUNTIME_NOTPRODUCT_FLAG_STRUCT, \
IGNORE_RANGE, \
IGNORE_CONSTRAINT, \
@@ -728,6 +737,7 @@
RUNTIME_PRODUCT_FLAG_STRUCT, \
RUNTIME_PD_PRODUCT_FLAG_STRUCT, \
RUNTIME_DIAGNOSTIC_FLAG_STRUCT, \
+ RUNTIME_PD_DIAGNOSTIC_FLAG_STRUCT, \
RUNTIME_EXPERIMENTAL_FLAG_STRUCT, \
RUNTIME_NOTPRODUCT_FLAG_STRUCT, \
RUNTIME_MANAGEABLE_FLAG_STRUCT, \
@@ -742,6 +752,7 @@
JVMCI_PRODUCT_FLAG_STRUCT, \
JVMCI_PD_PRODUCT_FLAG_STRUCT, \
JVMCI_DIAGNOSTIC_FLAG_STRUCT, \
+ JVMCI_PD_DIAGNOSTIC_FLAG_STRUCT, \
JVMCI_EXPERIMENTAL_FLAG_STRUCT, \
JVMCI_NOTPRODUCT_FLAG_STRUCT, \
IGNORE_RANGE, \
@@ -754,6 +765,7 @@
C1_PRODUCT_FLAG_STRUCT, \
C1_PD_PRODUCT_FLAG_STRUCT, \
C1_DIAGNOSTIC_FLAG_STRUCT, \
+ C1_PD_DIAGNOSTIC_FLAG_STRUCT, \
C1_NOTPRODUCT_FLAG_STRUCT, \
IGNORE_RANGE, \
IGNORE_CONSTRAINT, \
@@ -765,6 +777,7 @@
C2_PRODUCT_FLAG_STRUCT, \
C2_PD_PRODUCT_FLAG_STRUCT, \
C2_DIAGNOSTIC_FLAG_STRUCT, \
+ C2_PD_DIAGNOSTIC_FLAG_STRUCT, \
C2_EXPERIMENTAL_FLAG_STRUCT, \
C2_NOTPRODUCT_FLAG_STRUCT, \
IGNORE_RANGE, \
@@ -777,6 +790,7 @@
SHARK_PRODUCT_FLAG_STRUCT, \
SHARK_PD_PRODUCT_FLAG_STRUCT, \
SHARK_DIAGNOSTIC_FLAG_STRUCT, \
+ SHARK_PD_DIAGNOSTIC_FLAG_STRUCT, \
SHARK_NOTPRODUCT_FLAG_STRUCT, \
IGNORE_RANGE, \
IGNORE_CONSTRAINT, \
--- a/hotspot/src/share/vm/runtime/globals.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/runtime/globals.hpp Fri Jul 01 16:55:44 2016 -0700
@@ -644,6 +644,7 @@
product, \
product_pd, \
diagnostic, \
+ diagnostic_pd, \
experimental, \
notproduct, \
manageable, \
@@ -2529,7 +2530,7 @@
develop(bool, GenerateRangeChecks, true, \
"Generate range checks for array accesses") \
\
- develop_pd(bool, ImplicitNullChecks, \
+ diagnostic_pd(bool, ImplicitNullChecks, \
"Generate code for implicit null checks") \
\
product_pd(bool, TrapBasedNullChecks, \
@@ -3163,7 +3164,7 @@
"Ratio of call site execution to caller method invocation") \
range(0, max_jint) \
\
- develop_pd(intx, InlineFrequencyCount, \
+ diagnostic_pd(intx, InlineFrequencyCount, \
"Count of call site execution necessary to trigger frequent " \
"inlining") \
range(0, max_jint) \
@@ -4144,7 +4145,7 @@
"in the loaded class C. " \
"Check (3) is available only in debug builds.") \
\
- develop_pd(intx, InitArrayShortSize, \
+ diagnostic_pd(intx, InitArrayShortSize, \
"Threshold small size (in bytes) for clearing arrays. " \
"Anything this size or smaller may get converted to discrete " \
"scalar stores.") \
@@ -4168,6 +4169,7 @@
#define DECLARE_PRODUCT_FLAG(type, name, value, doc) extern "C" type name;
#define DECLARE_PD_PRODUCT_FLAG(type, name, doc) extern "C" type name;
#define DECLARE_DIAGNOSTIC_FLAG(type, name, value, doc) extern "C" type name;
+#define DECLARE_PD_DIAGNOSTIC_FLAG(type, name, doc) extern "C" type name;
#define DECLARE_EXPERIMENTAL_FLAG(type, name, value, doc) extern "C" type name;
#define DECLARE_MANAGEABLE_FLAG(type, name, value, doc) extern "C" type name;
#define DECLARE_PRODUCT_RW_FLAG(type, name, value, doc) extern "C" type name;
@@ -4191,6 +4193,7 @@
#define MATERIALIZE_PRODUCT_FLAG(type, name, value, doc) type name = value;
#define MATERIALIZE_PD_PRODUCT_FLAG(type, name, doc) type name = pd_##name;
#define MATERIALIZE_DIAGNOSTIC_FLAG(type, name, value, doc) type name = value;
+#define MATERIALIZE_PD_DIAGNOSTIC_FLAG(type, name, doc) type name = pd_##name;
#define MATERIALIZE_EXPERIMENTAL_FLAG(type, name, value, doc) type name = value;
#define MATERIALIZE_MANAGEABLE_FLAG(type, name, value, doc) type name = value;
#define MATERIALIZE_PRODUCT_RW_FLAG(type, name, value, doc) type name = value;
@@ -4221,6 +4224,7 @@
DECLARE_PRODUCT_FLAG, \
DECLARE_PD_PRODUCT_FLAG, \
DECLARE_DIAGNOSTIC_FLAG, \
+ DECLARE_PD_DIAGNOSTIC_FLAG, \
DECLARE_EXPERIMENTAL_FLAG, \
DECLARE_NOTPRODUCT_FLAG, \
DECLARE_MANAGEABLE_FLAG, \
@@ -4235,6 +4239,7 @@
DECLARE_PRODUCT_FLAG, \
DECLARE_PD_PRODUCT_FLAG, \
DECLARE_DIAGNOSTIC_FLAG, \
+ DECLARE_PD_DIAGNOSTIC_FLAG, \
DECLARE_NOTPRODUCT_FLAG, \
IGNORE_RANGE, \
IGNORE_CONSTRAINT, \
--- a/hotspot/src/share/vm/runtime/globals_extension.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/runtime/globals_extension.hpp Fri Jul 01 16:55:44 2016 -0700
@@ -49,6 +49,7 @@
#define RUNTIME_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define RUNTIME_PD_PRODUCT_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),
#define RUNTIME_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
+#define RUNTIME_PD_DIAGNOSTIC_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),
#define RUNTIME_EXPERIMENTAL_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define RUNTIME_MANAGEABLE_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define RUNTIME_PRODUCT_RW_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
@@ -61,6 +62,7 @@
#define JVMCI_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define JVMCI_PD_DEVELOP_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),
#define JVMCI_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
+#define JVMCI_PD_DIAGNOSTIC_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),
#define JVMCI_EXPERIMENTAL_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define JVMCI_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
@@ -73,6 +75,7 @@
#define C1_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define C1_PD_PRODUCT_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),
#define C1_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
+#define C1_PD_DIAGNOSTIC_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),
#define C1_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define C1_PD_DEVELOP_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),
#define C1_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
@@ -80,6 +83,7 @@
#define C2_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define C2_PD_PRODUCT_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),
#define C2_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
+#define C2_PD_DIAGNOSTIC_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),
#define C2_EXPERIMENTAL_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define C2_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define C2_PD_DEVELOP_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),
@@ -97,6 +101,7 @@
RUNTIME_PRODUCT_FLAG_MEMBER, \
RUNTIME_PD_PRODUCT_FLAG_MEMBER, \
RUNTIME_DIAGNOSTIC_FLAG_MEMBER, \
+ RUNTIME_PD_DIAGNOSTIC_FLAG_MEMBER, \
RUNTIME_EXPERIMENTAL_FLAG_MEMBER, \
RUNTIME_NOTPRODUCT_FLAG_MEMBER, \
RUNTIME_MANAGEABLE_FLAG_MEMBER, \
@@ -110,6 +115,7 @@
RUNTIME_PRODUCT_FLAG_MEMBER, \
RUNTIME_PD_PRODUCT_FLAG_MEMBER, \
RUNTIME_DIAGNOSTIC_FLAG_MEMBER, \
+ RUNTIME_PD_DIAGNOSTIC_FLAG_MEMBER, \
RUNTIME_NOTPRODUCT_FLAG_MEMBER, \
IGNORE_RANGE, \
IGNORE_CONSTRAINT, \
@@ -120,6 +126,7 @@
RUNTIME_PRODUCT_FLAG_MEMBER, \
RUNTIME_PD_PRODUCT_FLAG_MEMBER, \
RUNTIME_DIAGNOSTIC_FLAG_MEMBER, \
+ RUNTIME_PD_DIAGNOSTIC_FLAG_MEMBER, \
RUNTIME_EXPERIMENTAL_FLAG_MEMBER, \
RUNTIME_NOTPRODUCT_FLAG_MEMBER, \
RUNTIME_MANAGEABLE_FLAG_MEMBER, \
@@ -134,6 +141,7 @@
JVMCI_PRODUCT_FLAG_MEMBER, \
JVMCI_PD_PRODUCT_FLAG_MEMBER, \
JVMCI_DIAGNOSTIC_FLAG_MEMBER, \
+ JVMCI_PD_DIAGNOSTIC_FLAG_MEMBER, \
JVMCI_EXPERIMENTAL_FLAG_MEMBER, \
JVMCI_NOTPRODUCT_FLAG_MEMBER, \
IGNORE_RANGE, \
@@ -146,6 +154,7 @@
C1_PRODUCT_FLAG_MEMBER, \
C1_PD_PRODUCT_FLAG_MEMBER, \
C1_DIAGNOSTIC_FLAG_MEMBER, \
+ C1_PD_DIAGNOSTIC_FLAG_MEMBER, \
C1_NOTPRODUCT_FLAG_MEMBER, \
IGNORE_RANGE, \
IGNORE_CONSTRAINT, \
@@ -157,6 +166,7 @@
C2_PRODUCT_FLAG_MEMBER, \
C2_PD_PRODUCT_FLAG_MEMBER, \
C2_DIAGNOSTIC_FLAG_MEMBER, \
+ C2_PD_DIAGNOSTIC_FLAG_MEMBER, \
C2_EXPERIMENTAL_FLAG_MEMBER, \
C2_NOTPRODUCT_FLAG_MEMBER, \
IGNORE_RANGE, \
@@ -182,6 +192,7 @@
#define RUNTIME_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define RUNTIME_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define RUNTIME_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
+#define RUNTIME_PD_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define RUNTIME_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define RUNTIME_MANAGEABLE_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define RUNTIME_PRODUCT_RW_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
@@ -194,12 +205,14 @@
#define JVMCI_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define JVMCI_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define JVMCI_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
+#define JVMCI_PD_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define JVMCI_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define JVMCI_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C1_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C1_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C1_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
+#define C1_PD_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C1_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C1_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C1_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
@@ -213,6 +226,7 @@
#define C2_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C2_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C2_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
+#define C2_PD_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C2_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C2_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C2_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type),
@@ -230,6 +244,7 @@
RUNTIME_PRODUCT_FLAG_MEMBER_WITH_TYPE,
RUNTIME_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE,
RUNTIME_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,
+ RUNTIME_PD_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,
RUNTIME_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE,
RUNTIME_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE,
RUNTIME_MANAGEABLE_FLAG_MEMBER_WITH_TYPE,
@@ -243,6 +258,7 @@
RUNTIME_PRODUCT_FLAG_MEMBER_WITH_TYPE,
RUNTIME_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE,
RUNTIME_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,
+ RUNTIME_PD_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,
RUNTIME_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE,
IGNORE_RANGE,
IGNORE_CONSTRAINT,
@@ -253,6 +269,7 @@
RUNTIME_PRODUCT_FLAG_MEMBER_WITH_TYPE,
RUNTIME_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE,
RUNTIME_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,
+ RUNTIME_PD_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,
RUNTIME_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE,
RUNTIME_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE,
RUNTIME_MANAGEABLE_FLAG_MEMBER_WITH_TYPE,
@@ -267,6 +284,7 @@
JVMCI_PRODUCT_FLAG_MEMBER_WITH_TYPE,
JVMCI_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE,
JVMCI_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,
+ JVMCI_PD_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,
JVMCI_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE,
JVMCI_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE,
IGNORE_RANGE,
@@ -279,6 +297,7 @@
C1_PRODUCT_FLAG_MEMBER_WITH_TYPE,
C1_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE,
C1_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,
+ C1_PD_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,
C1_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE,
IGNORE_RANGE,
IGNORE_CONSTRAINT,
@@ -290,6 +309,7 @@
C2_PRODUCT_FLAG_MEMBER_WITH_TYPE,
C2_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE,
C2_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,
+ C2_PD_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,
C2_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE,
C2_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE,
IGNORE_RANGE,
--- a/hotspot/src/share/vm/runtime/java.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/runtime/java.cpp Fri Jul 01 16:55:44 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();
--- a/hotspot/src/share/vm/runtime/mutexLocker.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/runtime/mutexLocker.cpp Fri Jul 01 16:55:44 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
--- a/hotspot/src/share/vm/runtime/reflectionUtils.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/runtime/reflectionUtils.cpp Fri Jul 01 16:55:44 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));
--- a/hotspot/src/share/vm/runtime/thread.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/runtime/thread.cpp Fri Jul 01 16:55:44 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);
--- a/hotspot/src/share/vm/runtime/thread.inline.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/runtime/thread.inline.hpp Fri Jul 01 16:55:44 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;
}
}
--- a/hotspot/src/share/vm/runtime/vframeArray.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/runtime/vframeArray.cpp Fri Jul 01 16:55:44 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:
--- a/hotspot/src/share/vm/shark/shark_globals.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/shark/shark_globals.hpp Fri Jul 01 16:55:44 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright 2008, 2009, 2010 Red Hat, Inc.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
@@ -31,7 +31,7 @@
# include "shark_globals_zero.hpp"
#endif
-#define SHARK_FLAGS(develop, develop_pd, product, product_pd, diagnostic, notproduct) \
+#define SHARK_FLAGS(develop, develop_pd, product, product_pd, diagnostic, diagnostic_pd, notproduct) \
\
product(intx, MaxNodeLimit, 65000, \
"Maximum number of nodes") \
@@ -69,6 +69,7 @@
"Runs LLVM verify over LLVM IR") \
-SHARK_FLAGS(DECLARE_DEVELOPER_FLAG, DECLARE_PD_DEVELOPER_FLAG, DECLARE_PRODUCT_FLAG, DECLARE_PD_PRODUCT_FLAG, DECLARE_DIAGNOSTIC_FLAG, DECLARE_NOTPRODUCT_FLAG)
+SHARK_FLAGS(DECLARE_DEVELOPER_FLAG, DECLARE_PD_DEVELOPER_FLAG, DECLARE_PRODUCT_FLAG, DECLARE_PD_PRODUCT_FLAG, DECLARE_DIAGNOSTIC_FLAG, DECLARE_PD_DIAGNOSTIC_FLAG,
+ DECLARE_NOTPRODUCT_FLAG)
#endif // SHARE_VM_SHARK_SHARK_GLOBALS_HPP
--- a/hotspot/src/share/vm/trace/traceBackend.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/trace/traceBackend.hpp Fri Jul 01 16:55:44 2016 -0700
@@ -48,9 +48,6 @@
static void on_unloading_classes(void) {
}
- static void on_vm_error(bool) {
- }
-
};
class TraceThreadData {
--- a/hotspot/src/share/vm/trace/traceMacros.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/trace/traceMacros.hpp Fri Jul 01 16:55:44 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
--- a/hotspot/src/share/vm/utilities/bitMap.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/utilities/bitMap.hpp Fri Jul 01 16:55:44 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
--- a/hotspot/src/share/vm/utilities/bitMap.inline.hpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/utilities/bitMap.inline.hpp Fri Jul 01 16:55:44 2016 -0700
@@ -367,8 +367,4 @@
_map.at_put(bit, value);
}
-inline void BitMap2D::clear() {
- _map.clear();
-}
-
#endif // SHARE_VM_UTILITIES_BITMAP_INLINE_HPP
--- a/hotspot/src/share/vm/utilities/debug.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/utilities/debug.cpp Fri Jul 01 16:55:44 2016 -0700
@@ -54,10 +54,6 @@
#include "utilities/macros.hpp"
#include "utilities/vmError.hpp"
-#if INCLUDE_TRACE
-#include "trace/tracing.hpp"
-#endif
-
#include <stdio.h>
#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);
}
--- a/hotspot/src/share/vm/utilities/vmError.cpp Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/src/share/vm/utilities/vmError.cpp Fri Jul 01 16:55:44 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
--- a/hotspot/test/TEST.ROOT Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/TEST.ROOT Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/arraycopy/TestEliminatedArrayCopyDeopt.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/arraycopy/TestEliminatedArrayCopyDeopt.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/arraycopy/TestInstanceCloneAsLoadsStores.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/arraycopy/TestInstanceCloneAsLoadsStores.java Fri Jul 01 16:55:44 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 {
--- a/hotspot/test/compiler/c2/6857159/Test6857159.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/c2/6857159/Test6857159.java Fri Jul 01 16:55:44 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);
}
}
--- a/hotspot/test/compiler/c2/6857159/Test6857159.sh Fri Jul 01 12:32:21 2016 +0200
+++ /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
--- a/hotspot/test/compiler/c2/6894807/IsInstanceTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/c2/6894807/IsInstanceTest.java Fri Jul 01 16:55:44 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!");
--- a/hotspot/test/compiler/c2/6894807/Test6894807.sh Fri Jul 01 12:32:21 2016 +0200
+++ /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
--- a/hotspot/test/compiler/c2/7070134/Stemmer.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/c2/7070134/Stemmer.java Fri Jul 01 16:55:44 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 */
--- a/hotspot/test/compiler/c2/7070134/Test7070134.sh Fri Jul 01 12:32:21 2016 +0200
+++ /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 $?
-
--- a/hotspot/test/compiler/codecache/jmx/PoolsIndependenceTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/codecache/jmx/PoolsIndependenceTest.java Fri Jul 01 16:55:44 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/cpuflags/TestSSE4Disabled.java Fri Jul 01 16:55:44 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");
+ }
+}
+
--- a/hotspot/test/compiler/floatingpoint/Test15FloatJNIArgs.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/floatingpoint/Test15FloatJNIArgs.java Fri Jul 01 16:55:44 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 {
--- a/hotspot/test/compiler/jvmci/JVM_GetJVMCIRuntimeTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/JVM_GetJVMCIRuntimeTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/SecurityRestrictionsTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/SecurityRestrictionsTest.java Fri Jul 01 16:55:44 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/jvmci/common/services/jdk.vm.ci.hotspot.services.HotSpotVMEventListener Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,1 @@
+compiler.jvmci.common.JVMCIHelpers$EmptyVMEventListener
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/jvmci/common/services/jdk.vm.ci.runtime.services.JVMCICompilerFactory Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,1 @@
+compiler.jvmci.common.JVMCIHelpers$EmptyCompilerFactory
--- a/hotspot/test/compiler/jvmci/compilerToVM/AllocateCompileIdTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/AllocateCompileIdTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/CanInlineMethodTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/CanInlineMethodTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/CollectCountersTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/CollectCountersTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/DebugOutputTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/DebugOutputTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/DisassembleCodeBlobTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/DisassembleCodeBlobTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/DoNotInlineOrCompileTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/DoNotInlineOrCompileTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/ExecuteInstalledCodeTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/ExecuteInstalledCodeTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/FindUniqueConcreteMethodTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/FindUniqueConcreteMethodTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/GetBytecodeTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/GetBytecodeTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/GetClassInitializerTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/GetClassInitializerTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/GetConstantPoolTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/GetConstantPoolTest.java Fri Jul 01 16:55:44 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();
}
--- a/hotspot/test/compiler/jvmci/compilerToVM/GetExceptionTableTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/GetExceptionTableTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/GetImplementorTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/GetImplementorTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/GetLineNumberTableTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/GetLineNumberTableTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/GetLocalVariableTableTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/GetLocalVariableTableTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/GetMaxCallTargetOffsetTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/GetMaxCallTargetOffsetTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/GetNextStackFrameTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/GetNextStackFrameTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/GetResolvedJavaMethodAtSlotTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/GetResolvedJavaMethodAtSlotTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/GetResolvedJavaMethodTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/GetResolvedJavaMethodTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/GetResolvedJavaTypeTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/GetResolvedJavaTypeTest.java Fri Jul 01 16:55:44 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 */
--- a/hotspot/test/compiler/jvmci/compilerToVM/GetStackTraceElementTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/GetStackTraceElementTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/GetSymbolTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/GetSymbolTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/GetVtableIndexForInterfaceTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/GetVtableIndexForInterfaceTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/HasCompiledCodeForOSRTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/HasCompiledCodeForOSRTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/HasFinalizableSubclassTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/HasFinalizableSubclassTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/InitializeConfigurationTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/InitializeConfigurationTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/InvalidateInstalledCodeTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/InvalidateInstalledCodeTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/IsMatureTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/IsMatureTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/JVM_RegisterJVMCINatives.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/JVM_RegisterJVMCINatives.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/LookupKlassInPoolTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/LookupKlassInPoolTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/LookupKlassRefIndexInPoolTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/LookupKlassRefIndexInPoolTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/LookupMethodInPoolTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/LookupMethodInPoolTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/LookupNameAndTypeRefIndexInPoolTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/LookupNameAndTypeRefIndexInPoolTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/LookupNameInPoolTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/LookupNameInPoolTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/LookupSignatureInPoolTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/LookupSignatureInPoolTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/LookupTypeTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/LookupTypeTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/MaterializeVirtualObjectTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/MaterializeVirtualObjectTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/MethodIsIgnoredBySecurityStackWalkTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/MethodIsIgnoredBySecurityStackWalkTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/ReprofileTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/ReprofileTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/ResolveConstantInPoolTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/ResolveConstantInPoolTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/ResolveFieldInPoolTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/ResolveFieldInPoolTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/ResolveMethodTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/ResolveMethodTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/ResolvePossiblyCachedConstantInPoolTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/ResolvePossiblyCachedConstantInPoolTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/ResolveTypeInPoolTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/ResolveTypeInPoolTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/ShouldDebugNonSafepointsTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/ShouldDebugNonSafepointsTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/compilerToVM/ShouldInlineMethodTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/compilerToVM/ShouldInlineMethodTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/errors/TestInvalidCompilationResult.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/errors/TestInvalidCompilationResult.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/errors/TestInvalidDebugInfo.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/errors/TestInvalidDebugInfo.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/errors/TestInvalidOopMap.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/errors/TestInvalidOopMap.java Fri Jul 01 16:55:44 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/jvmci/events/JvmciNotifyBootstrapFinishedEventTest.config Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,1 @@
+compiler.jvmci.events.JvmciNotifyBootstrapFinishedEventTest
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/jvmci/events/JvmciNotifyBootstrapFinishedEventTest.java Fri Jul 01 16:55:44 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++;
+ }
+}
--- a/hotspot/test/compiler/jvmci/events/JvmciNotifyInstallEventTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/events/JvmciNotifyInstallEventTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/events/JvmciShutdownEventTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/events/JvmciShutdownEventTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/DataPatchTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/DataPatchTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/InterpreterFrameSizeTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/InterpreterFrameSizeTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/SimpleCodeInstallationTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/SimpleCodeInstallationTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/SimpleDebugInfoTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/SimpleDebugInfoTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/VirtualObjectDebugInfoTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/VirtualObjectDebugInfoTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/HotSpotConstantReflectionProviderTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/HotSpotConstantReflectionProviderTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/MemoryAccessProviderTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/MemoryAccessProviderTest.java Fri Jul 01 16:55:44 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");
}
--- a/hotspot/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/MethodHandleAccessProviderTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/MethodHandleAccessProviderTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/ConstantTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/ConstantTest.java Fri Jul 01 16:55:44 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;
--- a/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/RedefineClassTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/RedefineClassTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/ResolvedJavaTypeResolveConcreteMethodTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/ResolvedJavaTypeResolveConcreteMethodTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/ResolvedJavaTypeResolveMethodTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/ResolvedJavaTypeResolveMethodTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestConstantReflectionProvider.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestConstantReflectionProvider.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestJavaField.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestJavaField.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestJavaMethod.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestJavaMethod.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestJavaType.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestJavaType.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestMetaAccessProvider.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestMetaAccessProvider.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestResolvedJavaField.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestResolvedJavaField.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestResolvedJavaMethod.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestResolvedJavaMethod.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestResolvedJavaType.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestResolvedJavaType.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/compiler/jvmci/meta/StableFieldTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/compiler/jvmci/meta/StableFieldTest.java Fri Jul 01 16:55:44 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/stable/TestStableMismatched.java Fri Jul 01 16:55:44 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'");
+ }
+ }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/uncommontrap/DeoptReallocFailure.java Fri Jul 01 16:55:44 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");
+ }
+}
--- a/hotspot/test/gc/arguments/TestTargetSurvivorRatioFlag.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/gc/arguments/TestTargetSurvivorRatioFlag.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/gc/g1/humongousObjects/objectGraphTest/GC.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/gc/g1/humongousObjects/objectGraphTest/GC.java Fri Jul 01 16:55:44 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<ReferenceInfo<Object[]>> getChecker() {
+ return getCheckerImpl(false, false, true, false);
+ }
+
+ @Override
+ public List<String> shouldContain() {
+ return Arrays.asList(GCTokens.WB_INITIATED_CMC);
+ }
+
+ @Override
+ public List<String> 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<ReferenceInfo<Object[]>> getChecker() {
+ return getCheckerImpl(true, false, true, false);
+ }
+
+ @Override
+ public List<String> shouldContain() {
+ return Arrays.asList(GCTokens.WB_INITIATED_CMC);
+ }
+
+ @Override
+ public List<String> 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() {
--- a/hotspot/test/gc/g1/humongousObjects/objectGraphTest/README Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/gc/g1/humongousObjects/objectGraphTest/README Fri Jul 01 16:55:44 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.
--- a/hotspot/test/gc/g1/humongousObjects/objectGraphTest/TestObjectGraphAfterGC.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/gc/g1/humongousObjects/objectGraphTest/TestObjectGraphAfterGC.java Fri Jul 01 16:55:44 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
+ *
*/
/**
--- a/hotspot/test/gc/g1/ihop/TestIHOPErgo.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/gc/g1/ihop/TestIHOPErgo.java Fri Jul 01 16:55:44 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 /
--- a/hotspot/test/gc/g1/ihop/TestIHOPStatic.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/gc/g1/ihop/TestIHOPStatic.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/gc/g1/plab/TestPLABPromotion.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/gc/g1/plab/TestPLABPromotion.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/gc/g1/plab/TestPLABResize.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/gc/g1/plab/TestPLABResize.java Fri Jul 01 16:55:44 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/gc/metaspace/TestMetaspaceCMSCancel.java Fri Jul 01 16:55:44 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());
+ }
+ }
+}
--- a/hotspot/test/gc/stress/TestGCOld.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/gc/stress/TestGCOld.java Fri Jul 01 16:55:44 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.*;
--- a/hotspot/test/gc/stress/TestStressG1Humongous.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/gc/stress/TestStressG1Humongous.java Fri Jul 01 16:55:44 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/native/runtime/test_classLoader.cpp Fri Jul 01 16:55:44 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'";
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/native/runtime/test_instanceKlass.cpp Fri Jul 01 16:55:44 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";
+}
--- a/hotspot/test/runtime/ErrorHandling/ProblematicFrameTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/runtime/ErrorHandling/ProblematicFrameTest.java Fri Jul 01 16:55:44 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\\)");
}
}
--- a/hotspot/test/runtime/NMT/CommitOverlappingRegions.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/runtime/NMT/CommitOverlappingRegions.java Fri Jul 01 16:55:44 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)");
}
}
--- a/hotspot/test/runtime/SharedArchiveFile/DefaultUseWithClient.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/runtime/SharedArchiveFile/DefaultUseWithClient.java Fri Jul 01 16:55:44 2016 -0700
@@ -27,6 +27,7 @@
* @library /testlibrary
* @modules java.base/jdk.internal.misc
* java.management
+ * @ignore 8154204
* @run main DefaultUseWithClient
* @bug 8032224
*/
--- a/hotspot/test/runtime/ThreadSignalMask/ThreadSignalMask.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/runtime/ThreadSignalMask/ThreadSignalMask.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/runtime/Unsafe/GetKlassPointerGetJavaMirror.java Fri Jul 01 12:32:21 2016 +0200
+++ /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);
- }
-
-}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/runtime/classFileParserBug/TestBadClassName.java Fri Jul 01 16:55:44 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");
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/runtime/classFileParserBug/UseBadInterface1.jcod Fri Jul 01 16:55:44 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 "<init>"; // #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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/runtime/classFileParserBug/UseBadInterface2.jcod Fri Jul 01 16:55:44 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 "<init>"; // #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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/runtime/classFileParserBug/p1/BadInterface1.jcod Fri Jul 01 16:55:44 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/runtime/classFileParserBug/p1/BadInterface2.jcod Fri Jul 01 16:55:44 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
--- a/hotspot/test/runtime/logging/StartupTimeTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/runtime/logging/StartupTimeTest.java Fri Jul 01 16:55:44 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 {
--- a/hotspot/test/runtime/memory/ReserveMemory.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/runtime/memory/ReserveMemory.java Fri Jul 01 16:55:44 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");
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/runtime/modules/CompilerUtils.java Fri Jul 01 16:55:44 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 <source>/**} to
+ * {@code <destination>/**}. 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<Path> 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<String> opts = Arrays.asList(options);
+ JavaCompiler.CompilationTask task
+ = compiler.getTask(null, jfm, null, opts, null,
+ jfm.getJavaFileObjectsFromPaths(sources));
+
+ return task.call();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/runtime/modules/ModuleStress/ExportModuleStressTest.java Fri Jul 01 16:55:44 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);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/runtime/modules/ModuleStress/src/jdk.test/module-info.java Fri Jul 01 16:55:44 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 {
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/runtime/modules/ModuleStress/src/jdk.test/test/Main.java Fri Jul 01 16:55:44 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<Void> task = new Callable<Void>() {
+ @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<Future<Void>> 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<Void> 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() { }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/runtime/modules/ModuleStress/src/jdk.translet/module-info.java Fri Jul 01 16:55:44 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;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/runtime/modules/ModuleStress/src/jdk.translet/translet/Main.java Fri Jul 01 16:55:44 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();
+ }
+}
--- a/hotspot/test/runtime/modules/Xpatch/XpatchJavaBase.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/runtime/modules/Xpatch/XpatchJavaBase.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/serviceability/dcmd/framework/HelpTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/serviceability/dcmd/framework/HelpTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/serviceability/dcmd/framework/InvalidCommandTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/serviceability/dcmd/framework/InvalidCommandTest.java Fri Jul 01 16:55:44 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
--- a/hotspot/test/serviceability/dcmd/framework/VMVersionTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/serviceability/dcmd/framework/VMVersionTest.java Fri Jul 01 16:55:44 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/serviceability/jvmti/GetObjectSizeClass.java Fri Jul 01 16:55:44 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");
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/serviceability/jvmti/GetObjectSizeClassAgent.java Fri Jul 01 16:55:44 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() {}
+ }
+
+}
--- a/hotspot/test/serviceability/tmtools/jstat/GcCapacityTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/serviceability/tmtools/jstat/GcCapacityTest.java Fri Jul 01 16:55:44 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 {
--- a/hotspot/test/serviceability/tmtools/jstat/utils/GcProvokerImpl.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/serviceability/tmtools/jstat/utils/GcProvokerImpl.java Fri Jul 01 16:55:44 2016 -0700
@@ -42,8 +42,9 @@
// uses fixed small objects to avoid Humongous objects allocation in G1
int memoryChunk = 2048;
List<Object> 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;
--- a/hotspot/test/testlibrary/jdk/test/lib/FileInstaller.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/testlibrary/jdk/test/lib/FileInstaller.java Fri Jul 01 16:55:44 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));
--- a/hotspot/test/testlibrary/jittester/Makefile Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/testlibrary/jittester/Makefile Fri Jul 01 16:55:44 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)
--- a/hotspot/test/testlibrary/jittester/conf/default.properties Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/testlibrary/jittester/conf/default.properties Fri Jul 01 16:55:44 2016 -0700
@@ -9,3 +9,5 @@
print-complexity=true
print-hierarchy=true
disable-static=true
+generatorsFactories=jdk.test.lib.jittester.TestGeneratorsFactory
+generators=JavaCode,ByteCode
--- a/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/Automatic.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/Automatic.java Fri Jul 01 16:55:44 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<IRNode, IRNode> generateIRTree(String name) {
SymbolTable.removeAll();
@@ -120,123 +89,48 @@
}
}
+ private static List<TestsGenerator> getTestGenerators() {
+ List<TestsGenerator> result = new ArrayList<>();
+ Class<?> factoryClass;
+ Function<String[], List<TestsGenerator>> factory;
+ String[] factoryClassNames = ProductionParams.generatorsFactories.value().split(",");
+ String[] generatorNames = ProductionParams.generators.value().split(",");
+ for (String factoryClassName : factoryClassNames) {
+ try {
+ factoryClass = Class.forName(factoryClassName);
+ factory = (Function<String[], List<TestsGenerator>>) 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<IRNode, IRNode> 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<TestsGenerator> generators = getTestGenerators();
+ do {
+ double start = System.currentTimeMillis();
+ System.out.print("[" + LocalTime.now() + "] |");
+ String name = "Test_" + counter;
+ Pair<IRNode, IRNode> 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());
}
}
--- a/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/ByteCodeGenerator.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/ByteCodeGenerator.java Fri Jul 01 16:55:44 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<IRNode, IRNode, String> {
- 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<String, String[]> 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();
--- a/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/JavaCodeGenerator.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/JavaCodeGenerator.java Fri Jul 01 16:55:44 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<IRNode, IRNode, String> {
- 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<String, String[]> 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"};
}
}
--- a/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/ProductionParams.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/ProductionParams.java Fri Jul 01 16:55:44 2016 -0700
@@ -68,8 +68,6 @@
public static Option<Boolean> disableNestedBlocks = null;
public static Option<Boolean> disableArrays = null;
public static Option<Boolean> enableFinalizers = null;
- public static Option<Boolean> disableBytecodeGeneration = null;
- public static Option<Boolean> disableJavacodeGeneration = null;
// workaraound: to reduce chance throwing ArrayIndexOutOfBoundsException
public static Option<Integer> chanceExpressionIndex = null;
public static Option<String> testbaseDir = null;
@@ -78,6 +76,8 @@
public static Option<Long> specificSeed = null;
public static Option<String> classesFile = null;
public static Option<String> excludeMethodsFile = null;
+ public static Option<String> generators = null;
+ public static Option<String> 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");
}
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/TestGeneratorsFactory.java Fri Jul 01 16:55:44 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<String[], List<TestsGenerator>> {
+
+ @Override
+ public List<TestsGenerator> apply(String[] input) {
+ List<TestsGenerator> 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;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/TestsGenerator.java Fri Jul 01 16:55:44 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<IRNode, IRNode> {
+ 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<String, String[]> preRunActions;
+ protected final String jtDriverOptions;
+
+ protected TestsGenerator(String suffix) {
+ this(suffix, s -> new String[0], "");
+ }
+
+ protected TestsGenerator(String suffix, Function<String, String[]> 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 "";
+ }
+}
--- a/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/factories/LiteralFactory.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/factories/LiteralFactory.java Fri Jul 01 16:55:44 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)),
--- a/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/jtreg/JitTesterDriver.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/jtreg/JitTesterDriver.java Fri Jul 01 16:55:44 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<String> 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<String> stream, Predicate<String> predicate) {
- String result = stream
- .filter(predicate)
- .collect(Collectors.joining(Utils.NEW_LINE));
+ private static String formatOutput(Stream<String> stream) {
+ String result = stream.collect(Collectors.joining(Utils.NEW_LINE));
if (result.length() > 0) {
result += Utils.NEW_LINE;
}
--- a/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/utils/FixedTrees.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/utils/FixedTrees.java Fri Jul 01 16:55:44 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<Symbol> 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<IRNode> testCallNodeContent = new ArrayList<>();
@@ -149,39 +153,50 @@
List<Type> 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<IRNode> printStackTraceCallBlockContent = new ArrayList<>();
- // { ex.printStackTrace(); }
- printStackTraceCallBlockContent.add(new Statement(printStackTraceCall, true));
-
- Block printStackTraceCallBlock = new Block(owner, TypeList.VOID, printStackTraceCallBlockContent, 3);
- List<CatchBlock> catchBlocks1 = new ArrayList<>();
- catchBlocks1.add(new CatchBlock(printStackTraceCallBlock, throwables, 3));
- List<CatchBlock> catchBlocks2 = new ArrayList<>();
- catchBlocks2.add(new CatchBlock(printStackTraceCallBlock, throwables, 3));
- List<CatchBlock> 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<IRNode> 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<CatchBlock> catchBlocks1 = new ArrayList<>();
+ catchBlocks1.add(new CatchBlock(printExceptionBlock, throwables, 3));
+ List<CatchBlock> catchBlocks2 = new ArrayList<>();
+ catchBlocks2.add(new CatchBlock(printExceptionBlock, throwables, 3));
+ List<CatchBlock> catchBlocks3 = new ArrayList<>();
+ catchBlocks3.add(new CatchBlock(printExceptionBlock, throwables, 2));
+
+ TryCatchBlock tryCatch1 = new TryCatchBlock(tryNode, nothing, catchBlocks1, 3);
List<IRNode> 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<IRNode> printBlockContent = new ArrayList<>();
printBlockContent.add(new Statement(print, true));
Block printBlock = new Block(owner, TypeList.VOID, printBlockContent, 3);
--- a/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/utils/OptionResolver.java Fri Jul 01 12:32:21 2016 +0200
+++ b/hotspot/test/testlibrary/jittester/src/jdk/test/lib/jittester/utils/OptionResolver.java Fri Jul 01 16:55:44 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);
}
}
--- a/jaxp/.hgtags Fri Jul 01 12:32:21 2016 +0200
+++ b/jaxp/.hgtags Fri Jul 01 16:55:44 2016 -0700
@@ -366,3 +366,5 @@
a265b8116058c56179c321c38618570b780329be jdk-9+121
f8899b1884e2c4a000dbcc5b1a80954245fe462e jdk-9+122
3c19ab8742c196ac267b3d87e1d19ec3472c708d jdk-9+123
+e04a15153cc293f05fcd60bc98236f50e16af46a jdk-9+124
+493eb91ec32a6dea7604cfbd86c10045ad9af15b jdk-9+125
--- a/jaxp/test/ProblemList.txt Fri Jul 01 12:32:21 2016 +0200
+++ b/jaxp/test/ProblemList.txt Fri Jul 01 16:55:44 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
--- a/jaxws/.hgtags Fri Jul 01 12:32:21 2016 +0200
+++ b/jaxws/.hgtags Fri Jul 01 16:55:44 2016 -0700
@@ -369,3 +369,5 @@
fb771fa3a986ccfcb00d743b1956b98c380d1dd8 jdk-9+121
342705d785ffd9e999991a3d4baae2eca58ea7c3 jdk-9+122
c42decd28bbfa817347112ed6053b5fbd30517a2 jdk-9+123
+1600da1665cd2cc127014e8c002b328ec33a9147 jdk-9+124
+5b0570e3db29f6b8c80a4beac70d51284507b203 jdk-9+125
--- a/jaxws/src/java.xml.bind/share/classes/javax/xml/bind/ContextFinder.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jaxws/src/java.xml.bind/share/classes/javax/xml/bind/ContextFinder.java Fri Jul 01 16:55:44 2016 -0700
@@ -193,7 +193,7 @@
try {
Method m = spFactory.getMethod("createContext", String.class, ClassLoader.class, Map.class);
// any failure in invoking this method would be considered fatal
- Object obj = instantiateProviderIfNecessary(m);
+ Object obj = instantiateProviderIfNecessary(spFactory);
context = m.invoke(obj, contextPath, classLoader, properties);
} catch (NoSuchMethodException ignored) {
// it's not an error for the provider not to have this method.
@@ -203,7 +203,7 @@
// try the old method that doesn't take properties. compatible with 1.0.
// it is an error for an implementation not to have both forms of the createContext method.
Method m = spFactory.getMethod("createContext", String.class, ClassLoader.class);
- Object obj = instantiateProviderIfNecessary(m);
+ Object obj = instantiateProviderIfNecessary(spFactory);
// any failure in invoking this method would be considered fatal
context = m.invoke(obj, contextPath, classLoader);
}
@@ -228,20 +228,20 @@
}
}
- private static Object instantiateProviderIfNecessary(Method m) throws JAXBException {
- Class<?> declaringClass = m.getDeclaringClass();
+ private static Object instantiateProviderIfNecessary(Class<?> implClass) throws JAXBException {
try {
- if (JAXBContextFactory.class.isAssignableFrom(declaringClass)) {
+ if (JAXBContextFactory.class.isAssignableFrom(implClass)) {
return AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
@Override
public Object run() throws Exception {
- return declaringClass.newInstance();
+ return implClass.newInstance();
}
});
}
return null;
- } catch (PrivilegedActionException e) {
- throw new JAXBException(Messages.format(Messages.COULD_NOT_INSTANTIATE, declaringClass, e), e);
+ } catch (PrivilegedActionException x) {
+ Throwable e = (x.getCause() == null) ? x : x.getCause();
+ throw new JAXBException(Messages.format(Messages.COULD_NOT_INSTANTIATE, implClass, e), e);
}
}
@@ -271,7 +271,7 @@
try {
Method m = spFactory.getMethod("createContext", Class[].class, Map.class);
- Object obj = instantiateProviderIfNecessary(m);
+ Object obj = instantiateProviderIfNecessary(spFactory);
Object context = m.invoke(obj, classes, properties);
if (!(context instanceof JAXBContext)) {
// the cast would fail, so generate an exception with a nice message
@@ -392,7 +392,7 @@
/**
- * first factoryId should be the preffered one,
+ * first factoryId should be the preferred one,
* more of those can be provided to support backwards compatibility
*/
private static String classNameFromPackageProperties(ClassLoader classLoader,
--- a/jdk/.hgtags Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/.hgtags Fri Jul 01 16:55:44 2016 -0700
@@ -366,3 +366,5 @@
ee29aaab5889555ea56e4c0ed690aabb7613529d jdk-9+121
981ae344923f09c46d8d1d5a3ed9fa71deafe0c6 jdk-9+122
c40c8739bcdc88892ff58ebee3fd8a3f287be94d jdk-9+123
+7ff61c55b5c6c124592f09b18953222009a204a6 jdk-9+124
+073ab1d4edf5590cf1af7b6d819350c14e425c1a jdk-9+125
--- a/jdk/make/gensrc/GensrcMisc.gmk Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/make/gensrc/GensrcMisc.gmk Fri Jul 01 16:55:44 2016 -0700
@@ -34,7 +34,11 @@
@@LAUNCHER_NAME@@ => $(LAUNCHER_NAME) ; \
@@RUNTIME_NAME@@ => $(RUNTIME_NAME) ; \
@@VERSION_SHORT@@ => $(VERSION_SHORT) ; \
- @@VERSION_STRING@@ => $(VERSION_STRING), \
+ @@VERSION_STRING@@ => $(VERSION_STRING) ; \
+ @@VERSION_NUMBER@@ => $(VERSION_NUMBER) ; \
+ @@VERSION_PRE@@ => $(VERSION_PRE) ; \
+ @@VERSION_BUILD@@ => $(VERSION_BUILD) ; \
+ @@VERSION_OPT@@ => $(VERSION_OPT), \
))
GENSRC_JAVA_BASE += $(BUILD_VERSION_JAVA)
--- a/jdk/make/lib/NioLibraries.gmk Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/make/lib/NioLibraries.gmk Fri Jul 01 16:55:44 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
@@ -46,9 +46,6 @@
ifeq ($(OPENJDK_TARGET_OS), macosx)
BUILD_LIBNIO_MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libnio/mapfile-$(OPENJDK_TARGET_OS)
- BUILD_LIBNIO_EXFILES += \
- GioFileTypeDetector.c \
- #
endif
ifeq ($(OPENJDK_TARGET_OS), solaris)
--- a/jdk/make/mapfiles/libjava/mapfile-vers Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/make/mapfiles/libjava/mapfile-vers Fri Jul 01 16:55:44 2016 -0700
@@ -56,6 +56,7 @@
JNU_ThrowArrayIndexOutOfBoundsException;
JNU_ThrowByName;
JNU_ThrowByNameWithLastError;
+ JNU_ThrowByNameWithMessageAndLastError;
JNU_ThrowClassNotFoundException;
JNU_ThrowIllegalAccessError;
JNU_ThrowIllegalAccessException;
--- a/jdk/make/mapfiles/libnio/mapfile-solaris Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/make/mapfiles/libnio/mapfile-solaris Fri Jul 01 16:55:44 2016 -0700
@@ -131,8 +131,6 @@
Java_sun_nio_ch_SolarisEventPort_port_1get;
Java_sun_nio_ch_SolarisEventPort_port_1getn;
Java_sun_nio_ch_SolarisEventPort_port_1send;
- Java_sun_nio_fs_GioFileTypeDetector_initializeGio;
- Java_sun_nio_fs_GioFileTypeDetector_probeGio;
Java_sun_nio_fs_UnixNativeDispatcher_init;
Java_sun_nio_fs_UnixNativeDispatcher_getcwd;
Java_sun_nio_fs_UnixNativeDispatcher_strerror;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.base/linux/classes/sun/nio/fs/GioFileTypeDetector.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.nio.fs;
+
+import java.nio.file.Path;
+import java.io.IOException;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+
+/**
+ * File type detector that uses the GNOME I/O library to guess the
+ * MIME type of a file.
+ */
+
+public class GioFileTypeDetector
+ extends AbstractFileTypeDetector
+{
+ // true if GIO is available
+ private final boolean gioAvailable;
+
+ public GioFileTypeDetector() {
+ gioAvailable = initializeGio();
+ }
+
+ @Override
+ public String implProbeContentType(Path obj) throws IOException {
+ if (!gioAvailable)
+ return null;
+ if (!(obj instanceof UnixPath))
+ return null;
+
+ UnixPath path = (UnixPath)obj;
+ NativeBuffer buffer = NativeBuffers.asNativeBuffer(path.getByteArrayForSysCalls());
+ try {
+ // GIO may access file so need permission check
+ path.checkRead();
+ byte[] type = probeGio(buffer.address());
+ return (type == null) ? null : Util.toString(type);
+ } finally {
+ buffer.release();
+ }
+
+ }
+
+ // GIO
+ private static native boolean initializeGio();
+ //
+ // The probeGIO() method is synchronized to avert potential problems
+ // such as crashes due to a suspected lack of thread safety in GIO.
+ //
+ private static synchronized native byte[] probeGio(long pathAddress);
+
+ static {
+ AccessController.doPrivileged(new PrivilegedAction<>() {
+ public Void run() {
+ System.loadLibrary("nio");
+ return null;
+ }});
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.base/linux/native/libnio/fs/GioFileTypeDetector.c Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,148 @@
+/*
+ * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#include "jni.h"
+#include "jni_util.h"
+#include "jvm.h"
+#include "jlong.h"
+
+#include <stdlib.h>
+#include <dlfcn.h>
+
+#ifdef __solaris__
+#include <strings.h>
+#endif
+
+#if defined(__linux__)
+#include <string.h>
+#endif
+
+/*
+ * For reference see for example the GFileInfo section at
+ * https://developer.gnome.org/gio/unstable/.
+ */
+
+/* Definitions for GIO */
+
+#define G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE "standard::content-type"
+
+typedef void* gpointer;
+typedef struct _GFile GFile;
+typedef struct _GFileInfo GFileInfo;
+typedef struct _GCancellable GCancellable;
+typedef struct _GError GError;
+
+typedef enum {
+ G_FILE_QUERY_INFO_NONE = 0
+} GFileQueryInfoFlags;
+
+typedef void (*g_type_init_func)(void);
+typedef void (*g_object_unref_func)(gpointer object);
+typedef GFile* (*g_file_new_for_path_func)(const char* path);
+typedef GFileInfo* (*g_file_query_info_func)(GFile *file,
+ const char *attributes, GFileQueryInfoFlags flags,
+ GCancellable *cancellable, GError **error);
+typedef char* (*g_file_info_get_content_type_func)(GFileInfo *info);
+
+static g_type_init_func g_type_init;
+static g_object_unref_func g_object_unref;
+static g_file_new_for_path_func g_file_new_for_path;
+static g_file_query_info_func g_file_query_info;
+static g_file_info_get_content_type_func g_file_info_get_content_type;
+
+
+#include "sun_nio_fs_GioFileTypeDetector.h"
+
+
+JNIEXPORT jboolean JNICALL
+Java_sun_nio_fs_GioFileTypeDetector_initializeGio
+ (JNIEnv* env, jclass this)
+{
+ void* gio_handle;
+
+ gio_handle = dlopen("libgio-2.0.so", RTLD_LAZY);
+ if (gio_handle == NULL) {
+ gio_handle = dlopen("libgio-2.0.so.0", RTLD_LAZY);
+ if (gio_handle == NULL) {
+ return JNI_FALSE;
+ }
+ }
+
+ g_type_init = (g_type_init_func)dlsym(gio_handle, "g_type_init");
+ (*g_type_init)();
+
+ g_object_unref = (g_object_unref_func)dlsym(gio_handle, "g_object_unref");
+
+ g_file_new_for_path =
+ (g_file_new_for_path_func)dlsym(gio_handle, "g_file_new_for_path");
+
+ g_file_query_info =
+ (g_file_query_info_func)dlsym(gio_handle, "g_file_query_info");
+
+ g_file_info_get_content_type = (g_file_info_get_content_type_func)
+ dlsym(gio_handle, "g_file_info_get_content_type");
+
+
+ if (g_type_init == NULL ||
+ g_object_unref == NULL ||
+ g_file_new_for_path == NULL ||
+ g_file_query_info == NULL ||
+ g_file_info_get_content_type == NULL)
+ {
+ dlclose(gio_handle);
+ return JNI_FALSE;
+ }
+
+ (*g_type_init)();
+ return JNI_TRUE;
+}
+
+JNIEXPORT jbyteArray JNICALL
+Java_sun_nio_fs_GioFileTypeDetector_probeGio
+ (JNIEnv* env, jclass this, jlong pathAddress)
+{
+ char* path = (char*)jlong_to_ptr(pathAddress);
+ GFile* gfile;
+ GFileInfo* gfileinfo;
+ jbyteArray result = NULL;
+
+ gfile = (*g_file_new_for_path)(path);
+ gfileinfo = (*g_file_query_info)(gfile, G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE,
+ G_FILE_QUERY_INFO_NONE, NULL, NULL);
+ if (gfileinfo != NULL) {
+ const char* mime = (*g_file_info_get_content_type)(gfileinfo);
+ if (mime != NULL) {
+ jsize len = strlen(mime);
+ result = (*env)->NewByteArray(env, len);
+ if (result != NULL) {
+ (*env)->SetByteArrayRegion(env, result, 0, len, (jbyte*)mime);
+ }
+ }
+ (*g_object_unref)(gfileinfo);
+ }
+ (*g_object_unref)(gfile);
+
+ return result;
+}
--- a/jdk/src/java.base/macosx/native/libjava/java_props_macosx.c Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/macosx/native/libjava/java_props_macosx.c Fri Jul 01 16:55:44 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
@@ -23,10 +23,10 @@
* questions.
*/
-#include <dlfcn.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
+#include <objc/objc-runtime.h>
#include <Security/AuthSession.h>
#include <CoreFoundation/CoreFoundation.h>
@@ -35,18 +35,6 @@
#include "java_props_macosx.h"
-// need dlopen/dlsym trick to avoid pulling in JavaRuntimeSupport before libjava.dylib is loaded
-static void *getJRSFramework() {
- static void *jrsFwk = NULL;
-#ifndef STATIC_BUILD
-// JavaRuntimeSupport doesn't support static Java runtimes
- if (jrsFwk == NULL) {
- jrsFwk = dlopen("/System/Library/Frameworks/JavaVM.framework/Frameworks/JavaRuntimeSupport.framework/JavaRuntimeSupport", RTLD_LAZY | RTLD_LOCAL);
- }
-#endif
- return jrsFwk;
-}
-
char *getPosixLocale(int cat) {
char *lc = setlocale(cat, NULL);
if ((lc == NULL) || (strcmp(lc, "C") == 0)) {
@@ -61,18 +49,70 @@
switch (cat) {
case LC_MESSAGES:
{
- void *jrsFwk = getJRSFramework();
- if (jrsFwk == NULL) return NULL;
+ // get preferred language code
+ CFArrayRef languages = CFLocaleCopyPreferredLanguages();
+ if (languages == NULL) {
+ return NULL;
+ }
+ if (CFArrayGetCount(languages) <= 0) {
+ CFRelease(languages);
+ return NULL;
+ }
+
+ CFStringRef primaryLanguage = (CFStringRef)CFArrayGetValueAtIndex(languages, 0);
+ if (primaryLanguage == NULL) {
+ CFRelease(languages);
+ return NULL;
+ }
+ char languageString[LOCALEIDLENGTH];
+ if (CFStringGetCString(primaryLanguage, languageString,
+ LOCALEIDLENGTH, CFStringGetSystemEncoding()) == false) {
+ CFRelease(languages);
+ return NULL;
+ }
+ CFRelease(languages);
- char *(*JRSCopyPrimaryLanguage)() = dlsym(jrsFwk, "JRSCopyPrimaryLanguage");
- char *primaryLanguage = JRSCopyPrimaryLanguage ? JRSCopyPrimaryLanguage() : NULL;
- if (primaryLanguage == NULL) return NULL;
+ // Language IDs use the language designators and (optional) region
+ // and script designators of BCP 47. So possible formats are:
+ //
+ // "en" (language designator only)
+ // "haw" (3-letter lanuage designator)
+ // "en-GB" (language with alpha-2 region designator)
+ // "es-419" (language with 3-digit UN M.49 area code)
+ // "zh-Hans" (language with ISO 15924 script designator)
+ //
+ // In the case of region designators (alpha-2 or UN M.49), we convert
+ // to our locale string format by changing '-' to '_'. That is, if
+ // the '-' is followed by fewer than 4 chars.
+ char* scriptOrRegion = strchr(languageString, '-');
+ if (scriptOrRegion != NULL && strlen(scriptOrRegion) < 5) {
+ *scriptOrRegion = '_';
- char *(*JRSCopyCanonicalLanguageForPrimaryLanguage)(char *) = dlsym(jrsFwk, "JRSCopyCanonicalLanguageForPrimaryLanguage");
- char *canonicalLanguage = JRSCopyCanonicalLanguageForPrimaryLanguage ? JRSCopyCanonicalLanguageForPrimaryLanguage(primaryLanguage) : NULL;
- free (primaryLanguage);
+ assert((strlen(scriptOrRegion) == 3 &&
+ // '-' followed by a 2 character region designator
+ isalpha(scriptOrRegion[1]) &&
+ isalpha(scriptOrRegion[2])) ||
+ (strlen(scriptOrRegion) == 4 &&
+ // '-' followed by a 3-digit UN M.49 area code
+ isdigit(scriptOrRegion[1]) &&
+ isdigit(scriptOrRegion[2]) &&
+ isdigit(scriptOrRegion[3])));
+ }
+ const char* retVal = languageString;
- return canonicalLanguage;
+ // Special case for Portuguese in Brazil:
+ // The language code needs the "_BR" region code (to distinguish it
+ // from Portuguese in Portugal), but this is missing when using the
+ // "Portuguese (Brazil)" language.
+ // If language is "pt" and the current locale is pt_BR, return pt_BR.
+ char localeString[LOCALEIDLENGTH];
+ if (strcmp(retVal, "pt") == 0 &&
+ CFStringGetCString(CFLocaleGetIdentifier(CFLocaleCopyCurrent()),
+ localeString, LOCALEIDLENGTH, CFStringGetSystemEncoding()) &&
+ strcmp(localeString, "pt_BR") == 0) {
+ retVal = localeString;
+ }
+ return strdup(retVal);
}
break;
default:
@@ -92,14 +132,6 @@
char *setupMacOSXLocale(int cat) {
char * ret = getMacOSXLocale(cat);
- if (cat == LC_MESSAGES && ret != NULL) {
- void *jrsFwk = getJRSFramework();
- if (jrsFwk != NULL) {
- void (*JRSSetDefaultLocalization)(char *) = dlsym(jrsFwk, "JRSSetDefaultLocalization");
- if (JRSSetDefaultLocalization) JRSSetDefaultLocalization(ret);
- }
- }
-
if (ret == NULL) {
return getPosixLocale(cat);
} else {
@@ -126,26 +158,51 @@
return 0;
}
+// 10.9 SDK does not include the NSOperatingSystemVersion struct.
+// For now, create our own
+typedef struct {
+ NSInteger majorVersion;
+ NSInteger minorVersion;
+ NSInteger patchVersion;
+} OSVerStruct;
+
void setOSNameAndVersion(java_props_t *sprops) {
- /* Don't rely on JRSCopyOSName because there's no guarantee the value will
- * remain the same, or even if the JRS functions will continue to be part of
- * Mac OS X. So hardcode os_name, and fill in os_version if we can.
- */
+ // Hardcode os_name, and fill in os_version
sprops->os_name = strdup("Mac OS X");
- void *jrsFwk = getJRSFramework();
- if (jrsFwk != NULL) {
- char *(*copyOSVersion)() = dlsym(jrsFwk, "JRSCopyOSVersion");
- if (copyOSVersion != NULL) {
- sprops->os_version = copyOSVersion();
- return;
+ char* osVersionCStr = NULL;
+ // Mac OS 10.9 includes the [NSProcessInfo operatingSystemVersion] function,
+ // but it's not in the 10.9 SDK. So, call it via objc_msgSend_stret.
+ if ([[NSProcessInfo processInfo] respondsToSelector:@selector(operatingSystemVersion)]) {
+ OSVerStruct (*procInfoFn)(id rec, SEL sel) = (OSVerStruct(*)(id, SEL))objc_msgSend_stret;
+ OSVerStruct osVer = procInfoFn([NSProcessInfo processInfo],
+ @selector(operatingSystemVersion));
+ NSString *nsVerStr = [NSString stringWithFormat:@"%ld.%ld.%ld",
+ (long)osVer.majorVersion, (long)osVer.minorVersion, (long)osVer.patchVersion];
+ // Copy out the char*
+ osVersionCStr = strdup([nsVerStr UTF8String]);
+ }
+ // Fallback if running on pre-10.9 Mac OS
+ if (osVersionCStr == NULL) {
+ NSDictionary *version = [NSDictionary dictionaryWithContentsOfFile :
+ @"/System/Library/CoreServices/SystemVersion.plist"];
+ if (version != NULL) {
+ NSString *nsVerStr = [version objectForKey : @"ProductVersion"];
+ if (nsVerStr != NULL) {
+ osVersionCStr = strdup([nsVerStr UTF8String]);
+ }
}
}
- sprops->os_version = strdup("Unknown");
+ if (osVersionCStr == NULL) {
+ osVersionCStr = strdup("Unknown");
+ }
+ sprops->os_version = osVersionCStr;
}
-static Boolean getProxyInfoForProtocol(CFDictionaryRef inDict, CFStringRef inEnabledKey, CFStringRef inHostKey, CFStringRef inPortKey, CFStringRef *outProxyHost, int *ioProxyPort) {
+static Boolean getProxyInfoForProtocol(CFDictionaryRef inDict, CFStringRef inEnabledKey,
+ CFStringRef inHostKey, CFStringRef inPortKey,
+ CFStringRef *outProxyHost, int *ioProxyPort) {
/* See if the proxy is enabled. */
CFNumberRef cf_enabled = CFDictionaryGetValue(inDict, inEnabledKey);
if (cf_enabled == NULL) {
--- a/jdk/src/java.base/share/classes/java/io/BufferedInputStream.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/io/BufferedInputStream.java Fri Jul 01 16:55:44 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1994, 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
@@ -359,10 +359,10 @@
* See the general contract of the <code>skip</code>
* method of <code>InputStream</code>.
*
- * @exception IOException if the stream does not support seek,
- * or if this input stream has been closed by
- * invoking its {@link #close()} method, or an
- * I/O error occurs.
+ * @throws IOException if this input stream has been closed by
+ * invoking its {@link #close()} method,
+ * {@code in.skip(n)} throws an IOException,
+ * or an I/O error occurs.
*/
public synchronized long skip(long n) throws IOException {
getBufIfOpen(); // Check for closed stream
--- a/jdk/src/java.base/share/classes/java/io/FilterInputStream.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/io/FilterInputStream.java Fri Jul 01 16:55:44 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1994, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1994, 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
@@ -144,8 +144,7 @@
*
* @param n the number of bytes to be skipped.
* @return the actual number of bytes skipped.
- * @exception IOException if the stream does not support seek,
- * or if some other I/O error occurs.
+ * @throws IOException if {@code in.skip(n)} throws an IOException.
*/
public long skip(long n) throws IOException {
return in.skip(n);
--- a/jdk/src/java.base/share/classes/java/io/InputStream.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/io/InputStream.java Fri Jul 01 16:55:44 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1994, 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
@@ -325,7 +325,7 @@
* returns 0, and no bytes are skipped. Subclasses may handle the negative
* value differently.
*
- * <p> The <code>skip</code> method of this class creates a
+ * <p> The <code>skip</code> method implementation of this class creates a
* byte array and then repeatedly reads into it until <code>n</code> bytes
* have been read or the end of the stream has been reached. Subclasses are
* encouraged to provide a more efficient implementation of this method.
@@ -333,8 +333,7 @@
*
* @param n the number of bytes to be skipped.
* @return the actual number of bytes skipped.
- * @exception IOException if the stream does not support seek,
- * or if some other I/O error occurs.
+ * @throws IOException if an I/O error occurs.
*/
public long skip(long n) throws IOException {
--- a/jdk/src/java.base/share/classes/java/io/PushbackInputStream.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/io/PushbackInputStream.java Fri Jul 01 16:55:44 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1994, 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
@@ -291,10 +291,10 @@
*
* @param n {@inheritDoc}
* @return {@inheritDoc}
- * @exception IOException if the stream does not support seek,
- * or the stream has been closed by
- * invoking its {@link #close()} method,
- * or an I/O error occurs.
+ * @throws IOException if the stream has been closed by
+ * invoking its {@link #close()} method,
+ * {@code in.skip(n)} throws an IOException,
+ * or an I/O error occurs.
* @see java.io.FilterInputStream#in
* @see java.io.InputStream#skip(long n)
* @since 1.2
--- a/jdk/src/java.base/share/classes/java/lang/ApplicationShutdownHooks.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/ApplicationShutdownHooks.java Fri Jul 01 16:55:44 2016 -0700
@@ -102,9 +102,13 @@
hook.start();
}
for (Thread hook : threads) {
- try {
- hook.join();
- } catch (InterruptedException x) { }
+ while (true) {
+ try {
+ hook.join();
+ break;
+ } catch (InterruptedException ignored) {
+ }
+ }
}
}
}
--- a/jdk/src/java.base/share/classes/java/lang/Runtime.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/Runtime.java Fri Jul 01 16:55:44 2016 -0700
@@ -27,8 +27,6 @@
import java.io.*;
import java.math.BigInteger;
-import java.util.AbstractList;
-import java.util.Arrays;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -36,11 +34,9 @@
import java.util.Collections;
import java.util.List;
import java.util.Optional;
-import java.util.RandomAccess;
import java.util.StringTokenizer;
import jdk.internal.reflect.CallerSensitive;
import jdk.internal.reflect.Reflection;
-import sun.security.action.GetPropertyAction;
/**
* Every Java application has a single instance of class
@@ -941,8 +937,9 @@
*/
public static Version version() {
if (version == null) {
- version = Version.parse(
- GetPropertyAction.privilegedGetProperty("java.runtime.version"));
+ version = new Version(VersionProps.versionNumbers(),
+ VersionProps.pre(), VersionProps.build(),
+ VersionProps.optional());
}
return version;
}
@@ -1084,86 +1081,12 @@
private final Optional<Integer> build;
private final Optional<String> optional;
-
- // $VNUM(-$PRE)?(\+($BUILD)?(\-$OPT)?)?
- // RE limits the format of version strings
- // ([1-9][0-9]*(?:(?:\.0)*\.[1-9][0-9]*)*)(?:-([a-zA-Z0-9]+))?(?:(\+)(0|[1-9][0-9]*)?)?(?:-([-a-zA-Z0-9.]+))?
-
- private static final String VNUM
- = "(?<VNUM>[1-9][0-9]*(?:(?:\\.0)*\\.[1-9][0-9]*)*)";
- private static final String VNUM_GROUP = "VNUM";
-
- private static final String PRE = "(?:-(?<PRE>[a-zA-Z0-9]+))?";
- private static final String PRE_GROUP = "PRE";
-
- private static final String BUILD
- = "(?:(?<PLUS>\\+)(?<BUILD>0|[1-9][0-9]*)?)?";
- private static final String PLUS_GROUP = "PLUS";
- private static final String BUILD_GROUP = "BUILD";
-
- private static final String OPT = "(?:-(?<OPT>[-a-zA-Z0-9.]+))?";
- private static final String OPT_GROUP = "OPT";
-
- private static final String VSTR_FORMAT
- = "^" + VNUM + PRE + BUILD + OPT + "$";
- private static final Pattern VSTR_PATTERN = Pattern.compile(VSTR_FORMAT);
-
- /**
- * Constructs a valid <a href="verStr">version string</a> containing
- * a <a href="#verNum">version number</a> followed by pre-release and
- * build information.
- *
- * @param s
- * A string to be interpreted as a version
- *
- * @throws IllegalArgumentException
- * If the given string cannot be interpreted as a valid
- * version
- *
- * @throws NullPointerException
- * If {@code s} is {@code null}
- *
- * @throws NumberFormatException
- * If an element of the version number or the build number
- * cannot be represented as an {@link Integer}
- */
- private Version(String s) {
- if (s == null)
- throw new NullPointerException();
-
- Matcher m = VSTR_PATTERN.matcher(s);
- if (!m.matches())
- throw new IllegalArgumentException("Invalid version string: '"
- + s + "'");
-
- // $VNUM is a dot-separated list of integers of arbitrary length
- List<Integer> list = new ArrayList<>();
- for (String i : m.group(VNUM_GROUP).split("\\."))
- list.add(Integer.parseInt(i));
- version = Collections.unmodifiableList(list);
-
- pre = Optional.ofNullable(m.group(PRE_GROUP));
-
- String b = m.group(BUILD_GROUP);
- // $BUILD is an integer
- build = (b == null)
- ? Optional.<Integer>empty()
- : Optional.ofNullable(Integer.parseInt(b));
-
- optional = Optional.ofNullable(m.group(OPT_GROUP));
-
- // empty '+'
- if ((m.group(PLUS_GROUP) != null) && !build.isPresent()) {
- if (optional.isPresent()) {
- if (pre.isPresent())
- throw new IllegalArgumentException("'+' found with"
- + " pre-release and optional components:'" + s
- + "'");
- } else {
- throw new IllegalArgumentException("'+' found with neither"
- + " build or optional components: '" + s + "'");
- }
- }
+ Version(List<Integer> version, Optional<String> pre,
+ Optional<Integer> build, Optional<String> optional) {
+ this.version = Collections.unmodifiableList(version);
+ this.pre = pre;
+ this.build = build;
+ this.optional = optional;
}
/**
@@ -1189,7 +1112,7 @@
* @return The Version of the given string
*/
public static Version parse(String s) {
- return new Version(s);
+ return VersionBuilder.parse(s);
}
/**
@@ -1518,4 +1441,86 @@
}
}
+ private static class VersionBuilder {
+ // $VNUM(-$PRE)?(\+($BUILD)?(\-$OPT)?)?
+ // RE limits the format of version strings
+ // ([1-9][0-9]*(?:(?:\.0)*\.[1-9][0-9]*)*)(?:-([a-zA-Z0-9]+))?(?:(\+)(0|[1-9][0-9]*)?)?(?:-([-a-zA-Z0-9.]+))?
+
+ private static final String VNUM
+ = "(?<VNUM>[1-9][0-9]*(?:(?:\\.0)*\\.[1-9][0-9]*)*)";
+ private static final String VNUM_GROUP = "VNUM";
+
+ private static final String PRE = "(?:-(?<PRE>[a-zA-Z0-9]+))?";
+ private static final String PRE_GROUP = "PRE";
+
+ private static final String BUILD
+ = "(?:(?<PLUS>\\+)(?<BUILD>0|[1-9][0-9]*)?)?";
+ private static final String PLUS_GROUP = "PLUS";
+ private static final String BUILD_GROUP = "BUILD";
+
+ private static final String OPT = "(?:-(?<OPT>[-a-zA-Z0-9.]+))?";
+ private static final String OPT_GROUP = "OPT";
+
+ private static final String VSTR_FORMAT
+ = "^" + VNUM + PRE + BUILD + OPT + "$";
+ private static final Pattern VSTR_PATTERN = Pattern.compile(VSTR_FORMAT);
+
+ /**
+ * Constructs a valid <a href="verStr">version string</a> containing
+ * a <a href="#verNum">version number</a> followed by pre-release and
+ * build information.
+ *
+ * @param s
+ * A string to be interpreted as a version
+ *
+ * @throws IllegalArgumentException
+ * If the given string cannot be interpreted as a valid
+ * version
+ *
+ * @throws NullPointerException
+ * If {@code s} is {@code null}
+ *
+ * @throws NumberFormatException
+ * If an element of the version number or the build number
+ * cannot be represented as an {@link Integer}
+ */
+ static Version parse(String s) {
+ if (s == null)
+ throw new NullPointerException();
+
+ Matcher m = VSTR_PATTERN.matcher(s);
+ if (!m.matches())
+ throw new IllegalArgumentException("Invalid version string: '"
+ + s + "'");
+
+ // $VNUM is a dot-separated list of integers of arbitrary length
+ List<Integer> version = new ArrayList<>();
+ for (String i : m.group(VNUM_GROUP).split("\\."))
+ version.add(Integer.parseInt(i));
+
+ Optional<String> pre = Optional.ofNullable(m.group(PRE_GROUP));
+
+ String b = m.group(BUILD_GROUP);
+ // $BUILD is an integer
+ Optional<Integer> build = (b == null)
+ ? Optional.empty()
+ : Optional.of(Integer.parseInt(b));
+
+ Optional<String> optional = Optional.ofNullable(m.group(OPT_GROUP));
+
+ // empty '+'
+ if ((m.group(PLUS_GROUP) != null) && !build.isPresent()) {
+ if (optional.isPresent()) {
+ if (pre.isPresent())
+ throw new IllegalArgumentException("'+' found with"
+ + " pre-release and optional components:'" + s
+ + "'");
+ } else {
+ throw new IllegalArgumentException("'+' found with neither"
+ + " build or optional components: '" + s + "'");
+ }
+ }
+ return new Version(version, pre, build, optional);
+ }
+ }
}
--- a/jdk/src/java.base/share/classes/java/lang/StringLatin1.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/StringLatin1.java Fri Jul 01 16:55:44 2016 -0700
@@ -137,8 +137,8 @@
char c1 = (char) CharacterDataLatin1.instance.toUpperCase(getChar(value, k));
char c2 = (char) CharacterDataLatin1.instance.toUpperCase(getChar(other, k));
if (c1 != c2) {
- c1 = (char) CharacterDataLatin1.instance.toLowerCase(c1);
- c2 = (char) CharacterDataLatin1.instance.toLowerCase(c2);
+ c1 = Character.toLowerCase(c1);
+ c2 = Character.toLowerCase(c2);
if (c1 != c2) {
return c1 - c2;
}
--- a/jdk/src/java.base/share/classes/java/lang/StringUTF16.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/StringUTF16.java Fri Jul 01 16:55:44 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
@@ -259,17 +259,7 @@
@HotSpotIntrinsicCandidate
public static int compareToLatin1(byte[] value, byte[] other) {
- int len1 = length(value);
- int len2 = StringLatin1.length(other);
- int lim = Math.min(len1, len2);
- for (int k = 0; k < lim; k++) {
- char c1 = getChar(value, k);
- char c2 = StringLatin1.getChar(other, k);
- if (c1 != c2) {
- return c1 - c2;
- }
- }
- return len1 - len2;
+ return -StringLatin1.compareToUTF16(other, value);
}
public static int compareToCI(byte[] value, byte[] other) {
@@ -295,25 +285,7 @@
}
public static int compareToCI_Latin1(byte[] value, byte[] other) {
- int len1 = length(value);
- int len2 = StringLatin1.length(other);
- int lim = Math.min(len1, len2);
- for (int k = 0; k < lim; k++) {
- char c1 = getChar(value, k);
- char c2 = StringLatin1.getChar(other, k);
- if (c1 != c2) {
- c1 = Character.toUpperCase(c1);
- c2 = Character.toUpperCase(c2);
- if (c1 != c2) {
- c1 = Character.toLowerCase(c1);
- c2 = Character.toLowerCase(c2);
- if (c1 != c2) {
- return c1 - c2;
- }
- }
- }
- }
- return len1 - len2;
+ return -StringLatin1.compareToCI_UTF16(other, value);
}
public static int hashCode(byte[] value) {
@@ -566,24 +538,7 @@
public static boolean regionMatchesCI_Latin1(byte[] value, int toffset,
byte[] other, int ooffset,
int len) {
- int last = toffset + len;
- while (toffset < last) {
- char c1 = getChar(value, toffset++);
- char c2 = (char)(other[ooffset++] & 0xff);
- if (c1 == c2) {
- continue;
- }
- char u1 = Character.toUpperCase(c1);
- char u2 = Character.toUpperCase(c2);
- if (u1 == u2) {
- continue;
- }
- if (Character.toLowerCase(u1) == Character.toLowerCase(u2)) {
- continue;
- }
- return false;
- }
- return true;
+ return StringLatin1.regionMatchesCI_UTF16(other, ooffset, value, toffset, len);
}
public static String toLowerCase(String str, byte[] value, Locale locale) {
--- a/jdk/src/java.base/share/classes/java/lang/VersionProps.java.template Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/VersionProps.java.template Fri Jul 01 16:55:44 2016 -0700
@@ -26,6 +26,9 @@
package java.lang;
import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
class VersionProps {
@@ -42,6 +45,18 @@
private static final String java_runtime_version =
"@@VERSION_STRING@@";
+ private static final String VERSION_NUMBER =
+ "@@VERSION_NUMBER@@";
+
+ private static final String VERSION_BUILD =
+ "@@VERSION_BUILD@@";
+
+ private static final String VERSION_PRE =
+ "@@VERSION_PRE@@";
+
+ private static final String VERSION_OPT =
+ "@@VERSION_OPT@@";
+
static {
init();
}
@@ -52,6 +67,44 @@
System.setProperty("java.runtime.name", java_runtime_name);
}
+ static List<Integer> versionNumbers() {
+ List<Integer> versionNumbers = new ArrayList<>(4);
+ int prevIndex = 0;
+ int index = VERSION_NUMBER.indexOf('.');
+ while (index > 0) {
+ versionNumbers.add(
+ Integer.parseInt(VERSION_NUMBER, prevIndex, index, 10));
+ prevIndex = index + 1; // Skip the period
+ index = VERSION_NUMBER.indexOf('.', prevIndex);
+ }
+ versionNumbers.add(Integer.parseInt(VERSION_NUMBER,
+ prevIndex, VERSION_NUMBER.length(), 10));
+ return versionNumbers;
+ }
+
+ static Optional<String> pre() {
+ return optionalOf(VERSION_PRE);
+ }
+
+ static Optional<Integer> build() {
+ return VERSION_BUILD.isEmpty() ?
+ Optional.empty() :
+ Optional.of(Integer.parseInt(VERSION_BUILD));
+ }
+
+ static Optional<String> optional() {
+ return optionalOf(VERSION_OPT);
+ }
+
+ // Treat empty strings as value not being present
+ private static Optional<String> optionalOf(String value) {
+ if (!value.isEmpty()) {
+ return Optional.of(value);
+ } else {
+ return Optional.empty();
+ }
+ }
+
/**
* In case you were wondering this method is called by java -version.
* Sad that it prints to stderr; would be nicer if default printed on
@@ -111,4 +164,4 @@
java_vm_info + ")");
}
-}
\ No newline at end of file
+}
--- a/jdk/src/java.base/share/classes/java/lang/invoke/BoundMethodHandle.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/BoundMethodHandle.java Fri Jul 01 16:55:44 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"); }
}
--- a/jdk/src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java Fri Jul 01 16:55:44 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.
* <p>
@@ -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<String,Integer> 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.
+ * <p>
+ * The pattern looks like (Cf. MethodHandleImpl.makeTryFinally):
+ * <blockquote><pre>{@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
+ * }</pre></blockquote>
+ * <p>
+ * It is compiled into bytecode equivalent to the following code:
+ * <blockquote><pre>{@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;
+ * }</pre></blockquote>
+ * <p>
+ * 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}):
+ * <blockquote><pre>{@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)
+ * }</pre></blockquote>
+ */
+ 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.
+ * <p>
+ * The pattern looks like (Cf. MethodHandleImpl.loop):
+ * <blockquote><pre>{@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
+ * }</pre></blockquote>
+ * <p>
+ * 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.
+ * <p>
+ * 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.
+ * <blockquote><pre>{@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: ...
+ * }</pre></blockquote>
+ * <p>
+ * 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}.
+ * <blockquote><pre>{@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
+ * }</pre></blockquote>
+ * <p>
+ * 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}.
+ * <blockquote><pre>{@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
+ * }</pre></blockquote>
+ */
+ 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);
}
--- a/jdk/src/java.base/share/classes/java/lang/invoke/LambdaForm.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/LambdaForm.java Fri Jul 01 16:55:44 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.<invoker>(<args>, 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();
}
--- a/jdk/src/java.base/share/classes/java/lang/invoke/LambdaFormBuffer.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/LambdaFormBuffer.java Fri Jul 01 16:55:44 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];
--- a/jdk/src/java.base/share/classes/java/lang/invoke/LambdaFormEditor.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/LambdaFormEditor.java Fri Jul 01 16:55:44 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());
--- a/jdk/src/java.base/share/classes/java/lang/invoke/MemberName.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/MemberName.java Fri Jul 01 16:55:44 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)
--- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java Fri Jul 01 16:55:44 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<Class<?>> targs, List<Class<?>> tvars, List<MethodHandle> init,
- List<MethodHandle> step, List<MethodHandle> pred, List<MethodHandle> fini) {
- MethodHandle[] ainit = toArrayArgs(init);
- MethodHandle[] astep = toArrayArgs(step);
- MethodHandle[] apred = toArrayArgs(pred);
- MethodHandle[] afini = toArrayArgs(fini);
+ static MethodHandle makeLoop(Class<?> tloop, List<Class<?>> targs, List<MethodHandle> init, List<MethodHandle> step,
+ List<MethodHandle> pred, List<MethodHandle> 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<MethodHandle> 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}):
+ * <blockquote><pre>{@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
+ * }</pre></blockquote>
+ * <p>
+ * {@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()}).
+ * <p>
+ * 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.
+ * <p>
+ * 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<MethodHandle> 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<Class<?>> argTypes) {
- MethodHandle tf = getConstantHandle(type == void.class ? MH_tryFinallyVoidExec : MH_tryFinallyExec);
+ static MethodHandle makeTryFinally(MethodHandle target, MethodHandle cleanup, Class<?> rtype, List<Class<?>> 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}):
+ * <blockquote><pre>{@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
+ * }</pre></blockquote>
+ * <p>
+ * {@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()}).
+ * <p>
+ * 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));
--- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandles.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandles.java Fri Jul 01 16:55:44 2016 -0700
@@ -4233,7 +4233,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<MethodHandle> fillParameterTypes(List<MethodHandle> hs, final List<Class<?>> targetParams) {
@@ -4740,10 +4740,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);
}
/**
--- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodTypeForm.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodTypeForm.java Fri Jul 01 16:55:44 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.
--- a/jdk/src/java.base/share/classes/java/lang/invoke/VarHandle.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/VarHandle.java Fri Jul 01 16:55:44 2016 -0700
@@ -1275,8 +1275,6 @@
this.methodName = methodName;
this.at = at;
- // Assert method name is correctly derived from value name
- assert methodName.equals(toMethodName(name()));
// Assert that return type is correct
// Otherwise, when disabled avoid using reflection
assert at.returnType == getReturnType(methodName);
@@ -1311,16 +1309,6 @@
throw new IllegalArgumentException("No AccessMode value for method name " + methodName);
}
- private static String toMethodName(String name) {
- StringBuilder s = new StringBuilder(name.toLowerCase());
- int i;
- while ((i = s.indexOf("_")) != -1) {
- s.deleteCharAt(i);
- s.setCharAt(i, Character.toUpperCase(s.charAt(i)));
- }
- return s.toString();
- }
-
private static Class<?> getReturnType(String name) {
try {
Method m = VarHandle.class.getMethod(name, Object[].class);
--- a/jdk/src/java.base/share/classes/java/net/MulticastSocket.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/net/MulticastSocket.java Fri Jul 01 16:55:44 2016 -0700
@@ -300,8 +300,9 @@
*
* @param mcastaddr is the multicast address to join
*
- * @exception IOException if there is an error joining
- * or when the address is not a multicast address.
+ * @exception IOException if there is an error joining, or when the address
+ * is not a multicast address, or the platform does not support
+ * multicasting
* @exception SecurityException if a security manager exists and its
* {@code checkMulticast} method doesn't allow the join.
*
@@ -384,8 +385,9 @@
* {@link MulticastSocket#setInterface(InetAddress)} or
* {@link MulticastSocket#setNetworkInterface(NetworkInterface)}
*
- * @exception IOException if there is an error joining
- * or when the address is not a multicast address.
+ * @exception IOException if there is an error joining, or when the address
+ * is not a multicast address, or the platform does not support
+ * multicasting
* @exception SecurityException if a security manager exists and its
* {@code checkMulticast} method doesn't allow the join.
* @throws IllegalArgumentException if mcastaddr is null or is a
--- a/jdk/src/java.base/share/classes/java/net/URLPermission.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/net/URLPermission.java Fri Jul 01 16:55:44 2016 -0700
@@ -265,8 +265,14 @@
URLPermission that = (URLPermission)p;
- if (!this.methods.get(0).equals("*") &&
- Collections.indexOfSubList(this.methods, that.methods) == -1) {
+ if (this.methods.isEmpty() && !that.methods.isEmpty()) {
+ return false;
+ }
+
+ if (!this.methods.isEmpty() &&
+ !this.methods.get(0).equals("*") &&
+ Collections.indexOfSubList(this.methods,
+ that.methods) == -1) {
return false;
}
@@ -455,15 +461,11 @@
}
private String actions() {
- StringBuilder b = new StringBuilder();
- for (String s : methods) {
- b.append(s);
+ String b = String.join(",", methods);
+ if (!requestHeaders.isEmpty()) {
+ b += ":" + String.join(",", requestHeaders);
}
- b.append(":");
- for (String s : requestHeaders) {
- b.append(s);
- }
- return b.toString();
+ return b;
}
/**
--- a/jdk/src/java.base/share/classes/java/nio/channels/MulticastChannel.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/nio/channels/MulticastChannel.java Fri Jul 01 16:55:44 2016 -0700
@@ -40,10 +40,11 @@
* address.
*
* <p> In the case of a channel to an {@link StandardProtocolFamily#INET IPv4} socket,
- * the underlying operating system supports <a href="http://www.ietf.org/rfc/rfc2236.txt">
- * <i>RFC 2236: Internet Group Management Protocol, Version 2 (IGMPv2)</i></a>.
- * It may optionally support source filtering as specified by <a
- * href="http://www.ietf.org/rfc/rfc3376.txt"> <i>RFC 3376: Internet Group
+ * the underlying operating system optionally supports
+ * <a href="http://www.ietf.org/rfc/rfc2236.txt"> <i>RFC 2236: Internet Group
+ * Management Protocol, Version 2 (IGMPv2)</i></a>. When IGMPv2 is supported then
+ * the operating system may additionally support source filtering as specified by
+ * <a href="http://www.ietf.org/rfc/rfc3376.txt"> <i>RFC 3376: Internet Group
* Management Protocol, Version 3 (IGMPv3)</i></a>.
* For channels to an {@link StandardProtocolFamily#INET6 IPv6} socket, the equivalent
* standards are <a href="http://www.ietf.org/rfc/rfc2710.txt"> <i>RFC 2710:
@@ -167,7 +168,8 @@
* If the channel already has source-specific membership of the
* group on the interface
* @throws UnsupportedOperationException
- * If the channel's socket is not an Internet Protocol socket
+ * If the channel's socket is not an Internet Protocol socket, or
+ * the platform does not support multicasting
* @throws ClosedChannelException
* If this channel is closed
* @throws IOException
@@ -214,8 +216,9 @@
* If the channel is currently a member of the group on the given
* interface to receive all datagrams
* @throws UnsupportedOperationException
- * If the channel's socket is not an Internet Protocol socket or
- * source filtering is not supported
+ * If the channel's socket is not an Internet Protocol socket, or
+ * source filtering is not supported, or the platform does not
+ * support multicasting
* @throws ClosedChannelException
* If this channel is closed
* @throws IOException
--- a/jdk/src/java.base/share/classes/java/security/Certificate.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/security/Certificate.java Fri Jul 01 16:55:44 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
@@ -60,9 +60,10 @@
* This Certificate interface is entirely deprecated and
* is here to allow for a smooth transition to the new
* package.
+ * This class is subject to removal in a future version of Java SE.
* @see java.security.cert.Certificate
*/
-@Deprecated
+@Deprecated(since="1.2", forRemoval=true)
public interface Certificate {
/**
--- a/jdk/src/java.base/share/classes/java/security/Identity.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/security/Identity.java Fri Jul 01 16:55:44 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 */
--- a/jdk/src/java.base/share/classes/java/security/IdentityScope.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/security/IdentityScope.java Fri Jul 01 16:55:44 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 {
--- a/jdk/src/java.base/share/classes/java/security/Signer.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/security/Signer.java Fri Jul 01 16:55:44 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;
--- a/jdk/src/java.base/share/classes/java/security/acl/Acl.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/security/acl/Acl.java Fri Jul 01 16:55:44 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
@@ -85,9 +85,10 @@
*
* @deprecated This package has been replaced by {@code java.security.Policy}
* and related classes since 1.2.
+ * This class is subject to removal in a future version of Java SE.
*/
-@Deprecated
+@Deprecated(since="9", forRemoval=true)
public interface Acl extends Owner {
/**
--- a/jdk/src/java.base/share/classes/java/security/acl/AclEntry.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/security/acl/AclEntry.java Fri Jul 01 16:55:44 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
@@ -53,8 +53,9 @@
*
* @deprecated This package has been replaced by {@code java.security.Policy}
* and related classes since 1.2.
+ * This class is subject to removal in a future version of Java SE.
*/
-@Deprecated
+@Deprecated(since="9", forRemoval=true)
public interface AclEntry extends Cloneable {
/**
--- a/jdk/src/java.base/share/classes/java/security/acl/AclNotFoundException.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/security/acl/AclNotFoundException.java Fri Jul 01 16:55:44 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
@@ -33,8 +33,9 @@
*
* @deprecated This package has been replaced by {@code java.security.Policy}
* and related classes since 1.2.
+ * This class is subject to removal in a future version of Java SE.
*/
-@Deprecated
+@Deprecated(since="9", forRemoval=true)
public class AclNotFoundException extends Exception {
private static final long serialVersionUID = 5684295034092681791L;
--- a/jdk/src/java.base/share/classes/java/security/acl/Group.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/security/acl/Group.java Fri Jul 01 16:55:44 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
@@ -42,8 +42,9 @@
*
* @deprecated This package has been replaced by {@code java.security.Policy}
* and related classes since 1.2.
+ * This class is subject to removal in a future version of Java SE.
*/
-@Deprecated
+@Deprecated(since="9", forRemoval=true)
public interface Group extends Principal {
/**
--- a/jdk/src/java.base/share/classes/java/security/acl/LastOwnerException.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/security/acl/LastOwnerException.java Fri Jul 01 16:55:44 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
@@ -35,8 +35,9 @@
*
* @deprecated This package has been replaced by {@code java.security.Policy}
* and related classes since 1.2.
+ * This class is subject to removal in a future version of Java SE.
*/
-@Deprecated
+@Deprecated(since="9", forRemoval=true)
public class LastOwnerException extends Exception {
private static final long serialVersionUID = -5141997548211140359L;
--- a/jdk/src/java.base/share/classes/java/security/acl/NotOwnerException.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/security/acl/NotOwnerException.java Fri Jul 01 16:55:44 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
@@ -34,8 +34,9 @@
*
* @deprecated This package has been replaced by {@code java.security.Policy}
* and related classes since 1.2.
+ * This class is subject to removal in a future version of Java SE.
*/
-@Deprecated
+@Deprecated(since="9", forRemoval=true)
public class NotOwnerException extends Exception {
private static final long serialVersionUID = -5555597911163362399L;
--- a/jdk/src/java.base/share/classes/java/security/acl/Owner.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/security/acl/Owner.java Fri Jul 01 16:55:44 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
@@ -38,8 +38,9 @@
*
* @deprecated This package has been replaced by {@code java.security.Policy}
* and related classes since 1.2.
+ * This class is subject to removal in a future version of Java SE.
*/
-@Deprecated
+@Deprecated(since="9", forRemoval=true)
public interface Owner {
/**
--- a/jdk/src/java.base/share/classes/java/security/acl/Permission.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/security/acl/Permission.java Fri Jul 01 16:55:44 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
@@ -34,8 +34,9 @@
*
* @deprecated This package has been replaced by {@code java.security.Policy}
* and related classes since 1.2.
+ * This class is subject to removal in a future version of Java SE.
*/
-@Deprecated
+@Deprecated(since="9", forRemoval=true)
public interface Permission {
/**
--- a/jdk/src/java.base/share/classes/java/security/acl/package-info.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/security/acl/package-info.java Fri Jul 01 16:55:44 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
@@ -27,7 +27,8 @@
* The classes and interfaces in this package have been deprecated. New
* classes should not be added to this package. The {@code java.security}
* package contains suitable replacements. See {@link java.security.Policy}
- * and related classes for details.
+ * and related classes for details. This package is subject to removal in a
+ * future version of Java SE.
*
* @since 1.1
*/
--- a/jdk/src/java.base/share/classes/java/text/DateFormatSymbols.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/text/DateFormatSymbols.java Fri Jul 01 16:55:44 2016 -0700
@@ -221,7 +221,7 @@
* </ul>
* The zone ID is <em>not</em> localized; it's one of the valid IDs of
* the {@link java.util.TimeZone TimeZone} class that are not
- * <a href="../java/util/TimeZone.html#CustomID">custom IDs</a>.
+ * <a href="../util/TimeZone.html#CustomID">custom IDs</a>.
* All other entries are localized names.
* @see java.util.TimeZone
* @serial
--- a/jdk/src/java.base/share/classes/java/time/Instant.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/time/Instant.java Fri Jul 01 16:55:44 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);
}
--- a/jdk/src/java.base/share/classes/java/util/Formatter.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/util/Formatter.java Fri Jul 01 16:55:44 2016 -0700
@@ -3895,8 +3895,7 @@
TimeZone tz = t.getTimeZone();
sb.append(tz.getDisplayName((t.get(Calendar.DST_OFFSET) != 0),
TimeZone.SHORT,
- Objects.requireNonNullElse(l,
- Locale.getDefault(Locale.Category.FORMAT))));
+ Objects.requireNonNullElse(l, Locale.US)));
break;
}
@@ -3904,8 +3903,7 @@
case DateTime.NAME_OF_DAY_ABBREV: // 'a'
case DateTime.NAME_OF_DAY: { // 'A'
int i = t.get(Calendar.DAY_OF_WEEK);
- Locale lt = Objects.requireNonNullElse(l,
- Locale.getDefault(Locale.Category.FORMAT));
+ Locale lt = Objects.requireNonNullElse(l, Locale.US);
DateFormatSymbols dfs = DateFormatSymbols.getInstance(lt);
if (c == DateTime.NAME_OF_DAY)
sb.append(dfs.getWeekdays()[i]);
@@ -3917,8 +3915,7 @@
case DateTime.NAME_OF_MONTH_ABBREV_X: // 'h' -- same b
case DateTime.NAME_OF_MONTH: { // 'B'
int i = t.get(Calendar.MONTH);
- Locale lt = Objects.requireNonNullElse(l,
- Locale.getDefault(Locale.Category.FORMAT));
+ Locale lt = Objects.requireNonNullElse(l, Locale.US);
DateFormatSymbols dfs = DateFormatSymbols.getInstance(lt);
if (c == DateTime.NAME_OF_MONTH)
sb.append(dfs.getMonths()[i]);
--- a/jdk/src/java.base/share/classes/java/util/Scanner.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/util/Scanner.java Fri Jul 01 16:55:44 2016 -0700
@@ -925,7 +925,6 @@
needInput = true;
return null;
}
-
// Must look for next delims. Simply attempting to match the
// pattern at this point may find a match but it might not be
// the first longest match because of missing input, or it might
@@ -941,16 +940,13 @@
foundNextDelim = matcher.find();
}
if (foundNextDelim) {
- // In two rare cases that more input might cause the match to be
- // lost or change.
- // (1) if requireEnd() is true, more input might cause the match
- // to be lost, we must wait for more input.
- // (2) while hitting the end is okay IF the match does not
- // go away AND the beginning of the next delims does not change
- // (we don't care if they potentially extend further). But it's
- // possible that more input could cause the beginning of the
- // delims change, so have to wait for more input as well.
- if ((matcher.requireEnd() || matcher.hitEnd()) && !sourceClosed) {
+ // In the rare case that more input could cause the match
+ // to be lost and there is more input coming we must wait
+ // for more input. Note that hitting the end is okay as long
+ // as the match cannot go away. It is the beginning of the
+ // next delims we want to be sure about, we don't care if
+ // they potentially extend further.
+ if (matcher.requireEnd() && !sourceClosed) {
needInput = true;
return null;
}
--- a/jdk/src/java.base/share/classes/java/util/zip/ZipFile.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/java/util/zip/ZipFile.java Fri Jul 01 16:55:44 2016 -0700
@@ -295,13 +295,13 @@
* @throws IllegalStateException if the zip file has been closed
*/
public ZipEntry getEntry(String name) {
-
Objects.requireNonNull(name, "name");
synchronized (this) {
ensureOpen();
- int pos = zsrc.getEntryPos(zc.getBytes(name), true);
+ byte[] bname = zc.getBytes(name);
+ int pos = zsrc.getEntryPos(bname, true);
if (pos != -1) {
- return getZipEntry(name, pos);
+ return getZipEntry(name, bname, pos);
}
}
return null;
@@ -492,7 +492,7 @@
throw new NoSuchElementException();
}
// each "entry" has 3 ints in table entries
- return getZipEntry(null, zsrc.getEntryPos(i++ * 3));
+ return getZipEntry(null, null, zsrc.getEntryPos(i++ * 3));
}
}
@@ -527,13 +527,17 @@
}
/* Checks ensureOpen() before invoke this method */
- private ZipEntry getZipEntry(String name, int pos) {
+ private ZipEntry getZipEntry(String name, byte[] bname, int pos) {
byte[] cen = zsrc.cen;
int nlen = CENNAM(cen, pos);
int elen = CENEXT(cen, pos);
int clen = CENCOM(cen, pos);
int flag = CENFLG(cen, pos);
- if (name == null) {
+ if (name == null || bname.length != nlen) {
+ // to use the entry name stored in cen, if the passed in name is
+ // (1) null, invoked from iterator, or
+ // (2) not equal to the name stored, a slash is appended during
+ // getEntryPos() search.
if (!zc.isUTF8() && (flag & EFS) != 0) {
name = zc.toStringUTF8(cen, pos + CENHDR, nlen);
} else {
--- a/jdk/src/java.base/share/classes/javax/crypto/Cipher.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/javax/crypto/Cipher.java Fri Jul 01 16:55:44 2016 -0700
@@ -93,7 +93,7 @@
* provide authenticity assurances for both confidential data and
* Additional Associated Data (AAD) that is not encrypted. (Please see
* <a href="http://www.ietf.org/rfc/rfc5116.txt"> RFC 5116 </a> for more
- * information on AEAD and AEAD algorithms such as GCM/CCM.) Both
+ * information on AEAD and AAD algorithms such as GCM/CCM.) Both
* confidential and AAD data can be used when calculating the
* authentication tag (similar to a {@link Mac}). This tag is appended
* to the ciphertext during encryption, and is verified on decryption.
@@ -1186,7 +1186,7 @@
* determined from the given key, or if the given key has a keysize that
* exceeds the maximum allowable keysize (as determined from the
* configured jurisdiction policy files).
- * @throws UnsupportedOperationException if (@code opmode} is
+ * @throws UnsupportedOperationException if {@code opmode} is
* {@code WRAP_MODE} or {@code UNWRAP_MODE} but the mode is not implemented
* by the underlying {@code CipherSpi}.
*/
@@ -1239,7 +1239,7 @@
* determined from the given key, or if the given key has a keysize that
* exceeds the maximum allowable keysize (as determined from the
* configured jurisdiction policy files).
- * @throws UnsupportedOperationException if (@code opmode} is
+ * @throws UnsupportedOperationException if {@code opmode} is
* {@code WRAP_MODE} or {@code UNWRAP_MODE} but the mode is not implemented
* by the underlying {@code CipherSpi}.
*/
@@ -1325,7 +1325,7 @@
* algorithm parameters imply a cryptographic strength that would exceed
* the legal limits (as determined from the configured jurisdiction
* policy files).
- * @throws UnsupportedOperationException if (@code opmode} is
+ * @throws UnsupportedOperationException if {@code opmode} is
* {@code WRAP_MODE} or {@code UNWRAP_MODE} but the mode is not implemented
* by the underlying {@code CipherSpi}.
*/
@@ -1386,7 +1386,7 @@
* algorithm parameters imply a cryptographic strength that would exceed
* the legal limits (as determined from the configured jurisdiction
* policy files).
- * @throws UnsupportedOperationException if (@code opmode} is
+ * @throws UnsupportedOperationException if {@code opmode} is
* {@code WRAP_MODE} or {@code UNWRAP_MODE} but the mode is not implemented
* by the underlying {@code CipherSpi}.
*/
@@ -1468,7 +1468,7 @@
* algorithm parameters imply a cryptographic strength that would exceed
* the legal limits (as determined from the configured jurisdiction
* policy files).
- * @throws UnsupportedOperationException if (@code opmode} is
+ * @throws UnsupportedOperationException if {@code opmode} is
* {@code WRAP_MODE} or {@code UNWRAP_MODE} but the mode is not implemented
* by the underlying {@code CipherSpi}.
*/
@@ -1529,7 +1529,7 @@
* algorithm parameters imply a cryptographic strength that would exceed
* the legal limits (as determined from the configured jurisdiction
* policy files).
- * @throws UnsupportedOperationException if (@code opmode} is
+ * @throws UnsupportedOperationException if {@code opmode} is
* {@code WRAP_MODE} or {@code UNWRAP_MODE} but the mode is not implemented
* by the underlying {@code CipherSpi}.
*/
@@ -1616,7 +1616,7 @@
* in the given certificate has a keysize that exceeds the maximum
* allowable keysize (as determined by the configured jurisdiction policy
* files).
- * @throws UnsupportedOperationException if (@code opmode} is
+ * @throws UnsupportedOperationException if {@code opmode} is
* {@code WRAP_MODE} or {@code UNWRAP_MODE} but the mode is not implemented
* by the underlying {@code CipherSpi}.
*/
@@ -1686,7 +1686,7 @@
* in the given certificate has a keysize that exceeds the maximum
* allowable keysize (as determined by the configured jurisdiction policy
* files).
- * @throws UnsupportedOperationException if (@code opmode} is
+ * @throws UnsupportedOperationException if {@code opmode} is
* {@code WRAP_MODE} or {@code UNWRAP_MODE} but the mode is not implemented
* by the underlying {@code CipherSpi}.
*/
--- a/jdk/src/java.base/share/classes/jdk/internal/jrtfs/ExplodedImage.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/jdk/internal/jrtfs/ExplodedImage.java Fri Jul 01 16:55:44 2016 -0700
@@ -25,6 +25,7 @@
package jdk.internal.jrtfs;
import java.io.IOException;
+import java.io.UncheckedIOException;
import java.nio.file.DirectoryStream;
import java.nio.file.FileSystem;
import java.nio.file.FileSystemException;
@@ -138,6 +139,15 @@
}
return children;
}
+
+ @Override
+ public long size() {
+ try {
+ return isDirectory() ? 0 : Files.size(path);
+ } catch (IOException ex) {
+ throw new UncheckedIOException(ex);
+ }
+ }
}
@Override
--- a/jdk/src/java.base/share/classes/jdk/internal/misc/Unsafe.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/jdk/internal/misc/Unsafe.java Fri Jul 01 16:55:44 2016 -0700
@@ -318,24 +318,6 @@
*/
public native Object getUncompressedObject(long address);
- /**
- * Fetches the {@link java.lang.Class} Java mirror for the given native
- * metaspace {@code Klass} pointer.
- *
- * @param metaspaceKlass a native metaspace {@code Klass} pointer
- * @return the {@link java.lang.Class} Java mirror
- */
- public native Class<?> getJavaMirror(long metaspaceKlass);
-
- /**
- * Fetches a native metaspace {@code Klass} pointer for the given Java
- * object.
- *
- * @param o Java heap object for which to fetch the class pointer
- * @return a native metaspace {@code Klass} pointer
- */
- public native long getKlassPointer(Object o);
-
// These work on values in the C heap.
/**
--- a/jdk/src/java.base/share/classes/jdk/internal/util/jar/JarIndex.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/jdk/internal/util/jar/JarIndex.java Fri Jul 01 16:55:44 2016 -0700
@@ -222,7 +222,8 @@
// Any files in META-INF/ will be indexed explicitly
if (fileName.equals("META-INF/") ||
fileName.equals(INDEX_NAME) ||
- fileName.equals(JarFile.MANIFEST_NAME))
+ fileName.equals(JarFile.MANIFEST_NAME) ||
+ fileName.startsWith("META-INF/versions/"))
continue;
if (!metaInfFilenames || !fileName.startsWith("META-INF/")) {
--- a/jdk/src/java.base/share/classes/sun/launcher/LauncherHelper.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/sun/launcher/LauncherHelper.java Fri Jul 01 16:55:44 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);
}
--- a/jdk/src/java.base/share/classes/sun/launcher/resources/launcher.properties Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/sun/launcher/resources/launcher.properties Fri Jul 01 16:55:44 2016 -0700
@@ -60,6 +60,9 @@
\ limit the universe of observable modules\n\
\ -listmods[:<modulename>[,<modulename>...]]\n\
\ list the observable modules and exit\n\
+\ --dry-run create VM but do not execute main method.\n\
+\ This --dry-run option may be useful for validating the\n\
+\ command-line options such as the module system configuration.\n\
\ -D<name>=<value>\n\
\ set a system property\n\
\ -verbose:[class|gc|jni]\n\
@@ -138,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=<application name>"\n\
+\ -Xdock:name=<application name>\n\
\ override default application name displayed in dock\n\
\ -Xdock:icon=<path to icon file>\n\
\ override default icon displayed in dock\n\n
--- a/jdk/src/java.base/share/classes/sun/net/NetworkClient.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/sun/net/NetworkClient.java Fri Jul 01 16:55:44 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1994, 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
@@ -165,8 +165,10 @@
// server & port will be the proxy address and port
s = new Socket(Proxy.NO_PROXY);
}
- } else
+ } else {
s = createSocket();
+ }
+
// Instance specific timeouts do have priority, that means
// connectTimeout & readTimeout (-1 means not set)
// Then global default timeouts
@@ -194,7 +196,7 @@
* to create the socket.
*/
protected Socket createSocket() throws IOException {
- return new java.net.Socket();
+ return new java.net.Socket(Proxy.NO_PROXY); // direct connection
}
protected InetAddress getLocalAddress() throws IOException {
--- a/jdk/src/java.base/share/classes/sun/net/www/protocol/netdoc/Handler.java Fri Jul 01 12:32:21 2016 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,97 +0,0 @@
-/*
- * Copyright (c) 1996, 1998, Oracle and/or its affiliates. All rights reserved.
- * 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.
- */
-
-/*-
- * netdoc urls point either into the local filesystem or externally
- * through an http url, with network documents being preferred. Useful for
- * FAQs & other documents which are likely to be changing over time at the
- * central site, and where the user will want the most recent edition.
- *
- * @author Steven B. Byrne
- */
-
-package sun.net.www.protocol.netdoc;
-
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.MalformedURLException;
-import java.net.URLStreamHandler;
-import java.io.InputStream;
-import java.io.IOException;
-import sun.security.action.GetPropertyAction;
-
-public class Handler extends URLStreamHandler {
- static URL base;
-
- /*
- * Attempt to find a load the given url using the default (network)
- * documentation location. If that fails, use the local copy
- */
- public synchronized URLConnection openConnection(URL u)
- throws IOException
- {
- URLConnection uc = null;
- URL ru;
-
- boolean localonly = Boolean.parseBoolean(
- GetPropertyAction.privilegedGetProperty("newdoc.localonly"));
-
- String docurl = GetPropertyAction.privilegedGetProperty("doc.url");
-
- String file = u.getFile();
- if (!localonly) {
- try {
- if (base == null) {
- base = new URL(docurl);
- }
- ru = new URL(base, file);
- } catch (MalformedURLException e) {
- ru = null;
- }
- if (ru != null) {
- uc = ru.openConnection();
- }
- }
-
- if (uc == null) {
- try {
- ru = new URL("file", "~", file);
-
- uc = ru.openConnection();
- InputStream is = uc.getInputStream(); // Check for success.
- } catch (MalformedURLException e) {
- uc = null;
- } catch (IOException e) {
- uc = null;
- }
- }
-
- if (uc == null) {
- throw new IOException("Can't find file for URL: "
- +u.toExternalForm());
- }
- return uc;
- }
-}
--- a/jdk/src/java.base/share/classes/sun/security/provider/SeedGenerator.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/sun/security/provider/SeedGenerator.java Fri Jul 01 16:55:44 2016 -0700
@@ -354,8 +354,8 @@
// We wait 250milli quanta, so the minimum wait time
// cannot be under 250milli.
int latch = 0;
- long l = System.currentTimeMillis() + 250;
- while (System.currentTimeMillis() < l) {
+ long startTime = System.nanoTime();
+ while (System.nanoTime() - startTime < 250000000) {
synchronized(this){};
latch++;
}
--- a/jdk/src/java.base/share/classes/sun/security/ssl/StatusResponseManager.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/sun/security/ssl/StatusResponseManager.java Fri Jul 01 16:55:44 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
@@ -97,10 +97,11 @@
t.setDaemon(true);
return t;
}
- });
+ }, new ThreadPoolExecutor.DiscardPolicy());
threadMgr.setExecuteExistingDelayedTasksAfterShutdownPolicy(false);
threadMgr.setContinueExistingPeriodicTasksAfterShutdownPolicy(false);
threadMgr.setKeepAliveTime(5000, TimeUnit.MILLISECONDS);
+ threadMgr.allowCoreThreadTimeOut(true);
responseCache = Cache.newSoftMemoryCache(cacheCapacity, cacheLifetime);
}
--- a/jdk/src/java.base/share/classes/sun/text/resources/JavaTimeSupplementary.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/sun/text/resources/JavaTimeSupplementary.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/java.base/share/classes/sun/text/resources/JavaTimeSupplementary_en.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/sun/text/resources/JavaTimeSupplementary_en.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/java.base/share/classes/sun/util/PropertyResourceBundleCharset.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/sun/util/PropertyResourceBundleCharset.java Fri Jul 01 16:55:44 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
@@ -34,7 +34,6 @@
import java.nio.charset.CodingErrorAction;
import java.nio.charset.StandardCharsets;
import java.util.Objects;
-import sun.util.logging.PlatformLogger;
/**
* A Charset implementation for reading PropertyResourceBundle, in order
@@ -94,12 +93,11 @@
return cr;
}
+ // Invalid or unmappable UTF-8 sequence detected.
+ // Switching to the ISO 8859-1 decorder.
+ assert cr.isMalformed() || cr.isUnmappable();
in.reset();
out.reset();
-
- PlatformLogger.getLogger(getClass().getCanonicalName()).info(
- "Invalid or unmappable UTF-8 sequence detected. " +
- "Switching encoding from UTF-8 to ISO-8859-1");
cdISO_8859_1 = StandardCharsets.ISO_8859_1.newDecoder();
return cdISO_8859_1.decode(in, out, false);
}
--- a/jdk/src/java.base/share/classes/sun/util/resources/LocaleData.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/classes/sun/util/resources/LocaleData.java Fri Jul 01 16:55:44 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<Locale> 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<Locale> 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);
}
}
}
--- a/jdk/src/java.base/share/conf/security/java.security Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/conf/security/java.security Fri Jul 01 16:55:44 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=
#
--- a/jdk/src/java.base/share/native/libjava/jni_util.c Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/native/libjava/jni_util.c Fri Jul 01 16:55:44 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * 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
@@ -147,9 +147,9 @@
JNU_ThrowByName(env, "java/lang/InstantiationException", msg);
}
-
-/* Throw an exception by name, using the string returned by
- * JVM_LastErrorString for the detail string. If the last-error
+/*
+ * Throw an exception by name, using the string returned by
+ * getLastErrorString for the detail string. If the last-error
* string is NULL, use the given default detail string.
*/
JNIEXPORT void JNICALL
@@ -174,9 +174,64 @@
}
}
-/* Throw an IOException, using the last-error string for the detail
- * string. If the last-error string is NULL, use the given default
- * detail string.
+/*
+ * Throw an exception by name, using a given message and the string
+ * returned by getLastErrorString to construct the detail string.
+ */
+JNIEXPORT void JNICALL
+JNU_ThrowByNameWithMessageAndLastError
+ (JNIEnv *env, const char *name, const char *message)
+{
+ char buf[256];
+ size_t n = getLastErrorString(buf, sizeof(buf));
+ size_t messagelen = message == NULL ? 0 : strlen(message);
+
+ if (n > 0) {
+ jstring s = JNU_NewStringPlatform(env, buf);
+ if (s != NULL) {
+ jobject x = NULL;
+ if (messagelen) {
+ jstring s2 = NULL;
+ size_t messageextlen = messagelen + 4;
+ char *str1 = (char *)malloc((messageextlen) * sizeof(char));
+ if (str1 == 0) {
+ JNU_ThrowOutOfMemoryError(env, 0);
+ return;
+ }
+ jio_snprintf(str1, messageextlen, " (%s)", message);
+ s2 = (*env)->NewStringUTF(env, str1);
+ free(str1);
+ if (s2 != NULL) {
+ jstring s3 = JNU_CallMethodByName(
+ env, NULL, s, "concat",
+ "(Ljava/lang/String;)Ljava/lang/String;",
+ s2).l;
+ (*env)->DeleteLocalRef(env, s2);
+ if (s3 != NULL) {
+ (*env)->DeleteLocalRef(env, s);
+ s = s3;
+ }
+ }
+ }
+ x = JNU_NewObjectByName(env, name, "(Ljava/lang/String;)V", s);
+ if (x != NULL) {
+ (*env)->Throw(env, x);
+ }
+ }
+ }
+
+ if (!(*env)->ExceptionOccurred(env)) {
+ if (messagelen) {
+ JNU_ThrowByName(env, name, message);
+ } else {
+ JNU_ThrowByName(env, name, "no further information");
+ }
+ }
+}
+
+/*
+ * Convenience method.
+ * Call JNU_ThrowByNameWithLastError for java.io.IOException.
*/
JNIEXPORT void JNICALL
JNU_ThrowIOExceptionWithLastError(JNIEnv *env, const char *defaultDetail)
--- a/jdk/src/java.base/share/native/libjava/jni_util.h Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/native/libjava/jni_util.h Fri Jul 01 16:55:44 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
+ * 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
@@ -98,15 +98,22 @@
JNU_ThrowInstantiationException(JNIEnv *env, const char *msg);
/* Throw an exception by name, using the string returned by
- * JVM_LastErrorString for the detail string. If the last-error
+ * getLastErrorString for the detail string. If the last-error
* string is NULL, use the given default detail string.
*/
JNIEXPORT void JNICALL
JNU_ThrowByNameWithLastError(JNIEnv *env, const char *name,
- const char *defaultMessage);
+ const char *defaultDetail);
+
+/* Throw an exception by name, using a given message and the string
+ * returned by getLastErrorString to construct the detail string.
+ */
+JNIEXPORT void JNICALL
+JNU_ThrowByNameWithMessageAndLastError
+ (JNIEnv *env, const char *name, const char *message);
/* Throw an IOException, using the last-error string for the detail
- * string. If the last-error string is NULL, use the given default
+ * string. If the last-error string is NULL, use the given default
* detail string.
*/
JNIEXPORT void JNICALL
--- a/jdk/src/java.base/share/native/libjli/java.c Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/share/native/libjli/java.c Fri Jul 01 16:55:44 2016 -0700
@@ -68,6 +68,7 @@
static jboolean showVersion = JNI_FALSE; /* print but continue */
static jboolean printUsage = JNI_FALSE; /* print and exit*/
static jboolean printXUsage = JNI_FALSE; /* print and exit*/
+static jboolean dryRun = JNI_FALSE; /* initialize VM and exit */
static char *showSettings = NULL; /* print but continue */
static char *listModules = NULL;
@@ -434,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.
@@ -466,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
@@ -475,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
@@ -485,10 +498,6 @@
"([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);
@@ -497,6 +506,7 @@
* System.exit) will be non-zero if main threw an exception.
*/
ret = (*env)->ExceptionOccurred(env) == NULL ? 0 : 1;
+
LEAVE();
}
@@ -1203,6 +1213,8 @@
return JNI_TRUE;
} else if (JLI_StrCmp(arg, "-showversion") == 0) {
showVersion = JNI_TRUE;
+ } else if (JLI_StrCmp(arg, "--dry-run") == 0) {
+ dryRun = JNI_TRUE;
} else if (JLI_StrCmp(arg, "-X") == 0) {
printXUsage = JNI_TRUE;
return JNI_TRUE;
--- a/jdk/src/java.base/solaris/classes/sun/nio/fs/SolarisFileSystemProvider.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/solaris/classes/sun/nio/fs/SolarisFileSystemProvider.java Fri Jul 01 16:55:44 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
@@ -88,8 +88,7 @@
GetPropertyAction.privilegedGetProperty("user.home"), ".mime.types");
Path etcMimeTypes = Paths.get("/etc/mime.types");
- return chain(new GioFileTypeDetector(),
- new MimeTypesFileTypeDetector(userMimeTypes),
+ return chain(new MimeTypesFileTypeDetector(userMimeTypes),
new MimeTypesFileTypeDetector(etcMimeTypes));
}
}
--- a/jdk/src/java.base/unix/classes/sun/nio/fs/GioFileTypeDetector.java Fri Jul 01 12:32:21 2016 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.nio.fs;
-
-import java.nio.file.Path;
-import java.io.IOException;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-/**
- * File type detector that uses the GNOME I/O library to guess the
- * MIME type of a file.
- */
-
-public class GioFileTypeDetector
- extends AbstractFileTypeDetector
-{
- // true if GIO is available
- private final boolean gioAvailable;
-
- public GioFileTypeDetector() {
- gioAvailable = initializeGio();
- }
-
- @Override
- public String implProbeContentType(Path obj) throws IOException {
- if (!gioAvailable)
- return null;
- if (!(obj instanceof UnixPath))
- return null;
-
- UnixPath path = (UnixPath)obj;
- NativeBuffer buffer = NativeBuffers.asNativeBuffer(path.getByteArrayForSysCalls());
- try {
- // GIO may access file so need permission check
- path.checkRead();
- byte[] type = probeGio(buffer.address());
- return (type == null) ? null : Util.toString(type);
- } finally {
- buffer.release();
- }
-
- }
-
- // GIO
- private static native boolean initializeGio();
- //
- // The probeGIO() method is synchronized to avert potential problems
- // such as crashes due to a suspected lack of thread safety in GIO.
- //
- private static synchronized native byte[] probeGio(long pathAddress);
-
- static {
- AccessController.doPrivileged(new PrivilegedAction<>() {
- public Void run() {
- System.loadLibrary("nio");
- return null;
- }});
- }
-}
--- a/jdk/src/java.base/unix/native/libjava/locale_str.h Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/unix/native/libjava/locale_str.h Fri Jul 01 16:55:44 2016 -0700
@@ -135,6 +135,16 @@
"sr_SP", "sr_YU",
"tchinese", "zh_TW",
#endif
+#ifdef MACOSX
+ "sr-Latn", "sr_CS", // Mappings as done by old Apple JRS code
+ "tk", "tk-Cyrl",
+ "tt-Latn", "tt-Cyrl",
+ "uz", "uz_UZ",
+ "uz-Arab", "uz_UZ",
+ "uz-Latn", "uz_UZ",
+ "zh-Hans", "zh_CN",
+ "zh-Hant", "zh_TW",
+#endif
"", "",
};
--- a/jdk/src/java.base/unix/native/libnet/NetworkInterface.c Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/unix/native/libnet/NetworkInterface.c Fri Jul 01 16:55:44 2016 -0700
@@ -621,8 +621,8 @@
(*env)->ReleaseStringUTFChars(env, name, name_utf);
if (ret < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "ioctl SIOCGLIFFLAGS failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "getFlags() failed");
return -1;
}
@@ -1061,8 +1061,8 @@
// If EPROTONOSUPPORT is returned it means we don't have
// support for this proto so don't throw an exception.
if (errno != EPROTONOSUPPORT) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Socket creation failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Socket creation failed");
}
return -1;
}
@@ -1087,13 +1087,13 @@
if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
if (errno == EPROTONOSUPPORT) {
if ((sock = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "IPV6 Socket creation failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "IPV6 Socket creation failed");
return -1;
}
} else { // errno is not NOSUPPORT
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "IPV4 Socket creation failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "IPV4 Socket creation failed");
return -1;
}
}
@@ -1122,15 +1122,15 @@
// SIOCGIFCOUNT doesn't work
ifc.ifc_buf = NULL;
if (ioctl(sock, SIOCGIFCONF, (char *)&ifc) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "ioctl SIOCGIFCONF failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFCONF) failed");
return ifs;
}
#elif defined(_AIX)
ifc.ifc_buf = NULL;
if (ioctl(sock, SIOCGSIZIFCONF, &(ifc.ifc_len)) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "ioctl SIOCGSIZIFCONF failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGSIZIFCONF) failed");
return ifs;
}
#endif /* __linux__ */
@@ -1142,8 +1142,8 @@
siocgifconfRequest = CSIOCGIFCONF;
#endif
if (ioctl(sock, siocgifconfRequest, (char *)&ifc) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "ioctl SIOCGIFCONF failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFCONF) failed");
free(buf);
return ifs;
}
@@ -1268,8 +1268,8 @@
ifc.ifc_buf = NULL;
if (ioctl(sock, SIOCGSIZIFCONF, &(ifc.ifc_len)) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "ioctl SIOCGSIZIFCONF failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGSIZIFCONF) failed");
return ifs;
}
bufsize = ifc.ifc_len;
@@ -1282,8 +1282,8 @@
ifc.ifc_len = bufsize;
ifc.ifc_buf = buf;
if (ioctl(sock, SIOCGIFCONF, (char *)&ifc) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "ioctl CSIOCGIFCONF failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFCONF) failed");
free(buf);
return ifs;
}
@@ -1368,16 +1368,16 @@
// Let's make sure the interface does have a broadcast address.
if (ioctl(sock, SIOCGIFFLAGS, (char *)&if2) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "ioctl SIOCGIFFLAGS failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFFLAGS) failed");
return ret;
}
if (if2.ifr_flags & IFF_BROADCAST) {
// It does, let's retrieve it
if (ioctl(sock, SIOCGIFBRDADDR, (char *)&if2) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "ioctl SIOCGIFBRDADDR failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFBRDADDR) failed");
return ret;
}
@@ -1400,8 +1400,8 @@
strncpy(if2.ifr_name, ifname, sizeof(if2.ifr_name) - 1);
if (ioctl(sock, SIOCGIFNETMASK, (char *)&if2) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "ioctl SIOCGIFNETMASK failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFNETMASK) failed");
return -1;
}
@@ -1463,8 +1463,8 @@
memset((char *)&ifr, 0, sizeof(ifr));
strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name) - 1);
if (ioctl(sock, SIOCGIFHWADDR, &ifr) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "ioctl SIOCGIFHWADDR failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFHWADDR) failed");
return -1;
}
@@ -1493,8 +1493,8 @@
}
if (ioctl(sock, SIOCGIFMTU, (char *)&if2) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "ioctl SIOCGIFMTU failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFMTU) failed");
return -1;
}
@@ -1535,15 +1535,15 @@
if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
if (errno == EPROTONOSUPPORT) {
if ((sock = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "IPV6 Socket creation failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "IPV6 Socket creation failed");
return -1;
}
alreadyV6=1;
} else { // errno is not NOSUPPORT
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "IPV4 Socket creation failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "IPV4 Socket creation failed");
return -1;
}
}
@@ -1562,8 +1562,8 @@
if (ioctl(sock, SIOCGLIFNETMASK, (char *)&if2) < 0) {
close(sock);
if ((sock = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "IPV6 Socket creation failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "IPV6 Socket creation failed");
return -1;
}
}
@@ -1607,8 +1607,8 @@
numifs.lifn_family = family;
numifs.lifn_flags = 0;
if (ioctl(sock, SIOCGLIFNUM, (char *)&numifs) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "ioctl SIOCGLIFNUM failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGLIFNUM) failed");
return ifs;
}
@@ -1621,8 +1621,8 @@
ifc.lifc_len = bufsize;
ifc.lifc_buf = buf;
if (ioctl(sock, SIOCGLIFCONF, (char *)&ifc) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "ioctl SIOCGLIFCONF failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGLIFCONF) failed");
free(buf);
return ifs;
}
@@ -1689,16 +1689,16 @@
// Let's make sure the interface does have a broadcast address
if (ioctl(sock, SIOCGLIFFLAGS, (char *)&if2) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "ioctl SIOCGLIFFLAGS failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGLIFFLAGS) failed");
return ret;
}
if (if2.lifr_flags & IFF_BROADCAST) {
// It does, let's retrieve it
if (ioctl(sock, SIOCGLIFBRDADDR, (char *)&if2) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "ioctl SIOCGLIFBRDADDR failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGLIFBRDADDR) failed");
return ret;
}
@@ -1721,8 +1721,8 @@
strncpy(if2.lifr_name, ifname, sizeof(if2.lifr_name) - 1);
if (ioctl(sock, SIOCGLIFNETMASK, (char *)&if2) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "ioctl SIOCGLIFNETMASK failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGLIFNETMASK) failed");
return -1;
}
@@ -1764,8 +1764,8 @@
msg.len = DL_PHYS_ADDR_REQ_SIZE;
if (putmsg(fd, &msg, NULL, 0) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "putmsg failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "putmsg() failed");
return -1;
}
@@ -1775,8 +1775,8 @@
msg.len = 0;
msg.maxlen = sizeof (buf);
if (getmsg(fd, &msg, NULL, &flags) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "getmsg failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "getmsg() failed");
return -1;
}
@@ -1860,8 +1860,8 @@
strncpy(if2.lifr_name, ifname, sizeof(if2.lifr_name) - 1);
if (ioctl(sock, SIOCGLIFMTU, (char *)&if2) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "ioctl SIOCGLIFMTU failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGLIFMTU) failed");
return -1;
}
@@ -1900,13 +1900,13 @@
if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
if (errno == EPROTONOSUPPORT) {
if ((sock = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "IPV6 Socket creation failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "IPV6 Socket creation failed");
return -1;
}
} else { // errno is not NOSUPPORT
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "IPV4 Socket creation failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "IPV4 Socket creation failed");
return -1;
}
}
@@ -1927,8 +1927,8 @@
struct ifaddrs *ifa, *origifa;
if (getifaddrs(&origifa) != 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "getifaddrs() function failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "getifaddrs() failed");
return ifs;
}
@@ -1997,8 +1997,8 @@
struct in6_ifreq ifr6;
if (getifaddrs(&origifa) != 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "getifaddrs() function failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "getifaddrs() failed");
return ifs;
}
@@ -2014,8 +2014,8 @@
MIN(sizeof(ifr6.ifr_addr), ifa->ifa_addr->sa_len));
if (ioctl(sock, SIOCGIFNETMASK_IN6, (caddr_t)&ifr6) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "ioctl SIOCGIFNETMASK_IN6 failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFNETMASK_IN6) failed");
freeifaddrs(origifa);
freeif(ifs);
return NULL;
@@ -2075,16 +2075,16 @@
// Make sure the interface does have a broadcast address
if (ioctl(sock, SIOCGIFFLAGS, (char *)&if2) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "ioctl SIOCGIFFLAGS failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFFLAGS) failed");
return ret;
}
if (if2.ifr_flags & IFF_BROADCAST) {
// It does, let's retrieve it
if (ioctl(sock, SIOCGIFBRDADDR, (char *)&if2) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "ioctl SIOCGIFBRDADDR failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFBRDADDR) failed");
return ret;
}
@@ -2107,8 +2107,8 @@
strncpy(if2.ifr_name, ifname, sizeof(if2.ifr_name) - 1);
if (ioctl(sock, SIOCGIFNETMASK, (char *)&if2) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "ioctl SIOCGIFNETMASK failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFNETMASK) failed");
return -1;
}
@@ -2156,8 +2156,8 @@
strncpy(if2.ifr_name, ifname, sizeof(if2.ifr_name) - 1);
if (ioctl(sock, SIOCGIFMTU, (char *)&if2) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "ioctl SIOCGIFMTU failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFMTU) failed");
return -1;
}
--- a/jdk/src/java.base/unix/native/libnet/PlainDatagramSocketImpl.c Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/unix/native/libnet/PlainDatagramSocketImpl.c Fri Jul 01 16:55:44 2016 -0700
@@ -221,8 +221,8 @@
NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "BindException",
"Bind failed");
} else {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Bind failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Bind failed");
}
return;
}
@@ -233,8 +233,8 @@
* that the system chose for us and store it in the Socket object.
*/
if (getsockname(fd, (struct sockaddr *)&him, &slen) == -1) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Error getting socket name");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Error getting socket name");
return;
}
@@ -469,7 +469,7 @@
JNU_ThrowByName(env, JNU_JAVANETPKG "PortUnreachableException",
"ICMP Port Unreachable");
} else {
- NET_ThrowByNameWithLastError(env, "java/io/IOException", "sendto failed");
+ JNU_ThrowIOExceptionWithLastError(env, "sendto failed");
}
}
@@ -520,7 +520,8 @@
} else if (errno == ENOMEM) {
JNU_ThrowOutOfMemoryError(env, "NET_Timeout native heap allocation failed");
} else {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Peek failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Peek failed");
}
return ret;
}
@@ -544,7 +545,8 @@
if (errno == EBADF) {
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
} else {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Peek failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Peek failed");
}
}
return 0;
@@ -616,7 +618,8 @@
} else if (errno == EBADF) {
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
} else {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Receive failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Receive failed");
#else
} else {
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
@@ -681,7 +684,8 @@
if (errno == EBADF) {
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
} else {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Receive failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Receive failed");
}
}
} else {
@@ -827,7 +831,8 @@
} else if (errno == EBADF) {
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
} else {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Receive failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Receive failed");
#else
} else {
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
@@ -859,7 +864,8 @@
if (errno == EBADF) {
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
} else {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Receive failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Receive failed");
}
}
} else {
@@ -932,8 +938,8 @@
}
if ((fd = socket(domain, SOCK_DGRAM, 0)) == -1) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Error creating socket");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Error creating socket");
return;
}
@@ -1080,8 +1086,8 @@
if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF,
(const char*)&in, sizeof(in)) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Error setting socket option");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Error setting socket option");
}
}
@@ -1109,8 +1115,8 @@
"IPV6_MULTICAST_IF failed (interface has IPv4 "
"address only?)");
} else {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Error setting socket option");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Error setting socket option");
}
return;
}
@@ -1129,8 +1135,8 @@
if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF,
(const char*)&in, sizeof(in)) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Error setting socket option");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Error setting socket option");
}
}
@@ -1256,8 +1262,10 @@
on = (*env)->GetBooleanField(env, value, fid);
loopback = (!on ? 1 : 0);
- if (NET_SetSockOpt(fd, IPPROTO_IP, IP_MULTICAST_LOOP, (const void *)&loopback, sizeof(char)) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Error setting socket option");
+ if (NET_SetSockOpt(fd, IPPROTO_IP, IP_MULTICAST_LOOP,
+ (const void *)&loopback, sizeof(char)) < 0) {
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Error setting socket option");
return;
}
}
@@ -1280,8 +1288,10 @@
on = (*env)->GetBooleanField(env, value, fid);
loopback = (!on ? 1 : 0);
- if (NET_SetSockOpt(fd, IPPROTO_IPV6, IPV6_MULTICAST_LOOP, (const void *)&loopback, sizeof(int)) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Error setting socket option");
+ if (NET_SetSockOpt(fd, IPPROTO_IPV6, IPV6_MULTICAST_LOOP,
+ (const void *)&loopback, sizeof(int)) < 0) {
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Error setting socket option");
return;
}
@@ -1420,7 +1430,8 @@
}
if (NET_SetSockOpt(fd, level, optname, (const void *)&optval, optlen) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Error setting socket option");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Error setting socket option");
return;
}
}
@@ -1483,8 +1494,8 @@
if (getsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF,
(char *)inP, &len) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Error getting socket option");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Error getting socket option");
return NULL;
}
@@ -1581,8 +1592,8 @@
if (getsockopt(fd, IPPROTO_IPV6, IPV6_MULTICAST_IF,
(char*)&index, &len) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Error getting socket option");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Error getting socket option");
return NULL;
}
@@ -1726,8 +1737,8 @@
len = SOCKADDR_LEN;
if (getsockname(fd, (struct sockaddr *)&him, &len) == -1) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Error getting socket name");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Error getting socket name");
return NULL;
}
iaObj = NET_SockaddrToInetAddress(env, (struct sockaddr *)&him, &port);
@@ -1752,8 +1763,8 @@
}
if (NET_GetSockOpt(fd, level, optname, (void *)&optval, &optlen) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Error getting socket option");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Error getting socket option");
return NULL;
}
@@ -1805,8 +1816,8 @@
char ittl = (char)ttl;
if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_TTL, (char*)&ittl,
sizeof(ittl)) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Error setting socket option");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Error setting socket option");
}
}
@@ -1818,8 +1829,8 @@
int ittl = (int)ttl;
if (setsockopt(fd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS,
(char*)&ittl, sizeof(ittl)) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Error setting socket option");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Error setting socket option");
}
}
#endif
@@ -1901,8 +1912,8 @@
if (getsockopt(fd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS,
(char*)&ttl, &len) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Error getting socket option");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Error getting socket option");
return -1;
}
return (jint)ttl;
@@ -1913,8 +1924,8 @@
socklen_t len = sizeof(ttl);
if (getsockopt(fd, IPPROTO_IP, IP_MULTICAST_TTL,
(char*)&ttl, &len) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Error getting socket option");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Error getting socket option");
return -1;
}
return (jint)ttl;
--- a/jdk/src/java.base/unix/native/libnet/PlainSocketImpl.c Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/unix/native/libnet/PlainSocketImpl.c Fri Jul 01 16:55:44 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
+ * 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
@@ -476,7 +476,8 @@
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException",
"Socket closed");
} else {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "connect failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "connect failed");
}
return;
}
@@ -498,8 +499,8 @@
*/
socklen_t slen = SOCKADDR_LEN;
if (getsockname(fd, (struct sockaddr *)&him, &slen) == -1) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Error getting socket name");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Error getting socket name");
} else {
localport = NET_GetPortFromSockaddr((struct sockaddr *)&him);
(*env)->SetIntField(env, this, psi_localportID, localport);
@@ -536,8 +537,9 @@
}
/* bind */
- if (NET_InetAddressToSockaddr(env, iaObj, localport, (struct sockaddr *)&him, &len, JNI_TRUE) != 0) {
- return;
+ if (NET_InetAddressToSockaddr(env, iaObj, localport, (struct sockaddr *)&him,
+ &len, JNI_TRUE) != 0) {
+ return;
}
setDefaultScopeID(env, (struct sockaddr *)&him);
@@ -547,8 +549,8 @@
NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "BindException",
"Bind failed");
} else {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Bind failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Bind failed");
}
return;
}
@@ -563,8 +565,8 @@
* that the system chose for us and store it in the Socket object.
*/
if (getsockname(fd, (struct sockaddr *)&him, &slen) == -1) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Error getting socket name");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Error getting socket name");
return;
}
localport = NET_GetPortFromSockaddr((struct sockaddr *)&him);
@@ -580,8 +582,8 @@
* Signature: (I)V
*/
JNIEXPORT void JNICALL
-Java_java_net_PlainSocketImpl_socketListen (JNIEnv *env, jobject this,
- jint count)
+Java_java_net_PlainSocketImpl_socketListen(JNIEnv *env, jobject this,
+ jint count)
{
/* this FileDescriptor fd field */
jobject fdObj = (*env)->GetObjectField(env, this, psi_fdID);
@@ -604,8 +606,8 @@
count -= 1;
if (listen(fd, count) == -1) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Listen failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Listen failed");
}
}
@@ -684,7 +686,8 @@
} else if (errno == ENOMEM) {
JNU_ThrowOutOfMemoryError(env, "NET_Timeout native heap allocation failed");
} else {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Accept failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Accept failed");
}
return;
}
@@ -727,7 +730,8 @@
if (errno == EBADF) {
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
} else {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Accept failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Accept failed");
}
}
return;
@@ -781,8 +785,8 @@
if (errno == ECONNRESET) {
JNU_ThrowByName(env, "sun/net/ConnectionResetException", "");
} else {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "ioctl FIONREAD failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "ioctl FIONREAD failed");
}
}
return ret;
@@ -936,8 +940,8 @@
return;
}
#endif /* __solaris__ */
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Error setting socket option");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Error setting socket option");
}
}
@@ -981,8 +985,8 @@
len = SOCKADDR_LEN;
if (getsockname(fd, (struct sockaddr *)&him, &len) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Error getting socket name");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Error getting socket name");
return -1;
}
iaObj = NET_SockaddrToInetAddress(env, (struct sockaddr *)&him, &port);
@@ -1014,8 +1018,8 @@
}
if (NET_GetSockOpt(fd, level, optname, (void *)&optval, &optlen) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Error getting socket option");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Error getting socket option");
return -1;
}
@@ -1063,6 +1067,6 @@
}
n = NET_Send(fd, (char *)&d, 1, MSG_OOB);
if (n == -1) {
- NET_ThrowByNameWithLastError(env, "java/io/IOException", "Write failed");
+ JNU_ThrowIOExceptionWithLastError(env, "Write failed");
}
}
--- a/jdk/src/java.base/unix/native/libnet/SocketInputStream.c Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/unix/native/libnet/SocketInputStream.c Fri Jul 01 16:55:44 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
+ * 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
@@ -111,8 +111,8 @@
} else if (errno == ENOMEM) {
JNU_ThrowOutOfMemoryError(env, "NET_Timeout native heap allocation failed");
} else {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "select/poll failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "select/poll failed");
}
}
if (bufP != BUF) {
@@ -145,8 +145,8 @@
break;
default:
- NET_ThrowByNameWithLastError(env,
- JNU_JAVANETPKG "SocketException", "Read failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Read failed");
}
}
} else {
--- a/jdk/src/java.base/unix/native/libnet/SocketOutputStream.c Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/unix/native/libnet/SocketOutputStream.c Fri Jul 01 16:55:44 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved.
+ * 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
@@ -114,8 +114,8 @@
JNU_ThrowByName(env, "sun/net/ConnectionResetException",
"Connection reset");
} else {
- NET_ThrowByNameWithLastError(env, "java/net/SocketException",
- "Write failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, "java/net/SocketException", "Write failed");
}
if (bufP != BUF) {
free(bufP);
--- a/jdk/src/java.base/unix/native/libnio/fs/GioFileTypeDetector.c Fri Jul 01 12:32:21 2016 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,148 +0,0 @@
-/*
- * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-#include "jni.h"
-#include "jni_util.h"
-#include "jvm.h"
-#include "jlong.h"
-
-#include <stdlib.h>
-#include <dlfcn.h>
-
-#ifdef __solaris__
-#include <strings.h>
-#endif
-
-#if defined(__linux__)
-#include <string.h>
-#endif
-
-/*
- * For reference see for example the GFileInfo section at
- * https://developer.gnome.org/gio/unstable/.
- */
-
-/* Definitions for GIO */
-
-#define G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE "standard::content-type"
-
-typedef void* gpointer;
-typedef struct _GFile GFile;
-typedef struct _GFileInfo GFileInfo;
-typedef struct _GCancellable GCancellable;
-typedef struct _GError GError;
-
-typedef enum {
- G_FILE_QUERY_INFO_NONE = 0
-} GFileQueryInfoFlags;
-
-typedef void (*g_type_init_func)(void);
-typedef void (*g_object_unref_func)(gpointer object);
-typedef GFile* (*g_file_new_for_path_func)(const char* path);
-typedef GFileInfo* (*g_file_query_info_func)(GFile *file,
- const char *attributes, GFileQueryInfoFlags flags,
- GCancellable *cancellable, GError **error);
-typedef char* (*g_file_info_get_content_type_func)(GFileInfo *info);
-
-static g_type_init_func g_type_init;
-static g_object_unref_func g_object_unref;
-static g_file_new_for_path_func g_file_new_for_path;
-static g_file_query_info_func g_file_query_info;
-static g_file_info_get_content_type_func g_file_info_get_content_type;
-
-
-#include "sun_nio_fs_GioFileTypeDetector.h"
-
-
-JNIEXPORT jboolean JNICALL
-Java_sun_nio_fs_GioFileTypeDetector_initializeGio
- (JNIEnv* env, jclass this)
-{
- void* gio_handle;
-
- gio_handle = dlopen("libgio-2.0.so", RTLD_LAZY);
- if (gio_handle == NULL) {
- gio_handle = dlopen("libgio-2.0.so.0", RTLD_LAZY);
- if (gio_handle == NULL) {
- return JNI_FALSE;
- }
- }
-
- g_type_init = (g_type_init_func)dlsym(gio_handle, "g_type_init");
- (*g_type_init)();
-
- g_object_unref = (g_object_unref_func)dlsym(gio_handle, "g_object_unref");
-
- g_file_new_for_path =
- (g_file_new_for_path_func)dlsym(gio_handle, "g_file_new_for_path");
-
- g_file_query_info =
- (g_file_query_info_func)dlsym(gio_handle, "g_file_query_info");
-
- g_file_info_get_content_type = (g_file_info_get_content_type_func)
- dlsym(gio_handle, "g_file_info_get_content_type");
-
-
- if (g_type_init == NULL ||
- g_object_unref == NULL ||
- g_file_new_for_path == NULL ||
- g_file_query_info == NULL ||
- g_file_info_get_content_type == NULL)
- {
- dlclose(gio_handle);
- return JNI_FALSE;
- }
-
- (*g_type_init)();
- return JNI_TRUE;
-}
-
-JNIEXPORT jbyteArray JNICALL
-Java_sun_nio_fs_GioFileTypeDetector_probeGio
- (JNIEnv* env, jclass this, jlong pathAddress)
-{
- char* path = (char*)jlong_to_ptr(pathAddress);
- GFile* gfile;
- GFileInfo* gfileinfo;
- jbyteArray result = NULL;
-
- gfile = (*g_file_new_for_path)(path);
- gfileinfo = (*g_file_query_info)(gfile, G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE,
- G_FILE_QUERY_INFO_NONE, NULL, NULL);
- if (gfileinfo != NULL) {
- const char* mime = (*g_file_info_get_content_type)(gfileinfo);
- if (mime != NULL) {
- jsize len = strlen(mime);
- result = (*env)->NewByteArray(env, len);
- if (result != NULL) {
- (*env)->SetByteArrayRegion(env, result, 0, len, (jbyte*)mime);
- }
- }
- (*g_object_unref)(gfileinfo);
- }
- (*g_object_unref)(gfile);
-
- return result;
-}
--- a/jdk/src/java.base/windows/conf/tzmappings Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/windows/conf/tzmappings Fri Jul 01 16:55:44 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:
--- a/jdk/src/java.base/windows/native/libjli/cmdtoargs.c Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/windows/native/libjli/cmdtoargs.c Fri Jul 01 16:55:44 2016 -0700
@@ -155,6 +155,7 @@
}
}
dest += copyCh(ch, dest);
+ slashes = 0;
break;
default:
--- a/jdk/src/java.base/windows/native/libnet/TwoStacksPlainDatagramSocketImpl.c Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/windows/native/libnet/TwoStacksPlainDatagramSocketImpl.c Fri Jul 01 16:55:44 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
+ * 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
@@ -1713,8 +1713,8 @@
in.s_addr = htonl(getInetAddress_addr(env, value));
if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF,
(const char*)&in, sizeof(in)) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Error setting socket option");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Error setting socket option");
}
return;
}
@@ -1741,7 +1741,7 @@
}
index = (*env)->GetIntField(env, value, ni_indexID);
- if ( isAdapterIpv6Enabled(env, index) != 0 ) {
+ if (isAdapterIpv6Enabled(env, index) != 0) {
if (setsockopt(fd1, IPPROTO_IPV6, IPV6_MULTICAST_IF,
(const char*)&index, sizeof(index)) < 0) {
if (errno == EINVAL && index > 0) {
@@ -1749,8 +1749,8 @@
"IPV6_MULTICAST_IF failed (interface has IPv4 "
"address only?)");
} else {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Error setting socket option");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Error setting socket option");
}
return;
}
@@ -1758,13 +1758,13 @@
/* If there are any IPv4 addresses on this interface then
* repeat the operation on the IPv4 fd */
- if (getInet4AddrFromIf (env, value, &in) < 0) {
+ if (getInet4AddrFromIf(env, value, &in) < 0) {
return;
}
if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF,
(const char*)&in, sizeof(in)) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Error setting socket option");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Error setting socket option");
}
return;
} else {
@@ -1781,8 +1781,8 @@
if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF,
(const char*)&in, sizeof(in)) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Error setting socket option");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Error setting socket option");
}
return;
}
@@ -1932,8 +1932,8 @@
int len = sizeof(struct in_addr);
if (getsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF,
(char *)inP, &len) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Error getting socket option");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Error getting socket option");
return NULL;
}
@@ -2056,8 +2056,8 @@
{
if (getsockopt(fd1, IPPROTO_IPV6, IPV6_MULTICAST_IF,
(char*)&index, &len) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Error getting socket option");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Error getting socket option");
return NULL;
}
}
@@ -2288,8 +2288,8 @@
}
if (getsockname(fd, (struct sockaddr *)&him, &len) == -1) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Error getting socket name");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Error getting socket name");
return NULL;
}
iaObj = NET_SockaddrToInetAddress(env, (struct sockaddr *)&him, &port);
--- a/jdk/src/java.base/windows/native/libnet/TwoStacksPlainSocketImpl.c Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.base/windows/native/libnet/TwoStacksPlainSocketImpl.c Fri Jul 01 16:55:44 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * 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
@@ -1054,8 +1054,8 @@
}
if (getsockname(fd, (struct sockaddr *)&him, &len) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Error getting socket name");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Error getting socket name");
return -1;
}
iaObj = NET_SockaddrToInetAddress(env, (struct sockaddr *)&him, &port);
--- a/jdk/src/java.httpclient/share/classes/java/net/http/Http2Connection.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.httpclient/share/classes/java/net/http/Http2Connection.java Fri Jul 01 16:55:44 2016 -0700
@@ -298,7 +298,7 @@
ByteBuffer[] buffers = frame.getHeaderBlock();
for (int i = 0; i < buffers.length; i++) {
- hpackIn.decode(buffers[i], endOfHeaders, decoder);
+ hpackIn.decode(buffers[i], endOfHeaders && (i == buffers.length - 1), decoder);
}
}
--- a/jdk/src/java.httpclient/share/classes/java/net/http/PlainHttpConnection.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.httpclient/share/classes/java/net/http/PlainHttpConnection.java Fri Jul 01 16:55:44 2016 -0700
@@ -128,6 +128,7 @@
this.chan = SocketChannel.open();
int bufsize = client.getReceiveBufferSize();
chan.setOption(StandardSocketOptions.SO_RCVBUF, bufsize);
+ chan.setOption(StandardSocketOptions.TCP_NODELAY, true);
} catch (IOException e) {
throw new InternalError(e);
}
--- a/jdk/src/java.httpclient/share/classes/java/net/http/Stream.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.httpclient/share/classes/java/net/http/Stream.java Fri Jul 01 16:55:44 2016 -0700
@@ -617,6 +617,7 @@
void sendBodyImpl() throws IOException, InterruptedException {
if (requestContentLen == 0) {
// no body
+ requestSent();
return;
}
DataFrame df;
@@ -667,7 +668,7 @@
responseFlowController); // TODO: filter headers
if (body == null) {
receiveData();
- return processor.onResponseComplete();
+ body = processor.onResponseComplete();
} else
receiveDataAsync(processor);
responseReceived();
--- a/jdk/src/java.httpclient/share/classes/java/net/http/WS.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.httpclient/share/classes/java/net/http/WS.java Fri Jul 01 16:55:44 2016 -0700
@@ -34,7 +34,6 @@
import java.util.concurrent.Executor;
import java.util.function.Consumer;
import java.util.function.Supplier;
-import java.util.stream.Stream;
import static java.lang.System.Logger.Level.ERROR;
import static java.lang.System.Logger.Level.WARNING;
@@ -104,15 +103,6 @@
}
@Override
- public CompletableFuture<WebSocket> sendText(Stream<? extends CharSequence> message) {
- requireNonNull(message, "message");
- synchronized (stateLock) {
- checkState();
- return transmitter.sendText(message);
- }
- }
-
- @Override
public CompletableFuture<WebSocket> sendBinary(ByteBuffer message, boolean isLast) {
requireNonNull(message, "message");
synchronized (stateLock) {
@@ -179,11 +169,11 @@
}
@Override
- public long request(long n) {
+ public void request(long n) {
if (n < 0L) {
throw new IllegalArgumentException("The number must not be negative: " + n);
}
- return receiver.request(n);
+ receiver.request(n);
}
@Override
--- a/jdk/src/java.httpclient/share/classes/java/net/http/WSBuilder.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.httpclient/share/classes/java/net/http/WSBuilder.java Fri Jul 01 16:55:44 2016 -0700
@@ -25,6 +25,7 @@
package java.net.http;
import java.net.URI;
+import java.time.Duration;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -59,8 +60,7 @@
private final LinkedHashMap<String, List<String>> headers = new LinkedHashMap<>();
private final WebSocket.Listener listener;
private Collection<String> subprotocols = Collections.emptyList();
- private long timeout;
- private TimeUnit timeUnit;
+ private Duration timeout;
WSBuilder(URI uri, HttpClient client, WebSocket.Listener listener) {
checkURI(requireNonNull(uri, "uri"));
@@ -93,13 +93,8 @@
}
@Override
- public WebSocket.Builder connectTimeout(long timeout, TimeUnit unit) {
- if (timeout < 0) {
- throw new IllegalArgumentException("Negative timeout: " + timeout);
- }
- requireNonNull(unit, "unit");
- this.timeout = timeout;
- this.timeUnit = unit;
+ public WebSocket.Builder connectTimeout(Duration timeout) {
+ this.timeout = requireNonNull(timeout, "timeout");
return this;
}
@@ -139,9 +134,7 @@
return new ArrayList<>(subprotocols);
}
- long getTimeout() { return timeout; }
-
- TimeUnit getTimeUnit() { return timeUnit; }
+ Duration getConnectTimeout() { return timeout; }
private static Collection<String> checkSubprotocols(String mostPreferred,
String... lesserPreferred) {
--- a/jdk/src/java.httpclient/share/classes/java/net/http/WSFrameConsumer.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.httpclient/share/classes/java/net/http/WSFrameConsumer.java Fri Jul 01 16:55:44 2016 -0700
@@ -206,7 +206,7 @@
boolean binaryNonEmpty = data.hasRemaining();
WSShared<CharBuffer> textData;
try {
- textData = decoder.decode(data, part.isLast());
+ textData = decoder.decode(data, part == MessagePart.WHOLE || part == MessagePart.LAST);
} catch (CharacterCodingException e) {
throw new WSProtocolException
("5.6.", "Invalid UTF-8 sequence in frame " + opcode, NOT_CONSISTENT, e);
--- a/jdk/src/java.httpclient/share/classes/java/net/http/WSMessageSender.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.httpclient/share/classes/java/net/http/WSMessageSender.java Fri Jul 01 16:55:44 2016 -0700
@@ -30,7 +30,6 @@
import java.net.http.WSOutgoingMessage.Close;
import java.net.http.WSOutgoingMessage.Ping;
import java.net.http.WSOutgoingMessage.Pong;
-import java.net.http.WSOutgoingMessage.StreamedText;
import java.net.http.WSOutgoingMessage.Text;
import java.net.http.WSOutgoingMessage.Visitor;
import java.nio.ByteBuffer;
@@ -123,11 +122,6 @@
}
@Override
- public void visit(StreamedText streamedText) {
- throw new IllegalArgumentException("Not yet implemented");
- }
-
- @Override
public void visit(Binary message) {
buffers[1] = message.bytes;
int mask = random.nextInt();
--- a/jdk/src/java.httpclient/share/classes/java/net/http/WSOpeningHandshake.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.httpclient/share/classes/java/net/http/WSOpeningHandshake.java Fri Jul 01 16:55:44 2016 -0700
@@ -32,11 +32,14 @@
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
+import java.time.Duration;
+import java.time.temporal.ChronoUnit;
import java.util.Arrays;
import java.util.Base64;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.TimeUnit;
import java.util.function.Predicate;
import java.util.stream.Collectors;
@@ -77,8 +80,12 @@
WSOpeningHandshake(WSBuilder b) {
URI httpURI = createHttpUri(b.getUri());
HttpRequest.Builder requestBuilder = b.getClient().request(httpURI);
- if (b.getTimeUnit() != null) {
- requestBuilder.timeout(b.getTimeUnit(), b.getTimeout());
+ Duration connectTimeout = b.getConnectTimeout();
+ if (connectTimeout != null) {
+ requestBuilder.timeout(
+ TimeUnit.of(ChronoUnit.MILLIS),
+ connectTimeout.get(ChronoUnit.MILLIS)
+ );
}
Collection<String> s = b.getSubprotocols();
if (!s.isEmpty()) {
--- a/jdk/src/java.httpclient/share/classes/java/net/http/WSOutgoingMessage.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.httpclient/share/classes/java/net/http/WSOutgoingMessage.java Fri Jul 01 16:55:44 2016 -0700
@@ -25,13 +25,11 @@
package java.net.http;
import java.nio.ByteBuffer;
-import java.util.stream.Stream;
abstract class WSOutgoingMessage {
interface Visitor {
void visit(Text message);
- void visit(StreamedText message);
void visit(Binary message);
void visit(Ping message);
void visit(Pong message);
@@ -64,25 +62,6 @@
}
}
- static final class StreamedText extends WSOutgoingMessage {
-
- public final Stream<? extends CharSequence> characters;
-
- StreamedText(Stream<? extends CharSequence> characters) {
- this.characters = characters;
- }
-
- @Override
- void accept(Visitor visitor) {
- visitor.visit(this);
- }
-
- @Override
- public String toString() {
- return WSUtils.toStringSimple(this) + "[characters=" + characters + "]";
- }
- }
-
static final class Binary extends WSOutgoingMessage {
public final boolean isLast;
--- a/jdk/src/java.httpclient/share/classes/java/net/http/WSReceiver.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.httpclient/share/classes/java/net/http/WSReceiver.java Fri Jul 01 16:55:44 2016 -0700
@@ -101,11 +101,10 @@
}
}
- long request(long n) {
+ void request(long n) {
long newDemand = demand.accumulateAndGet(n, (p, i) -> p + i < 0 ? Long.MAX_VALUE : p + i);
handler.signal();
assert newDemand >= 0 : newDemand;
- return newDemand;
}
private boolean getData() throws IOException {
--- a/jdk/src/java.httpclient/share/classes/java/net/http/WSTransmitter.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.httpclient/share/classes/java/net/http/WSTransmitter.java Fri Jul 01 16:55:44 2016 -0700
@@ -28,7 +28,6 @@
import java.net.http.WSOutgoingMessage.Close;
import java.net.http.WSOutgoingMessage.Ping;
import java.net.http.WSOutgoingMessage.Pong;
-import java.net.http.WSOutgoingMessage.StreamedText;
import java.net.http.WSOutgoingMessage.Text;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
@@ -40,7 +39,6 @@
import java.util.concurrent.Executor;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.function.Consumer;
-import java.util.stream.Stream;
import static java.lang.String.format;
import static java.net.http.Pair.pair;
@@ -83,11 +81,6 @@
return acceptMessage(new Text(isLast, message));
}
- CompletableFuture<WebSocket> sendText(Stream<? extends CharSequence> message) {
- checkAndUpdateText(true);
- return acceptMessage(new StreamedText(message));
- }
-
CompletableFuture<WebSocket> sendBinary(ByteBuffer message, boolean isLast) {
checkAndUpdateBinary(isLast);
return acceptMessage(new Binary(isLast, message));
--- a/jdk/src/java.httpclient/share/classes/java/net/http/WebSocket.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.httpclient/share/classes/java/net/http/WebSocket.java Fri Jul 01 16:55:44 2016 -0700
@@ -28,13 +28,11 @@
import java.net.ProtocolException;
import java.net.URI;
import java.nio.ByteBuffer;
+import java.time.Duration;
import java.util.Map;
-import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
-import java.util.concurrent.TimeUnit;
-import java.util.stream.Stream;
/**
* A WebSocket client conforming to RFC 6455.
@@ -47,8 +45,9 @@
* receive messages. When the {@code WebSocket} is no longer
* needed it must be closed: a Close message must both be {@linkplain
* #sendClose() sent} and {@linkplain Listener#onClose(WebSocket, Optional,
- * String) received}. Or to close abruptly, {@link #abort()} is called. Once
- * closed it remains closed, cannot be reopened.
+ * String) received}. Otherwise, invoke {@link #abort() abort} to close abruptly.
+ *
+ * <p> Once closed the {@code WebSocket} remains closed and cannot be reopened.
*
* <p> Messages of type {@code X} are sent through the {@code WebSocket.sendX}
* methods and received through {@link WebSocket.Listener}{@code .onX} methods
@@ -71,10 +70,6 @@
* arranged from the {@code buffer}'s {@link ByteBuffer#position() position} to
* the {@code buffer}'s {@link ByteBuffer#limit() limit}.
*
- * <p> All message exchange is run by the threads belonging to the {@linkplain
- * HttpClient#executorService() executor service} of {@code WebSocket}'s {@link
- * HttpClient}.
- *
* <p> Unless otherwise noted, passing a {@code null} argument to a constructor
* or method of this type will cause a {@link NullPointerException
* NullPointerException} to be thrown.
@@ -217,22 +212,17 @@
* Sets a timeout for the opening handshake.
*
* <p> If the opening handshake is not finished within the specified
- * timeout then {@link #buildAsync()} completes exceptionally with a
- * {@code HttpTimeoutException}.
+ * amount of time then {@link #buildAsync()} completes exceptionally
+ * with a {@code HttpTimeoutException}.
*
- * <p> If the timeout is not specified then it's deemed infinite.
+ * <p> If this method is not invoked then the timeout is deemed infinite.
*
* @param timeout
- * the maximum time to wait
- * @param unit
- * the time unit of the timeout argument
+ * the timeout
*
* @return this builder
- *
- * @throws IllegalArgumentException
- * if the {@code timeout} is negative
*/
- Builder connectTimeout(long timeout, TimeUnit unit);
+ Builder connectTimeout(Duration timeout);
/**
* Builds a {@code WebSocket}.
@@ -506,7 +496,7 @@
* <p> Once a Close message is received, the server will not send any
* more messages.
*
- * <p> A Close message may consist of a close code and a reason for
+ * <p> A Close message may consist of a status code and a reason for
* closing. The reason will have a UTF-8 representation not longer than
* {@code 123} bytes. The reason may be useful for debugging or passing
* information relevant to the connection but is not necessarily human
@@ -545,12 +535,8 @@
* the time {@code onError} is invoked, no more messages can be sent on
* this {@code WebSocket}.
*
- * @apiNote Errors associated with send operations ({@link
- * WebSocket#sendText(CharSequence, boolean) sendText}, {@link
- * #sendBinary(ByteBuffer, boolean) sendBinary}, {@link
- * #sendPing(ByteBuffer) sendPing}, {@link #sendPong(ByteBuffer)
- * sendPong} and {@link #sendClose(CloseCode, CharSequence) sendClose})
- * are reported to the {@code CompletionStage} operations return.
+ * @apiNote Errors associated with {@code sendX} methods are reported to
+ * the {@code CompletableFuture} these methods return.
*
* @implSpec The default implementation does nothing.
*
@@ -563,8 +549,8 @@
}
/**
- * A marker used by {@link WebSocket.Listener} for partial message
- * receiving.
+ * A marker used by {@link WebSocket.Listener} in cases where a partial
+ * message may be received.
*
* @since 9
*/
@@ -586,19 +572,9 @@
LAST,
/**
- * A whole message. The message consists of a single part.
+ * A whole message consisting of a single part.
*/
- WHOLE;
-
- /**
- * Tells whether a part of a message received with this marker is the
- * last part.
- *
- * @return {@code true} if LAST or WHOLE, {@code false} otherwise
- */
- public boolean isLast() {
- return this == LAST || this == WHOLE;
- }
+ WHOLE
}
/**
@@ -630,7 +606,7 @@
* @param message
* the message
* @param isLast
- * {@code true} if this is the final part of the message,
+ * {@code true} if this is the last part of the message,
* {@code false} otherwise
*
* @return a CompletableFuture with this WebSocket
@@ -679,43 +655,6 @@
}
/**
- * Sends a whole Text message with characters from {@code
- * CharacterSequence}s provided by the given {@code Stream}.
- *
- * <p> This is a convenience method. For the general case use {@link
- * #sendText(CharSequence, boolean)}.
- *
- * <p> Returns a {@code CompletableFuture<WebSocket>} which completes
- * normally when the message has been sent or completes exceptionally if an
- * error occurs.
- *
- * <p> Streamed character sequences should not be modified until the
- * returned {@code CompletableFuture} completes (either normally or
- * exceptionally).
- *
- * <p> The returned {@code CompletableFuture} can complete exceptionally
- * with:
- * <ul>
- * <li> {@link IOException}
- * if an I/O error occurs during this operation
- * <li> {@link IllegalStateException}
- * if the {@code WebSocket} closes while this operation is in progress;
- * or if a Close message has been sent already;
- * or if there is an outstanding send operation;
- * or if a previous Binary message was not sent with {@code isLast == true}
- * </ul>
- *
- * @param message
- * the message
- *
- * @return a CompletableFuture with this WebSocket
- *
- * @throws IllegalArgumentException
- * if {@code message} is a malformed (or an incomplete) UTF-16 sequence
- */
- CompletableFuture<WebSocket> sendText(Stream<? extends CharSequence> message);
-
- /**
* Sends a Binary message with bytes from the given {@code ByteBuffer}.
*
* <p> Returns a {@code CompletableFuture<WebSocket>} which completes
@@ -737,7 +676,7 @@
* @param message
* the message
* @param isLast
- * {@code true} if this is the final part of the message,
+ * {@code true} if this is the last part of the message,
* {@code false} otherwise
*
* @return a CompletableFuture with this WebSocket
@@ -745,43 +684,6 @@
CompletableFuture<WebSocket> sendBinary(ByteBuffer message, boolean isLast);
/**
- * Sends a Binary message with bytes from the given {@code byte[]}.
- *
- * <p> Returns a {@code CompletableFuture<WebSocket>} which completes
- * normally when the message has been sent or completes exceptionally if an
- * error occurs.
- *
- * <p> The returned {@code CompletableFuture} can complete exceptionally
- * with:
- * <ul>
- * <li> {@link IOException}
- * if an I/O error occurs during this operation
- * <li> {@link IllegalStateException}
- * if the {@code WebSocket} closes while this operation is in progress;
- * or if a Close message has been sent already;
- * or if there is an outstanding send operation;
- * or if a previous Text message was not sent with {@code isLast == true}
- * </ul>
- *
- * @implSpec This is equivalent to:
- * <pre>{@code
- * sendBinary(ByteBuffer.wrap(message), isLast)
- * }</pre>
- *
- * @param message
- * the message
- * @param isLast
- * {@code true} if this is the final part of the message,
- * {@code false} otherwise
- *
- * @return a CompletableFuture with this WebSocket
- */
- default CompletableFuture<WebSocket> sendBinary(byte[] message, boolean isLast) {
- Objects.requireNonNull(message, "message");
- return sendBinary(ByteBuffer.wrap(message), isLast);
- }
-
- /**
* Sends a Ping message.
*
* <p> Returns a {@code CompletableFuture<WebSocket>} which completes
@@ -858,10 +760,11 @@
* normally when the message has been sent or completes exceptionally if an
* error occurs.
*
- * <p> A Close message may consist of a close code and a reason for closing.
- * The reason must have a valid UTF-8 representation not longer than {@code
- * 123} bytes. The reason may be useful for debugging or passing information
- * relevant to the connection but is not necessarily human readable.
+ * <p> A Close message may consist of a status code and a reason for
+ * closing. The reason must have a UTF-8 representation not longer than
+ * {@code 123} bytes. The reason may be useful for debugging or passing
+ * information relevant to the connection but is not necessarily human
+ * readable.
*
* <p> The returned {@code CompletableFuture} can complete exceptionally
* with:
@@ -910,24 +813,21 @@
CompletableFuture<WebSocket> sendClose();
/**
- * Requests {@code n} more messages to be received by the {@link Listener
+ * Allows {@code n} more messages to be received by the {@link Listener
* Listener}.
*
- * <p> The actual number might be fewer if either of the endpoints decide to
- * close the connection before that or an error occurs.
+ * <p> The actual number of received messages might be fewer if a Close
+ * message is received, the connection closes or an error occurs.
*
* <p> A {@code WebSocket} that has just been created, hasn't requested
* anything yet. Usually the initial request for messages is done in {@link
* Listener#onOpen(java.net.http.WebSocket) Listener.onOpen}.
*
- * If all requested messages have been received, and the server sends more,
- * then these messages are queued.
- *
* @implNote This implementation does not distinguish between partial and
* whole messages, because it's not known beforehand how a message will be
* received.
*
- * <p> If a server sends more messages than requested, the implementation
+ * <p> If a server sends more messages than requested, this implementation
* queues up these messages on the TCP connection and may eventually force
* the sender to stop sending through TCP flow control.
*
@@ -936,12 +836,8 @@
*
* @throws IllegalArgumentException
* if {@code n < 0}
- *
- * @return resulting unfulfilled demand with this request taken into account
*/
- // TODO return void as it's breaking encapsulation (leaking info when exactly something deemed delivered)
- // or demand behaves after LONG.MAX_VALUE
- long request(long n);
+ void request(long n);
/**
* Returns a {@linkplain Builder#subprotocols(String, String...) subprotocol}
--- a/jdk/src/java.httpclient/share/classes/sun/net/httpclient/hpack/StringReader.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.httpclient/share/classes/sun/net/httpclient/hpack/StringReader.java Fri Jul 01 16:55:44 2016 -0700
@@ -78,6 +78,7 @@
if (isLast) {
input.limit(input.position() + remainingLength);
}
+ remainingLength -= Math.min(input.remaining(), remainingLength);
if (huffman) {
huffmanReader.read(input, output, isLast);
} else {
@@ -85,6 +86,7 @@
}
if (isLast) {
input.limit(oldLimit);
+ state = DONE;
}
return isLast;
}
--- a/jdk/src/java.logging/share/classes/java/util/logging/FileHandler.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.logging/share/classes/java/util/logging/FileHandler.java Fri Jul 01 16:55:44 2016 -0700
@@ -94,6 +94,9 @@
* <li> <handler-name>.append
* specifies whether the FileHandler should append onto
* any existing files (defaults to false). </li>
+ * <li> <handler-name>.maxLocks
+ * specifies the maximum number of concurrent locks held by
+ * FileHandler (defaults to 100). </li>
* </ul>
* <p>
* For example, the properties for {@code FileHandler} would be:
@@ -157,6 +160,7 @@
private FileChannel lockFileChannel;
private File files[];
private static final int MAX_LOCKS = 100;
+ private int maxLocks = MAX_LOCKS;
private static final Set<String> locks = new HashSet<>();
/**
@@ -235,6 +239,12 @@
setLevel(manager.getLevelProperty(cname + ".level", Level.ALL));
setFilter(manager.getFilterProperty(cname + ".filter", null));
setFormatter(manager.getFormatterProperty(cname + ".formatter", new XMLFormatter()));
+ // Initialize maxLocks from the logging.properties file.
+ // If invalid/no property is provided 100 will be used as a default value.
+ maxLocks = manager.getIntProperty(cname + ".maxLocks", MAX_LOCKS);
+ if(maxLocks <= 0) {
+ maxLocks = MAX_LOCKS;
+ }
try {
setEncoding(manager.getStringProperty(cname +".encoding", null));
} catch (Exception ex) {
@@ -476,7 +486,7 @@
int unique = -1;
for (;;) {
unique++;
- if (unique > MAX_LOCKS) {
+ if (unique > maxLocks) {
throw new IOException("Couldn't get lock for " + pattern);
}
// Generate a lock file name from the "unique" int.
--- a/jdk/src/java.logging/share/conf/logging.properties Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.logging/share/conf/logging.properties Fri Jul 01 16:55:44 2016 -0700
@@ -37,6 +37,10 @@
java.util.logging.FileHandler.pattern = %h/java%u.log
java.util.logging.FileHandler.limit = 50000
java.util.logging.FileHandler.count = 1
+# Default number of locks FileHandler can obtain synchronously.
+# This specifies maximum number of attempts to obtain lock file by FileHandler
+# implemented by incrementing the unique field %u as per FileHandler API documentation.
+java.util.logging.FileHandler.maxLocks = 100
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
# Limit the message that are printed on the console to INFO and above.
--- a/jdk/src/java.naming/share/classes/com/sun/jndi/ldap/DigestClientId.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.naming/share/classes/com/sun/jndi/ldap/DigestClientId.java Fri Jul 01 16:55:44 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 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
@@ -60,7 +60,6 @@
final private String[] propvals;
final private int myHash;
- private int pHash = 0;
DigestClientId(int version, String hostname, int port,
String protocol, Control[] bindCtls, OutputStream trace,
@@ -78,12 +77,9 @@
propvals = new String[SASL_PROPS.length];
for (int i = 0; i < SASL_PROPS.length; i++) {
propvals[i] = (String) env.get(SASL_PROPS[i]);
- if (propvals[i] != null) {
- pHash = pHash * 31 + propvals[i].hashCode();
- }
}
}
- myHash = super.hashCode() + pHash;
+ myHash = super.hashCode() ^ Arrays.hashCode(propvals);
}
public boolean equals(Object obj) {
@@ -92,7 +88,6 @@
}
DigestClientId other = (DigestClientId)obj;
return myHash == other.myHash
- && pHash == other.pHash
&& super.equals(obj)
&& Arrays.equals(propvals, other.propvals);
}
--- a/jdk/src/java.naming/share/classes/com/sun/jndi/ldap/SimpleClientId.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.naming/share/classes/com/sun/jndi/ldap/SimpleClientId.java Fri Jul 01 16:55:44 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 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
@@ -49,21 +49,23 @@
socketFactory);
this.username = username;
+ int pwdHashCode = 0;
if (passwd == null) {
this.passwd = null;
- } else if (passwd instanceof String) {
- this.passwd = passwd;
} else if (passwd instanceof byte[]) {
this.passwd = ((byte[])passwd).clone();
+ pwdHashCode = Arrays.hashCode((byte[])passwd);
} else if (passwd instanceof char[]) {
this.passwd = ((char[])passwd).clone();
+ pwdHashCode = Arrays.hashCode((char[])passwd);
} else {
this.passwd = passwd;
+ pwdHashCode = passwd.hashCode();
}
myHash = super.hashCode()
- + (username != null ? username.hashCode() : 0)
- + (passwd != null ? passwd.hashCode() : 0);
+ ^ (username != null ? username.hashCode() : 0)
+ ^ pwdHashCode;
}
public boolean equals(Object obj) {
--- a/jdk/src/java.naming/share/classes/com/sun/jndi/ldap/pool/Pool.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/java.naming/share/classes/com/sun/jndi/ldap/pool/Pool.java Fri Jul 01 16:55:44 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<Object, ConnectionsRef> entry : map.entrySet()) {
- id = entry.getKey();
- conns = entry.getValue().getConnections();
- out.println(" " + id + ":" + conns.getStats());
+ for (Map.Entry<Object, ConnectionsRef> 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) {
--- a/jdk/src/jdk.crypto.pkcs11/share/classes/sun/security/pkcs11/wrapper/PKCS11.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.crypto.pkcs11/share/classes/sun/security/pkcs11/wrapper/PKCS11.java Fri Jul 01 16:55:44 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
*/
/* Copyright (c) 2002 Graz University of Technology. All rights reserved.
@@ -54,6 +54,8 @@
import java.security.AccessController;
import java.security.PrivilegedAction;
+import sun.security.util.Debug;
+
import static sun.security.pkcs11.wrapper.PKCS11Constants.*;
/**
@@ -85,7 +87,8 @@
return null;
}
});
- initializeLibrary();
+ boolean enableDebug = Debug.getInstance("sunpkcs11") != null;
+ initializeLibrary(enableDebug);
}
public static void loadNative() {
@@ -109,7 +112,7 @@
* @preconditions
* @postconditions
*/
- private static native void initializeLibrary();
+ private static native void initializeLibrary(boolean debug);
// XXX
/**
--- a/jdk/src/jdk.crypto.pkcs11/share/native/libj2pkcs11/p11_general.c Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.crypto.pkcs11/share/native/libj2pkcs11/p11_general.c Fri Jul 01 16:55:44 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.
*/
/* Copyright (c) 2002 Graz University of Technology. All rights reserved.
@@ -73,6 +73,8 @@
JavaVM* jvm = NULL;
+jboolean debug = 0;
+
JNIEXPORT jint JNICALL DEF_JNI_OnLoad(JavaVM *vm, void *reserved) {
jvm = vm;
return JNI_VERSION_1_4;
@@ -92,7 +94,7 @@
*/
JNIEXPORT void JNICALL
Java_sun_security_pkcs11_wrapper_PKCS11_initializeLibrary
-(JNIEnv *env, jclass thisClass)
+(JNIEnv *env, jclass thisClass, jboolean enableDebug)
{
#ifndef NO_CALLBACKS
if (notifyListLock == NULL) {
@@ -101,6 +103,7 @@
#endif
prefetchFields(env, thisClass);
+ debug = enableDebug;
}
jclass fetchClass(JNIEnv *env, const char *name) {
--- a/jdk/src/jdk.crypto.pkcs11/share/native/libj2pkcs11/p11_keymgmt.c Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.crypto.pkcs11/share/native/libj2pkcs11/p11_keymgmt.c Fri Jul 01 16:55:44 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
*/
/* Copyright (c) 2002 Graz University of Technology. All rights reserved.
@@ -152,6 +152,8 @@
CK_OBJECT_HANDLE_PTR ckpKeyHandles; /* pointer to array with Public and Private Key */
jlongArray jKeyHandles = NULL;
CK_RV rv;
+ int attempts;
+ const int MAX_ATTEMPTS = 3;
CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
if (ckpFunctions == NULL) { return NULL; }
@@ -190,10 +192,35 @@
return NULL;
}
- rv = (*ckpFunctions->C_GenerateKeyPair)(ckSessionHandle, &ckMechanism,
- ckpPublicKeyAttributes, ckPublicKeyAttributesLength,
- ckpPrivateKeyAttributes, ckPrivateKeyAttributesLength,
- ckpPublicKeyHandle, ckpPrivateKeyHandle);
+ /*
+ * Workaround for NSS bug 1012786:
+ *
+ * Key generation may fail with CKR_FUNCTION_FAILED error
+ * if there is insufficient entropy to generate a random key.
+ *
+ * PKCS11 spec says the following about CKR_FUNCTION_FAILED error
+ * (see section 11.1.1):
+ *
+ * ... In any event, although the function call failed, the situation
+ * is not necessarily totally hopeless, as it is likely to be
+ * when CKR_GENERAL_ERROR is returned. Depending on what the root cause of
+ * the error actually was, it is possible that an attempt
+ * to make the exact same function call again would succeed.
+ *
+ * Call C_GenerateKeyPair() several times if CKR_FUNCTION_FAILED occurs.
+ */
+ for (attempts = 0; attempts < MAX_ATTEMPTS; attempts++) {
+ rv = (*ckpFunctions->C_GenerateKeyPair)(ckSessionHandle, &ckMechanism,
+ ckpPublicKeyAttributes, ckPublicKeyAttributesLength,
+ ckpPrivateKeyAttributes, ckPrivateKeyAttributesLength,
+ ckpPublicKeyHandle, ckpPrivateKeyHandle);
+ if (rv == CKR_FUNCTION_FAILED) {
+ printDebug("C_1GenerateKeyPair(): C_GenerateKeyPair() failed \
+ with CKR_FUNCTION_FAILED error, try again\n");
+ } else {
+ break;
+ }
+ }
if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
jKeyHandles = ckULongArrayToJLongArray(env, ckpKeyHandles, 2);
--- a/jdk/src/jdk.crypto.pkcs11/share/native/libj2pkcs11/p11_util.c Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.crypto.pkcs11/share/native/libj2pkcs11/p11_util.c Fri Jul 01 16:55:44 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
*/
/* Copyright (c) 2002 Graz University of Technology. All rights reserved.
@@ -1143,3 +1143,15 @@
#endif
+// prints a message to stdout if debug output is enabled
+void printDebug(const char *format, ...) {
+ if (debug == JNI_TRUE) {
+ va_list args;
+ fprintf(stdout, "sunpkcs11: ");
+ va_start(args, format);
+ vfprintf(stdout, format, args);
+ va_end(args);
+ fflush(stdout);
+ }
+}
+
--- a/jdk/src/jdk.crypto.pkcs11/share/native/libj2pkcs11/pkcs11wrapper.h Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.crypto.pkcs11/share/native/libj2pkcs11/pkcs11wrapper.h Fri Jul 01 16:55:44 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
*/
/* Copyright (c) 2002 Graz University of Technology. All rights reserved.
@@ -159,6 +159,7 @@
#include "pkcs-11v2-20a3.h"
#include <jni.h>
#include <jni_util.h>
+#include <stdarg.h>
#define MAX_STACK_BUFFER_LEN (4 * 1024)
#define MAX_HEAP_BUFFER_LEN (64 * 1024)
@@ -217,6 +218,10 @@
#define TRACE_UNINTEND
#endif
+/* debug output */
+extern jboolean debug;
+void printDebug(const char *format, ...);
+
#define CK_ASSERT_OK 0L
#define CLASS_INFO "sun/security/pkcs11/wrapper/CK_INFO"
--- a/jdk/src/jdk.jartool/share/classes/sun/tools/jar/Main.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jartool/share/classes/sun/tools/jar/Main.java Fri Jul 01 16:55:44 2016 -0700
@@ -48,6 +48,7 @@
import java.util.function.Supplier;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
+import java.util.stream.Stream;
import java.util.zip.*;
import java.util.jar.*;
import java.util.jar.Pack200.*;
@@ -77,24 +78,82 @@
PrintStream out, err;
String fname, mname, ename;
String zname = "";
- String[] files;
String rootjar = null;
- // An entryName(path)->File map generated during "expand", it helps to
+ private static final int BASE_VERSION = 0;
+
+ class Entry {
+ final String basename;
+ final String entryname;
+ final File file;
+ final boolean isDir;
+
+ Entry(int version, File file) {
+ this.file = file;
+ String path = file.getPath();
+ if (file.isDirectory()) {
+ isDir = true;
+ path = path.endsWith(File.separator) ? path :
+ path + File.separator;
+ } else {
+ isDir = false;
+ }
+ EntryName en = new EntryName(path, version);
+ basename = en.baseName;
+ entryname = en.entryName;
+ }
+ }
+
+ class EntryName {
+ final String baseName;
+ final String entryName;
+
+ EntryName(String name, int version) {
+ name = name.replace(File.separatorChar, '/');
+ String matchPath = "";
+ for (String path : pathsMap.get(version)) {
+ if (name.startsWith(path)
+ && (path.length() > matchPath.length())) {
+ matchPath = path;
+ }
+ }
+ name = safeName(name.substring(matchPath.length()));
+ // the old implementaton doesn't remove
+ // "./" if it was led by "/" (?)
+ if (name.startsWith("./")) {
+ name = name.substring(2);
+ }
+ this.baseName = name;
+ this.entryName = (version > BASE_VERSION)
+ ? VERSIONS_DIR + version + "/" + this.baseName
+ : this.baseName;
+ }
+ }
+
+ // An entryName(path)->Entry map generated during "expand", it helps to
// decide whether or not an existing entry in a jar file needs to be
// replaced, during the "update" operation.
- Map<String, File> entryMap = new HashMap<String, File>();
+ Map<String, Entry> entryMap = new HashMap<>();
- // All files need to be added/updated.
- Set<File> entries = new LinkedHashSet<File>();
+ // All entries need to be added/updated.
+ Map<String, Entry> entries = new LinkedHashMap<>();
+
// All packages.
Set<String> packages = new HashSet<>();
// All actual entries added, or existing, in the jar file ( excl manifest
// and module-info.class ). Populated during create or update.
Set<String> jarEntries = new HashSet<>();
- // Directories specified by "-C" operation.
- Set<String> paths = new HashSet<String>();
+ // A paths Set for each version, where each Set contains directories
+ // specified by the "-C" operation.
+ Map<Integer,Set<String>> pathsMap = new HashMap<>();
+
+ // There's also a files array per version
+ Map<Integer,String[]> filesMap = new HashMap<>();
+
+ // Do we think this is a multi-release jar? Set to true
+ // if --release option found followed by at least file
+ boolean isMultiRelease;
/*
* cflag: create
@@ -241,10 +300,15 @@
if (ename != null) {
addMainClass(manifest, ename);
}
+ if (isMultiRelease) {
+ addMultiRelease(manifest);
+ }
}
Map<String,Path> moduleInfoPaths = new HashMap<>();
- expand(null, files, false, moduleInfoPaths);
-
+ for (int version : filesMap.keySet()) {
+ String[] files = filesMap.get(version);
+ expand(null, files, false, moduleInfoPaths, version);
+ }
Map<String,byte[]> moduleInfos = new LinkedHashMap<>();
if (!moduleInfoPaths.isEmpty()) {
if (!checkModuleInfos(moduleInfoPaths))
@@ -348,7 +412,10 @@
(new FileInputStream(mname)) : null;
Map<String,Path> moduleInfoPaths = new HashMap<>();
- expand(null, files, true, moduleInfoPaths);
+ for (int version : filesMap.keySet()) {
+ String[] files = filesMap.get(version);
+ expand(null, files, true, moduleInfoPaths, version);
+ }
Map<String,byte[]> moduleInfos = new HashMap<>();
for (Map.Entry<String,Path> e : moduleInfoPaths.entrySet())
@@ -381,10 +448,11 @@
tmpFile.delete();
}
} else if (tflag) {
- replaceFSC(files);
+ replaceFSC(filesMap);
// For the "list table contents" action, access using the
// ZipFile class is always most efficient since only a
// "one-finger" scan through the central directory is required.
+ String[] files = filesMapToFiles(filesMap);
if (fname != null) {
list(fname, files);
} else {
@@ -396,7 +464,7 @@
}
}
} else if (xflag) {
- replaceFSC(files);
+ replaceFSC(filesMap);
// For the extract action, when extracting all the entries,
// access using the ZipInputStream class is most efficient,
// since only a single sequential scan through the zip file is
@@ -406,6 +474,8 @@
// "leading garbage", we fall back from the ZipInputStream
// implementation to the ZipFile implementation, since only the
// latter can handle it.
+
+ String[] files = filesMapToFiles(filesMap);
if (fname != null && files != null) {
extract(fname, files);
} else {
@@ -421,6 +491,7 @@
}
}
} else if (iflag) {
+ String[] files = filesMap.get(BASE_VERSION); // base entries only, can be null
genIndex(rootjar, files);
} else if (printModuleDescriptor) {
boolean found;
@@ -449,6 +520,20 @@
return ok;
}
+ private String[] filesMapToFiles(Map<Integer,String[]> filesMap) {
+ if (filesMap.isEmpty()) return null;
+ return filesMap.entrySet()
+ .stream()
+ .flatMap(this::filesToEntryNames)
+ .toArray(String[]::new);
+ }
+
+ Stream<String> filesToEntryNames(Map.Entry<Integer,String[]> fileEntries) {
+ int version = fileEntries.getKey();
+ return Stream.of(fileEntries.getValue())
+ .map(f -> (new EntryName(f, version)).entryName);
+ }
+
/**
* Parses command line arguments.
*/
@@ -579,8 +664,10 @@
/* parse file arguments */
int n = args.length - count;
if (n > 0) {
+ int version = BASE_VERSION;
int k = 0;
String[] nameBuf = new String[n];
+ pathsMap.put(version, new HashSet<>());
try {
for (int i = count; i < args.length; i++) {
if (args[i].equals("-C")) {
@@ -592,8 +679,33 @@
while (dir.indexOf("//") > -1) {
dir = dir.replace("//", "/");
}
- paths.add(dir.replace(File.separatorChar, '/'));
+ pathsMap.get(version).add(dir.replace(File.separatorChar, '/'));
nameBuf[k++] = dir + args[++i];
+ } else if (args[i].startsWith("--release")) {
+ int v = BASE_VERSION;
+ try {
+ v = Integer.valueOf(args[++i]);
+ } catch (NumberFormatException x) {
+ error(formatMsg("error.release.value.notnumber", args[i]));
+ // this will fall into the next error, thus returning false
+ }
+ if (v < 9) {
+ error(formatMsg("error.release.value.toosmall", String.valueOf(v)));
+ usageError();
+ return false;
+ }
+ // associate the files, if any, with the previous version number
+ if (k > 0) {
+ String[] files = new String[k];
+ System.arraycopy(nameBuf, 0, files, 0, k);
+ filesMap.put(version, files);
+ isMultiRelease = version > BASE_VERSION;
+ }
+ // reset the counters and start with the new version number
+ k = 0;
+ nameBuf = new String[n];
+ version = v;
+ pathsMap.put(version, new HashSet<>());
} else {
nameBuf[k++] = args[i];
}
@@ -602,8 +714,13 @@
usageError();
return false;
}
- files = new String[k];
- System.arraycopy(nameBuf, 0, files, 0, k);
+ // associate remaining files, if any, with a version
+ if (k > 0) {
+ String[] files = new String[k];
+ System.arraycopy(nameBuf, 0, files, 0, k);
+ filesMap.put(version, files);
+ isMultiRelease = version > BASE_VERSION;
+ }
} else if (cflag && (mname == null)) {
error(getMsg("error.bad.cflag"));
usageError();
@@ -651,7 +768,8 @@
void expand(File dir,
String[] files,
boolean isUpdate,
- Map<String,Path> moduleInfoPaths)
+ Map<String,Path> moduleInfoPaths,
+ int version)
throws IOException
{
if (files == null)
@@ -664,29 +782,29 @@
else
f = new File(dir, files[i]);
+ Entry entry = new Entry(version, f);
+ String entryName = entry.entryname;
+
if (f.isFile()) {
- String path = f.getPath();
- String entryName = entryName(path);
if (entryName.endsWith(MODULE_INFO)) {
moduleInfoPaths.put(entryName, f.toPath());
if (isUpdate)
- entryMap.put(entryName, f);
- } else if (entries.add(f)) {
+ entryMap.put(entryName, entry);
+ } else if (!entries.containsKey(entryName)) {
+ entries.put(entryName, entry);
jarEntries.add(entryName);
- if (path.endsWith(".class") && !entryName.startsWith(VERSIONS_DIR))
- packages.add(toPackageName(entryName));
+ if (entry.basename.endsWith(".class") && !entryName.startsWith(VERSIONS_DIR))
+ packages.add(toPackageName(entry.basename));
if (isUpdate)
- entryMap.put(entryName, f);
+ entryMap.put(entryName, entry);
}
} else if (f.isDirectory()) {
- if (entries.add(f)) {
+ if (!entries.containsKey(entryName)) {
+ entries.put(entryName, entry);
if (isUpdate) {
- String dirPath = f.getPath();
- dirPath = (dirPath.endsWith(File.separator)) ? dirPath :
- (dirPath + File.separator);
- entryMap.put(entryName(dirPath), f);
+ entryMap.put(entryName, entry);
}
- expand(f, f.list(), isUpdate, moduleInfoPaths);
+ expand(f, f.list(), isUpdate, moduleInfoPaths, version);
}
} else {
error(formatMsg("error.nosuch.fileordir", String.valueOf(f)));
@@ -740,8 +858,9 @@
in.transferTo(zos);
zos.closeEntry();
}
- for (File file: entries) {
- addFile(zos, file);
+ for (String entryname : entries.keySet()) {
+ Entry entry = entries.get(entryname);
+ addFile(zos, entry);
}
zos.close();
}
@@ -823,7 +942,7 @@
|| (Mflag && isManifestEntry)) {
continue;
} else if (isManifestEntry && ((newManifest != null) ||
- (ename != null))) {
+ (ename != null) || isMultiRelease)) {
foundManifest = true;
if (newManifest != null) {
// Don't read from the newManifest InputStream, as we
@@ -862,21 +981,21 @@
zos.putNextEntry(e2);
copy(zis, zos);
} else { // replace with the new files
- File f = entryMap.get(name);
- addFile(zos, f);
+ Entry ent = entryMap.get(name);
+ addFile(zos, ent);
entryMap.remove(name);
- entries.remove(f);
+ entries.remove(name);
}
jarEntries.add(name);
- if (name.endsWith(".class"))
+ if (name.endsWith(".class") && !(name.startsWith(VERSIONS_DIR)))
packages.add(toPackageName(name));
}
}
// add the remaining new files
- for (File f: entries) {
- addFile(zos, f);
+ for (String entryname : entries.keySet()) {
+ addFile(zos, entries.get(entryname));
}
if (!foundManifest) {
if (newManifest != null) {
@@ -961,6 +1080,9 @@
if (ename != null) {
addMainClass(m, ename);
}
+ if (isMultiRelease) {
+ addMultiRelease(m);
+ }
ZipEntry e = new ZipEntry(MANIFEST_NAME);
e.setTime(System.currentTimeMillis());
if (flag0) {
@@ -1016,24 +1138,6 @@
return name;
}
- private String entryName(String name) {
- name = name.replace(File.separatorChar, '/');
- String matchPath = "";
- for (String path : paths) {
- if (name.startsWith(path)
- && (path.length() > matchPath.length())) {
- matchPath = path;
- }
- }
- name = safeName(name.substring(matchPath.length()));
- // the old implementaton doesn't remove
- // "./" if it was led by "/" (?)
- if (name.startsWith("./")) {
- name = name.substring(2);
- }
- return name;
- }
-
private void addVersion(Manifest m) {
Attributes global = m.getMainAttributes();
if (global.getValue(Attributes.Name.MANIFEST_VERSION) == null) {
@@ -1058,6 +1162,11 @@
global.put(Attributes.Name.MAIN_CLASS, mainApp);
}
+ private void addMultiRelease(Manifest m) {
+ Attributes global = m.getMainAttributes();
+ global.put(Attributes.Name.MULTI_RELEASE, "true");
+ }
+
private boolean isAmbiguousMainClass(Manifest m) {
if (ename != null) {
Attributes global = m.getMainAttributes();
@@ -1073,14 +1182,10 @@
/**
* Adds a new file entry to the ZIP output stream.
*/
- void addFile(ZipOutputStream zos, File file) throws IOException {
- String name = file.getPath();
- boolean isDir = file.isDirectory();
- if (isDir) {
- name = name.endsWith(File.separator) ? name :
- (name + File.separator);
- }
- name = entryName(name);
+ void addFile(ZipOutputStream zos, Entry entry) throws IOException {
+ File file = entry.file;
+ String name = entry.entryname;
+ boolean isDir = entry.isDir;
if (name.equals("") || name.equals(".") || name.equals(zname)) {
return;
@@ -1221,12 +1326,15 @@
os.updateEntry(e);
}
- void replaceFSC(String files[]) {
- if (files != null) {
- for (int i = 0; i < files.length; i++) {
- files[i] = files[i].replace(File.separatorChar, '/');
+ void replaceFSC(Map<Integer, String []> filesMap) {
+ filesMap.keySet().forEach(version -> {
+ String[] files = filesMap.get(version);
+ if (files != null) {
+ for (int i = 0; i < files.length; i++) {
+ files[i] = files[i].replace(File.separatorChar, '/');
+ }
}
- }
+ });
}
@SuppressWarnings("serial")
@@ -1566,7 +1674,7 @@
/**
* Print an error message; like something is broken
*/
- protected void error(String s) {
+ void error(String s) {
err.println(s);
}
--- a/jdk/src/jdk.jartool/share/classes/sun/tools/jar/resources/jar.properties Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jartool/share/classes/sun/tools/jar/resources/jar.properties Fri Jul 01 16:55:44 2016 -0700
@@ -63,24 +63,28 @@
error.module.descriptor.not.found=\
Module descriptor not found
error.versioned.info.without.root=\
- module-info.class found in versioned section without module-info.class \
+ module-info.class found in a versioned directory without module-info.class \
in the root
error.versioned.info.name.notequal=\
- module-info.class in versioned section contains incorrect name
+ module-info.class in a versioned directory contains incorrect name
error.versioned.info.requires.public=\
- module-info.class in versioned section contains additional requires public
+ module-info.class in a versioned directory contains additional requires public
error.versioned.info.requires.added=\
- module-info.class in versioned section contains additional requires
+ module-info.class in a versioned directory contains additional requires
error.versioned.info.requires.dropped=\
- module-info.class in versioned section contains missing requires
+ module-info.class in a versioned directory contains missing requires
error.versioned.info.exports.notequal=\
- module-info.class in versioned section contains different exports
+ module-info.class in a versioned directory contains different exports
error.versioned.info.provides.notequal=\
- module-info.class in versioned section contains different provides
+ module-info.class in a versioned directory contains different provides
error.invalid.versioned.module.attribute=\
Invalid module descriptor attribute {0}
error.missing.provider=\
Service provider not found: {0}
+error.release.value.notnumber=\
+ release {0} not valid
+error.release.value.toosmall=\
+ release {0} not valid, must be >= 9
out.added.manifest=\
added manifest
out.added.module-info=\
@@ -109,7 +113,7 @@
usage.compat=\
\Compatibility Interface:\
\n\
-Usage: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...\n\
+Usage: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files] ...\n\
Options:\n\
\ \ -c create new archive\n\
\ \ -t list table of contents for archive\n\
@@ -141,7 +145,7 @@
Try `jar --help' for more information.
main.help.preopt=\
-Usage: jar [OPTION...] [-C dir] files ...\n\
+Usage: jar [OPTION...] [ [--release VERSION] [-C dir] files] ...\n\
jar creates an archive for classes and resources, and can manipulate or\n\
restore individual classes or resources from an archive.\n\
\n\
@@ -156,7 +160,9 @@
\ -C foo/ classes resources\n\
\ # Update an existing non-modular jar to a modular jar:\n\
\ jar --update --file foo.jar --main-class com.foo.Main --module-version 1.0\n\
-\ -C foo/ module-info.class
+\ -C foo/ module-info.class\n\
+\ # Create a multi-release jar, placing some files in the META-INF/versions/9 directory:\n\
+\ jar --create --file mr.jar -C foo classes --release 9 -C foo9 classes
main.help.opt.main=\
\ Main operation mode:\n
main.help.opt.main.create=\
@@ -178,7 +184,9 @@
\ -C DIR Change to the specified directory and include the\n\
\ following file
main.help.opt.any.file=\
-\ -f, --file=FILE The archive file name
+\ -f, --file=FILE The archive file name\n\
+\ --release VERSION Places all following files in a versioned directory\n\
+\ of the jar (i.e. META-INF/versions/VERSION/)
main.help.opt.any.verbose=\
\ -v, --verbose Generate verbose output on standard output
main.help.opt.create.update=\
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jimage/JImageTask.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jimage/JImageTask.java Fri Jul 01 16:55:44 2016 -0700
@@ -54,8 +54,8 @@
}, "--dir"),
new Option<JImageTask>(true, (task, option, arg) -> {
- task.options.filters = arg;
- }, "--filter"),
+ task.options.include = arg;
+ }, "--include"),
new Option<JImageTask>(false, (task, option, arg) -> {
task.options.fullVersion = true;
@@ -81,12 +81,12 @@
private static final FileSystem JRT_FILE_SYSTEM = Utils.jrtFileSystem();
private final OptionsValues options;
- private final List<Predicate<String>> filterPredicates;
+ private final List<Predicate<String>> includePredicates;
private PrintWriter log;
JImageTask() {
this.options = new OptionsValues();
- this.filterPredicates = new ArrayList<>();
+ this.includePredicates = new ArrayList<>();
log = null;
}
@@ -98,7 +98,7 @@
static class OptionsValues {
Task task = Task.LIST;
String directory = ".";
- String filters = "";
+ String include = "";
boolean fullVersion;
boolean help;
boolean verbose;
@@ -200,6 +200,8 @@
log.println(TASK_HELPER.getMessage("main.opt." + name));
}
+
+ log.println(TASK_HELPER.getMessage("main.opt.footer"));
} else {
try {
log.println(TASK_HELPER.getMessage("main.usage." +
@@ -219,7 +221,7 @@
}
}
- processFilter(options.filters);
+ processInclude(options.include);
return run() ? EXIT_OK : EXIT_ERROR;
} catch (BadArgs e) {
@@ -239,15 +241,15 @@
}
}
- private void processFilter(String filters) {
- if (filters.isEmpty()) {
+ private void processInclude(String include) {
+ if (include.isEmpty()) {
return;
}
- for (String filter : filters.split(",")) {
+ for (String filter : include.split(",")) {
final PathMatcher matcher = Utils.getPathMatcher(JRT_FILE_SYSTEM, filter);
Predicate<String> predicate = (path) -> matcher.matches(JRT_FILE_SYSTEM.getPath(path));
- filterPredicates.add(predicate);
+ includePredicates.add(predicate);
}
}
@@ -388,9 +390,9 @@
String oldModule = "";
for (String name : entryNames) {
- boolean match = filterPredicates.isEmpty();
+ boolean match = includePredicates.isEmpty();
- for (Predicate<String> predicate : filterPredicates) {
+ for (Predicate<String> predicate : includePredicates) {
if (predicate.test(name)) {
match = true;
break;
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jimage/resources/jimage.properties Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jimage/resources/jimage.properties Fri Jul 01 16:55:44 2016 -0700
@@ -62,9 +62,19 @@
main.opt.dir=\
\ --dir Target directory for extract directive
-main.opt.filter=\
-\ --filter Filter entries for list or extract\n\
-\ Ex. /java.base/*, */module-info.class
+main.opt.include=\
+\ --include <pattern-list> Pattern list for filtering list or extract entries.
+
+main.opt.footer=\
+\n\
+\For options requiring a <pattern-list>, the value will be a comma\
+\ separated list of elements each using one the following forms:\n\
+\ <glob-pattern>\n\
+\ glob:<glob-pattern>\n\
+\ regex:<regex-pattern>\n\
+\ @<filename> where filename is the name of a file containing patterns to be\
+\ used, one pattern per line\n\
+
main.opt.fullversion=\
\ --fullversion Print full version information
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/Jlink.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/Jlink.java Fri Jul 01 16:55:44 2016 -0700
@@ -32,10 +32,10 @@
import java.util.Map;
import java.util.Objects;
import java.util.Set;
+import jdk.tools.jlink.internal.ExecutableImage;
import jdk.tools.jlink.internal.JlinkTask;
import jdk.tools.jlink.plugin.Plugin;
import jdk.tools.jlink.plugin.PluginException;
-import jdk.tools.jlink.plugin.ExecutableImage;
import jdk.tools.jlink.builder.ImageBuilder;
import jdk.tools.jlink.internal.PluginRepository;
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/builder/DefaultImageBuilder.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/builder/DefaultImageBuilder.java Fri Jul 01 16:55:44 2016 -0700
@@ -57,7 +57,7 @@
import jdk.tools.jlink.internal.BasicImageWriter;
import jdk.tools.jlink.internal.plugins.FileCopierPlugin;
import jdk.tools.jlink.internal.plugins.FileCopierPlugin.SymImageFile;
-import jdk.tools.jlink.plugin.ExecutableImage;
+import jdk.tools.jlink.internal.ExecutableImage;
import jdk.tools.jlink.plugin.ModulePool;
import jdk.tools.jlink.plugin.ModuleEntry;
import jdk.tools.jlink.plugin.PluginException;
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/builder/ImageBuilder.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/builder/ImageBuilder.java Fri Jul 01 16:55:44 2016 -0700
@@ -27,7 +27,7 @@
import java.io.DataOutputStream;
import java.util.Properties;
-import jdk.tools.jlink.plugin.ExecutableImage;
+import jdk.tools.jlink.internal.ExecutableImage;
import jdk.tools.jlink.plugin.PluginException;
import jdk.tools.jlink.plugin.ModulePool;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/AbstractModuleEntry.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,95 @@
+/*
+ * 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.
+ */
+
+package jdk.tools.jlink.internal;
+
+import java.util.Objects;
+import jdk.tools.jlink.plugin.ModuleEntry;
+
+/**
+ * A LinkModuleEntry is the elementary unit of data inside an image. It is
+ * generally a file. e.g.: a java class file, a resource file, a shared library,
+ * ...
+ * <br>
+ * A LinkModuleEntry is identified by a path of the form:
+ * <ul>
+ * <li>For jimage content: /{module name}/{package1}/.../{packageN}/{file
+ * name}</li>
+ * <li>For other files (shared lib, launchers, config, ...):/{module name}/
+ * {@literal bin|conf|native}/{dir1}>/.../{dirN}/{file name}</li>
+ * </ul>
+ */
+abstract class AbstractModuleEntry implements ModuleEntry {
+ private final String path;
+ private final String module;
+ private final Type type;
+
+ /**
+ * Create a new AbstractModuleEntry.
+ *
+ * @param module The module name.
+ * @param path The data path identifier.
+ * @param type The data type.
+ */
+ AbstractModuleEntry(String module, String path, Type type) {
+ this.module = Objects.requireNonNull(module);
+ this.path = Objects.requireNonNull(path);
+ this.type = Objects.requireNonNull(type);
+ }
+
+ @Override
+ public final String getModule() {
+ return module;
+ }
+
+ @Override
+ public final String getPath() {
+ return path;
+ }
+
+ @Override
+ public final Type getType() {
+ return type;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(this.path);
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (!(other instanceof AbstractModuleEntry)) {
+ return false;
+ }
+ AbstractModuleEntry f = (AbstractModuleEntry) other;
+ return f.path.equals(path);
+ }
+
+ @Override
+ public String toString() {
+ return getPath();
+ }
+}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/Archive.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/Archive.java Fri Jul 01 16:55:44 2016 -0700
@@ -42,7 +42,6 @@
public abstract class Entry {
public static enum EntryType {
-
MODULE_NAME,
CLASS_OR_RESOURCE,
NATIVE_LIB,
@@ -57,14 +56,10 @@
private final String path;
public Entry(Archive archive, String path, String name, EntryType type) {
- Objects.requireNonNull(archive);
- Objects.requireNonNull(path);
- Objects.requireNonNull(name);
- Objects.requireNonNull(type);
- this.archive = archive;
- this.path = path;
- this.name = name;
- this.type = type;
+ this.archive = Objects.requireNonNull(archive);
+ this.path = Objects.requireNonNull(path);
+ this.name = Objects.requireNonNull(name);
+ this.type = Objects.requireNonNull(type);
}
public Archive archive() {
@@ -79,7 +74,7 @@
return type;
}
- /**
+ /*
* Returns the name of this entry.
*/
public String name() {
@@ -91,7 +86,7 @@
return "type " + type.name() + " path " + path;
}
- /**
+ /*
* Returns the number of uncompressed bytes for this entry.
*/
public abstract long size();
@@ -99,17 +94,17 @@
public abstract InputStream stream() throws IOException;
}
- /**
+ /*
* The module name.
*/
String moduleName();
- /**
+ /*
* Returns the path to this module's content
*/
Path getPath();
- /**
+ /*
* Stream of Entry.
* The stream of entries needs to be closed after use
* since it might cover lazy I/O based resources.
@@ -117,12 +112,12 @@
*/
Stream<Entry> entries();
- /**
+ /*
* Open the archive
*/
void open() throws IOException;
- /**
+ /*
* Close the archive
*/
void close() throws IOException;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ArchiveEntryModuleEntry.java Fri Jul 01 16:55:44 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. 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.tools.jlink.internal;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UncheckedIOException;
+import java.util.Objects;
+import jdk.tools.jlink.plugin.ModuleEntry;
+
+/**
+ * A ModuleEntry backed by a given Archive Entry.
+ */
+final class ArchiveEntryModuleEntry extends AbstractModuleEntry {
+ private final Archive.Entry entry;
+
+ /**
+ * Create a new ArchiveModuleEntry.
+ *
+ * @param module The module name.
+ * @param path The data path identifier.
+ * @param entry The archive Entry.
+ */
+ ArchiveEntryModuleEntry(String module, String path, Archive.Entry entry) {
+ super(module, path, getImageFileType(Objects.requireNonNull(entry)));
+ this.entry = entry;
+ }
+
+ @Override
+ public InputStream stream() {
+ try {
+ return entry.stream();
+ } catch (IOException ex) {
+ throw new UncheckedIOException(ex);
+ }
+ }
+
+ @Override
+ public long getLength() {
+ return entry.size();
+ }
+
+ private static ModuleEntry.Type getImageFileType(Archive.Entry entry) {
+ switch(entry.type()) {
+ case CLASS_OR_RESOURCE:
+ return ModuleEntry.Type.CLASS_OR_RESOURCE;
+ case CONFIG:
+ return ModuleEntry.Type.CONFIG;
+ case NATIVE_CMD:
+ return ModuleEntry.Type.NATIVE_CMD;
+ case NATIVE_LIB:
+ return ModuleEntry.Type.NATIVE_LIB;
+ default:
+ return ModuleEntry.Type.OTHER;
+ }
+ }
+}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/BasicImageWriter.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/BasicImageWriter.java Fri Jul 01 16:55:44 2016 -0700
@@ -28,6 +28,7 @@
import java.nio.ByteOrder;
import java.util.ArrayList;
import java.util.List;
+import java.util.Objects;
import jdk.internal.jimage.ImageHeader;
import jdk.internal.jimage.ImageStream;
import jdk.internal.jimage.ImageStringsReader;
@@ -54,7 +55,7 @@
}
public BasicImageWriter(ByteOrder byteOrder) {
- this.byteOrder = byteOrder;
+ this.byteOrder = Objects.requireNonNull(byteOrder);
this.input = new ArrayList<>();
this.strings = new ImageStringsWriter();
this.headerStream = new ImageStream(byteOrder);
@@ -96,8 +97,8 @@
private void generatePerfectHash() {
PerfectHashBuilder<ImageLocationWriter> builder =
new PerfectHashBuilder<>(
- PerfectHashBuilder.Entry.class, // PerfectHashBuilder.Entry<ImageLocationWriter>().getClass()
- PerfectHashBuilder.Bucket.class); // PerfectHashBuilder.Bucket<ImageLocationWriter>().getClass()
+ PerfectHashBuilder.Entry.class,
+ PerfectHashBuilder.Bucket.class);
input.forEach((location) -> {
builder.put(location.getFullName(), location);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ByteArrayModuleEntry.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,77 @@
+/*
+ * 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.
+ */
+
+package jdk.tools.jlink.internal;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.UncheckedIOException;
+import java.util.Objects;
+
+/**
+ * A ModuleEntry backed by a given byte[].
+ */
+class ByteArrayModuleEntry extends AbstractModuleEntry {
+ private final byte[] buffer;
+
+ /**
+ * Create a new ByteArrayModuleEntry.
+ *
+ * @param module The module name.
+ * @param path The data path identifier.
+ * @param type The data type.
+ * @param buf The byte buffer.
+ */
+ ByteArrayModuleEntry(String module, String path, Type type, byte[] buffer) {
+ super(module, path, type);
+ this.buffer = Objects.requireNonNull(buffer);
+ }
+
+ @Override
+ public byte[] getBytes() {
+ return buffer.clone();
+ }
+
+ @Override
+ public InputStream stream() {
+ return new ByteArrayInputStream(buffer);
+ }
+
+ @Override
+ public void write(OutputStream out) {
+ try {
+ out.write(buffer);
+ } catch (IOException ex) {
+ throw new UncheckedIOException(ex);
+ }
+ }
+
+ @Override
+ public long getLength() {
+ return buffer.length;
+ }
+}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/DirArchive.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/DirArchive.java Fri Jul 01 16:55:44 2016 -0700
@@ -112,13 +112,11 @@
@Override
public Stream<Entry> entries() {
- Stream<Entry> ret = null;
try {
- ret = Files.walk(dirPath).map(this::toEntry).filter(n -> n != null);
+ return Files.walk(dirPath).map(this::toEntry).filter(n -> n != null);
} catch (IOException ex) {
throw new RuntimeException(ex);
}
- return ret;
}
private Archive.Entry toEntry(Path p) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ExecutableImage.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package jdk.tools.jlink.internal;
+
+import java.nio.file.Path;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * An executable runtime image. Contains the information about the executable
+ * image created.
+ */
+public interface ExecutableImage {
+
+ /**
+ * Image home directory,
+ *
+ * @return The home directory.
+ */
+ public Path getHome();
+
+ /**
+ * The names of the modules located in the image.
+ *
+ * @return The set of modules.
+ */
+ public Set<String> getModules();
+
+ /**
+ * The list of arguments required to execute the image.
+ *
+ * @return The list of arguments.
+ */
+ public List<String> getExecutionArgs();
+
+ /**
+ * Store new arguments required to execute the image.
+ *
+ * @param args Additional arguments
+ */
+ public void storeLaunchArgs(List<String> args);
+}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ImageFileCreator.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ImageFileCreator.java Fri Jul 01 16:55:44 2016 -0700
@@ -25,10 +25,8 @@
package jdk.tools.jlink.internal;
import java.io.BufferedOutputStream;
-import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
-import java.io.InputStream;
import java.io.OutputStream;
import java.nio.ByteOrder;
import java.nio.file.Files;
@@ -45,9 +43,7 @@
import jdk.tools.jlink.internal.Archive.Entry;
import jdk.tools.jlink.internal.Archive.Entry.EntryType;
import jdk.tools.jlink.internal.ModulePoolImpl.CompressedModuleData;
-import jdk.tools.jlink.plugin.ExecutableImage;
import jdk.tools.jlink.plugin.PluginException;
-import jdk.tools.jlink.plugin.ModulePool;
import jdk.tools.jlink.plugin.ModuleEntry;
/**
@@ -73,7 +69,7 @@
private final Map<String, List<Entry>> entriesForModule = new HashMap<>();
private final ImagePluginStack plugins;
private ImageFileCreator(ImagePluginStack plugins) {
- this.plugins = plugins;
+ this.plugins = Objects.requireNonNull(plugins);
}
public static ExecutableImage create(Set<Archive> archives,
@@ -232,10 +228,9 @@
out.write(bytes, 0, bytes.length);
// write module content
- for (ModuleEntry res : content) {
- byte[] buf = res.getBytes();
- out.write(buf, 0, buf.length);
- }
+ content.stream().forEach((res) -> {
+ res.write(out);
+ });
tree.addContent(out);
@@ -244,21 +239,6 @@
return resultResources;
}
- private static ModuleEntry.Type mapImageFileType(EntryType type) {
- switch(type) {
- case CONFIG: {
- return ModuleEntry.Type.CONFIG;
- }
- case NATIVE_CMD: {
- return ModuleEntry.Type.NATIVE_CMD;
- }
- case NATIVE_LIB: {
- return ModuleEntry.Type.NATIVE_LIB;
- }
- }
- return null;
- }
-
private static ModulePoolImpl createPools(Set<Archive> archives,
Map<String, List<Entry>> entriesForModule,
ByteOrder byteOrder,
@@ -278,54 +258,27 @@
for (Archive archive : archives) {
String mn = archive.moduleName();
for (Entry entry : entriesForModule.get(mn)) {
-
+ String path;
if (entry.type() == EntryType.CLASS_OR_RESOURCE) {
// Removal of "classes/" radical.
- String path = entry.name();
- try (InputStream stream = entry.stream()) {
- byte[] bytes = readAllBytes(stream);
- if (path.endsWith("module-info.class")) {
- path = "/" + path;
- } else {
- path = "/" + mn + "/" + path;
- }
- try {
- resources.add(ModuleEntry.create(path, bytes));
- } catch (Exception ex) {
- throw new IOException(ex);
- }
+ path = entry.name();
+ if (path.endsWith("module-info.class")) {
+ path = "/" + path;
+ } else {
+ path = "/" + mn + "/" + path;
}
} else {
- try {
- // Entry.path() contains the kind of file native, conf, bin, ...
- // Keep it to avoid naming conflict (eg: native/jvm.cfg and config/jvm.cfg
- resources.add(ModuleEntry.create(mn,
- "/" + mn + "/" + entry.path(), mapImageFileType(entry.type()),
- entry.stream(), entry.size()));
- } catch (Exception ex) {
- throw new IOException(ex);
- }
+ // Entry.path() contains the kind of file native, conf, bin, ...
+ // Keep it to avoid naming conflict (eg: native/jvm.cfg and config/jvm.cfg
+ path = "/" + mn + "/" + entry.path();
}
+
+ resources.add(new ArchiveEntryModuleEntry(mn, path, entry));
}
}
return resources;
}
- private static final int BUF_SIZE = 8192;
-
- private static byte[] readAllBytes(InputStream is) throws IOException {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- byte[] buf = new byte[BUF_SIZE];
- while (true) {
- int n = is.read(buf);
- if (n < 0) {
- break;
- }
- baos.write(buf, 0, n);
- }
- return baos.toByteArray();
- }
-
/**
* Helper method that splits a Resource path onto 3 items: module, parent
* and resource name.
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ImagePluginConfiguration.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ImagePluginConfiguration.java Fri Jul 01 16:55:44 2016 -0700
@@ -32,33 +32,30 @@
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
-import jdk.tools.jlink.plugin.ExecutableImage;
import jdk.tools.jlink.builder.ImageBuilder;
import jdk.tools.jlink.Jlink;
import jdk.tools.jlink.plugin.Plugin;
import jdk.tools.jlink.plugin.PluginException;
import jdk.tools.jlink.plugin.Plugin.Category;
import jdk.tools.jlink.plugin.ModulePool;
-import jdk.tools.jlink.plugin.PostProcessorPlugin;
-import jdk.tools.jlink.plugin.TransformerPlugin;
/**
* Plugins configuration.
*/
public final class ImagePluginConfiguration {
- private static final List<Plugin.Category> CATEGORIES_ORDER = new ArrayList<>();
+ private static final List<Category> CATEGORIES_ORDER = new ArrayList<>();
static {
- CATEGORIES_ORDER.add(Plugin.Category.FILTER);
- CATEGORIES_ORDER.add(Plugin.Category.TRANSFORMER);
- CATEGORIES_ORDER.add(Plugin.Category.MODULEINFO_TRANSFORMER);
- CATEGORIES_ORDER.add(Plugin.Category.SORTER);
- CATEGORIES_ORDER.add(Plugin.Category.COMPRESSOR);
- CATEGORIES_ORDER.add(Plugin.Category.METAINFO_ADDER);
- CATEGORIES_ORDER.add(Plugin.Category.VERIFIER);
- CATEGORIES_ORDER.add(Plugin.Category.PROCESSOR);
- CATEGORIES_ORDER.add(Plugin.Category.PACKAGER);
+ CATEGORIES_ORDER.add(Category.FILTER);
+ CATEGORIES_ORDER.add(Category.TRANSFORMER);
+ CATEGORIES_ORDER.add(Category.MODULEINFO_TRANSFORMER);
+ CATEGORIES_ORDER.add(Category.SORTER);
+ CATEGORIES_ORDER.add(Category.COMPRESSOR);
+ CATEGORIES_ORDER.add(Category.METAINFO_ADDER);
+ CATEGORIES_ORDER.add(Category.VERIFIER);
+ CATEGORIES_ORDER.add(Category.PROCESSOR);
+ CATEGORIES_ORDER.add(Category.PACKAGER);
}
private ImagePluginConfiguration() {
@@ -72,8 +69,8 @@
if (pluginsConfiguration == null) {
return new ImagePluginStack();
}
- Map<Plugin.Category, List<Plugin>> plugins = new LinkedHashMap<>();
- for (Plugin.Category cat : CATEGORIES_ORDER) {
+ Map<Category, List<Plugin>> plugins = new LinkedHashMap<>();
+ for (Category cat : CATEGORIES_ORDER) {
plugins.put(cat, new ArrayList<>());
}
@@ -85,7 +82,7 @@
+ " added more than once to stack ");
}
seen.add(plug.getName());
- Category category = Utils.getCategory(plug);
+ Category category = plug.getType();
if (category == null) {
throw new PluginException("Invalid category for "
+ plug.getName());
@@ -94,26 +91,13 @@
lst.add(plug);
}
- List<TransformerPlugin> transformerPlugins = new ArrayList<>();
- List<PostProcessorPlugin> postProcessingPlugins = new ArrayList<>();
- for (Entry<Plugin.Category, List<Plugin>> entry : plugins.entrySet()) {
+ List<Plugin> orderedPlugins = new ArrayList<>();
+ plugins.entrySet().stream().forEach((entry) -> {
// Sort according to plugin constraints
- List<Plugin> orderedPlugins = PluginOrderingGraph.sort(entry.getValue());
- Category category = entry.getKey();
- for (Plugin p : orderedPlugins) {
- if (Utils.isPostProcessor(category)) {
- @SuppressWarnings("unchecked")
- PostProcessorPlugin pp = (PostProcessorPlugin) p;
- postProcessingPlugins.add(pp);
- } else {
- @SuppressWarnings("unchecked")
- TransformerPlugin trans = (TransformerPlugin) p;
- transformerPlugins.add(trans);
- }
- }
- }
+ orderedPlugins.addAll(PluginOrderingGraph.sort(entry.getValue()));
+ });
Plugin lastSorter = null;
- for (Plugin plugin : transformerPlugins) {
+ for (Plugin plugin : orderedPlugins) {
if (plugin.getName().equals(pluginsConfiguration.getLastSorterPluginName())) {
lastSorter = plugin;
break;
@@ -145,7 +129,6 @@
};
}
- return new ImagePluginStack(builder, transformerPlugins,
- lastSorter, postProcessingPlugins);
+ return new ImagePluginStack(builder, orderedPlugins, lastSorter);
}
}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ImagePluginStack.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ImagePluginStack.java Fri Jul 01 16:55:44 2016 -0700
@@ -24,7 +24,6 @@
*/
package jdk.tools.jlink.internal;
-import java.io.ByteArrayInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.lang.module.ModuleDescriptor;
@@ -45,14 +44,11 @@
import jdk.internal.jimage.decompressor.Decompressor;
import jdk.tools.jlink.plugin.Plugin;
-import jdk.tools.jlink.plugin.ExecutableImage;
import jdk.tools.jlink.builder.ImageBuilder;
-import jdk.tools.jlink.plugin.TransformerPlugin;
import jdk.tools.jlink.plugin.PluginException;
import jdk.tools.jlink.plugin.ModulePool;
import jdk.tools.jlink.plugin.LinkModule;
import jdk.tools.jlink.plugin.ModuleEntry;
-import jdk.tools.jlink.plugin.PostProcessorPlugin;
/**
* Plugins Stack. Plugins entry point to apply transformations onto resources
@@ -96,7 +92,7 @@
public CheckOrderResourcePool(ByteOrder order, List<ModuleEntry> orderedList, StringTable table) {
super(order, table);
- this.orderedList = orderedList;
+ this.orderedList = Objects.requireNonNull(orderedList);
}
/**
@@ -119,7 +115,6 @@
private int currentid = 0;
private final Map<String, Integer> stringsUsage = new HashMap<>();
-
private final Map<String, Integer> stringsMap = new HashMap<>();
private final Map<Integer, String> reverseMap = new HashMap<>();
@@ -161,47 +156,40 @@
}
}
+ private final ImageBuilder imageBuilder;
private final Plugin lastSorter;
- private final List<TransformerPlugin> contentPlugins = new ArrayList<>();
- private final List<PostProcessorPlugin> postProcessingPlugins = new ArrayList<>();
+ private final List<Plugin> plugins = new ArrayList<>();
private final List<ResourcePrevisitor> resourcePrevisitors = new ArrayList<>();
- private final ImageBuilder imageBuilder;
public ImagePluginStack() {
- this(null, Collections.emptyList(), null,
- Collections.emptyList());
+ this(null, Collections.emptyList(), null);
}
public ImagePluginStack(ImageBuilder imageBuilder,
- List<TransformerPlugin> contentPlugins,
- Plugin lastSorter,
- List<PostProcessorPlugin> postprocessingPlugins) {
- Objects.requireNonNull(contentPlugins);
+ List<Plugin> plugins,
+ Plugin lastSorter) {
+ this.imageBuilder = Objects.requireNonNull(imageBuilder);
this.lastSorter = lastSorter;
- for (TransformerPlugin p : contentPlugins) {
+ this.plugins.addAll(Objects.requireNonNull(plugins));
+ plugins.stream().forEach((p) -> {
Objects.requireNonNull(p);
if (p instanceof ResourcePrevisitor) {
resourcePrevisitors.add((ResourcePrevisitor) p);
}
- this.contentPlugins.add(p);
- }
- for (PostProcessorPlugin p : postprocessingPlugins) {
- Objects.requireNonNull(p);
- this.postProcessingPlugins.add(p);
- }
- this.imageBuilder = imageBuilder;
+ });
}
public void operate(ImageProvider provider) throws Exception {
ExecutableImage img = provider.retrieve(this);
List<String> arguments = new ArrayList<>();
- for (PostProcessorPlugin plugin : postProcessingPlugins) {
- List<String> lst = plugin.process(img);
- if (lst != null) {
- arguments.addAll(lst);
- }
- }
+ plugins.stream()
+ .filter(PostProcessor.class::isInstance)
+ .map((plugin) -> ((PostProcessor)plugin).process(img))
+ .filter((lst) -> (lst != null))
+ .forEach((lst) -> {
+ arguments.addAll(lst);
+ });
img.storeLaunchArgs(arguments);
}
@@ -230,19 +218,19 @@
resources.getStringTable());
}
PreVisitStrings previsit = new PreVisitStrings();
- for (ResourcePrevisitor p : resourcePrevisitors) {
+ resourcePrevisitors.stream().forEach((p) -> {
p.previsit(resources, previsit);
- }
+ });
// Store the strings resulting from the previsit.
List<String> sorted = previsit.getSortedStrings();
- for (String s : sorted) {
+ sorted.stream().forEach((s) -> {
resources.getStringTable().addString(s);
- }
+ });
ModulePoolImpl current = resources;
List<ModuleEntry> frozenOrder = null;
- for (TransformerPlugin p : contentPlugins) {
+ for (Plugin p : plugins) {
current.setReadOnly();
ModulePoolImpl output = null;
if (p == lastSorter) {
@@ -443,9 +431,7 @@
byte[] bytes = decompressor.decompressResource(getByteOrder(),
(int offset) -> pool.getStringTable().getString(offset),
res.getBytes());
- res = ModuleEntry.create(res.getPath(),
- new ByteArrayInputStream(bytes),
- bytes.length);
+ res = res.create(bytes);
} catch (IOException ex) {
throw new PluginException(ex);
}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ImageResourcesTree.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ImageResourcesTree.java Fri Jul 01 16:55:44 2016 -0700
@@ -113,8 +113,7 @@
private final boolean isEmpty;
PackageReference(String name, boolean isEmpty) {
- Objects.requireNonNull(name);
- this.name = name;
+ this.name = Objects.requireNonNull(name);
this.isEmpty = isEmpty;
}
@@ -132,12 +131,8 @@
private void addReference(String name, boolean isEmpty) {
PackageReference ref = references.get(name);
- if (ref == null) {
+ if (ref == null || ref.isEmpty) {
references.put(name, new PackageReference(name, isEmpty));
- } else {
- if (ref.isEmpty) { // replace with new one incase non empty.
- references.put(name, new PackageReference(name, isEmpty));
- }
}
}
@@ -267,8 +262,7 @@
}
// Validate that the packages are well formed.
for (Node n : packages.children.values()) {
- PackageNode pkg = (PackageNode) n;
- pkg.validate();
+ ((PackageNode)n).validate();
}
}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ImageStringsWriter.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ImageStringsWriter.java Fri Jul 01 16:55:44 2016 -0700
@@ -44,9 +44,15 @@
// Reserve 0 offset for empty string.
int offset = addString("");
- assert offset == 0 : "Empty string not zero offset";
+ if (offset != 0) {
+ throw new InternalError("Empty string not offset zero");
+ }
+
// Reserve 1 offset for frequently used ".class".
- addString("class");
+ offset = addString("class");
+ if (offset != 1) {
+ throw new InternalError("'class' string not offset one");
+ }
}
private int addString(final String string) {
@@ -76,7 +82,9 @@
public String get(int offset) {
ByteBuffer buffer = stream.getBuffer();
int capacity = buffer.capacity();
- assert 0 <= offset && offset < capacity : "String buffer offset out of range";
+ if (offset < 0 || offset >= capacity) {
+ throw new InternalError("String buffer offset out of range");
+ }
int zero = NOT_FOUND;
for (int i = offset; i < capacity; i++) {
if (buffer.get(i) == '\0') {
@@ -84,7 +92,9 @@
break;
}
}
- assert zero != NOT_FOUND;
+ if (zero == NOT_FOUND) {
+ throw new InternalError("String zero terminator not found");
+ }
int length = zero - offset;
byte[] bytes = new byte[length];
int mark = buffer.position();
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/JarArchive.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/JarArchive.java Fri Jul 01 16:55:44 2016 -0700
@@ -30,8 +30,6 @@
import java.io.UncheckedIOException;
import java.nio.file.Path;
import java.util.Objects;
-import java.util.function.Consumer;
-import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
@@ -53,8 +51,8 @@
JarEntry(String path, String name, EntryType type, ZipFile file, ZipEntry entry) {
super(JarArchive.this, path, name, type);
- this.entry = entry;
- this.file = file;
+ this.entry = Objects.requireNonNull(entry);
+ this.file = Objects.requireNonNull(file);
size = entry.getSize();
}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/JlinkTask.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/JlinkTask.java Fri Jul 01 16:55:44 2016 -0700
@@ -39,15 +39,7 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
-import java.util.Date;
-import java.util.Formatter;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.Set;
+import java.util.*;
import java.util.stream.Collectors;
import jdk.internal.module.ConfigurableModuleFinder;
@@ -57,7 +49,6 @@
import jdk.tools.jlink.internal.TaskHelper.Option;
import jdk.tools.jlink.internal.TaskHelper.OptionsHelper;
import jdk.tools.jlink.internal.ImagePluginStack.ImageProvider;
-import jdk.tools.jlink.plugin.ExecutableImage;
import jdk.tools.jlink.Jlink.JlinkConfiguration;
import jdk.tools.jlink.Jlink.PluginsConfiguration;
import jdk.tools.jlink.plugin.PluginException;
@@ -90,17 +81,15 @@
private static final TaskHelper taskHelper
= new TaskHelper(JLINK_BUNDLE);
- static Option<?>[] recognizedOptions = {
+ private static final Option<?>[] recognizedOptions = {
new Option<JlinkTask>(false, (task, opt, arg) -> {
task.options.help = true;
}, "--help"),
new Option<JlinkTask>(true, (task, opt, arg) -> {
String[] dirs = arg.split(File.pathSeparator);
- task.options.modulePath = new Path[dirs.length];
- int i = 0;
- for (String dir : dirs) {
- task.options.modulePath[i++] = Paths.get(dir);
- }
+ Arrays.stream(dirs)
+ .map(Paths::get)
+ .forEach(task.options.modulePath::add);
}, "--modulepath", "--mp"),
new Option<JlinkTask>(true, (task, opt, arg) -> {
for (String mn : arg.split(",")) {
@@ -176,7 +165,7 @@
String saveoptsfile;
boolean version;
boolean fullVersion;
- Path[] modulePath;
+ List<Path> modulePath = new ArrayList<>();
Set<String> limitMods = new HashSet<>();
Set<String> addMods = new HashSet<>();
Path output;
@@ -186,7 +175,7 @@
int run(String[] args) {
if (log == null) {
- setLog(new PrintWriter(System.err, true));
+ setLog(new PrintWriter(System.out, true));
}
try {
optionsHelper.handleOptions(this, args);
@@ -194,8 +183,8 @@
optionsHelper.showHelp(PROGNAME);
return EXIT_OK;
}
- if (optionsHelper.listPlugins()) {
- optionsHelper.listPlugins(true);
+ if (optionsHelper.shouldListPlugins()) {
+ optionsHelper.listPlugins();
return EXIT_OK;
}
if (options.version || options.fullVersion) {
@@ -203,7 +192,7 @@
return EXIT_OK;
}
if (taskHelper.getExistingImage() == null) {
- if (options.modulePath == null || options.modulePath.length == 0) {
+ if (options.modulePath == null || options.modulePath.isEmpty()) {
throw taskHelper.newBadArgs("err.modulepath.must.be.specified").showUsage(true);
}
createImage();
@@ -245,7 +234,7 @@
* Jlink API entry point.
*/
public static void createImage(JlinkConfiguration config,
- PluginsConfiguration plugins)
+ PluginsConfiguration plugins)
throws Exception {
Objects.requireNonNull(config);
Objects.requireNonNull(config.getOutput());
@@ -254,10 +243,9 @@
if (config.getModulepaths().isEmpty()) {
throw new Exception("Empty module paths");
}
- Path[] arr = new Path[config.getModulepaths().size()];
- arr = config.getModulepaths().toArray(arr);
+
ModuleFinder finder
- = newModuleFinder(arr, config.getLimitmods(), config.getModules());
+ = newModuleFinder(config.getModulepaths(), config.getLimitmods(), config.getModules());
// First create the image provider
ImageProvider imageProvider
@@ -332,10 +320,11 @@
return addMods;
}
- private static ModuleFinder newModuleFinder(Path[] paths,
- Set<String> limitMods,
- Set<String> addMods) {
- ModuleFinder finder = ModuleFinder.of(paths);
+ public static ModuleFinder newModuleFinder(List<Path> paths,
+ Set<String> limitMods,
+ Set<String> addMods)
+ {
+ ModuleFinder finder = ModuleFinder.of(paths.toArray(new Path[0]));
// jmods are located at link-time
if (finder instanceof ConfigurableModuleFinder) {
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/JmodArchive.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/JmodArchive.java Fri Jul 01 16:55:44 2016 -0700
@@ -25,7 +25,6 @@
package jdk.tools.jlink.internal;
-import jdk.tools.jlink.internal.JarArchive;
import java.nio.file.Path;
import java.util.Objects;
import jdk.tools.jlink.internal.Archive.Entry.EntryType;
@@ -35,7 +34,7 @@
*/
public class JmodArchive extends JarArchive {
- private static final String JMOD_EXT = ".jmod";
+ private static final String JMOD_EXT = ".jmod";
private static final String MODULE_NAME = "module";
private static final String MODULE_INFO = "module-info.class";
private static final String CLASSES = "classes";
@@ -46,8 +45,9 @@
public JmodArchive(String mn, Path jmod) {
super(mn, jmod);
String filename = Objects.requireNonNull(jmod.getFileName()).toString();
- if (!filename.endsWith(JMOD_EXT))
+ if (!filename.endsWith(JMOD_EXT)) {
throw new UnsupportedOperationException("Unsupported format: " + filename);
+ }
}
@Override
@@ -65,7 +65,6 @@
case MODULE_NAME:
return EntryType.MODULE_NAME;
default:
- //throw new InternalError("unexpected entry: " + name + " " + zipfile.toString()); //TODO
throw new InternalError("unexpected entry: " + section);
}
}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ModularJarArchive.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ModularJarArchive.java Fri Jul 01 16:55:44 2016 -0700
@@ -39,8 +39,9 @@
public ModularJarArchive(String mn, Path jmod) {
super(mn, jmod);
String filename = Objects.requireNonNull(jmod.getFileName()).toString();
- if (!filename.endsWith(JAR_EXT))
+ if (!filename.endsWith(JAR_EXT)) {
throw new UnsupportedOperationException("Unsupported format: " + filename);
+ }
}
@Override
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ModuleEntryFactory.java Fri Jul 01 16:55:44 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. 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.tools.jlink.internal;
+
+import java.nio.file.Path;
+import java.util.Objects;
+import jdk.tools.jlink.plugin.ModuleEntry;
+
+public final class ModuleEntryFactory {
+ private ModuleEntryFactory() {}
+
+ public static ModuleEntry create(String path,
+ ModuleEntry.Type type, byte[] content) {
+ return new ByteArrayModuleEntry(moduleFrom(path), path, type, content);
+ }
+
+ public static ModuleEntry create(String path,
+ ModuleEntry.Type type, Path file) {
+ return new PathModuleEntry(moduleFrom(path), path, type, file);
+ }
+
+ public static ModuleEntry create(ModuleEntry original, byte[] content) {
+ return new ByteArrayModuleEntry(original.getModule(),
+ original.getPath(), original.getType(), content);
+ }
+
+ public static ModuleEntry create(ModuleEntry original, Path file) {
+ return new PathModuleEntry(original.getModule(),
+ original.getPath(), original.getType(), file);
+ }
+
+ private static String moduleFrom(String path) {
+ Objects.requireNonNull(path);
+ if (path.isEmpty() || path.charAt(0) != '/') {
+ throw new IllegalArgumentException(path + " must start with /");
+ }
+ String noRoot = path.substring(1);
+ int idx = noRoot.indexOf('/');
+ if (idx == -1) {
+ throw new IllegalArgumentException("/ missing after module: " + path);
+ }
+ return noRoot.substring(0, idx);
+ }
+}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ModuleEntryImpl.java Fri Jul 01 12:32:21 2016 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,164 +0,0 @@
-/*
- * 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.
- */
-
-package jdk.tools.jlink.internal;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.UncheckedIOException;
-import java.util.Objects;
-import jdk.tools.jlink.plugin.ModuleEntry;
-
-/**
- * A LinkModuleEntry is the elementary unit of data inside an image. It is
- * generally a file. e.g.: a java class file, a resource file, a shared library,
- * ...
- * <br>
- * A LinkModuleEntry is identified by a path of the form:
- * <ul>
- * <li>For jimage content: /{module name}/{package1}/.../{packageN}/{file
- * name}</li>
- * <li>For other files (shared lib, launchers, config, ...):/{module name}/
- * {@literal bin|conf|native}/{dir1}>/.../{dirN}/{file name}</li>
- * </ul>
- */
-public class ModuleEntryImpl implements ModuleEntry {
-
- private final Type type;
- private final String path;
- private final String module;
- private final long length;
- private final InputStream stream;
- private byte[] buffer;
-
- /**
- * Create a new LinkModuleEntry.
- *
- * @param module The module name.
- * @param path The data path identifier.
- * @param type The data type.
- * @param stream The data content stream.
- * @param length The stream length.
- */
- public ModuleEntryImpl(String module, String path, Type type, InputStream stream, long length) {
- Objects.requireNonNull(module);
- Objects.requireNonNull(path);
- Objects.requireNonNull(type);
- Objects.requireNonNull(stream);
- this.path = path;
- this.type = type;
- this.module = module;
- this.stream = stream;
- this.length = length;
- }
-
- /**
- * The LinkModuleEntry module name.
- *
- * @return The module name.
- */
- @Override
- public final String getModule() {
- return module;
- }
-
- /**
- * The LinkModuleEntry path.
- *
- * @return The module path.
- */
- @Override
- public final String getPath() {
- return path;
- }
-
- /**
- * The LinkModuleEntry's type.
- *
- * @return The data type.
- */
- @Override
- public final Type getType() {
- return type;
- }
-
- /**
- * The LinkModuleEntry content as an array of byte.
- *
- * @return An Array of bytes.
- */
- @Override
- public byte[] getBytes() {
- if (buffer == null) {
- try (InputStream is = stream) {
- buffer = is.readAllBytes();
- } catch (IOException ex) {
- throw new UncheckedIOException(ex);
- }
- }
- return buffer;
- }
-
- /**
- * The LinkModuleEntry content length.
- *
- * @return The length.
- */
- @Override
- public long getLength() {
- return length;
- }
-
- /**
- * The LinkModuleEntry stream.
- *
- * @return The module data stream.
- */
- @Override
- public InputStream stream() {
- return stream;
- }
-
- @Override
- public int hashCode() {
- int hash = 7;
- hash = 89 * hash + Objects.hashCode(this.path);
- return hash;
- }
-
- @Override
- public boolean equals(Object other) {
- if (!(other instanceof ModuleEntryImpl)) {
- return false;
- }
- ModuleEntryImpl f = (ModuleEntryImpl) other;
- return f.path.equals(path);
- }
-
- @Override
- public String toString() {
- return getPath();
- }
-}
\ No newline at end of file
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ModulePoolImpl.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ModulePoolImpl.java Fri Jul 01 16:55:44 2016 -0700
@@ -24,8 +24,6 @@
*/
package jdk.tools.jlink.internal;
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
import java.lang.module.ModuleDescriptor;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
@@ -95,7 +93,7 @@
@Override
public void add(ModuleEntry data) {
if (isReadOnly()) {
- throw new PluginException("LinkConfiguration is readonly");
+ throw new PluginException("ModulePool is readonly");
}
Objects.requireNonNull(data);
if (!data.getModule().equals(name)) {
@@ -168,8 +166,8 @@
}
public ModulePoolImpl(ByteOrder order, StringTable table) {
- this.order = order;
- this.table = table;
+ this.order = Objects.requireNonNull(order);
+ this.table = Objects.requireNonNull(table);
}
/**
@@ -180,7 +178,7 @@
@Override
public void add(ModuleEntry data) {
if (isReadOnly()) {
- throw new PluginException("LinkConfiguration is readonly");
+ throw new PluginException("ModulePool is readonly");
}
Objects.requireNonNull(data);
if (resources.get(data.getPath()) != null) {
@@ -215,7 +213,7 @@
}
/**
- * The stream of modules contained in this LinkConfiguration.
+ * The stream of modules contained in this ModulePool.
*
* @return The stream of modules.
*/
@@ -225,7 +223,7 @@
}
/**
- * Return the number of LinkModule count in this LinkConfiguration.
+ * Return the number of LinkModule count in this ModulePool.
*
* @return the module count.
*/
@@ -235,7 +233,7 @@
}
/**
- * Get all ModuleEntry contained in this LinkConfiguration instance.
+ * Get all ModuleEntry contained in this ModulePool instance.
*
* @return The stream of LinkModuleEntries.
*/
@@ -245,7 +243,7 @@
}
/**
- * Return the number of ModuleEntry count in this LinkConfiguration.
+ * Return the number of ModuleEntry count in this ModulePool.
*
* @return the entry count.
*/
@@ -267,7 +265,7 @@
}
/**
- * Check if the LinkConfiguration contains the given ModuleEntry.
+ * Check if the ModulePool contains the given ModuleEntry.
*
* @param data The module data to check existence for.
* @return The module data or null if not found.
@@ -279,7 +277,7 @@
}
/**
- * Check if the LinkConfiguration contains some content at all.
+ * Check if the ModulePool contains some content at all.
*
* @return True, no content, false otherwise.
*/
@@ -289,16 +287,16 @@
}
/**
- * Visit each ModuleEntry in this LinkConfiguration to transform it and
- * copy the transformed ModuleEntry to the output LinkConfiguration.
+ * Visit each ModuleEntry in this ModulePool to transform it and
+ * copy the transformed ModuleEntry to the output ModulePool.
*
* @param transform The function called for each ModuleEntry found in
- * the LinkConfiguration. The transform function should return a
+ * the ModulePool. The transform function should return a
* ModuleEntry instance which will be added to the output or it should
* return null if the passed ModuleEntry is to be ignored for the
* output.
*
- * @param output The LinkConfiguration to be filled with Visitor returned
+ * @param output The ModulePool to be filled with Visitor returned
* ModuleEntry.
*/
@Override
@@ -351,14 +349,13 @@
/**
* A resource that has been compressed.
*/
- public static final class CompressedModuleData extends ModuleEntryImpl {
+ public static final class CompressedModuleData extends ByteArrayModuleEntry {
final long uncompressed_size;
private CompressedModuleData(String module, String path,
- InputStream stream, long size,
- long uncompressed_size) {
- super(module, path, ModuleEntry.Type.CLASS_OR_RESOURCE, stream, size);
+ byte[] content, long uncompressed_size) {
+ super(module, path, ModuleEntry.Type.CLASS_OR_RESOURCE, content);
this.uncompressed_size = uncompressed_size;
}
@@ -413,8 +410,7 @@
CompressedModuleData compressedResource
= new CompressedModuleData(original.getModule(), original.getPath(),
- new ByteArrayInputStream(contentWithHeader),
- contentWithHeader.length, uncompressed_size);
+ contentWithHeader, uncompressed_size);
return compressedResource;
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/PathModuleEntry.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,74 @@
+/*
+ * 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 "Classfile" 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.tools.jlink.internal;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UncheckedIOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Objects;
+
+/**
+ * A ModuleEntry backed by a given nio Path.
+ */
+public class PathModuleEntry extends AbstractModuleEntry {
+ private final Path file;
+
+ /**
+ * Create a new PathModuleEntry.
+ *
+ * @param module The module name.
+ * @param path The path for the resource content.
+ * @param type The data type.
+ * @param file The data file identifier.
+ */
+ public PathModuleEntry(String module, String path, Type type, Path file) {
+ super(module, path, type);
+ this.file = Objects.requireNonNull(file);
+ if (!Files.isRegularFile(file)) {
+ throw new IllegalArgumentException(file + " not a file");
+ }
+ }
+
+ @Override
+ public final InputStream stream() {
+ try {
+ return Files.newInputStream(file);
+ } catch (IOException ex) {
+ throw new UncheckedIOException(ex);
+ }
+ }
+
+ @Override
+ public final long getLength() {
+ try {
+ return Files.size(file);
+ } catch (IOException ex) {
+ throw new UncheckedIOException(ex);
+ }
+ }
+}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/PluginRepository.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/PluginRepository.java Fri Jul 01 16:55:44 2016 -0700
@@ -34,8 +34,6 @@
import java.util.ServiceLoader;
import jdk.tools.jlink.plugin.Plugin;
import jdk.tools.jlink.plugin.PluginException;
-import jdk.tools.jlink.plugin.PostProcessorPlugin;
-import jdk.tools.jlink.plugin.TransformerPlugin;
/**
*
@@ -59,17 +57,7 @@
*/
public static Plugin getPlugin(String name,
Layer pluginsLayer) {
- Plugin tp = getPlugin(TransformerPlugin.class, name, pluginsLayer);
- Plugin ppp = getPlugin(PostProcessorPlugin.class, name, pluginsLayer);
-
- // We should not have a transformer plugin and a post processor plugin
- // of the same name. That kind of duplicate is detected here.
- if (tp != null && ppp != null) {
- throw new PluginException("Multiple plugin "
- + "for the name " + name);
- }
-
- return tp != null? tp : ppp;
+ return getPlugin(Plugin.class, name, pluginsLayer);
}
/**
@@ -112,10 +100,7 @@
}
public static List<Plugin> getPlugins(Layer pluginsLayer) {
- List<Plugin> plugins = new ArrayList<>();
- plugins.addAll(getPlugins(TransformerPlugin.class, pluginsLayer));
- plugins.addAll(getPlugins(PostProcessorPlugin.class, pluginsLayer));
- return plugins;
+ return getPlugins(Plugin.class, pluginsLayer);
}
private static <T extends Plugin> T getPlugin(Class<T> clazz, String name,
@@ -138,10 +123,10 @@
}
/**
- * The post processors accessible in the current context.
+ * The plugins accessible in the current context.
*
* @param pluginsLayer
- * @return The list of post processors.
+ * @return The list of plugins.
*/
private static <T extends Plugin> List<T> getPlugins(Class<T> clazz, Layer pluginsLayer) {
Objects.requireNonNull(pluginsLayer);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/PostProcessor.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package jdk.tools.jlink.internal;
+
+import java.util.List;
+
+/**
+ * Plugin wishing to post-proces must implement this interface. PostProcessors
+ * are called once the image has been generated and is executable.
+ **/
+public interface PostProcessor {
+
+ /**
+ * Post process an image.
+ *
+ * @param image The executable image.
+ * @return The list of arguments to add to launchers (if any).
+ */
+ public List<String> process(ExecutableImage image);
+}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ResourcePrevisitor.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ResourcePrevisitor.java Fri Jul 01 16:55:44 2016 -0700
@@ -42,7 +42,6 @@
* @param resources Read only resources.
* @param strings StringTable instance. Add string to the StringTable to track string
* usage.
- * @throws PluginException
*/
public void previsit(ModulePool resources, StringTable strings);
}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/TaskHelper.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/TaskHelper.java Fri Jul 01 16:55:44 2016 -0700
@@ -428,7 +428,7 @@
return opt.hasArg;
}
- public boolean listPlugins() {
+ public boolean shouldListPlugins() {
return pluginOptions.listPlugins;
}
@@ -570,24 +570,19 @@
log.println(bundleHelper.getMessage("main.command.files"));
}
- public void listPlugins(boolean showsImageBuilder) {
+ public void listPlugins() {
log.println("\n" + bundleHelper.getMessage("main.extended.help"));
List<Plugin> pluginList = PluginRepository.
getPlugins(pluginOptions.pluginsLayer);
- for (Plugin plugin : Utils.
- getSortedPreProcessors(pluginList)) {
- showPlugin(plugin, log, showsImageBuilder);
+ for (Plugin plugin : Utils.getSortedPlugins(pluginList)) {
+ showPlugin(plugin, log);
}
- if (showsImageBuilder) {
- for (Plugin plugin : Utils.getSortedPostProcessors(pluginList)) {
- showPlugin(plugin, log, showsImageBuilder);
- }
- }
+ log.println("\n" + bundleHelper.getMessage("main.extended.help.footer"));
}
- private void showPlugin(Plugin plugin, PrintWriter log, boolean showsImageBuilder) {
- if (showsPlugin(plugin, showsImageBuilder)) {
+ private void showPlugin(Plugin plugin, PrintWriter log) {
+ if (showsPlugin(plugin)) {
log.println("\n" + bundleHelper.getMessage("main.plugin.name")
+ ": " + plugin.getName());
@@ -597,7 +592,7 @@
+ ": " + plugin.getClass().getName());
log.println(bundleHelper.getMessage("main.plugin.module")
+ ": " + plugin.getClass().getModule().getName());
- Category category = Utils.getCategory(plugin);
+ Category category = plugin.getType();
log.println(bundleHelper.getMessage("main.plugin.category")
+ ": " + category.getName());
log.println(bundleHelper.getMessage("main.plugin.state")
@@ -720,14 +715,8 @@
}
}
- // Display all plugins or pre processors only.
- private static boolean showsPlugin(Plugin plugin, boolean showsImageBuilder) {
- if (!Utils.isDisabled(plugin) && plugin.getOption() != null) {
- if (Utils.isPostProcessor(plugin) && !showsImageBuilder) {
- return false;
- }
- return true;
- }
- return false;
+ // Display all plugins
+ private static boolean showsPlugin(Plugin plugin) {
+ return (!Utils.isDisabled(plugin) && plugin.getOption() != null);
}
}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/Utils.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/Utils.java Fri Jul 01 16:55:44 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 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
@@ -34,8 +34,6 @@
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
-import java.util.Objects;
-import java.util.Set;
import java.util.stream.Collectors;
import jdk.tools.jlink.plugin.Plugin;
import jdk.tools.jlink.plugin.Plugin.Category;
@@ -57,81 +55,10 @@
.collect(Collectors.toList());
}
- public static boolean isPostProcessor(Category category) {
- return category.equals(Category.VERIFIER)
- || category.equals(Category.PROCESSOR)
- || category.equals(Category.PACKAGER);
- }
- public static boolean isPreProcessor(Category category) {
- return category.equals(Category.COMPRESSOR)
- || category.equals(Category.FILTER)
- || category.equals(Category.MODULEINFO_TRANSFORMER)
- || category.equals(Category.SORTER)
- || category.equals(Category.TRANSFORMER)
- || category.equals(Category.METAINFO_ADDER);
- }
-
- public static boolean isPostProcessor(Plugin provider) {
- Set<Category> types = provider.getType();
- Objects.requireNonNull(types);
- for (Category pt : types) {
- return isPostProcessor(pt);
- }
- return false;
- }
-
- public static boolean isPreProcessor(Plugin provider) {
- Set<Category> types = provider.getType();
- Objects.requireNonNull(types);
- for (Category pt : types) {
- return isPreProcessor(pt);
- }
- return false;
- }
-
- public static Category getCategory(Plugin provider) {
- Set<Category> types = provider.getType();
- Objects.requireNonNull(types);
- for (Category t : types) {
- return t;
- }
- return null;
- }
-
- public static List<Plugin> getPreProcessors(List<Plugin> plugins) {
+ public static List<Plugin> getSortedPlugins(List<Plugin> plugins) {
List<Plugin> res = new ArrayList<>();
- for (Plugin p : plugins) {
- if (isPreProcessor(p)) {
- res.add(p);
- }
- }
- return res;
- }
-
- public static List<Plugin> getPostProcessors(List<Plugin> plugins) {
- List<Plugin> res = new ArrayList<>();
- for (Plugin p : plugins) {
- if (isPostProcessor(p)) {
- res.add(p);
- }
- }
- return res;
- }
-
- public static List<Plugin> getSortedPostProcessors(List<Plugin> plugins) {
- List<Plugin> res = getPostProcessors(plugins);
- res.sort(new Comparator<Plugin>() {
- @Override
- public int compare(Plugin o1, Plugin o2) {
- return o1.getName().compareTo(o2.getName());
- }
- });
- return res;
- }
-
- public static List<Plugin> getSortedPreProcessors(List<Plugin> plugins) {
- List<Plugin> res = getPreProcessors(plugins);
+ res.addAll(plugins);
res.sort(new Comparator<Plugin>() {
@Override
public int compare(Plugin o1, Plugin o2) {
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/packager/AppRuntimeImageBuilder.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/packager/AppRuntimeImageBuilder.java Fri Jul 01 16:55:44 2016 -0700
@@ -27,36 +27,19 @@
import jdk.tools.jlink.Jlink;
-import jdk.tools.jlink.builder.ImageBuilder;
+import jdk.tools.jlink.builder.DefaultImageBuilder;
+import jdk.tools.jlink.internal.JlinkTask;
import jdk.tools.jlink.plugin.Plugin;
-import jdk.tools.jlink.builder.*;
-import jdk.tools.jlink.plugin.ModulePool;
-import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
-import java.io.InputStream;
-import java.io.PrintWriter;
-import java.io.StringReader;
+import java.lang.module.ModuleFinder;
import java.nio.file.Path;
-import java.nio.file.Paths;
import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
import java.util.Collections;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
-import java.util.Properties;
-import java.util.ResourceBundle;
import java.util.Set;
-import java.util.StringTokenizer;
-import java.util.TreeSet;
-import java.util.stream.Collectors;
/**
* AppRuntimeImageBuilder is a private API used only by the Java Packager to generate
@@ -143,4 +126,14 @@
Jlink jlink = new Jlink();
jlink.build(jlinkConfig, pluginConfig);
}
+
+ /*
+ * Returns a ModuleFinder that limits observability to the given root
+ * modules, their transitive dependences, plus a set of other modules.
+ */
+ public static ModuleFinder moduleFinder(List<Path> modulepaths,
+ Set<String> roots,
+ Set<String> otherModules) {
+ return JlinkTask.newModuleFinder(modulepaths, roots, otherModules);
+ }
}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/DefaultCompressPlugin.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/DefaultCompressPlugin.java Fri Jul 01 16:55:44 2016 -0700
@@ -24,14 +24,11 @@
*/
package jdk.tools.jlink.internal.plugins;
-import java.util.Collections;
-import java.util.HashSet;
import java.util.Map;
-import java.util.Set;
import jdk.tools.jlink.internal.ModulePoolImpl;
import jdk.tools.jlink.plugin.ModulePool;
-import jdk.tools.jlink.plugin.TransformerPlugin;
+import jdk.tools.jlink.plugin.Plugin;
import jdk.tools.jlink.internal.ImagePluginStack;
import jdk.tools.jlink.internal.ResourcePrevisitor;
import jdk.tools.jlink.internal.StringTable;
@@ -40,7 +37,7 @@
*
* ZIP and String Sharing compression plugin
*/
-public final class DefaultCompressPlugin implements TransformerPlugin, ResourcePrevisitor {
+public final class DefaultCompressPlugin implements Plugin, ResourcePrevisitor {
public static final String NAME = "compress";
public static final String FILTER = "filter";
public static final String LEVEL_0 = "0";
@@ -77,10 +74,8 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.COMPRESSOR);
- return Collections.unmodifiableSet(set);
+ public Category getType() {
+ return Category.COMPRESSOR;
}
@Override
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/ExcludeFilesPlugin.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/ExcludeFilesPlugin.java Fri Jul 01 16:55:44 2016 -0700
@@ -24,22 +24,17 @@
*/
package jdk.tools.jlink.internal.plugins;
-import java.io.UncheckedIOException;
-import java.util.Collections;
-import java.util.HashSet;
import java.util.Map;
-import java.util.Set;
import java.util.function.Predicate;
-import jdk.tools.jlink.plugin.TransformerPlugin;
+import jdk.tools.jlink.plugin.Plugin;
import jdk.tools.jlink.plugin.ModulePool;
import jdk.tools.jlink.plugin.ModuleEntry;
-import jdk.tools.jlink.internal.Utils;
/**
*
* Exclude files plugin
*/
-public final class ExcludeFilesPlugin implements TransformerPlugin {
+public final class ExcludeFilesPlugin implements Plugin {
public static final String NAME = "exclude-files";
private Predicate<String> predicate;
@@ -60,10 +55,8 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.FILTER);
- return Collections.unmodifiableSet(set);
+ public Category getType() {
+ return Category.FILTER;
}
@Override
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/ExcludePlugin.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/ExcludePlugin.java Fri Jul 01 16:55:44 2016 -0700
@@ -24,12 +24,9 @@
*/
package jdk.tools.jlink.internal.plugins;
-import java.util.Collections;
-import java.util.HashSet;
import java.util.Map;
-import java.util.Set;
import java.util.function.Predicate;
-import jdk.tools.jlink.plugin.TransformerPlugin;
+import jdk.tools.jlink.plugin.Plugin;
import jdk.tools.jlink.plugin.ModuleEntry;
import jdk.tools.jlink.plugin.ModulePool;
@@ -37,7 +34,7 @@
*
* Exclude resources plugin
*/
-public final class ExcludePlugin implements TransformerPlugin {
+public final class ExcludePlugin implements Plugin {
public static final String NAME = "exclude-resources";
private Predicate<String> predicate;
@@ -73,10 +70,8 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.FILTER);
- return Collections.unmodifiableSet(set);
+ public Category getType() {
+ return Category.FILTER;
}
@Override
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/ExcludeVMPlugin.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/ExcludeVMPlugin.java Fri Jul 01 16:55:44 2016 -0700
@@ -25,21 +25,17 @@
package jdk.tools.jlink.internal.plugins;
import java.io.BufferedReader;
-import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UncheckedIOException;
import java.nio.charset.StandardCharsets;
-import java.util.Collections;
import java.util.Comparator;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import java.util.TreeSet;
import java.util.function.Predicate;
import java.util.stream.Collectors;
-import jdk.tools.jlink.plugin.TransformerPlugin;
+import jdk.tools.jlink.plugin.Plugin;
import jdk.tools.jlink.plugin.ModulePool;
import jdk.tools.jlink.plugin.ModuleEntry;
import jdk.tools.jlink.plugin.PluginException;
@@ -48,7 +44,7 @@
*
* Exclude VM plugin
*/
-public final class ExcludeVMPlugin implements TransformerPlugin {
+public final class ExcludeVMPlugin implements Plugin {
private static final class JvmComparator implements Comparator<Jvm> {
@@ -159,10 +155,8 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.FILTER);
- return Collections.unmodifiableSet(set);
+ public Category getType() {
+ return Category.FILTER;
}
@Override
@@ -248,10 +242,7 @@
byte[] content = builder.toString().getBytes(StandardCharsets.UTF_8);
- return ModuleEntry.create(orig.getModule(),
- orig.getPath(),
- orig.getType(),
- new ByteArrayInputStream(content), content.length);
+ return orig.create(content);
}
private static String jvmlib() {
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/FileCopierPlugin.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/FileCopierPlugin.java Fri Jul 01 16:55:44 2016 -0700
@@ -26,7 +26,6 @@
import java.io.File;
import java.io.IOException;
-import java.io.InputStream;
import java.io.UncheckedIOException;
import java.nio.file.FileVisitResult;
import java.nio.file.FileVisitor;
@@ -35,24 +34,21 @@
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
-import java.util.Set;
-import jdk.tools.jlink.internal.ModuleEntryImpl;
+import jdk.tools.jlink.internal.PathModuleEntry;
import jdk.tools.jlink.plugin.PluginException;
import jdk.tools.jlink.plugin.ModuleEntry;
import jdk.tools.jlink.plugin.ModulePool;
-import jdk.tools.jlink.plugin.TransformerPlugin;
+import jdk.tools.jlink.plugin.Plugin;
import jdk.tools.jlink.internal.Utils;
/**
*
* Copy files to image from various locations.
*/
-public class FileCopierPlugin implements TransformerPlugin {
+public class FileCopierPlugin implements Plugin {
public static final String NAME = "copy-files";
@@ -68,13 +64,13 @@
/**
* Symbolic link to another path.
*/
- public static abstract class SymImageFile extends ModuleEntryImpl {
+ public static abstract class SymImageFile extends PathModuleEntry {
private final String targetPath;
public SymImageFile(String targetPath, String module, String path,
- ModuleEntry.Type type, InputStream stream, long size) {
- super(module, path, type, stream, size);
+ ModuleEntry.Type type, Path file) {
+ super(module, path, type, file);
this.targetPath = targetPath;
}
@@ -87,23 +83,7 @@
public SymImageFileImpl(String targetPath, Path file, String module,
String path, ModuleEntry.Type type) {
- super(targetPath, module, path, type, newStream(file), length(file));
- }
- }
-
- private static long length(Path file) {
- try {
- return Files.size(file);
- } catch (IOException ex) {
- throw new RuntimeException(ex);
- }
- }
-
- private static InputStream newStream(Path file) {
- try {
- return Files.newInputStream(file);
- } catch (IOException ex) {
- throw new UncheckedIOException(ex);
+ super(targetPath, module, path, type, file);
}
}
@@ -177,9 +157,9 @@
Objects.requireNonNull(pool);
Objects.requireNonNull(file);
Objects.requireNonNull(path);
- ModuleEntry impl = ModuleEntry.create(FAKE_MODULE,
+ ModuleEntry impl = ModuleEntry.create(
"/" + FAKE_MODULE + "/other/" + path,
- ModuleEntry.Type.OTHER, newStream(file), length(file));
+ ModuleEntry.Type.OTHER, file);
try {
pool.add(impl);
} catch (Exception ex) {
@@ -188,13 +168,6 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.TRANSFORMER);
- return Collections.unmodifiableSet(set);
- }
-
- @Override
public void configure(Map<String, String> config) {
List<String> arguments = Utils.parseList(config.get(NAME));
if (arguments.isEmpty()) {
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/GenerateJLIClassesPlugin.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/GenerateJLIClassesPlugin.java Fri Jul 01 16:55:44 2016 -0700
@@ -24,10 +24,8 @@
*/
package jdk.tools.jlink.internal.plugins;
-import java.io.ByteArrayInputStream;
import java.lang.reflect.Method;
import java.util.Arrays;
-import java.util.Collections;
import java.util.EnumSet;
import java.util.List;
import java.util.Map;
@@ -36,12 +34,12 @@
import jdk.tools.jlink.plugin.ModuleEntry;
import jdk.tools.jlink.plugin.PluginException;
import jdk.tools.jlink.plugin.ModulePool;
-import jdk.tools.jlink.plugin.TransformerPlugin;
+import jdk.tools.jlink.plugin.Plugin;
/**
* Plugin to generate java.lang.invoke classes.
*/
-public final class GenerateJLIClassesPlugin implements TransformerPlugin {
+public final class GenerateJLIClassesPlugin implements Plugin {
private static final String NAME = "generate-jli-classes";
@@ -61,11 +59,6 @@
}
@Override
- public Set<Category> getType() {
- return Collections.singleton(Category.TRANSFORMER);
- }
-
- @Override
public String getName() {
return NAME;
}
@@ -176,10 +169,9 @@
byte[] bytes = result.getValue();
// Add class to pool
- ModuleEntry ndata = ModuleEntry.create(data.getModule(),
+ ModuleEntry ndata = ModuleEntry.create(
"/java.base/" + className + ".class",
- ModuleEntry.Type.CLASS_OR_RESOURCE,
- new ByteArrayInputStream(bytes), bytes.length);
+ bytes);
if (!out.contains(ndata)) {
out.add(ndata);
}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/IncludeLocalesPlugin.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/IncludeLocalesPlugin.java Fri Jul 01 16:55:44 2016 -0700
@@ -24,10 +24,8 @@
*/
package jdk.tools.jlink.internal.plugins;
-import java.io.ByteArrayInputStream;
+import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
import java.util.IllformedLocaleException;
import java.util.Locale;
import java.util.List;
@@ -46,7 +44,7 @@
import jdk.tools.jlink.plugin.ModuleEntry;
import jdk.tools.jlink.plugin.PluginException;
import jdk.tools.jlink.plugin.ModulePool;
-import jdk.tools.jlink.plugin.TransformerPlugin;
+import jdk.tools.jlink.plugin.Plugin;
/**
* Plugin to explicitly specify the locale data included in jdk.localedata
@@ -70,7 +68,7 @@
* start with at least one white space character, e.g., " ar ar-EG ..."
* ^
*/
-public final class IncludeLocalesPlugin implements TransformerPlugin, ResourcePrevisitor {
+public final class IncludeLocalesPlugin implements Plugin, ResourcePrevisitor {
public static final String NAME = "include-locales";
private static final String MODULENAME = "jdk.localedata";
@@ -82,15 +80,15 @@
"sun.util.resources.ext",
"sun.util.resources.provider");
private static final String METAINFONAME = "LocaleDataMetaInfo";
- private static final String META_FILES =
- "*module-info.class," +
- "*LocaleDataProvider.class," +
- "*" + METAINFONAME + ".class,";
- private static final String INCLUDE_LOCALE_FILES =
- "*sun/text/resources/ext/[^\\/]+_%%.class," +
- "*sun/util/resources/ext/[^\\/]+_%%.class," +
- "*sun/text/resources/cldr/ext/[^\\/]+_%%.class," +
- "*sun/util/resources/cldr/ext/[^\\/]+_%%.class,";
+ private static final List<String> META_FILES = List.of(
+ ".+module-info.class",
+ ".+LocaleDataProvider.class",
+ ".+" + METAINFONAME + ".class");
+ private static final List<String> INCLUDE_LOCALE_FILES = List.of(
+ ".+sun/text/resources/ext/[^_]+_",
+ ".+sun/util/resources/ext/[^_]+_",
+ ".+sun/text/resources/cldr/ext/[^_]+_",
+ ".+sun/util/resources/cldr/ext/[^_]+_");
private Predicate<String> predicate;
private String userParam;
private List<Locale.LanguageRange> priorityList;
@@ -123,9 +121,7 @@
if (Arrays.stream(cr.getInterfaces())
.anyMatch(i -> i.contains(METAINFONAME)) &&
stripUnsupportedLocales(bytes, cr)) {
- resource = ModuleEntry.create(MODULENAME, path,
- resource.getType(),
- new ByteArrayInputStream(bytes), bytes.length);
+ resource = resource.create(bytes);
}
}
}
@@ -134,10 +130,8 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.FILTER);
- return Collections.unmodifiableSet(set);
+ public Category getType() {
+ return Category.FILTER;
}
@Override
@@ -206,15 +200,17 @@
String.format(PluginsResourceBundle.getMessage(NAME + ".nomatchinglocales"), userParam));
}
- String value = META_FILES + filtered.stream()
- .map(s -> includeLocaleFilePatterns(s))
- .collect(Collectors.joining(","));
+ List<String> value = Stream.concat(
+ META_FILES.stream(),
+ filtered.stream().flatMap(s -> includeLocaleFilePatterns(s).stream()))
+ .map(s -> "regex:" + s)
+ .collect(Collectors.toList());
predicate = ResourceFilter.includeFilter(value);
}
- private String includeLocaleFilePatterns(String tag) {
+ private List<String> includeLocaleFilePatterns(String tag) {
+ List<String> files = new ArrayList<>();
String pTag = tag.replaceAll("-", "_");
- String files = "";
int lastDelimiter = tag.length();
String isoSpecial = pTag.matches("^(he|yi|id).*") ?
pTag.replaceFirst("he", "iw")
@@ -224,11 +220,11 @@
// Add tag patterns including parents
while (true) {
pTag = pTag.substring(0, lastDelimiter);
- files += INCLUDE_LOCALE_FILES.replaceAll("%%", pTag);
+ files.addAll(includeLocaleFiles(pTag));
if (!isoSpecial.isEmpty()) {
isoSpecial = isoSpecial.substring(0, lastDelimiter);
- files += INCLUDE_LOCALE_FILES.replaceAll("%%", isoSpecial);
+ files.addAll(includeLocaleFiles(isoSpecial));
}
lastDelimiter = pTag.lastIndexOf('_');
@@ -240,31 +236,37 @@
final String lang = pTag;
// Add possible special locales of the COMPAT provider
- files += Set.of(jaJPJPTag, noNONYTag, thTHTHTag).stream()
+ Set.of(jaJPJPTag, noNONYTag, thTHTHTag).stream()
.filter(stag -> lang.equals(stag.substring(0,2)))
- .map(t -> INCLUDE_LOCALE_FILES.replaceAll("%%", t.replaceAll("-", "_")))
- .collect(Collectors.joining(","));
+ .map(t -> includeLocaleFiles(t.replaceAll("-", "_")))
+ .forEach(files::addAll);
// Add possible UN.M49 files (unconditional for now) for each language
- files += INCLUDE_LOCALE_FILES.replaceAll("%%", lang + "_[0-9]{3}");
+ files.addAll(includeLocaleFiles(lang + "_[0-9]{3}"));
if (!isoSpecial.isEmpty()) {
- files += INCLUDE_LOCALE_FILES.replaceAll("%%", isoSpecial + "_[0-9]{3}");
+ files.addAll(includeLocaleFiles(isoSpecial + "_[0-9]{3}"));
}
// Add Thai BreakIterator related data files
if (lang.equals("th")) {
- files += "*sun/text/resources/thai_dict," +
- "*sun/text/resources/[^\\/]+BreakIteratorData_th,";
+ files.add(".+sun/text/resources/thai_dict");
+ files.add(".+sun/text/resources/[^_]+BreakIteratorData_th");
}
// Add Taiwan resource bundles for Hong Kong
if (tag.startsWith("zh-HK")) {
- files += INCLUDE_LOCALE_FILES.replaceAll("%%", "zh_TW");
+ files.addAll(includeLocaleFiles("zh_TW"));
}
return files;
}
+ private List<String> includeLocaleFiles(String localeStr) {
+ return INCLUDE_LOCALE_FILES.stream()
+ .map(s -> s + localeStr + ".class")
+ .collect(Collectors.toList());
+ }
+
private boolean stripUnsupportedLocales(byte[] bytes, ClassReader cr) {
char[] buf = new char[cr.getMaxStringLength()];
boolean[] modified = new boolean[1];
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/OptimizationPlugin.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/OptimizationPlugin.java Fri Jul 01 16:55:44 2016 -0700
@@ -30,8 +30,6 @@
import java.io.UncheckedIOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -284,11 +282,4 @@
}
}
}
-
- @Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.TRANSFORMER);
- return Collections.unmodifiableSet(set);
- }
}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/OrderResourcesPlugin.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/OrderResourcesPlugin.java Fri Jul 01 16:55:44 2016 -0700
@@ -30,24 +30,21 @@
import java.nio.file.Files;
import java.nio.file.PathMatcher;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import java.util.function.ToIntFunction;
import jdk.tools.jlink.plugin.PluginException;
import jdk.tools.jlink.plugin.ModuleEntry;
import jdk.tools.jlink.plugin.ModulePool;
-import jdk.tools.jlink.plugin.TransformerPlugin;
+import jdk.tools.jlink.plugin.Plugin;
import jdk.tools.jlink.internal.Utils;
/**
*
* Order Resources plugin
*/
-public final class OrderResourcesPlugin implements TransformerPlugin {
+public final class OrderResourcesPlugin implements Plugin {
public static final String NAME = "order-resources";
private static final FileSystem JRT_FILE_SYSTEM = Utils.jrtFileSystem();
@@ -143,11 +140,8 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.SORTER);
-
- return Collections.unmodifiableSet(set);
+ public Category getType() {
+ return Category.SORTER;
}
@Override
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/ReleaseInfoPlugin.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/ReleaseInfoPlugin.java Fri Jul 01 16:55:44 2016 -0700
@@ -26,7 +26,6 @@
import java.io.FileInputStream;
import java.io.IOException;
-import java.util.Collections;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.Map;
@@ -37,20 +36,20 @@
import jdk.tools.jlink.plugin.ModulePool;
import jdk.tools.jlink.plugin.Plugin.Category;
import jdk.tools.jlink.plugin.Plugin.State;
-import jdk.tools.jlink.plugin.TransformerPlugin;
+import jdk.tools.jlink.plugin.Plugin;
/**
* This plugin adds/deletes information for 'release' file.
*/
-public final class ReleaseInfoPlugin implements TransformerPlugin {
+public final class ReleaseInfoPlugin implements Plugin {
// option name
public static final String NAME = "release-info";
public static final String KEYS = "keys";
private final Map<String, String> release = new HashMap<>();
@Override
- public Set<Category> getType() {
- return Collections.singleton(Category.METAINFO_ADDER);
+ public Category getType() {
+ return Category.METAINFO_ADDER;
}
@Override
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/StringSharingPlugin.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/StringSharingPlugin.java Fri Jul 01 16:55:44 2016 -0700
@@ -46,7 +46,6 @@
import java.io.InputStream;
import java.nio.ByteBuffer;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
@@ -57,7 +56,7 @@
import jdk.internal.jimage.decompressor.SignatureParser;
import jdk.internal.jimage.decompressor.StringSharingDecompressor;
import jdk.tools.jlink.internal.ModulePoolImpl;
-import jdk.tools.jlink.plugin.TransformerPlugin;
+import jdk.tools.jlink.plugin.Plugin;
import jdk.tools.jlink.plugin.PluginException;
import jdk.tools.jlink.plugin.ModuleEntry;
import jdk.tools.jlink.plugin.ModulePool;
@@ -69,7 +68,7 @@
* A Plugin that stores the image classes constant pool UTF_8 entries into the
* Image StringsTable.
*/
-public class StringSharingPlugin implements TransformerPlugin, ResourcePrevisitor {
+public class StringSharingPlugin implements Plugin, ResourcePrevisitor {
public static final String NAME = "compact-cp";
@@ -343,10 +342,8 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.COMPRESSOR);
- return Collections.unmodifiableSet(set);
+ public Category getType() {
+ return Category.COMPRESSOR;
}
@Override
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/StripDebugPlugin.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/StripDebugPlugin.java Fri Jul 01 16:55:44 2016 -0700
@@ -24,23 +24,18 @@
*/
package jdk.tools.jlink.internal.plugins;
-import java.io.ByteArrayInputStream;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
import java.util.function.Predicate;
import jdk.internal.org.objectweb.asm.ClassReader;
import jdk.internal.org.objectweb.asm.ClassWriter;
import jdk.tools.jlink.plugin.ModuleEntry;
import jdk.tools.jlink.plugin.ModulePool;
-import jdk.tools.jlink.plugin.TransformerPlugin;
+import jdk.tools.jlink.plugin.Plugin;
/**
*
* Strip debug attributes plugin
*/
-public final class StripDebugPlugin implements TransformerPlugin {
+public final class StripDebugPlugin implements Plugin {
public static final String NAME = "strip-debug";
private final Predicate<String> predicate;
@@ -58,13 +53,6 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.TRANSFORMER);
- return Collections.unmodifiableSet(set);
- }
-
- @Override
public String getDescription() {
return PluginsResourceBundle.getDescription(NAME);
}
@@ -84,7 +72,7 @@
ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS);
reader.accept(writer, ClassReader.SKIP_DEBUG);
byte[] content = writer.toByteArray();
- res = ModuleEntry.create(path, new ByteArrayInputStream(content), content.length);
+ res = resource.create(content);
}
}
} else if (predicate.test(res.getPath())) {
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/StripNativeCommandsPlugin.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/StripNativeCommandsPlugin.java Fri Jul 01 16:55:44 2016 -0700
@@ -24,18 +24,15 @@
*/
package jdk.tools.jlink.internal.plugins;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
import jdk.tools.jlink.plugin.ModuleEntry;
import jdk.tools.jlink.plugin.ModulePool;
-import jdk.tools.jlink.plugin.TransformerPlugin;
+import jdk.tools.jlink.plugin.Plugin;
/**
*
* Strip Native Commands plugin
*/
-public final class StripNativeCommandsPlugin implements TransformerPlugin {
+public final class StripNativeCommandsPlugin implements Plugin {
public static final String NAME = "strip-native-commands";
@@ -45,10 +42,8 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.FILTER);
- return Collections.unmodifiableSet(set);
+ public Category getType() {
+ return Category.FILTER;
}
@Override
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/SystemModuleDescriptorPlugin.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/SystemModuleDescriptorPlugin.java Fri Jul 01 16:55:44 2016 -0700
@@ -52,7 +52,7 @@
import static jdk.internal.org.objectweb.asm.Opcodes.*;
import jdk.tools.jlink.plugin.PluginException;
import jdk.tools.jlink.plugin.ModulePool;
-import jdk.tools.jlink.plugin.TransformerPlugin;
+import jdk.tools.jlink.plugin.Plugin;
import jdk.tools.jlink.internal.plugins.SystemModuleDescriptorPlugin.Builder.*;
import jdk.tools.jlink.plugin.ModuleEntry;
@@ -67,7 +67,7 @@
* @see java.lang.module.SystemModuleFinder
* @see SystemModules
*/
-public final class SystemModuleDescriptorPlugin implements TransformerPlugin {
+public final class SystemModuleDescriptorPlugin implements Plugin {
private static final JavaLangModuleAccess JLMA = SharedSecrets.getJavaLangModuleAccess();
// TODO: packager has the dependency on the plugin name
@@ -83,11 +83,6 @@
}
@Override
- public Set<Category> getType() {
- return Collections.singleton(Category.TRANSFORMER);
- }
-
- @Override
public String getName() {
return NAME;
}
@@ -144,11 +139,7 @@
ModuleInfoRewriter minfoWriter =
new ModuleInfoRewriter(bain, mbuilder.conceals());
// replace with the overridden version
- data = ModuleEntry.create(data.getModule(),
- data.getPath(),
- data.getType(),
- minfoWriter.stream(),
- minfoWriter.size());
+ data = data.create(minfoWriter.getBytes());
}
out.add(data);
} catch (IOException e) {
@@ -163,12 +154,7 @@
return;
if (builder.isOverriddenClass(data.getPath())) {
byte[] bytes = cwriter.toByteArray();
- ModuleEntry ndata =
- ModuleEntry.create(data.getModule(),
- data.getPath(),
- data.getType(),
- new ByteArrayInputStream(bytes),
- bytes.length);
+ ModuleEntry ndata = data.create(bytes);
out.add(ndata);
} else {
out.add(data);
@@ -188,8 +174,8 @@
this.extender.write(this);
}
- InputStream stream() {
- return new ByteArrayInputStream(buf);
+ byte[] getBytes() {
+ return buf;
}
}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/ZipPlugin.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/ZipPlugin.java Fri Jul 01 16:55:44 2016 -0700
@@ -28,22 +28,19 @@
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
import java.util.Map;
-import java.util.Set;
import java.util.function.Predicate;
import java.util.zip.Deflater;
import jdk.tools.jlink.internal.ModulePoolImpl;
import jdk.tools.jlink.plugin.ModuleEntry;
import jdk.tools.jlink.plugin.ModulePool;
-import jdk.tools.jlink.plugin.TransformerPlugin;
+import jdk.tools.jlink.plugin.Plugin;
/**
*
* ZIP Compression plugin
*/
-public final class ZipPlugin implements TransformerPlugin {
+public final class ZipPlugin implements Plugin {
public static final String NAME = "zip";
private Predicate<String> predicate;
@@ -66,10 +63,8 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.COMPRESSOR);
- return Collections.unmodifiableSet(set);
+ public Category getType() {
+ return Category.COMPRESSOR;
}
@Override
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/asm/AsmPlugin.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/asm/AsmPlugin.java Fri Jul 01 16:55:44 2016 -0700
@@ -25,7 +25,7 @@
package jdk.tools.jlink.internal.plugins.asm;
import java.util.Objects;
-import jdk.tools.jlink.plugin.TransformerPlugin;
+import jdk.tools.jlink.plugin.Plugin;
import jdk.tools.jlink.plugin.ModuleEntry;
import jdk.tools.jlink.plugin.ModulePool;
import jdk.tools.jlink.internal.ModulePoolImpl;
@@ -35,7 +35,7 @@
* resources.
*
*/
-public abstract class AsmPlugin implements TransformerPlugin {
+public abstract class AsmPlugin implements Plugin {
public AsmPlugin() {
}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/asm/AsmPoolImpl.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/asm/AsmPoolImpl.java Fri Jul 01 16:55:44 2016 -0700
@@ -93,8 +93,7 @@
}
byte[] content = writer.toByteArray();
- ModuleEntry res = ModuleEntry.create(path,
- new ByteArrayInputStream(content), content.length);
+ ModuleEntry res = ModuleEntry.create(path, content);
transformedClasses.put(className, res);
}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/optim/ControlFlow.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/optim/ControlFlow.java Fri Jul 01 16:55:44 2016 -0700
@@ -76,9 +76,7 @@
@Override
public int hashCode() {
- int hash = 3;
- hash = 79 * hash + Objects.hashCode(this.firstInstruction);
- return hash;
+ return Objects.hashCode(this.firstInstruction);
}
@Override
@@ -214,9 +212,7 @@
@Override
public int hashCode() {
- int hash = 3;
- hash = 89 * hash + this.getIndex();
- return hash;
+ return this.getIndex();
}
@Override
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/plugin/ExecutableImage.java Fri Jul 01 12:32:21 2016 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package jdk.tools.jlink.plugin;
-
-import java.nio.file.Path;
-import java.util.List;
-import java.util.Set;
-
-/**
- * An executable runtime image. Contains the information about the executable
- * image created.
- */
-public interface ExecutableImage {
-
- /**
- * Image home directory,
- *
- * @return The home directory.
- */
- public Path getHome();
-
- /**
- * The names of the modules located in the image.
- *
- * @return The set of modules.
- */
- public Set<String> getModules();
-
- /**
- * The list of arguments required to execute the image.
- *
- * @return The list of arguments.
- */
- public List<String> getExecutionArgs();
-
- /**
- * Store new arguments required to execute the image.
- *
- * @param args Additional arguments
- */
- public void storeLaunchArgs(List<String> args);
-}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/plugin/ModuleEntry.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/plugin/ModuleEntry.java Fri Jul 01 16:55:44 2016 -0700
@@ -26,16 +26,18 @@
import java.io.ByteArrayInputStream;
import java.io.InputStream;
-import java.util.Objects;
-import jdk.tools.jlink.internal.ImageFileCreator;
-import jdk.tools.jlink.internal.ModuleEntryImpl;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.UncheckedIOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import jdk.tools.jlink.internal.ModuleEntryFactory;
/**
- * A LinkModuleEntry is the elementary unit of data inside an image. It is
- * generally a file. e.g.: a java class file, a resource file, a shared library,
- * ...
+ * A ModuleEntry is the elementary unit of data inside an image. It is
+ * generally a file. e.g.: a java class file, a resource file, a shared library.
* <br>
- * A LinkModuleEntry is identified by a path of the form:
+ * A ModuleEntry is identified by a path of the form:
* <ul>
* <li>For jimage content: /{module name}/{package1}/.../{packageN}/{file
* name}</li>
@@ -63,93 +65,133 @@
OTHER
}
/**
- * The LinkModuleEntry module name.
+ * The ModuleEntry module name.
*
* @return The module name.
*/
public String getModule();
/**
- * The LinkModuleEntry path.
+ * The ModuleEntry path.
*
* @return The module path.
*/
public String getPath();
/**
- * The LinkModuleEntry's type.
+ * The ModuleEntry's type.
*
* @return The data type.
*/
public Type getType();
/**
- * The LinkModuleEntry content as an array of byte.
+ * The ModuleEntry content as an array of bytes.
*
* @return An Array of bytes.
*/
- public byte[] getBytes();
+ public default byte[] getBytes() {
+ try (InputStream is = stream()) {
+ return is.readAllBytes();
+ } catch (IOException ex) {
+ throw new UncheckedIOException(ex);
+ }
+ }
/**
- * The LinkModuleEntry content length.
+ * The ModuleEntry content length.
*
* @return The length.
*/
public long getLength();
/**
- * The LinkModuleEntry stream.
+ * The ModuleEntry stream.
*
* @return The module data stream.
*/
public InputStream stream();
+ /**
+ * Write the content of this ModuleEntry to stream.
+ *
+ * @param out the output stream
+ */
+ public default void write(OutputStream out) {
+ try {
+ out.write(getBytes());
+ } catch (IOException ex) {
+ throw new UncheckedIOException(ex);
+ }
+ }
/**
- * Create a LinkModuleEntry located inside a jimage file. Such
- * LinkModuleEntry has a Type being equals to CLASS_OR_RESOURCE.
+ * Create a ModuleEntry with new content but other information
+ * copied from this ModuleEntry.
*
- * @param path The complete resource path (contains the module radical).
- * @param content The resource content.
- * @param size The content size.
- * @return A new LinkModuleEntry.
+ * @param content The new resource content.
+ * @return A new ModuleEntry.
*/
- public static ModuleEntry create(String path, InputStream content, long size) {
- Objects.requireNonNull(path);
- Objects.requireNonNull(content);
- String[] split = ImageFileCreator.splitPath(path);
- String module = split[0];
- return new ModuleEntryImpl(module, path, Type.CLASS_OR_RESOURCE, content, size);
+ public default ModuleEntry create(byte[] content) {
+ return ModuleEntryFactory.create(this, content);
}
/**
- * Create a LinkModuleEntry for a file that will be located inside a jimage
- * file.
+ * Create a ModuleEntry with new content but other information
+ * copied from this ModuleEntry.
+ *
+ * @param file The new resource content.
+ * @return A new ModuleEntry.
+ */
+ public default ModuleEntry create(Path file) {
+ return ModuleEntryFactory.create(this, file);
+ }
+
+ /**
+ * Create a ModuleEntry for a resource of the given type.
+ *
+ * @param path The resource path.
+ * @param type The ModuleEntry type.
+ * @param content The resource content.
+ * @return A new ModuleEntry.
+ */
+ public static ModuleEntry create(String path,
+ ModuleEntry.Type type, byte[] content) {
+ return ModuleEntryFactory.create(path, type, content);
+ }
+
+ /**
+ * Create a ModuleEntry for a resource of type {@link Type#CLASS_OR_RESOURCE}.
*
* @param path The resource path.
* @param content The resource content.
- * @return A new LinkModuleEntry.
+ * @return A new ModuleEntry.
*/
public static ModuleEntry create(String path, byte[] content) {
- return create(path, new ByteArrayInputStream(content),
- content.length);
+ return create(path, Type.CLASS_OR_RESOURCE, content);
}
/**
- * Create a LinkModuleEntry for a file that will be located outside a jimage
- * file.
+ * Create a ModuleEntry for a resource of the given type.
*
- * @param module The module in which this files is located.
- * @param path The file path locator (doesn't contain the module name).
- * @param type The LinkModuleEntry type.
- * @param content The file content.
- * @param size The content size.
- * @return A new LinkModuleEntry.
+ * @param path The resource path.
+ * @param type The ModuleEntry type.
+ * @param file The resource file.
+ * @return A new ModuleEntry.
*/
- public static ModuleEntry create(String module, String path, ModuleEntry.Type type,
- InputStream content, long size) {
- Objects.requireNonNull(path);
- Objects.requireNonNull(content);
- return new ModuleEntryImpl(module, path, type, content, size);
+ public static ModuleEntry create(String path,
+ ModuleEntry.Type type, Path file) {
+ return ModuleEntryFactory.create(path, type, file);
+ }
+
+ /**
+ * Create a ModuleEntry for a resource of type {@link Type#CLASS_OR_RESOURCE}.
+ *
+ * @param path The resource path.
+ * @param file The resource file.
+ * @return A new ModuleEntry.
+ */
+ public static ModuleEntry create(String path, Path file) {
+ return create(path, Type.CLASS_OR_RESOURCE, file);
}
}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/plugin/Plugin.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/plugin/Plugin.java Fri Jul 01 16:55:44 2016 -0700
@@ -90,11 +90,12 @@
}
/**
- * The Plugin set of types.
- * @return The set of types.
+ * The type of this plugin.
+ *
+ * @return The type of this plugin
*/
- public default Set<Category> getType() {
- return Collections.emptySet();
+ public default Category getType() {
+ return Category.TRANSFORMER;
}
/**
@@ -198,4 +199,15 @@
*/
public default void configure(Map<String, String> config) {
}
+
+ /**
+ * Visit the content of the modules that are composing the image.
+ *
+ * @param in Read only content.
+ * @param out The pool to fill with content. This pool must contain
+ * the result of the visit.
+ *
+ * @throws PluginException
+ */
+ public void visit(ModulePool in, ModulePool out);
}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/plugin/PostProcessorPlugin.java Fri Jul 01 12:32:21 2016 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package jdk.tools.jlink.plugin;
-
-import java.util.List;
-
-/**
- * Implement this interface to develop a PostProcessor plugin.
- * PostProcessor plugins are called once the image has been generated and is executable.
- **/
-public interface PostProcessorPlugin extends Plugin {
-
- /**
- * Post process an image.
- *
- * @param image The executable image.
- * @return The list of arguments to add to launchers (if any).
- */
- public List<String> process(ExecutableImage image);
-}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/plugin/TransformerPlugin.java Fri Jul 01 12:32:21 2016 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package jdk.tools.jlink.plugin;
-
-
-/**
- * Implement this interface to develop a Transformer plugin.
- * TransformerPlugin are called during image creation. This kind of plugin aims to
- * modify the content of the runtime image.
- */
-public interface TransformerPlugin extends Plugin {
- /**
- * Visit the content of the modules that are composing the image.
- *
- * @param in Read only content.
- * @param out The pool to fill with content. This pool must contain
- * the result of the visit.
- *
- * @throws PluginException
- */
- public void visit(ModulePool in, ModulePool out);
-}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/resources/jlink.properties Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/resources/jlink.properties Fri Jul 01 16:55:44 2016 -0700
@@ -29,7 +29,7 @@
main.usage=\
Usage: {0} <options> --modulepath <modulepath> --addmods <mods> --output <path>\n\
-Possible options include:
+\Possible options include:
error.prefix=Error:
warn.prefix=Warning:
@@ -68,7 +68,18 @@
Include your program and the following diagnostic in your report. Thank you.
main.extended.help=\
-List of available plugins:
+\List of available plugins:
+
+main.extended.help.footer=\
+\For options requiring a <pattern-list>, the value will be a comma\
+\ separated list of elements each using one the following forms:\n\
+\ <glob-pattern>\n\
+\ glob:<glob-pattern>\n\
+\ regex:<regex-pattern>\n\
+\ @<filename> where filename is the name of a file containing patterns to be\
+\ used, one pattern per line\n\
+\n\
+
err.unknown.byte.order:unknown byte order {0}
err.output.must.be.specified:--output must be specified
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/resources/plugins.properties Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/resources/plugins.properties Fri Jul 01 16:55:44 2016 -0700
@@ -37,15 +37,16 @@
Class optimization. Warning: This plugin is experimental.\n\
An optional <log file> can be specified to log applied optimizations.
-compress.argument=<0|1|2>[:filter=<pattern>]
+compress.argument=<0|1|2>[:filter=<pattern-list>]
compress.description=\
Compress all resources in the output image.\n\
Level 0: constant string sharing\n\
Level 1: ZIP\n\
Level 2: both.\n\
-An optional filter can be specified to list the pattern of files to be filtered.\n\
-Use ^ for negation. e.g.: *Exception.class,*Error.class,^/java.base/java/lang/*
+An optional <pattern-list> filter can be specified to list the pattern of\n\
+files to be included.
+
compact-cp.argument=<resource paths>
@@ -59,15 +60,15 @@
If files to copy are not absolute path, JDK home dir is used.\n\
e.g.: jrt-fs.jar,LICENSE,/home/me/myfile.txt=somewehere/conf.txt
-exclude-files.argument=<files to exclude | files of excluded files>
+exclude-files.argument=<pattern-list> of files to exclude
exclude-files.description=\
-Specify files to exclude. e.g.: *.diz, /java.base/native/client/*
+Specify files to exclude. e.g.: **.java,glob:/java.base/native/client/**
-exclude-resources.argument=<resources to exclude | file of excluded resources>
+exclude-resources.argument=<pattern-list> resources to exclude
exclude-resources.description=\
-Specify resources to exclude. e.g.: *.jcov, */META-INF/*
+Specify resources to exclude. e.g.: **.jcov,glob:**/META-INF/**
generate-jli-classes.argument=<bmh[:bmh-species=LL,L3,...]>
@@ -78,10 +79,11 @@
onoff.argument=<on|off>
-order-resources.argument=<paths in priority order | file with resource paths>
+order-resources.argument=<pattern-list> of paths in priority order. If a @file\n\
+is specified, then each line should be an exact match for the path to be ordered
order-resources.description=\
-Order resources. e.g.: */module-info.class,/java.base/java/lang/*
+Order resources. e.g.: **/module-info.class,@classlist,/java.base/java/lang/**
strip-debug.description=\
Strip debug information from the output image
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jmod/JmodTask.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jmod/JmodTask.java Fri Jul 01 16:55:44 2016 -0700
@@ -1085,7 +1085,7 @@
@Override public Class<Pattern> valueType() { return Pattern.class; }
- @Override public String valuePattern() { return "pattern"; }
+ @Override public String valuePattern() { return "regex-pattern"; }
}
static class PathMatcherConverter implements ValueConverter<PathMatcher> {
@@ -1100,7 +1100,7 @@
@Override public Class<PathMatcher> valueType() { return PathMatcher.class; }
- @Override public String valuePattern() { return "pattern"; }
+ @Override public String valuePattern() { return "pattern-list"; }
}
/* Support for @<file> in jmod help */
@@ -1145,7 +1145,7 @@
String content = super.format(all);
StringBuilder builder = new StringBuilder();
- builder.append("\n").append(" Main operation modes:\n ");
+ builder.append(getMessage("main.opt.mode")).append("\n ");
builder.append(getMessage("main.opt.mode.create")).append("\n ");
builder.append(getMessage("main.opt.mode.list")).append("\n ");
builder.append(getMessage("main.opt.mode.describe")).append("\n ");
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jmod/resources/jmod.properties Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jmod/resources/jmod.properties Fri Jul 01 16:55:44 2016 -0700
@@ -28,11 +28,13 @@
use --help for a list of possible options
main.usage=\
-Usage: {0} (create|list|describe|hash) <OPTIONS> <jmod-file>
+Usage: {0} (create|list|describe|hash) <OPTIONS> <jmod-file>\n\
error.prefix=Error:
warn.prefix=Warning:
+main.opt.mode=\
+\Main operation modes:
main.opt.mode.create=\
\create - Creates a new jmod archive
main.opt.mode.list=\
@@ -49,7 +51,9 @@
main.opt.cmds=Location of native commands
main.opt.config=Location of user-editable config files
main.opt.dry-run=Dry run of hash mode
-main.opt.exclude=Exclude files, given as a PATTERN
+main.opt.exclude=Exclude files matching the supplied comma separated pattern\
+\ list, each element using one the following forms: <glob-pattern>,\
+\ glob:<glob-pattern> or regex:<regex-pattern>
main.opt.module-version= Module version
main.opt.main-class=Main class
main.opt.main-class.arg=class-name
@@ -61,7 +65,7 @@
main.opt.os-version.arg=os-version
main.opt.modulepath=Module path
main.opt.hash-modules=Compute and record hashes to tie a packaged module\
-\ with modules matching the given pattern and depending upon it directly\
+\ with modules matching the given <regex-pattern> and depending upon it directly\
\ or indirectly. The hashes are recorded in the JMOD file being created, or\
\ a JMOD file or modular JAR on the module path specified the jmod hash command.
--- a/jdk/src/jdk.jlink/share/classes/module-info.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.jlink/share/classes/module-info.java Fri Jul 01 16:55:44 2016 -0700
@@ -29,20 +29,19 @@
requires jdk.internal.opt;
requires jdk.jdeps;
- uses jdk.tools.jlink.plugin.TransformerPlugin;
- uses jdk.tools.jlink.plugin.PostProcessorPlugin;
+ uses jdk.tools.jlink.plugin.Plugin;
- provides jdk.tools.jlink.plugin.TransformerPlugin with jdk.tools.jlink.internal.plugins.FileCopierPlugin;
- provides jdk.tools.jlink.plugin.TransformerPlugin with jdk.tools.jlink.internal.plugins.StripDebugPlugin;
- provides jdk.tools.jlink.plugin.TransformerPlugin with jdk.tools.jlink.internal.plugins.ExcludePlugin;
- provides jdk.tools.jlink.plugin.TransformerPlugin with jdk.tools.jlink.internal.plugins.ExcludeFilesPlugin;
- provides jdk.tools.jlink.plugin.TransformerPlugin with jdk.tools.jlink.internal.plugins.SystemModuleDescriptorPlugin;
- provides jdk.tools.jlink.plugin.TransformerPlugin with jdk.tools.jlink.internal.plugins.StripNativeCommandsPlugin;
- provides jdk.tools.jlink.plugin.TransformerPlugin with jdk.tools.jlink.internal.plugins.OrderResourcesPlugin;
- provides jdk.tools.jlink.plugin.TransformerPlugin with jdk.tools.jlink.internal.plugins.DefaultCompressPlugin;
- provides jdk.tools.jlink.plugin.TransformerPlugin with jdk.tools.jlink.internal.plugins.OptimizationPlugin;
- provides jdk.tools.jlink.plugin.TransformerPlugin with jdk.tools.jlink.internal.plugins.ExcludeVMPlugin;
- provides jdk.tools.jlink.plugin.TransformerPlugin with jdk.tools.jlink.internal.plugins.IncludeLocalesPlugin;
- provides jdk.tools.jlink.plugin.TransformerPlugin with jdk.tools.jlink.internal.plugins.GenerateJLIClassesPlugin;
- provides jdk.tools.jlink.plugin.TransformerPlugin with jdk.tools.jlink.internal.plugins.ReleaseInfoPlugin;
+ provides jdk.tools.jlink.plugin.Plugin with jdk.tools.jlink.internal.plugins.FileCopierPlugin;
+ provides jdk.tools.jlink.plugin.Plugin with jdk.tools.jlink.internal.plugins.StripDebugPlugin;
+ provides jdk.tools.jlink.plugin.Plugin with jdk.tools.jlink.internal.plugins.ExcludePlugin;
+ provides jdk.tools.jlink.plugin.Plugin with jdk.tools.jlink.internal.plugins.ExcludeFilesPlugin;
+ provides jdk.tools.jlink.plugin.Plugin with jdk.tools.jlink.internal.plugins.SystemModuleDescriptorPlugin;
+ provides jdk.tools.jlink.plugin.Plugin with jdk.tools.jlink.internal.plugins.StripNativeCommandsPlugin;
+ provides jdk.tools.jlink.plugin.Plugin with jdk.tools.jlink.internal.plugins.OrderResourcesPlugin;
+ provides jdk.tools.jlink.plugin.Plugin with jdk.tools.jlink.internal.plugins.DefaultCompressPlugin;
+ provides jdk.tools.jlink.plugin.Plugin with jdk.tools.jlink.internal.plugins.OptimizationPlugin;
+ provides jdk.tools.jlink.plugin.Plugin with jdk.tools.jlink.internal.plugins.ExcludeVMPlugin;
+ provides jdk.tools.jlink.plugin.Plugin with jdk.tools.jlink.internal.plugins.IncludeLocalesPlugin;
+ provides jdk.tools.jlink.plugin.Plugin with jdk.tools.jlink.internal.plugins.GenerateJLIClassesPlugin;
+ provides jdk.tools.jlink.plugin.Plugin with jdk.tools.jlink.internal.plugins.ReleaseInfoPlugin;
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ar.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ar.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ar_JO.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ar_JO.java Fri Jul 01 16:55:44 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",
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ar_LB.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ar_LB.java Fri Jul 01 16:55:44 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",
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ar_SY.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ar_SY.java Fri Jul 01 16:55:44 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",
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_be.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_be.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_bg.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_bg.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ca.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ca.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_cs.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_cs.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_da.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_da.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_de.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_de.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_de_AT.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_de_AT.java Fri Jul 01 16:55:44 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.
*
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_el.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_el.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_AU.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_AU.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_CA.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_CA.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_GB.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_GB.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_IE.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_IE.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_IN.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_IN.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_MT.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_MT.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_NZ.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_NZ.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_SG.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_SG.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_ZA.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_en_ZA.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es.java Fri Jul 01 16:55:44 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 },
};
}
}
--- /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 Fri Jul 01 16:55:44 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 },
+ };
+ }
+}
--- /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 Fri Jul 01 16:55:44 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 },
+ };
+ }
+}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_CL.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_CL.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_CO.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_CO.java Fri Jul 01 16:55:44 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 },
};
}
}
--- /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 Fri Jul 01 16:55:44 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 },
+ };
+ }
+}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_DO.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_DO.java Fri Jul 01 16:55:44 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 },
};
}
}
--- /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 Fri Jul 01 16:55:44 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 },
+ };
+ }
+}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_GT.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_GT.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_HN.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_HN.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_MX.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_MX.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_PA.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_PA.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_PE.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_PE.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_PR.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_PR.java Fri Jul 01 16:55:44 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 },
};
}
}
--- /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 Fri Jul 01 16:55:44 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 },
+ };
+ }
+}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_US.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_US.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_UY.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_UY.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_VE.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_es_VE.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_et.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_et.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_fi.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_fi.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_fr.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_fr.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_fr_BE.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_fr_BE.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_fr_CA.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_fr_CA.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_fr_CH.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_fr_CH.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ga.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ga.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_hi_IN.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_hi_IN.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_hr.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_hr.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_hu.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_hu.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_in.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_in.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_is.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_is.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_it.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_it.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_it_CH.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_it_CH.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_iw.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_iw.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ja.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ja.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ko.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ko.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_lt.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_lt.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_lv.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_lv.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_mk.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_mk.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ms.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ms.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_mt.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_mt.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_nl.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_nl.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_nl_BE.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_nl_BE.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_no.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_no.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_pl.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_pl.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_pt.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_pt.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_pt_PT.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_pt_PT.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ro.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ro.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ru.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_ru.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sk.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sk.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sl.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sl.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sq.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sq.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sr.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sr.java Fri Jul 01 16:55:44 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 },
};
}
}
--- /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 Fri Jul 01 16:55:44 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 },
+ };
+ }
+}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sr_Latn.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sr_Latn.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sv.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_sv.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_th.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_th.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_tr.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_tr.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_uk.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_uk.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_vi.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_vi.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_zh.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_zh.java Fri Jul 01 16:55:44 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 },
};
}
}
--- /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 Fri Jul 01 16:55:44 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 },
+ };
+ }
+}
--- /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 Fri Jul 01 16:55:44 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 },
+ };
+ }
+}
--- a/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_zh_TW.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.localedata/share/classes/sun/text/resources/ext/JavaTimeSupplementary_zh_TW.java Fri Jul 01 16:55:44 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 },
};
}
}
--- a/jdk/src/jdk.management/share/classes/com/sun/management/internal/DiagnosticCommandImpl.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/src/jdk.management/share/classes/com/sun/management/internal/DiagnosticCommandImpl.java Fri Jul 01 16:55:44 2016 -0700
@@ -259,9 +259,20 @@
&& signature[0] != null
&& signature[0].compareTo(strArrayClassName) == 0)) {
return w.execute((String[]) params[0]);
+ } else {
+ throw new ReflectionException(
+ new NoSuchMethodException(actionName
+ + ": mismatched signature "
+ + (signature != null ? Arrays.toString(signature) : "[]")
+ + " or parameters"));
}
+ } else {
+ throw new ReflectionException(
+ new NoSuchMethodException("Method " + actionName
+ + " with signature "
+ + (signature != null ? Arrays.toString(signature) : "[]")
+ + " not found"));
}
- throw new ReflectionException(new NoSuchMethodException(actionName));
}
private static String transform(String name) {
--- a/jdk/test/ProblemList.txt Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/ProblemList.txt Fri Jul 01 16:55:44 2016 -0700
@@ -164,6 +164,10 @@
java/net/DatagramSocket/SendDatagramToBadAddress.java 7143960 macosx-all
+java/net/httpclient/http2/BasicTest.java 8157408 linux-all
+java/net/httpclient/http2/ErrorTest.java 8158127 solaris-all,windows-all
+java/net/httpclient/http2/TLSConnection.java 8157482 macosx-all
+
############################################################################
# jdk_nio
@@ -208,8 +212,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
@@ -272,8 +274,6 @@
sun/security/pkcs11/tls/TestPRF.java 8077138,8023434 windows-all
sun/security/pkcs11/tls/TestPremaster.java 8077138,8023434 windows-all
-sun/security/pkcs11/rsa/TestKeyPairGenerator.java 8074580 generic-all
-
sun/security/krb5/auto/HttpNegotiateServer.java 8038079 generic-all
sun/security/tools/keytool/autotest.sh 8130302 generic-all
@@ -338,9 +338,6 @@
# jdk_time
-java/time/test/java/time/TestClock_System.java 8158128 solaris-all
-
-
############################################################################
# jdk_util
@@ -387,8 +384,6 @@
# core_tools
-tools/jlink/plugins/IncludeLocalesPluginTest.java 8159781 generic-all
-
tools/jlink/JLinkOptimTest.java 8159264 generic-all
############################################################################
--- a/jdk/test/TEST.groups Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/TEST.groups Fri Jul 01 16:55:44 2016 -0700
@@ -27,7 +27,6 @@
tier1 = \
:jdk_lang \
- -java/lang/ProcessHandle/TreeTest.java \
:jdk_util \
-java/util/concurrent/ThreadPoolExecutor/ConfigChanges.java \
-java/util/concurrent/forkjoin/FJExceptionTableLeak.java \
@@ -38,7 +37,6 @@
tools/pack200
tier2 = \
- java/lang/ProcessHandle/TreeTest.java \
java/util/concurrent/ThreadPoolExecutor/ConfigChanges.java \
java/util/concurrent/forkjoin/FJExceptionTableLeak.java \
:jdk_io \
--- a/jdk/test/com/sun/jdi/BacktraceFieldTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/com/sun/jdi/BacktraceFieldTest.java Fri Jul 01 16:55:44 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
@@ -24,7 +24,8 @@
/**
* @test
* @bug 4446677
- * @summary debuggee crashes when debugging under jbuilder
+ * @bug 8158237
+ * @summary debuggee used to crash when debugging under jbuilder
*
* @author jjh
*
@@ -101,6 +102,16 @@
new BacktraceFieldTest(args).startTests();
}
+ private void printval(ArrayReference backTraceVal, int index) throws Exception {
+ ArrayReference val = (ArrayReference)backTraceVal.getValue(index);
+ println("BT: val at " + index + " = " + val);
+
+ // The segv used to happen here for index = 0
+ // Now all objects in the backtrace are objects.
+ Object xVal = (Object)val.getValue(0);
+ println("BT: xVal = " + xVal);
+ }
+
/********** test core **********/
protected void runTests() throws Exception {
@@ -128,42 +139,45 @@
* Search through the fields of ee to verify that
* java.lang.Throwable.backtrace isn't there.
*/
+ boolean backtrace_found = false;
Iterator iter = allFields.iterator();
while(iter.hasNext()) {
Field ff = (Field)iter.next();
if (ff.toString().equals("java.lang.Throwable.backtrace")) {
- failure("ERROR: java.lang.Throwable.backtrace field not filtered out.");
+ backtrace_found = true;
+ println("java.lang.Throwable.backtrace field not filtered out.");
/*
* If you want to experience the segv this bug causes, change
* this test to 1 == 1 and run it with jdk 1.4, build 74 or earlier
*/
- if (1 == 0) {
+ if (1 == 1) {
// The following code will show the segv that this can cause.
ObjectReference myVal = (ObjectReference)myFrame.getValue(lv);
println("BT: myVal = " + myVal);
- ArrayReference backTraceVal = null;
- backTraceVal = (ArrayReference)myVal.getValue(ff);
+ ArrayReference backTraceVal = (ArrayReference)myVal.getValue(ff);
println("BT: backTraceVal = " + backTraceVal);
- ArrayReference secondVal = (ArrayReference)backTraceVal.getValue(1);
- println("BT: secondVal = " + secondVal);
-
- Object x2Val = (Object)secondVal.getValue(0);
- println("BT: x2Val = " + x2Val);
+ printval(backTraceVal, 0);
+ printval(backTraceVal, 1);
+ printval(backTraceVal, 2);
+ printval(backTraceVal, 3); // backtrace has 4 elements
- ArrayReference firstVal = (ArrayReference)backTraceVal.getValue(0);
- println("BT: firstVal = " + firstVal);
-
- // The segv happens here.
- Object xVal = (Object)firstVal.getValue(0);
- println("BT: xVal = " + xVal);
+ try {
+ printval(backTraceVal, 4);
+ } catch (Exception e) {
+ println("Exception " + e);
+ }
}
break;
}
}
+ if (!backtrace_found) {
+ failure("ERROR: java.lang.Throwable.backtrace field filtered out.");
+ }
+
// Next, verify that we don't accidently discard a field that we shouldn't
if (!testFailed) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/com/sun/jndi/ldap/SimpleClientIdHashCode.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,73 @@
+/*
+ * 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 8158802
+ * @summary com.sun.jndi.ldap.SimpleClientId produces wrong hash code
+ * @modules java.naming/com.sun.jndi.ldap
+ */
+
+import java.io.OutputStream;
+import java.lang.reflect.Constructor;
+import javax.naming.ldap.Control;
+
+
+public class SimpleClientIdHashCode {
+ public static void main(String[] args) throws Throwable {
+ Class<?> simpleClientIdClass
+ = Class.forName("com.sun.jndi.ldap.SimpleClientId");
+ Constructor<?> init = simpleClientIdClass.getDeclaredConstructor(
+ int.class, String.class, int.class, String.class,
+ Control[].class, OutputStream.class, String.class,
+ String.class, Object.class);
+ init.setAccessible(true);
+
+ Object p1 = new byte[]{66,77};
+ Object p2 = new char[]{'w','d'};
+ Object p3 = "word";
+
+ test(init, new byte[]{65}, new byte[]{65});
+ test(init, new char[]{'p'}, new char[]{'p'});
+ test(init, "pass", "pass");
+ test(init, p1, p1);
+ test(init, p2, p2);
+ test(init, p3, p3);
+ test(init, null, null);
+ }
+
+ private static void test(Constructor<?> init, Object pass1, Object pass2)
+ throws Throwable {
+
+ Object o1 = init.newInstance(1, "host", 3, "", null, System.out,
+ null, null, pass1);
+ Object o2 = init.newInstance(1, "host", 3, "", null, System.out,
+ null, null, pass2);
+
+ if (!o1.equals(o2))
+ throw new RuntimeException("Objects not equal");
+
+ if (o1.hashCode() != o2.hashCode())
+ throw new RuntimeException("Inconsistent hash codes");
+ }
+}
--- a/jdk/test/java/lang/ProcessHandle/TreeTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/java/lang/ProcessHandle/TreeTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -50,7 +50,6 @@
* @build jdk.test.lib.Utils
* @run testng/othervm TreeTest
* @summary Test counting and JavaChild.spawning and counting of Processes.
- * @key intermittent
* @author Roger Riggs
*/
public class TreeTest extends ProcessUtil {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/lang/Runtime/shutdown/ShutdownInterruptedMain.java Fri Jul 01 16:55:44 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.
+ *
+ * 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 8154017
+ * @library /lib/testlibrary
+ * @build jdk.testlibrary.*
+ * @summary Shutdown hooks are racing against shutdown sequence,
+ if System.exit()-calling thread is interrupted
+ * @run main ShutdownInterruptedMain exec
+ */
+
+import jdk.testlibrary.OutputAnalyzer;
+import static jdk.testlibrary.ProcessTools.createJavaProcessBuilder;
+import static jdk.testlibrary.ProcessTools.executeProcess;
+
+public class ShutdownInterruptedMain {
+
+ public static void main(String[] args) throws Exception {
+ if (args.length > 0) {
+ ProcessBuilder pb = createJavaProcessBuilder(true, "ShutdownInterruptedMain");
+ OutputAnalyzer output = executeProcess(pb);
+ output.shouldContain("Shutdown Hook");
+ output.shouldHaveExitValue(0);
+ return;
+ }
+
+ Runtime.getRuntime().addShutdownHook(new Thread() {
+ @Override
+ public void run() {
+ // Wait for the race to unfold:
+ try {
+ Thread.sleep(5_000);
+ } catch (InterruptedException e) {}
+ System.out.println("Shutdown Hook");
+ System.out.flush();
+ }
+ });
+ Thread.currentThread().interrupt();
+ System.exit(0);
+ }
+}
--- a/jdk/test/java/lang/String/CompareIC.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/java/lang/String/CompareIC.java Fri Jul 01 16:55:44 2016 -0700
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 4124769
+ * @bug 4124769 8160312
* @summary Test ignore-case comparison
*
*/
@@ -45,6 +45,10 @@
comparer.testTriplet(test1, test2, test3);
test2 = test2.toLowerCase();
comparer.testTriplet(test1, test2, test3);
+
+ // toLowerCase -> non-latin1
+ if ("\u00b5".compareToIgnoreCase("X") < 0)
+ throw new RuntimeException("Comparison failure1");
}
private void testTriplet(String one, String two, String three)
--- a/jdk/test/java/lang/invoke/MethodHandlesTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/java/lang/invoke/MethodHandlesTest.java Fri Jul 01 16:55:44 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);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessModeMethodNames.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,61 @@
+/*
+ * 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
+ * @run testng VarHandleTestAccessModeMethodNames
+ */
+
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import java.lang.invoke.VarHandle;
+import java.util.stream.Stream;
+
+import static org.testng.Assert.assertEquals;
+
+public class VarHandleTestAccessModeMethodNames {
+
+ @DataProvider
+ public static Object[][] accessModesProvider() {
+ return Stream.of(VarHandle.AccessMode.values()).
+ map(am -> new Object[]{am}).
+ toArray(Object[][]::new);
+ }
+
+
+ @Test(dataProvider = "accessModesProvider")
+ public void testMethodName(VarHandle.AccessMode am) {
+ assertEquals(am.methodName(), toMethodName(am.name()));
+ }
+
+ private static String toMethodName(String name) {
+ StringBuilder s = new StringBuilder(name.toLowerCase());
+ int i;
+ while ((i = s.indexOf("_")) != -1) {
+ s.deleteCharAt(i);
+ s.setCharAt(i, Character.toUpperCase(s.charAt(i)));
+ }
+ return s.toString();
+ }
+}
--- a/jdk/test/java/lang/module/ConfigurationTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/java/lang/module/ConfigurationTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -157,7 +157,7 @@
*
* The test consists of three configurations:
* - Configuration cf1: m1, m2 requires public m1
- * - Configuration cf2: m3 requires m1
+ * - Configuration cf2: m3 requires m2
*/
public void testRequiresPublic2() {
@@ -219,7 +219,7 @@
*
* The test consists of three configurations:
* - Configuration cf1: m1
- * - Configuration cf2: m2 requires public m3, m3 requires m2
+ * - Configuration cf2: m2 requires public m1, m3 requires m2
*/
public void testRequiresPublic3() {
@@ -283,7 +283,7 @@
* The test consists of three configurations:
* - Configuration cf1: m1
* - Configuration cf2: m2 requires public m1
- * - Configuraiton cf3: m3 requires m3
+ * - Configuraiton cf3: m3 requires m2
*/
public void testRequiresPublic4() {
@@ -657,8 +657,8 @@
* Basic test of binding services with configurations.
*
* Configuration cf1: p@1.0 provides p.S
+ * Test configuration cf2: m1 uses p.S, p@2.0 provides p.S
* Test configuration cf2: m1 uses p.S
- * Test configuration cf2: m1 uses p.S, p@2.0 uses p.S
*/
public void testServiceBindingWithConfigurations3() {
@@ -896,7 +896,7 @@
Configuration cf2 = resolveRequires(cf1, finder, "m1");
assertTrue(cf2.modules().size() == 1);
- assertTrue(cf1.findModule("m1").isPresent());
+ assertTrue(cf2.findModule("m1").isPresent());
}
@@ -1305,7 +1305,7 @@
/**
- * Test "provides p.S" where p is not local
+ * Test "provides p.S with q.T" where q.T is not local
*/
@Test(expectedExceptions = { ResolutionException.class })
public void testProviderPackageNotLocal() {
--- a/jdk/test/java/lang/module/ModuleReferenceTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/java/lang/module/ModuleReferenceTest.java Fri Jul 01 16:55:44 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
@@ -110,7 +110,7 @@
ModuleReference mref3 = new ModuleReference(descriptor1, null, supplier);
assertTrue(mref1.equals(mref1));
- assertTrue(mref1.equals(mref1));
+ assertTrue(mref1.equals(mref2));
assertTrue(mref2.equals(mref1));
assertTrue(mref1.hashCode() == mref2.hashCode());
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/net/HttpURLConnection/NoProxyTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,64 @@
+/*
+ * 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 8144008
+ * @summary Setting NO_PROXY on HTTP URL connections does not stop proxying
+ * @run main/othervm NoProxyTest
+ */
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.Proxy;
+import java.net.ProxySelector;
+import java.net.SocketAddress;
+import java.net.URI;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.List;
+
+public class NoProxyTest {
+
+ static class NoProxyTestSelector extends ProxySelector {
+ @Override
+ public List<Proxy> select(URI uri) {
+ throw new RuntimeException("Should not reach here as proxy==Proxy.NO_PROXY");
+ }
+ @Override
+ public void connectFailed(URI u, SocketAddress s, IOException e) { }
+ }
+
+ public static void main(String args[]) throws MalformedURLException {
+ ProxySelector.setDefault(new NoProxyTestSelector());
+
+ URL url = URI.create("http://127.0.0.1/").toURL();
+ URLConnection connection;
+ try {
+ connection = url.openConnection(Proxy.NO_PROXY);
+ connection.connect();
+ } catch (IOException ignore) {
+ //ignore
+ }
+ }
+}
--- a/jdk/test/java/net/URLPermission/URLPermissionTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/java/net/URLPermission/URLPermissionTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 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 @@
/**
* @test
- * @bug 8010464 8027570 8027687 8029354
+ * @bug 8010464 8027570 8027687 8029354 8114860 8071660
*/
public class URLPermissionTest {
@@ -110,6 +110,8 @@
static class ActionImpliesTest extends Test {
String arg1, arg2;
+ String url1 = "http://www.foo.com/-";
+ String url2 = "http://www.foo.com/a/b";
ActionImpliesTest(String arg1, String arg2, boolean expected) {
this.arg1 = arg1;
@@ -117,10 +119,17 @@
this.expected = expected;
}
+ ActionImpliesTest(String ur11, String url2, String arg1, String arg2,
+ boolean expected) {
+ this.url1 = ur11;
+ this.url2 = url2;
+ this.arg1 = arg1;
+ this.arg2 = arg2;
+ this.expected = expected;
+ }
+
@Override
boolean execute() {
- String url1 = "http://www.foo.com/-";
- String url2 = "http://www.foo.com/a/b";
URLPermission p1 = new URLPermission(url1, arg1);
URLPermission p2 = new URLPermission(url2, arg2);
boolean result = p1.implies(p2);
@@ -129,10 +138,37 @@
}
}
+ static ActionsStringTest actionstest(String arg, String expectedActions) {
+ return new ActionsStringTest(arg, expectedActions);
+ }
+
+ static class ActionsStringTest extends Test {
+
+ String expectedActions;
+ String arg;
+
+ public ActionsStringTest(String arg, String expectedActions) {
+ this.arg = arg;
+ this.expectedActions = expectedActions;
+ }
+
+ @Override
+ boolean execute() {
+ String url = "http://www.foo.com/";
+ URLPermission urlp = new URLPermission(url, arg);
+ return (expectedActions.equals(urlp.getActions()));
+ }
+ }
+
static ActionImpliesTest actest(String arg1, String arg2, boolean expected) {
return new ActionImpliesTest(arg1, arg2, expected);
}
+ static ActionImpliesTest actest(String url1, String url2, String arg1,
+ String arg2, boolean expected) {
+ return new ActionImpliesTest(url1, url2, arg1, arg2, expected);
+ }
+
static class HashCodeTest extends Test {
String arg1, arg2;
int hash;
@@ -292,6 +328,9 @@
imtest("https:*", "http:*", false)
};
+ static final String FOO_URL = "http://www.foo.com/";
+ static final String BAR_URL = "http://www.bar.com/";
+
static Test[] actionImplies = {
actest("GET", "GET", true),
actest("GET", "POST", false),
@@ -305,7 +344,28 @@
actest("GET:X-Foo,X-Bar", "GET:x-bar,x-foo", true),
actest("GET:X-Bar,X-Foo,X-Bar,Y-Foo", "GET:x-bar,x-foo", true),
actest("GET:*", "GET:x-bar,x-foo", true),
- actest("*:*", "GET:x-bar,x-foo", true)
+ actest("*:*", "GET:x-bar,x-foo", true),
+ actest("", "GET:x-bar,x-foo", false),
+ actest("GET:x-bar,x-foo", "", true),
+ actest("", "", true),
+ actest("GET,DELETE", "GET,DELETE:x-foo", false),
+ actest(FOO_URL, BAR_URL, "", "GET:x-bar,x-foo", false),
+ actest(FOO_URL, BAR_URL, "GET:x-bar,x-foo", "", false),
+ actest(FOO_URL, BAR_URL, "", "", false)
+ };
+
+ static Test[] actionsStringTest = {
+ actionstest("", ""),
+ actionstest(":X-Bar", ":X-Bar"),
+ actionstest("GET", "GET"),
+ actionstest("get", "GET"),
+ actionstest("GET,POST", "GET,POST"),
+ actionstest("GET,post", "GET,POST"),
+ actionstest("get,post", "GET,POST"),
+ actionstest("get,post,DELETE", "DELETE,GET,POST"),
+ actionstest("GET,POST:", "GET,POST"),
+ actionstest("GET:X-Foo,X-bar", "GET:X-Bar,X-Foo"),
+ actionstest("GET,POST,DELETE:X-Bar,X-Foo,X-Bar,Y-Foo", "DELETE,GET,POST:X-Bar,X-Bar,X-Foo,Y-Foo")
};
static Test[] equalityTests = {
@@ -449,6 +509,23 @@
System.out.println ("action test " + i + " OK");
}
+ for (int i = 0; i < actionsStringTest.length; i++) {
+ ActionsStringTest test = (ActionsStringTest) actionsStringTest[i];
+ Exception caught = null;
+ boolean result = false;
+ try {
+ result = test.execute();
+ } catch (Exception e) {
+ caught = e;
+ }
+ if (!result) {
+ failed = true;
+ System.out.println("test failed: " + test.arg + ": "
+ + test.expectedActions + " Exception: " + caught);
+ }
+ System.out.println("Actions String test " + i + " OK");
+ }
+
serializationTest("http://www.foo.com/-", "GET,DELETE:*");
serializationTest("https://www.foo.com/-", "POST:X-Foo");
serializationTest("https:*", "*:*");
--- a/jdk/test/java/net/httpclient/BasicWebSocketAPITest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/java/net/httpclient/BasicWebSocketAPITest.java Fri Jul 01 16:55:44 2016 -0700
@@ -32,10 +32,9 @@
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.SocketChannel;
+import java.time.Duration;
import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
-import java.util.stream.Stream;
/*
* @test
@@ -83,13 +82,7 @@
(ws) ->
TestKit.assertThrows(NullPointerException.class,
"message",
- () -> ws.sendBinary((byte[]) null, true))
- );
- checkAndClose(
- (ws) ->
- TestKit.assertThrows(NullPointerException.class,
- "message",
- () -> ws.sendBinary((ByteBuffer) null, true))
+ () -> ws.sendBinary(null, true))
);
checkAndClose(
(ws) ->
@@ -125,13 +118,7 @@
(ws) ->
TestKit.assertThrows(NullPointerException.class,
"message",
- () -> ws.sendText((CharSequence) null))
- );
- checkAndClose(
- (ws) ->
- TestKit.assertThrows(NullPointerException.class,
- "message",
- () -> ws.sendText((Stream<? extends CharSequence>) null))
+ () -> ws.sendText(null))
);
checkAndClose(
(ws) ->
@@ -214,17 +201,7 @@
// FIXME: check timeout works
// (i.e. it directly influences the time WebSocket waits for connection + opening handshake)
TestKit.assertNotThrows(
- () -> WebSocket.newBuilder(ws, defaultListener()).connectTimeout(1, TimeUnit.SECONDS)
- );
- WebSocket.Builder builder = WebSocket.newBuilder(ws, defaultListener());
- TestKit.assertThrows(IllegalArgumentException.class,
- "(?i).*\\bnegative\\b.*",
- () -> builder.connectTimeout(-1, TimeUnit.SECONDS)
- );
- WebSocket.Builder builder1 = WebSocket.newBuilder(ws, defaultListener());
- TestKit.assertThrows(NullPointerException.class,
- "unit",
- () -> builder1.connectTimeout(1, null)
+ () -> WebSocket.newBuilder(ws, defaultListener()).connectTimeout(Duration.ofSeconds(1))
);
// FIXME: check these headers are actually received by the server
TestKit.assertNotThrows(
--- a/jdk/test/java/net/httpclient/http2/java.httpclient/sun/net/httpclient/hpack/DecoderTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/java/net/httpclient/http2/java.httpclient/sun/net/httpclient/hpack/DecoderTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -27,14 +27,20 @@
import java.io.UncheckedIOException;
import java.net.ProtocolException;
import java.nio.ByteBuffer;
+import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
+import java.util.function.Supplier;
import java.util.stream.Collectors;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static sun.net.httpclient.hpack.TestHelper.*;
+//
+// Tests whose names start with "testX" are the ones captured from real HPACK
+// use cases
+//
public final class DecoderTest {
//
@@ -138,6 +144,23 @@
// @formatter:on
}
+ @Test
+ public void example5AllSplits() {
+ // @formatter:off
+ testAllSplits(
+ "8286 8441 0f77 7777 2e65 7861 6d70 6c65\n" +
+ "2e63 6f6d",
+
+ "[ 1] (s = 57) :authority: www.example.com\n" +
+ " Table size: 57",
+
+ ":method: GET\n" +
+ ":scheme: http\n" +
+ ":path: /\n" +
+ ":authority: www.example.com");
+ // @formatter:on
+ }
+
//
// http://tools.ietf.org/html/rfc7541#appendix-C.4
//
@@ -334,6 +357,45 @@
// @formatter:on
}
+ @Test
+ public void testX1() {
+ // Supplier of a decoder with a particular state
+ Supplier<Decoder> s = () -> {
+ Decoder d = new Decoder(4096);
+ // @formatter:off
+ test(d, "88 76 92 ca 54 a7 d7 f4 fa ec af ed 6d da 61 d7 bb 1e ad ff" +
+ "df 61 97 c3 61 be 94 13 4a 65 b6 a5 04 00 b8 a0 5a b8 db 77" +
+ "1b 71 4c 5a 37 ff 0f 0d 84 08 00 00 03",
+
+ "[ 1] (s = 65) date: Fri, 24 Jun 2016 14:55:56 GMT\n" +
+ "[ 2] (s = 59) server: Jetty(9.3.z-SNAPSHOT)\n" +
+ " Table size: 124",
+
+ ":status: 200\n" +
+ "server: Jetty(9.3.z-SNAPSHOT)\n" +
+ "date: Fri, 24 Jun 2016 14:55:56 GMT\n" +
+ "content-length: 100000"
+ );
+ // @formatter:on
+ return d;
+ };
+ // For all splits of the following data fed to the supplied decoder we
+ // must get what's expected
+ // @formatter:off
+ testAllSplits(s,
+ "88 bf be 0f 0d 84 08 00 00 03",
+
+ "[ 1] (s = 65) date: Fri, 24 Jun 2016 14:55:56 GMT\n" +
+ "[ 2] (s = 59) server: Jetty(9.3.z-SNAPSHOT)\n" +
+ " Table size: 124",
+
+ ":status: 200\n" +
+ "server: Jetty(9.3.z-SNAPSHOT)\n" +
+ "date: Fri, 24 Jun 2016 14:55:56 GMT\n" +
+ "content-length: 100000");
+ // @formatter:on
+ }
+
//
// This test is missing in the spec
//
@@ -567,6 +629,38 @@
test(new Decoder(4096), hexdump, headerTable, headerList);
}
+ private static void testAllSplits(String hexdump,
+ String expectedHeaderTable,
+ String expectedHeaderList) {
+ testAllSplits(() -> new Decoder(256), hexdump, expectedHeaderTable, expectedHeaderList);
+ }
+
+ private static void testAllSplits(Supplier<Decoder> supplier, String hexdump,
+ String expectedHeaderTable, String expectedHeaderList) {
+ ByteBuffer source = SpecHelper.toBytes(hexdump);
+
+ BuffersTestingKit.forEachSplit(source, iterable -> {
+ List<String> actual = new LinkedList<>();
+ Iterator<? extends ByteBuffer> i = iterable.iterator();
+ if (!i.hasNext()) {
+ return;
+ }
+ Decoder d = supplier.get();
+ do {
+ ByteBuffer n = i.next();
+ d.decode(n, !i.hasNext(), (name, value) -> {
+ if (value == null) {
+ actual.add(name.toString());
+ } else {
+ actual.add(name + ": " + value);
+ }
+ });
+ } while (i.hasNext());
+ assertEquals(d.getTable().getStateString(), expectedHeaderTable);
+ assertEquals(actual.stream().collect(Collectors.joining("\n")), expectedHeaderList);
+ });
+ }
+
//
// Sometimes we need to keep the same decoder along several runs,
// as it models the same connection
--- a/jdk/test/java/net/httpclient/http2/java.httpclient/sun/net/httpclient/hpack/EncoderTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/java/net/httpclient/http2/java.httpclient/sun/net/httpclient/hpack/EncoderTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -24,17 +24,23 @@
import org.testng.annotations.Test;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedList;
import java.util.List;
+import java.util.function.Consumer;
import java.util.function.Function;
+import static sun.net.httpclient.hpack.BuffersTestingKit.concat;
+import static sun.net.httpclient.hpack.BuffersTestingKit.forEachSplit;
+import static sun.net.httpclient.hpack.SpecHelper.toHexdump;
+import static sun.net.httpclient.hpack.TestHelper.assertVoidThrows;
import static java.util.Arrays.asList;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
-import static sun.net.httpclient.hpack.SpecHelper.toHexdump;
-import static sun.net.httpclient.hpack.TestHelper.assertVoidThrows;
// TODO: map textual representation of commands from the spec to actual
// calls to encoder (actually, this is a good idea for decoder as well)
@@ -198,6 +204,61 @@
// @formatter:on
}
+ @Test
+ public void example5AllSplits() {
+
+ List<Consumer<Encoder>> actions = new LinkedList<>();
+ actions.add(e -> e.indexed(2));
+ actions.add(e -> e.indexed(6));
+ actions.add(e -> e.indexed(4));
+ actions.add(e -> e.literalWithIndexing(1, "www.example.com", false));
+
+ encodeAllSplits(
+ actions,
+
+ "8286 8441 0f77 7777 2e65 7861 6d70 6c65\n" +
+ "2e63 6f6d",
+
+ "[ 1] (s = 57) :authority: www.example.com\n" +
+ " Table size: 57");
+ }
+
+ private static void encodeAllSplits(Iterable<Consumer<Encoder>> consumers,
+ String expectedHexdump,
+ String expectedTableState) {
+ ByteBuffer buffer = SpecHelper.toBytes(expectedHexdump);
+ erase(buffer); // Zeroed buffer of size needed to hold the encoding
+ forEachSplit(buffer, iterable -> {
+ List<ByteBuffer> copy = new LinkedList<>();
+ iterable.forEach(b -> copy.add(ByteBuffer.allocate(b.remaining())));
+ Iterator<ByteBuffer> output = copy.iterator();
+ if (!output.hasNext()) {
+ throw new IllegalStateException("No buffers to encode to");
+ }
+ Encoder e = newCustomEncoder(256); // FIXME: pull up (as a parameter)
+ drainInitialUpdate(e);
+ boolean encoded;
+ ByteBuffer b = output.next();
+ for (Consumer<Encoder> c : consumers) {
+ c.accept(e);
+ do {
+ encoded = e.encode(b);
+ if (!encoded) {
+ if (output.hasNext()) {
+ b = output.next();
+ } else {
+ throw new IllegalStateException("No room for encoding");
+ }
+ }
+ }
+ while (!encoded);
+ }
+ copy.forEach(Buffer::flip);
+ ByteBuffer data = concat(copy);
+ test(e, data, expectedHexdump, expectedTableState);
+ });
+ }
+
//
// http://tools.ietf.org/html/rfc7541#appendix-C.4
//
@@ -620,4 +681,12 @@
b.flip();
} while (!done);
}
+
+ private static void erase(ByteBuffer buffer) {
+ buffer.clear();
+ while (buffer.hasRemaining()) {
+ buffer.put((byte) 0);
+ }
+ buffer.clear();
+ }
}
--- a/jdk/test/java/nio/file/WatchService/DeleteInterference.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/java/nio/file/WatchService/DeleteInterference.java Fri Jul 01 16:55:44 2016 -0700
@@ -49,7 +49,7 @@
* directory.
*/
public static void main(String[] args) throws Exception {
- Path dir = Files.createTempDirectory("work");
+ Path dir = Files.createTempDirectory("DeleteInterference");
ExecutorService pool = Executors.newCachedThreadPool();
try {
Future<?> task1 = pool.submit(() -> openAndCloseWatcher(dir));
--- a/jdk/test/java/nio/file/WatchService/LotsOfCancels.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/java/nio/file/WatchService/LotsOfCancels.java Fri Jul 01 16:55:44 2016 -0700
@@ -50,7 +50,7 @@
// one to bash on cancel, the other to poll the events
ExecutorService pool = Executors.newCachedThreadPool();
try {
- Path top = Files.createTempDirectory("work");
+ Path top = Files.createTempDirectory("LotsOfCancels");
top.toFile().deleteOnExit();
for (int i=1; i<=16; i++) {
Path dir = Files.createDirectory(top.resolve("dir-" + i));
--- a/jdk/test/java/util/Formatter/FormatLocale.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/java/util/Formatter/FormatLocale.java Fri Jul 01 16:55:44 2016 -0700
@@ -23,17 +23,22 @@
/**
* @test
- * @bug 8146156
+ * @bug 8146156 8159548
* @summary test whether uppercasing follows Locale.Category.FORMAT locale.
* @run main/othervm FormatLocale
*/
import java.time.LocalDate;
+import java.time.ZonedDateTime;
+import java.time.ZoneId;
import java.time.Month;
+import java.util.Calendar;
import java.util.Formatter;
+import java.util.GregorianCalendar;
import java.util.List;
import java.util.Locale;
import java.util.Locale.Category;
+import java.util.TimeZone;
import java.util.stream.IntStream;
public class FormatLocale {
@@ -61,7 +66,7 @@
"N\u0130SAN",
"1,00000E+08");
- public static void main(String [] args) {
+ static void formatLocaleTest() {
StringBuilder sb = new StringBuilder();
IntStream.range(0, src.size()).forEach(i -> {
@@ -79,4 +84,44 @@
}
});
}
+
+ static void nullLocaleTest() {
+ String fmt = "%1$ta %1$tA %1$th %1$tB %1tZ";
+ String expected = "Fri Friday Jan January PST";
+ StringBuilder sb = new StringBuilder();
+ Locale orig = Locale.getDefault();
+
+ try {
+ Locale.setDefault(Locale.JAPAN);
+ Formatter f = new Formatter(sb, (Locale)null);
+ ZoneId zid = ZoneId.of("America/Los_Angeles");
+ Calendar c = new GregorianCalendar(TimeZone.getTimeZone(zid), Locale.US);
+ c.set(2016, 0, 1, 0, 0, 0);
+ f.format(fmt, c);
+ if (!sb.toString().equals(expected)) {
+ throw new RuntimeException(
+ "Localized text returned with null locale.\n" +
+ " expected: " + expected + "\n" +
+ " returned: " + sb.toString());
+ }
+
+ sb.setLength(0);
+ ZonedDateTime zdt = ZonedDateTime.of(2016, 1, 1, 0, 0, 0, 0, zid);
+ f.format(fmt, zdt);
+
+ if (!sb.toString().equals(expected)) {
+ throw new RuntimeException(
+ "Localized text returned with null locale.\n" +
+ " expected: " + expected + "\n" +
+ " returned: " + sb.toString());
+ }
+ } finally {
+ Locale.setDefault(orig);
+ }
+ }
+
+ public static void main(String [] args) {
+ formatLocaleTest();
+ nullLocaleTest();
+ }
}
--- a/jdk/test/java/util/Scanner/ScanTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/java/util/Scanner/ScanTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -24,7 +24,7 @@
/**
* @test
* @bug 4313885 4926319 4927634 5032610 5032622 5049968 5059533 6223711 6277261 6269946 6288823
- * 8072722 8072582 8139414
+ * 8072722 8139414
* @summary Basic tests of java.util.Scanner methods
* @key randomness
* @modules jdk.localedata
@@ -512,27 +512,9 @@
}
public static void boundaryDelimTest() throws Exception {
- // 8072582
- StringBuilder sb = new StringBuilder();
- append(sb, 'a', 228); sb.append(",");
- append(sb, 'b', 293); sb.append("#,#");
- append(sb, 'c', 308); sb.append(",");
- append(sb, 'd', 188); sb.append("#,#");
- append(sb, 'e', 2);
- try (Scanner scanner = new Scanner(sb.toString())) {
- scanner.useDelimiter("(#,#)|(,)");
- while(scanner.hasNext()){
- String next = scanner.next();
- if(next.contains("#")){
- System.out.printf("[%s]%n", next);
- failCount++;
- }
- }
- }
-
// 8139414
int i = 1019;
- sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
sb.append("--;");
for (int j = 0; j < 1019; ++j) {
sb.append(j%10);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/logging/FileHandlerMaxLocksTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,114 @@
+/*
+ * 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 8153955
+ * @summary test the FileHandler's new property
+ * "java.util.logging.FileHandler.maxLocks" which will be present in
+ * "logging.properties" file with default value of 100. This property can be
+ * overriden by specifying this property in the custom config file.
+ * @library /lib/testlibrary
+ * @build jdk.testlibrary.FileUtils
+ * @author rpatil
+ * @run main/othervm FileHandlerMaxLocksTest
+ */
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.FileHandler;
+import jdk.testlibrary.FileUtils;
+
+public class FileHandlerMaxLocksTest {
+
+ private static final String LOGGER_DIR = "logger-dir";
+ private static final String MAX_LOCK_PROPERTY = "java.util.logging.FileHandler.maxLocks = 200";
+ private static final String CONFIG_FILE_NAME = "logging.properties";
+
+ public static void main(String[] args) throws Exception {
+ File loggerDir = createLoggerDir();
+ String configFilePath = loggerDir.getPath() + File.separator + CONFIG_FILE_NAME;
+ File configFile = new File(configFilePath);
+ createFile(configFile, false);
+ System.setProperty("java.util.logging.config.file", configFilePath);
+ List<FileHandler> fileHandlers = new ArrayList<>();
+ try (FileWriter writer = new FileWriter(configFile)) {
+ writer.write(MAX_LOCK_PROPERTY);
+ writer.flush();
+ // 200 raises the default limit of 100, we try 102 times
+ for (int i = 0; i < 102; i++) {
+ fileHandlers.add(new FileHandler(loggerDir.getPath() + File.separator + "test_%u.log"));
+ }
+ } catch (IOException ie) {
+ throw new RuntimeException("Test Failed: " + ie.getMessage());
+ } finally {
+ for (FileHandler fh : fileHandlers) {
+ fh.close();
+ }
+ FileUtils.deleteFileTreeWithRetry(Paths.get(loggerDir.getPath()));
+ }
+ }
+
+ /**
+ * Create a writable directory in user directory for the test
+ *
+ * @return writable directory created that needs to be deleted when done
+ * @throws RuntimeException
+ */
+ private static File createLoggerDir() throws RuntimeException {
+ String userDir = System.getProperty("user.dir", ".");
+ File loggerDir = new File(userDir, LOGGER_DIR);
+ if (!createFile(loggerDir, true)) {
+ throw new RuntimeException("Test failed: unable to create"
+ + " writable working directory "
+ + loggerDir.getAbsolutePath());
+ }
+ // System.out.println("Created Logger Directory: " + loggerDir.getPath());
+ return loggerDir;
+ }
+
+ /**
+ * @param newFile File to be created
+ * @param makeDirectory is File to be created is directory
+ * @return true if file already exists or creation succeeded
+ */
+ private static boolean createFile(File newFile, boolean makeDirectory) {
+ if (newFile.exists()) {
+ return true;
+ }
+ if (makeDirectory) {
+ return newFile.mkdir();
+ } else {
+ try {
+ return newFile.createNewFile();
+ } catch (IOException ie) {
+ System.err.println("Not able to create file: " + newFile
+ + ", IOException: " + ie.getMessage());
+ return false;
+ }
+ }
+ }
+}
--- a/jdk/test/java/util/zip/ZipFile/ReadZip.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/java/util/zip/ZipFile/ReadZip.java Fri Jul 01 16:55:44 2016 -0700
@@ -22,7 +22,7 @@
*/
/* @test
- @bug 4241361 4842702 4985614 6646605 5032358 6923692
+ @bug 4241361 4842702 4985614 6646605 5032358 6923692 6233323 8144977
@summary Make sure we can read a zip file.
@key randomness
*/
@@ -105,6 +105,40 @@
newZip.delete();
}
+ // Read directory entry
+ try {
+ try (FileOutputStream fos = new FileOutputStream(newZip);
+ ZipOutputStream zos = new ZipOutputStream(fos))
+ {
+ ZipEntry ze = new ZipEntry("directory/");
+ zos.putNextEntry(ze);
+ zos.closeEntry();
+ }
+ try (ZipFile zf = new ZipFile(newZip)) {
+ ZipEntry ze = zf.getEntry("directory/");
+ if (ze == null || !ze.isDirectory())
+ throw new RuntimeException("read entry \"directory/\" failed");
+ try (InputStream is = zf.getInputStream(ze)) {
+ is.available();
+ } catch (Exception x) {
+ x.printStackTrace();
+ }
+
+ ze = zf.getEntry("directory");
+ if (ze == null || !ze.isDirectory())
+ throw new RuntimeException("read entry \"directory\" failed");
+ try (InputStream is = zf.getInputStream(ze)) {
+ is.available();
+ } catch (Exception x) {
+ x.printStackTrace();
+ }
+ }
+ } finally {
+ newZip.delete();
+ }
+
+
+
// Throw a FNF exception when read a non-existing zip file
try { unreached (new ZipFile(
new File(System.getProperty("test.src", "."),
--- a/jdk/test/javax/net/ssl/DTLS/WeakCipherSuite.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/javax/net/ssl/DTLS/WeakCipherSuite.java Fri Jul 01 16:55:44 2016 -0700
@@ -27,7 +27,6 @@
/*
* @test
* @bug 8043758
- * @key intermittent
* @summary Datagram Transport Layer Security (DTLS)
* @modules java.base/sun.security.util
* @build DTLSOverDatagram
--- a/jdk/test/javax/net/ssl/Stapling/SSLSocketWithStapling.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/javax/net/ssl/Stapling/SSLSocketWithStapling.java Fri Jul 01 16:55:44 2016 -0700
@@ -510,25 +510,27 @@
sslc.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
SSLServerSocketFactory sslssf = sslc.getServerSocketFactory();
- SSLServerSocket sslServerSocket =
- (SSLServerSocket) sslssf.createServerSocket(serverPort);
- serverPort = sslServerSocket.getLocalPort();
+ try (SSLServerSocket sslServerSocket =
+ (SSLServerSocket) sslssf.createServerSocket(serverPort)) {
- /*
- * Signal Client, we're ready for his connect.
- */
- serverReady = true;
+ serverPort = sslServerSocket.getLocalPort();
+
+ /*
+ * Signal Client, we're ready for his connect.
+ */
+ serverReady = true;
- try (SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept();
- InputStream sslIS = sslSocket.getInputStream();
- OutputStream sslOS = sslSocket.getOutputStream()) {
- int numberIn = sslIS.read();
- int numberSent = 85;
- log("Server received number: " + numberIn);
- sslOS.write(numberSent);
- sslOS.flush();
- log("Server sent number: " + numberSent);
+ try (SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept();
+ InputStream sslIS = sslSocket.getInputStream();
+ OutputStream sslOS = sslSocket.getOutputStream()) {
+ int numberIn = sslIS.read();
+ int numberSent = 85;
+ log("Server received number: " + numberIn);
+ sslOS.write(numberSent);
+ sslOS.flush();
+ log("Server sent number: " + numberSent);
+ }
}
}
--- a/jdk/test/javax/net/ssl/TLS/CipherTestUtils.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/javax/net/ssl/TLS/CipherTestUtils.java Fri Jul 01 16:55:44 2016 -0700
@@ -1,4 +1,4 @@
-/**
+/*
* Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
@@ -73,6 +73,7 @@
private static final List<TestParameters> TESTS = new ArrayList<>(3);
private static final List<Exception> EXCEPTIONS
= Collections.synchronizedList(new ArrayList<>(1));
+
private static final String CLIENT_PUBLIC_KEY
= "-----BEGIN CERTIFICATE-----\n"
+ "MIICtTCCAh4CCQDkYJ46DMcGRjANBgkqhkiG9w0BAQUFADCBnDELMAkGA1UEBhMC\n"
@@ -191,7 +192,7 @@
private final X509TrustManager clientTrustManager;
private final X509TrustManager serverTrustManager;
- static abstract class Server implements Runnable {
+ static abstract class Server implements Runnable, AutoCloseable {
final CipherTestUtils cipherTest;
@@ -240,12 +241,11 @@
public static class TestParameters {
- String cipherSuite;
- String protocol;
- String clientAuth;
+ final String cipherSuite;
+ final String protocol;
+ final String clientAuth;
- TestParameters(String cipherSuite, String protocol,
- String clientAuth) {
+ TestParameters(String cipherSuite, String protocol, String clientAuth) {
this.cipherSuite = cipherSuite;
this.protocol = protocol;
this.clientAuth = clientAuth;
@@ -267,10 +267,7 @@
private static volatile CipherTestUtils instance = null;
- public static CipherTestUtils getInstance() throws IOException,
- FileNotFoundException, KeyStoreException,
- NoSuchAlgorithmException, CertificateException,
- UnrecoverableKeyException, InvalidKeySpecException {
+ public static CipherTestUtils getInstance() throws Exception {
if (instance == null) {
synchronized (CipherTestUtils.class) {
if (instance == null) {
@@ -281,21 +278,10 @@
return instance;
}
- public static void setTestedArguments(String testedProtocol,
- String testedCipherSuite) {
-
- TestParameters testedParams;
-
- String cipherSuite = testedCipherSuite.trim();
- if (cipherSuite.startsWith("SSL_")) {
- testedParams =
- new TestParameters(cipherSuite, testedProtocol, null);
- TESTS.add(testedParams);
-
- } else {
- System.out.println("Your input Cipher suites is not correct, "
- + "please try another one .");
- }
+ public static void setTestedArguments(String protocol, String ciphersuite) {
+ ciphersuite = ciphersuite.trim();
+ TestParameters params = new TestParameters(ciphersuite, protocol, null);
+ TESTS.add(params);
}
public X509ExtendedKeyManager getClientKeyManager() {
@@ -318,10 +304,7 @@
EXCEPTIONS.add(e);
}
- private CipherTestUtils()
- throws IOException, FileNotFoundException, KeyStoreException,
- NoSuchAlgorithmException, CertificateException,
- UnrecoverableKeyException, InvalidKeySpecException {
+ private CipherTestUtils() throws Exception {
factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
KeyStore serverKeyStore = createServerKeyStore(SERVER_PUBLIC_KEY,
SERVER_PRIVATE_KEY);
@@ -329,12 +312,11 @@
CA_PRIVATE_KEY);
if (serverKeyStore != null) {
- KeyManagerFactory keyFactory1
- = KeyManagerFactory.getInstance(
+ KeyManagerFactory keyFactory = KeyManagerFactory.getInstance(
KeyManagerFactory.getDefaultAlgorithm());
- keyFactory1.init(serverKeyStore, PASSWORD);
- serverKeyManager = (X509ExtendedKeyManager) keyFactory1.
- getKeyManagers()[0];
+ keyFactory.init(serverKeyStore, PASSWORD);
+ serverKeyManager = (X509ExtendedKeyManager)
+ keyFactory.getKeyManagers()[0];
} else {
serverKeyManager = null;
}
@@ -346,12 +328,11 @@
clientKeyStore =
createServerKeyStore(CLIENT_PUBLIC_KEY,CLIENT_PRIVATE_KEY);
if (clientKeyStore != null) {
- KeyManagerFactory keyFactory
- = KeyManagerFactory.getInstance(
+ KeyManagerFactory keyFactory = KeyManagerFactory.getInstance(
KeyManagerFactory.getDefaultAlgorithm());
keyFactory.init(clientKeyStore, PASSWORD);
- clientKeyManager = (X509ExtendedKeyManager) keyFactory.
- getKeyManagers()[0];
+ clientKeyManager = (X509ExtendedKeyManager)
+ keyFactory.getKeyManagers()[0];
} else {
clientKeyManager = null;
}
@@ -395,8 +376,8 @@
this.cipherTest = cipherTest;
}
- Client(CipherTestUtils cipherTest,
- String testedCipherSuite) throws Exception {
+ Client(CipherTestUtils cipherTest, String testedCipherSuite)
+ throws Exception {
this.cipherTest = cipherTest;
}
@@ -417,7 +398,7 @@
CipherTestUtils.addFailure(e);
System.out.println("** Failed " + params
+ "**, got exception:");
- e.printStackTrace(System.err);
+ e.printStackTrace(System.out);
}
});
}
@@ -448,11 +429,7 @@
}
public static void printStringArray(String[] stringArray) {
- System.out.print(stringArray.length + " : ");
- for (String stringArray1 : stringArray) {
- System.out.print(stringArray1);
- System.out.print(",");
- }
+ System.out.println(Arrays.toString(stringArray));
System.out.println();
}
@@ -496,15 +473,15 @@
System.out.println("-----------------------");
}
- private static KeyStore createServerKeyStore(String publicKeyStr,
+ private static KeyStore createServerKeyStore(String publicKey,
String keySpecStr) throws KeyStoreException, IOException,
NoSuchAlgorithmException, CertificateException,
InvalidKeySpecException {
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(null, null);
- if (publicKeyStr == null || keySpecStr == null) {
- throw new IllegalArgumentException("publicKeyStr or "
+ if (publicKey == null || keySpecStr == null) {
+ throw new IllegalArgumentException("publicKey or "
+ "keySpecStr cannot be null");
}
String strippedPrivateKey = keySpecStr.substring(
@@ -518,8 +495,7 @@
= (RSAPrivateKey) kf.generatePrivate(priKeySpec);
// generate certificate chain
- try (InputStream is =
- new ByteArrayInputStream(publicKeyStr.getBytes())) {
+ try (InputStream is = new ByteArrayInputStream(publicKey.getBytes())) {
// generate certificate from cert string
CertificateFactory cf = CertificateFactory.getInstance("X.509");
Certificate keyCert = cf.generateCertificate(is);
@@ -530,10 +506,9 @@
return ks;
}
- public static int mainServer(PeerFactory peerFactory,
+ public static Server mainServer(PeerFactory peerFactory,
String expectedException) throws Exception {
- long time = System.currentTimeMillis();
setTestedArguments(peerFactory.getTestedProtocol(),
peerFactory.getTestedCipher());
@@ -542,14 +517,11 @@
secureRandom.nextInt();
CipherTestUtils cipherTest = CipherTestUtils.getInstance();
- Server server = peerFactory.newServer(cipherTest, PeerFactory.FREE_PORT);
- Thread serverThread = new Thread(server, "Server");
+ Server srv = peerFactory.newServer(cipherTest, PeerFactory.FREE_PORT);
+ Thread serverThread = new Thread(srv, "Server");
serverThread.start();
- time = System.currentTimeMillis() - time;
- System.out.println("Elapsed time " + time);
-
- return server.getPort();
+ return srv;
}
public static void mainClient(PeerFactory peerFactory, int port,
@@ -566,7 +538,6 @@
CipherTestUtils cipherTest = CipherTestUtils.getInstance();
peerFactory.newClient(cipherTest, port).run();
cipherTest.checkResult(expectedException);
- JSSEServer.closeServer = true;
time = System.currentTimeMillis() - time;
System.out.println("Elapsed time " + time);
@@ -582,9 +553,11 @@
abstract String getTestedCipher();
- abstract Client newClient(CipherTestUtils cipherTest, int testPort) throws Exception;
+ abstract Client newClient(CipherTestUtils cipherTest, int testPort)
+ throws Exception;
- abstract Server newServer(CipherTestUtils cipherTest, int testPort) throws Exception;
+ abstract Server newServer(CipherTestUtils cipherTest, int testPort)
+ throws Exception;
boolean isSupported(String cipherSuite) {
return true;
@@ -618,7 +591,7 @@
try {
trustManager.checkClientTrusted(chain, authType);
} catch (CertificateException excep) {
- System.out.println("ERROR in client trust manager");
+ System.out.println("ERROR in client trust manager: " + excep);
}
}
@@ -628,7 +601,7 @@
try {
trustManager.checkServerTrusted(chain, authType);
} catch (CertificateException excep) {
- System.out.println("ERROR in server Trust manger");
+ System.out.println("ERROR in server trust manager: " + excep);
}
}
--- a/jdk/test/javax/net/ssl/TLS/JSSEClient.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/javax/net/ssl/TLS/JSSEClient.java Fri Jul 01 16:55:44 2016 -0700
@@ -1,5 +1,5 @@
-/**
- * Copyright (c) 2010, 2014, 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 under
@@ -35,39 +35,37 @@
private static final String DEFAULT = "DEFAULT";
private static final String TLS = "TLS";
- private final SSLContext sslContext;
+ private final SSLContext context;
private final MyX509KeyManager keyManager;
- private final int serverPort;
- private final String serverHost;
- private final String testedProtocol;
+ private final int port;
+ private final String host;
+ private final String protocol;
- JSSEClient(CipherTestUtils cipherTest, String serverHost, int serverPort,
- String testedProtocols, String testedCipherSuite) throws Exception {
- super(cipherTest, testedCipherSuite);
- this.serverHost = serverHost;
- this.serverPort = serverPort;
- this.testedProtocol = testedProtocols;
- this.keyManager =
- new MyX509KeyManager(cipherTest.getClientKeyManager());
- sslContext = SSLContext.getInstance(TLS);
+ JSSEClient(CipherTestUtils cipherTest, String host, int port,
+ String protocols, String ciphersuite) throws Exception {
+ super(cipherTest, ciphersuite);
+ this.host = host;
+ this.port = port;
+ this.protocol = protocols;
+ this.keyManager = new MyX509KeyManager(
+ cipherTest.getClientKeyManager());
+ context = SSLContext.getInstance(TLS);
}
@Override
void runTest(CipherTestUtils.TestParameters params) throws Exception {
- SSLSocket socket = null;
- try {
- System.out.println("Connecting to server...");
- keyManager.setAuthType(params.clientAuth);
- sslContext.init(new KeyManager[]{keyManager},
- new TrustManager[]{cipherTest.getClientTrustManager()},
- CipherTestUtils.secureRandom);
- SSLSocketFactory factory = (SSLSocketFactory) sslContext.
- getSocketFactory();
- socket = (SSLSocket) factory.createSocket(serverHost,
- serverPort);
+ keyManager.setAuthType(params.clientAuth);
+ context.init(
+ new KeyManager[]{ keyManager },
+ new TrustManager[]{ cipherTest.getClientTrustManager() },
+ CipherTestUtils.secureRandom);
+ SSLSocketFactory factory = (SSLSocketFactory)context.getSocketFactory();
+
+ System.out.println("Connecting to server...");
+ try (SSLSocket socket = (SSLSocket) factory.createSocket(host, port)) {
socket.setSoTimeout(CipherTestUtils.TIMEOUT);
socket.setEnabledCipherSuites(params.cipherSuite.split(","));
- if (params.protocol != null && !params.protocol.trim().equals("")
+ if (params.protocol != null && !params.protocol.trim().isEmpty()
&& !params.protocol.trim().equals(DEFAULT)) {
socket.setEnabledProtocols(params.protocol.split(","));
}
@@ -105,16 +103,11 @@
if ("EC".equals(keyAlg)) {
keyAlg = "ECDSA";
}
- if (params.clientAuth == null ? keyAlg != null
- : !params.clientAuth.equals(keyAlg)) {
+ if (!params.clientAuth.equals(keyAlg)) {
throw new RuntimeException("Certificate type mismatch: "
+ keyAlg + " != " + params.clientAuth);
}
}
- } finally {
- if (socket != null) {
- socket.close();
- }
}
}
}
--- a/jdk/test/javax/net/ssl/TLS/JSSEServer.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/javax/net/ssl/TLS/JSSEServer.java Fri Jul 01 16:55:44 2016 -0700
@@ -1,4 +1,4 @@
-/**
+/*
* Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
@@ -33,13 +33,11 @@
public class JSSEServer extends CipherTestUtils.Server {
private final SSLServerSocket serverSocket;
- private final int serverPort;
- static volatile boolean closeServer = false;
+ private static volatile boolean closeServer = false;
JSSEServer(CipherTestUtils cipherTest, int serverPort,
String protocol, String cipherSuite) throws Exception {
super(cipherTest);
- this.serverPort = serverPort;
SSLContext serverContext = SSLContext.getInstance("TLS");
serverContext.init(new KeyManager[]{cipherTest.getServerKeyManager()},
new TrustManager[]{cipherTest.getServerTrustManager()},
@@ -56,7 +54,7 @@
@Override
public void run() {
- System.out.println("JSSE Server listening on port " + serverPort);
+ System.out.println("JSSE Server listening on port " + getPort());
while (!closeServer) {
try (final SSLSocket socket = (SSLSocket) serverSocket.accept()) {
socket.setSoTimeout(CipherTestUtils.TIMEOUT);
@@ -68,12 +66,12 @@
} catch (IOException e) {
CipherTestUtils.addFailure(e);
System.out.println("Got IOException:");
- e.printStackTrace(System.err);
+ e.printStackTrace(System.out);
}
} catch (Exception e) {
CipherTestUtils.addFailure(e);
System.out.println("Exception:");
- e.printStackTrace(System.err);
+ e.printStackTrace(System.out);
}
}
}
@@ -81,4 +79,12 @@
int getPort() {
return serverSocket.getLocalPort();
}
+
+ @Override
+ public void close() throws IOException {
+ closeServer = true;
+ if (serverSocket != null && !serverSocket.isClosed()) {
+ serverSocket.close();
+ }
+ }
}
--- a/jdk/test/javax/net/ssl/TLS/TestJSSE.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/javax/net/ssl/TLS/TestJSSE.java Fri Jul 01 16:55:44 2016 -0700
@@ -1,4 +1,4 @@
-/**
+/*
* Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
@@ -20,59 +20,9 @@
* questions.
*/
-import static java.lang.System.out;
import java.security.Provider;
import java.security.Security;
-/**
- * @test
- * @bug 8049429
- * @modules java.management
- * jdk.crypto.ec/sun.security.ec
- * @compile CipherTestUtils.java JSSEClient.java JSSEServer.java
- * @summary Test that all cipher suites work in all versions and all client
- * authentication types. The way this is setup the server is stateless and
- * all checking is done on the client side.
- * @run main/othervm -DSERVER_PROTOCOL=SSLv3
- * -DCLIENT_PROTOCOL=SSLv3
- * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5 TestJSSE
- * @run main/othervm -DSERVER_PROTOCOL=TLSv1
- * -DCLIENT_PROTOCOL=SSLv3,TLSv1,TLSv1.1,TLSv1.2
- * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5 TestJSSE
- * @run main/othervm -DSERVER_PROTOCOL=TLSv1.1
- * -DCLIENT_PROTOCOL=SSLv3,TLSv1,TLSv1.1,TLSv1.2
- * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5 TestJSSE
- * @run main/othervm -DSERVER_PROTOCOL=TLSv1.2
- * -DCLIENT_PROTOCOL=SSLv3,TLSv1,TLSv1.1,TLSv1.2
- * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5 TestJSSE
- * @run main/othervm -DSERVER_PROTOCOL=SSLv3,TLSv1
- * -DCLIENT_PROTOCOL=TLSv1 -DCIPHER=SSL_RSA_WITH_RC4_128_MD5 TestJSSE
- * @run main/othervm -DSERVER_PROTOCOL=SSLv3,TLSv1,TLSv1.1
- * -DCLIENT_PROTOCOL=TLSv1.1 -DCIPHER=SSL_RSA_WITH_RC4_128_MD5 TestJSSE
- * @run main/othervm -DSERVER_PROTOCOL=SSLv3
- * -DCLIENT_PROTOCOL=TLSv1.1,TLSv1.2
- * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
- * TestJSSE javax.net.ssl.SSLHandshakeException
- * @run main/othervm -DSERVER_PROTOCOL=TLSv1
- * -DCLIENT_PROTOCOL=TLSv1.1,TLSv1.2
- * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
- * TestJSSE javax.net.ssl.SSLHandshakeException
- * @run main/othervm -DSERVER_PROTOCOL=SSLv3,TLSv1,TLSv1.1,TLSv1.2
- * -DCLIENT_PROTOCOL=TLSv1.2 -DCIPHER=SSL_RSA_WITH_RC4_128_MD5 TestJSSE
- * @run main/othervm -DSERVER_PROTOCOL=SSLv2Hello,SSLv3,TLSv1
- * -DCLIENT_PROTOCOL=DEFAULT -DCIPHER=SSL_RSA_WITH_RC4_128_MD5 TestJSSE
- * @run main/othervm -DSERVER_PROTOCOL=SSLv2Hello,SSLv3,TLSv1,TLSv1.1,TLSv1.2
- * -DCLIENT_PROTOCOL=DEFAULT -DCIPHER=SSL_RSA_WITH_RC4_128_MD5 TestJSSE
- * @run main/othervm -DSERVER_PROTOCOL=SSLv2Hello,SSLv3,TLSv1,TLSv1.1,TLSv1.2
- * -DCLIENT_PROTOCOL=DEFAULT -Djdk.tls.client.protocols=TLSv1
- * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5 TestJSSE
- * @run main/othervm -DSERVER_PROTOCOL=SSLv2Hello,SSLv3,TLSv1
- * -DCLIENT_PROTOCOL=DEFAULT -Djdk.tls.client.protocols=TLSv1.2
- * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
- * TestJSSE javax.net.ssl.SSLHandshakeException
- *
- */
-
public class TestJSSE {
private static final String LOCAL_IP = "127.0.0.1";
@@ -82,72 +32,64 @@
// and keys used in this test are not disabled.
Security.setProperty("jdk.tls.disabledAlgorithms", "");
- String serverProtocol = System.getProperty("SERVER_PROTOCOL");
- String clientProtocol = System.getProperty("CLIENT_PROTOCOL");
- String cipher = System.getProperty("CIPHER");
- if (serverProtocol == null
- || clientProtocol == null
- || cipher == null) {
- throw new IllegalArgumentException("SERVER_PROTOCOL "
- + "or CLIENT_PROTOCOL or CIPHER is missing");
- }
- out.println("ServerProtocol =" + serverProtocol);
- out.println("ClientProtocol =" + clientProtocol);
- out.println("Cipher =" + cipher);
- int port = server(serverProtocol, cipher, args);
- client(port, clientProtocol, cipher, args);
+ // enable debug output
+ System.setProperty("javax.net.debug", "ssl,record");
- }
+ String srvProtocol = System.getProperty("SERVER_PROTOCOL");
+ String clnProtocol = System.getProperty("CLIENT_PROTOCOL");
+ String cipher = System.getProperty("CIPHER");
+ if (srvProtocol == null || clnProtocol == null || cipher == null) {
+ throw new IllegalArgumentException("Incorrect parameters");
+ }
- public static void client(int testPort,
- String testProtocols, String testCipher,
- String... exception) throws Exception {
- String expectedException = exception.length >= 1
- ? exception[0] : null;
- out.println("=========================================");
- out.println(" Testing - https://" + LOCAL_IP + ":" + testPort);
- out.println(" Testing - Protocol : " + testProtocols);
- out.println(" Testing - Cipher : " + testCipher);
- try {
- CipherTestUtils.mainClient(new JSSEFactory(LOCAL_IP, testProtocols,
- testCipher, "Client JSSE"),
- testPort, expectedException);
- } catch (Exception e) {
- throw new RuntimeException(e);
+ System.out.println("ServerProtocol = " + srvProtocol);
+ System.out.println("ClientProtocol = " + clnProtocol);
+ System.out.println("Cipher = " + cipher);
+
+ try (CipherTestUtils.Server srv = server(srvProtocol, cipher, args)) {
+ client(srv.getPort(), clnProtocol, cipher, args);
}
}
- public static int server(String testProtocol, String testCipher,
- String... exception) throws Exception {
+ public static void client(int port, String protocols, String cipher,
+ String... exceptions) throws Exception {
- String expectedException = exception.length >= 1
- ? exception[0] : null;
- out.println(" This is Server");
- out.println(" Testing Protocol: " + testProtocol);
- out.println(" Testing Cipher: " + testCipher);
+ String expectedExcp = exceptions.length >= 1 ? exceptions[0] : null;
+
+ System.out.println("This is client");
+ System.out.println("Testing protocol: " + protocols);
+ System.out.println("Testing cipher : " + cipher);
- try {
- int port = CipherTestUtils.mainServer(new JSSEFactory(
- null, testProtocol, testCipher, "Server JSSE"),
- expectedException);
+ CipherTestUtils.mainClient(
+ new JSSEFactory(LOCAL_IP, protocols, cipher, "Client JSSE"),
+ port, expectedExcp);
+ }
+
+ public static CipherTestUtils.Server server(String protocol,
+ String cipher, String... exceptions) throws Exception {
- out.println(" Testing Port: " + port);
- return port;
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
+ String expectedExcp = exceptions.length >= 1 ? exceptions[0] : null;
+
+ System.out.println("This is server");
+ System.out.println("Testing protocol: " + protocol);
+ System.out.println("Testing cipher : " + cipher);
+
+ return CipherTestUtils.mainServer(
+ new JSSEFactory(null, protocol, cipher, "Server JSSE"),
+ expectedExcp);
}
private static class JSSEFactory extends CipherTestUtils.PeerFactory {
- final String testedCipherSuite, testedProtocol, testHost;
- final String name;
+ private final String cipher;
+ private final String protocol;
+ private final String host;
+ private final String name;
- JSSEFactory(String testHost, String testedProtocol,
- String testedCipherSuite, String name) {
- this.testedCipherSuite = testedCipherSuite;
- this.testedProtocol = testedProtocol;
- this.testHost = testHost;
+ JSSEFactory(String host, String protocol, String cipher, String name) {
+ this.cipher = cipher;
+ this.protocol = protocol;
+ this.host = host;
this.name = name;
}
@@ -158,26 +100,24 @@
@Override
String getTestedCipher() {
- return testedCipherSuite;
+ return cipher;
}
@Override
String getTestedProtocol() {
- return testedProtocol;
+ return protocol;
}
@Override
- CipherTestUtils.Client newClient(CipherTestUtils cipherTest, int testPort)
+ CipherTestUtils.Client newClient(CipherTestUtils cipherTest, int port)
throws Exception {
- return new JSSEClient(cipherTest, testHost, testPort,
- testedProtocol, testedCipherSuite);
+ return new JSSEClient(cipherTest, host, port, protocol, cipher);
}
@Override
- CipherTestUtils.Server newServer(CipherTestUtils cipherTest, int testPort)
+ CipherTestUtils.Server newServer(CipherTestUtils cipherTest, int port)
throws Exception {
- return new JSSEServer(cipherTest, testPort,
- testedProtocol, testedCipherSuite);
+ return new JSSEServer(cipherTest, port, protocol, cipher);
}
}
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLS/TestJSSEClientDefaultProtocol.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,54 @@
+/*
+ * 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 8049429
+ * @modules java.management
+ * jdk.crypto.ec/sun.security.ec
+ * @summary Test that all cipher suites work in all versions and all client
+ * authentication types. The way this is setup the server is stateless
+ * and all checking is done on the client side.
+ * @compile CipherTestUtils.java JSSEClient.java JSSEServer.java
+ * @run main/othervm
+ * -DSERVER_PROTOCOL=SSLv2Hello,SSLv3,TLSv1
+ * -DCLIENT_PROTOCOL=DEFAULT
+ * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
+ * TestJSSE
+ * @run main/othervm
+ * -DSERVER_PROTOCOL=SSLv2Hello,SSLv3,TLSv1,TLSv1.1,TLSv1.2
+ * -DCLIENT_PROTOCOL=DEFAULT
+ * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
+ * TestJSSE
+ * @run main/othervm
+ * -DSERVER_PROTOCOL=SSLv2Hello,SSLv3,TLSv1,TLSv1.1,TLSv1.2
+ * -DCLIENT_PROTOCOL=DEFAULT
+ * -Djdk.tls.client.protocols=TLSv1
+ * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
+ * TestJSSE
+ * @run main/othervm
+ * -DSERVER_PROTOCOL=SSLv2Hello,SSLv3,TLSv1
+ * -DCLIENT_PROTOCOL=DEFAULT
+ * -Djdk.tls.client.protocols=TLSv1.2
+ * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
+ * TestJSSE javax.net.ssl.SSLHandshakeException
+ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLS/TestJSSEClientProtocol.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,52 @@
+/*
+ * 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 8049429
+ * @modules java.management
+ * jdk.crypto.ec/sun.security.ec
+ * @summary Test that all cipher suites work in all versions and all client
+ * authentication types. The way this is setup the server is stateless
+ * and all checking is done on the client side.
+ * @compile CipherTestUtils.java JSSEClient.java JSSEServer.java
+ * @run main/othervm
+ * -DSERVER_PROTOCOL=SSLv3
+ * -DCLIENT_PROTOCOL=SSLv3
+ * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
+ * TestJSSE
+ * @run main/othervm
+ * -DSERVER_PROTOCOL=SSLv3,TLSv1
+ * -DCLIENT_PROTOCOL=TLSv1
+ * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
+ * TestJSSE
+ * @run main/othervm
+ * -DSERVER_PROTOCOL=SSLv3,TLSv1,TLSv1.1
+ * -DCLIENT_PROTOCOL=TLSv1.1
+ * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
+ * TestJSSE
+ * @run main/othervm
+ * -DSERVER_PROTOCOL=SSLv3,TLSv1,TLSv1.1,TLSv1.2
+ * -DCLIENT_PROTOCOL=TLSv1.2
+ * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
+ * TestJSSE
+ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLS/TestJSSENoCommonProtocols.java Fri Jul 01 16:55:44 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
+ * @bug 8049429
+ * @modules java.management
+ * jdk.crypto.ec/sun.security.ec
+ * @summary Test that all cipher suites work in all versions and all client
+ * authentication types. The way this is setup the server is stateless
+ * and all checking is done on the client side.
+ * @compile CipherTestUtils.java JSSEClient.java JSSEServer.java
+ * @run main/othervm
+ * -DSERVER_PROTOCOL=TLSv1
+ * -DCLIENT_PROTOCOL=TLSv1.1,TLSv1.2
+ * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
+ * TestJSSE javax.net.ssl.SSLHandshakeException
+ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLS/TestJSSEServerProtocol.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,52 @@
+/*
+ * 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 8049429
+ * @modules java.management
+ * jdk.crypto.ec/sun.security.ec
+ * @summary Test that all cipher suites work in all versions and all client
+ * authentication types. The way this is setup the server is stateless
+ * and all checking is done on the client side.
+ * @compile CipherTestUtils.java JSSEClient.java JSSEServer.java
+ * @run main/othervm
+ * -DSERVER_PROTOCOL=SSLv3
+ * -DCLIENT_PROTOCOL=TLSv1.1,TLSv1.2
+ * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
+ * TestJSSE javax.net.ssl.SSLHandshakeException
+ * @run main/othervm
+ * -DSERVER_PROTOCOL=TLSv1
+ * -DCLIENT_PROTOCOL=SSLv3,TLSv1,TLSv1.1,TLSv1.2
+ * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
+ * TestJSSE
+ * @run main/othervm
+ * -DSERVER_PROTOCOL=TLSv1.1
+ * -DCLIENT_PROTOCOL=SSLv3,TLSv1,TLSv1.1,TLSv1.2
+ * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
+ * TestJSSE
+ * @run main/othervm
+ * -DSERVER_PROTOCOL=TLSv1.2
+ * -DCLIENT_PROTOCOL=SSLv3,TLSv1,TLSv1.1,TLSv1.2
+ * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
+ * TestJSSE
+ */
--- a/jdk/test/javax/net/ssl/templates/SSLSocketSSLEngineTemplate.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/javax/net/ssl/templates/SSLSocketSSLEngineTemplate.java Fri Jul 01 16:55:44 2016 -0700
@@ -178,8 +178,11 @@
char[] passphrase = "passphrase".toCharArray();
- ks.load(new FileInputStream(keyFilename), passphrase);
- ts.load(new FileInputStream(trustFilename), passphrase);
+ try (FileInputStream keyFile = new FileInputStream(keyFilename);
+ FileInputStream trustFile = new FileInputStream(trustFilename)) {
+ ks.load(keyFile, passphrase);
+ ts.load(trustFile, passphrase);
+ }
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, passphrase);
@@ -310,6 +313,7 @@
if (retry &&
serverIn.remaining() < clientMsg.length) {
log("Need to read more from client");
+ serverIn.compact();
retry = false;
continue;
} else {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/rmi/PortableRemoteObject/8146975/HelloClient.java Fri Jul 01 16:55:44 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.
+ */
+
+import java.util.ArrayList;
+
+import javax.naming.InitialContext;
+import javax.naming.Context;
+import javax.naming.NameNotFoundException;
+
+import javax.rmi.PortableRemoteObject;
+
+
+
+public class HelloClient implements Runnable {
+ static final int MAX_RETRY = 10;
+ static final int ONE_SECOND = 1000;
+ private static boolean responseReceived;
+
+ public static void main(String args[]) throws Exception {
+ executeRmiClientCall();
+ }
+
+ @Override
+ public void run() {
+ try {
+ executeRmiClientCall();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException(e);
+ }
+ }
+
+
+ public static boolean isResponseReceived () {
+ return responseReceived;
+ }
+
+ public static void executeRmiClientCall() throws Exception {
+ Context ic;
+ Object objref;
+ HelloInterface helloSvc;
+ String response;
+ Object testResponse;
+ int retryCount = 0;
+
+ ArrayList<Test> listParam = new ArrayList<Test>();
+ listParam.add(null);
+ System.out.println("HelloClient.main: enter ...");
+ while (retryCount < MAX_RETRY) {
+ try {
+ ic = new InitialContext();
+ System.out.println("HelloClient.main: HelloService lookup ...");
+ // STEP 1: Get the Object reference from the Name Service
+ // using JNDI call.
+ objref = ic.lookup("HelloService");
+ System.out.println("HelloClient: Obtained a ref. to Hello server.");
+
+ // STEP 2: Narrow the object reference to the concrete type and
+ // invoke the method.
+ helloSvc = (HelloInterface) PortableRemoteObject.narrow(objref,
+ HelloInterface.class);
+
+ Test3 test3 = new Test3(listParam);
+ Test3 test3Response = helloSvc.sayHelloWithTest3(test3);
+ System.out.println("Server says: Test3 response == " + test3Response);
+
+ Test3 test3WithNullList = new Test3(null);
+ test3Response = helloSvc.sayHelloWithTest3(test3WithNullList);
+ System.out.println("Server says: Test3 response == "
+ + test3Response);
+
+ Test4 test4 = new Test4(listParam);
+ Test3 test4Response = helloSvc.sayHelloWithTest3(test4);
+ System.out.println("Server says: Test4 response == " + test4Response);
+
+ responseReceived = true;
+ break;
+ } catch (NameNotFoundException nnfEx) {
+ System.err.println("NameNotFoundException Caught .... try again");
+ retryCount++;
+ try {
+ Thread.sleep(ONE_SECOND);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ continue;
+ } catch (Throwable t) {
+ System.err.println("Exception " + t + "Caught");
+ t.printStackTrace();
+ throw new RuntimeException(t);
+ }
+ }
+ System.err.println("HelloClient terminating ");
+ try {
+ Thread.sleep(ONE_SECOND);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/rmi/PortableRemoteObject/8146975/HelloImpl.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,41 @@
+/*
+ * 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.rmi.RemoteException;
+import javax.rmi.PortableRemoteObject;
+
+public class HelloImpl extends PortableRemoteObject implements HelloInterface {
+
+ public HelloImpl() throws java.rmi.RemoteException {
+ super(); // invoke rmi linking and remote object initialization
+ }
+
+
+ @Override
+ public Test3 sayHelloWithTest3(Test3 test) throws RemoteException {
+ System.out.println("sayHelloToTest3: ENTER " );
+
+ return test;
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/rmi/PortableRemoteObject/8146975/HelloInterface.java Fri Jul 01 16:55:44 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.
+ */
+
+import java.rmi.Remote;
+
+public interface HelloInterface extends Remote {
+ public Test3 sayHelloWithTest3( Test3 test ) throws java.rmi.RemoteException;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/rmi/PortableRemoteObject/8146975/HelloServer.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,58 @@
+/*
+ * 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.naming.InitialContext;
+import javax.naming.Context;
+
+public class HelloServer {
+
+ static final int MAX_RETRY = 10;
+ static final int ONE_SECOND = 1000;
+
+ public static void main(String[] args) {
+ int retryCount = 0;
+ while (retryCount < MAX_RETRY) {
+ try {
+ // Step 1: Instantiate the Hello servant
+ HelloImpl helloRef = new HelloImpl();
+
+ // Step 2: Publish the reference in the Naming Service
+ // using JNDI API
+ Context initialNamingContext = new InitialContext();
+ initialNamingContext.rebind("HelloService", helloRef);
+
+ System.out.println("Hello Server: Ready...");
+ break;
+ } catch (Exception e) {
+ System.out.println("Server initialization problem: " + e);
+ e.printStackTrace();
+ retryCount++;
+ try {
+ Thread.sleep(ONE_SECOND);
+ } catch (InterruptedException e1) {
+ e1.printStackTrace();
+ }
+ }
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/rmi/PortableRemoteObject/8146975/RmiIiopReturnValueTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,157 @@
+/*
+ * 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 8146975
+ * @summary test RMI-IIOP with value object return
+ * @library /lib/testlibrary
+ * @build jdk.testlibrary.*
+ * @compile -addmods java.corba Test.java Test3.java Test4.java
+ * HelloInterface.java HelloServer.java
+ * HelloClient.java HelloImpl.java _HelloImpl_Tie.java _HelloInterface_Stub.java
+ * RmiIiopReturnValueTest.java
+ * @run main/othervm -addmods java.corba
+ * -Djava.naming.provider.url=iiop://localhost:5050
+ * -Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory
+ * RmiIiopReturnValueTest -port 5049
+ * @run main/othervm/secure=java.lang.SecurityManager/policy=jtreg.test.policy
+ * -addmods java.corba -Djava.naming.provider.url=iiop://localhost:5050
+ * -Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory
+ * RmiIiopReturnValueTest -port 5049
+ */
+
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import jdk.testlibrary.JDKToolFinder;
+import jdk.testlibrary.JDKToolLauncher;
+
+public class RmiIiopReturnValueTest {
+
+ static final String ORBD = JDKToolFinder.getTestJDKTool("orbd");
+ static final String JAVA = JDKToolFinder.getTestJDKTool("java");
+ static final JDKToolLauncher orbdLauncher = JDKToolLauncher.createUsingTestJDK("orbd");
+ static final String CLASSPATH = System.getProperty("java.class.path");
+ static final int FIVE_SECONDS = 5000;
+
+ private static Throwable clientException;
+ private static boolean exceptionInClient;
+ private static Process orbdProcess;
+ private static Process rmiServerProcess;
+
+ public static void main(String[] args) throws Exception {
+ startTestComponents();
+ stopTestComponents();
+ System.err.println("Test completed OK ");
+ }
+
+ static void startTestComponents () throws Exception {
+ startOrbd();
+ Thread.sleep(FIVE_SECONDS);
+ startRmiIiopServer();
+ Thread.sleep(FIVE_SECONDS);
+ executeRmiIiopClient();
+ }
+
+ private static void stopTestComponents() throws Exception {
+ stopRmiIiopServer();
+ stopOrbd();
+ if (exceptionInClient) {
+ throw new RuntimeException(clientException);
+ } else if (!isResponseReceived()) {
+ throw new RuntimeException("Expected Response not received");
+ }
+ }
+
+ static void startOrbd() throws Exception {
+ System.out.println("\nStarting orbd with NS port 5050 and activation port 5049 ");
+
+ //orbd -ORBInitialHost localhost -ORBInitialPort 5050 -port 5049
+ orbdLauncher.addToolArg("-ORBInitialHost").addToolArg("localhost")
+ .addToolArg("-ORBInitialPort").addToolArg("5050")
+ .addToolArg("-port").addToolArg("5049");
+
+ System.out.println("RmiIiopReturnValueTest: Executing: " + Arrays.asList(orbdLauncher.getCommand()));
+ ProcessBuilder pb = new ProcessBuilder(orbdLauncher.getCommand());
+ pb.redirectError(ProcessBuilder.Redirect.INHERIT);
+ orbdProcess = pb.start();
+ }
+
+
+ static void startRmiIiopServer() throws Exception {
+ System.out.println("\nStarting RmiIiopServer");
+ // java -addmods java.corba -cp .
+ // -Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory
+ // -Djava.naming.provider.url=iiop://localhost:5050 HelloServer -port 5049
+ List<String> commands = new ArrayList<>();
+ commands.add(RmiIiopReturnValueTest.JAVA);
+ commands.add("-addmods");
+ commands.add("java.corba");
+ commands.add("-Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory");
+ commands.add("-Djava.naming.provider.url=iiop://localhost:5050");
+ commands.add("-cp");
+ commands.add(RmiIiopReturnValueTest.CLASSPATH);
+ commands.add("HelloServer");
+ commands.add("-port");
+ commands.add("5049");
+
+ System.out.println("RmiIiopReturnValueTest: Executing: " + commands);
+ ProcessBuilder pb = new ProcessBuilder(commands);
+ pb.redirectError(ProcessBuilder.Redirect.INHERIT);
+ rmiServerProcess = pb.start();
+ }
+
+ static boolean isResponseReceived() {
+ return HelloClient.isResponseReceived();
+ }
+
+ static void stopRmiIiopServer() throws Exception {
+ if (rmiServerProcess != null) {
+ System.out.println("RmiIiopReturnValueTest.stopRmiIiopServer: destroy rmiServerProcess");
+ rmiServerProcess.destroyForcibly();
+ rmiServerProcess.waitFor();
+ System.out.println("serverProcess exitCode:"
+ + rmiServerProcess.exitValue());
+ }
+ }
+
+ static void stopOrbd() throws Exception {
+ System.out.println("RmiIiopReturnValueTest.stopOrbd: destroy orbdProcess ");
+ orbdProcess.destroyForcibly();
+ orbdProcess.waitFor();
+ System.out.println("orbd exitCode:"
+ + orbdProcess.exitValue());
+ }
+
+ static void executeRmiIiopClient() throws Exception {
+ System.out.println("RmiIiopReturnValueTest.executeRmiIiopClient: HelloClient.executeRmiClientCall");
+ try {
+ HelloClient.executeRmiClientCall();
+ } catch (Throwable t) {
+ clientException = t;
+ exceptionInClient = true;
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/rmi/PortableRemoteObject/8146975/Test.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,29 @@
+/*
+ * 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.Serializable;
+
+
+public class Test implements Serializable {
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/rmi/PortableRemoteObject/8146975/Test3.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,36 @@
+/*
+ * 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.Serializable;
+import java.util.List;
+
+
+public class Test3 implements Serializable {
+
+ private List<Test> list;
+
+ public Test3(List<Test> list) {
+ this.list = list;
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/rmi/PortableRemoteObject/8146975/Test4.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,41 @@
+/*
+ * 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.util.List;
+
+
+public class Test4 extends Test3 {
+
+ private int aNumber = 1;
+
+ public Test4(List<Test> list) {
+ super(list);
+ }
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/rmi/PortableRemoteObject/8146975/_HelloImpl_Tie.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,103 @@
+/*
+ * 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.
+ */
+
+// Tie class generated by rmic, do not edit.
+// Contents subject to change without notice.
+
+import java.io.Serializable;
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+import javax.rmi.CORBA.Tie;
+import javax.rmi.CORBA.Util;
+import org.omg.CORBA.BAD_OPERATION;
+import org.omg.CORBA.ORB;
+import org.omg.CORBA.SystemException;
+import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.OutputStream;
+import org.omg.CORBA.portable.ResponseHandler;
+import org.omg.CORBA.portable.UnknownException;
+import org.omg.CORBA_2_3.portable.ObjectImpl;
+
+
+public class _HelloImpl_Tie extends ObjectImpl implements Tie {
+
+ volatile private HelloImpl target = null;
+
+ private static final String[] _type_ids = {
+ "RMI:HelloInterface:0000000000000000"
+ };
+
+ public void setTarget(Remote target) {
+ this.target = (HelloImpl) target;
+ }
+
+ public Remote getTarget() {
+ return target;
+ }
+
+ public org.omg.CORBA.Object thisObject() {
+ return this;
+ }
+
+ public void deactivate() {
+ _orb().disconnect(this);
+ _set_delegate(null);
+ target = null;
+ }
+
+ public ORB orb() {
+ return _orb();
+ }
+
+ public void orb(ORB orb) {
+ orb.connect(this);
+ }
+
+ public String[] _ids() {
+ return (String[]) _type_ids.clone();
+ }
+
+ public OutputStream _invoke(String method, InputStream _in, ResponseHandler reply) throws SystemException {
+ try {
+ HelloImpl target = this.target;
+ if (target == null) {
+ throw new java.io.IOException();
+ }
+ org.omg.CORBA_2_3.portable.InputStream in =
+ (org.omg.CORBA_2_3.portable.InputStream) _in;
+ if (method.equals("sayHelloWithTest3")) {
+ Test3 arg0 = (Test3) in.read_value(Test3.class);
+ Test3 result = target.sayHelloWithTest3(arg0);
+ org.omg.CORBA_2_3.portable.OutputStream out =
+ (org.omg.CORBA_2_3.portable.OutputStream) reply.createReply();
+ out.write_value(result,Test3.class);
+ return out;
+ }
+ throw new BAD_OPERATION();
+ } catch (SystemException ex) {
+ throw ex;
+ } catch (Throwable ex) {
+ throw new UnknownException(ex);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/rmi/PortableRemoteObject/8146975/_HelloInterface_Stub.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,93 @@
+/*
+ * 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.
+ */
+
+// Stub class generated by rmic, do not edit.
+// Contents subject to change without notice.
+
+import java.io.Serializable;
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+import java.rmi.UnexpectedException;
+import javax.rmi.CORBA.Stub;
+import javax.rmi.CORBA.Util;
+import org.omg.CORBA.ORB;
+import org.omg.CORBA.SystemException;
+import org.omg.CORBA.portable.ApplicationException;
+import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.OutputStream;
+import org.omg.CORBA.portable.RemarshalException;
+import org.omg.CORBA.portable.ResponseHandler;
+import org.omg.CORBA.portable.ServantObject;
+
+
+public class _HelloInterface_Stub extends Stub implements HelloInterface {
+
+ private static final String[] _type_ids = {
+ "RMI:HelloInterface:0000000000000000"
+ };
+
+ public String[] _ids() {
+ return (String[]) _type_ids.clone();
+ }
+
+ public Test3 sayHelloWithTest3(Test3 arg0) throws java.rmi.RemoteException {
+ if (!Util.isLocal(this)) {
+ try {
+ org.omg.CORBA_2_3.portable.InputStream in = null;
+ try {
+ org.omg.CORBA_2_3.portable.OutputStream out =
+ (org.omg.CORBA_2_3.portable.OutputStream)
+ _request("sayHelloWithTest3", true);
+ out.write_value(arg0,Test3.class);
+ in = (org.omg.CORBA_2_3.portable.InputStream)_invoke(out);
+ return (Test3) in.read_value(Test3.class);
+ } catch (ApplicationException ex) {
+ in = (org.omg.CORBA_2_3.portable.InputStream) ex.getInputStream();
+ String $_id = in.read_string();
+ throw new UnexpectedException($_id);
+ } catch (RemarshalException ex) {
+ return sayHelloWithTest3(arg0);
+ } finally {
+ _releaseReply(in);
+ }
+ } catch (SystemException ex) {
+ throw Util.mapSystemException(ex);
+ }
+ } else {
+ ServantObject so = _servant_preinvoke("sayHelloWithTest3",HelloInterface.class);
+ if (so == null) {
+ return sayHelloWithTest3(arg0);
+ }
+ try {
+ Test3 arg0Copy = (Test3) Util.copyObject(arg0,_orb());
+ Test3 result = ((HelloInterface)so.servant).sayHelloWithTest3(arg0Copy);
+ return (Test3)Util.copyObject(result,_orb());
+ } catch (Throwable ex) {
+ Throwable exCopy = (Throwable)Util.copyObject(ex,_orb());
+ throw Util.wrapException(exCopy);
+ } finally {
+ _servant_postinvoke(so);
+ }
+ }
+ }
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/rmi/PortableRemoteObject/8146975/jtreg.test.policy Fri Jul 01 16:55:44 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.
+ */
+
+grant codeBase "jrt:/java.corba" {
+ permission java.security.AllPermission;
+};
+
+
+
+grant {
+ permission java.io.FilePermission "./-", "read,write,execute";
+ permission java.io.FilePermission "*", "read";
+ permission java.net.SocketPermission "*:*", "connect, accept, listen, resolve";
+ permission java.util.PropertyPermission "*", "read, write";
+ permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
+ permission java.io.SerializablePermission "enableSubclassImplementation";
+ permission java.lang.RuntimePermission "accessClassInPackage.jdk.internal.misc";
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.corba";
+ permission java.lang.RuntimePermission "defineClassInPackage.sun.corba";
+ permission java.lang.RuntimePermission "reflectionFactoryAccess";
+ permission sun.corba.BridgePermission "getBridge";
+ permission java.lang.RuntimePermission "accessClassInPackage.jdk.internal.reflect";
+ permission java.util.PropertyPermission "*", "read, write";
+ permission java.io.FilePermission "<<ALL FILES>>", "read,write,execute";
+};
--- a/jdk/test/javax/rmi/PortableRemoteObject/ConcurrentHashMapTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/javax/rmi/PortableRemoteObject/ConcurrentHashMapTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -31,17 +31,16 @@
* HelloImpl.java _HelloImpl_Tie.java _HelloInterface_Stub.java ConcurrentHashMapTest.java
* @run main/othervm -addmods java.corba -Djava.naming.provider.url=iiop://localhost:1050
* -Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory ConcurrentHashMapTest
+ * @run main/othervm/secure=java.lang.SecurityManager/policy=jtreg.test.policy
+ * -addmods java.corba -Djava.naming.provider.url=iiop://localhost:1050
+ * -Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory ConcurrentHashMapTest
* @key intermittent
*/
-import java.io.DataInputStream;
-import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.CountDownLatch;
import jdk.testlibrary.JDKToolFinder;
import jdk.testlibrary.JDKToolLauncher;
@@ -83,7 +82,7 @@
}
static void startOrbd() throws Exception {
- System.out.println("\nStarting orbd on port 1050 ");
+ System.out.println("\nStarting orbd with NS port 1050 ");
//orbd -ORBInitialHost localhost -ORBInitialPort 1050
orbdLauncher.addToolArg("-ORBInitialHost").addToolArg("localhost")
@@ -98,7 +97,7 @@
static void startRmiIiopServer() throws Exception {
System.out.println("\nStarting RmiServer");
- // java -cp .
+ // java -cp . -addmods java.corba
// -Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory
// -Djava.naming.provider.url=iiop://localhost:1050 HelloServer
List<String> commands = new ArrayList<>();
@@ -122,17 +121,15 @@
}
static void stopRmiIiopServer() throws Exception {
- rmiServerProcess.destroy();
+ rmiServerProcess.destroyForcibly();
rmiServerProcess.waitFor();
- //rmiServerProcess.waitFor(30, TimeUnit.SECONDS);
System.out.println("serverProcess exitCode:"
+ rmiServerProcess.exitValue());
}
static void stopOrbd() throws Exception {
- orbdProcess.destroy();
+ orbdProcess.destroyForcibly();
orbdProcess.waitFor();
- //orbdProcess.waitFor(30, TimeUnit.SECONDS);
System.out.println("orbd exitCode:"
+ orbdProcess.exitValue());
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/rmi/PortableRemoteObject/jtreg.test.policy Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,43 @@
+/*
+ * 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.
+ */
+
+grant codeBase "jrt:/java.corba" {
+ permission java.security.AllPermission;
+};
+
+grant {
+ permission java.io.FilePermission "./-", "read,write,execute";
+ permission java.io.FilePermission "*", "read";
+ permission java.net.SocketPermission "*:*", "connect, accept, listen, resolve";
+ permission java.util.PropertyPermission "*", "read, write";
+ permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
+ permission java.io.SerializablePermission "enableSubclassImplementation";
+ permission java.lang.RuntimePermission "accessClassInPackage.jdk.internal.misc";
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.corba";
+ permission java.lang.RuntimePermission "defineClassInPackage.sun.corba";
+ permission java.lang.RuntimePermission "reflectionFactoryAccess";
+ permission sun.corba.BridgePermission "getBridge";
+ permission java.lang.RuntimePermission "accessClassInPackage.jdk.internal.reflect";
+ permission java.util.PropertyPermission "*", "read, write";
+ permission java.io.FilePermission "<<ALL FILES>>", "read,write,execute";
+};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/xml/bind/JAXBContext/JAXBContextWithAbstractFactory.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,100 @@
+/*
+ * 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.security.Permission;
+import java.security.Policy;
+import java.security.ProtectionDomain;
+import java.util.Map;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBContextFactory;
+import javax.xml.bind.JAXBException;
+
+/**
+ * @test
+ * @bug 8150173
+ * @summary Verifies that a factory which inherit its createContext method
+ * from an abstract subclass of JAXBContextFactory can be instantiated.
+ * @compile -addmods java.xml.bind JAXBContextWithAbstractFactory.java
+ * @run main/othervm -addmods java.xml.bind JAXBContextWithAbstractFactory
+ */
+public class JAXBContextWithAbstractFactory {
+ private static JAXBContext tmp;
+
+ public static abstract class FactoryBase implements JAXBContextFactory {
+ @Override
+ public JAXBContext createContext(Class<?>[] classesToBeBound,
+ Map<String, ?> properties) throws JAXBException {
+ return tmp;
+ }
+
+ @Override
+ public JAXBContext createContext(String contextPath,
+ ClassLoader classLoader, Map<String, ?> properties)
+ throws JAXBException {
+ return tmp;
+ }
+ }
+
+ public static class Factory extends FactoryBase {}
+
+ // test both without and then with a security manager as the code path
+ // can be different when System.getSecurityManager() != null;
+ public static void main(String[] args) throws JAXBException {
+ System.out.println("\nWithout security manager\n");
+ test();
+
+ System.out.println("\nWith security manager\n");
+ Policy.setPolicy(new Policy() {
+ @Override
+ public boolean implies(ProtectionDomain domain, Permission permission) {
+ return true; // allow all
+ }
+ });
+ System.setSecurityManager(new SecurityManager());
+ test();
+ }
+
+ public static void test() throws JAXBException {
+ System.clearProperty(JAXBContext.JAXB_CONTEXT_FACTORY);
+ System.out.println(JAXBContext.JAXB_CONTEXT_FACTORY + " = "
+ + System.getProperty(JAXBContext.JAXB_CONTEXT_FACTORY, ""));
+ System.out.println("Calling "
+ + "JAXBContext.newInstance(JAXBContextWithAbstractFactory.class)");
+ tmp = JAXBContext.newInstance(JAXBContextWithAbstractFactory.class);
+ System.setProperty(JAXBContext.JAXB_CONTEXT_FACTORY,
+ "JAXBContextWithAbstractFactory$Factory");
+ System.out.println(JAXBContext.JAXB_CONTEXT_FACTORY + " = "
+ + System.getProperty(JAXBContext.JAXB_CONTEXT_FACTORY));
+ System.out.println("Calling "
+ + "JAXBContext.newInstance(JAXBContextWithAbstractFactory.class)");
+ JAXBContext ctxt = JAXBContext.newInstance(JAXBContextWithAbstractFactory.class);
+ System.out.println("Successfully loaded JAXBcontext: " +
+ System.identityHashCode(ctxt) + "@" + ctxt.getClass().getName());
+ if (ctxt != tmp) {
+ throw new RuntimeException("Wrong JAXBContext instance"
+ + "\n\texpected: "
+ + System.identityHashCode(tmp) + "@" + tmp.getClass().getName()
+ + "\n\tactual: "
+ + System.identityHashCode(ctxt) + "@" + ctxt.getClass().getName());
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/xml/bind/JAXBContext/JAXBContextWithLegacyFactory.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,147 @@
+/*
+ * 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.security.Permission;
+import java.security.Policy;
+import java.security.ProtectionDomain;
+import java.util.Map;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.bind.Validator;
+
+/**
+ * @test
+ * @bug 8150173
+ * @summary Verifies that a JAXBContext can be created with a legacy
+ * factory class that has static createContext methods.
+ * @compile -addmods java.xml.bind JAXBContextWithLegacyFactory.java
+ * @run main/othervm -addmods java.xml.bind JAXBContextWithLegacyFactory
+ */
+public class JAXBContextWithLegacyFactory {
+ private static JAXBContext tmp;
+
+ public static class JAXBContextImpl extends JAXBContext {
+ public final Class<?> creator;
+ JAXBContextImpl(Class<?> creator) {
+ this.creator = creator;
+ }
+
+ @Override
+ public Unmarshaller createUnmarshaller() throws JAXBException {
+ return tmp.createUnmarshaller();
+ }
+
+ @Override
+ public Marshaller createMarshaller() throws JAXBException {
+ return tmp.createMarshaller();
+ }
+
+ @Override
+ public Validator createValidator() throws JAXBException {
+ return tmp.createValidator();
+ }
+ }
+
+ public static abstract class FactoryBase {
+ public static JAXBContext createContext(Class<?>[] classesToBeBound,
+ Map<String, ?> properties) throws JAXBException {
+ return new JAXBContextImpl(FactoryBase.class);
+ }
+
+ public static JAXBContext createContext(String contextPath,
+ ClassLoader classLoader, Map<String, ?> properties)
+ throws JAXBException {
+ return new JAXBContextImpl(FactoryBase.class);
+ }
+ }
+
+ public static class Factory1 extends FactoryBase {}
+
+ public static class Factory2 extends FactoryBase {
+ public static JAXBContext createContext(Class<?>[] classesToBeBound,
+ Map<String, ?> properties) throws JAXBException {
+ return new JAXBContextImpl(Factory2.class);
+ }
+
+ public static JAXBContext createContext(String contextPath,
+ ClassLoader classLoader, Map<String, ?> properties)
+ throws JAXBException {
+ return new JAXBContextImpl(Factory2.class);
+ }
+ }
+
+ // test both without and then with a security manager as the code path
+ // can be different when System.getSecurityManager() != null;
+ public static void main(String[] args) throws JAXBException {
+ System.out.println("\nWithout security manager\n");
+ test(FactoryBase.class, FactoryBase.class);
+ test(Factory1.class, FactoryBase.class);
+ test(Factory2.class, Factory2.class);
+
+ System.out.println("\nWith security manager\n");
+ Policy.setPolicy(new Policy() {
+ @Override
+ public boolean implies(ProtectionDomain domain, Permission permission) {
+ return true; // allow all
+ }
+ });
+ System.setSecurityManager(new SecurityManager());
+ test(FactoryBase.class, FactoryBase.class);
+ test(Factory1.class, FactoryBase.class);
+ test(Factory2.class, Factory2.class);
+ }
+
+ public static void test(Class<?> factoryClass, Class<?> creatorClass) throws JAXBException {
+ System.clearProperty(JAXBContext.JAXB_CONTEXT_FACTORY);
+ System.out.println("** Testing with Factory Class: " + factoryClass.getName());
+ System.out.println(JAXBContext.JAXB_CONTEXT_FACTORY + " = "
+ + System.getProperty(JAXBContext.JAXB_CONTEXT_FACTORY, ""));
+ System.out.println("Calling "
+ + "JAXBContext.newInstance(JAXBContextWithLegacyFactory.class)");
+ tmp = JAXBContext.newInstance(JAXBContextWithLegacyFactory.class);
+ System.setProperty(JAXBContext.JAXB_CONTEXT_FACTORY,
+ factoryClass.getName());
+ System.out.println(JAXBContext.JAXB_CONTEXT_FACTORY + " = "
+ + System.getProperty(JAXBContext.JAXB_CONTEXT_FACTORY));
+ System.out.println("Calling "
+ + "JAXBContext.newInstance(JAXBContextWithLegacyFactory.class)");
+ JAXBContext ctxt = JAXBContext.newInstance(JAXBContextWithLegacyFactory.class);
+ System.out.println("Successfully loaded JAXBcontext: " +
+ System.identityHashCode(ctxt) + "@" + ctxt.getClass().getName());
+ if (ctxt.getClass() != JAXBContextImpl.class) {
+ throw new RuntimeException("Wrong JAXBContext class"
+ + "\n\texpected: "
+ + System.identityHashCode(tmp) + "@" + JAXBContextImpl.class.getName()
+ + "\n\tactual: "
+ + System.identityHashCode(ctxt) + "@" + ctxt.getClass().getName());
+ }
+ if (((JAXBContextImpl)ctxt).creator != creatorClass) {
+ throw new RuntimeException("Wrong Factory class"
+ + "\n\texpected: "
+ + System.identityHashCode(tmp) + "@" + creatorClass.getName()
+ + "\n\tactual: "
+ + System.identityHashCode(ctxt) + "@" + ((JAXBContextImpl)ctxt).creator.getName());
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/xml/bind/JAXBContext/JAXBContextWithSubclassedFactory.java Fri Jul 01 16:55:44 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.
+ */
+import java.security.Permission;
+import java.security.Policy;
+import java.security.ProtectionDomain;
+import java.util.Map;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBContextFactory;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.bind.Validator;
+
+/**
+ * @test
+ * @bug 8150173
+ * @summary Verifies that a factory which inherit its createContext method
+ * from a concrete subclass of JAXBContextFactory is be instantiated.
+ * @compile -addmods java.xml.bind JAXBContextWithSubclassedFactory.java
+ * @run main/othervm -addmods java.xml.bind JAXBContextWithSubclassedFactory
+ */
+public class JAXBContextWithSubclassedFactory {
+ static JAXBContext tmp;
+
+ public static class JAXBContextImpl extends JAXBContext {
+ public final Class<?> creator;
+ JAXBContextImpl(Class<?> creator) {
+ this.creator = creator;
+ }
+
+ @Override
+ public Unmarshaller createUnmarshaller() throws JAXBException {
+ return tmp.createUnmarshaller();
+ }
+
+ @Override
+ public Marshaller createMarshaller() throws JAXBException {
+ return tmp.createMarshaller();
+ }
+
+ @Override
+ public Validator createValidator() throws JAXBException {
+ return tmp.createValidator();
+ }
+ }
+
+ public static class FactoryBase implements JAXBContextFactory {
+
+ @Override
+ public JAXBContext createContext(Class<?>[] classesToBeBound,
+ Map<String, ?> properties) throws JAXBException {
+ return new JAXBContextImpl(this.getClass());
+ }
+
+ @Override
+ public JAXBContext createContext(String contextPath,
+ ClassLoader classLoader, Map<String, ?> properties)
+ throws JAXBException {
+ return new JAXBContextImpl(this.getClass());
+ }
+ }
+
+ public static class NonFactoryBase {
+
+ public JAXBContext createContext(Class<?>[] classesToBeBound,
+ Map<String, ?> properties) throws JAXBException {
+ return new JAXBContextImpl(this.getClass());
+ }
+
+ public JAXBContext createContext(String contextPath,
+ ClassLoader classLoader, Map<String, ?> properties)
+ throws JAXBException {
+ return new JAXBContextImpl(this.getClass());
+ }
+ }
+
+ public static class Factory1 extends FactoryBase {}
+ public static class Factory2 extends NonFactoryBase implements JAXBContextFactory {}
+
+ // test both without and then with a security manager as the code path
+ // can be different when System.getSecurityManager() != null;
+ public static void main(String[] args) throws JAXBException {
+ System.out.println("\nWithout security manager\n");
+ test(FactoryBase.class);
+ test(Factory1.class);
+ test(Factory2.class);
+
+ System.out.println("\nWith security manager\n");
+ Policy.setPolicy(new Policy() {
+ @Override
+ public boolean implies(ProtectionDomain domain, Permission permission) {
+ return true; // allow all
+ }
+ });
+ System.setSecurityManager(new SecurityManager());
+ test(FactoryBase.class);
+ test(Factory1.class);
+ test(Factory2.class);
+ }
+
+ public static void test(Class<?> factoryClass) throws JAXBException {
+ System.clearProperty(JAXBContext.JAXB_CONTEXT_FACTORY);
+ System.out.println("** Testing with Factory Class: " + factoryClass.getName());
+ System.out.println(JAXBContext.JAXB_CONTEXT_FACTORY + " = "
+ + System.getProperty(JAXBContext.JAXB_CONTEXT_FACTORY, ""));
+ System.out.println("Calling "
+ + "JAXBContext.newInstance(JAXBContextWithSubclassedFactory.class)");
+ tmp = JAXBContext.newInstance(JAXBContextWithSubclassedFactory.class);
+ System.setProperty(JAXBContext.JAXB_CONTEXT_FACTORY,
+ factoryClass.getName());
+ System.out.println(JAXBContext.JAXB_CONTEXT_FACTORY + " = "
+ + System.getProperty(JAXBContext.JAXB_CONTEXT_FACTORY));
+ System.out.println("Calling "
+ + "JAXBContext.newInstance(JAXBContextWithSubclassedFactory.class)");
+ JAXBContext ctxt = JAXBContext.newInstance(JAXBContextWithSubclassedFactory.class);
+ System.out.println("Successfully loaded JAXBcontext: " +
+ System.identityHashCode(ctxt) + "@" + ctxt.getClass().getName());
+ if (ctxt.getClass() != JAXBContextImpl.class) {
+ throw new RuntimeException("Wrong JAXBContext class"
+ + "\n\texpected: "
+ + System.identityHashCode(tmp) + "@" + JAXBContextImpl.class.getName()
+ + "\n\tactual: "
+ + System.identityHashCode(ctxt) + "@" + ctxt.getClass().getName());
+ }
+ if (((JAXBContextImpl)ctxt).creator != factoryClass) {
+ throw new RuntimeException("Wrong Factory class"
+ + "\n\texpected: "
+ + System.identityHashCode(tmp) + "@" + factoryClass.getName()
+ + "\n\tactual: "
+ + System.identityHashCode(ctxt) + "@" + ((JAXBContextImpl)ctxt).creator.getName());
+ }
+ }
+}
--- a/jdk/test/jdk/internal/jrtfs/Basic.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/jdk/internal/jrtfs/Basic.java Fri Jul 01 16:55:44 2016 -0700
@@ -715,5 +715,14 @@
assertTrue(childCount != 0);
assertEquals(dirPrefixOkayCount, childCount);
}
+
+ @Test
+ public void objectClassSizeTest() throws Exception {
+ String path = "/modules/java.base/java/lang/Object.class";
+ FileSystem fs = FileSystems.getFileSystem(URI.create("jrt:/"));
+ Path classFile = fs.getPath(path);
+
+ assertTrue(Files.size(classFile) > 0L);
+ }
}
--- a/jdk/test/sun/security/jca/PreferredProviderNegativeTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/sun/security/jca/PreferredProviderNegativeTest.java Fri Jul 01 16:55:44 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]);
--- a/jdk/test/sun/security/jca/PreferredProviderTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/sun/security/jca/PreferredProviderTest.java Fri Jul 01 16:55:44 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(
--- a/jdk/test/sun/security/mscapi/ShortRSAKeyWithinTLS.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/sun/security/mscapi/ShortRSAKeyWithinTLS.java Fri Jul 01 16:55:44 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<X509Certificate> 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);
+ }
+ }
+
}
--- a/jdk/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java Fri Jul 01 16:55:44 2016 -0700
@@ -29,8 +29,9 @@
* @library ..
* @library /lib/testlibrary
* @build jdk.testlibrary.*
- * @run main/othervm TestKeyPairGenerator
- * @run main/othervm TestKeyPairGenerator sm TestKeyPairGenerator.policy
+ * @run main/othervm -Djava.security.debug=sunpkcs11 TestKeyPairGenerator
+ * @run main/othervm -Djava.security.debug=sunpkcs11 TestKeyPairGenerator
+ * sm TestKeyPairGenerator.policy
* @key intermittent randomness
*/
--- a/jdk/test/sun/security/tools/jarsigner/TimestampCheck.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/sun/security/tools/jarsigner/TimestampCheck.java Fri Jul 01 16:55:44 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
@@ -39,6 +39,7 @@
import java.util.Calendar;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
+import java.util.Locale;
import sun.security.pkcs.ContentInfo;
import sun.security.pkcs.PKCS7;
@@ -371,7 +372,7 @@
static void jarsigner(String cmd, int path, boolean expected)
throws Exception {
System.err.println("Test " + path);
- Process p = Runtime.getRuntime().exec(String.format(cmd, path, path));
+ Process p = Runtime.getRuntime().exec(String.format(Locale.ROOT,cmd, path, path));
BufferedReader reader = new BufferedReader(
new InputStreamReader(p.getErrorStream()));
while (true) {
--- a/jdk/test/sun/security/tools/keytool/standard.sh Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/sun/security/tools/keytool/standard.sh Fri Jul 01 16:55:44 2016 -0700
@@ -25,7 +25,8 @@
# @summary (almost) all keytool behaviors
# @author Weijun Wang
# @run shell/timeout=600 standard.sh
-#
+# @key intermittent
+
# This test is always excecuted.
#
# set a few environment variables so that the shell-script can run stand-alone
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/text/resources/JavaTimeSupplementaryTest.java Fri Jul 01 16:55:44 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<Locale, Locale> 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<Locale> 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<String> 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<String> getSupplementalKeys(ResourceBundle rb) {
+ // Collect keys starting with any of PREFIXES
+ Set<String> 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();
+ }
+}
--- a/jdk/test/sun/tools/jps/JpsBase.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/sun/tools/jps/JpsBase.java Fri Jul 01 16:55:44 2016 -0700
@@ -35,27 +35,28 @@
*/
public final class JpsBase {
- private static final String shortProcessName;
- private static final String fullProcessName;
-
/**
* The jps output should contain processes' names
* (except when jps is started in quite mode).
* The expected name of the test process is prepared here.
*/
- static {
+
+ private static String getShortProcessName() {
URL url = JpsBase.class.getResource("JpsBase.class");
boolean isJar = url.getProtocol().equals("jar");
+ return (isJar) ? JpsBase.class.getSimpleName() + ".jar" : JpsBase.class.getSimpleName();
+ }
+ private static String getFullProcessName() {
+ URL url = JpsBase.class.getResource("JpsBase.class");
+ boolean isJar = url.getProtocol().equals("jar");
if (isJar) {
- shortProcessName = JpsBase.class.getSimpleName() + ".jar";
String urlPath = url.getPath();
File jar = new File(urlPath.substring(urlPath.indexOf("file:") + 5, urlPath.indexOf("jar!") + 3));
- fullProcessName = jar.getAbsolutePath();
- } else {
- shortProcessName = JpsBase.class.getSimpleName();
- fullProcessName = JpsBase.class.getName();
+ return jar.getAbsolutePath();
}
+
+ return JpsBase.class.getName();
}
public static void main(String[] args) throws Exception {
@@ -83,6 +84,7 @@
// or the full path name to the application's JAR file:
// 30673 /tmp/jtreg/jtreg-workdir/scratch/JpsBase.jar ...
isFull = true;
+ String fullProcessName = getFullProcessName();
pattern = "^" + pid + "\\s+" + replaceSpecialChars(fullProcessName) + ".*";
output.shouldMatch(pattern);
break;
@@ -120,6 +122,7 @@
// Output should only contain lines with pids after the first line with pid.
JpsHelper.verifyJpsOutput(output, "^\\d+\\s+.*");
if (!isFull) {
+ String shortProcessName = getShortProcessName();
pattern = "^" + pid + "\\s+" + replaceSpecialChars(shortProcessName);
if (combination.isEmpty()) {
// If no arguments are specified output should only contain
--- a/jdk/test/sun/util/locale/provider/Bug8038436.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/sun/util/locale/provider/Bug8038436.java Fri Jul 01 16:55:44 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
@@ -23,24 +23,25 @@
/*
* @test
- * @bug 8038436
+ * @bug 8038436 8158504
* @summary Test for changes in 8038436
* @modules java.base/sun.util.locale.provider
* java.base/sun.util.spi
* @compile -XDignore.symbol.file Bug8038436.java
- * @run main/othervm Bug8038436 -Djava.ext.dirs=foo security
- * @run main/othervm Bug8038436 -Djava.locale.providers=JRE availlocs
+ * @run main/othervm -limitmods java.base Bug8038436 security
+ * @run main/othervm -Djava.locale.providers=COMPAT Bug8038436 availlocs
*/
import java.security.*;
-import java.text.*;
import java.util.*;
import java.util.stream.*;
import sun.util.locale.provider.*;
public class Bug8038436 {
public static void main(String[] args) {
- switch (args[1]) {
+
+ switch (args[0]) {
+
case "security":
securityTests();
break;
@@ -50,6 +51,7 @@
default:
throw new RuntimeException("no test was specified.");
}
+
}
private static void securityTests() {
@@ -67,12 +69,14 @@
/*
* Check only English/ROOT locales are returned if the jdk.localedata
- * module is not installed (implied by "java.ext.dirs" set to "foo").
+ * module is not loaded (implied by "-limitmods java.base").
*/
- if (Arrays.asList(Locale.getAvailableLocales())
- .stream()
- .anyMatch(l -> l != Locale.ROOT && l.getLanguage() != "en")) {
- throw new RuntimeException("non English locale(s) included in available locales");
+ List<Locale> nonEnglishLocales= (Arrays.stream(Locale.getAvailableLocales())
+ .filter(l -> (l != Locale.ROOT && !(l.getLanguage() == "en" && (l.getCountry() == "US" || l.getCountry() == "" ))))
+ .collect(Collectors.toList()));
+
+ if (!nonEnglishLocales.isEmpty()) {
+ throw new RuntimeException("non English locale(s)" + nonEnglishLocales + " included in available locales");
}
}
--- a/jdk/test/tools/jar/compat/CLICompatibility.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/tools/jar/compat/CLICompatibility.java Fri Jul 01 16:55:44 2016 -0700
@@ -415,14 +415,14 @@
jar("-h")
.assertSuccess()
.resultChecker(r ->
- assertTrue(r.output.startsWith("Usage: jar [OPTION...] [-C dir] files"),
+ assertTrue(r.output.startsWith("Usage: jar [OPTION...] [ [--release VERSION] [-C dir] files]"),
"Failed, got [" + r.output + "]")
);
jar("--help")
.assertSuccess()
.resultChecker(r ->
- assertTrue(r.output.startsWith("Usage: jar [OPTION...] [-C dir] files"),
+ assertTrue(r.output.startsWith("Usage: jar [OPTION...] [ [--release VERSION] [-C dir] files]"),
"Failed, got [" + r.output + "]")
);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/tools/jar/multiRelease/Basic.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,354 @@
+/*
+ * 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
+ * @library /test/lib/share/classes
+ * @modules java.base/jdk.internal.misc
+ * @build jdk.test.lib.JDKToolFinder jdk.test.lib.Platform
+ * @run testng Basic
+ */
+
+import static org.testng.Assert.*;
+
+import org.testng.annotations.*;
+
+import java.io.*;
+import java.nio.file.*;
+import java.nio.file.attribute.*;
+import java.util.*;
+import java.util.function.Consumer;
+import java.util.jar.*;
+import java.util.stream.Stream;
+import java.util.zip.*;
+
+import jdk.test.lib.JDKToolFinder;
+
+import static java.lang.String.format;
+import static java.lang.System.out;
+
+public class Basic {
+ private final String src = System.getProperty("test.src", ".");
+ private final String usr = System.getProperty("user.dir", ".");
+
+ @Test
+ // create a regular, non-multi-release jar
+ public void test00() throws IOException {
+ String jarfile = "test.jar";
+
+ compile("test01"); //use same data as test01
+
+ Path classes = Paths.get("classes");
+ jar("cf", jarfile, "-C", classes.resolve("base").toString(), ".")
+ .assertSuccess();
+
+ checkMultiRelease(jarfile, false);
+
+ Map<String,String[]> names = Map.of(
+ "version/Main.class",
+ new String[] {"base", "version", "Main.class"},
+
+ "version/Version.class",
+ new String[] {"base", "version", "Version.class"}
+ );
+
+ compare(jarfile, names);
+
+ delete(jarfile);
+ deleteDir(Paths.get(usr, "classes"));
+ }
+
+ @Test
+ // create a multi-release jar
+ public void test01() throws IOException {
+ String jarfile = "test.jar";
+
+ compile("test01");
+
+ Path classes = Paths.get("classes");
+ jar("cf", jarfile, "-C", classes.resolve("base").toString(), ".",
+ "--release", "9", "-C", classes.resolve("v9").toString(), ".",
+ "--release", "10", "-C", classes.resolve("v10").toString(), ".")
+ .assertSuccess();
+
+ checkMultiRelease(jarfile, true);
+
+ Map<String,String[]> names = Map.of(
+ "version/Main.class",
+ new String[] {"base", "version", "Main.class"},
+
+ "version/Version.class",
+ new String[] {"base", "version", "Version.class"},
+
+ "META-INF/versions/9/version/Version.class",
+ new String[] {"v9", "version", "Version.class"},
+
+ "META-INF/versions/10/version/Version.class",
+ new String[] {"v10", "version", "Version.class"}
+ );
+
+ compare(jarfile, names);
+
+ delete(jarfile);
+ deleteDir(Paths.get(usr, "classes"));
+ }
+
+ @Test
+ // update a regular jar to a multi-release jar
+ public void test02() throws IOException {
+ String jarfile = "test.jar";
+
+ compile("test01"); //use same data as test01
+
+ Path classes = Paths.get("classes");
+ jar("cf", jarfile, "-C", classes.resolve("base").toString(), ".")
+ .assertSuccess();
+
+ checkMultiRelease(jarfile, false);
+
+ jar("uf", jarfile, "--release", "9", "-C", classes.resolve("v9").toString(), ".")
+ .assertSuccess();
+
+ checkMultiRelease(jarfile, true);
+
+ Map<String,String[]> names = Map.of(
+ "version/Main.class",
+ new String[] {"base", "version", "Main.class"},
+
+ "version/Version.class",
+ new String[] {"base", "version", "Version.class"},
+
+ "META-INF/versions/9/version/Version.class",
+ new String[] {"v9", "version", "Version.class"}
+ );
+
+ compare(jarfile, names);
+
+ delete(jarfile);
+ deleteDir(Paths.get(usr, "classes"));
+ }
+
+ @Test
+ // replace a base entry and a versioned entry
+ public void test03() throws IOException {
+ String jarfile = "test.jar";
+
+ compile("test01"); //use same data as test01
+
+ Path classes = Paths.get("classes");
+ jar("cf", jarfile, "-C", classes.resolve("base").toString(), ".",
+ "--release", "9", "-C", classes.resolve("v9").toString(), ".")
+ .assertSuccess();
+
+ checkMultiRelease(jarfile, true);
+
+ Map<String,String[]> names = Map.of(
+ "version/Main.class",
+ new String[] {"base", "version", "Main.class"},
+
+ "version/Version.class",
+ new String[] {"base", "version", "Version.class"},
+
+ "META-INF/versions/9/version/Version.class",
+ new String[] {"v9", "version", "Version.class"}
+ );
+
+ compare(jarfile, names);
+
+ // write the v9 version/Version.class entry in base and the v10
+ // version/Version.class entry in versions/9 section
+ jar("uf", jarfile, "-C", classes.resolve("v9").toString(), "version",
+ "--release", "9", "-C", classes.resolve("v10").toString(), ".")
+ .assertSuccess();
+
+ checkMultiRelease(jarfile, true);
+
+ names = Map.of(
+ "version/Main.class",
+ new String[] {"base", "version", "Main.class"},
+
+ "version/Version.class",
+ new String[] {"v9", "version", "Version.class"},
+
+ "META-INF/versions/9/version/Version.class",
+ new String[] {"v10", "version", "Version.class"}
+ );
+
+ delete(jarfile);
+ deleteDir(Paths.get(usr, "classes"));
+ }
+
+ /*
+ * Test Infrastructure
+ */
+ private void compile(String test) throws IOException {
+ Path classes = Paths.get(usr, "classes", "base");
+ Files.createDirectories(classes);
+ Path source = Paths.get(src, "data", test, "base", "version");
+ javac(classes, source.resolve("Main.java"), source.resolve("Version.java"));
+
+ classes = Paths.get(usr, "classes", "v9");
+ Files.createDirectories(classes);
+ source = Paths.get(src, "data", test, "v9", "version");
+ javac(classes, source.resolve("Version.java"));
+
+ classes = Paths.get(usr, "classes", "v10");
+ Files.createDirectories(classes);
+ source = Paths.get(src, "data", test, "v10", "version");
+ javac(classes, source.resolve("Version.java"));
+ }
+
+ private void checkMultiRelease(String jarFile, boolean expected) throws IOException {
+ try (JarFile jf = new JarFile(new File(jarFile), true, ZipFile.OPEN_READ,
+ JarFile.Release.RUNTIME)) {
+ assertEquals(jf.isMultiRelease(), expected);
+ }
+ }
+
+ // compares the bytes found in the jar entries with the bytes found in the
+ // corresponding data files used to create the entries
+ private void compare(String jarfile, Map<String,String[]> names) throws IOException {
+ try (JarFile jf = new JarFile(jarfile)) {
+ for (String name : names.keySet()) {
+ Path path = Paths.get("classes", names.get(name));
+ byte[] b1 = Files.readAllBytes(path);
+ byte[] b2;
+ JarEntry je = jf.getJarEntry(name);
+ try (InputStream is = jf.getInputStream(je)) {
+ b2 = is.readAllBytes();
+ }
+ assertEquals(b1,b2);
+ }
+ }
+ }
+
+ private void delete(String name) throws IOException {
+ Files.delete(Paths.get(usr, name));
+ }
+
+ private void deleteDir(Path dir) throws IOException {
+ Files.walkFileTree(dir, new SimpleFileVisitor<Path>() {
+ @Override
+ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
+ Files.delete(file);
+ return FileVisitResult.CONTINUE;
+ }
+
+ @Override
+ public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
+ Files.delete(dir);
+ return FileVisitResult.CONTINUE;
+ }
+ });
+ }
+
+ /*
+ * The following methods were taken from modular jar and other jar tests
+ */
+
+ void javac(Path dest, Path... sourceFiles) throws IOException {
+ String javac = JDKToolFinder.getJDKTool("javac");
+
+ List<String> commands = new ArrayList<>();
+ commands.add(javac);
+ commands.add("-d");
+ commands.add(dest.toString());
+ Stream.of(sourceFiles).map(Object::toString).forEach(x -> commands.add(x));
+
+ quickFail(run(new ProcessBuilder(commands)));
+ }
+
+ Result jarWithStdin(File stdinSource, String... args) {
+ String jar = JDKToolFinder.getJDKTool("jar");
+ List<String> commands = new ArrayList<>();
+ commands.add(jar);
+ Stream.of(args).forEach(x -> commands.add(x));
+ ProcessBuilder p = new ProcessBuilder(commands);
+ if (stdinSource != null)
+ p.redirectInput(stdinSource);
+ return run(p);
+ }
+
+ Result jar(String... args) {
+ return jarWithStdin(null, args);
+ }
+
+ void quickFail(Result r) {
+ if (r.ec != 0)
+ throw new RuntimeException(r.output);
+ }
+
+ Result run(ProcessBuilder pb) {
+ Process p;
+ out.printf("Running: %s%n", pb.command());
+ try {
+ p = pb.start();
+ } catch (IOException e) {
+ throw new RuntimeException(
+ format("Couldn't start process '%s'", pb.command()), e);
+ }
+
+ String output;
+ try {
+ output = toString(p.getInputStream(), p.getErrorStream());
+ } catch (IOException e) {
+ throw new RuntimeException(
+ format("Couldn't read process output '%s'", pb.command()), e);
+ }
+
+ try {
+ p.waitFor();
+ } catch (InterruptedException e) {
+ throw new RuntimeException(
+ format("Process hasn't finished '%s'", pb.command()), e);
+ }
+ return new Result(p.exitValue(), output);
+ }
+
+ String toString(InputStream in1, InputStream in2) throws IOException {
+ try (ByteArrayOutputStream dst = new ByteArrayOutputStream();
+ InputStream concatenated = new SequenceInputStream(in1, in2)) {
+ concatenated.transferTo(dst);
+ return new String(dst.toByteArray(), "UTF-8");
+ }
+ }
+
+ static class Result {
+ final int ec;
+ final String output;
+
+ private Result(int ec, String output) {
+ this.ec = ec;
+ this.output = output;
+ }
+ Result assertSuccess() {
+ assertTrue(ec == 0, format("ec: %d, output: %s", ec, output));
+ return this;
+ }
+ Result assertFailure() {
+ assertTrue(ec != 0, format("ec: %d, output: %s", ec, output));
+ return this;
+ }
+ Result resultChecker(Consumer<Result> r) { r.accept(this); return this; }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/tools/jar/multiRelease/data/test01/base/version/Main.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,8 @@
+package version;
+
+public class Main {
+ public static void main(String[] args) {
+ Version v = new Version();
+ System.out.println("I am running on version " + v.getVersion());
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/tools/jar/multiRelease/data/test01/base/version/Version.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,13 @@
+package version;
+
+public class Version {
+ public int getVersion() {
+ return 8;
+ }
+
+ protected void doNothing() {
+ }
+
+ private void reallyDoNothing() {
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/tools/jar/multiRelease/data/test01/v10/version/Version.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,13 @@
+package version;
+
+public class Version {
+ public int getVersion() {
+ return 10;
+ }
+
+ protected void doNothing() {
+ }
+
+ private void someName() {
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/tools/jar/multiRelease/data/test01/v9/version/Version.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,13 @@
+package version;
+
+public class Version {
+ public int getVersion() {
+ return 9;
+ }
+
+ protected void doNothing() {
+ }
+
+ private void anyName() {
+ }
+}
--- a/jdk/test/tools/jlink/DefaultProviderTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/tools/jlink/DefaultProviderTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -26,7 +26,6 @@
import java.util.Collections;
import java.util.EnumSet;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -34,7 +33,6 @@
import jdk.tools.jlink.plugin.Plugin;
import jdk.tools.jlink.plugin.PluginException;
import jdk.tools.jlink.plugin.ModulePool;
-import jdk.tools.jlink.plugin.TransformerPlugin;
import tests.Helper;
/*
@@ -61,17 +59,10 @@
expectedOptions.put("option2", "value2");
}
- private static class Custom implements TransformerPlugin {
+ private static class Custom implements Plugin {
private boolean enabled = true;
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.TRANSFORMER);
- return Collections.unmodifiableSet(set);
- }
-
- @Override
public Set<State> getState() {
return enabled ? EnumSet.of(State.AUTO_ENABLED, State.FUNCTIONAL)
: EnumSet.of(State.DISABLED);
--- a/jdk/test/tools/jlink/ImageFileCreatorTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/tools/jlink/ImageFileCreatorTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -37,7 +37,7 @@
import jdk.tools.jlink.internal.Archive;
import jdk.tools.jlink.internal.ImageFileCreator;
import jdk.tools.jlink.internal.ImagePluginStack;
-import jdk.tools.jlink.plugin.ExecutableImage;
+import jdk.tools.jlink.internal.ExecutableImage;
import jdk.tools.jlink.builder.ImageBuilder;
import jdk.tools.jlink.plugin.ModulePool;
@@ -220,7 +220,7 @@
};
ImagePluginStack stack = new ImagePluginStack(noopBuilder, Collections.emptyList(),
- null, Collections.emptyList());
+ null);
ImageFileCreator.create(archives, ByteOrder.nativeOrder(), stack);
}
--- a/jdk/test/tools/jlink/ImageFilePoolTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/tools/jlink/ImageFilePoolTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -33,7 +33,7 @@
import java.io.ByteArrayInputStream;
import java.util.Optional;
import java.util.function.Function;
-import jdk.tools.jlink.internal.ModuleEntryImpl;
+import jdk.tools.jlink.internal.ModuleEntryFactory;
import jdk.tools.jlink.internal.ModulePoolImpl;
import jdk.tools.jlink.plugin.ModuleEntry;
import jdk.tools.jlink.plugin.ModulePool;
@@ -54,7 +54,7 @@
ModulePool input = new ModulePoolImpl();
for (int i = 0; i < 1000; ++i) {
String module = "module" + (i / 100);
- input.add(new InMemoryImageFile(module, "/" + module + "/java/class" + i,
+ input.add(newInMemoryImageFile("/" + module + "/java/class" + i,
ModuleEntry.Type.CONFIG, "class" + i));
}
if (input.getEntryCount() != 1000) {
@@ -94,11 +94,11 @@
switch (index) {
case 0:
++amountAfter;
- return new InMemoryImageFile(file.getModule(), file.getPath() + SUFFIX,
+ return newInMemoryImageFile(file.getPath() + SUFFIX,
file.getType(), file.getPath());
case 1:
++amountAfter;
- return new InMemoryImageFile(file.getModule(), file.getPath(),
+ return newInMemoryImageFile(file.getPath(),
file.getType(), file.getPath());
}
return null;
@@ -130,28 +130,27 @@
if (input.findEntry("unknown").isPresent()) {
throw new AssertionError("ImageFileModulePool does not return null for unknown file");
}
- if (input.contains(new InMemoryImageFile("", "unknown", ModuleEntry.Type.CONFIG, "unknown"))) {
- throw new AssertionError("'contain' returns true for unknown file");
+ if (input.contains(newInMemoryImageFile("/unknown/foo", ModuleEntry.Type.CONFIG, "unknown"))) {
+ throw new AssertionError("'contain' returns true for /unknown/foo file");
}
- input.add(new InMemoryImageFile("", "/aaa/bbb", ModuleEntry.Type.CONFIG, ""));
+ input.add(newInMemoryImageFile("/aaa/bbb", ModuleEntry.Type.CONFIG, ""));
try {
- input.add(new InMemoryImageFile("", "/aaa/bbb", ModuleEntry.Type.CONFIG, ""));
+ input.add(newInMemoryImageFile("/aaa/bbb", ModuleEntry.Type.CONFIG, ""));
throw new AssertionError("Exception expected");
} catch (Exception e) {
// expected
}
input.setReadOnly();
try {
- input.add(new InMemoryImageFile("", "/aaa/ccc", ModuleEntry.Type.CONFIG, ""));
+ input.add(newInMemoryImageFile("/aaa/ccc", ModuleEntry.Type.CONFIG, ""));
throw new AssertionError("Exception expected");
} catch (Exception e) {
// expected
}
}
- private static class InMemoryImageFile extends ModuleEntryImpl {
- public InMemoryImageFile(String module, String path, ModuleEntry.Type type, String content) {
- super(module, path, type, new ByteArrayInputStream(content.getBytes()), content.getBytes().length);
- }
+ private static ModuleEntry newInMemoryImageFile(String path,
+ ModuleEntry.Type type, String content) {
+ return ModuleEntryFactory.create(path, type, content.getBytes());
}
}
--- a/jdk/test/tools/jlink/IntegrationTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/tools/jlink/IntegrationTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -34,17 +34,17 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.function.Function;
import jdk.tools.jlink.Jlink;
import jdk.tools.jlink.Jlink.JlinkConfiguration;
import jdk.tools.jlink.Jlink.PluginsConfiguration;
import jdk.tools.jlink.builder.DefaultImageBuilder;
-import jdk.tools.jlink.plugin.ExecutableImage;
import jdk.tools.jlink.plugin.ModulePool;
-import jdk.tools.jlink.plugin.PostProcessorPlugin;
-import jdk.tools.jlink.plugin.TransformerPlugin;
+import jdk.tools.jlink.plugin.Plugin;
+import jdk.tools.jlink.internal.ExecutableImage;
+import jdk.tools.jlink.internal.PostProcessor;
import jdk.tools.jlink.internal.plugins.DefaultCompressPlugin;
import jdk.tools.jlink.internal.plugins.StripDebugPlugin;
-import jdk.tools.jlink.plugin.Plugin;
import tests.Helper;
import tests.JImageGenerator;
@@ -70,7 +70,7 @@
private static final List<Integer> ordered = new ArrayList<>();
- public static class MyPostProcessor implements PostProcessorPlugin {
+ public static class MyPostProcessor implements PostProcessor, Plugin {
public static final String NAME = "mypostprocessor";
@@ -90,19 +90,22 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.PROCESSOR);
- return Collections.unmodifiableSet(set);
+ public Category getType() {
+ return Category.PROCESSOR;
}
@Override
public void configure(Map<String, String> config) {
throw new UnsupportedOperationException("Shouldn't be called");
}
+
+ @Override
+ public void visit(ModulePool in, ModulePool out) {
+ in.transformAndCopy(Function.identity(), out);
+ }
}
- public static class MyPlugin1 implements TransformerPlugin {
+ public static class MyPlugin1 implements Plugin {
Integer index;
Set<String> after;
@@ -139,13 +142,6 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.TRANSFORMER);
- return Collections.unmodifiableSet(set);
- }
-
- @Override
public String getDescription() {
return null;
}
--- a/jdk/test/tools/jlink/JLinkOptimTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/tools/jlink/JLinkOptimTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -9,11 +9,9 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import java.util.stream.Stream;
import jdk.internal.org.objectweb.asm.ClassReader;
import jdk.internal.org.objectweb.asm.Opcodes;
@@ -132,13 +130,6 @@
public String getName() {
return NAME;
}
-
- @Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.TRANSFORMER);
- return Collections.unmodifiableSet(set);
- }
}
private static void testForName() throws Exception {
--- a/jdk/test/tools/jlink/JLinkOptionsTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/tools/jlink/JLinkOptionsTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -26,7 +26,7 @@
import java.util.Set;
import jdk.tools.jlink.plugin.ModulePool;
import jdk.tools.jlink.internal.PluginRepository;
-import jdk.tools.jlink.plugin.TransformerPlugin;
+import jdk.tools.jlink.plugin.Plugin;
import tests.Helper;
@@ -46,7 +46,7 @@
*/
public class JLinkOptionsTest {
- private static class TestPlugin implements TransformerPlugin {
+ private static class TestPlugin implements Plugin {
private final String name;
private final String option;
--- a/jdk/test/tools/jlink/JLinkPostProcessingTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/tools/jlink/JLinkPostProcessingTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -26,14 +26,15 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Collections;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
-import java.util.Set;
+import java.util.function.Function;
+import jdk.tools.jlink.plugin.Plugin;
+import jdk.tools.jlink.plugin.ModulePool;
import jdk.tools.jlink.internal.PluginRepository;
-import jdk.tools.jlink.plugin.ExecutableImage;
-import jdk.tools.jlink.plugin.PostProcessorPlugin;
+import jdk.tools.jlink.internal.PostProcessor;
+import jdk.tools.jlink.internal.ExecutableImage;
import tests.Helper;
/*
@@ -52,7 +53,7 @@
*/
public class JLinkPostProcessingTest {
- private static class PPPlugin implements PostProcessorPlugin {
+ private static class PPPlugin implements PostProcessor, Plugin {
private static ExecutableImage called;
private static final String NAME = "pp";
@@ -70,15 +71,18 @@
}
@Override
+ public void visit(ModulePool in, ModulePool out) {
+ in.transformAndCopy(Function.identity(), out);
+ }
+
+ @Override
public String getName() {
return NAME;
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.PROCESSOR);
- return Collections.unmodifiableSet(set);
+ public Category getType() {
+ return Category.PROCESSOR;
}
@Override
--- a/jdk/test/tools/jlink/JLinkTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/tools/jlink/JLinkTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -24,6 +24,7 @@
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
+import java.lang.module.ModuleDescriptor;
import java.lang.reflect.Layer;
import java.nio.file.Files;
import java.nio.file.Path;
@@ -51,9 +52,20 @@
* jdk.jlink/jdk.tools.jimage
* jdk.compiler
* @build tests.*
- * @run main/othervm -verbose:gc -Xmx1g JLinkTest
+ * @run main/othervm -Xmx1g JLinkTest
*/
public class JLinkTest {
+ // number of built-in plugins from jdk.jlink module
+ private static int getNumJlinkPlugins() {
+ ModuleDescriptor desc = Plugin.class.getModule().getDescriptor();
+ return desc.provides().
+ get(Plugin.class.getName()).
+ providers().size();
+ }
+
+ private static boolean isOfJLinkModule(Plugin p) {
+ return p.getClass().getModule() == Plugin.class.getModule();
+ }
public static void main(String[] args) throws Exception {
@@ -63,18 +75,27 @@
return;
}
helper.generateDefaultModules();
- int numPlugins = 13;
+ // expected num. of plugins from jdk.jlink module
+ int expectedJLinkPlugins = getNumJlinkPlugins();
+ int totalPlugins = 0;
{
// number of built-in plugins
List<Plugin> builtInPlugins = new ArrayList<>();
builtInPlugins.addAll(PluginRepository.getPlugins(Layer.boot()));
+ totalPlugins = builtInPlugins.size();
+ // actual num. of plugins loaded from jdk.jlink module
+ int actualJLinkPlugins = 0;
for (Plugin p : builtInPlugins) {
p.getState();
p.getType();
+ if (isOfJLinkModule(p)) {
+ actualJLinkPlugins++;
+ }
}
- if (builtInPlugins.size() != numPlugins) {
- throw new AssertionError("Found plugins doesn't match expected number : " +
- numPlugins + "\n" + builtInPlugins);
+ if (expectedJLinkPlugins != actualJLinkPlugins) {
+ throw new AssertionError("Actual plugins loaded from jdk.jlink: " +
+ actualJLinkPlugins + " which doesn't match expected number : " +
+ expectedJLinkPlugins);
}
}
@@ -139,9 +160,9 @@
long number = Stream.of(output.split("\\R"))
.filter((s) -> s.matches("Plugin Name:.*"))
.count();
- if (number != numPlugins) {
+ if (number != totalPlugins) {
System.err.println(output);
- throw new AssertionError("Found: " + number + " expected " + numPlugins);
+ throw new AssertionError("Found: " + number + " expected " + totalPlugins);
}
}
--- a/jdk/test/tools/jlink/ResourcePoolTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/tools/jlink/ResourcePoolTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -66,9 +66,7 @@
String module = "/module" + (i / 10);
String resourcePath = module + "/java/package" + i;
byte[] bytes = resourcePath.getBytes();
- input.add(ModuleEntry.create(module, resourcePath,
- ModuleEntry.Type.CLASS_OR_RESOURCE,
- new ByteArrayInputStream(bytes), bytes.length));
+ input.add(ModuleEntry.create(resourcePath, bytes));
}
ModulePool output = new ModulePoolImpl();
ResourceVisitor visitor = new ResourceVisitor();
@@ -103,12 +101,11 @@
switch (index) {
case 0:
++amountAfter;
- return ModuleEntry.create(resource.getModule(), resource.getPath() + SUFFIX,
- resource.getType(), resource.stream(), resource.getLength());
+ return ModuleEntry.create(resource.getPath() + SUFFIX,
+ resource.getType(), resource.getBytes());
case 1:
++amountAfter;
- return ModuleEntry.create(resource.getModule(), resource.getPath(),
- resource.getType(), resource.stream(), resource.getLength());
+ return resource.create(resource.getBytes());
}
return null;
}
@@ -132,9 +129,7 @@
samples.add("javax/management/ObjectName");
test(samples, (resources, module, path) -> {
try {
- resources.add(ModuleEntry.create(module, path,
- ModuleEntry.Type.CLASS_OR_RESOURCE,
- new ByteArrayInputStream(new byte[0]), 0));
+ resources.add(ModuleEntry.create(path, new byte[0]));
} catch (Exception ex) {
throw new RuntimeException(ex);
}
@@ -142,9 +137,7 @@
test(samples, (resources, module, path) -> {
try {
resources.add(ModulePoolImpl.
- newCompressedResource(ModuleEntry.create(module, path,
- ModuleEntry.Type.CLASS_OR_RESOURCE,
- new ByteArrayInputStream(new byte[0]), 0),
+ newCompressedResource(ModuleEntry.create(path, new byte[0]),
ByteBuffer.allocate(99), "bitcruncher", null,
((ModulePoolImpl)resources).getStringTable(), ByteOrder.nativeOrder()));
} catch (Exception ex) {
@@ -203,20 +196,14 @@
private void checkResourcesAfterCompression() throws Exception {
ModulePoolImpl resources1 = new ModulePoolImpl();
- ModuleEntry res1 = ModuleEntry.create("module1", "/module1/toto1",
- ModuleEntry.Type.CLASS_OR_RESOURCE,
- new ByteArrayInputStream(new byte[0]), 0);
- ModuleEntry res2 = ModuleEntry.create("module2", "/module2/toto1",
- ModuleEntry.Type.CLASS_OR_RESOURCE,
- new ByteArrayInputStream(new byte[0]), 0);
+ ModuleEntry res1 = ModuleEntry.create("/module1/toto1", new byte[0]);
+ ModuleEntry res2 = ModuleEntry.create("/module2/toto1", new byte[0]);
resources1.add(res1);
resources1.add(res2);
checkResources(resources1, res1, res2);
ModulePool resources2 = new ModulePoolImpl();
- ModuleEntry res3 = ModuleEntry.create("module2", "/module2/toto1",
- ModuleEntry.Type.CLASS_OR_RESOURCE,
- new ByteArrayInputStream(new byte[7]), 7);
+ ModuleEntry res3 = ModuleEntry.create("/module2/toto1", new byte[7]);
resources2.add(res3);
resources2.add(ModulePoolImpl.newCompressedResource(res1,
ByteBuffer.allocate(7), "zip", null, resources1.getStringTable(),
@@ -260,8 +247,7 @@
((ModulePoolImpl) resources).setReadOnly();
try {
- resources.add(ModuleEntry.create("module2", "/module2/toto1",
- ModuleEntry.Type.CLASS_OR_RESOURCE, new ByteArrayInputStream(new byte[0]), 0));
+ resources.add(ModuleEntry.create("/module2/toto1", new byte[0]));
throw new AssertionError("ModulePool is read-only, but an exception is not thrown");
} catch (Exception ex) {
// Expected
--- a/jdk/test/tools/jlink/customplugin/module-info.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/tools/jlink/customplugin/module-info.java Fri Jul 01 16:55:44 2016 -0700
@@ -23,6 +23,6 @@
module customplugin {
requires jdk.jlink;
- provides jdk.tools.jlink.plugin.TransformerPlugin with plugin.HelloPlugin;
- provides jdk.tools.jlink.plugin.TransformerPlugin with plugin.CustomPlugin;
+ provides jdk.tools.jlink.plugin.Plugin with plugin.HelloPlugin;
+ provides jdk.tools.jlink.plugin.Plugin with plugin.CustomPlugin;
}
--- a/jdk/test/tools/jlink/customplugin/plugin/CustomPlugin.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/tools/jlink/customplugin/plugin/CustomPlugin.java Fri Jul 01 16:55:44 2016 -0700
@@ -23,15 +23,13 @@
package plugin;
import java.util.Collections;
-import java.util.HashSet;
import java.util.Map;
-import java.util.Set;
import java.util.function.Function;
import jdk.tools.jlink.plugin.ModuleEntry;
import jdk.tools.jlink.plugin.ModulePool;
-import jdk.tools.jlink.plugin.TransformerPlugin;
+import jdk.tools.jlink.plugin.Plugin;
-public class CustomPlugin implements TransformerPlugin {
+public class CustomPlugin implements Plugin {
private final static String NAME = "custom-plugin";
@@ -58,9 +56,7 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.PROCESSOR);
- return Collections.unmodifiableSet(set);
+ public Category getType() {
+ return Category.PROCESSOR;
}
}
--- a/jdk/test/tools/jlink/customplugin/plugin/HelloPlugin.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/tools/jlink/customplugin/plugin/HelloPlugin.java Fri Jul 01 16:55:44 2016 -0700
@@ -26,17 +26,15 @@
import java.io.IOException;
import java.io.UncheckedIOException;
import java.util.Collections;
-import java.util.HashSet;
import java.util.Map;
-import java.util.Set;
import jdk.tools.jlink.plugin.ModuleEntry;
import jdk.tools.jlink.plugin.ModulePool;
-import jdk.tools.jlink.plugin.TransformerPlugin;
+import jdk.tools.jlink.plugin.Plugin;
/**
* Custom plugin
*/
-public final class HelloPlugin implements TransformerPlugin {
+public final class HelloPlugin implements Plugin {
private static final String OUTPUT_FILE = "customplugin.txt";
public static final String NAME = "hello";
@@ -63,13 +61,6 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.TRANSFORMER);
- return Collections.unmodifiableSet(set);
- }
-
- @Override
public String getDescription() {
return NAME + "-description";
}
--- a/jdk/test/tools/jlink/plugins/CompressorPluginTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/tools/jlink/plugins/CompressorPluginTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -61,7 +61,6 @@
import jdk.tools.jlink.plugin.Plugin;
import jdk.tools.jlink.plugin.ModuleEntry;
import jdk.tools.jlink.plugin.ModulePool;
-import jdk.tools.jlink.plugin.TransformerPlugin;
public class CompressorPluginTest {
@@ -279,9 +278,8 @@
ModulePoolImpl inputResources,
ModuleEntry res,
List<Pattern> includesPatterns) {
- TransformerPlugin compressor = (TransformerPlugin) plugin;
ModulePool compressedModulePool = new ModulePoolImpl(ByteOrder.nativeOrder(), inputResources.getStringTable());
- compressor.visit(inputResources, compressedModulePool);
+ plugin.visit(inputResources, compressedModulePool);
String path = res.getPath();
ModuleEntry compressed = compressedModulePool.findEntry(path).get();
CompressedResourceHeader header
--- a/jdk/test/tools/jlink/plugins/ExcludeFilesPluginTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/tools/jlink/plugins/ExcludeFilesPluginTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -40,7 +40,6 @@
import jdk.tools.jlink.internal.plugins.ExcludeFilesPlugin;
import jdk.tools.jlink.plugin.ModuleEntry;
import jdk.tools.jlink.plugin.ModulePool;
-import jdk.tools.jlink.plugin.TransformerPlugin;
public class ExcludeFilesPluginTest {
public static void main(String[] args) throws Exception {
@@ -74,8 +73,8 @@
fplug.configure(prop);
ModulePoolImpl files = new ModulePoolImpl();
ModulePoolImpl fresult = new ModulePoolImpl();
- ModuleEntry f = ModuleEntry.create(module, "/" + module + "/" + sample,
- ModuleEntry.Type.CONFIG, new ByteArrayInputStream(new byte[0]), 0);
+ ModuleEntry f = ModuleEntry.create("/" + module + "/" + sample,
+ ModuleEntry.Type.CONFIG, new byte[0]);
files.add(f);
fplug.visit(files, fresult);
--- a/jdk/test/tools/jlink/plugins/ExcludePluginTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/tools/jlink/plugins/ExcludePluginTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -48,16 +48,16 @@
public void test() throws Exception {
check("**.jcov", "/num/toto.jcov", true);
- check("**.jcov", "//toto.jcov", true);
+ check("**.jcov", "/toto.jcov/", true);
check("**.jcov", "/toto.jcov/tutu/tata", false);
check("/java.base/*.jcov", "/java.base/toto.jcov", true);
- check("/java.base/toto.jcov", "t/java.base/iti.jcov", false);
+ check("/java.base/toto.jcov", "/tjava.base/iti.jcov", false);
check("/java.base/*/toto.jcov", "/java.base/toto.jcov", false);
check("/java.base/*/toto.jcov", "/java.base/tutu/toto.jcov", true);
check("**/java.base/*/toto.jcov", "/tutu/java.base/tutu/toto.jcov", true);
check("/META-INF/**", "/META-INF/services/ MyProvider ", true);
check("/META-INF/**", "/META-INF/services/MyProvider", true);
- check("**/META-INF", " /META-INF/services/MyProvider", false);
+ check("**/META-INF", "/ META-INF/services/MyProvider", false);
check("**/META-INF/**", "/java.base//META-INF/services/MyProvider", true);
check("/java.base/*/Toto$Titi.class", "/java.base/tutu/Toto$Titi.class", true);
check("/**$**.class", "/java.base/tutu/Toto$Titi.class", true);
--- a/jdk/test/tools/jlink/plugins/ExcludeVMPluginTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/tools/jlink/plugins/ExcludeVMPluginTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -38,7 +38,6 @@
import jdk.tools.jlink.plugin.Plugin;
import jdk.tools.jlink.plugin.ModulePool;
import jdk.tools.jlink.plugin.ModuleEntry;
-import jdk.tools.jlink.plugin.TransformerPlugin;
public class ExcludeVMPluginTest {
@@ -165,15 +164,15 @@
// Create a pool with jvm.cfg and the input paths.
byte[] jvmcfgContent = jvmcfg.getBytes();
ModulePool pool = new ModulePoolImpl();
- pool.add(ModuleEntry.create("java.base", "/java.base/native/jvm.cfg",
- ModuleEntry.Type.NATIVE_LIB, new ByteArrayInputStream(jvmcfgContent), jvmcfgContent.length));
+ pool.add(ModuleEntry.create("/java.base/native/jvm.cfg",
+ ModuleEntry.Type.NATIVE_LIB, jvmcfgContent));
for (String in : input) {
- pool.add(ModuleEntry.create("java.base", in,
- ModuleEntry.Type.NATIVE_LIB, new ByteArrayInputStream(new byte[0]), 0));
+ pool.add(ModuleEntry.create(in,
+ ModuleEntry.Type.NATIVE_LIB, new byte[0]));
}
ModulePool out = new ModulePoolImpl();
- TransformerPlugin p = new ExcludeVMPlugin();
+ Plugin p = new ExcludeVMPlugin();
Map<String, String> config = new HashMap<>();
if (vm != null) {
config.put(ExcludeVMPlugin.NAME, vm);
--- a/jdk/test/tools/jlink/plugins/LastSorterTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/tools/jlink/plugins/LastSorterTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -33,10 +33,8 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import jdk.tools.jlink.internal.ImagePluginConfiguration;
import jdk.tools.jlink.internal.PluginRepository;
@@ -47,7 +45,6 @@
import jdk.tools.jlink.plugin.Plugin;
import jdk.tools.jlink.plugin.ModuleEntry;
import jdk.tools.jlink.plugin.ModulePool;
-import jdk.tools.jlink.plugin.TransformerPlugin;
public class LastSorterTest {
@@ -169,7 +166,7 @@
}
}
- public static class SorterPlugin implements TransformerPlugin {
+ public static class SorterPlugin implements Plugin {
private final String name;
private String starts;
@@ -200,13 +197,6 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.TRANSFORMER);
- return Collections.unmodifiableSet(set);
- }
-
- @Override
public void configure(Map<String, String> config) {
String arguments = config.get(name);
this.starts = arguments;
--- a/jdk/test/tools/jlink/plugins/OrderResourcesPluginTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/tools/jlink/plugins/OrderResourcesPluginTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -42,7 +42,7 @@
import jdk.tools.jlink.internal.plugins.OrderResourcesPlugin;
import jdk.tools.jlink.plugin.ModuleEntry;
import jdk.tools.jlink.plugin.ModulePool;
-import jdk.tools.jlink.plugin.TransformerPlugin;
+import jdk.tools.jlink.plugin.Plugin;
public class OrderResourcesPluginTest {
@@ -93,7 +93,7 @@
ModulePool out = new ModulePoolImpl();
Map<String, String> config = new HashMap<>();
config.put(OrderResourcesPlugin.NAME, "/zazou/**,**/module-info.class");
- TransformerPlugin p = new OrderResourcesPlugin();
+ Plugin p = new OrderResourcesPlugin();
p.configure(config);
p.visit(resources, out);
check(out.entries().collect(Collectors.toList()), sorted);
@@ -116,7 +116,7 @@
ModulePool out = new ModulePoolImpl();
Map<String, String> config = new HashMap<>();
config.put(OrderResourcesPlugin.NAME, "@" + order.getAbsolutePath());
- TransformerPlugin p = new OrderResourcesPlugin();
+ Plugin p = new OrderResourcesPlugin();
p.configure(config);
p.visit(resources, out);
check(out.entries().collect(Collectors.toList()), sorted2);
--- a/jdk/test/tools/jlink/plugins/PluginOrderTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/tools/jlink/plugins/PluginOrderTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -46,7 +46,6 @@
import jdk.tools.jlink.plugin.Plugin;
import jdk.tools.jlink.plugin.Plugin.Category;
import jdk.tools.jlink.plugin.ModulePool;
-import jdk.tools.jlink.plugin.TransformerPlugin;
public class PluginOrderTest {
@@ -225,7 +224,7 @@
PluginOrderingGraph.sort(plugins);
}
- private static class Plug implements TransformerPlugin {
+ private static class Plug implements Plugin {
private final Set<String> isBefore;
private final Set<String> isAfter;
@@ -260,8 +259,8 @@
}
@Override
- public Set<Category> getType() {
- return Collections.singleton(category);
+ public Category getType() {
+ return category;
}
@Override
--- a/jdk/test/tools/jlink/plugins/PluginsNegativeTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/tools/jlink/plugins/PluginsNegativeTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -32,10 +32,8 @@
import java.lang.reflect.Layer;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import jdk.tools.jlink.internal.ImagePluginConfiguration;
import jdk.tools.jlink.internal.PluginRepository;
@@ -46,7 +44,6 @@
import jdk.tools.jlink.plugin.Plugin;
import jdk.tools.jlink.plugin.ModuleEntry;
import jdk.tools.jlink.plugin.ModulePool;
-import jdk.tools.jlink.plugin.TransformerPlugin;
public class PluginsNegativeTest {
@@ -119,7 +116,7 @@
}
}
- public static class CustomPlugin implements TransformerPlugin {
+ public static class CustomPlugin implements Plugin {
private final String name;
@@ -138,13 +135,6 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.TRANSFORMER);
- return Collections.unmodifiableSet(set);
- }
-
- @Override
public String getDescription() {
return null;
}
--- a/jdk/test/tools/jlink/plugins/PrevisitorTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/tools/jlink/plugins/PrevisitorTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -34,11 +34,9 @@
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
-import java.util.Set;
import java.util.stream.Collectors;
import jdk.tools.jlink.internal.ImagePluginConfiguration;
@@ -51,7 +49,6 @@
import jdk.tools.jlink.plugin.Plugin;
import jdk.tools.jlink.plugin.ModuleEntry;
import jdk.tools.jlink.plugin.ModulePool;
-import jdk.tools.jlink.plugin.TransformerPlugin;
public class PrevisitorTest {
@@ -109,7 +106,7 @@
}
}
- private static class CustomPlugin implements TransformerPlugin, ResourcePrevisitor {
+ private static class CustomPlugin implements Plugin, ResourcePrevisitor {
private static String NAME = "plugin";
@@ -160,12 +157,5 @@
}
});
}
-
- @Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.TRANSFORMER);
- return Collections.unmodifiableSet(set);
- }
}
}
--- a/jdk/test/tools/jlink/plugins/StringSharingPluginTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/tools/jlink/plugins/StringSharingPluginTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -57,7 +57,7 @@
import jdk.tools.jlink.internal.plugins.StringSharingPlugin;
import jdk.tools.jlink.plugin.ModuleEntry;
import jdk.tools.jlink.plugin.ModulePool;
-import jdk.tools.jlink.plugin.TransformerPlugin;
+import jdk.tools.jlink.plugin.Plugin;
import tests.Helper;
import tests.JImageValidator;
@@ -106,6 +106,9 @@
byte[] content = Files.readAllBytes(p);
String path = p.toString().replace('\\', '/');
path = path.substring("/modules".length());
+ if (path.charAt(0) != '/') {
+ path = "/" + path;
+ }
ModuleEntry res = ModuleEntry.create(path, content);
resources.add(res);
} catch (Exception ex) {
@@ -116,7 +119,7 @@
try (java.util.stream.Stream<Path> stream = Files.walk(compiledClasses)) {
stream.forEach(c);
}
- TransformerPlugin plugin = new StringSharingPlugin();
+ Plugin plugin = new StringSharingPlugin();
ModulePoolImpl result = new ModulePoolImpl(resources.getByteOrder(), resources.getStringTable());
plugin.visit(resources, result);
--- a/jdk/test/tools/jlink/plugins/StripDebugPluginTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/tools/jlink/plugins/StripDebugPluginTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -58,7 +58,7 @@
import jdk.tools.jlink.internal.plugins.StripDebugPlugin;
import jdk.tools.jlink.plugin.ModuleEntry;
import jdk.tools.jlink.plugin.ModulePool;
-import jdk.tools.jlink.plugin.TransformerPlugin;
+import jdk.tools.jlink.plugin.Plugin;
import tests.Helper;
public class StripDebugPluginTest {
@@ -124,7 +124,7 @@
checkDebugAttributes(result1.getBytes());
}
- private ModuleEntry stripDebug(TransformerPlugin debug, ModuleEntry classResource,
+ private ModuleEntry stripDebug(Plugin debug, ModuleEntry classResource,
String path, String infoPath, byte[] moduleInfo) throws Exception {
ModulePool resources = new ModulePoolImpl();
resources.add(classResource);
--- a/jdk/test/tools/launcher/Arrrghs.java Fri Jul 01 12:32:21 2016 +0200
+++ b/jdk/test/tools/launcher/Arrrghs.java Fri Jul 01 16:55:44 2016 -0700
@@ -24,7 +24,7 @@
/**
* @test
* @bug 5030233 6214916 6356475 6571029 6684582 6742159 4459600 6758881 6753938
- * 6894719 6968053 7151434 7146424 8007333 8077822
+ * 6894719 6968053 7151434 7146424 8007333 8077822 8143640
* @summary Argument parsing validation.
* @compile -XDignore.symbol.file Arrrghs.java
* @run main/othervm Arrrghs
@@ -197,6 +197,8 @@
// more treatment of mixed slashes
checkArgumentParsing("f1/ f3\\ f4/", "f1/", "f3\\", "f4/");
checkArgumentParsing("f1/ f2\' ' f3/ f4/", "f1/", "f2\'", "'", "f3/", "f4/");
+
+ checkArgumentParsing("a\\*\\b", "a\\*\\b");
}
private void initEmptyDir(File emptyDir) throws IOException {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/tools/launcher/modules/dryrun/DryRunTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,214 @@
+/*
+ * 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 8159596
+ * @library /lib/testlibrary
+ * @modules jdk.compiler
+ * jdk.jartool/sun.tools.jar
+ * @build DryRunTest CompilerUtils jdk.testlibrary.ProcessTools
+ * @run testng DryRunTest
+ * @summary Test java --dry-run
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import jdk.testlibrary.ProcessTools;
+
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+import static org.testng.Assert.*;
+
+
+@Test
+public class DryRunTest {
+
+ private static final String TEST_SRC = System.getProperty("test.src");
+
+ private static final Path SRC_DIR = Paths.get(TEST_SRC, "src");
+ private static final Path MODS_DIR = Paths.get("mods");
+ private static final Path LIBS_DIR = Paths.get("libs");
+
+ // the module name of the test module
+ private static final String TEST_MODULE = "test";
+ private static final String M_MODULE = "m";
+
+ // the module main class
+ private static final String MAIN_CLASS = "jdk.test.Main";
+ private static final String MAIN_CLINIT_CLASS = "jdk.test.MainWithClinit";
+
+
+ @BeforeTest
+ public void compileTestModule() throws Exception {
+
+ // javac -d mods/$TESTMODULE src/$TESTMODULE/**
+ assertTrue(CompilerUtils.compile(SRC_DIR.resolve(M_MODULE),
+ MODS_DIR,
+ "-modulesourcepath", SRC_DIR.toString()));
+
+ assertTrue(CompilerUtils.compile(SRC_DIR.resolve(TEST_MODULE),
+ MODS_DIR,
+ "-modulesourcepath", SRC_DIR.toString()));
+
+ Files.createDirectories(LIBS_DIR);
+
+ // create JAR files with no module-info.class
+ assertTrue(jar(M_MODULE, "p/Lib.class"));
+ assertTrue(jar(TEST_MODULE, "jdk/test/Main.class"));
+ }
+
+ /**
+ * Execute "java" with the given arguments, returning the exit code.
+ */
+ private int exec(String... args) throws Exception {
+ return ProcessTools.executeTestJava(args)
+ .outputTo(System.out)
+ .errorTo(System.out)
+ .getExitValue();
+ }
+
+
+ /**
+ * Launch module main
+ */
+ public void testModule() throws Exception {
+ String dir = MODS_DIR.toString();
+ String mid = TEST_MODULE + "/" + MAIN_CLASS;
+
+ // no resolution failure
+ int exitValue = exec("--dry-run", "-modulepath", dir, "-m", mid);
+ assertTrue(exitValue == 0);
+ }
+
+ /**
+ * Test dryrun that does not invoke <clinit> 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 {
+ String dir = MODS_DIR.toString();
+ String mid = TEST_MODULE + "/" + MAIN_CLASS;
+
+ int exitValue = exec("--dry-run", "-modulepath", dir,
+ "-addmods", "non.existence",
+ "-m", mid);
+ assertTrue(exitValue != 0);
+ }
+
+ /**
+ * Launch main class from class path
+ */
+ public void testClassPath() throws Exception {
+ Path testJar = LIBS_DIR.resolve(TEST_MODULE + ".jar");
+ String libs = testJar.toString() + File.pathSeparator +
+ LIBS_DIR.resolve(M_MODULE + ".jar").toString();
+
+ // test pass with m.jar:test.jar
+ int exitValue = exec("-classpath", libs, MAIN_CLASS);
+ assertTrue(exitValue == 0);
+
+ // m.jar is not on classpath and fails with p.Lib not found
+ exitValue = exec("-classpath", testJar.toString(), MAIN_CLASS);
+ assertTrue(exitValue != 0);
+
+ // dry pass passes since main is not executed
+ exitValue = exec("--dry-run", "-classpath", testJar.toString(), MAIN_CLASS);
+ assertTrue(exitValue == 0);
+ }
+
+ /**
+ * Test automatic modules
+ */
+ public void testAutomaticModule() throws Exception {
+ String libs = LIBS_DIR.resolve(M_MODULE + ".jar").toString() +
+ File.pathSeparator +
+ LIBS_DIR.resolve(TEST_MODULE + ".jar").toString();
+ String mid = TEST_MODULE + "/" + MAIN_CLASS;
+
+ // test main method with and without -addmods mm
+ int exitValue = exec("-modulepath", LIBS_DIR.toString(),
+ "-m", mid);
+ assertTrue(exitValue != 0);
+
+ exitValue = exec("-modulepath", LIBS_DIR.toString(),
+ "-addmods", M_MODULE,
+ "-m", mid);
+ assertTrue(exitValue == 0);
+
+ // test dry run with and without -addmods m
+ // no resolution failure
+ exitValue = exec("--dry-run", "-modulepath", LIBS_DIR.toString(),
+ "-m", mid);
+ assertTrue(exitValue == 0);
+
+ exitValue = exec("--dry-run", "-modulepath", LIBS_DIR.toString(),
+ "-addmods", M_MODULE,
+ "-m", mid);
+ assertTrue(exitValue == 0);
+ }
+
+ /**
+ * module m not found
+ */
+ public void testMissingModule() throws Exception {
+ String subdir = MODS_DIR.resolve(TEST_MODULE).toString();
+ String mid = TEST_MODULE + "/" + MAIN_CLASS;
+
+ // resolution failure
+ int exitValue = exec("--dry-run", "-modulepath", subdir, "-m", mid);
+ assertTrue(exitValue != 0);
+ }
+
+ private static boolean jar(String name, String entries) throws IOException {
+ Path jar = LIBS_DIR.resolve(name + ".jar");
+
+ // jar --create ...
+ String classes = MODS_DIR.resolve(name).toString();
+ String[] args = {
+ "--create",
+ "--file=" + jar,
+ "-C", classes, entries
+ };
+ boolean success
+ = new sun.tools.jar.Main(System.out, System.out, "jar").run(args);
+ return success;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/tools/launcher/modules/dryrun/src/m/module-info.java Fri Jul 01 16:55:44 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.
+ */
+
+module m {
+ exports p;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/tools/launcher/modules/dryrun/src/m/p/Lib.java Fri Jul 01 16:55:44 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 p;
+
+public class Lib {
+ public static void sayHi() {
+ System.out.println("Hello world");
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/tools/launcher/modules/dryrun/src/test/jdk/test/Main.java Fri Jul 01 16:55:44 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 jdk.test;
+
+public class Main {
+ public static void main(String[] args) {
+ p.Lib.sayHi();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/tools/launcher/modules/dryrun/src/test/jdk/test/MainWithClinit.java Fri Jul 01 16:55:44 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::<clinit> invoked");
+ }
+
+ public static void main(String[] args) {
+ System.out.println("hi");
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/tools/launcher/modules/dryrun/src/test/module-info.java Fri Jul 01 16:55:44 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.
+ */
+
+module test {
+ requires m;
+}
--- a/langtools/.hgtags Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/.hgtags Fri Jul 01 16:55:44 2016 -0700
@@ -366,3 +366,5 @@
095bd53bdd1ef211a473553a95ee625fcfbc3f59 jdk-9+121
203a9e1b82b6cc7918f96a92e5a7eb28eafcdd18 jdk-9+122
d0c742ddfb01ebe427720798c4c8335023ae20f8 jdk-9+123
+26aa3caa778eab1c931910149c414783ee83bce7 jdk-9+124
+2d65e127e93d5ff0df61bf78e57d7f46a2f1edeb jdk-9+125
--- a/langtools/make/build.xml Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/make/build.xml Fri Jul 01 16:55:44 2016 -0700
@@ -235,7 +235,10 @@
<target name="idea" depends="-check-langtools.jdk.home">
<mkdir dir=".idea"/>
<copy todir=".idea" >
- <fileset dir="make/intellij" excludes="**/src/**"/>
+ <fileset dir="make/intellij">
+ <exclude name="**/src/**"/>
+ <exclude name="**/utils/**"/>
+ </fileset>
</copy>
<condition property="idea.jtreg.home" value="${jtreg.home}" else = "[jtreg.home]">
<isset property="jtreg.home"/>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/make/diags-examples.xml Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<!--
+This is an extension to the langtools make/build.xml file,
+that provides targets to run the examples that generate
+example diagnostics in different locales.
+
+Usage:
+ ant -f langtools/make/run-examples.xml -Dlangtools.jdk.home=<JDK>
+
+By default, the reports will be generated in langtools/build/diags-examples/report/.
+-->
+
+<project name="diags-examples" default="diags-examples" basedir="..">
+ <import file="build.xml"/>
+
+ <!-- specify working directory for the tool -->
+ <property name="diags.examples.dir" location="${build.dir}/diag-examples"/>
+
+ <!-- compiled classes for the tool -->
+ <property name="diags.examples.classes" location="${diags.examples.dir}/classes}"/>
+
+ <!-- directory for generated reports -->
+ <property name="diags.examples.report" location="${diags.examples.dir}/report"/>
+
+ <!-- default target, generates reports for all available locales -->
+ <target name="diags-examples" depends="run-en_US,run-ja,run-zh_CN"/>
+
+ <!-- generate report for US English locale -->
+ <target name="run-en_US" depends="-build-runner,-def-runner">
+ <mkdir dir="${diags.examples.report}"/>
+ <runner lang="en" country="US" outfile="${diags.examples.report}/en_US.html"/>
+ </target>
+
+ <!-- generate report for Japanese locale -->
+ <target name="run-ja" depends="-build-runner,-def-runner">
+ <mkdir dir="${diags.examples.report}"/>
+ <runner lang="ja" outfile="${diags.examples.report}/ja.html"/>
+ </target>
+
+ <!-- generate report for Mandarin Chinese locale -->
+ <target name="run-zh_CN" depends="-build-runner,-def-runner">
+ <mkdir dir="${diags.examples.report}"/>
+ <runner lang="zh" country="CN" outfile="${diags.examples.report}/zh_CN.html"/>
+ </target>
+
+ <!-- compile the tool that runs the examples -->
+ <target name="-build-runner" depends="build">
+ <mkdir dir="${diags.examples.classes}"/>
+ <javac fork="true"
+ executable="${build.bin}/javac"
+ srcdir="test/tools/javac/diags"
+ destdir="${diags.examples.classes}"
+ includes="ArgTypeCompilerFactory.java,Example.java,FileManager.java,HTMLWriter.java,RunExamples.java,DocCommentProcessor.java"
+ sourcepath=""
+ includeAntRuntime="no"
+ debug="${javac.debug}"
+ debuglevel="${javac.debuglevel}">
+ <compilerarg line="-XaddExports:jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED"/>
+ <compilerarg line="-XaddExports:jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED"/>
+ <compilerarg line="-XaddExports:jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED"/>
+ <compilerarg line="-XaddExports:jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED"/>
+ <compilerarg line="-XaddExports:jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED"/>
+ <compilerarg line="-XaddExports:jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED"/>
+ </javac>
+ </target>
+
+ <!-- define a task to run the tool that runs the examples -->
+ <target name="-def-runner">
+ <macrodef name="runner">
+ <attribute name="lang"/>
+ <attribute name="country" default=""/>
+ <attribute name="outfile"/>
+ <sequential>
+ <java fork="true"
+ jvm="${langtools.jdk.home}/bin/java"
+ dir="test/tools/javac/diags"
+ classpath="${diags.examples.classes};${dist.lib.dir}/javac.jar;${dist.lib.dir}/javap.jar"
+ classname="RunExamples">
+ <jvmarg value="-Duser.language=@{lang}"/>
+ <jvmarg value="-Duser.country=@{country}"/>
+ <jvmarg value="-Dtest.classes=${diags.examples.classes}"/>
+ <arg value="-examples"/>
+ <arg value="examples"/>
+ <arg value="-o"/>
+ <arg file="@{outfile}"/>
+ <arg value="-showFiles"/>
+ <arg value="-title"/>
+ <arg value="Examples of javac diagnostics"/>
+ <jvmarg line="-XaddExports:jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED"/>
+ <jvmarg line="-XaddExports:jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED"/>
+ <jvmarg line="-XaddExports:jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED"/>
+ <jvmarg line="-XaddExports:jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED"/>
+ <jvmarg line="-XaddExports:jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED"/>
+ <jvmarg line="-XaddExports:jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED"/>
+ </java>
+ </sequential>
+ </macrodef>
+ </target>
+</project>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/make/intellij/utils/jtreg-live-templates.xml Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,25 @@
+<!--
+The following live template declarations allow for automatic generation of jtreg test headers.
+Unfortunately, live templates cannot be shared on a per project base, but they can be easily imported
+by cutting and paste the following lines inside IntelliJ LiveTemplate settings (this will need to be done only once).
+-->
+
+<template name="@test" value="@test * @bug $BUG_ID$ * @summary $BUG_SUMMARY$ * $JTREG_ACTION$ $FILE_NAME$" description="jtreg header (positive test)" toReformat="false" toShortenFQNames="true">
+ <variable name="BUG_ID" expression="groovyScript("_1 ==~ /T\\d{7}/ ? _1.substring(1).take(7) : 'NNNNNNN'", fileNameWithoutExtension())" defaultValue="" alwaysStopAt="true" />
+ <variable name="BUG_SUMMARY" expression=""Bug summary"" defaultValue="" alwaysStopAt="true" />
+ <variable name="JTREG_ACTION" expression=""@compile"" defaultValue="" alwaysStopAt="true" />
+ <variable name="FILE_NAME" expression="fileName()" defaultValue="" alwaysStopAt="true" />
+ <context>
+ <option name="JAVA_COMMENT" value="true" />
+ </context>
+</template>
+<template name="@test /nodynamiccopyright/" value="@test * @bug $BUG_ID$ * @summary $BUG_SUMMARY$ * $JTREG_ACTION$/fail/ref=$GOLDEN_NAME$ -XDrawDiagnostics $FILE_NAME$" description="jtreg header (negative test)" toReformat="false" toShortenFQNames="true">
+ <variable name="BUG_ID" expression="groovyScript("_1 ==~ /T\\d{7}/ ? _1.substring(1).take(7) : 'NNNNNNN'", fileNameWithoutExtension())" defaultValue="NNNNNNN" alwaysStopAt="true" />
+ <variable name="BUG_SUMMARY" expression=""Bug summary"" defaultValue="" alwaysStopAt="true" />
+ <variable name="JTREG_ACTION" expression=""@compile"" defaultValue="" alwaysStopAt="true" />
+ <variable name="GOLDEN_NAME" expression="groovyScript("_1 + '.out'", fileNameWithoutExtension())" defaultValue="out.txt" alwaysStopAt="true" />
+ <variable name="FILE_NAME" expression="fileName()" defaultValue="" alwaysStopAt="true" />
+ <context>
+ <option name="JAVA_COMMENT" value="true" />
+ </context>
+</template>
--- a/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractAnnotationValueVisitor6.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractAnnotationValueVisitor6.java Fri Jul 01 16:55:44 2016 -0700
@@ -113,7 +113,7 @@
/**
* {@inheritDoc}
*
- * <p>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);
}
--- a/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractElementVisitor6.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractElementVisitor6.java Fri Jul 01 16:55:44 2016 -0700
@@ -118,25 +118,28 @@
/**
* {@inheritDoc}
*
- * <p> 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}
--- a/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitor6.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitor6.java Fri Jul 01 16:55:44 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}
*
- * <p> 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);
}
--- a/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitor7.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitor7.java Fri Jul 01 16:55:44 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);
}
--- a/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitor8.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitor8.java Fri Jul 01 16:55:44 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);
}
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symbol.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symbol.java Fri Jul 01 16:55:44 2016 -0700
@@ -1367,6 +1367,10 @@
t.interfaces_field = null;
t.all_interfaces_field = null;
}
+ clearAnnotationMetadata();
+ }
+
+ public void clearAnnotationMetadata() {
metadata = null;
annotationTypeMetadata = AnnotationTypeMetadata.notAnAnnotationType();
}
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java Fri Jul 01 16:55:44 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
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Enter.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Enter.java Fri Jul 01 16:55:44 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;
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/InferenceContext.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/InferenceContext.java Fri Jul 01 16:55:44 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.</b>
*/
-class InferenceContext {
+public class InferenceContext {
/** list of inference vars as undet vars */
List<Type> undetvars;
@@ -112,6 +112,13 @@
}
/**
+ * returns the list of undetermined variables in this inference context
+ */
+ public List<Type> 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<Type> save() {
+ public List<Type> save() {
ListBuffer<Type> 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<Type> saved_undet) {
+ public void rollback(List<Type> saved_undet) {
Assert.check(saved_undet != null);
//restore bounds (note: we need to preserve the old instances)
ListBuffer<Type> newUndetVars = new ListBuffer<>();
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java Fri Jul 01 16:55:44 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<RequiresFlag> 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<ModuleSymbol> readable = new LinkedHashSet<>();
Set<ModuleSymbol> requiresPublic = new HashSet<>();
- if ((msym.flags() & Flags.AUTOMATIC_MODULE) == 0) {
- for (RequiresDirective d : msym.requires) {
- d.module.complete();
- readable.add(d.module);
- Set<ModuleSymbol> 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<ModuleSymbol> 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<ModuleSymbol> 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) {
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java Fri Jul 01 16:55:44 2016 -0700
@@ -241,7 +241,14 @@
public final List<Env<AttrContext>> completeEnvs(List<Env<AttrContext>> envs) {
boolean firstToComplete = queue.isEmpty();
- doCompleteEnvs(envs);
+ Phase prevTopLevelPhase = topLevelPhase;
+
+ try {
+ topLevelPhase = this;
+ doCompleteEnvs(envs);
+ } finally {
+ topLevelPhase = prevTopLevelPhase;
+ }
if (firstToComplete) {
List<Env<AttrContext>> 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<AttrContext> env = typeEnvs.get((ClassSymbol) sym);
super.doCompleteEnvs(List.of(env));
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/BaseFileManager.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/BaseFileManager.java Fri Jul 01 16:55:44 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;
}
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java Fri Jul 01 16:55:44 2016 -0700
@@ -1039,7 +1039,8 @@
if (start_pc == 0) {
// ensure array large enough
if (register >= parameterNameIndices.length) {
- int newSize = Math.max(register, parameterNameIndices.length + 8);
+ int newSize =
+ Math.max(register + 1, parameterNameIndices.length + 8);
parameterNameIndices =
Arrays.copyOf(parameterNameIndices, newSize);
}
@@ -2417,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
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Fri Jul 01 16:55:44 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) {
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties Fri Jul 01 16:55:44 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
--- a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/standard/Standard.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/standard/Standard.java Fri Jul 01 16:55:44 2016 -0700
@@ -28,6 +28,11 @@
import com.sun.javadoc.*;
import com.sun.tools.doclets.formats.html.*;
+/**
+ * This doclet generates HTML-formatted documentation for the specified packages and types.
+ * @deprecated The doclet has been superseded by its replacement,
+ * {@code jdk.javadoc.doclets.StandardDoclet}.
+ */
@Deprecated
public class Standard {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/doclets/StandardDoclet.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,68 @@
+/*
+ * 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
+ * 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.doclets;
+
+import java.util.Locale;
+import java.util.Set;
+
+import javax.lang.model.SourceVersion;
+
+import jdk.javadoc.doclet.Doclet;
+import jdk.javadoc.doclet.DocletEnvironment;
+import jdk.javadoc.doclet.Reporter;
+import jdk.javadoc.internal.doclets.formats.html.HtmlDoclet;
+
+/**
+ * This doclet generates HTML-formatted documentation for the specified modules, packages and types.
+ */
+public class StandardDoclet implements Doclet {
+
+ private final HtmlDoclet htmlDoclet;
+
+ public StandardDoclet() {
+ htmlDoclet = new HtmlDoclet();
+ }
+
+ public void init(Locale locale, Reporter reporter) {
+ htmlDoclet.init(locale, reporter);
+ }
+
+ public String getName() {
+ return "Standard";
+ }
+
+ public Set<Doclet.Option> getSupportedOptions() {
+ return htmlDoclet.getSupportedOptions();
+ }
+
+ public SourceVersion getSupportedSourceVersion() {
+ return htmlDoclet.sourceVersion();
+ }
+
+ public boolean run(DocletEnvironment docEnv) {
+ return htmlDoclet.run(docEnv);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/doclets/package-info.java Fri Jul 01 16:55:44 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * This package contains standard, supported doclets.
+ */
+package jdk.javadoc.doclets;
+
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassUseWriter.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassUseWriter.java Fri Jul 01 16:55:44 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
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassWriterImpl.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassWriterImpl.java Fri Jul 01 16:55:44 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);
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ConfigurationImpl.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ConfigurationImpl.java Fri Jul 01 16:55:44 2016 -0700
@@ -360,10 +360,10 @@
if (!validateOptions()) {
return false;
}
- if (!root.getSpecifiedElements().isEmpty()) {
+ if (!docEnv.getSpecifiedElements().isEmpty()) {
Map<String, PackageElement> map = new HashMap<>();
PackageElement pkg;
- List<TypeElement> classes = new ArrayList<>(root.getIncludedClasses());
+ List<TypeElement> 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
@@ -547,7 +547,7 @@
@Override
public Set<Doclet.Option> getSupportedOptions() {
Doclet.Option[] options = {
- new Option(this, "bottom", 1) {
+ new Option(this, "-bottom", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -555,7 +555,7 @@
return true;
}
},
- new Option(this, "charset", 1) {
+ new Option(this, "-charset", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -563,7 +563,7 @@
return true;
}
},
- new Option(this, "doctitle", 1) {
+ new Option(this, "-doctitle", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -571,7 +571,7 @@
return true;
}
},
- new Option(this, "footer", 1) {
+ new Option(this, "-footer", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -579,7 +579,7 @@
return true;
}
},
- new Option(this, "header", 1) {
+ new Option(this, "-header", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -587,7 +587,7 @@
return true;
}
},
- new Option(this, "helpfile", 1) {
+ new Option(this, "-helpfile", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -595,7 +595,7 @@
return true;
}
},
- new Option(this, "html4") {
+ new Option(this, "-html4") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -603,7 +603,7 @@
return true;
}
},
- new Option(this, "html5") {
+ new Option(this, "-html5") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -611,7 +611,7 @@
return true;
}
},
- new Option(this, "nohelp") {
+ new Option(this, "-nohelp") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -619,7 +619,7 @@
return true;
}
},
- new Option(this, "nodeprecatedlist") {
+ new Option(this, "-nodeprecatedlist") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -627,7 +627,7 @@
return true;
}
},
- new Option(this, "noindex") {
+ new Option(this, "-noindex") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -635,7 +635,7 @@
return true;
}
},
- new Option(this, "nonavbar") {
+ new Option(this, "-nonavbar") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -643,7 +643,7 @@
return true;
}
},
- new Hidden(this, "nooverview") {
+ new Hidden(this, "-nooverview") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -651,7 +651,7 @@
return true;
}
},
- new Option(this, "notree") {
+ new Option(this, "-notree") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -659,7 +659,7 @@
return true;
}
},
- new Hidden(this, "overview", 1) {
+ new Hidden(this, "-overview", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -667,7 +667,7 @@
return true;
}
},
- new Hidden(this, "packagesheader", 1) {
+ new Hidden(this, "-packagesheader", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -675,7 +675,7 @@
return true;
}
},
- new Option(this, "splitindex") {
+ new Option(this, "-splitindex") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -683,7 +683,7 @@
return true;
}
},
- new Option(this, "stylesheetfile", 1) {
+ new Option(this, "-stylesheetfile", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -691,7 +691,7 @@
return true;
}
},
- new Option(this, "top", 1) {
+ new Option(this, "-top", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -699,7 +699,7 @@
return true;
}
},
- new Option(this, "use") {
+ new Option(this, "-use") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -707,7 +707,7 @@
return true;
}
},
- new Option(this, "windowtitle", 1) {
+ new Option(this, "-windowtitle", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -715,7 +715,7 @@
return true;
}
},
- new XOption(this, "xdoclint") {
+ new XOption(this, "-Xdoclint") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -723,7 +723,7 @@
return true;
}
},
- new XOption(this, "Xdocrootparent", 1) {
+ new XOption(this, "-Xdocrootparent", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -731,11 +731,10 @@
return true;
}
},
- new XOption(this, "doclet.xusage.xdoclint-extended.", "Xdoclint:", 0) {
+ new XOption(this, "doclet.xusage.xdoclint-extended.", "-Xdoclint:", 0) {
@Override
public boolean matches(String option) {
- String opt = option.startsWith("-") ? option.substring(1) : option;
- return opt.toLowerCase().startsWith(getName().toLowerCase());
+ return option.toLowerCase().startsWith(getName().toLowerCase());
}
@Override
@@ -745,11 +744,10 @@
return true;
}
},
- new XOption(this, "doclet.xusage.xdoclint-package.", "Xdoclint/package:", 0) {
+ new XOption(this, "doclet.xusage.xdoclint-package.", "-Xdoclint/package:", 0) {
@Override
public boolean matches(String option) {
- String opt = option.startsWith("-") ? option.substring(1) : option;
- return opt.toLowerCase().startsWith(getName().toLowerCase());
+ return option.toLowerCase().startsWith(getName().toLowerCase());
}
@Override
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDoclet.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDoclet.java Fri Jul 01 16:55:44 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()) {
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageFrameWriter.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageFrameWriter.java Fri Jul 01 16:55:44 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());
}
}
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageIndexWriter.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageIndexWriter.java Fri Jul 01 16:55:44 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();
}
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageWriterImpl.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageWriterImpl.java Fri Jul 01 16:55:44 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);
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SerializedFormWriterImpl.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SerializedFormWriterImpl.java Fri Jul 01 16:55:44 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();
}
/**
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SourceToHTMLConverter.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SourceToHTMLConverter.java Fri Jul 01 16:55:44 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()) {
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/standard.properties Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/standard.properties Fri Jul 01 16:55:44 2016 -0700
@@ -185,6 +185,7 @@
doclet.Same_package_name_used=Package name format used twice: {0}
doclet.exception_encountered=Exception encountered while processing {1}\n{0}
+# option specifiers
doclet.usage.d.name=d
doclet.usage.d.parameters=<directory>
doclet.usage.d.description=Destination directory for output files
@@ -240,18 +241,23 @@
doclet.usage.linkoffline.name=linkoffline
doclet.usage.linkoffline.parameters=<url1> <url2>
-doclet.usage.linkoffline.description=Link to docs at <url1> using package list at <url2>
+doclet.usage.linkoffline.description=Link to docs at <url1> using package list\n\
+\ at <url2>
doclet.usage.excludedocfilessubdir.name=excludedocfilessubdir
doclet.usage.excludedocfilessubdir.parameters=<name>:..
-doclet.usage.excludedocfilessubdir.description=Exclude any doc-files subdirectories with given name
+doclet.usage.excludedocfilessubdir.description=\n\
+\ Exclude any doc-files subdirectories with\n\
+\ given name
doclet.usage.group.name=group
doclet.usage.group.parameters=<name> <p1>:<p2>..
-doclet.usage.group.description=Group specified packages together in overview page
+doclet.usage.group.description=Group specified packages together\n\
+\ in overview page
doclet.usage.nocomment.name=nocomment
-doclet.usage.nocomment.description=Suppress description and tags, generate only declarations
+doclet.usage.nocomment.description=Suppress description and tags, generate\n\
+\ only declarations
doclet.usage.nodeprecated.name=nodeprecated
doclet.usage.nodeprecated.description=Do not include @deprecated information
@@ -289,7 +295,8 @@
doclet.usage.tag.name=tag
doclet.usage.tag.parameters=<name>:<locations>:<header>
-doclet.usage.tag.description=Specify single argument custom tags
+doclet.usage.tag.description=\n\
+\ Specify single argument custom tags
doclet.usage.taglet.name=taglet
doclet.usage.taglet.description=The fully qualified name of Taglet to register
@@ -299,7 +306,8 @@
doclet.usage.charset.name=charset
doclet.usage.charset.parameters=<charset>
-doclet.usage.charset.description=Charset for cross-platform viewing of generated documentation
+doclet.usage.charset.description=Charset for cross-platform viewing of\n\
+\ generated documentation
doclet.usage.helpfile.name=helpfile
doclet.usage.helpfile.parameters=<file>
@@ -310,14 +318,17 @@
doclet.usage.sourcetab.name=sourcetab
doclet.usage.sourcetab.parameters=<tab length>
-doclet.usage.sourcetab.description=Specify the number of spaces each tab takes up in the source
+doclet.usage.sourcetab.description=Specify the number of spaces each tab\n\
+\ takes up in the source
doclet.usage.keywords.name=keywords
-doclet.usage.keywords.description=Include HTML meta tags with package, class and member info
+doclet.usage.keywords.description=Include HTML meta tags with package,\n\
+\ class and member info
doclet.usage.stylesheetfile.name=stylesheetfile
doclet.usage.stylesheetfile.parameters=<path>
-doclet.usage.stylesheetfile.description=File to change style of the generated documentation
+doclet.usage.stylesheetfile.description=File to change style of the generated\n\
+\ documentation
doclet.usage.docencoding.name=docencoding
doclet.usage.docencoding.parameters=<name>
@@ -325,23 +336,30 @@
doclet.xusage.xdocrootparent.name=Xdocrootparent
doclet.xusage.xdocrootparent.parameters=<url>
-doclet.xusage.xdocrootparent.description=Replaces all @docRoot followed by /.. in doc comments with <url>
+doclet.xusage.xdocrootparent.description=Replaces all @docRoot followed by /..\n\
+\ in doc comments with <url>
doclet.xusage.xdoclint.name=Xdoclint
-doclet.xusage.xdoclint.description=Enable recommended checks for problems in javadoc comments
+doclet.xusage.xdoclint.description=Enable recommended checks for problems in\n\
+\ javadoc comments
doclet.xusage.xdoclint-extended.name=Xdoclint:
doclet.xusage.xdoclint-extended.parameters=(all|none|[-]<group>)
# L10N: do not localize these words: all none accessibility html missing reference syntax
-doclet.xusage.xdoclint-extended.description=Enable or disable specific checks for problems in javadoc comments,\n\
-\ Enable or disable specific checks for problems in javadoc comments,\n\
-\ where <group> is one of accessibility, html, missing, reference, or syntax.\n
+doclet.xusage.xdoclint-extended.description=Enable or disable specific checks\n\
+\ for problems in javadoc comments, where \n\
+\ <group> is one of accessibility, html,\n\
+\ missing, reference, or syntax.\n
doclet.xusage.xdoclint-package.name=Xdoclint/package:
doclet.xusage.xdoclint-package.parameters=([-]<packages>)
doclet.xusage.xdoclint-package.description=\n\
-\ Enable or disable checks in specific packages. <packages> is a comma separated\n\
-\ list of package specifiers. Package specifier is either a qualified name of a package\n\
-\ or a package name prefix followed by .*, which expands to all sub-packages of\n\
-\ the given package. Prefix the package specifier with - to disable checks for\n\
-\ the specified packages.\n
+\ Enable or disable checks in specific\n\
+\ packages. <packages> is a comma separated\n\
+\ list of package specifiers. Package\n\
+\ specifier is either a qualified name of a\n\
+\ package or a package name prefix followed\n\
+\ by .*, which expands to all sub-packages\n\
+\ of the given package. Prefix the package\n\
+\ specifier with - to disable checks for\n\
+\ the specified packages.\n
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/standard/Standard.java Fri Jul 01 12:32:21 2016 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package jdk.javadoc.internal.doclets.standard;
-
-import java.util.Locale;
-import java.util.Set;
-
-import javax.lang.model.SourceVersion;
-
-import jdk.javadoc.doclet.Doclet;
-import jdk.javadoc.doclet.DocletEnvironment;
-import jdk.javadoc.doclet.Reporter;
-import jdk.javadoc.internal.doclets.formats.html.HtmlDoclet;
-
-public class Standard implements Doclet {
-
- private final HtmlDoclet htmlDoclet;
-
- public Standard() {
- htmlDoclet = new HtmlDoclet();
- }
-
- public void init(Locale locale, Reporter reporter) {
- htmlDoclet.init(locale, reporter);
- }
-
- public String getName() {
- return "Standard";
- }
-
- public Set<Doclet.Option> getSupportedOptions() {
- return htmlDoclet.getSupportedOptions();
- }
-
- public SourceVersion getSupportedSourceVersion() {
- return htmlDoclet.sourceVersion();
- }
-
- public boolean run(DocletEnvironment root) {
- return htmlDoclet.run(root);
- }
-}
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/AbstractDoclet.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/AbstractDoclet.java Fri Jul 01 16:55:44 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;
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/CommentUtils.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/CommentUtils.java Fri Jul 01 16:55:44 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<? extends DocTree> makePropertyDescriptionTree(List<? extends DocTree> content) {
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/Configuration.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/Configuration.java Fri Jul 01 16:55:44 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<PackageElement> s = modulePackages.get(mdle);
if (s == null)
@@ -411,7 +411,7 @@
public Set<Doclet.Option> getSupportedOptions() {
Doclet.Option[] options = {
- new Option(this, "author") {
+ new Option(this, "-author") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -419,7 +419,7 @@
return true;
}
},
- new Option(this, "d", 1) {
+ new Option(this, "-d", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -427,7 +427,7 @@
return true;
}
},
- new Option(this, "docencoding", 1) {
+ new Option(this, "-docencoding", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -435,7 +435,7 @@
return true;
}
},
- new Option(this, "docfilessubdirs") {
+ new Option(this, "-docfilessubdirs") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -443,7 +443,7 @@
return true;
}
},
- new Hidden(this, "encoding", 1) {
+ new Hidden(this, "-encoding", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -451,7 +451,7 @@
return true;
}
},
- new Option(this, "excludedocfilessubdir", 1) {
+ new Option(this, "-excludedocfilessubdir", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -459,7 +459,7 @@
return true;
}
},
- new Option(this, "group", 2) {
+ new Option(this, "-group", 2) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -467,7 +467,7 @@
return true;
}
},
- new Hidden(this, "javafx") {
+ new Hidden(this, "-javafx") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -475,7 +475,7 @@
return true;
}
},
- new Option(this, "keywords") {
+ new Option(this, "-keywords") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -483,7 +483,7 @@
return true;
}
},
- new Option(this, "link", 1) {
+ new Option(this, "-link", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -492,7 +492,7 @@
return true;
}
},
- new Option(this, "linksource") {
+ new Option(this, "-linksource") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -500,7 +500,7 @@
return true;
}
},
- new Option(this, "linkoffline", 2) {
+ new Option(this, "-linkoffline", 2) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -509,7 +509,7 @@
return true;
}
},
- new Option(this, "nocomment") {
+ new Option(this, "-nocomment") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -517,7 +517,7 @@
return true;
}
},
- new Option(this, "nodeprecated") {
+ new Option(this, "-nodeprecated") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -525,7 +525,7 @@
return true;
}
},
- new Option(this, "nosince") {
+ new Option(this, "-nosince") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -533,7 +533,7 @@
return true;
}
},
- new Option(this, "notimestamp") {
+ new Option(this, "-notimestamp") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -541,7 +541,7 @@
return true;
}
},
- new Option(this, "noqualifier", 1) {
+ new Option(this, "-noqualifier", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -549,7 +549,7 @@
return true;
}
},
- new Hidden(this, "quiet") {
+ new Hidden(this, "-quiet") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -557,7 +557,7 @@
return true;
}
},
- new Option(this, "serialwarn") {
+ new Option(this, "-serialwarn") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -565,7 +565,7 @@
return true;
}
},
- new Option(this, "sourcetab", 1) {
+ new Option(this, "-sourcetab", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -584,7 +584,7 @@
return true;
}
},
- new Option(this, "tag", 1) {
+ new Option(this, "-tag", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -595,7 +595,7 @@
return true;
}
},
- new Option(this, "taglet", 1) {
+ new Option(this, "-taglet", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -606,7 +606,7 @@
return true;
}
},
- new Option(this, "tagletpath", 1) {
+ new Option(this, "-tagletpath", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -614,7 +614,7 @@
return true;
}
},
- new Option(this, "version") {
+ new Option(this, "-version") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -1083,14 +1083,13 @@
protected Option(Configuration config, String keyName, String name, int argCount) {
c = config;
+ this.name = name;
String key = keyName + "name";
String oname = getOptionsMessage(key);
if (oname.isEmpty()) {
- this.name = name;
this.parameters = "<MISSING KEY>";
this.description = "<MISSING KEY>";
} else {
- this.name = oname;
this.parameters = getOptionsMessage(keyName + "parameters");
this.description = getOptionsMessage(keyName + "description");
}
@@ -1098,7 +1097,7 @@
}
protected Option(String prefix, Configuration config, String name, int argCount) {
- this(config, prefix + name.toLowerCase() + ".", name, argCount);
+ this(config, prefix + name.toLowerCase().replaceAll("^-*", "") + ".", name, argCount);
}
protected Option(Configuration config, String name, int argCount) {
@@ -1146,7 +1145,7 @@
String opt = name + (name.endsWith(":") ? "" : " ") + parameters;
int optlen = opt.length();
int spaces = 32 - optlen;
- StringBuffer sb = new StringBuffer(" -").append(opt);
+ StringBuffer sb = new StringBuffer(" ").append(opt);
for (int i = 0; i < spaces; i++) {
sb.append(" ");
}
@@ -1161,8 +1160,7 @@
@Override
public boolean matches(String option) {
- String arg = option.startsWith("-") ? option.substring(1) : option;
- return name.toLowerCase().equals(arg.toLowerCase());
+ return name.toLowerCase().equals(option.toLowerCase());
}
@Override
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/WorkArounds.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/WorkArounds.java Fri Jul 01 16:55:44 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<CompilationUnitTree, Boolean> 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<TypeMirror> interfaceTypesOf(TypeMirror type) {
com.sun.tools.javac.util.List<com.sun.tools.javac.code.Type> 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<Element, TreePath> 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<AttrContext> compenv = env.getEnv(tsym);
+ Env<AttrContext> 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<VariableElement> 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<ExecutableElement> 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.
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/SerializedFormBuilder.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/SerializedFormBuilder.java Fri Jul 01 16:55:44 2016 -0700
@@ -125,7 +125,7 @@
*/
public void build() throws IOException {
SortedSet<TypeElement> rootclasses = new TreeSet<>(utils.makeGeneralPurposeComparator());
- rootclasses.addAll(configuration.root.getIncludedClasses());
+ rootclasses.addAll(configuration.docEnv.getIncludedClasses());
if (!serialClassFoundToDocument(rootclasses)) {
//Nothing to document.
return;
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/ValueTaglet.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/ValueTaglet.java Fri Jul 01 16:55:44 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];
}
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/ClassTree.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/ClassTree.java Fri Jul 01 16:55:44 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());
}
/**
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/ClassUseMapper.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/ClassUseMapper.java Fri Jul 01 16:55:44 2016 -0700
@@ -187,15 +187,15 @@
*/
public final Map<TypeElement, List<VariableElement>> 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<TypeElement> classes = root.getIncludedClasses();
+ Set<TypeElement> classes = docEnv.getIncludedClasses();
for (TypeElement aClass : classes) {
PackageElement pkg = elementUtils.getPackageOf(aClass);
mapAnnotations(classToPackageAnnotations, pkg, pkg);
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/CommentHelper.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/CommentHelper.java Fri Jul 01 16:55:44 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<? extends DocTree> getFirstSentenceTrees(Configuration c, List<? extends DocTree> body) {
- List<DocTree> firstSentence = c.root.getDocTrees().getFirstSentence(body);
+ List<DocTree> firstSentence = c.docEnv.getDocTrees().getFirstSentence(body);
return firstSentence;
}
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DeprecatedAPIListBuilder.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DeprecatedAPIListBuilder.java Fri Jul 01 16:55:44 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<Element> eset;
if (utils.isDeprecated(e)) {
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/IndexBuilder.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/IndexBuilder.java Fri Jul 01 16:55:44 2016 -0700
@@ -110,7 +110,7 @@
comparator = classesOnly
? utils.makeAllClassesComparator()
: utils.makeIndexUseComparator();
- buildIndexMap(configuration.root);
+ buildIndexMap(configuration.docEnv);
}
/**
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/PackageListWriter.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/PackageListWriter.java Fri Jul 01 16:55:44 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",
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Utils.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Utils.java Fri Jul 01 16:55:44 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<TypeElement> getSpecifiedClasses() {
@@ -2571,7 +2571,7 @@
}
public boolean isIncluded(Element e) {
- return configuration.root.isIncluded(e);
+ return configuration.docEnv.isIncluded(e);
}
/**
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/DocEnv.java Fri Jul 01 12:32:21 2016 +0200
+++ /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.
- *
- * <p><b>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.</b>
- *
- * @author Robert Field
- * @author Neal Gafter (rewrite)
- * @author Scott Seligman (generics)
- */
-public class DocEnv {
- protected static final Context.Key<DocEnv> 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<JCTree, TreePath> treePaths = new WeakHashMap<>();
-
- public final HashMap<PackageElement, JavaFileObject> 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<Element, TreePath> 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<String> javaNames,
- Iterable<? extends JavaFileObject> fileObjects,
- List<String> subPackages,
- List<String> 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<Boolean, Void> shouldDocumentVisitor = null;
- public boolean shouldDocument(Element e) {
- if (shouldDocumentVisitor == null) {
- shouldDocumentVisitor = new SimpleElementVisitor9<Boolean, Void>() {
-
- @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<TypeElement> 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<TypeElement> 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<AttrContext> 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<Element> includedSet = new HashSet<>();
-
- public void setIncluded(Element element) {
- includedSet.add(element);
- }
-
- private SimpleElementVisitor9<Boolean, Void> includedVisitor = null;
-
- public boolean isIncluded(Element e) {
- if (e == null) {
- return false;
- }
- if (includedVisitor == null) {
- includedVisitor = new SimpleElementVisitor9<Boolean, Void>() {
- @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.
- *
- * <p>
- * <b>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.</b>
- *
- * @see javax.lang.model.element.Modifier
- * @author Robert Field
- */
-
- private static class ModifierFilter {
-
- static enum FilterFlag {
- PACKAGE,
- PRIVATE,
- PROTECTED,
- PUBLIC
- }
-
- private Set<FilterFlag> oneOf;
-
- /**
- * Constructor - Specify a filter.
- *
- * @param oneOf a set containing desired flags to be matched.
- */
- ModifierFilter(Set<FilterFlag> 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<FilterFlag> flagsToModifiers(long modifierBits) {
- List<FilterFlag> 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<FilterFlag> modifiers) {
- if (oneOf.contains(FilterFlag.PRIVATE)) {
- return true;
- }
- for (FilterFlag mod : modifiers) {
- if (oneOf.contains(mod)) {
- return true;
- }
- }
- return false;
- }
-
- } // end ModifierFilter
-}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/DocEnvImpl.java Fri Jul 01 16:55:44 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.
+ *
+ * <p><b>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.</b>
+ *
+ * @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<TypeElement> cmdLineClasses;
+
+ /**
+ * list of packages specified on the command line.
+ */
+ private Set<PackageElement> 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<JCClassDecl> classes, List<String> 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<String> classes) {
+ //super(env, null);
+ this.toolEnv = toolEnv;
+
+ Set<TypeElement> 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<JCClassDecl> classes) {
+ Set<TypeElement> 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<String> packages) {
+ Set<PackageElement> 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<PackageElement> specifiedPackages() {
+ return cmdLinePackages;
+ }
+
+ /**
+ * Classes and interfaces specified on the command line,
+ * including their inner classes
+ */
+ public Set<TypeElement> specifiedClasses() {
+ Set<TypeElement> out = new LinkedHashSet<>();
+ cmdLineClasses.stream().forEach((te) -> {
+ toolEnv.addAllClasses(out, te, true);
+ });
+ return out;
+ }
+
+ private Set<TypeElement> classesToDocument = null;
+ /**
+ * Return all classes and interfaces (including those inside
+ * packages) to be documented.
+ */
+ public Set<TypeElement> getIncludedClasses() {
+ if (classesToDocument == null) {
+ Set<TypeElement> 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 <code>"*RootDocImpl*"</code>.
+ */
+ public String name() {
+ return "*RootDocImpl*";
+ }
+
+ /**
+ * Return the name of this Doc item.
+ *
+ * @return the string <code>"*RootDocImpl*"</code>.
+ */
+ 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<Element> getSelectedElements(List<? extends Element> elements) {
+ return elements.stream()
+ .filter(e -> isIncluded(e))
+ .collect(Collectors.<Element>toList());
+ }
+
+ @Override
+ public Set<Element> getSpecifiedElements() {
+ Set<Element> 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);
+ }
+}
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocClassFinder.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocClassFinder.java Fri Jul 01 16:55:44 2016 -0700
@@ -60,7 +60,7 @@
});
}
- private DocEnv docenv;
+ private ToolEnvironment toolEnv;
private EnumSet<JavaFileObject.Kind> 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<JavaFileObject.Kind> 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);
}
}
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocEnter.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocEnter.java Fri Jul 01 16:55:44 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<JCCompilationUnit> 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));
}
}
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocMemberEnter.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocMemberEnter.java Fri Jul 01 16:55:44 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));
}
}
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocTool.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocTool.java Fri Jul 01 16:55:44 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<String> 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<JCCompilationUnit> 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<String> 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<JCCompilationUnit> packageTrees = new ListBuffer<>();
for (String packageName: includedPackages) {
List<JavaFileObject> 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));
}
}
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/RootDocImpl.java Fri Jul 01 12:32:21 2016 +0200
+++ /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.
- *
- * <p><b>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.</b>
- *
- * @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<TypeElement> cmdLineClasses;
-
- /**
- * list of packages specified on the command line.
- */
- private Set<PackageElement> 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<JCClassDecl> classes, List<String> 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<String> classes) {
- //super(env, null);
- this.env = env;
-
- Set<TypeElement> 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<JCClassDecl> classes) {
- Set<TypeElement> 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<String> packages) {
- Set<PackageElement> 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<PackageElement> specifiedPackages() {
- return cmdLinePackages;
- }
-
- /**
- * Classes and interfaces specified on the command line,
- * including their inner classes
- */
- public Set<TypeElement> specifiedClasses() {
- Set<TypeElement> out = new LinkedHashSet<>();
- cmdLineClasses.stream().forEach((te) -> {
- env.addAllClasses(out, te, true);
- });
- return out;
- }
-
- private Set<TypeElement> classesToDocument = null;
- /**
- * Return all classes and interfaces (including those inside
- * packages) to be documented.
- */
- public Set<TypeElement> getIncludedClasses() {
- if (classesToDocument == null) {
- Set<TypeElement> 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 <code>"*RootDocImpl*"</code>.
- */
- public String name() {
- return "*RootDocImpl*";
- }
-
- /**
- * Return the name of this Doc item.
- *
- * @return the string <code>"*RootDocImpl*"</code>.
- */
- 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<Element> getSelectedElements(List<? extends Element> elements) {
- return elements.stream()
- .filter(e -> isIncluded(e))
- .collect(Collectors.<Element>toList());
- }
-
- @Override
- public Set<Element> getSpecifiedElements() {
- Set<Element> 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);
- }
-}
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/Start.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/Start.java Fri Jul 01 16:55:44 2016 -0700
@@ -86,7 +86,7 @@
com.sun.tools.doclets.standard.Standard.class;
private static final Class<?> StdDoclet =
- jdk.javadoc.internal.doclets.standard.Standard.class;
+ jdk.javadoc.doclets.StandardDoclet.class;
/** Context for this invocation. */
private final Context context;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/ToolEnvironment.java Fri Jul 01 16:55:44 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.
+ *
+ * <p><b>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.</b>
+ *
+ * @author Robert Field
+ * @author Neal Gafter (rewrite)
+ * @author Scott Seligman (generics)
+ */
+public class ToolEnvironment {
+ protected static final Context.Key<ToolEnvironment> 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<JCTree, TreePath> treePaths = new WeakHashMap<>();
+
+ public final HashMap<PackageElement, JavaFileObject> 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<Element, TreePath> 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<String> javaNames,
+ Iterable<? extends JavaFileObject> fileObjects,
+ List<String> subPackages,
+ List<String> 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<Boolean, Void> shouldDocumentVisitor = null;
+ public boolean shouldDocument(Element e) {
+ if (shouldDocumentVisitor == null) {
+ shouldDocumentVisitor = new SimpleElementVisitor9<Boolean, Void>() {
+
+ @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<TypeElement> 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<TypeElement> 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<AttrContext> 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<Element> includedSet = new HashSet<>();
+
+ public void setIncluded(Element element) {
+ includedSet.add(element);
+ }
+
+ private SimpleElementVisitor9<Boolean, Void> includedVisitor = null;
+
+ public boolean isIncluded(Element e) {
+ if (e == null) {
+ return false;
+ }
+ if (includedVisitor == null) {
+ includedVisitor = new SimpleElementVisitor9<Boolean, Void>() {
+ @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.
+ *
+ * <p>
+ * <b>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.</b>
+ *
+ * @see javax.lang.model.element.Modifier
+ * @author Robert Field
+ */
+
+ private static class ModifierFilter {
+
+ static enum FilterFlag {
+ PACKAGE,
+ PRIVATE,
+ PROTECTED,
+ PUBLIC
+ }
+
+ private Set<FilterFlag> oneOf;
+
+ /**
+ * Constructor - Specify a filter.
+ *
+ * @param oneOf a set containing desired flags to be matched.
+ */
+ ModifierFilter(Set<FilterFlag> 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<FilterFlag> flagsToModifiers(long modifierBits) {
+ List<FilterFlag> 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<FilterFlag> modifiers) {
+ if (oneOf.contains(FilterFlag.PRIVATE)) {
+ return true;
+ }
+ for (FilterFlag mod : modifiers) {
+ if (oneOf.contains(mod)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ } // end ModifierFilter
+}
--- a/langtools/src/jdk.javadoc/share/classes/module-info.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/module-info.java Fri Jul 01 16:55:44 2016 -0700
@@ -30,9 +30,12 @@
exports com.sun.javadoc;
exports com.sun.tools.doclets;
+ exports com.sun.tools.doclets.standard;
exports com.sun.tools.javadoc;
+
exports jdk.javadoc.doclet;
exports jdk.javadoc.doclet.taglet;
+ exports jdk.javadoc.doclets;
provides javax.tools.DocumentationTool
with jdk.javadoc.internal.api.JavadocTool;
--- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/DeclarationSnippet.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/DeclarationSnippet.java Fri Jul 01 16:55:44 2016 -0700
@@ -55,8 +55,9 @@
DeclarationSnippet(DeclarationKey key, String userSource, Wrap guts,
String unitName, SubKind subkind, Wrap corralled,
Collection<String> declareReferences,
- Collection<String> bodyReferences) {
- super(key, userSource, guts, unitName, subkind);
+ Collection<String> bodyReferences,
+ DiagList syntheticDiags) {
+ super(key, userSource, guts, unitName, subkind, syntheticDiags);
this.corralled = corralled;
this.declareReferences = declareReferences;
this.bodyReferences = bodyReferences;
--- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/ErroneousSnippet.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/ErroneousSnippet.java Fri Jul 01 16:55:44 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}.
* <p>
* <code>ErroneousSnippet</code> 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;
}
}
--- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/Eval.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/Eval.java Fri Jul 01 16:55:44 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<SnippetEvent> eval(String userSource) throws IllegalStateException {
+ List<SnippetEvent> 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<Snippet> sourceToSnippetsWithWrappers(String userSource) {
+ List<Snippet> 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<Snippet> 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<? extends Tree> 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<? extends Tree> 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<SnippetEvent> processImport(String userSource, String compileSource) {
+ private List<Snippet> 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<SnippetEvent> processVariables(String userSource, List<? extends Tree> units, String compileSource, ParseTask pt) {
- List<SnippetEvent> allEvents = new ArrayList<>();
+ private List<Snippet> processVariables(String userSource, List<? extends Tree> units, String compileSource, ParseTask pt) {
+ List<Snippet> 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<SnippetEvent> res1 = declare(snip, modDiag);
- allEvents.addAll(res1);
+ tds.declareReferences(), modDiag);
+ snippets.add(snip);
}
-
- return allEvents;
+ return snippets;
}
- private List<SnippetEvent> processExpression(String userSource, String compileSource) {
+ private List<Snippet> 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<String> 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<SnippetEvent> processClass(String userSource, Tree unitTree, String compileSource, SubKind snippetKind, ParseTask pt) {
+ private List<Snippet> 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<SnippetEvent> processStatement(String userSource, String compileSource) {
+ private List<Snippet> 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<SnippetEvent> processMethod(String userSource, Tree unitTree, String compileSource, ParseTask pt) {
+ private List<Snippet> 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<SnippetEvent> 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<Snippet> 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<SnippetEvent> compileFailResult(DiagList diags, String userSource) {
+ private List<Snippet> 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<SnippetEvent> declare(Snippet si) {
- return declare(si, new DiagList());
- }
-
private List<SnippetEvent> declare(Snippet si, DiagList generatedDiagnostics) {
Unit c = new Unit(state, si, null, generatedDiagnostics);
Set<Unit> ins = new LinkedHashSet<>();
--- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/ExpressionSnippet.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/ExpressionSnippet.java Fri Jul 01 16:55:44 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);
}
/**
--- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/ImportSnippet.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/ImportSnippet.java Fri Jul 01 16:55:44 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;
--- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/JShell.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/JShell.java Fri Jul 01 16:55:44 2016 -0700
@@ -89,6 +89,7 @@
final Supplier<String> tempVariableNameGenerator;
final BiFunction<Snippet, Integer, String> idGenerator;
final List<String> extraRemoteVMOptions;
+ final List<String> 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<String> tempVariableNameGenerator = null;
BiFunction<Snippet, Integer, String> idGenerator = null;
List<String> extraRemoteVMOptions = new ArrayList<>();
+ List<String> 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.
+ * <p>
+ * The input should be
* exactly one complete snippet of source code, that is, one expression,
* statement, variable declaration, method declaration, class declaration,
* or import.
--- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/MethodSnippet.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/MethodSnippet.java Fri Jul 01 16:55:44 2016 -0700
@@ -44,8 +44,10 @@
MethodSnippet(MethodKey key, String userSource, Wrap guts,
String name, String signature, Wrap corralled,
- Collection<String> declareReferences, Collection<String> bodyReferences) {
- super(key, userSource, guts, name, SubKind.METHOD_SUBKIND, corralled, declareReferences, bodyReferences);
+ Collection<String> declareReferences, Collection<String> bodyReferences,
+ DiagList syntheticDiags) {
+ super(key, userSource, guts, name, SubKind.METHOD_SUBKIND, corralled,
+ declareReferences, bodyReferences, syntheticDiags);
this.signature = signature;
}
--- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/OuterImportSnippetWrap.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/OuterImportSnippetWrap.java Fri Jul 01 16:55:44 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;
--- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/PersistentSnippet.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/PersistentSnippet.java Fri Jul 01 16:55:44 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);
}
/**
--- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/Snippet.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/Snippet.java Fri Jul 01 16:55:44 2016 -0700
@@ -563,13 +563,18 @@
private Status status;
private List<String> 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
*/
--- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/SourceCodeAnalysis.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/SourceCodeAnalysis.java Fri Jul 01 16:55:44 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.
+ * <p>
+ * 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.
+ * <p>
+ * 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)}.
+ * <p>
+ * 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<SnippetWrapper> 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<Snippet> 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.
+ * <p>
+ * 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.
+ * <p>
+ * 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.
+ * <p>
+ * If the input is not a valid Snippet, this will not be a valid
+ * class/import definition.
+ * <p>
+ * 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);
+ }
}
--- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/SourceCodeAnalysisImpl.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/SourceCodeAnalysisImpl.java Fri Jul 01 16:55:44 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<SnippetWrapper> wrappers(String input) {
+ return proc.eval.sourceToSnippetsWithWrappers(input).stream()
+ .map(sn -> wrapper(sn))
+ .collect(toList());
+ }
+
+ @Override
+ public Collection<Snippet> dependents(Snippet snippet) {
+ return proc.maps.getDependents(snippet);
+ }
+
private boolean isStaticContext(AnalyzeTask at, TreePath path) {
switch (path.getLeaf().getKind()) {
case ARRAY_TYPE:
--- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/StatementSnippet.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/StatementSnippet.java Fri Jul 01 16:55:44 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);
}
}
--- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/TaskFactory.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/TaskFactory.java Fri Jul 01 16:55:44 2016 -0700
@@ -328,7 +328,9 @@
SourceHandler<T> sh,
String... extraOptions) {
this.sourceHandler = sh;
- List<String> options = Arrays.asList(extraOptions);
+ List<String> options = new ArrayList<>(extraOptions.length + state.extraCompilerOptions.size());
+ options.addAll(Arrays.asList(extraOptions));
+ options.addAll(state.extraCompilerOptions);
Iterable<? extends JavaFileObject> compilationUnits = inputs
.map(in -> sh.sourceToFileObject(fileManager, in))
.collect(Collectors.toList());
--- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/TypeDeclSnippet.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/TypeDeclSnippet.java Fri Jul 01 16:55:44 2016 -0700
@@ -42,8 +42,10 @@
TypeDeclSnippet(TypeDeclKey key, String userSource, Wrap guts,
String unitName, SubKind subkind, Wrap corralled,
Collection<String> declareReferences,
- Collection<String> bodyReferences) {
- super(key, userSource, guts, unitName, subkind, corralled, declareReferences, bodyReferences);
+ Collection<String> bodyReferences,
+ DiagList syntheticDiags) {
+ super(key, userSource, guts, unitName, subkind, corralled,
+ declareReferences, bodyReferences, syntheticDiags);
}
/**** internal access ****/
--- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/VarSnippet.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/VarSnippet.java Fri Jul 01 16:55:44 2016 -0700
@@ -43,8 +43,10 @@
VarSnippet(VarKey key, String userSource, Wrap guts,
String name, SubKind subkind, String typeName,
- Collection<String> declareReferences) {
- super(key, userSource, guts, name, subkind, null, declareReferences, null);
+ Collection<String> declareReferences,
+ DiagList syntheticDiags) {
+ super(key, userSource, guts, name, subkind, null, declareReferences,
+ null, syntheticDiags);
this.typeName = typeName;
}
--- a/langtools/test/ProblemList.txt Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/test/ProblemList.txt Fri Jul 01 16:55:44 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
###########################################################################
#
--- a/langtools/test/jdk/javadoc/tool/EnsureNewOldDoclet.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/test/jdk/javadoc/tool/EnsureNewOldDoclet.java Fri Jul 01 16:55:44 2016 -0700
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 8035473 8154482
+ * @bug 8035473 8154482 8154399 8159096
* @summary make sure the javadoc tool responds correctly to Xold,
* old doclets and taglets.
* @library /tools/lib
@@ -87,7 +87,7 @@
CLASS_NAME + "\\$OldTaglet.*");
final static String OLD_STDDOCLET = "com.sun.tools.doclets.standard.Standard";
- final static String NEW_STDDOCLET = "jdk.javadoc.internal.doclets.standard.Standard";
+ final static String NEW_STDDOCLET = "jdk.javadoc.doclets.StandardDoclet";
public EnsureNewOldDoclet() throws Exception {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/jdk/jshell/CompilerOptionsTest.java Fri Jul 01 16:55:44 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<Integer,Integer> f = x -> x*2;",
+ new ExpectedDiagnostic("compiler.err.lambda.not.supported.in.source", 32, 32, 32, -1, -1, Diagnostic.Kind.ERROR));
+ }
+}
--- a/langtools/test/jdk/jshell/ComputeFQNsTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/test/jdk/jshell/ComputeFQNsTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -76,8 +76,8 @@
assertInferredFQNs("class X { ArrayList", "ArrayList".length(), false, "java.util.ArrayList");
}
- @Test(enabled = false) //JDK-8150860
- public void testSuspendIndexing() throws Exception {
+ @Test
+ public void testSuspendIndexing() throws Throwable {
compiler.compile(outDir, "package test; public class FQNTest { }");
String jarName = "test.jar";
compiler.jar(outDir, jarName, "test/FQNTest.class");
@@ -90,15 +90,35 @@
getState().sourceCodeAnalysis();
+ Throwable[] evalException = new Throwable[1];
+
new Thread() {
@Override public void run() {
- assertEval("{new java.io.FileOutputStream(\"" + runMarkFile.toAbsolutePath().toString() + "\").close();" +
- " while (java.nio.file.Files.exists(java.nio.file.Paths.get(\"" + continueMarkFile.toString() + "\"))) Thread.sleep(100); }");
+ try {
+ assertEval("{new java.io.FileOutputStream(\"" + runMarkFile.toAbsolutePath().toString().replace("\\", "\\\\") + "\").close();" +
+ " while (java.nio.file.Files.exists(java.nio.file.Paths.get(\"" + continueMarkFile.toAbsolutePath().toString().replace("\\", "\\\\") + "\"))) Thread.sleep(100); }");
+ } catch (Throwable t) {
+ evalException[0] = t;
+ }
}
}.start();
- while (!Files.exists(runMarkFile))
- Thread.sleep(100);
+ while (true) {
+ if (Files.exists(runMarkFile))
+ break;
+ try {
+ Thread.sleep(100);
+ } catch (Throwable t) {
+ if (evalException[0] != null) {
+ evalException[0].addSuppressed(t);
+ } else {
+ throw t;
+ }
+ }
+ if (evalException[0] != null) {
+ throw evalException[0];
+ }
+ }
addToClasspath(compiler.getPath(outDir).resolve(jarName));
--- a/langtools/test/jdk/jshell/KullaTesting.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/test/jdk/jshell/KullaTesting.java Fri Jul 01 16:55:44 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<JShell.Builder> 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<>();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/jdk/jshell/WrapperTest.java Fri Jul 01 16:55:44 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<SnippetWrapper> 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<SnippetWrapper> 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<SnippetWrapper> 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<SnippetWrapper> 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<SnippetWrapper> 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<SnippetWrapper> 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<SnippetWrapper> 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<SnippetWrapper> 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<Snippet> 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);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/T8159970/TypeEqualityInInferenceTest.java Fri Jul 01 16:55:44 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<String> imports = new ArrayList<>();
+ imports.add("java.util.*");
+ List<String> typeVars = new ArrayList<>();
+ typeVars.add("T");
+ strToTypeFactory = new StrToTypeFactory(null, imports, typeVars);
+
+ runTest("List<? extends T>", "List<? extends String>", predef.stringType);
+ runTest("List<? extends T>", "List<?>", predef.objectType);
+ runTest("List<? super T>", "List<? super String>", 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<Type> 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);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/classfiles/attributes/LocalVariableTable/T8136453/T.jcod Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,112 @@
+/*
+ * 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.
+ */
+class T {
+ 0xCAFEBABE;
+ 0; // minor version
+ 52; // version
+ [] { // Constant Pool
+ ; // first element is empty
+ Method #3 #15; // #1
+ class #16; // #2
+ class #17; // #3
+ Utf8 "<init>"; // #4
+ Utf8 "()V"; // #5
+ Utf8 "Code"; // #6
+ Utf8 "LocalVariableTable"; // #7
+ Utf8 "this"; // #8
+ Utf8 "LT;"; // #9
+ Utf8 "test"; // #10
+ Utf8 "(I)I"; // #11
+ Utf8 "p"; // #12
+ Utf8 "I"; // #13
+ Utf8 "l1"; // #14
+ NameAndType #4 #5; // #15
+ Utf8 "T"; // #16
+ Utf8 "java/lang/Object"; // #17
+ } // Constant Pool
+
+ 0x0021; // access
+ #2;// this_cpx
+ #3;// super_cpx
+
+ [] { // Interfaces
+ } // Interfaces
+
+ [] { // fields
+ } // fields
+
+ [] { // methods
+ { // Member
+ 0x0001; // access
+ #4; // name_cpx
+ #5; // sig_cpx
+ [] { // Attributes
+ Attr(#6) { // Code
+ 1; // max_stack
+ 1; // max_locals
+ Bytes[]{
+ 0x2AB70001B1;
+ };
+ [] { // Traps
+ } // end Traps
+ [] { // Attributes
+ Attr(#7) { // LocalVariableTable
+ [] { // LocalVariableTable
+ 0 5 8 9 0;
+ }
+ } // end LocalVariableTable
+ } // Attributes
+ } // end Code
+ } // Attributes
+ } // Member
+ ;
+ { // Member
+ 0x0001; // access
+ #10; // name_cpx
+ #11; // sig_cpx
+ [] { // Attributes
+ Attr(#6) { // Code
+ 1; // max_stack
+ 3; // max_locals
+ Bytes[]{
+ 0x033D1CAC;
+ };
+ [] { // Traps
+ } // end Traps
+ [] { // Attributes
+ Attr(#7) { // LocalVariableTable
+ [] { // LocalVariableTable
+ 0 4 8 9 0;
+ 0 4 12 13 1;
+ 0 4 14 13 20;
+ }
+ } // end LocalVariableTable
+ } // Attributes
+ } // end Code
+ } // Attributes
+ } // Member
+ } // methods
+
+ [] { // Attributes
+ } // Attributes
+} // end class T
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/classfiles/attributes/LocalVariableTable/T8136453/T8136453.java Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,64 @@
+/*
+ * 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 8136453
+ * @summary Checking that javac's ClassReader expands its parameterNameIndices array properly.
+ * @modules jdk.compiler
+ * @build T T8136453
+ * @run main T8136453
+ */
+
+import java.util.Arrays;
+import java.util.List;
+
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.Name;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.util.ElementFilter;
+import javax.tools.JavaCompiler;
+import javax.tools.ToolProvider;
+
+import com.sun.source.util.JavacTask;
+
+public class T8136453 {
+ public static void main(String... args) {
+ new T8136453().run();
+ }
+
+ void run() {
+ JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
+ List<String> opts = Arrays.asList("-XDsave-parameter-names");
+ JavacTask task = (JavacTask) compiler.getTask(null, null, null, opts, null, null);
+ TypeElement t = task.getElements().getTypeElement("T");
+ ExecutableElement testMethod = ElementFilter.methodsIn(t.getEnclosedElements()).get(0);
+ VariableElement param = testMethod.getParameters().get(0);
+ Name paramName = param.getSimpleName();
+
+ if (!paramName.contentEquals("p")) {
+ throw new AssertionError("Wrong parameter name: " + paramName);
+ }
+ }
+}
--- a/langtools/test/tools/javac/diags/HTMLWriter.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/test/tools/javac/diags/HTMLWriter.java Fri Jul 01 16:55:44 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2010, 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,7 +40,7 @@
* @throws IOException if there is a problem writing to the underlying stream
*/
public HTMLWriter(Writer out) throws IOException {
- this(out, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\">");
+ this(out, "<!DOCTYPE html\">");
}
/**
@@ -328,7 +328,7 @@
*/
public void writeLink(File file, String body) throws IOException {
startTag(A);
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
String path = file.getPath().replace(File.separatorChar, '/');
if (file.isAbsolute() && !path.startsWith("/"))
sb.append('/');
@@ -472,13 +472,15 @@
public static final String BORDER = "border";
/** The HTML "br" tag. */
public static final String BR = "br";
+ /** The HTML "charset" attribute. */
+ public static final String CHARSET = "charset";
/** The HTML "class" attribute. */
public static final String CLASS = "class";
/** The HTML "classid" attribute. */
public static final String CLASSID = "classid";
/** The HTML "code" tag. */
public static final String CODE = "code";
- /** The HTML "color" attribte. */
+ /** The HTML "color" attribute. */
public static final String COLOR = "color";
/** The HTML "col" attribute value. */
public static final String COL = "col";
@@ -522,6 +524,8 @@
public static final String LI = "li";
/** The HTML "link" tag. */
public static final String LINK = "link";
+ /** The HTML "meta" attribute. */
+ public static final String META = "meta";
/** The HTML "name" attribute. */
public static final String NAME = "name";
/** The HTML "object" tag. */
--- a/langtools/test/tools/javac/diags/RunExamples.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/test/tools/javac/diags/RunExamples.java Fri Jul 01 16:55:44 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
@@ -354,7 +354,10 @@
html.write(title);
html.endTag(HTMLWriter.TITLE);
}
+ html.startTag(HTMLWriter.META);
+ html.writeAttr(HTMLWriter.CHARSET, "UTF-8");
html.startTag(HTMLWriter.STYLE);
+ html.write(null); // revert to body text
html.newLine();
html.writeLine("div.file { background-color:#e0ffe0; margin-left:30px; margin-right:30px;\n"
+ " padding: 3px; border: thin solid silver; }");
--- a/langtools/test/tools/javac/diags/examples.not-yet.txt Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/test/tools/javac/diags/examples.not-yet.txt Fri Jul 01 16:55:44 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/file/T8132857.java Fri Jul 01 16:55:44 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);
+ }
+ }
+ }
+
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/importscope/T8148131/A.java Fri Jul 01 16:55:44 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 {}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/importscope/T8148131/B.java Fri Jul 01 16:55:44 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 {}
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/importscope/T8148131/C.java Fri Jul 01 16:55:44 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 {}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/importscope/T8148131/D.java Fri Jul 01 16:55:44 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 {}
+}
--- a/langtools/test/tools/javac/modules/AutomaticModules.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/test/tools/javac/modules/AutomaticModules.java Fri Jul 01 16:55:44 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<String> 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<String> 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);
+ }
+ }
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/modules/T8159439/NPEForModuleInfoWithNonZeroSuperClassTest.java Fri Jul 01 16:55:44 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 {}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/modules/T8159439/NPEForModuleInfoWithNonZeroSuperClassTest.out Fri Jul 01 16:55:44 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/modules/T8159439/module-info.jcod Fri Jul 01 16:55:44 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/processing/8132446/Processor.java Fri Jul 01 16:55:44 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<? extends TypeElement> 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/processing/8132446/T8132446.java Fri Jul 01 16:55:44 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 {}
--- a/langtools/test/tools/javac/types/BoxingConversionTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/test/tools/javac/types/BoxingConversionTest.java Fri Jul 01 16:55:44 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;
--- a/langtools/test/tools/javac/types/CastTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/test/tools/javac/types/CastTest.java Fri Jul 01 16:55:44 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
*/
--- a/langtools/test/tools/javac/types/GenericTypeWellFormednessTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/test/tools/javac/types/GenericTypeWellFormednessTest.java Fri Jul 01 16:55:44 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
*/
--- a/langtools/test/tools/javac/types/PrimitiveConversionTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/test/tools/javac/types/PrimitiveConversionTest.java Fri Jul 01 16:55:44 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;
--- a/langtools/test/tools/javac/types/TestComparisons.java Fri Jul 01 12:32:21 2016 +0200
+++ b/langtools/test/tools/javac/types/TestComparisons.java Fri Jul 01 16:55:44 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 {
--- a/langtools/test/tools/javac/types/TypeHarness.java Fri Jul 01 12:32:21 2016 +0200
+++ /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:
- *
- * <pre>
- * 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)));
- * </pre>
- *
- * The above code is used to create two class types, namely {@code A<X,Y>} and
- * {@code A<Object,Object>} where both {@code X} and {@code Y} are type-variables.
- * The code then verifies that {@code [X:=Object,Y:=Object]A<X,Y> == A<Object,Object>}.
- *
- * @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();
- }
-
- // <editor-fold defaultstate="collapsed" desc="type assertions">
-
- /** 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);
- }
- }
- // </editor-fold>
-
- private void error(String msg) {
- throw new AssertionError("Unexpected result: " + msg);
- }
-
- // <editor-fold defaultstate="collapsed" desc="type functions">
-
- /** 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<Type> from = new ListBuffer<>();
- ListBuffer<Type> 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;
- }
- }
- // </editor-fold>
-
- // <editor-fold defaultstate="collapsed" desc="type factory">
-
- /**
- * 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;
- }
- }
- // </editor-fold>
-}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/lib/types/TypeHarness.java Fri Jul 01 16:55:44 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:
+ *
+ * <pre>
+ * 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)));
+ * </pre>
+ *
+ * The above code is used to create two class types, namely {@code A<X,Y>} and
+ * {@code A<Object,Object>} where both {@code X} and {@code Y} are type-variables.
+ * The code then verifies that {@code [X:=Object,Y:=Object]A<X,Y> == A<Object,Object>}.
+ *
+ * @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();
+ }
+
+ // <editor-fold defaultstate="collapsed" desc="type assertions">
+
+ /** 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);
+ }
+ }
+ // </editor-fold>
+
+ /** 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<Type> typeVars, Consumer<InferenceContext> 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<Type> 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);
+ }
+
+ // <editor-fold defaultstate="collapsed" desc="type functions">
+
+ /** 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<Type> from = new ListBuffer<>();
+ ListBuffer<Type> 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;
+ }
+ }
+ // </editor-fold>
+
+ // <editor-fold defaultstate="collapsed" desc="type factory">
+
+ /**
+ * 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;
+ }
+ }
+ // </editor-fold>
+
+ // <editor-fold defaultstate="collapsed" desc="StrToTypeFactory">
+ /**
+ * 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:
+ *
+ * <pre>
+ * List<String> imports = new ArrayList<>();
+ * imports.add("java.util.*");
+ * List<String> typeVars = new ArrayList<>();
+ * typeVars.add("T");
+ * strToTypeFactory = new StrToTypeFactory(null, imports, typeVars);
+ *
+ * Type freeType = strToTypeFactory.getType("List<? extends T>");
+ * Type aType = strToTypeFactory.getType("List<? extends String>");
+ *
+ * // 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<Type> equalBounds = undetVarForT.getBounds(InferenceBound.EQ);
+ * Assert.check(!equalBounds.isEmpty() && equalBounds.length() == 1,
+ * "undetVar must have only one equality bound");
+ * });
+ * </pre>
+ */
+ public class StrToTypeFactory {
+ int id = 0;
+ String pkg;
+ java.util.List<String> imports;
+ public java.util.List<String> typeVarDecls;
+ public List<Type> typeVariables;
+
+ public StrToTypeFactory(String pkg, java.util.List<String> imports, java.util.List<String> 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<Type> 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<JavaFileObject> 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);
+ }
+ }
+ }
+ // </editor-fold>
+
+ // <editor-fold defaultstate="collapsed" desc="helper classes">
+ static class MyAttr extends Attr {
+
+ private static Type theType;
+ private static List<Type> typeParameters = List.nil();
+
+ static void preRegister(Context context) {
+ context.put(attrKey, (com.sun.tools.javac.util.Context.Factory<Attr>) 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();
+ }
+ }
+ // </editor-fold>
+}
--- a/make/CompileJavaModules.gmk Fri Jul 01 12:32:21 2016 +0200
+++ b/make/CompileJavaModules.gmk Fri Jul 01 16:55:44 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 \
--- a/make/Main.gmk Fri Jul 01 12:32:21 2016 +0200
+++ b/make/Main.gmk Fri Jul 01 16:55:44 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)
--- a/nashorn/.hgtags Fri Jul 01 12:32:21 2016 +0200
+++ b/nashorn/.hgtags Fri Jul 01 16:55:44 2016 -0700
@@ -357,3 +357,5 @@
5992041b0794fa5f25518673d63e8f35bcc89360 jdk-9+121
b1de131a3fed6845c78bdda358ee127532f16a3f jdk-9+122
9ed859b4faaf9ff7cd35f9e7f51c7e630303067a jdk-9+123
+5d68f5155dded7efec7d5aca5d631caa7ee1042b jdk-9+124
+a32d419d73fe881a935b567c57dab9bfe3ed5f92 jdk-9+125
--- a/nashorn/buildtools/nasgen/src/jdk/nashorn/internal/tools/nasgen/ClassGenerator.java Fri Jul 01 12:32:21 2016 +0200
+++ b/nashorn/buildtools/nasgen/src/jdk/nashorn/internal/tools/nasgen/ClassGenerator.java Fri Jul 01 16:55:44 2016 -0700
@@ -280,12 +280,11 @@
addField(cv, name, OBJECT_DESC);
}
- @SuppressWarnings("deprecation")
static void newFunction(final MethodGenerator mi, final String objName, final String className, final MemberInfo memInfo, final List<MemberInfo> specs) {
final boolean arityFound = (memInfo.getArity() != MemberInfo.DEFAULT_ARITY);
loadFunctionName(mi, memInfo.getName());
- mi.visitLdcInsn(new Handle(H_INVOKESTATIC, className, memInfo.getJavaName(), memInfo.getJavaDesc()));
+ mi.visitLdcInsn(new Handle(H_INVOKESTATIC, className, memInfo.getJavaName(), memInfo.getJavaDesc(), false));
assert specs != null;
if (!specs.isEmpty()) {
@@ -306,7 +305,6 @@
mi.invokeVirtual(SCRIPTFUNCTION_TYPE, SCRIPTFUNCTION_SETDOCUMENTATIONKEY, SCRIPTFUNCTION_SETDOCUMENTATIONKEY_DESC);
}
- @SuppressWarnings("deprecation")
static void linkerAddGetterSetter(final MethodGenerator mi, final String className, final MemberInfo memInfo) {
final String propertyName = memInfo.getName();
// stack: Collection
@@ -319,13 +317,13 @@
mi.push(memInfo.getAttributes());
// setup getter method handle
String javaName = GETTER_PREFIX + memInfo.getJavaName();
- mi.visitLdcInsn(new Handle(H_INVOKEVIRTUAL, className, javaName, getterDesc(memInfo)));
+ mi.visitLdcInsn(new Handle(H_INVOKEVIRTUAL, className, javaName, getterDesc(memInfo), false));
// setup setter method handle
if (memInfo.isFinal()) {
mi.pushNull();
} else {
javaName = SETTER_PREFIX + memInfo.getJavaName();
- mi.visitLdcInsn(new Handle(H_INVOKEVIRTUAL, className, javaName, setterDesc(memInfo)));
+ mi.visitLdcInsn(new Handle(H_INVOKEVIRTUAL, className, javaName, setterDesc(memInfo), false));
}
// property = AccessorProperty.create(key, flags, getter, setter);
mi.invokeStatic(ACCESSORPROPERTY_TYPE, ACCESSORPROPERTY_CREATE, ACCESSORPROPERTY_CREATE_DESC);
@@ -336,7 +334,6 @@
// stack: Collection
}
- @SuppressWarnings("deprecation")
static void linkerAddGetterSetter(final MethodGenerator mi, final String className, final MemberInfo getter, final MemberInfo setter) {
final String propertyName = getter.getName();
// stack: Collection
@@ -349,13 +346,13 @@
mi.push(getter.getAttributes());
// setup getter method handle
mi.visitLdcInsn(new Handle(H_INVOKESTATIC, className,
- getter.getJavaName(), getter.getJavaDesc()));
+ getter.getJavaName(), getter.getJavaDesc(), false));
// setup setter method handle
if (setter == null) {
mi.pushNull();
} else {
mi.visitLdcInsn(new Handle(H_INVOKESTATIC, className,
- setter.getJavaName(), setter.getJavaDesc()));
+ setter.getJavaName(), setter.getJavaDesc(), false));
}
// property = AccessorProperty.create(key, flags, getter, setter);
mi.invokeStatic(ACCESSORPROPERTY_TYPE, ACCESSORPROPERTY_CREATE, ACCESSORPROPERTY_CREATE_DESC);
--- a/nashorn/buildtools/nasgen/src/jdk/nashorn/internal/tools/nasgen/ConstructorGenerator.java Fri Jul 01 12:32:21 2016 +0200
+++ b/nashorn/buildtools/nasgen/src/jdk/nashorn/internal/tools/nasgen/ConstructorGenerator.java Fri Jul 01 16:55:44 2016 -0700
@@ -178,7 +178,6 @@
}
}
- @SuppressWarnings("deprecation")
private void callSuper(final MethodGenerator mi) {
String superClass, superDesc;
mi.loadThis();
@@ -192,7 +191,7 @@
superClass = SCRIPTFUNCTION_TYPE;
superDesc = (memberCount > 0) ? SCRIPTFUNCTION_INIT_DESC4 : SCRIPTFUNCTION_INIT_DESC3;
mi.loadLiteral(constructor.getName());
- mi.visitLdcInsn(new Handle(H_INVOKESTATIC, scriptClassInfo.getJavaName(), constructor.getJavaName(), constructor.getJavaDesc()));
+ mi.visitLdcInsn(new Handle(H_INVOKESTATIC, scriptClassInfo.getJavaName(), constructor.getJavaName(), constructor.getJavaDesc(), false));
loadMap(mi);
mi.memberInfoArray(scriptClassInfo.getJavaName(), specs); //pushes null if specs empty
}
--- a/nashorn/buildtools/nasgen/src/jdk/nashorn/internal/tools/nasgen/MethodGenerator.java Fri Jul 01 12:32:21 2016 +0200
+++ b/nashorn/buildtools/nasgen/src/jdk/nashorn/internal/tools/nasgen/MethodGenerator.java Fri Jul 01 16:55:44 2016 -0700
@@ -390,7 +390,6 @@
return EMPTY_LINK_LOGIC_TYPE.equals(type);
}
- @SuppressWarnings("deprecation")
void memberInfoArray(final String className, final List<MemberInfo> mis) {
if (mis.isEmpty()) {
pushNull();
@@ -405,7 +404,7 @@
push(pos++);
visitTypeInsn(NEW, SPECIALIZATION_TYPE);
dup();
- visitLdcInsn(new Handle(H_INVOKESTATIC, className, mi.getJavaName(), mi.getJavaDesc()));
+ visitLdcInsn(new Handle(H_INVOKESTATIC, className, mi.getJavaName(), mi.getJavaDesc(), false));
final Type linkLogicClass = mi.getLinkLogicClass();
final boolean linkLogic = !linkLogicIsEmpty(linkLogicClass);
final String ctor = linkLogic ? SPECIALIZATION_INIT3 : SPECIALIZATION_INIT2;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/samples/checknames.js Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,142 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * - Neither the name of Oracle nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+// Simple Java identifier name pattern checker. You can check
+// class, method and variable names in java sources to confirm
+// to specified patterns. Default check functions just check for
+// 'too short' names. You can customize checkXYZName functions to
+// have arbitrary name pattern checks.
+
+// Usage: jjs checknames.js -- <directory>
+
+if (arguments.length == 0) {
+ print("Usage: jjs checknames.js -- <directory>");
+ exit(1);
+}
+
+// Java types used
+var File = Java.type("java.io.File");
+var Files = Java.type("java.nio.file.Files");
+var StringArray = Java.type("java.lang.String[]");
+var ToolProvider = Java.type("javax.tools.ToolProvider");
+var Tree = Java.type("com.sun.source.tree.Tree");
+var Trees = Java.type("com.sun.source.util.Trees");
+var TreeScanner = Java.type("com.sun.source.util.TreeScanner");
+
+// replace these checkXYZ functions with checks you want!
+function checkClassName(name) {
+ return name.length < 3;
+}
+
+function checkMethodName(name) {
+ return name.length < 3;
+}
+
+function checkVarName(name) {
+ return name.length < 3;
+}
+
+function checkNames() {
+ // get the system compiler tool
+ var compiler = ToolProvider.systemJavaCompiler;
+ // get standard file manager
+ var fileMgr = compiler.getStandardFileManager(null, null, null);
+ // Using Java.to convert script array (arguments) to a Java String[]
+ var compUnits = fileMgr.getJavaFileObjects(Java.to(arguments, StringArray));
+ // create a new compilation task
+ var task = compiler.getTask(null, fileMgr, null, null, null, compUnits);
+ var sourcePositions = Trees.instance(task).sourcePositions;
+ // subclass SimpleTreeVisitor
+ var NameChecker = Java.extend(TreeScanner);
+
+ var visitor = new NameChecker() {
+ report: function(node) {
+ var pos = sourcePositions.getStartPosition(this.compUnit, node);
+ var line = this.lineMap.getLineNumber(pos);
+ var col = this.lineMap.getColumnNumber(pos);
+ print("Too short name: " + node.name + " @ " + this.fileName + ":" + line + ":" + col);
+ },
+
+ // override to capture information on current compilation unit
+ visitCompilationUnit: function(compUnit, p) {
+ this.compUnit = compUnit;
+ this.lineMap = compUnit.lineMap;
+ this.fileName = compUnit.sourceFile.name;
+
+ return Java.super(visitor).visitCompilationUnit(compUnit, p);
+ },
+
+ // override to check class name
+ visitClass: function(node, p) {
+ if (checkClassName(node.simpleName.toString())) {
+ this.report(node);
+ }
+
+ return Java.super(visitor).visitClass(node, p);
+ },
+
+ // override to check method name
+ visitMethod: function(node, p) {
+ if (checkMethodName(node.name.toString())) {
+ this.report(node);
+ }
+
+ return Java.super(visitor).visitMethod(node, p);
+ },
+
+ // override to check variable name
+ visitVariable: function(node, p) {
+ if (checkVarName(node.name.toString())) {
+ this.report(node);
+ }
+
+ return Java.super(visitor).visitVariable(node, p);
+ }
+ }
+
+ for each (var cu in task.parse()) {
+ cu.accept(visitor, null);
+ }
+}
+
+// for each ".java" file in directory (recursively).
+function main(dir) {
+ var totalCount = 0;
+ Files.walk(dir.toPath()).
+ forEach(function(p) {
+ var name = p.toFile().absolutePath;
+ if (name.endsWith(".java")) {
+ checkNames(p);
+ }
+ });
+}
+
+main(new File(arguments[0]));
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/AssertsEnabled.java Fri Jul 01 12:32:21 2016 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/AssertsEnabled.java Fri Jul 01 16:55:44 2016 -0700
@@ -28,7 +28,6 @@
/**
* Class that exposes the current state of asserts.
*/
-@SuppressWarnings("all")
public final class AssertsEnabled {
private static boolean assertsEnabled = false;
static {
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/MethodEmitter.java Fri Jul 01 12:32:21 2016 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/MethodEmitter.java Fri Jul 01 16:55:44 2016 -0700
@@ -32,6 +32,7 @@
import static jdk.internal.org.objectweb.asm.Opcodes.GETSTATIC;
import static jdk.internal.org.objectweb.asm.Opcodes.GOTO;
import static jdk.internal.org.objectweb.asm.Opcodes.H_INVOKESTATIC;
+import static jdk.internal.org.objectweb.asm.Opcodes.H_INVOKEINTERFACE;
import static jdk.internal.org.objectweb.asm.Opcodes.IFEQ;
import static jdk.internal.org.objectweb.asm.Opcodes.IFGE;
import static jdk.internal.org.objectweb.asm.Opcodes.IFGT;
@@ -170,12 +171,10 @@
}
/** Bootstrap for normal indy:s */
- @SuppressWarnings("deprecation")
- private static final Handle LINKERBOOTSTRAP = new Handle(H_INVOKESTATIC, Bootstrap.BOOTSTRAP.className(), Bootstrap.BOOTSTRAP.name(), Bootstrap.BOOTSTRAP.descriptor());
+ private static final Handle LINKERBOOTSTRAP = new Handle(H_INVOKESTATIC, Bootstrap.BOOTSTRAP.className(), Bootstrap.BOOTSTRAP.name(), Bootstrap.BOOTSTRAP.descriptor(), false);
/** Bootstrap for array populators */
- @SuppressWarnings("deprecation")
- private static final Handle POPULATE_ARRAY_BOOTSTRAP = new Handle(H_INVOKESTATIC, RewriteException.BOOTSTRAP.className(), RewriteException.BOOTSTRAP.name(), RewriteException.BOOTSTRAP.descriptor());
+ private static final Handle POPULATE_ARRAY_BOOTSTRAP = new Handle(H_INVOKESTATIC, RewriteException.BOOTSTRAP.className(), RewriteException.BOOTSTRAP.name(), RewriteException.BOOTSTRAP.descriptor(), false);
/**
* Constructor - internal use from ClassEmitter only
@@ -1007,10 +1006,10 @@
*
* @return the method emitter
*/
- @SuppressWarnings("deprecation")
MethodEmitter loadHandle(final String className, final String methodName, final String descName, final EnumSet<Flag> flags) {
+ final int flag = Flag.getValue(flags);
debug("load handle ");
- pushType(Type.OBJECT.ldc(method, new Handle(Flag.getValue(flags), className, methodName, descName)));
+ pushType(Type.OBJECT.ldc(method, new Handle(flag, className, methodName, descName, flag == H_INVOKEINTERFACE)));
return this;
}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/Global.java Fri Jul 01 12:32:21 2016 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/Global.java Fri Jul 01 16:55:44 2016 -0700
@@ -2474,14 +2474,14 @@
}
@Override
- protected FindProperty findProperty(final Object key, final boolean deep, final ScriptObject start) {
- if (lexicalScope != null && start != this && start.isScope()) {
+ protected FindProperty findProperty(final Object key, final boolean deep, boolean isScope, final ScriptObject start) {
+ if (lexicalScope != null && isScope) {
final FindProperty find = lexicalScope.findProperty(key, false);
if (find != null) {
return find;
}
}
- return super.findProperty(key, deep, start);
+ return super.findProperty(key, deep, isScope, start);
}
@Override
@@ -2854,8 +2854,7 @@
sb.append("$Constructor");
final Class<?> funcClass = Class.forName(sb.toString());
- @SuppressWarnings("deprecation")
- final T res = clazz.cast(funcClass.newInstance());
+ final T res = clazz.cast(funcClass.getDeclaredConstructor().newInstance());
if (res instanceof ScriptFunction) {
// All global constructor prototypes are not-writable,
@@ -2871,8 +2870,12 @@
res.setIsBuiltin();
return res;
- } catch (final ClassNotFoundException | InstantiationException | IllegalAccessException e) {
- throw new RuntimeException(e);
+ } catch (final Exception e) {
+ if (e instanceof RuntimeException) {
+ throw (RuntimeException)e;
+ } else {
+ throw new RuntimeException(e);
+ }
}
}
@@ -2882,14 +2885,17 @@
final String className = PACKAGE_PREFIX + name + "$Prototype";
final Class<?> funcClass = Class.forName(className);
- @SuppressWarnings("deprecation")
- final ScriptObject res = (ScriptObject) funcClass.newInstance();
+ final ScriptObject res = (ScriptObject) funcClass.getDeclaredConstructor().newInstance();
res.setIsBuiltin();
res.setInitialProto(prototype);
return res;
- } catch (final ClassNotFoundException | InstantiationException | IllegalAccessException e) {
- throw new RuntimeException(e);
+ } catch (final Exception e) {
+ if (e instanceof RuntimeException) {
+ throw (RuntimeException)e;
+ } else {
+ throw new RuntimeException(e);
+ }
}
}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/parser/Lexer.java Fri Jul 01 12:32:21 2016 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/parser/Lexer.java Fri Jul 01 16:55:44 2016 -0700
@@ -609,6 +609,9 @@
if (stream.get(stream.last()) != token) {
return false;
}
+
+ // Record current position in case multiple heredocs start on this line - see JDK-8073653
+ final State state = saveState();
// Rewind to token start position
reset(Token.descPosition(token));
@@ -616,7 +619,7 @@
return scanRegEx();
} else if (ch0 == '<') {
if (ch1 == '<') {
- return scanHereString(lir);
+ return scanHereString(lir, state);
} else if (Character.isJavaIdentifierStart(ch1)) {
return scanXMLLiteral();
}
@@ -1539,7 +1542,7 @@
*
* @return TRUE if is a here string.
*/
- private boolean scanHereString(final LineInfoReceiver lir) {
+ private boolean scanHereString(final LineInfoReceiver lir, final State oldState) {
assert ch0 == '<' && ch1 == '<';
if (scripting) {
// Record beginning of here string.
@@ -1589,6 +1592,11 @@
int lastLinePosition = position;
restState.setLimit(position);
+ if (oldState.position > position) {
+ restoreState(oldState);
+ skipLine(false);
+ }
+
// Record beginning of string.
final State stringState = saveState();
int stringEnd = position;
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ScriptObject.java Fri Jul 01 12:32:21 2016 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ScriptObject.java Fri Jul 01 16:55:44 2016 -0700
@@ -775,7 +775,7 @@
* @return FindPropertyData or null if not found.
*/
public final FindProperty findProperty(final Object key, final boolean deep) {
- return findProperty(key, deep, this);
+ return findProperty(key, deep, false, this);
}
/**
@@ -791,12 +791,12 @@
* @see jdk.nashorn.internal.objects.NativeArray
*
* @param key Property key.
- * @param deep Whether the search should look up proto chain.
+ * @param deep true if the search should look up proto chain
+ * @param isScope true if this is a scope access
* @param start the object on which the lookup was originally initiated
- *
* @return FindPropertyData or null if not found.
*/
- protected FindProperty findProperty(final Object key, final boolean deep, final ScriptObject start) {
+ protected FindProperty findProperty(final Object key, final boolean deep, boolean isScope, final ScriptObject start) {
final PropertyMap selfMap = getMap();
final Property property = selfMap.findProperty(key);
@@ -807,7 +807,7 @@
if (deep) {
final ScriptObject myProto = getProto();
- final FindProperty find = myProto == null ? null : myProto.findProperty(key, true, start);
+ final FindProperty find = myProto == null ? null : myProto.findProperty(key, true, isScope, start);
// checkSharedProtoMap must be invoked after myProto.checkSharedProtoMap to propagate
// shared proto invalidation up the prototype chain. It also must be invoked when prototype is null.
checkSharedProtoMap();
@@ -1977,7 +1977,7 @@
return findMegaMorphicGetMethod(desc, name, operation == StandardOperation.GET_METHOD);
}
- final FindProperty find = findProperty(name, true);
+ final FindProperty find = findProperty(name, true, NashornCallSiteDescriptor.isScope(desc), this);
MethodHandle mh;
if (find == null) {
@@ -2035,7 +2035,7 @@
}
private static GuardedInvocation findMegaMorphicGetMethod(final CallSiteDescriptor desc, final String name, final boolean isMethod) {
- Context.getContextTrusted().getLogger(ObjectClassGenerator.class).warning("Megamorphic getter: " + desc + " " + name + " " +isMethod);
+ Context.getContextTrusted().getLogger(ObjectClassGenerator.class).warning("Megamorphic getter: ", desc, " ", name + " ", isMethod);
final MethodHandle invoker = MH.insertArguments(MEGAMORPHIC_GET, 1, name, isMethod, NashornCallSiteDescriptor.isScope(desc));
final MethodHandle guard = getScriptObjectGuard(desc.getMethodType(), true);
return new GuardedInvocation(invoker, guard);
@@ -2043,7 +2043,7 @@
@SuppressWarnings("unused")
private Object megamorphicGet(final String key, final boolean isMethod, final boolean isScope) {
- final FindProperty find = findProperty(key, true);
+ final FindProperty find = findProperty(key, true, isScope, this);
if (find != null) {
return find.getObjectValue();
}
@@ -2181,7 +2181,7 @@
*
* toString = function() { print("global toString"); } // don't affect Object.prototype.toString
*/
- FindProperty find = findProperty(name, true, this);
+ FindProperty find = findProperty(name, true, NashornCallSiteDescriptor.isScope(desc), this);
// If it's not a scope search, then we don't want any inherited properties except those with user defined accessors.
if (find != null && find.isInherited() && !find.getProperty().isAccessorProperty()) {
@@ -2258,6 +2258,7 @@
}
private GuardedInvocation findMegaMorphicSetMethod(final CallSiteDescriptor desc, final String name) {
+ Context.getContextTrusted().getLogger(ObjectClassGenerator.class).warning("Megamorphic setter: ", desc, " ", name);
final MethodType type = desc.getMethodType().insertParameterTypes(1, Object.class);
//never bother with ClassCastExceptionGuard for megamorphic callsites
final GuardedInvocation inv = findSetIndexMethod(getClass(), desc, false, type);
@@ -2734,7 +2735,7 @@
if (isValidArrayIndex(index)) {
for (ScriptObject object = this; ; ) {
if (object.getMap().containsArrayKeys()) {
- final FindProperty find = object.findProperty(key, false, this);
+ final FindProperty find = object.findProperty(key, false);
if (find != null) {
return getIntValue(find, programPoint);
@@ -2805,7 +2806,7 @@
if (isValidArrayIndex(index)) {
for (ScriptObject object = this; ; ) {
if (object.getMap().containsArrayKeys()) {
- final FindProperty find = object.findProperty(key, false, this);
+ final FindProperty find = object.findProperty(key, false);
if (find != null) {
return getDoubleValue(find, programPoint);
}
@@ -2875,7 +2876,7 @@
if (isValidArrayIndex(index)) {
for (ScriptObject object = this; ; ) {
if (object.getMap().containsArrayKeys()) {
- final FindProperty find = object.findProperty(key, false, this);
+ final FindProperty find = object.findProperty(key, false);
if (find != null) {
return find.getObjectValue();
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ScriptRuntime.java Fri Jul 01 12:32:21 2016 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ScriptRuntime.java Fri Jul 01 16:55:44 2016 -0700
@@ -704,7 +704,17 @@
if (property != null) {
if (obj instanceof ScriptObject) {
- obj = ((ScriptObject)obj).get(property);
+ // this is a scope identifier
+ assert property instanceof String;
+ final ScriptObject sobj = (ScriptObject) obj;
+
+ final FindProperty find = sobj.findProperty(property, true, true, sobj);
+ if (find != null) {
+ obj = find.getObjectValue();
+ } else {
+ obj = sobj.invokeNoSuchProperty(property, false, UnwarrantedOptimismException.INVALID_PROGRAM_POINT);
+ }
+
if(Global.isLocationPropertyPlaceholder(obj)) {
if(CompilerConstants.__LINE__.name().equals(property)) {
obj = 0;
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/Source.java Fri Jul 01 12:32:21 2016 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/Source.java Fri Jul 01 16:55:44 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;
}
}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/WithObject.java Fri Jul 01 12:32:21 2016 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/WithObject.java Fri Jul 01 16:55:44 2016 -0700
@@ -193,20 +193,20 @@
*
* @param key Property key.
* @param deep Whether the search should look up proto chain.
+ * @param isScope true if is this a scope access
* @param start the object on which the lookup was originally initiated
- *
* @return FindPropertyData or null if not found.
*/
@Override
- protected FindProperty findProperty(final Object key, final boolean deep, final ScriptObject start) {
+ protected FindProperty findProperty(final Object key, final boolean deep, boolean isScope, final ScriptObject start) {
// We call findProperty on 'expression' with 'expression' itself as start parameter.
// This way in ScriptObject.setObject we can tell the property is from a 'with' expression
// (as opposed from another non-scope object in the proto chain such as Object.prototype).
- final FindProperty exprProperty = expression.findProperty(key, true, expression);
+ final FindProperty exprProperty = expression.findProperty(key, true, false, expression);
if (exprProperty != null) {
return exprProperty;
}
- return super.findProperty(key, deep, start);
+ return super.findProperty(key, deep, isScope, start);
}
@Override
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/linker/JavaAdapterBytecodeGenerator.java Fri Jul 01 12:32:21 2016 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/linker/JavaAdapterBytecodeGenerator.java Fri Jul 01 16:55:44 2016 -0700
@@ -191,18 +191,16 @@
private static final Call RUN = interfaceCallNoLookup(Runnable.class, "run", void.class);
// ASM handle to the bootstrap method
- @SuppressWarnings("deprecation")
private static final Handle BOOTSTRAP_HANDLE = new Handle(H_INVOKESTATIC,
Type.getInternalName(JavaAdapterServices.class), "bootstrap",
MethodType.methodType(CallSite.class, Lookup.class, String.class,
- MethodType.class, int.class).toMethodDescriptorString());
+ MethodType.class, int.class).toMethodDescriptorString(), false);
// ASM handle to the bootstrap method for array populator
- @SuppressWarnings("deprecation")
private static final Handle CREATE_ARRAY_BOOTSTRAP_HANDLE = new Handle(H_INVOKESTATIC,
Type.getInternalName(JavaAdapterServices.class), "createArrayBootstrap",
MethodType.methodType(CallSite.class, Lookup.class, String.class,
- MethodType.class).toMethodDescriptorString());
+ MethodType.class).toMethodDescriptorString(), false);
// Field type names used in the generated bytecode
private static final String SCRIPT_OBJECT_TYPE_DESCRIPTOR = SCRIPT_OBJECT_TYPE.getDescriptor();
@@ -1061,13 +1059,12 @@
endMethod(mv);
}
- @SuppressWarnings("deprecation")
private void generateFinalizerOverride() {
final InstructionAdapter mv = new InstructionAdapter(cw.visitMethod(ACC_PUBLIC, "finalize",
VOID_METHOD_DESCRIPTOR, null, null));
// Overridden finalizer will take a MethodHandle to the finalizer delegating method, ...
mv.aconst(new Handle(Opcodes.H_INVOKESTATIC, generatedClassName, FINALIZER_DELEGATE_NAME,
- FINALIZER_DELEGATE_METHOD_DESCRIPTOR));
+ FINALIZER_DELEGATE_METHOD_DESCRIPTOR, false));
mv.visitVarInsn(ALOAD, 0);
// ...and invoke it through JavaAdapterServices.invokeNoPermissions
INVOKE_NO_PERMISSIONS.invoke(mv);
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/regexp/RegExpScanner.java Fri Jul 01 12:32:21 2016 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/regexp/RegExpScanner.java Fri Jul 01 16:55:44 2016 -0700
@@ -80,8 +80,17 @@
this.negLookaheadLevel = negLookaheadLevel;
}
- boolean isContained(final int group, final int level) {
- return group == this.negLookaheadGroup && level >= this.negLookaheadLevel;
+ /**
+ * Returns true if this Capture can be referenced from the position specified by the
+ * group and level parameters. This is the case if either the group is not within
+ * a negative lookahead, or the position of the referrer is in the same negative lookahead.
+ *
+ * @param group current negative lookahead group
+ * @param level current negative lokahead level
+ * @return true if this capture group can be referenced from the given position
+ */
+ boolean canBeReferencedFrom(final int group, final int level) {
+ return this.negLookaheadLevel == 0 || (group == this.negLookaheadGroup && level >= this.negLookaheadLevel);
}
}
@@ -671,8 +680,9 @@
} else if (decimalValue <= caps.size()) {
// Captures inside a negative lookahead are undefined when referenced from the outside.
- if (!caps.get(decimalValue - 1).isContained(negLookaheadGroup, negLookaheadLevel)) {
- // Reference to capture in negative lookahead, omit from output buffer.
+ final Capture capture = caps.get(decimalValue - 1);
+ if (!capture.canBeReferencedFrom(negLookaheadGroup, negLookaheadLevel)) {
+ // Outside reference to capture in negative lookahead, omit from output buffer.
sb.setLength(sb.length() - 1);
} else {
// Append backreference to output buffer.
--- a/nashorn/test/Makefile Fri Jul 01 12:32:21 2016 +0200
+++ b/nashorn/test/Makefile Fri Jul 01 16:55:44 2016 -0700
@@ -118,19 +118,6 @@
JAVA_VM_ARGS = $(JPRT_PRODUCT_VM_ARGS)
endif
-# jtreg -nativepath <dir>
-#
-# 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), )
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8073653.js Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,59 @@
+/*
+ * 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.
+ */
+
+/**
+ * JDK-8073653: Secondary heredoc eating wrong lines.
+ *
+ * @test
+ * @run
+ * @option -scripting
+ */
+
+
+print(<<EOD1); print(<<EOD2.toUpperCase()); var a = <<EOD3, b = <<EOD4.toLowerCase(), c = [<<EOD5, <<EOD6];
+This is line 1.
+This is line 2.
+EOD1
+This is line 3.
+This is line 4.
+EOD2
+This is line 5.
+This is line 6.
+EOD3
+This is line 7.
+This is line 8.
+EOD4
+This is line 9.
+This is line 10.
+EOD5
+This is line 11.
+This is line 12.
+EOD6
+
+print(a);
+print(b);
+for (var i in c) {
+ print(c[i]);
+}
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8073653.js.EXPECTED Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,12 @@
+This is line 1.
+This is line 2.
+THIS IS LINE 3.
+THIS IS LINE 4.
+This is line 5.
+This is line 6.
+this is line 7.
+this is line 8.
+This is line 9.
+This is line 10.
+This is line 11.
+This is line 12.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8137240.js Fri Jul 01 16:55:44 2016 -0700
@@ -0,0 +1,44 @@
+/*
+ * 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.
+ */
+
+/**
+ * JDK-8137240: Negative lookahead in RegEx breaks backreference
+ *
+ * @test
+ * @run
+ */
+
+
+Assert.assertEquals('aa'.replace(/(a)(?!b)\1/gm, 'c'), 'c');
+
+var result = 'aa'.match(/(a)(?!b)\1/);
+Assert.assertTrue(result.length === 2);
+Assert.assertTrue(result[0] === 'aa');
+Assert.assertTrue(result[1] === 'a');
+
+result = 'aa'.match(/(a)(?!(b))\2(a)/);
+Assert.assertTrue(result.length === 4);
+Assert.assertTrue(result[0] === 'aa');
+Assert.assertTrue(result[1] === 'a');
+Assert.assertTrue(result[2] === undefined);
+Assert.assertTrue(result[3] === 'a');
--- a/nashorn/test/src/jdk/nashorn/internal/runtime/test/LexicalBindingTest.java Fri Jul 01 12:32:21 2016 +0200
+++ b/nashorn/test/src/jdk/nashorn/internal/runtime/test/LexicalBindingTest.java Fri Jul 01 16:55:44 2016 -0700
@@ -46,8 +46,8 @@
public class LexicalBindingTest {
final static String LANGUAGE_ES6 = "--language=es6";
- final static int NUMBER_OF_CONTEXTS = 20;
- final static int MEGAMORPHIC_LOOP_COUNT = 20;
+ final static int NUMBER_OF_CONTEXTS = 40;
+ final static int MEGAMORPHIC_LOOP_COUNT = 40;
/**
* Test access to global var-declared variables for shared script classes with multiple globals.
@@ -57,19 +57,21 @@
final NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
final ScriptEngine e = factory.getScriptEngine();
final ScriptContext[] contexts = new ScriptContext[NUMBER_OF_CONTEXTS];
- final String sharedScript = "foo";
+ final String sharedScript1 = "foo";
+ final String sharedScript2 = "bar = foo; bar";
for (int i = 0; i < NUMBER_OF_CONTEXTS; i++) {
final ScriptContext context = contexts[i] = new SimpleScriptContext();
final Bindings b = e.createBindings();
context.setBindings(b, ScriptContext.ENGINE_SCOPE);
- assertEquals(e.eval("var foo = '" + i + "';", context), null);
+ assertEquals(e.eval("var foo = '" + i + "'; var bar;", context), null);
}
for (int i = 0; i < NUMBER_OF_CONTEXTS; i++) {
final ScriptContext context = contexts[i];
- assertEquals(e.eval(sharedScript, context), String.valueOf(i));
+ assertEquals(e.eval(sharedScript1, context), String.valueOf(i));
+ assertEquals(e.eval(sharedScript2, context), String.valueOf(i));
}
}
@@ -81,19 +83,21 @@
final NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
final ScriptEngine e = factory.getScriptEngine(LANGUAGE_ES6);
final ScriptContext[] contexts = new ScriptContext[NUMBER_OF_CONTEXTS];
- final String sharedScript = "foo";
+ final String sharedScript1 = "foo";
+ final String sharedScript2 = "bar = foo; bar";
for (int i = 0; i < NUMBER_OF_CONTEXTS; i++) {
final ScriptContext context = contexts[i] = new SimpleScriptContext();
final Bindings b = e.createBindings();
context.setBindings(b, ScriptContext.ENGINE_SCOPE);
- assertEquals(e.eval("let foo = '" + i + "';", context), null);
+ assertEquals(e.eval("let foo = '" + i + "'; let bar; ", context), null);
}
for (int i = 0; i < NUMBER_OF_CONTEXTS; i++) {
final ScriptContext context = contexts[i];
- assertEquals(e.eval(sharedScript, context), String.valueOf(i));
+ assertEquals(e.eval(sharedScript1, context), String.valueOf(i));
+ assertEquals(e.eval(sharedScript2, context), String.valueOf(i));
}
}
@@ -182,6 +186,27 @@
assertEquals(e.eval(sharedScript, newCtxt), "newer context");
}
+ /**
+ * Make sure lexically defined variables are accessible in other scripts.
+ */
+ @Test
+ public void lexicalScopeTest() throws ScriptException {
+ final NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
+ final ScriptEngine e = factory.getScriptEngine(LANGUAGE_ES6);
+
+ e.eval("let x; const y = 'world';");
+
+ assertEquals(e.eval("x = 'hello'"), "hello");
+ assertEquals(e.eval("typeof x"), "string");
+ assertEquals(e.eval("typeof y"), "string");
+ assertEquals(e.eval("x"), "hello");
+ assertEquals(e.eval("y"), "world");
+ assertEquals(e.eval("typeof this.x"), "undefined");
+ assertEquals(e.eval("typeof this.y"), "undefined");
+ assertEquals(e.eval("this.x"), null);
+ assertEquals(e.eval("this.y"), null);
+ }
+
private static class ScriptRunner implements Runnable {
final ScriptEngine engine;