--- a/.hgtags Thu Oct 10 08:51:55 2013 +0200
+++ b/.hgtags Thu Oct 10 13:41:08 2013 -0700
@@ -230,3 +230,5 @@
514b0b69fb9683ef52062fd962a3e0644431f64d jdk8-b106
892889f445755790ae90e61775bfb59ddc6182b5 jdk8-b107
74049f7a28b48c14910106a75d9f2504169c352e jdk8-b108
+af9a674e12a16da1a4bd53e4990ddb1121a21ef1 jdk8-b109
+b5d2bf482a3ea1cca08c994512804ffbc73de0a1 jdk8-b110
--- a/.hgtags-top-repo Thu Oct 10 08:51:55 2013 +0200
+++ b/.hgtags-top-repo Thu Oct 10 13:41:08 2013 -0700
@@ -230,3 +230,5 @@
8e7b4d9fb00fdf1334376aeac050c9bca6d1b383 jdk8-b106
0874bb4707b723d5bb108d379c557cf41529d1a7 jdk8-b107
9286a6e61291246d88af713f1ef79adeea30fe2e jdk8-b108
+91f47e8da5c60de58ed195e9b57f3bf192a18f83 jdk8-b109
+4faa09c7fe555de086dd9048d3c5cc92317d6f45 jdk8-b110
--- a/NewMakefile.gmk Thu Oct 10 08:51:55 2013 +0200
+++ b/NewMakefile.gmk Thu Oct 10 13:41:08 2013 -0700
@@ -66,7 +66,7 @@
else
# We are building multiple configurations.
# First, find out the valid targets
- # Run the makefile with an arbitraty SPEC using -p -q (quiet dry-run and dump rules) to find
+ # Run the makefile with an arbitrary SPEC using -p -q (quiet dry-run and dump rules) to find
# available PHONY targets. Use this list as valid targets to pass on to the repeated calls.
all_phony_targets=$(filter-out $(global_targets) bundles-only, $(strip $(shell \
$(MAKE) -p -q -f common/makefiles/Main.gmk FRC SPEC=$(firstword $(SPEC)) | \
--- a/common/autoconf/generated-configure.sh Thu Oct 10 08:51:55 2013 +0200
+++ b/common/autoconf/generated-configure.sh Thu Oct 10 13:41:08 2013 -0700
@@ -1016,8 +1016,8 @@
enable_unlimited_crypto
with_milestone
with_update_version
+with_user_release_suffix
with_build_number
-with_user_release_suffix
with_boot_jdk
with_boot_jdk_jvmargs
with_add_source_root
@@ -1755,10 +1755,10 @@
--with-cacerts-file specify alternative cacerts file
--with-milestone Set milestone value for build [internal]
--with-update-version Set update version value for build [b00]
- --with-build-number Set build number value for build [b00]
--with-user-release-suffix
Add a custom string to the version string if build
number isn't set.[username_builddateb00]
+ --with-build-number Set build number value for build [b00]
--with-boot-jdk path to Boot JDK (used to bootstrap build) [probed]
--with-boot-jdk-jvmargs specify JVM arguments to be passed to all
invocations of the Boot JDK, overriding the default
@@ -3818,7 +3818,7 @@
#CUSTOM_AUTOCONF_INCLUDE
# Do not change or remove the following line, it is needed for consistency checks:
-DATE_WHEN_GENERATED=1379504921
+DATE_WHEN_GENERATED=1381162713
###############################################################################
#
@@ -10935,7 +10935,7 @@
if test "x$SUPPORT_HEADFUL" = xyes; then
# We are building both headful and headless.
- headful_msg="inlude support for both headful and headless"
+ headful_msg="include support for both headful and headless"
fi
if test "x$SUPPORT_HEADFUL" = xno; then
@@ -11048,6 +11048,18 @@
fi
+# Check whether --with-user-release-suffix was given.
+if test "${with_user_release_suffix+set}" = set; then :
+ withval=$with_user_release_suffix;
+fi
+
+if test "x$with_user_release_suffix" = xyes; then
+ as_fn_error $? "Release suffix must have a value" "$LINENO" 5
+elif test "x$with_user_release_suffix" != x; then
+ USER_RELEASE_SUFFIX="$with_user_release_suffix"
+fi
+
+
# Check whether --with-build-number was given.
if test "${with_build_number+set}" = set; then :
withval=$with_build_number;
@@ -11058,27 +11070,16 @@
elif test "x$with_build_number" != x; then
JDK_BUILD_NUMBER="$with_build_number"
fi
+# Define default USER_RELEASE_SUFFIX if BUILD_NUMBER and USER_RELEASE_SUFFIX are not set
if test "x$JDK_BUILD_NUMBER" = x; then
JDK_BUILD_NUMBER=b00
-fi
-
-
-# Check whether --with-user-release-suffix was given.
-if test "${with_user_release_suffix+set}" = set; then :
- withval=$with_user_release_suffix;
-fi
-
-if test "x$with_user_release_suffix" = xyes; then
- as_fn_error $? "Release suffix must have a value" "$LINENO" 5
-elif test "x$with_user_release_suffix" != x; then
- USER_RELEASE_SUFFIX="$with_user_release_suffix"
-else
- BUILD_DATE=`date '+%Y_%m_%d_%H_%M'`
- # Avoid [:alnum:] since it depends on the locale.
- CLEAN_USERNAME=`echo "$USER" | $TR -d -c 'abcdefghijklmnopqrstuvqxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'`
- USER_RELEASE_SUFFIX=`echo "${CLEAN_USERNAME}_${BUILD_DATE}" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-fi
-
+ if test "x$USER_RELEASE_SUFFIX" = x; then
+ BUILD_DATE=`date '+%Y_%m_%d_%H_%M'`
+ # Avoid [:alnum:] since it depends on the locale.
+ CLEAN_USERNAME=`echo "$USER" | $TR -d -c 'abcdefghijklmnopqrstuvqxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'`
+ USER_RELEASE_SUFFIX=`echo "${CLEAN_USERNAME}_${BUILD_DATE}" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ fi
+fi
# Now set the JDK version, milestone, build number etc.
@@ -11095,6 +11096,7 @@
+
COPYRIGHT_YEAR=`date +'%Y'`
--- a/common/autoconf/jdk-options.m4 Thu Oct 10 08:51:55 2013 +0200
+++ b/common/autoconf/jdk-options.m4 Thu Oct 10 13:41:08 2013 -0700
@@ -316,7 +316,7 @@
if test "x$SUPPORT_HEADFUL" = xyes; then
# We are building both headful and headless.
- headful_msg="inlude support for both headful and headless"
+ headful_msg="include support for both headful and headless"
fi
if test "x$SUPPORT_HEADFUL" = xno; then
@@ -426,6 +426,14 @@
JDK_UPDATE_VERSION="$with_update_version"
fi
+AC_ARG_WITH(user-release-suffix, [AS_HELP_STRING([--with-user-release-suffix],
+ [Add a custom string to the version string if build number isn't set.@<:@username_builddateb00@:>@])])
+if test "x$with_user_release_suffix" = xyes; then
+ AC_MSG_ERROR([Release suffix must have a value])
+elif test "x$with_user_release_suffix" != x; then
+ USER_RELEASE_SUFFIX="$with_user_release_suffix"
+fi
+
AC_ARG_WITH(build-number, [AS_HELP_STRING([--with-build-number],
[Set build number value for build @<:@b00@:>@])])
if test "x$with_build_number" = xyes; then
@@ -433,25 +441,19 @@
elif test "x$with_build_number" != x; then
JDK_BUILD_NUMBER="$with_build_number"
fi
+# Define default USER_RELEASE_SUFFIX if BUILD_NUMBER and USER_RELEASE_SUFFIX are not set
if test "x$JDK_BUILD_NUMBER" = x; then
JDK_BUILD_NUMBER=b00
+ if test "x$USER_RELEASE_SUFFIX" = x; then
+ BUILD_DATE=`date '+%Y_%m_%d_%H_%M'`
+ # Avoid [:alnum:] since it depends on the locale.
+ CLEAN_USERNAME=`echo "$USER" | $TR -d -c 'abcdefghijklmnopqrstuvqxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'`
+ USER_RELEASE_SUFFIX=`echo "${CLEAN_USERNAME}_${BUILD_DATE}" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ fi
fi
-AC_ARG_WITH(user-release-suffix, [AS_HELP_STRING([--with-user-release-suffix],
- [Add a custom string to the version string if build number isn't set.@<:@username_builddateb00@:>@])])
-if test "x$with_user_release_suffix" = xyes; then
- AC_MSG_ERROR([Release suffix must have a value])
-elif test "x$with_user_release_suffix" != x; then
- USER_RELEASE_SUFFIX="$with_user_release_suffix"
-else
- BUILD_DATE=`date '+%Y_%m_%d_%H_%M'`
- # Avoid [:alnum:] since it depends on the locale.
- CLEAN_USERNAME=`echo "$USER" | $TR -d -c 'abcdefghijklmnopqrstuvqxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'`
- USER_RELEASE_SUFFIX=`echo "${CLEAN_USERNAME}_${BUILD_DATE}" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-fi
+# Now set the JDK version, milestone, build number etc.
AC_SUBST(USER_RELEASE_SUFFIX)
-
-# Now set the JDK version, milestone, build number etc.
AC_SUBST(JDK_MAJOR_VERSION)
AC_SUBST(JDK_MINOR_VERSION)
AC_SUBST(JDK_MICRO_VERSION)
--- a/common/autoconf/spec.gmk.in Thu Oct 10 08:51:55 2013 +0200
+++ b/common/autoconf/spec.gmk.in Thu Oct 10 13:41:08 2013 -0700
@@ -161,6 +161,7 @@
COMPANY_NAME:=@COMPANY_NAME@
MACOSX_BUNDLE_NAME_BASE=@MACOSX_BUNDLE_NAME_BASE@
MACOSX_BUNDLE_ID_BASE=@MACOSX_BUNDLE_ID_BASE@
+USER_RELEASE_SUFFIX=@USER_RELEASE_SUFFIX@
# Different version strings generated from the above information.
JDK_VERSION:=@JDK_VERSION@
@@ -173,8 +174,8 @@
else
RELEASE=$(JDK_VERSION)-$(MILESTONE)$(BUILD_VARIANT_RELEASE)
endif
-ifeq ($(JDK_BUILD_NUMBER),b00)
- USER_RELEASE_SUFFIX=@USER_RELEASE_SUFFIX@
+
+ifneq ($(USER_RELEASE_SUFFIX),)
FULL_VERSION=$(RELEASE)-$(USER_RELEASE_SUFFIX)-$(JDK_BUILD_NUMBER)
else
FULL_VERSION=$(RELEASE)-$(JDK_BUILD_NUMBER)
--- a/common/bin/compare.sh Thu Oct 10 08:51:55 2013 +0200
+++ b/common/bin/compare.sh Thu Oct 10 13:41:08 2013 -0700
@@ -76,13 +76,13 @@
TMP=1
if [[ "$THIS_FILE" = *"META-INF/MANIFEST.MF" ]]; then
- TMP=$(LANG=C $DIFF $OTHER_FILE $THIS_FILE | \
+ TMP=$(LC_ALL=C $DIFF $OTHER_FILE $THIS_FILE | \
$GREP '^[<>]' | \
$SED -e '/[<>] Ant-Version: Apache Ant .*/d' \
-e '/[<>] Created-By: .* (Oracle Corporation).*/d')
fi
if test "x$SUFFIX" = "xjava"; then
- TMP=$(LANG=C $DIFF $OTHER_FILE $THIS_FILE | \
+ TMP=$(LC_ALL=C $DIFF $OTHER_FILE $THIS_FILE | \
$GREP '^[<>]' | \
$SED -e '/[<>] \* from.*\.idl/d' \
-e '/[<>] \*.*[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}.*/d' \
@@ -121,8 +121,8 @@
# | $SED -e '/^#/d' -e '/^$/d' \
# -e :a -e '/\\$/N; s/\\\n//; ta' \
# -e 's/^[ \t]*//;s/[ \t]*$//' \
-# -e 's/\\=/=/' | LANG=C $SORT > $OTHER_FILE.cleaned
- TMP=$(LANG=C $DIFF $OTHER_FILE.cleaned $THIS_FILE)
+# -e 's/\\=/=/' | LC_ALL=C $SORT > $OTHER_FILE.cleaned
+ TMP=$(LC_ALL=C $DIFF $OTHER_FILE.cleaned $THIS_FILE)
fi
if test -n "$TMP"; then
echo Files $OTHER_FILE and $THIS_FILE differ
@@ -410,11 +410,11 @@
CONTENTS_DIFF_FILE=$WORK_DIR/$ZIP_FILE.diff
# On solaris, there is no -q option.
if [ "$OPENJDK_TARGET_OS" = "solaris" ]; then
- LANG=C $DIFF -r $OTHER_UNZIPDIR $THIS_UNZIPDIR \
+ LC_ALL=C $DIFF -r $OTHER_UNZIPDIR $THIS_UNZIPDIR \
| $GREP -v -e "^<" -e "^>" -e "^Common subdirectories:" \
> $CONTENTS_DIFF_FILE
else
- LANG=C $DIFF -rq $OTHER_UNZIPDIR $THIS_UNZIPDIR > $CONTENTS_DIFF_FILE
+ LC_ALL=C $DIFF -rq $OTHER_UNZIPDIR $THIS_UNZIPDIR > $CONTENTS_DIFF_FILE
fi
ONLY_OTHER=$($GREP "^Only in $OTHER_UNZIPDIR" $CONTENTS_DIFF_FILE)
@@ -459,11 +459,11 @@
if [ -n "$SHOW_DIFFS" ]; then
for i in $(cat $WORK_DIR/$ZIP_FILE.difflist) ; do
if [ -f "${OTHER_UNZIPDIR}/$i.javap" ]; then
- LANG=C $DIFF ${OTHER_UNZIPDIR}/$i.javap ${THIS_UNZIPDIR}/$i.javap
+ LC_ALL=C $DIFF ${OTHER_UNZIPDIR}/$i.javap ${THIS_UNZIPDIR}/$i.javap
elif [ -f "${OTHER_UNZIPDIR}/$i.cleaned" ]; then
- LANG=C $DIFF ${OTHER_UNZIPDIR}/$i.cleaned ${THIS_UNZIPDIR}/$i
+ LC_ALL=C $DIFF ${OTHER_UNZIPDIR}/$i.cleaned ${THIS_UNZIPDIR}/$i
else
- LANG=C $DIFF ${OTHER_UNZIPDIR}/$i ${THIS_UNZIPDIR}/$i
+ LC_ALL=C $DIFF ${OTHER_UNZIPDIR}/$i ${THIS_UNZIPDIR}/$i
fi
done
fi
@@ -703,7 +703,7 @@
$NM -a $ORIG_THIS_FILE 2> /dev/null | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this
fi
- LANG=C $DIFF $WORK_FILE_BASE.symbols.other $WORK_FILE_BASE.symbols.this > $WORK_FILE_BASE.symbols.diff
+ LC_ALL=C $DIFF $WORK_FILE_BASE.symbols.other $WORK_FILE_BASE.symbols.this > $WORK_FILE_BASE.symbols.diff
if [ -s $WORK_FILE_BASE.symbols.diff ]; then
SYM_MSG=" diff "
if [[ "$ACCEPTED_SYM_DIFF" != *"$BIN_FILE"* ]]; then
@@ -732,8 +732,8 @@
(cd $FILE_WORK_DIR && $CP $THIS_FILE . && $LDD_CMD $NAME 2</dev/null | $AWK '{ print $1;}' | $SORT | $TEE $WORK_FILE_BASE.deps.this | $UNIQ > $WORK_FILE_BASE.deps.this.uniq)
(cd $FILE_WORK_DIR && $RM -f $NAME)
- LANG=C $DIFF $WORK_FILE_BASE.deps.other $WORK_FILE_BASE.deps.this > $WORK_FILE_BASE.deps.diff
- LANG=C $DIFF $WORK_FILE_BASE.deps.other.uniq $WORK_FILE_BASE.deps.this.uniq > $WORK_FILE_BASE.deps.diff.uniq
+ LC_ALL=C $DIFF $WORK_FILE_BASE.deps.other $WORK_FILE_BASE.deps.this > $WORK_FILE_BASE.deps.diff
+ LC_ALL=C $DIFF $WORK_FILE_BASE.deps.other.uniq $WORK_FILE_BASE.deps.this.uniq > $WORK_FILE_BASE.deps.diff.uniq
if [ -s $WORK_FILE_BASE.deps.diff ]; then
if [ -s $WORK_FILE_BASE.deps.diff.uniq ]; then
@@ -768,7 +768,7 @@
if [ -n "$FULLDUMP_CMD" ] && [ -z "$SKIP_FULLDUMP_DIFF" ]; then
$FULLDUMP_CMD $OTHER_FILE > $WORK_FILE_BASE.fulldump.other 2>&1
$FULLDUMP_CMD $THIS_FILE > $WORK_FILE_BASE.fulldump.this 2>&1
- LANG=C $DIFF $WORK_FILE_BASE.fulldump.other $WORK_FILE_BASE.fulldump.this > $WORK_FILE_BASE.fulldump.diff
+ LC_ALL=C $DIFF $WORK_FILE_BASE.fulldump.other $WORK_FILE_BASE.fulldump.this > $WORK_FILE_BASE.fulldump.diff
if [ -s $WORK_FILE_BASE.fulldump.diff ]; then
ELF_DIFF_SIZE=$(ls -n $WORK_FILE_BASE.fulldump.diff | awk '{print $5}')
@@ -802,7 +802,7 @@
$DIS_CMD $OTHER_FILE | $GREP -v $NAME | $DIS_DIFF_FILTER > $WORK_FILE_BASE.dis.other 2>&1
$DIS_CMD $THIS_FILE | $GREP -v $NAME | $DIS_DIFF_FILTER > $WORK_FILE_BASE.dis.this 2>&1
- LANG=C $DIFF $WORK_FILE_BASE.dis.other $WORK_FILE_BASE.dis.this > $WORK_FILE_BASE.dis.diff
+ LC_ALL=C $DIFF $WORK_FILE_BASE.dis.other $WORK_FILE_BASE.dis.this > $WORK_FILE_BASE.dis.diff
if [ -s $WORK_FILE_BASE.dis.diff ]; then
DIS_DIFF_SIZE=$(ls -n $WORK_FILE_BASE.dis.diff | awk '{print $5}')
--- a/common/makefiles/JavaCompilation.gmk Thu Oct 10 08:51:55 2013 +0200
+++ b/common/makefiles/JavaCompilation.gmk Thu Oct 10 13:41:08 2013 -0700
@@ -159,7 +159,7 @@
endif
endif
- # Utility macros, to make the shell script receipt somewhat easier to dechipher.
+ # Utility macros, to make the shell script receipt somewhat easier to decipher.
# The capture contents macro finds all files (matching the patterns, typically
# .class and .prp) that are newer than the jar-file, ie the new content to be put into the jar.
@@ -520,7 +520,7 @@
# Using plain javac to batch compile everything.
$1 := $$($1_ALL_COPY_TARGETS) $$($1_ALL_COPY_CLEAN_TARGETS) $$($1_BIN)/_the.batch
- # When buliding in batch, put headers in a temp dir to filter out those that actually
+ # When building in batch, put headers in a temp dir to filter out those that actually
# changed before copying them to the real header dir.
ifneq (,$$($1_HEADERS))
$1_HEADERS_ARG := -h $$($1_HEADERS).tmp
--- a/common/makefiles/Jprt.gmk Thu Oct 10 08:51:55 2013 +0200
+++ b/common/makefiles/Jprt.gmk Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -200,13 +200,8 @@
$(RM) $@
$(CP) $(BUILD_OUTPUT)/bundles/$(JDK_IMAGE_SUBDIR).zip $@
-ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU_BITS),solaris-64)
- SRC_JDK_IMAGE_DIR := $(JDK_OVERLAY_IMAGE_DIR)
- SRC_JRE_IMAGE_DIR := $(JRE_OVERLAY_IMAGE_DIR)
-else
- SRC_JDK_IMAGE_DIR := $(JDK_IMAGE_DIR)
- SRC_JRE_IMAGE_DIR := $(JRE_IMAGE_DIR)
-endif
+SRC_JDK_IMAGE_DIR := $(JDK_IMAGE_DIR)
+SRC_JRE_IMAGE_DIR := $(JRE_IMAGE_DIR)
SRC_JDK_BUNDLE_DIR := $(JDK_BUNDLE_DIR)
SRC_JRE_BUNDLE_DIR := $(JRE_BUNDLE_DIR)
@@ -215,10 +210,10 @@
bundles-only: start-make
@$(call TargetEnter)
$(MKDIR) -p $(BUILD_OUTPUT)/bundles
- $(CD) $(SRC_JDK_IMAGE_DIR) && $(ZIP) -q -r $(BUILD_OUTPUT)/bundles/$(JDK_IMAGE_SUBDIR).zip .
- $(CD) $(SRC_JRE_IMAGE_DIR) && $(ZIP) -q -r $(BUILD_OUTPUT)/bundles/$(JRE_IMAGE_SUBDIR).zip .
+ $(CD) $(SRC_JDK_IMAGE_DIR) && $(ZIP) -y -q -r $(BUILD_OUTPUT)/bundles/$(JDK_IMAGE_SUBDIR).zip .
+ $(CD) $(SRC_JRE_IMAGE_DIR) && $(ZIP) -y -q -r $(BUILD_OUTPUT)/bundles/$(JRE_IMAGE_SUBDIR).zip .
if [ -d $(BUILD_OUTPUT)/install/bundles ] ; then \
- $(CD) $(BUILD_OUTPUT)/install/bundles && $(ZIP) -q -r $(JPRT_ARCHIVE_INSTALL_BUNDLE) . ; \
+ $(CD) $(BUILD_OUTPUT)/install/bundles && $(ZIP) -y -q -r $(JPRT_ARCHIVE_INSTALL_BUNDLE) . ; \
fi
@$(call TargetExit)
--- a/common/makefiles/Main.gmk Thu Oct 10 08:51:55 2013 +0200
+++ b/common/makefiles/Main.gmk Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 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
@@ -68,10 +68,6 @@
all: images docs
@$(call CheckIfMakeAtEnd)
-ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU_BITS),solaris-64)
- all: overlay-images
-endif
-
# Setup a rule for SPEC file that fails if executed. This check makes sure the configuration
# is up to date after changes to configure
$(SPEC): $(wildcard $(SRC_ROOT)/common/autoconf/*)
--- a/corba/.hgtags Thu Oct 10 08:51:55 2013 +0200
+++ b/corba/.hgtags Thu Oct 10 13:41:08 2013 -0700
@@ -230,3 +230,5 @@
2e3a056c84a71eba78945c18b05397858ffd7ad0 jdk8-b106
23fc34133152692b725db4bd617b4c8dfd6ccb05 jdk8-b107
a4bb3b4500164748a9c33b2283cfda76d89f25ab jdk8-b108
+428428cf5e06163322144cfb5367e1faa86acf20 jdk8-b109
+3d2b7ce93c5c2e3db748f29c3d29620a8b3b748a jdk8-b110
--- a/hotspot/.hgtags Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/.hgtags Thu Oct 10 13:41:08 2013 -0700
@@ -379,3 +379,7 @@
a09fe9d1e016c285307507a5793bc4fa6215e9c9 hs25-b50
85072013aad46050a362d10ab78e963121c8014c jdk8-b108
566db1b0e6efca31f181456e54c8911d0192410d hs25-b51
+c81dd5393a5e333df7cb1f6621f5897ada6522b5 jdk8-b109
+58043478c26d4e8bf48700acea5f97aba8b417d4 hs25-b52
+6209b0ed51c086d4127bac0e086c8f326d1764d7 jdk8-b110
+562a3d356de67670b4172b82aca2d30743449e04 hs25-b53
--- a/hotspot/agent/src/os/linux/LinuxDebuggerLocal.c Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/agent/src/os/linux/LinuxDebuggerLocal.c Thu Oct 10 13:41:08 2013 -0700
@@ -29,6 +29,7 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
+#include <stdlib.h>
#include <string.h>
#include <limits.h>
@@ -80,7 +81,7 @@
(JNIEnv *env, jclass cls) {
jclass listClass;
- if (init_libproc(getenv("LIBSAPROC_DEBUG")) != true) {
+ if (init_libproc(getenv("LIBSAPROC_DEBUG") != NULL) != true) {
THROW_NEW_DEBUGGER_EXCEPTION("can't initialize libproc");
}
--- a/hotspot/agent/src/os/linux/ps_core.c Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/agent/src/os/linux/ps_core.c Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -698,29 +698,58 @@
// read segments of a shared object
static bool read_lib_segments(struct ps_prochandle* ph, int lib_fd, ELF_EHDR* lib_ehdr, uintptr_t lib_base) {
- int i = 0;
- ELF_PHDR* phbuf;
- ELF_PHDR* lib_php = NULL;
+ int i = 0;
+ ELF_PHDR* phbuf;
+ ELF_PHDR* lib_php = NULL;
+
+ int page_size=sysconf(_SC_PAGE_SIZE);
- if ((phbuf = read_program_header_table(lib_fd, lib_ehdr)) == NULL)
- return false;
+ if ((phbuf = read_program_header_table(lib_fd, lib_ehdr)) == NULL) {
+ return false;
+ }
+
+ // we want to process only PT_LOAD segments that are not writable.
+ // i.e., text segments. The read/write/exec (data) segments would
+ // have been already added from core file segments.
+ for (lib_php = phbuf, i = 0; i < lib_ehdr->e_phnum; i++) {
+ if ((lib_php->p_type == PT_LOAD) && !(lib_php->p_flags & PF_W) && (lib_php->p_filesz != 0)) {
+
+ uintptr_t target_vaddr = lib_php->p_vaddr + lib_base;
+ map_info *existing_map = core_lookup(ph, target_vaddr);
- // we want to process only PT_LOAD segments that are not writable.
- // i.e., text segments. The read/write/exec (data) segments would
- // have been already added from core file segments.
- for (lib_php = phbuf, i = 0; i < lib_ehdr->e_phnum; i++) {
- if ((lib_php->p_type == PT_LOAD) && !(lib_php->p_flags & PF_W) && (lib_php->p_filesz != 0)) {
- if (add_map_info(ph, lib_fd, lib_php->p_offset, lib_php->p_vaddr + lib_base, lib_php->p_filesz) == NULL)
- goto err;
+ if (existing_map == NULL){
+ if (add_map_info(ph, lib_fd, lib_php->p_offset,
+ target_vaddr, lib_php->p_filesz) == NULL) {
+ goto err;
+ }
+ } else {
+ if ((existing_map->memsz != page_size) &&
+ (existing_map->fd != lib_fd) &&
+ (existing_map->memsz != lib_php->p_filesz)){
+
+ print_debug("address conflict @ 0x%lx (size = %ld, flags = %d\n)",
+ target_vaddr, lib_php->p_filesz, lib_php->p_flags);
+ goto err;
+ }
+
+ /* replace PT_LOAD segment with library segment */
+ print_debug("overwrote with new address mapping (memsz %ld -> %ld)\n",
+ existing_map->memsz, lib_php->p_filesz);
+
+ existing_map->fd = lib_fd;
+ existing_map->offset = lib_php->p_offset;
+ existing_map->memsz = lib_php->p_filesz;
}
- lib_php++;
- }
+ }
+
+ lib_php++;
+ }
- free(phbuf);
- return true;
+ free(phbuf);
+ return true;
err:
- free(phbuf);
- return false;
+ free(phbuf);
+ return false;
}
// process segments from interpreter (ld.so or ld-linux.so)
--- a/hotspot/agent/src/os/linux/ps_proc.c Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/agent/src/os/linux/ps_proc.c Thu Oct 10 13:41:08 2013 -0700
@@ -27,6 +27,8 @@
#include <string.h>
#include <signal.h>
#include <errno.h>
+#include <sys/types.h>
+#include <sys/wait.h>
#include <sys/ptrace.h>
#include "libproc_impl.h"
--- a/hotspot/agent/src/os/linux/salibelf.c Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/agent/src/os/linux/salibelf.c Thu Oct 10 13:41:08 2013 -0700
@@ -25,6 +25,7 @@
#include "salibelf.h"
#include <stdlib.h>
#include <unistd.h>
+#include <string.h>
extern void print_debug(const char*,...);
--- a/hotspot/agent/src/os/linux/symtab.c Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/agent/src/os/linux/symtab.c Thu Oct 10 13:41:08 2013 -0700
@@ -305,7 +305,7 @@
unsigned char *bytes
= (unsigned char*)(note+1) + note->n_namesz;
- unsigned char *filename
+ char *filename
= (build_id_to_debug_filename (note->n_descsz, bytes));
fd = pathmap_open(filename);
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/VM.java Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/VM.java Thu Oct 10 13:41:08 2013 -0700
@@ -134,15 +134,13 @@
private String type;
private String name;
private Address addr;
- private String kind;
- private int origin;
+ private int flags;
- private Flag(String type, String name, Address addr, String kind, int origin) {
+ private Flag(String type, String name, Address addr, int flags) {
this.type = type;
this.name = name;
this.addr = addr;
- this.kind = kind;
- this.origin = origin;
+ this.flags = flags;
}
public String getType() {
@@ -157,12 +155,8 @@
return addr;
}
- public String getKind() {
- return kind;
- }
-
public int getOrigin() {
- return origin;
+ return flags & 0xF; // XXX can we get the mask bits from somewhere?
}
public boolean isBool() {
@@ -173,8 +167,7 @@
if (Assert.ASSERTS_ENABLED) {
Assert.that(isBool(), "not a bool flag!");
}
- return addr.getCIntegerAt(0, boolType.getSize(), boolType.isUnsigned())
- != 0;
+ return addr.getCIntegerAt(0, boolType.getSize(), boolType.isUnsigned()) != 0;
}
public boolean isIntx() {
@@ -843,11 +836,10 @@
Address flagAddr = flagType.getAddressField("flags").getValue();
- AddressField typeFld = flagType.getAddressField("type");
- AddressField nameFld = flagType.getAddressField("name");
- AddressField addrFld = flagType.getAddressField("addr");
- AddressField kindFld = flagType.getAddressField("kind");
- CIntField originFld = new CIntField(flagType.getCIntegerField("origin"), 0);
+ AddressField typeFld = flagType.getAddressField("_type");
+ AddressField nameFld = flagType.getAddressField("_name");
+ AddressField addrFld = flagType.getAddressField("_addr");
+ CIntField flagsFld = new CIntField(flagType.getCIntegerField("_flags"), 0);
long flagSize = flagType.getSize(); // sizeof(Flag)
@@ -856,9 +848,8 @@
String type = CStringUtilities.getString(typeFld.getValue(flagAddr));
String name = CStringUtilities.getString(nameFld.getValue(flagAddr));
Address addr = addrFld.getValue(flagAddr);
- String kind = CStringUtilities.getString(kindFld.getValue(flagAddr));
- int origin = (int)originFld.getValue(flagAddr);
- commandLineFlags[f] = new Flag(type, name, addr, kind, origin);
+ int flags = (int)flagsFld.getValue(flagAddr);
+ commandLineFlags[f] = new Flag(type, name, addr, flags);
flagAddr = flagAddr.addOffsetTo(flagSize);
}
--- a/hotspot/make/bsd/makefiles/fastdebug.make Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/make/bsd/makefiles/fastdebug.make Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
#
-# Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -59,5 +59,5 @@
MAPFILE = $(GAMMADIR)/make/bsd/makefiles/mapfile-vers-debug
VERSION = fastdebug
-SYSDEFS += -DASSERT
+SYSDEFS += -DASSERT -DCHECK_UNHANDLED_OOPS
PICFLAGS = DEFAULT
--- a/hotspot/make/bsd/makefiles/gcc.make Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/make/bsd/makefiles/gcc.make Thu Oct 10 13:41:08 2013 -0700
@@ -247,7 +247,7 @@
ifeq ($(USE_CLANG), true)
# However we need to clean the code up before we can unrestrictedly enable this option with Clang
- WARNINGS_ARE_ERRORS += -Wno-unused-value -Wno-logical-op-parentheses -Wno-parentheses-equality -Wno-parentheses
+ WARNINGS_ARE_ERRORS += -Wno-logical-op-parentheses -Wno-parentheses-equality -Wno-parentheses
WARNINGS_ARE_ERRORS += -Wno-switch -Wno-tautological-compare
# Not yet supported by clang in Xcode 4.6.2
# WARNINGS_ARE_ERRORS += -Wno-tautological-constant-out-of-range-compare
@@ -262,7 +262,7 @@
# conversions which might affect the values. Only enable it in earlier versions.
WARNING_FLAGS = -Wunused-function
ifeq ($(USE_CLANG),)
- WARNINGS_FLAGS += -Wconversion
+ WARNING_FLAGS += -Wconversion
endif
endif
--- a/hotspot/make/excludeSrc.make Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/make/excludeSrc.make Thu Oct 10 13:41:08 2013 -0700
@@ -88,7 +88,7 @@
g1ErgoVerbose.cpp g1GCPhaseTimes.cpp g1HRPrinter.cpp g1HotCardCache.cpp g1Log.cpp \
g1MMUTracker.cpp g1MarkSweep.cpp g1MemoryPool.cpp g1MonitoringSupport.cpp \
g1RemSet.cpp g1RemSetSummary.cpp g1SATBCardTableModRefBS.cpp g1_globals.cpp heapRegion.cpp \
- heapRegionRemSet.cpp heapRegionSeq.cpp heapRegionSet.cpp heapRegionSets.cpp \
+ g1BiasedArray.cpp heapRegionRemSet.cpp heapRegionSeq.cpp heapRegionSet.cpp heapRegionSets.cpp \
ptrQueue.cpp satbQueue.cpp sparsePRT.cpp survRateGroup.cpp vm_operations_g1.cpp \
adjoiningGenerations.cpp adjoiningVirtualSpaces.cpp asPSOldGen.cpp asPSYoungGen.cpp \
cardTableExtension.cpp gcTaskManager.cpp gcTaskThread.cpp objectStartArray.cpp \
--- a/hotspot/make/hotspot_version Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/make/hotspot_version Thu Oct 10 13:41:08 2013 -0700
@@ -35,7 +35,7 @@
HS_MAJOR_VER=25
HS_MINOR_VER=0
-HS_BUILD_NUMBER=51
+HS_BUILD_NUMBER=53
JDK_MAJOR_VER=1
JDK_MINOR_VER=8
--- a/hotspot/make/linux/makefiles/fastdebug.make Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/make/linux/makefiles/fastdebug.make Thu Oct 10 13:41:08 2013 -0700
@@ -59,5 +59,5 @@
MAPFILE = $(GAMMADIR)/make/linux/makefiles/mapfile-vers-debug
VERSION = optimized
-SYSDEFS += -DASSERT
+SYSDEFS += -DASSERT -DCHECK_UNHANDLED_OOPS
PICFLAGS = DEFAULT
--- a/hotspot/make/linux/makefiles/gcc.make Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/make/linux/makefiles/gcc.make Thu Oct 10 13:41:08 2013 -0700
@@ -208,7 +208,7 @@
ifeq ($(USE_CLANG), true)
# However we need to clean the code up before we can unrestrictedly enable this option with Clang
- WARNINGS_ARE_ERRORS += -Wno-unused-value -Wno-logical-op-parentheses -Wno-parentheses-equality -Wno-parentheses
+ WARNINGS_ARE_ERRORS += -Wno-logical-op-parentheses -Wno-parentheses-equality -Wno-parentheses
WARNINGS_ARE_ERRORS += -Wno-switch -Wno-tautological-constant-out-of-range-compare -Wno-tautological-compare
WARNINGS_ARE_ERRORS += -Wno-delete-non-virtual-dtor -Wno-deprecated -Wno-format -Wno-dynamic-class-memaccess
WARNINGS_ARE_ERRORS += -Wno-return-type -Wno-empty-body
--- a/hotspot/make/windows/makefiles/fastdebug.make Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/make/windows/makefiles/fastdebug.make Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -38,7 +38,7 @@
!include ../local.make
!include compile.make
-CXX_FLAGS=$(CXX_FLAGS) $(FASTDEBUG_OPT_OPTION)
+CXX_FLAGS=$(CXX_FLAGS) $(FASTDEBUG_OPT_OPTION) /D "CHECK_UNHANDLED_OOPS"
!include $(WorkSpace)/make/windows/makefiles/vm.make
!include local.make
--- a/hotspot/src/cpu/sparc/vm/frame_sparc.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/cpu/sparc/vm/frame_sparc.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -764,7 +764,7 @@
#ifdef CC_INTERP
*oop_result = istate->_oop_temp;
#else
- oop obj = (oop) at(interpreter_frame_oop_temp_offset);
+ oop obj = cast_to_oop(at(interpreter_frame_oop_temp_offset));
assert(obj == NULL || Universe::heap()->is_in(obj), "sanity check");
*oop_result = obj;
#endif // CC_INTERP
@@ -788,7 +788,7 @@
switch(type) {
case T_OBJECT:
case T_ARRAY: {
- oop obj = (oop)*tos_addr;
+ oop obj = cast_to_oop(*tos_addr);
assert(obj == NULL || Universe::heap()->is_in(obj), "sanity check");
*oop_result = obj;
break;
--- a/hotspot/src/cpu/sparc/vm/methodHandles_sparc.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/cpu/sparc/vm/methodHandles_sparc.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 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
@@ -121,6 +121,7 @@
void MethodHandles::jump_from_method_handle(MacroAssembler* _masm, Register method, Register target, Register temp,
bool for_compiler_entry) {
+ Label L_no_such_method;
assert(method == G5_method, "interpreter calling convention");
assert_different_registers(method, target, temp);
@@ -133,6 +134,9 @@
const Address interp_only(G2_thread, JavaThread::interp_only_mode_offset());
__ ld(interp_only, temp);
__ cmp_and_br_short(temp, 0, Assembler::zero, Assembler::pt, run_compiled_code);
+ // Null method test is replicated below in compiled case,
+ // it might be able to address across the verify_thread()
+ __ br_null_short(G5_method, Assembler::pn, L_no_such_method);
__ ld_ptr(G5_method, in_bytes(Method::interpreter_entry_offset()), target);
__ jmp(target, 0);
__ delayed()->nop();
@@ -141,11 +145,19 @@
// it doesn't matter, since this is interpreter code.
}
+ // Compiled case, either static or fall-through from runtime conditional
+ __ br_null_short(G5_method, Assembler::pn, L_no_such_method);
+
const ByteSize entry_offset = for_compiler_entry ? Method::from_compiled_offset() :
Method::from_interpreted_offset();
__ ld_ptr(G5_method, in_bytes(entry_offset), target);
__ jmp(target, 0);
__ delayed()->nop();
+
+ __ bind(L_no_such_method);
+ AddressLiteral ame(StubRoutines::throw_AbstractMethodError_entry());
+ __ jump_to(ame, temp);
+ __ delayed()->nop();
}
void MethodHandles::jump_to_lambda_form(MacroAssembler* _masm,
--- a/hotspot/src/cpu/sparc/vm/nativeInst_sparc.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/cpu/sparc/vm/nativeInst_sparc.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -358,7 +358,7 @@
oop_Relocation *r = iter.oop_reloc();
if (oop_addr == NULL) {
oop_addr = r->oop_addr();
- *oop_addr = (oop)x;
+ *oop_addr = cast_to_oop(x);
} else {
assert(oop_addr == r->oop_addr(), "must be only one set-oop here");
}
@@ -478,7 +478,7 @@
oop_Relocation *r = iter.oop_reloc();
if (oop_addr == NULL) {
oop_addr = r->oop_addr();
- *oop_addr = (oop)x;
+ *oop_addr = cast_to_oop(x);
} else {
assert(oop_addr == r->oop_addr(), "must be only one set-oop here");
}
--- a/hotspot/src/cpu/sparc/vm/sparc.ad Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/cpu/sparc/vm/sparc.ad Thu Oct 10 13:41:08 2013 -0700
@@ -2018,6 +2018,15 @@
return L7_REGP_mask();
}
+const RegMask Matcher::mathExactI_result_proj_mask() {
+ return G1_REGI_mask();
+}
+
+const RegMask Matcher::mathExactI_flags_proj_mask() {
+ return INT_FLAGS_mask();
+}
+
+
%}
@@ -4245,12 +4254,16 @@
greater_equal(0xB);
less_equal(0x2);
greater(0xA);
+ overflow(0x7);
+ no_overflow(0xF);
%}
%}
// Comparison Op, unsigned
operand cmpOpU() %{
match(Bool);
+ predicate(n->as_Bool()->_test._test != BoolTest::overflow &&
+ n->as_Bool()->_test._test != BoolTest::no_overflow);
format %{ "u" %}
interface(COND_INTER) %{
@@ -4260,12 +4273,16 @@
greater_equal(0xD);
less_equal(0x4);
greater(0xC);
+ overflow(0x7);
+ no_overflow(0xF);
%}
%}
// Comparison Op, pointer (same as unsigned)
operand cmpOpP() %{
match(Bool);
+ predicate(n->as_Bool()->_test._test != BoolTest::overflow &&
+ n->as_Bool()->_test._test != BoolTest::no_overflow);
format %{ "p" %}
interface(COND_INTER) %{
@@ -4275,12 +4292,16 @@
greater_equal(0xD);
less_equal(0x4);
greater(0xC);
+ overflow(0x7);
+ no_overflow(0xF);
%}
%}
// Comparison Op, branch-register encoding
operand cmpOp_reg() %{
match(Bool);
+ predicate(n->as_Bool()->_test._test != BoolTest::overflow &&
+ n->as_Bool()->_test._test != BoolTest::no_overflow);
format %{ "" %}
interface(COND_INTER) %{
@@ -4290,12 +4311,16 @@
greater_equal(0x7);
less_equal (0x2);
greater (0x6);
+ overflow(0x7); // not supported
+ no_overflow(0xF); // not supported
%}
%}
// Comparison Code, floating, unordered same as less
operand cmpOpF() %{
match(Bool);
+ predicate(n->as_Bool()->_test._test != BoolTest::overflow &&
+ n->as_Bool()->_test._test != BoolTest::no_overflow);
format %{ "fl" %}
interface(COND_INTER) %{
@@ -4305,12 +4330,17 @@
greater_equal(0xB);
less_equal(0xE);
greater(0x6);
+
+ overflow(0x7); // not supported
+ no_overflow(0xF); // not supported
%}
%}
// Used by long compare
operand cmpOp_commute() %{
match(Bool);
+ predicate(n->as_Bool()->_test._test != BoolTest::overflow &&
+ n->as_Bool()->_test._test != BoolTest::no_overflow);
format %{ "" %}
interface(COND_INTER) %{
@@ -4320,6 +4350,8 @@
greater_equal(0x2);
less_equal(0xB);
greater(0x3);
+ overflow(0x7);
+ no_overflow(0xF);
%}
%}
--- a/hotspot/src/cpu/sparc/vm/vtableStubs_sparc.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/cpu/sparc/vm/vtableStubs_sparc.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -52,6 +52,11 @@
VtableStub* VtableStubs::create_vtable_stub(int vtable_index) {
const int sparc_code_length = VtableStub::pd_code_size_limit(true);
VtableStub* s = new(sparc_code_length) VtableStub(true, vtable_index);
+ // Can be NULL if there is no free space in the code cache.
+ if (s == NULL) {
+ return NULL;
+ }
+
ResourceMark rm;
CodeBuffer cb(s->entry_point(), sparc_code_length);
MacroAssembler* masm = new MacroAssembler(&cb);
@@ -125,6 +130,11 @@
VtableStub* VtableStubs::create_itable_stub(int itable_index) {
const int sparc_code_length = VtableStub::pd_code_size_limit(false);
VtableStub* s = new(sparc_code_length) VtableStub(false, itable_index);
+ // Can be NULL if there is no free space in the code cache.
+ if (s == NULL) {
+ return NULL;
+ }
+
ResourceMark rm;
CodeBuffer cb(s->entry_point(), sparc_code_length);
MacroAssembler* masm = new MacroAssembler(&cb);
--- a/hotspot/src/cpu/x86/vm/assembler_x86.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/cpu/x86/vm/assembler_x86.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -4769,7 +4769,7 @@
}
void Assembler::adcq(Register dst, Register src) {
- (int) prefixq_and_encode(dst->encoding(), src->encoding());
+ (void) prefixq_and_encode(dst->encoding(), src->encoding());
emit_arith(0x13, 0xC0, dst, src);
}
@@ -4824,7 +4824,7 @@
}
void Assembler::andq(Register dst, Register src) {
- (int) prefixq_and_encode(dst->encoding(), src->encoding());
+ (void) prefixq_and_encode(dst->encoding(), src->encoding());
emit_arith(0x23, 0xC0, dst, src);
}
--- a/hotspot/src/cpu/x86/vm/frame_x86.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/cpu/x86/vm/frame_x86.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -639,7 +639,7 @@
#ifdef CC_INTERP
obj = istate->_oop_temp;
#else
- obj = (oop) at(interpreter_frame_oop_temp_offset);
+ obj = cast_to_oop(at(interpreter_frame_oop_temp_offset));
#endif // CC_INTERP
} else {
oop* obj_p = (oop*)tos_addr;
--- a/hotspot/src/cpu/x86/vm/methodHandles_x86.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/cpu/x86/vm/methodHandles_x86.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -114,6 +114,11 @@
void MethodHandles::jump_from_method_handle(MacroAssembler* _masm, Register method, Register temp,
bool for_compiler_entry) {
assert(method == rbx, "interpreter calling convention");
+
+ Label L_no_such_method;
+ __ testptr(rbx, rbx);
+ __ jcc(Assembler::zero, L_no_such_method);
+
__ verify_method_ptr(method);
if (!for_compiler_entry && JvmtiExport::can_post_interpreter_events()) {
@@ -138,6 +143,9 @@
const ByteSize entry_offset = for_compiler_entry ? Method::from_compiled_offset() :
Method::from_interpreted_offset();
__ jmp(Address(method, entry_offset));
+
+ __ bind(L_no_such_method);
+ __ jump(RuntimeAddress(StubRoutines::throw_AbstractMethodError_entry()));
}
void MethodHandles::jump_to_lambda_form(MacroAssembler* _masm,
@@ -475,7 +483,7 @@
const char* mh_reg_name = has_mh ? "rcx_mh" : "rcx";
tty->print_cr("MH %s %s="PTR_FORMAT" sp="PTR_FORMAT,
adaptername, mh_reg_name,
- mh, entry_sp);
+ (void *)mh, entry_sp);
if (Verbose) {
tty->print_cr("Registers:");
--- a/hotspot/src/cpu/x86/vm/vtableStubs_x86_32.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/cpu/x86/vm/vtableStubs_x86_32.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -58,6 +58,11 @@
VtableStub* VtableStubs::create_vtable_stub(int vtable_index) {
const int i486_code_length = VtableStub::pd_code_size_limit(true);
VtableStub* s = new(i486_code_length) VtableStub(true, vtable_index);
+ // Can be NULL if there is no free space in the code cache.
+ if (s == NULL) {
+ return NULL;
+ }
+
ResourceMark rm;
CodeBuffer cb(s->entry_point(), i486_code_length);
MacroAssembler* masm = new MacroAssembler(&cb);
@@ -132,6 +137,11 @@
// add code here, bump the code stub size returned by pd_code_size_limit!
const int i486_code_length = VtableStub::pd_code_size_limit(false);
VtableStub* s = new(i486_code_length) VtableStub(false, itable_index);
+ // Can be NULL if there is no free space in the code cache.
+ if (s == NULL) {
+ return NULL;
+ }
+
ResourceMark rm;
CodeBuffer cb(s->entry_point(), i486_code_length);
MacroAssembler* masm = new MacroAssembler(&cb);
--- a/hotspot/src/cpu/x86/vm/vtableStubs_x86_64.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/cpu/x86/vm/vtableStubs_x86_64.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -49,6 +49,11 @@
VtableStub* VtableStubs::create_vtable_stub(int vtable_index) {
const int amd64_code_length = VtableStub::pd_code_size_limit(true);
VtableStub* s = new(amd64_code_length) VtableStub(true, vtable_index);
+ // Can be NULL if there is no free space in the code cache.
+ if (s == NULL) {
+ return NULL;
+ }
+
ResourceMark rm;
CodeBuffer cb(s->entry_point(), amd64_code_length);
MacroAssembler* masm = new MacroAssembler(&cb);
@@ -126,6 +131,11 @@
// returned by pd_code_size_limit!
const int amd64_code_length = VtableStub::pd_code_size_limit(false);
VtableStub* s = new(amd64_code_length) VtableStub(false, itable_index);
+ // Can be NULL if there is no free space in the code cache.
+ if (s == NULL) {
+ return NULL;
+ }
+
ResourceMark rm;
CodeBuffer cb(s->entry_point(), amd64_code_length);
MacroAssembler* masm = new MacroAssembler(&cb);
--- a/hotspot/src/cpu/x86/vm/x86_32.ad Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/cpu/x86/vm/x86_32.ad Thu Oct 10 13:41:08 2013 -0700
@@ -351,7 +351,7 @@
int format) {
#ifdef ASSERT
if (rspec.reloc()->type() == relocInfo::oop_type && d32 != 0 && d32 != (int)Universe::non_oop_word()) {
- assert(oop(d32)->is_oop() && (ScavengeRootsInCode || !oop(d32)->is_scavengable()), "cannot embed scavengable oops in code");
+ assert(cast_to_oop(d32)->is_oop() && (ScavengeRootsInCode || !cast_to_oop(d32)->is_scavengable()), "cannot embed scavengable oops in code");
}
#endif
cbuf.relocate(cbuf.insts_mark(), rspec, format);
@@ -1534,6 +1534,14 @@
return EBP_REG_mask();
}
+const RegMask Matcher::mathExactI_result_proj_mask() {
+ return EAX_REG_mask();
+}
+
+const RegMask Matcher::mathExactI_flags_proj_mask() {
+ return INT_FLAGS_mask();
+}
+
// Returns true if the high 32 bits of the value is known to be zero.
bool is_operand_hi32_zero(Node* n) {
int opc = n->Opcode();
@@ -4922,6 +4930,8 @@
greater_equal(0xD, "ge");
less_equal(0xE, "le");
greater(0xF, "g");
+ overflow(0x0, "o");
+ no_overflow(0x1, "no");
%}
%}
@@ -4939,6 +4949,8 @@
greater_equal(0x3, "nb");
less_equal(0x6, "be");
greater(0x7, "nbe");
+ overflow(0x0, "o");
+ no_overflow(0x1, "no");
%}
%}
@@ -4957,6 +4969,8 @@
greater_equal(0x3, "nb");
less_equal(0x6, "be");
greater(0x7, "nbe");
+ overflow(0x0, "o");
+ no_overflow(0x1, "no");
%}
%}
@@ -4974,6 +4988,8 @@
greater_equal(0x3, "nb");
less_equal(0x6, "be");
greater(0x7, "nbe");
+ overflow(0x0, "o");
+ no_overflow(0x1, "no");
%}
%}
@@ -4981,6 +4997,8 @@
operand cmpOp_fcmov() %{
match(Bool);
+ predicate(n->as_Bool()->_test._test != BoolTest::overflow &&
+ n->as_Bool()->_test._test != BoolTest::no_overflow);
format %{ "" %}
interface(COND_INTER) %{
equal (0x0C8);
@@ -4989,6 +5007,8 @@
greater_equal(0x1C0);
less_equal (0x0D0);
greater (0x1D0);
+ overflow(0x0, "o"); // not really supported by the instruction
+ no_overflow(0x1, "no"); // not really supported by the instruction
%}
%}
@@ -5004,6 +5024,8 @@
greater_equal(0xE, "le");
less_equal(0xD, "ge");
greater(0xC, "l");
+ overflow(0x0, "o");
+ no_overflow(0x1, "no");
%}
%}
@@ -7496,6 +7518,31 @@
//----------Arithmetic Instructions--------------------------------------------
//----------Addition Instructions----------------------------------------------
+
+instruct addExactI_rReg(eAXRegI dst, rRegI src, eFlagsReg cr)
+%{
+ match(AddExactI dst src);
+ effect(DEF cr);
+
+ format %{ "ADD $dst, $src\t# addExact int" %}
+ ins_encode %{
+ __ addl($dst$$Register, $src$$Register);
+ %}
+ ins_pipe(ialu_reg_reg);
+%}
+
+instruct addExactI_rReg_imm(eAXRegI dst, immI src, eFlagsReg cr)
+%{
+ match(AddExactI dst src);
+ effect(DEF cr);
+
+ format %{ "ADD $dst, $src\t# addExact int" %}
+ ins_encode %{
+ __ addl($dst$$Register, $src$$constant);
+ %}
+ ins_pipe(ialu_reg_reg);
+%}
+
// Integer Addition Instructions
instruct addI_eReg(rRegI dst, rRegI src, eFlagsReg cr) %{
match(Set dst (AddI dst src));
--- a/hotspot/src/cpu/x86/vm/x86_64.ad Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/cpu/x86/vm/x86_64.ad Thu Oct 10 13:41:08 2013 -0700
@@ -529,7 +529,7 @@
if (rspec.reloc()->type() == relocInfo::oop_type &&
d32 != 0 && d32 != (intptr_t) Universe::non_oop_word()) {
assert(Universe::heap()->is_in_reserved((address)(intptr_t)d32), "should be real oop");
- assert(oop((intptr_t)d32)->is_oop() && (ScavengeRootsInCode || !oop((intptr_t)d32)->is_scavengable()), "cannot embed scavengable oops in code");
+ assert(cast_to_oop((intptr_t)d32)->is_oop() && (ScavengeRootsInCode || !cast_to_oop((intptr_t)d32)->is_scavengable()), "cannot embed scavengable oops in code");
}
#endif
cbuf.relocate(cbuf.insts_mark(), rspec, format);
@@ -556,7 +556,7 @@
if (rspec.reloc()->type() == relocInfo::oop_type &&
d64 != 0 && d64 != (int64_t) Universe::non_oop_word()) {
assert(Universe::heap()->is_in_reserved((address)d64), "should be real oop");
- assert(oop(d64)->is_oop() && (ScavengeRootsInCode || !oop(d64)->is_scavengable()),
+ assert(cast_to_oop(d64)->is_oop() && (ScavengeRootsInCode || !cast_to_oop(d64)->is_scavengable()),
"cannot embed scavengable oops in code");
}
#endif
@@ -1649,6 +1649,14 @@
return PTR_RBP_REG_mask();
}
+const RegMask Matcher::mathExactI_result_proj_mask() {
+ return INT_RAX_REG_mask();
+}
+
+const RegMask Matcher::mathExactI_flags_proj_mask() {
+ return INT_FLAGS_mask();
+}
+
%}
//----------ENCODING BLOCK-----------------------------------------------------
@@ -4133,6 +4141,8 @@
greater_equal(0xD, "ge");
less_equal(0xE, "le");
greater(0xF, "g");
+ overflow(0x0, "o");
+ no_overflow(0x1, "no");
%}
%}
@@ -4151,6 +4161,8 @@
greater_equal(0x3, "nb");
less_equal(0x6, "be");
greater(0x7, "nbe");
+ overflow(0x0, "o");
+ no_overflow(0x1, "no");
%}
%}
@@ -4170,6 +4182,8 @@
greater_equal(0x3, "nb");
less_equal(0x6, "be");
greater(0x7, "nbe");
+ overflow(0x0, "o");
+ no_overflow(0x1, "no");
%}
%}
@@ -4187,6 +4201,8 @@
greater_equal(0x3, "nb");
less_equal(0x6, "be");
greater(0x7, "nbe");
+ overflow(0x0, "o");
+ no_overflow(0x1, "no");
%}
%}
@@ -6922,6 +6938,30 @@
//----------Arithmetic Instructions--------------------------------------------
//----------Addition Instructions----------------------------------------------
+instruct addExactI_rReg(rax_RegI dst, rRegI src, rFlagsReg cr)
+%{
+ match(AddExactI dst src);
+ effect(DEF cr);
+
+ format %{ "addl $dst, $src\t# addExact int" %}
+ ins_encode %{
+ __ addl($dst$$Register, $src$$Register);
+ %}
+ ins_pipe(ialu_reg_reg);
+%}
+
+instruct addExactI_rReg_imm(rax_RegI dst, immI src, rFlagsReg cr)
+%{
+ match(AddExactI dst src);
+ effect(DEF cr);
+
+ format %{ "addl $dst, $src\t# addExact int" %}
+ ins_encode %{
+ __ addl($dst$$Register, $src$$constant);
+ %}
+ ins_pipe(ialu_reg_reg);
+%}
+
instruct addI_rReg(rRegI dst, rRegI src, rFlagsReg cr)
%{
match(Set dst (AddI dst src));
--- a/hotspot/src/os/linux/vm/os_linux.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/os/linux/vm/os_linux.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -4839,6 +4839,10 @@
Linux::capture_initial_stack(JavaThread::stack_size_at_create());
+#if defined(IA32)
+ workaround_expand_exec_shield_cs_limit();
+#endif
+
Linux::libpthread_init();
if (PrintMiscellaneous && (Verbose || WizardMode)) {
tty->print_cr("[HotSpot is running with %s, %s(%s)]\n",
--- a/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -876,3 +876,46 @@
#endif
}
#endif
+
+
+/*
+ * IA32 only: execute code at a high address in case buggy NX emulation is present. I.e. avoid CS limit
+ * updates (JDK-8023956).
+ */
+void os::workaround_expand_exec_shield_cs_limit() {
+#if defined(IA32)
+ size_t page_size = os::vm_page_size();
+ /*
+ * Take the highest VA the OS will give us and exec
+ *
+ * Although using -(pagesz) as mmap hint works on newer kernel as you would
+ * think, older variants affected by this work-around don't (search forward only).
+ *
+ * On the affected distributions, we understand the memory layout to be:
+ *
+ * TASK_LIMIT= 3G, main stack base close to TASK_LIMT.
+ *
+ * A few pages south main stack will do it.
+ *
+ * If we are embedded in an app other than launcher (initial != main stack),
+ * we don't have much control or understanding of the address space, just let it slide.
+ */
+ char* hint = (char*) (Linux::initial_thread_stack_bottom() -
+ ((StackYellowPages + StackRedPages + 1) * page_size));
+ char* codebuf = os::reserve_memory(page_size, hint);
+ if ( (codebuf == NULL) || (!os::commit_memory(codebuf, page_size, true)) ) {
+ return; // No matter, we tried, best effort.
+ }
+ if (PrintMiscellaneous && (Verbose || WizardMode)) {
+ tty->print_cr("[CS limit NX emulation work-around, exec code at: %p]", codebuf);
+ }
+
+ // Some code to exec: the 'ret' instruction
+ codebuf[0] = 0xC3;
+
+ // Call the code in the codebuf
+ __asm__ volatile("call *%0" : : "r"(codebuf));
+
+ // keep the page mapped so CS limit isn't reduced.
+#endif
+}
--- a/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -36,4 +36,17 @@
// Note: Currently only used in 64 bit Windows implementations
static bool register_code_area(char *low, char *high) { return true; }
+ /*
+ * Work-around for broken NX emulation using CS limit, Red Hat patch "Exec-Shield"
+ * (IA32 only).
+ *
+ * Map and execute at a high VA to prevent CS lazy updates race with SMP MM
+ * invalidation.Further code generation by the JVM will no longer cause CS limit
+ * updates.
+ *
+ * Affects IA32: RHEL 5 & 6, Ubuntu 10.04 (LTS), 10.10, 11.04, 11.10, 12.04.
+ * @see JDK-8023956
+ */
+ static void workaround_expand_exec_shield_cs_limit();
+
#endif // OS_CPU_LINUX_X86_VM_OS_LINUX_X86_HPP
--- a/hotspot/src/share/vm/adlc/adlparse.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/adlc/adlparse.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -3395,12 +3395,16 @@
char *greater_equal;
char *less_equal;
char *greater;
+ char *overflow;
+ char *no_overflow;
const char *equal_format = "eq";
const char *not_equal_format = "ne";
const char *less_format = "lt";
const char *greater_equal_format = "ge";
const char *less_equal_format = "le";
const char *greater_format = "gt";
+ const char *overflow_format = "o";
+ const char *no_overflow_format = "no";
if (_curchar != '%') {
parse_err(SYNERR, "Missing '%%{' for 'cond_interface' block.\n");
@@ -3437,6 +3441,12 @@
else if ( strcmp(field,"greater") == 0 ) {
greater = interface_field_parse(&greater_format);
}
+ else if ( strcmp(field,"overflow") == 0 ) {
+ overflow = interface_field_parse(&overflow_format);
+ }
+ else if ( strcmp(field,"no_overflow") == 0 ) {
+ no_overflow = interface_field_parse(&no_overflow_format);
+ }
else {
parse_err(SYNERR, "Expected keyword, base|index|scale|disp, or '%%}' ending interface.\n");
return NULL;
@@ -3455,7 +3465,9 @@
less, less_format,
greater_equal, greater_equal_format,
less_equal, less_equal_format,
- greater, greater_format);
+ greater, greater_format,
+ overflow, overflow_format,
+ no_overflow, no_overflow_format);
return inter;
}
--- a/hotspot/src/share/vm/adlc/archDesc.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/adlc/archDesc.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1192,6 +1192,8 @@
|| strcmp(idealName,"CmpF") == 0
|| strcmp(idealName,"FastLock") == 0
|| strcmp(idealName,"FastUnlock") == 0
+ || strcmp(idealName,"AddExactI") == 0
+ || strcmp(idealName,"FlagsProj") == 0
|| strcmp(idealName,"Bool") == 0
|| strcmp(idealName,"Binary") == 0 ) {
// Removed ConI from the must_clone list. CPUs that cannot use
--- a/hotspot/src/share/vm/adlc/formssel.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/adlc/formssel.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -2757,14 +2757,18 @@
const char* less, const char* less_format,
const char* greater_equal, const char* greater_equal_format,
const char* less_equal, const char* less_equal_format,
- const char* greater, const char* greater_format)
+ const char* greater, const char* greater_format,
+ const char* overflow, const char* overflow_format,
+ const char* no_overflow, const char* no_overflow_format)
: Interface("COND_INTER"),
_equal(equal), _equal_format(equal_format),
_not_equal(not_equal), _not_equal_format(not_equal_format),
_less(less), _less_format(less_format),
_greater_equal(greater_equal), _greater_equal_format(greater_equal_format),
_less_equal(less_equal), _less_equal_format(less_equal_format),
- _greater(greater), _greater_format(greater_format) {
+ _greater(greater), _greater_format(greater_format),
+ _overflow(overflow), _overflow_format(overflow_format),
+ _no_overflow(no_overflow), _no_overflow_format(no_overflow_format) {
}
CondInterface::~CondInterface() {
// not owner of any character arrays
@@ -2777,12 +2781,14 @@
// Write info to output files
void CondInterface::output(FILE *fp) {
Interface::output(fp);
- if ( _equal != NULL ) fprintf(fp," equal == %s\n", _equal);
- if ( _not_equal != NULL ) fprintf(fp," not_equal == %s\n", _not_equal);
- if ( _less != NULL ) fprintf(fp," less == %s\n", _less);
- if ( _greater_equal != NULL ) fprintf(fp," greater_equal == %s\n", _greater_equal);
- if ( _less_equal != NULL ) fprintf(fp," less_equal == %s\n", _less_equal);
- if ( _greater != NULL ) fprintf(fp," greater == %s\n", _greater);
+ if ( _equal != NULL ) fprintf(fp," equal == %s\n", _equal);
+ if ( _not_equal != NULL ) fprintf(fp," not_equal == %s\n", _not_equal);
+ if ( _less != NULL ) fprintf(fp," less == %s\n", _less);
+ if ( _greater_equal != NULL ) fprintf(fp," greater_equal == %s\n", _greater_equal);
+ if ( _less_equal != NULL ) fprintf(fp," less_equal == %s\n", _less_equal);
+ if ( _greater != NULL ) fprintf(fp," greater == %s\n", _greater);
+ if ( _overflow != NULL ) fprintf(fp," overflow == %s\n", _overflow);
+ if ( _no_overflow != NULL ) fprintf(fp," no_overflow == %s\n", _no_overflow);
// fprintf(fp,"\n");
}
--- a/hotspot/src/share/vm/adlc/formssel.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/adlc/formssel.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -798,12 +798,16 @@
const char *_greater_equal;
const char *_less_equal;
const char *_greater;
+ const char *_overflow;
+ const char *_no_overflow;
const char *_equal_format;
const char *_not_equal_format;
const char *_less_format;
const char *_greater_equal_format;
const char *_less_equal_format;
const char *_greater_format;
+ const char *_overflow_format;
+ const char *_no_overflow_format;
// Public Methods
CondInterface(const char* equal, const char* equal_format,
@@ -811,7 +815,9 @@
const char* less, const char* less_format,
const char* greater_equal, const char* greater_equal_format,
const char* less_equal, const char* less_equal_format,
- const char* greater, const char* greater_format);
+ const char* greater, const char* greater_format,
+ const char* overflow, const char* overflow_format,
+ const char* no_overflow, const char* no_overflow_format);
~CondInterface();
void dump();
--- a/hotspot/src/share/vm/adlc/output_h.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/adlc/output_h.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -388,6 +388,8 @@
fprintf(fp, " else if( _c%d == BoolTest::ge ) st->print(\"%s\");\n",i,cond->_greater_equal_format);
fprintf(fp, " else if( _c%d == BoolTest::lt ) st->print(\"%s\");\n",i,cond->_less_format);
fprintf(fp, " else if( _c%d == BoolTest::gt ) st->print(\"%s\");\n",i,cond->_greater_format);
+ fprintf(fp, " else if( _c%d == BoolTest::overflow ) st->print(\"%s\");\n",i,cond->_overflow_format);
+ fprintf(fp, " else if( _c%d == BoolTest::no_overflow ) st->print(\"%s\");\n",i,cond->_no_overflow_format);
}
// Output code that dumps constant values, increment "i" if type is constant
@@ -1208,6 +1210,8 @@
fprintf(fp," case BoolTest::ne : return not_equal();\n");
fprintf(fp," case BoolTest::le : return less_equal();\n");
fprintf(fp," case BoolTest::ge : return greater_equal();\n");
+ fprintf(fp," case BoolTest::overflow : return overflow();\n");
+ fprintf(fp," case BoolTest::no_overflow: return no_overflow();\n");
fprintf(fp," default : ShouldNotReachHere(); return 0;\n");
fprintf(fp," }\n");
fprintf(fp," };\n");
@@ -1373,6 +1377,14 @@
if( greater != NULL ) {
define_oper_interface(fp, *oper, _globalNames, "greater", greater);
}
+ const char *overflow = cInterface->_overflow;
+ if( overflow != NULL ) {
+ define_oper_interface(fp, *oper, _globalNames, "overflow", overflow);
+ }
+ const char *no_overflow = cInterface->_no_overflow;
+ if( no_overflow != NULL ) {
+ define_oper_interface(fp, *oper, _globalNames, "no_overflow", no_overflow);
+ }
} // end Conditional Interface
// Check if it is a Constant Interface
else if (oper->_interface->is_ConstInterface() != NULL ) {
--- a/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -4219,7 +4219,9 @@
}
}
- if (!PrintInlining) return;
+ if (!PrintInlining && !compilation()->method()->has_option("PrintInlining")) {
+ return;
+ }
CompileTask::print_inlining(callee, scope()->level(), bci(), msg);
if (success && CIPrintMethodCodes) {
callee->print_codes();
--- a/hotspot/src/share/vm/c1/c1_Runtime1.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/c1/c1_Runtime1.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1019,7 +1019,7 @@
n_copy->set_data((intx) (load_klass()));
} else {
assert(mirror() != NULL, "klass not set");
- n_copy->set_data((intx) (mirror()));
+ n_copy->set_data(cast_from_oop<intx>(mirror()));
}
if (TracePatching) {
@@ -1031,7 +1031,7 @@
assert(n_copy->data() == 0 ||
n_copy->data() == (intptr_t)Universe::non_oop_word(),
"illegal init value");
- n_copy->set_data((intx) (appendix()));
+ n_copy->set_data(cast_from_oop<intx>(appendix()));
if (TracePatching) {
Disassembler::decode(copy_buff, copy_buff + *byte_count, tty);
@@ -1078,14 +1078,17 @@
// replace instructions
// first replace the tail, then the call
#ifdef ARM
- if(load_klass_or_mirror_patch_id && !VM_Version::supports_movw()) {
+ if((load_klass_or_mirror_patch_id ||
+ stub_id == Runtime1::load_appendix_patching_id) &&
+ !VM_Version::supports_movw()) {
nmethod* nm = CodeCache::find_nmethod(instr_pc);
address addr = NULL;
assert(nm != NULL, "invalid nmethod_pc");
RelocIterator mds(nm, copy_buff, copy_buff + 1);
while (mds.next()) {
if (mds.type() == relocInfo::oop_type) {
- assert(stub_id == Runtime1::load_mirror_patching_id, "wrong stub id");
+ assert(stub_id == Runtime1::load_mirror_patching_id ||
+ stub_id == Runtime1::load_appendix_patching_id, "wrong stub id");
oop_Relocation* r = mds.oop_reloc();
addr = (address)r->oop_addr();
break;
--- a/hotspot/src/share/vm/classfile/classFileParser.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/classfile/classFileParser.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1787,7 +1787,7 @@
if (_location != _in_method) break; // only allow for methods
if (!privileged) break; // only allow in privileged code
return _method_LambdaForm_Hidden;
- case vmSymbols::VM_SYMBOL_ENUM_NAME(sun_invoke_Stable_signature):
+ case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_Stable_signature):
if (_location != _in_field) break; // only allow for fields
if (!privileged) break; // only allow in privileged code
return _field_Stable;
@@ -2545,7 +2545,9 @@
if (method->is_final()) {
*has_final_method = true;
}
- if (is_interface && !method->is_abstract() && !method->is_static()) {
+ if (is_interface && !(*has_default_methods)
+ && !method->is_abstract() && !method->is_static()
+ && !method->is_private()) {
// default method
*has_default_methods = true;
}
--- a/hotspot/src/share/vm/classfile/classLoaderData.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/classfile/classLoaderData.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -261,7 +261,7 @@
k,
k->external_name(),
k->class_loader_data(),
- k->class_loader(),
+ (void *)k->class_loader(),
loader_name());
}
}
@@ -297,7 +297,7 @@
if (TraceClassLoaderData) {
ResourceMark rm;
tty->print("[ClassLoaderData: unload loader data "PTR_FORMAT, this);
- tty->print(" for instance "PTR_FORMAT" of %s", class_loader(),
+ tty->print(" for instance "PTR_FORMAT" of %s", (void *)class_loader(),
loader_name());
if (is_anonymous()) {
tty->print(" for anonymous class "PTR_FORMAT " ", _klasses);
@@ -458,7 +458,7 @@
void ClassLoaderData::dump(outputStream * const out) {
ResourceMark rm;
out->print("ClassLoaderData CLD: "PTR_FORMAT", loader: "PTR_FORMAT", loader_klass: "PTR_FORMAT" %s {",
- this, class_loader(),
+ this, (void *)class_loader(),
class_loader() != NULL ? class_loader()->klass() : NULL, loader_name());
if (claimed()) out->print(" claimed ");
if (is_unloading()) out->print(" unloading ");
@@ -553,7 +553,7 @@
ResourceMark rm;
tty->print("[ClassLoaderData: ");
tty->print("create class loader data "PTR_FORMAT, cld);
- tty->print(" for instance "PTR_FORMAT" of %s", cld->class_loader(),
+ tty->print(" for instance "PTR_FORMAT" of %s", (void *)cld->class_loader(),
cld->loader_name());
tty->print_cr("]");
}
--- a/hotspot/src/share/vm/classfile/defaultMethods.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/classfile/defaultMethods.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -325,6 +325,7 @@
Method* _selected_target; // Filled in later, if a unique target exists
Symbol* _exception_message; // If no unique target is found
+ Symbol* _exception_name; // If no unique target is found
bool contains_method(Method* method) {
int* lookup = _member_index.get(method);
@@ -350,7 +351,7 @@
public:
MethodFamily()
- : _selected_target(NULL), _exception_message(NULL) {}
+ : _selected_target(NULL), _exception_message(NULL), _exception_name(NULL) {}
void set_target_if_empty(Method* m) {
if (_selected_target == NULL && !m->is_overpass()) {
@@ -383,6 +384,7 @@
Method* get_selected_target() { return _selected_target; }
Symbol* get_exception_message() { return _exception_message; }
+ Symbol* get_exception_name() { return _exception_name; }
// Either sets the target or the exception error message
void determine_target(InstanceKlass* root, TRAPS) {
@@ -400,15 +402,18 @@
if (qualified_methods.length() == 0) {
_exception_message = generate_no_defaults_message(CHECK);
+ _exception_name = vmSymbols::java_lang_AbstractMethodError();
} else if (qualified_methods.length() == 1) {
Method* method = qualified_methods.at(0);
if (method->is_abstract()) {
_exception_message = generate_abstract_method_message(method, CHECK);
+ _exception_name = vmSymbols::java_lang_AbstractMethodError();
} else {
_selected_target = qualified_methods.at(0);
}
} else {
_exception_message = generate_conflicts_message(&qualified_methods,CHECK);
+ _exception_name = vmSymbols::java_lang_IncompatibleClassChangeError();
}
assert((has_target() ^ throws_exception()) == 1,
@@ -459,8 +464,9 @@
void print_exception(outputStream* str, int indent) {
assert(throws_exception(), "Should be called otherwise");
+ assert(_exception_name != NULL, "exception_name should be set");
streamIndentor si(str, indent * 2);
- str->indent().print_cr("%s", _exception_message->as_C_string());
+ str->indent().print_cr("%s: %s", _exception_name->as_C_string(), _exception_message->as_C_string());
}
#endif // ndef PRODUCT
};
@@ -670,7 +676,10 @@
InstanceKlass* iklass = current_class();
Method* m = iklass->find_method(_method_name, _method_signature);
- if (m != NULL) {
+ // private interface methods are not candidates for default methods
+ // invokespecial to private interface methods doesn't use default method logic
+ // future: take access controls into account for superclass methods
+ if (m != NULL && (!iklass->is_interface() || m->is_public())) {
if (_family == NULL) {
_family = new StatefulMethodFamily();
}
@@ -782,202 +791,9 @@
#endif // ndef PRODUCT
}
-/**
- * Interface inheritance rules were used to find a unique default method
- * candidate for the resolved class. This
- * method is only viable if it would also be in the set of default method
- * candidates if we ran a full analysis on the current class.
- *
- * The only reason that the method would not be in the set of candidates for
- * the current class is if that there's another matching method
- * which is "more specific" than the found method -- i.e., one could find a
- * path in the interface hierarchy in which the matching method appears
- * before we get to '_target'.
- *
- * In order to determine this, we examine all of the implemented
- * interfaces. If we find path that leads to the '_target' interface, then
- * we examine that path to see if there are any methods that would shadow
- * the selected method along that path.
- */
-class ShadowChecker : public HierarchyVisitor<ShadowChecker> {
- protected:
- Thread* THREAD;
-
- InstanceKlass* _target;
-
- Symbol* _method_name;
- InstanceKlass* _method_holder;
- bool _found_shadow;
- public:
-
- ShadowChecker(Thread* thread, Symbol* name, InstanceKlass* holder,
- InstanceKlass* target)
- : THREAD(thread), _method_name(name), _method_holder(holder),
- _target(target), _found_shadow(false) {}
-
- void* new_node_data(InstanceKlass* cls) { return NULL; }
- void free_node_data(void* data) { return; }
-
- bool visit() {
- InstanceKlass* ik = current_class();
- if (ik == _target && current_depth() == 1) {
- return false; // This was the specified super -- no need to search it
- }
- if (ik == _method_holder || ik == _target) {
- // We found a path that should be examined to see if it shadows _method
- if (path_has_shadow()) {
- _found_shadow = true;
- cancel_iteration();
- }
- return false; // no need to continue up hierarchy
- }
- return true;
- }
-
- virtual bool path_has_shadow() = 0;
- bool found_shadow() { return _found_shadow; }
-};
-
-// Used for Invokespecial.
-// Invokespecial is allowed to invoke a concrete interface method
-// and can be used to disambuiguate among qualified candidates,
-// which are methods in immediate superinterfaces,
-// but may not be used to invoke a candidate that would be shadowed
-// from the perspective of the caller.
-// Invokespecial is also used in the overpass generation today
-// We re-run the shadowchecker because we can't distinguish this case,
-// but it should return the same answer, since the overpass target
-// is now the invokespecial caller.
-class ErasedShadowChecker : public ShadowChecker {
- private:
- bool path_has_shadow() {
-
- for (int i = current_depth() - 1; i > 0; --i) {
- InstanceKlass* ik = class_at_depth(i);
-
- if (ik->is_interface()) {
- int end;
- int start = ik->find_method_by_name(_method_name, &end);
- if (start != -1) {
- return true;
- }
- }
- }
- return false;
- }
- public:
-
- ErasedShadowChecker(Thread* thread, Symbol* name, InstanceKlass* holder,
- InstanceKlass* target)
- : ShadowChecker(thread, name, holder, target) {}
-};
-
-// Find the unique qualified candidate from the perspective of the super_class
-// which is the resolved_klass, which must be an immediate superinterface
-// of klass
-Method* find_erased_super_default(InstanceKlass* current_class, InstanceKlass* super_class, Symbol* method_name, Symbol* sig, TRAPS) {
-
- FindMethodsByErasedSig visitor(method_name, sig);
- visitor.run(super_class); // find candidates from resolved_klass
-
- MethodFamily* family;
- visitor.get_discovered_family(&family);
-
- if (family != NULL) {
- family->determine_target(current_class, CHECK_NULL); // get target from current_class
-
- if (family->has_target()) {
- Method* target = family->get_selected_target();
- InstanceKlass* holder = InstanceKlass::cast(target->method_holder());
-
- // Verify that the identified method is valid from the context of
- // the current class, which is the caller class for invokespecial
- // link resolution, i.e. ensure there it is not shadowed.
- // You can use invokespecial to disambiguate interface methods, but
- // you can not use it to skip over an interface method that would shadow it.
- ErasedShadowChecker checker(THREAD, target->name(), holder, super_class);
- checker.run(current_class);
-
- if (checker.found_shadow()) {
-#ifndef PRODUCT
- if (TraceDefaultMethods) {
- tty->print_cr(" Only candidate found was shadowed.");
- }
-#endif // ndef PRODUCT
- THROW_MSG_(vmSymbols::java_lang_AbstractMethodError(),
- "Accessible default method not found", NULL);
- } else {
-#ifndef PRODUCT
- if (TraceDefaultMethods) {
- family->print_sig_on(tty, target->signature(), 1);
- }
-#endif // ndef PRODUCT
- return target;
- }
- } else {
- assert(family->throws_exception(), "must have target or throw");
- THROW_MSG_(vmSymbols::java_lang_AbstractMethodError(),
- family->get_exception_message()->as_C_string(), NULL);
- }
- } else {
- // no method found
- ResourceMark rm(THREAD);
- THROW_MSG_(vmSymbols::java_lang_NoSuchMethodError(),
- Method::name_and_sig_as_C_string(current_class,
- method_name, sig), NULL);
- }
-}
-// This is called during linktime when we find an invokespecial call that
-// refers to a direct superinterface. It indicates that we should find the
-// default method in the hierarchy of that superinterface, and if that method
-// would have been a candidate from the point of view of 'this' class, then we
-// return that method.
-// This logic assumes that the super is a direct superclass of the caller
-Method* DefaultMethods::find_super_default(
- Klass* cls, Klass* super, Symbol* method_name, Symbol* sig, TRAPS) {
-
- ResourceMark rm(THREAD);
-
- assert(cls != NULL && super != NULL, "Need real classes");
-
- InstanceKlass* current_class = InstanceKlass::cast(cls);
- InstanceKlass* super_class = InstanceKlass::cast(super);
-
- // Keep entire hierarchy alive for the duration of the computation
- KeepAliveRegistrar keepAlive(THREAD);
- KeepAliveVisitor loadKeepAlive(&keepAlive);
- loadKeepAlive.run(current_class); // get hierarchy from current class
-
-#ifndef PRODUCT
- if (TraceDefaultMethods) {
- tty->print_cr("Finding super default method %s.%s%s from %s",
- super_class->name()->as_C_string(),
- method_name->as_C_string(), sig->as_C_string(),
- current_class->name()->as_C_string());
- }
-#endif // ndef PRODUCT
-
- assert(super_class->is_interface(), "only call for default methods");
-
- Method* target = NULL;
- target = find_erased_super_default(current_class, super_class,
- method_name, sig, CHECK_NULL);
-
-#ifndef PRODUCT
- if (target != NULL) {
- if (TraceDefaultMethods) {
- tty->print(" Returning ");
- print_method(tty, target, true);
- tty->print_cr("");
- }
- }
-#endif // ndef PRODUCT
- return target;
-}
-
-#ifndef PRODUCT
+#ifdef ASSERT
// Return true is broad type is a covariant return of narrow type
static bool covariant_return_type(BasicType narrow, BasicType broad) {
if (narrow == broad) {
@@ -988,7 +804,7 @@
}
return false;
}
-#endif // ndef PRODUCT
+#endif
static int assemble_redirect(
BytecodeConstantPool* cp, BytecodeBuffer* buffer,
@@ -1035,10 +851,9 @@
return parameter_count;
}
-static int assemble_abstract_method_error(
- BytecodeConstantPool* cp, BytecodeBuffer* buffer, Symbol* message, TRAPS) {
+static int assemble_method_error(
+ BytecodeConstantPool* cp, BytecodeBuffer* buffer, Symbol* errorName, Symbol* message, TRAPS) {
- Symbol* errorName = vmSymbols::java_lang_AbstractMethodError();
Symbol* init = vmSymbols::object_initializer_name();
Symbol* sig = vmSymbols::string_void_signature();
@@ -1150,8 +965,7 @@
&bpool, &buffer, slot->signature(), selected, CHECK);
}
} else if (method->throws_exception()) {
- max_stack = assemble_abstract_method_error(
- &bpool, &buffer, method->get_exception_message(), CHECK);
+ max_stack = assemble_method_error(&bpool, &buffer, method->get_exception_name(), method->get_exception_message(), CHECK);
}
if (max_stack != 0) {
AccessFlags flags = accessFlags_from(
@@ -1281,4 +1095,3 @@
MetadataFactory::free_array(cld, original_ordering);
}
}
-
--- a/hotspot/src/share/vm/classfile/defaultMethods.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/classfile/defaultMethods.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -44,15 +44,5 @@
// the class.
static void generate_default_methods(
InstanceKlass* klass, GrowableArray<Method*>* mirandas, TRAPS);
-
-
- // Called during linking when an invokespecial to an direct interface
- // method is found. Selects and returns a method if there is a unique
- // default method in the 'super_iface' part of the hierarchy which is
- // also a candidate default for 'this_klass'. Otherwise throws an AME.
- static Method* find_super_default(
- Klass* this_klass, Klass* super_iface,
- Symbol* method_name, Symbol* method_sig, TRAPS);
};
-
#endif // SHARE_VM_CLASSFILE_DEFAULTMETHODS_HPP
--- a/hotspot/src/share/vm/classfile/dictionary.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/classfile/dictionary.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -264,7 +264,7 @@
}
if (method_type() != NULL) {
if (printed) st->print(" and ");
- st->print(INTPTR_FORMAT, method_type());
+ st->print(INTPTR_FORMAT, (void *)method_type());
printed = true;
}
st->print_cr(printed ? "" : "(empty)");
--- a/hotspot/src/share/vm/classfile/javaClasses.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/classfile/javaClasses.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -438,6 +438,29 @@
return true;
}
+bool java_lang_String::equals(oop str1, oop str2) {
+ assert(str1->klass() == SystemDictionary::String_klass(),
+ "must be java String");
+ assert(str2->klass() == SystemDictionary::String_klass(),
+ "must be java String");
+ typeArrayOop value1 = java_lang_String::value(str1);
+ int offset1 = java_lang_String::offset(str1);
+ int length1 = java_lang_String::length(str1);
+ typeArrayOop value2 = java_lang_String::value(str2);
+ int offset2 = java_lang_String::offset(str2);
+ int length2 = java_lang_String::length(str2);
+
+ if (length1 != length2) {
+ return false;
+ }
+ for (int i = 0; i < length1; i++) {
+ if (value1->char_at(i + offset1) != value2->char_at(i + offset2)) {
+ return false;
+ }
+ }
+ return true;
+}
+
void java_lang_String::print(Handle java_string, outputStream* st) {
oop obj = java_string();
assert(obj->klass() == SystemDictionary::String_klass(), "must be java_string");
--- a/hotspot/src/share/vm/classfile/javaClasses.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/classfile/javaClasses.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -182,6 +182,7 @@
static unsigned int hash_string(oop java_string);
static bool equals(oop java_string, jchar* chars, int len);
+ static bool equals(oop str1, oop str2);
// Conversion between '.' and '/' formats
static Handle externalize_classname(Handle java_string, TRAPS) { return char_converter(java_string, '/', '.', THREAD); }
--- a/hotspot/src/share/vm/classfile/symbolTable.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/classfile/symbolTable.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -341,7 +341,7 @@
Symbol* SymbolTable::basic_add(int index_arg, u1 *name, int len,
unsigned int hashValue_arg, bool c_heap, TRAPS) {
- assert(!Universe::heap()->is_in_reserved(name) || GC_locker::is_active(),
+ assert(!Universe::heap()->is_in_reserved(name),
"proposed name of symbol must be stable");
// Don't allow symbols to be created which cannot fit in a Symbol*.
@@ -685,7 +685,7 @@
if (found_string != NULL) return found_string;
debug_only(StableMemoryChecker smc(name, len * sizeof(name[0])));
- assert(!Universe::heap()->is_in_reserved(name) || GC_locker::is_active(),
+ assert(!Universe::heap()->is_in_reserved(name),
"proposed name of symbol must be stable");
Handle string;
@@ -807,6 +807,8 @@
}
}
+// This verification is part of Universe::verify() and needs to be quick.
+// See StringTable::verify_and_compare() below for exhaustive verification.
void StringTable::verify() {
for (int i = 0; i < the_table()->table_size(); ++i) {
HashtableEntry<oop, mtSymbol>* p = the_table()->bucket(i);
@@ -825,6 +827,162 @@
the_table()->dump_table(st, "StringTable");
}
+StringTable::VerifyRetTypes StringTable::compare_entries(
+ int bkt1, int e_cnt1,
+ HashtableEntry<oop, mtSymbol>* e_ptr1,
+ int bkt2, int e_cnt2,
+ HashtableEntry<oop, mtSymbol>* e_ptr2) {
+ // These entries are sanity checked by verify_and_compare_entries()
+ // before this function is called.
+ oop str1 = e_ptr1->literal();
+ oop str2 = e_ptr2->literal();
+
+ if (str1 == str2) {
+ tty->print_cr("ERROR: identical oop values (0x" PTR_FORMAT ") "
+ "in entry @ bucket[%d][%d] and entry @ bucket[%d][%d]",
+ (void *)str1, bkt1, e_cnt1, bkt2, e_cnt2);
+ return _verify_fail_continue;
+ }
+
+ if (java_lang_String::equals(str1, str2)) {
+ tty->print_cr("ERROR: identical String values in entry @ "
+ "bucket[%d][%d] and entry @ bucket[%d][%d]",
+ bkt1, e_cnt1, bkt2, e_cnt2);
+ return _verify_fail_continue;
+ }
+
+ return _verify_pass;
+}
+
+StringTable::VerifyRetTypes StringTable::verify_entry(int bkt, int e_cnt,
+ HashtableEntry<oop, mtSymbol>* e_ptr,
+ StringTable::VerifyMesgModes mesg_mode) {
+
+ VerifyRetTypes ret = _verify_pass; // be optimistic
+
+ oop str = e_ptr->literal();
+ if (str == NULL) {
+ if (mesg_mode == _verify_with_mesgs) {
+ tty->print_cr("ERROR: NULL oop value in entry @ bucket[%d][%d]", bkt,
+ e_cnt);
+ }
+ // NULL oop means no more verifications are possible
+ return _verify_fail_done;
+ }
+
+ if (str->klass() != SystemDictionary::String_klass()) {
+ if (mesg_mode == _verify_with_mesgs) {
+ tty->print_cr("ERROR: oop is not a String in entry @ bucket[%d][%d]",
+ bkt, e_cnt);
+ }
+ // not a String means no more verifications are possible
+ return _verify_fail_done;
+ }
+
+ unsigned int h = java_lang_String::hash_string(str);
+ if (e_ptr->hash() != h) {
+ if (mesg_mode == _verify_with_mesgs) {
+ tty->print_cr("ERROR: broken hash value in entry @ bucket[%d][%d], "
+ "bkt_hash=%d, str_hash=%d", bkt, e_cnt, e_ptr->hash(), h);
+ }
+ ret = _verify_fail_continue;
+ }
+
+ if (the_table()->hash_to_index(h) != bkt) {
+ if (mesg_mode == _verify_with_mesgs) {
+ tty->print_cr("ERROR: wrong index value for entry @ bucket[%d][%d], "
+ "str_hash=%d, hash_to_index=%d", bkt, e_cnt, h,
+ the_table()->hash_to_index(h));
+ }
+ ret = _verify_fail_continue;
+ }
+
+ return ret;
+}
+
+// See StringTable::verify() above for the quick verification that is
+// part of Universe::verify(). This verification is exhaustive and
+// reports on every issue that is found. StringTable::verify() only
+// reports on the first issue that is found.
+//
+// StringTable::verify_entry() checks:
+// - oop value != NULL (same as verify())
+// - oop value is a String
+// - hash(String) == hash in entry (same as verify())
+// - index for hash == index of entry (same as verify())
+//
+// StringTable::compare_entries() checks:
+// - oops are unique across all entries
+// - String values are unique across all entries
+//
+int StringTable::verify_and_compare_entries() {
+ assert(StringTable_lock->is_locked(), "sanity check");
+
+ int fail_cnt = 0;
+
+ // first, verify all the entries individually:
+ for (int bkt = 0; bkt < the_table()->table_size(); bkt++) {
+ HashtableEntry<oop, mtSymbol>* e_ptr = the_table()->bucket(bkt);
+ for (int e_cnt = 0; e_ptr != NULL; e_ptr = e_ptr->next(), e_cnt++) {
+ VerifyRetTypes ret = verify_entry(bkt, e_cnt, e_ptr, _verify_with_mesgs);
+ if (ret != _verify_pass) {
+ fail_cnt++;
+ }
+ }
+ }
+
+ // Optimization: if the above check did not find any failures, then
+ // the comparison loop below does not need to call verify_entry()
+ // before calling compare_entries(). If there were failures, then we
+ // have to call verify_entry() to see if the entry can be passed to
+ // compare_entries() safely. When we call verify_entry() in the loop
+ // below, we do so quietly to void duplicate messages and we don't
+ // increment fail_cnt because the failures have already been counted.
+ bool need_entry_verify = (fail_cnt != 0);
+
+ // second, verify all entries relative to each other:
+ for (int bkt1 = 0; bkt1 < the_table()->table_size(); bkt1++) {
+ HashtableEntry<oop, mtSymbol>* e_ptr1 = the_table()->bucket(bkt1);
+ for (int e_cnt1 = 0; e_ptr1 != NULL; e_ptr1 = e_ptr1->next(), e_cnt1++) {
+ if (need_entry_verify) {
+ VerifyRetTypes ret = verify_entry(bkt1, e_cnt1, e_ptr1,
+ _verify_quietly);
+ if (ret == _verify_fail_done) {
+ // cannot use the current entry to compare against other entries
+ continue;
+ }
+ }
+
+ for (int bkt2 = bkt1; bkt2 < the_table()->table_size(); bkt2++) {
+ HashtableEntry<oop, mtSymbol>* e_ptr2 = the_table()->bucket(bkt2);
+ int e_cnt2;
+ for (e_cnt2 = 0; e_ptr2 != NULL; e_ptr2 = e_ptr2->next(), e_cnt2++) {
+ if (bkt1 == bkt2 && e_cnt2 <= e_cnt1) {
+ // skip the entries up to and including the one that
+ // we're comparing against
+ continue;
+ }
+
+ if (need_entry_verify) {
+ VerifyRetTypes ret = verify_entry(bkt2, e_cnt2, e_ptr2,
+ _verify_quietly);
+ if (ret == _verify_fail_done) {
+ // cannot compare against this entry
+ continue;
+ }
+ }
+
+ // compare two entries, report and count any failures:
+ if (compare_entries(bkt1, e_cnt1, e_ptr1, bkt2, e_cnt2, e_ptr2)
+ != _verify_pass) {
+ fail_cnt++;
+ }
+ }
+ }
+ }
+ }
+ return fail_cnt;
+}
// Create a new table and using alternate hash code, populate the new table
// with the existing strings. Set flag to use the alternate hash code afterwards.
--- a/hotspot/src/share/vm/classfile/symbolTable.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/classfile/symbolTable.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -311,6 +311,26 @@
static void verify();
static void dump(outputStream* st);
+ enum VerifyMesgModes {
+ _verify_quietly = 0,
+ _verify_with_mesgs = 1
+ };
+
+ enum VerifyRetTypes {
+ _verify_pass = 0,
+ _verify_fail_continue = 1,
+ _verify_fail_done = 2
+ };
+
+ static VerifyRetTypes compare_entries(int bkt1, int e_cnt1,
+ HashtableEntry<oop, mtSymbol>* e_ptr1,
+ int bkt2, int e_cnt2,
+ HashtableEntry<oop, mtSymbol>* e_ptr2);
+ static VerifyRetTypes verify_entry(int bkt, int e_cnt,
+ HashtableEntry<oop, mtSymbol>* e_ptr,
+ VerifyMesgModes mesg_mode);
+ static int verify_and_compare_entries();
+
// Sharing
static void copy_buckets(char** top, char*end) {
the_table()->Hashtable<oop, mtSymbol>::copy_buckets(top, end);
--- a/hotspot/src/share/vm/classfile/vmSymbols.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/classfile/vmSymbols.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -270,7 +270,7 @@
template(java_lang_invoke_LambdaForm, "java/lang/invoke/LambdaForm") \
template(java_lang_invoke_ForceInline_signature, "Ljava/lang/invoke/ForceInline;") \
template(java_lang_invoke_DontInline_signature, "Ljava/lang/invoke/DontInline;") \
- template(sun_invoke_Stable_signature, "Lsun/invoke/Stable;") \
+ template(java_lang_invoke_Stable_signature, "Ljava/lang/invoke/Stable;") \
template(java_lang_invoke_LambdaForm_Compiled_signature, "Ljava/lang/invoke/LambdaForm$Compiled;") \
template(java_lang_invoke_LambdaForm_Hidden_signature, "Ljava/lang/invoke/LambdaForm$Hidden;") \
template(java_lang_invoke_MagicLambdaImpl, "java/lang/invoke/MagicLambdaImpl") \
@@ -631,6 +631,10 @@
do_name(log_name,"log") do_name(log10_name,"log10") do_name(pow_name,"pow") \
do_name(exp_name,"exp") do_name(min_name,"min") do_name(max_name,"max") \
\
+ do_name(addExact_name,"addExact") \
+ do_name(subtractExact_name,"subtractExact") \
+ do_name(multiplyExact_name,"multiplyExact") \
+ \
do_intrinsic(_dabs, java_lang_Math, abs_name, double_double_signature, F_S) \
do_intrinsic(_dsin, java_lang_Math, sin_name, double_double_signature, F_S) \
do_intrinsic(_dcos, java_lang_Math, cos_name, double_double_signature, F_S) \
@@ -643,6 +647,7 @@
do_intrinsic(_dexp, java_lang_Math, exp_name, double_double_signature, F_S) \
do_intrinsic(_min, java_lang_Math, min_name, int2_int_signature, F_S) \
do_intrinsic(_max, java_lang_Math, max_name, int2_int_signature, F_S) \
+ do_intrinsic(_addExact, java_lang_Math, addExact_name, int2_int_signature, F_S) \
\
do_intrinsic(_floatToRawIntBits, java_lang_Float, floatToRawIntBits_name, float_int_signature, F_S) \
do_name( floatToRawIntBits_name, "floatToRawIntBits") \
--- a/hotspot/src/share/vm/code/codeCache.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/code/codeCache.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -124,7 +124,6 @@
int CodeCache::_number_of_nmethods_with_dependencies = 0;
bool CodeCache::_needs_cache_clean = false;
nmethod* CodeCache::_scavenge_root_nmethods = NULL;
-nmethod* CodeCache::_saved_nmethods = NULL;
int CodeCache::_codemem_full_count = 0;
@@ -464,96 +463,11 @@
}
#endif //PRODUCT
-/**
- * Remove and return nmethod from the saved code list in order to reanimate it.
- */
-nmethod* CodeCache::reanimate_saved_code(Method* m) {
- MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
- nmethod* saved = _saved_nmethods;
- nmethod* prev = NULL;
- while (saved != NULL) {
- if (saved->is_in_use() && saved->method() == m) {
- if (prev != NULL) {
- prev->set_saved_nmethod_link(saved->saved_nmethod_link());
- } else {
- _saved_nmethods = saved->saved_nmethod_link();
- }
- assert(saved->is_speculatively_disconnected(), "shouldn't call for other nmethods");
- saved->set_speculatively_disconnected(false);
- saved->set_saved_nmethod_link(NULL);
- if (PrintMethodFlushing) {
- saved->print_on(tty, " ### nmethod is reconnected");
- }
- if (LogCompilation && (xtty != NULL)) {
- ttyLocker ttyl;
- xtty->begin_elem("nmethod_reconnected compile_id='%3d'", saved->compile_id());
- xtty->method(m);
- xtty->stamp();
- xtty->end_elem();
- }
- return saved;
- }
- prev = saved;
- saved = saved->saved_nmethod_link();
- }
- return NULL;
-}
-
-/**
- * Remove nmethod from the saved code list in order to discard it permanently
- */
-void CodeCache::remove_saved_code(nmethod* nm) {
- // For conc swpr this will be called with CodeCache_lock taken by caller
- assert_locked_or_safepoint(CodeCache_lock);
- assert(nm->is_speculatively_disconnected(), "shouldn't call for other nmethods");
- nmethod* saved = _saved_nmethods;
- nmethod* prev = NULL;
- while (saved != NULL) {
- if (saved == nm) {
- if (prev != NULL) {
- prev->set_saved_nmethod_link(saved->saved_nmethod_link());
- } else {
- _saved_nmethods = saved->saved_nmethod_link();
- }
- if (LogCompilation && (xtty != NULL)) {
- ttyLocker ttyl;
- xtty->begin_elem("nmethod_removed compile_id='%3d'", nm->compile_id());
- xtty->stamp();
- xtty->end_elem();
- }
- return;
- }
- prev = saved;
- saved = saved->saved_nmethod_link();
- }
- ShouldNotReachHere();
-}
-
-void CodeCache::speculatively_disconnect(nmethod* nm) {
- assert_locked_or_safepoint(CodeCache_lock);
- assert(nm->is_in_use() && !nm->is_speculatively_disconnected(), "should only disconnect live nmethods");
- nm->set_saved_nmethod_link(_saved_nmethods);
- _saved_nmethods = nm;
- if (PrintMethodFlushing) {
- nm->print_on(tty, " ### nmethod is speculatively disconnected");
- }
- if (LogCompilation && (xtty != NULL)) {
- ttyLocker ttyl;
- xtty->begin_elem("nmethod_disconnected compile_id='%3d'", nm->compile_id());
- xtty->method(nm->method());
- xtty->stamp();
- xtty->end_elem();
- }
- nm->method()->clear_code();
- nm->set_speculatively_disconnected(true);
-}
-
void CodeCache::gc_prologue() {
assert(!nmethod::oops_do_marking_is_active(), "oops_do_marking_epilogue must be called");
}
-
void CodeCache::gc_epilogue() {
assert_locked_or_safepoint(CodeCache_lock);
FOR_ALL_ALIVE_BLOBS(cb) {
--- a/hotspot/src/share/vm/code/codeCache.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/code/codeCache.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -57,7 +57,6 @@
static int _number_of_nmethods_with_dependencies;
static bool _needs_cache_clean;
static nmethod* _scavenge_root_nmethods; // linked via nm->scavenge_root_link()
- static nmethod* _saved_nmethods; // Linked list of speculatively disconnected nmethods.
static void verify_if_often() PRODUCT_RETURN;
@@ -167,17 +166,12 @@
static size_t capacity() { return _heap->capacity(); }
static size_t max_capacity() { return _heap->max_capacity(); }
static size_t unallocated_capacity() { return _heap->unallocated_capacity(); }
- static bool needs_flushing() { return unallocated_capacity() < CodeCacheFlushingMinimumFreeSpace; }
static double reverse_free_ratio();
static bool needs_cache_clean() { return _needs_cache_clean; }
static void set_needs_cache_clean(bool v) { _needs_cache_clean = v; }
static void clear_inline_caches(); // clear all inline caches
- static nmethod* reanimate_saved_code(Method* m);
- static void remove_saved_code(nmethod* nm);
- static void speculatively_disconnect(nmethod* nm);
-
// Deoptimization
static int mark_for_deoptimization(DepChange& changes);
#ifdef HOTSWAP
--- a/hotspot/src/share/vm/code/compiledIC.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/code/compiledIC.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -160,7 +160,7 @@
// High-level access to an inline cache. Guaranteed to be MT-safe.
-void CompiledIC::set_to_megamorphic(CallInfo* call_info, Bytecodes::Code bytecode, TRAPS) {
+bool CompiledIC::set_to_megamorphic(CallInfo* call_info, Bytecodes::Code bytecode, TRAPS) {
assert(CompiledIC_lock->is_locked() || SafepointSynchronize::is_at_safepoint(), "");
assert(!is_optimized(), "cannot set an optimized virtual call to megamorphic");
assert(is_call_to_compiled() || is_call_to_interpreted(), "going directly to megamorphic?");
@@ -170,8 +170,10 @@
assert(bytecode == Bytecodes::_invokeinterface, "");
int itable_index = call_info->itable_index();
entry = VtableStubs::find_itable_stub(itable_index);
+ if (entry == false) {
+ return false;
+ }
#ifdef ASSERT
- assert(entry != NULL, "entry not computed");
int index = call_info->resolved_method()->itable_index();
assert(index == itable_index, "CallInfo pre-computes this");
#endif //ASSERT
@@ -184,6 +186,9 @@
int vtable_index = call_info->vtable_index();
assert(call_info->resolved_klass()->verify_vtable_index(vtable_index), "sanity check");
entry = VtableStubs::find_vtable_stub(vtable_index);
+ if (entry == NULL) {
+ return false;
+ }
InlineCacheBuffer::create_transition_stub(this, NULL, entry);
}
@@ -200,6 +205,7 @@
// race because the IC entry was complete when we safepointed so
// cleaning it immediately is harmless.
// assert(is_megamorphic(), "sanity check");
+ return true;
}
--- a/hotspot/src/share/vm/code/compiledIC.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/code/compiledIC.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -226,7 +226,10 @@
//
void set_to_clean(); // Can only be called during a safepoint operation
void set_to_monomorphic(CompiledICInfo& info);
- void set_to_megamorphic(CallInfo* call_info, Bytecodes::Code bytecode, TRAPS);
+
+ // Returns true if successful and false otherwise. The call can fail if memory
+ // allocation in the code cache fails.
+ bool set_to_megamorphic(CallInfo* call_info, Bytecodes::Code bytecode, TRAPS);
static void compute_monomorphic_entry(methodHandle method, KlassHandle receiver_klass,
bool is_optimized, bool static_bound, CompiledICInfo& info, TRAPS);
--- a/hotspot/src/share/vm/code/nmethod.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/code/nmethod.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -462,7 +462,6 @@
_state = alive;
_marked_for_reclamation = 0;
_has_flushed_dependencies = 0;
- _speculatively_disconnected = 0;
_has_unsafe_access = 0;
_has_method_handle_invokes = 0;
_lazy_critical_native = 0;
@@ -481,7 +480,6 @@
_osr_link = NULL;
_scavenge_root_link = NULL;
_scavenge_root_state = 0;
- _saved_nmethod_link = NULL;
_compiler = NULL;
#ifdef HAVE_DTRACE_H
@@ -686,6 +684,7 @@
_osr_entry_point = NULL;
_exception_cache = NULL;
_pc_desc_cache.reset_to(NULL);
+ _hotness_counter = NMethodSweeper::hotness_counter_reset_val();
code_buffer->copy_values_to(this);
if (ScavengeRootsInCode && detect_scavenge_root_oops()) {
@@ -770,6 +769,7 @@
_osr_entry_point = NULL;
_exception_cache = NULL;
_pc_desc_cache.reset_to(NULL);
+ _hotness_counter = NMethodSweeper::hotness_counter_reset_val();
code_buffer->copy_values_to(this);
debug_only(verify_scavenge_root_oops());
@@ -842,6 +842,7 @@
_comp_level = comp_level;
_compiler = compiler;
_orig_pc_offset = orig_pc_offset;
+ _hotness_counter = NMethodSweeper::hotness_counter_reset_val();
// Section offsets
_consts_offset = content_offset() + code_buffer->total_offset_of(code_buffer->consts());
@@ -1176,7 +1177,7 @@
// This is a private interface with the sweeper.
void nmethod::mark_as_seen_on_stack() {
- assert(is_not_entrant(), "must be a non-entrant method");
+ assert(is_alive(), "Must be an alive method");
// Set the traversal mark to ensure that the sweeper does 2
// cleaning passes before moving to zombie.
set_stack_traversal_mark(NMethodSweeper::traversal_count());
@@ -1261,7 +1262,7 @@
set_osr_link(NULL);
//set_scavenge_root_link(NULL); // done by prune_scavenge_root_nmethods
- NMethodSweeper::notify(this);
+ NMethodSweeper::notify();
}
void nmethod::invalidate_osr_method() {
@@ -1351,6 +1352,15 @@
nmethod_needs_unregister = true;
}
+ // Must happen before state change. Otherwise we have a race condition in
+ // nmethod::can_not_entrant_be_converted(). I.e., a method can immediately
+ // transition its state from 'not_entrant' to 'zombie' without having to wait
+ // for stack scanning.
+ if (state == not_entrant) {
+ mark_as_seen_on_stack();
+ OrderAccess::storestore();
+ }
+
// Change state
_state = state;
@@ -1369,11 +1379,6 @@
HandleMark hm;
method()->clear_code();
}
-
- if (state == not_entrant) {
- mark_as_seen_on_stack();
- }
-
} // leave critical region under Patching_lock
// When the nmethod becomes zombie it is no longer alive so the
@@ -1416,7 +1421,7 @@
}
// Make sweeper aware that there is a zombie method that needs to be removed
- NMethodSweeper::notify(this);
+ NMethodSweeper::notify();
return true;
}
@@ -1451,10 +1456,6 @@
CodeCache::drop_scavenge_root_nmethod(this);
}
- if (is_speculatively_disconnected()) {
- CodeCache::remove_saved_code(this);
- }
-
#ifdef SHARK
((SharkCompiler *) compiler())->free_compiled_method(insts_begin());
#endif // SHARK
@@ -1965,7 +1966,7 @@
if (!_detected_scavenge_root) _print_nm->print_on(tty, "new scavenge root");
tty->print_cr(""PTR_FORMAT"[offset=%d] detected scavengable oop "PTR_FORMAT" (found at "PTR_FORMAT")",
_print_nm, (int)((intptr_t)p - (intptr_t)_print_nm),
- (intptr_t)(*p), (intptr_t)p);
+ (void *)(*p), (intptr_t)p);
(*p)->print();
}
#endif //PRODUCT
@@ -2345,7 +2346,7 @@
_ok = false;
}
tty->print_cr("*** non-oop "PTR_FORMAT" found at "PTR_FORMAT" (offset %d)",
- (intptr_t)(*p), (intptr_t)p, (int)((intptr_t)p - (intptr_t)_nm));
+ (void *)(*p), (intptr_t)p, (int)((intptr_t)p - (intptr_t)_nm));
}
virtual void do_oop(narrowOop* p) { ShouldNotReachHere(); }
};
@@ -2466,7 +2467,7 @@
_ok = false;
}
tty->print_cr("*** scavengable oop "PTR_FORMAT" found at "PTR_FORMAT" (offset %d)",
- (intptr_t)(*p), (intptr_t)p, (int)((intptr_t)p - (intptr_t)_nm));
+ (void *)(*p), (intptr_t)p, (int)((intptr_t)p - (intptr_t)_nm));
(*p)->print();
}
virtual void do_oop(narrowOop* p) { ShouldNotReachHere(); }
--- a/hotspot/src/share/vm/code/nmethod.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/code/nmethod.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -119,7 +119,6 @@
// To support simple linked-list chaining of nmethods:
nmethod* _osr_link; // from InstanceKlass::osr_nmethods_head
nmethod* _scavenge_root_link; // from CodeCache::scavenge_root_nmethods
- nmethod* _saved_nmethod_link; // from CodeCache::speculatively_disconnect
static nmethod* volatile _oops_do_mark_nmethods;
nmethod* volatile _oops_do_mark_link;
@@ -165,7 +164,6 @@
// protected by CodeCache_lock
bool _has_flushed_dependencies; // Used for maintenance of dependencies (CodeCache_lock)
- bool _speculatively_disconnected; // Marked for potential unload
bool _marked_for_reclamation; // Used by NMethodSweeper (set only by sweeper)
bool _marked_for_deoptimization; // Used for stack deoptimization
@@ -180,7 +178,7 @@
unsigned int _has_wide_vectors:1; // Preserve wide vectors at safepoints
// Protected by Patching_lock
- unsigned char _state; // {alive, not_entrant, zombie, unloaded}
+ volatile unsigned char _state; // {alive, not_entrant, zombie, unloaded}
#ifdef ASSERT
bool _oops_are_stale; // indicates that it's no longer safe to access oops section
@@ -202,11 +200,18 @@
// not_entrant method removal. Each mark_sweep pass will update
// this mark to current sweep invocation count if it is seen on the
- // stack. An not_entrant method can be removed when there is no
+ // stack. An not_entrant method can be removed when there are no
// more activations, i.e., when the _stack_traversal_mark is less than
// current sweep traversal index.
long _stack_traversal_mark;
+ // The _hotness_counter indicates the hotness of a method. The higher
+ // the value the hotter the method. The hotness counter of a nmethod is
+ // set to [(ReservedCodeCacheSize / (1024 * 1024)) * 2] each time the method
+ // is active while stack scanning (mark_active_nmethods()). The hotness
+ // counter is decreased (by 1) while sweeping.
+ int _hotness_counter;
+
ExceptionCache *_exception_cache;
PcDescCache _pc_desc_cache;
@@ -382,6 +387,10 @@
int total_size () const;
+ void dec_hotness_counter() { _hotness_counter--; }
+ void set_hotness_counter(int val) { _hotness_counter = val; }
+ int hotness_counter() const { return _hotness_counter; }
+
// Containment
bool consts_contains (address addr) const { return consts_begin () <= addr && addr < consts_end (); }
bool insts_contains (address addr) const { return insts_begin () <= addr && addr < insts_end (); }
@@ -408,8 +417,8 @@
// alive. It is used when an uncommon trap happens. Returns true
// if this thread changed the state of the nmethod or false if
// another thread performed the transition.
- bool make_not_entrant() { return make_not_entrant_or_zombie(not_entrant); }
- bool make_zombie() { return make_not_entrant_or_zombie(zombie); }
+ bool make_not_entrant() { return make_not_entrant_or_zombie(not_entrant); }
+ bool make_zombie() { return make_not_entrant_or_zombie(zombie); }
// used by jvmti to track if the unload event has been reported
bool unload_reported() { return _unload_reported; }
@@ -437,9 +446,6 @@
bool has_method_handle_invokes() const { return _has_method_handle_invokes; }
void set_has_method_handle_invokes(bool z) { _has_method_handle_invokes = z; }
- bool is_speculatively_disconnected() const { return _speculatively_disconnected; }
- void set_speculatively_disconnected(bool z) { _speculatively_disconnected = z; }
-
bool is_lazy_critical_native() const { return _lazy_critical_native; }
void set_lazy_critical_native(bool z) { _lazy_critical_native = z; }
@@ -499,9 +505,6 @@
nmethod* scavenge_root_link() const { return _scavenge_root_link; }
void set_scavenge_root_link(nmethod *n) { _scavenge_root_link = n; }
- nmethod* saved_nmethod_link() const { return _saved_nmethod_link; }
- void set_saved_nmethod_link(nmethod *n) { _saved_nmethod_link = n; }
-
public:
// Sweeper support
--- a/hotspot/src/share/vm/code/vtableStubs.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/code/vtableStubs.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -46,12 +46,9 @@
address VtableStub::_chunk_end = NULL;
VMReg VtableStub::_receiver_location = VMRegImpl::Bad();
-static int num_vtable_chunks = 0;
-
void* VtableStub::operator new(size_t size, int code_size) throw() {
assert(size == sizeof(VtableStub), "mismatched size");
- num_vtable_chunks++;
// compute real VtableStub size (rounded to nearest word)
const int real_size = round_to(code_size + sizeof(VtableStub), wordSize);
// malloc them in chunks to minimize header overhead
@@ -60,7 +57,7 @@
const int bytes = chunk_factor * real_size + pd_code_alignment();
BufferBlob* blob = BufferBlob::create("vtable chunks", bytes);
if (blob == NULL) {
- vm_exit_out_of_memory(bytes, OOM_MALLOC_ERROR, "CodeCache: no room for vtable chunks");
+ return NULL;
}
_chunk = blob->content_begin();
_chunk_end = _chunk + bytes;
@@ -121,6 +118,12 @@
} else {
s = create_itable_stub(vtable_index);
}
+
+ // Creation of vtable or itable can fail if there is not enough free space in the code cache.
+ if (s == NULL) {
+ return NULL;
+ }
+
enter(is_vtable_stub, vtable_index, s);
if (PrintAdapterHandlers) {
tty->print_cr("Decoding VtableStub %s[%d]@%d",
--- a/hotspot/src/share/vm/compiler/compileBroker.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/compiler/compileBroker.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -634,19 +634,36 @@
NMethodSweeper::possibly_sweep();
MutexLocker locker(lock());
- // Wait for an available CompileTask.
+ // If _first is NULL we have no more compile jobs. There are two reasons for
+ // having no compile jobs: First, we compiled everything we wanted. Second,
+ // we ran out of code cache so compilation has been disabled. In the latter
+ // case we perform code cache sweeps to free memory such that we can re-enable
+ // compilation.
while (_first == NULL) {
- // There is no work to be done right now. Wait.
- if (UseCodeCacheFlushing && (!CompileBroker::should_compile_new_jobs() || CodeCache::needs_flushing())) {
- // During the emergency sweeping periods, wake up and sweep occasionally
- bool timedout = lock()->wait(!Mutex::_no_safepoint_check_flag, NmethodSweepCheckInterval*1000);
- if (timedout) {
+ if (UseCodeCacheFlushing && !CompileBroker::should_compile_new_jobs()) {
+ // Wait a certain amount of time to possibly do another sweep.
+ // We must wait until stack scanning has happened so that we can
+ // transition a method's state from 'not_entrant' to 'zombie'.
+ long wait_time = NmethodSweepCheckInterval * 1000;
+ if (FLAG_IS_DEFAULT(NmethodSweepCheckInterval)) {
+ // Only one thread at a time can do sweeping. Scale the
+ // wait time according to the number of compiler threads.
+ // As a result, the next sweep is likely to happen every 100ms
+ // with an arbitrary number of threads that do sweeping.
+ wait_time = 100 * CICompilerCount;
+ }
+ bool timeout = lock()->wait(!Mutex::_no_safepoint_check_flag, wait_time);
+ if (timeout) {
MutexUnlocker ul(lock());
- // When otherwise not busy, run nmethod sweeping
NMethodSweeper::possibly_sweep();
}
} else {
- // During normal operation no need to wake up on timer
+ // If there are no compilation tasks and we can compile new jobs
+ // (i.e., there is enough free space in the code cache) there is
+ // no need to invoke the sweeper. As a result, the hotness of methods
+ // remains unchanged. This behavior is desired, since we want to keep
+ // the stable state, i.e., we do not want to evict methods from the
+ // code cache if it is unnecessary.
lock()->wait();
}
}
@@ -1227,16 +1244,9 @@
return method_code;
}
}
- if (method->is_not_compilable(comp_level)) return NULL;
-
- if (UseCodeCacheFlushing) {
- nmethod* saved = CodeCache::reanimate_saved_code(method());
- if (saved != NULL) {
- method->set_code(method, saved);
- return saved;
- }
+ if (method->is_not_compilable(comp_level)) {
+ return NULL;
}
-
} else {
// osr compilation
#ifndef TIERED
@@ -1585,9 +1595,6 @@
if (CodeCache::unallocated_capacity() < CodeCacheMinimumFreeSpace) {
// the code cache is really full
handle_full_code_cache();
- } else if (UseCodeCacheFlushing && CodeCache::needs_flushing()) {
- // Attempt to start cleaning the code cache while there is still a little headroom
- NMethodSweeper::handle_full_code_cache(false);
}
CompileTask* task = queue->get();
@@ -1943,7 +1950,11 @@
}
#endif
if (UseCodeCacheFlushing) {
- NMethodSweeper::handle_full_code_cache(true);
+ // Since code cache is full, immediately stop new compiles
+ if (CompileBroker::set_should_compile_new_jobs(CompileBroker::stop_compilation)) {
+ NMethodSweeper::log_sweep("disable_compiler");
+ NMethodSweeper::possibly_sweep();
+ }
} else {
UseCompiler = false;
AlwaysCompileLoopMethods = false;
--- a/hotspot/src/share/vm/compiler/oopMap.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/compiler/oopMap.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -628,7 +628,7 @@
// Returns value of location as an int
-intptr_t value_of_loc(oop *pointer) { return (intptr_t)(*pointer); }
+intptr_t value_of_loc(oop *pointer) { return cast_from_oop<intptr_t>((*pointer)); }
void DerivedPointerTable::add(oop *derived_loc, oop *base_loc) {
--- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -9065,7 +9065,7 @@
return !stack->isEmpty();
}
-#define BUSY (oop(0x1aff1aff))
+#define BUSY (cast_to_oop<intptr_t>(0x1aff1aff))
// (MT-safe) Get a prefix of at most "num" from the list.
// The overflow list is chained through the mark word of
// each object in the list. We fetch the entire list,
@@ -9098,7 +9098,7 @@
return false;
}
// Grab the entire list; we'll put back a suffix
- oop prefix = (oop)Atomic::xchg_ptr(BUSY, &_overflow_list);
+ oop prefix = cast_to_oop(Atomic::xchg_ptr(BUSY, &_overflow_list));
Thread* tid = Thread::current();
// Before "no_of_gc_threads" was introduced CMSOverflowSpinCount was
// set to ParallelGCThreads.
@@ -9113,7 +9113,7 @@
return false;
} else if (_overflow_list != BUSY) {
// Try and grab the prefix
- prefix = (oop)Atomic::xchg_ptr(BUSY, &_overflow_list);
+ prefix = cast_to_oop(Atomic::xchg_ptr(BUSY, &_overflow_list));
}
}
// If the list was found to be empty, or we spun long
--- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -2694,7 +2694,7 @@
if (print_it) {
_out->print_cr(" "PTR_FORMAT"%s",
- o, (over_tams) ? " >" : (marked) ? " M" : "");
+ (void *)o, (over_tams) ? " >" : (marked) ? " M" : "");
PrintReachableOopClosure oopCl(_out, _vo, _all);
o->oop_iterate_no_header(&oopCl);
}
--- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.inline.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.inline.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -81,7 +81,7 @@
size_t* marked_bytes_array,
BitMap* task_card_bm) {
G1CollectedHeap* g1h = _g1h;
- CardTableModRefBS* ct_bs = (CardTableModRefBS*) (g1h->barrier_set());
+ CardTableModRefBS* ct_bs = g1h->g1_barrier_set();
HeapWord* start = mr.start();
HeapWord* end = mr.end();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1BiasedArray.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,141 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+#include "precompiled.hpp"
+#include "gc_implementation/g1/g1BiasedArray.hpp"
+
+#ifndef PRODUCT
+void G1BiasedMappedArrayBase::verify_index(idx_t index) const {
+ guarantee(_base != NULL, "Array not initialized");
+ guarantee(index < length(), err_msg("Index out of bounds index: "SIZE_FORMAT" length: "SIZE_FORMAT, index, length()));
+}
+
+void G1BiasedMappedArrayBase::verify_biased_index(idx_t biased_index) const {
+ guarantee(_biased_base != NULL, "Array not initialized");
+ guarantee(biased_index >= bias() && biased_index < (bias() + length()),
+ err_msg("Biased index out of bounds, index: "SIZE_FORMAT" bias: "SIZE_FORMAT" length: "SIZE_FORMAT, biased_index, bias(), length()));
+}
+
+void G1BiasedMappedArrayBase::verify_biased_index_inclusive_end(idx_t biased_index) const {
+ guarantee(_biased_base != NULL, "Array not initialized");
+ guarantee(biased_index >= bias() && biased_index <= (bias() + length()),
+ err_msg("Biased index out of inclusive bounds, index: "SIZE_FORMAT" bias: "SIZE_FORMAT" length: "SIZE_FORMAT, biased_index, bias(), length()));
+}
+
+class TestMappedArray : public G1BiasedMappedArray<int> {
+protected:
+ virtual int default_value() const { return 0xBAADBABE; }
+public:
+ static void test_biasedarray() {
+ const size_t REGION_SIZE_IN_WORDS = 512;
+ const size_t NUM_REGIONS = 20;
+ HeapWord* fake_heap = (HeapWord*)LP64_ONLY(0xBAAA00000) NOT_LP64(0xBA000000); // Any value that is non-zero
+
+ TestMappedArray array;
+ array.initialize(fake_heap, fake_heap + REGION_SIZE_IN_WORDS * NUM_REGIONS,
+ REGION_SIZE_IN_WORDS * HeapWordSize);
+ // Check address calculation (bounds)
+ assert(array.bottom_address_mapped() == fake_heap,
+ err_msg("bottom mapped address should be "PTR_FORMAT", but is "PTR_FORMAT, fake_heap, array.bottom_address_mapped()));
+ assert(array.end_address_mapped() == (fake_heap + REGION_SIZE_IN_WORDS * NUM_REGIONS), "must be");
+
+ int* bottom = array.address_mapped_to(fake_heap);
+ assert((void*)bottom == (void*) array.base(), "must be");
+ int* end = array.address_mapped_to(fake_heap + REGION_SIZE_IN_WORDS * NUM_REGIONS);
+ assert((void*)end == (void*)(array.base() + array.length()), "must be");
+ // The entire array should contain default value elements
+ for (int* current = bottom; current < end; current++) {
+ assert(*current == array.default_value(), "must be");
+ }
+
+ // Test setting values in the table
+
+ HeapWord* region_start_address = fake_heap + REGION_SIZE_IN_WORDS * (NUM_REGIONS / 2);
+ HeapWord* region_end_address = fake_heap + (REGION_SIZE_IN_WORDS * (NUM_REGIONS / 2) + REGION_SIZE_IN_WORDS - 1);
+
+ // Set/get by address tests: invert some value; first retrieve one
+ int actual_value = array.get_by_index(NUM_REGIONS / 2);
+ array.set_by_index(NUM_REGIONS / 2, ~actual_value);
+ // Get the same value by address, should correspond to the start of the "region"
+ int value = array.get_by_address(region_start_address);
+ assert(value == ~actual_value, "must be");
+ // Get the same value by address, at one HeapWord before the start
+ value = array.get_by_address(region_start_address - 1);
+ assert(value == array.default_value(), "must be");
+ // Get the same value by address, at the end of the "region"
+ value = array.get_by_address(region_end_address);
+ assert(value == ~actual_value, "must be");
+ // Make sure the next value maps to another index
+ value = array.get_by_address(region_end_address + 1);
+ assert(value == array.default_value(), "must be");
+
+ // Reset the value in the array
+ array.set_by_address(region_start_address + (region_end_address - region_start_address) / 2, actual_value);
+
+ // The entire array should have the default value again
+ for (int* current = bottom; current < end; current++) {
+ assert(*current == array.default_value(), "must be");
+ }
+
+ // Set/get by index tests: invert some value
+ idx_t index = NUM_REGIONS / 2;
+ actual_value = array.get_by_index(index);
+ array.set_by_index(index, ~actual_value);
+
+ value = array.get_by_index(index);
+ assert(value == ~actual_value, "must be");
+
+ value = array.get_by_index(index - 1);
+ assert(value == array.default_value(), "must be");
+
+ value = array.get_by_index(index + 1);
+ assert(value == array.default_value(), "must be");
+
+ array.set_by_index(0, 0);
+ value = array.get_by_index(0);
+ assert(value == 0, "must be");
+
+ array.set_by_index(array.length() - 1, 0);
+ value = array.get_by_index(array.length() - 1);
+ assert(value == 0, "must be");
+
+ array.set_by_index(index, 0);
+
+ // The array should have three zeros, and default values otherwise
+ size_t num_zeros = 0;
+ for (int* current = bottom; current < end; current++) {
+ assert(*current == array.default_value() || *current == 0, "must be");
+ if (*current == 0) {
+ num_zeros++;
+ }
+ }
+ assert(num_zeros == 3, "must be");
+ }
+};
+
+void TestG1BiasedArray_test() {
+ TestMappedArray::test_biasedarray();
+}
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1BiasedArray.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,181 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1BIASEDARRAY_HPP
+#define SHARE_VM_GC_IMPLEMENTATION_G1_G1BIASEDARRAY_HPP
+
+#include "utilities/debug.hpp"
+#include "memory/allocation.inline.hpp"
+
+// Implements the common base functionality for arrays that contain provisions
+// for accessing its elements using a biased index.
+// The element type is defined by the instantiating the template.
+class G1BiasedMappedArrayBase VALUE_OBJ_CLASS_SPEC {
+ friend class VMStructs;
+public:
+ typedef size_t idx_t;
+protected:
+ address _base; // the real base address
+ size_t _length; // the length of the array
+ address _biased_base; // base address biased by "bias" elements
+ size_t _bias; // the bias, i.e. the offset biased_base is located to the right in elements
+ uint _shift_by; // the amount of bits to shift right when mapping to an index of the array.
+
+protected:
+
+ G1BiasedMappedArrayBase() : _base(NULL), _length(0), _biased_base(NULL),
+ _bias(0), _shift_by(0) { }
+
+ // Allocate a new array, generic version.
+ static address create_new_base_array(size_t length, size_t elem_size) {
+ assert(length > 0, "just checking");
+ assert(elem_size > 0, "just checking");
+ return NEW_C_HEAP_ARRAY(u_char, length * elem_size, mtGC);
+ }
+
+ // Initialize the members of this class. The biased start address of this array
+ // is the bias (in elements) multiplied by the element size.
+ void initialize_base(address base, size_t length, size_t bias, size_t elem_size, uint shift_by) {
+ assert(base != NULL, "just checking");
+ assert(length > 0, "just checking");
+ assert(shift_by < sizeof(uintptr_t) * 8, err_msg("Shifting by %zd, larger than word size?", shift_by));
+ _base = base;
+ _length = length;
+ _biased_base = base - (bias * elem_size);
+ _bias = bias;
+ _shift_by = shift_by;
+ }
+
+ // Allocate and initialize this array to cover the heap addresses in the range
+ // of [bottom, end).
+ void initialize(HeapWord* bottom, HeapWord* end, size_t target_elem_size_in_bytes, size_t mapping_granularity_in_bytes) {
+ assert(mapping_granularity_in_bytes > 0, "just checking");
+ assert(is_power_of_2(mapping_granularity_in_bytes),
+ err_msg("mapping granularity must be power of 2, is %zd", mapping_granularity_in_bytes));
+ assert((uintptr_t)bottom % mapping_granularity_in_bytes == 0,
+ err_msg("bottom mapping area address must be a multiple of mapping granularity %zd, is "PTR_FORMAT,
+ mapping_granularity_in_bytes, bottom));
+ assert((uintptr_t)end % mapping_granularity_in_bytes == 0,
+ err_msg("end mapping area address must be a multiple of mapping granularity %zd, is "PTR_FORMAT,
+ mapping_granularity_in_bytes, end));
+ size_t num_target_elems = (end - bottom) / (mapping_granularity_in_bytes / HeapWordSize);
+ idx_t bias = (uintptr_t)bottom / mapping_granularity_in_bytes;
+ address base = create_new_base_array(num_target_elems, target_elem_size_in_bytes);
+ initialize_base(base, num_target_elems, bias, target_elem_size_in_bytes, log2_intptr(mapping_granularity_in_bytes));
+ }
+
+ size_t bias() const { return _bias; }
+ uint shift_by() const { return _shift_by; }
+
+ void verify_index(idx_t index) const PRODUCT_RETURN;
+ void verify_biased_index(idx_t biased_index) const PRODUCT_RETURN;
+ void verify_biased_index_inclusive_end(idx_t biased_index) const PRODUCT_RETURN;
+
+public:
+ // Return the length of the array in elements.
+ size_t length() const { return _length; }
+};
+
+// Array that provides biased access and mapping from (valid) addresses in the
+// heap into this array.
+template<class T>
+class G1BiasedMappedArray : public G1BiasedMappedArrayBase {
+public:
+ typedef G1BiasedMappedArrayBase::idx_t idx_t;
+
+ T* base() const { return (T*)G1BiasedMappedArrayBase::_base; }
+ // Return the element of the given array at the given index. Assume
+ // the index is valid. This is a convenience method that does sanity
+ // checking on the index.
+ T get_by_index(idx_t index) const {
+ verify_index(index);
+ return this->base()[index];
+ }
+
+ // Set the element of the given array at the given index to the
+ // given value. Assume the index is valid. This is a convenience
+ // method that does sanity checking on the index.
+ void set_by_index(idx_t index, T value) {
+ verify_index(index);
+ this->base()[index] = value;
+ }
+
+ // The raw biased base pointer.
+ T* biased_base() const { return (T*)G1BiasedMappedArrayBase::_biased_base; }
+
+ // Return the element of the given array that covers the given word in the
+ // heap. Assumes the index is valid.
+ T get_by_address(HeapWord* value) const {
+ idx_t biased_index = ((uintptr_t)value) >> this->shift_by();
+ this->verify_biased_index(biased_index);
+ return biased_base()[biased_index];
+ }
+
+ // Set the value of the array entry that corresponds to the given array.
+ void set_by_address(HeapWord * address, T value) {
+ idx_t biased_index = ((uintptr_t)address) >> this->shift_by();
+ this->verify_biased_index(biased_index);
+ biased_base()[biased_index] = value;
+ }
+
+protected:
+ // Returns the address of the element the given address maps to
+ T* address_mapped_to(HeapWord* address) {
+ idx_t biased_index = ((uintptr_t)address) >> this->shift_by();
+ this->verify_biased_index_inclusive_end(biased_index);
+ return biased_base() + biased_index;
+ }
+
+public:
+ // Return the smallest address (inclusive) in the heap that this array covers.
+ HeapWord* bottom_address_mapped() const {
+ return (HeapWord*) ((uintptr_t)this->bias() << this->shift_by());
+ }
+
+ // Return the highest address (exclusive) in the heap that this array covers.
+ HeapWord* end_address_mapped() const {
+ return (HeapWord*) ((uintptr_t)(this->bias() + this->length()) << this->shift_by());
+ }
+
+protected:
+ virtual T default_value() const = 0;
+ // Set all elements of the given array to the given value.
+ void clear() {
+ T value = default_value();
+ for (idx_t i = 0; i < length(); i++) {
+ set_by_index(i, value);
+ }
+ }
+public:
+ G1BiasedMappedArray() {}
+
+ // Allocate and initialize this array to cover the heap addresses in the range
+ // of [bottom, end).
+ void initialize(HeapWord* bottom, HeapWord* end, size_t mapping_granularity) {
+ G1BiasedMappedArrayBase::initialize(bottom, end, sizeof(T), mapping_granularity);
+ this->clear();
+ }
+};
+
+#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1BIASEDARRAY_HPP
--- a/hotspot/src/share/vm/gc_implementation/g1/g1CardCounts.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1CardCounts.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -65,9 +65,7 @@
// threshold limit is no more than this.
guarantee(G1ConcRSHotCardLimit <= max_jubyte, "sanity");
- ModRefBarrierSet* bs = _g1h->mr_bs();
- guarantee(bs->is_a(BarrierSet::CardTableModRef), "Precondition");
- _ct_bs = (CardTableModRefBS*)bs;
+ _ct_bs = _g1h->g1_barrier_set();
_ct_bot = _ct_bs->byte_for_const(_g1h->reserved_region().start());
// Allocate/Reserve the counts table
--- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -125,10 +125,8 @@
int _histo[256];
public:
ClearLoggedCardTableEntryClosure() :
- _calls(0)
+ _calls(0), _g1h(G1CollectedHeap::heap()), _ctbs(_g1h->g1_barrier_set())
{
- _g1h = G1CollectedHeap::heap();
- _ctbs = (CardTableModRefBS*)_g1h->barrier_set();
for (int i = 0; i < 256; i++) _histo[i] = 0;
}
bool do_card_ptr(jbyte* card_ptr, int worker_i) {
@@ -158,11 +156,8 @@
CardTableModRefBS* _ctbs;
public:
RedirtyLoggedCardTableEntryClosure() :
- _calls(0)
- {
- _g1h = G1CollectedHeap::heap();
- _ctbs = (CardTableModRefBS*)_g1h->barrier_set();
- }
+ _calls(0), _g1h(G1CollectedHeap::heap()), _ctbs(_g1h->g1_barrier_set()) {}
+
bool do_card_ptr(jbyte* card_ptr, int worker_i) {
if (_g1h->is_in_reserved(_ctbs->addr_for(card_ptr))) {
_calls++;
@@ -478,7 +473,7 @@
void G1CollectedHeap::check_ct_logs_at_safepoint() {
DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set();
- CardTableModRefBS* ct_bs = (CardTableModRefBS*)barrier_set();
+ CardTableModRefBS* ct_bs = g1_barrier_set();
// Count the dirty cards at the start.
CountNonCleanMemRegionClosure count1(this);
@@ -1205,7 +1200,7 @@
};
void G1CollectedHeap::clear_rsets_post_compaction() {
- PostMCRemSetClearClosure rs_clear(this, mr_bs());
+ PostMCRemSetClearClosure rs_clear(this, g1_barrier_set());
heap_region_iterate(&rs_clear);
}
@@ -1777,7 +1772,6 @@
}
bool G1CollectedHeap::expand(size_t expand_bytes) {
- size_t old_mem_size = _g1_storage.committed_size();
size_t aligned_expand_bytes = ReservedSpace::page_align_size_up(expand_bytes);
aligned_expand_bytes = align_size_up(aligned_expand_bytes,
HeapRegion::GrainBytes);
@@ -1787,6 +1781,13 @@
ergo_format_byte("attempted expansion amount"),
expand_bytes, aligned_expand_bytes);
+ if (_g1_storage.uncommitted_size() == 0) {
+ ergo_verbose0(ErgoHeapSizing,
+ "did not expand the heap",
+ ergo_format_reason("heap already fully expanded"));
+ return false;
+ }
+
// First commit the memory.
HeapWord* old_end = (HeapWord*) _g1_storage.high();
bool successful = _g1_storage.expand_by(aligned_expand_bytes);
@@ -1845,7 +1846,6 @@
}
void G1CollectedHeap::shrink_helper(size_t shrink_bytes) {
- size_t old_mem_size = _g1_storage.committed_size();
size_t aligned_shrink_bytes =
ReservedSpace::page_align_size_down(shrink_bytes);
aligned_shrink_bytes = align_size_down(aligned_shrink_bytes,
@@ -2045,20 +2045,13 @@
// Create the gen rem set (and barrier set) for the entire reserved region.
_rem_set = collector_policy()->create_rem_set(_reserved, 2);
set_barrier_set(rem_set()->bs());
- if (barrier_set()->is_a(BarrierSet::ModRef)) {
- _mr_bs = (ModRefBarrierSet*)_barrier_set;
- } else {
- vm_exit_during_initialization("G1 requires a mod ref bs.");
+ if (!barrier_set()->is_a(BarrierSet::G1SATBCTLogging)) {
+ vm_exit_during_initialization("G1 requires a G1SATBLoggingCardTableModRefBS");
return JNI_ENOMEM;
}
// Also create a G1 rem set.
- if (mr_bs()->is_a(BarrierSet::CardTableModRef)) {
- _g1_rem_set = new G1RemSet(this, (CardTableModRefBS*)mr_bs());
- } else {
- vm_exit_during_initialization("G1 requires a cardtable mod ref bs.");
- return JNI_ENOMEM;
- }
+ _g1_rem_set = new G1RemSet(this, g1_barrier_set());
// Carve out the G1 part of the heap.
@@ -2069,8 +2062,10 @@
_g1_storage.initialize(g1_rs, 0);
_g1_committed = MemRegion((HeapWord*)_g1_storage.low(), (size_t) 0);
_hrs.initialize((HeapWord*) _g1_reserved.start(),
- (HeapWord*) _g1_reserved.end(),
- _expansion_regions);
+ (HeapWord*) _g1_reserved.end());
+ assert(_hrs.max_length() == _expansion_regions,
+ err_msg("max length: %u expansion regions: %u",
+ _hrs.max_length(), _expansion_regions));
// Do later initialization work for concurrent refinement.
_cg1r->init();
@@ -3679,6 +3674,11 @@
assert(InlineCacheBuffer::is_empty(), "should have cleaned up ICBuffer");
// Fill TLAB's and such
ensure_parsability(true);
+
+ if (G1SummarizeRSetStats && (G1SummarizeRSetStatsPeriod > 0) &&
+ (total_collections() % G1SummarizeRSetStatsPeriod == 0)) {
+ g1_rem_set()->print_periodic_summary_info("Before GC RS summary");
+ }
}
void G1CollectedHeap::gc_epilogue(bool full /* Ignored */) {
@@ -3687,7 +3687,7 @@
(G1SummarizeRSetStatsPeriod > 0) &&
// we are at the end of the GC. Total collections has already been increased.
((total_collections() - 1) % G1SummarizeRSetStatsPeriod == 0)) {
- g1_rem_set()->print_periodic_summary_info();
+ g1_rem_set()->print_periodic_summary_info("After GC RS summary");
}
// FIXME: what is this about?
@@ -4548,7 +4548,7 @@
: _g1h(g1h),
_refs(g1h->task_queue(queue_num)),
_dcq(&g1h->dirty_card_queue_set()),
- _ct_bs((CardTableModRefBS*)_g1h->barrier_set()),
+ _ct_bs(g1h->g1_barrier_set()),
_g1_rem(g1h->g1_rem_set()),
_hash_seed(17), _queue_num(queue_num),
_term_attempts(0),
@@ -4615,7 +4615,7 @@
assert(!has_partial_array_mask(ref), err_msg("ref=" PTR_FORMAT, ref));
oop p = oopDesc::load_decode_heap_oop(ref);
assert(_g1h->is_in_g1_reserved(p),
- err_msg("ref=" PTR_FORMAT " p=" PTR_FORMAT, ref, intptr_t(p)));
+ err_msg("ref=" PTR_FORMAT " p=" PTR_FORMAT, ref, (void *)p));
return true;
}
@@ -4625,11 +4625,11 @@
// Must be in the collection set--it's already been copied.
oop p = clear_partial_array_mask(ref);
assert(_g1h->obj_in_cs(p),
- err_msg("ref=" PTR_FORMAT " p=" PTR_FORMAT, ref, intptr_t(p)));
+ err_msg("ref=" PTR_FORMAT " p=" PTR_FORMAT, ref, (void *)p));
} else {
oop p = oopDesc::load_decode_heap_oop(ref);
assert(_g1h->is_in_g1_reserved(p),
- err_msg("ref=" PTR_FORMAT " p=" PTR_FORMAT, ref, intptr_t(p)));
+ err_msg("ref=" PTR_FORMAT " p=" PTR_FORMAT, ref, (void *)p));
}
return true;
}
@@ -5977,11 +5977,11 @@
}
class G1ParCleanupCTTask : public AbstractGangTask {
- CardTableModRefBS* _ct_bs;
+ G1SATBCardTableModRefBS* _ct_bs;
G1CollectedHeap* _g1h;
HeapRegion* volatile _su_head;
public:
- G1ParCleanupCTTask(CardTableModRefBS* ct_bs,
+ G1ParCleanupCTTask(G1SATBCardTableModRefBS* ct_bs,
G1CollectedHeap* g1h) :
AbstractGangTask("G1 Par Cleanup CT Task"),
_ct_bs(ct_bs), _g1h(g1h) { }
@@ -6004,9 +6004,9 @@
#ifndef PRODUCT
class G1VerifyCardTableCleanup: public HeapRegionClosure {
G1CollectedHeap* _g1h;
- CardTableModRefBS* _ct_bs;
+ G1SATBCardTableModRefBS* _ct_bs;
public:
- G1VerifyCardTableCleanup(G1CollectedHeap* g1h, CardTableModRefBS* ct_bs)
+ G1VerifyCardTableCleanup(G1CollectedHeap* g1h, G1SATBCardTableModRefBS* ct_bs)
: _g1h(g1h), _ct_bs(ct_bs) { }
virtual bool doHeapRegion(HeapRegion* r) {
if (r->is_survivor()) {
@@ -6020,7 +6020,7 @@
void G1CollectedHeap::verify_not_dirty_region(HeapRegion* hr) {
// All of the region should be clean.
- CardTableModRefBS* ct_bs = (CardTableModRefBS*)barrier_set();
+ G1SATBCardTableModRefBS* ct_bs = g1_barrier_set();
MemRegion mr(hr->bottom(), hr->end());
ct_bs->verify_not_dirty_region(mr);
}
@@ -6033,13 +6033,13 @@
// not dirty that area (one less thing to have to do while holding
// a lock). So we can only verify that [bottom(),pre_dummy_top()]
// is dirty.
- CardTableModRefBS* ct_bs = (CardTableModRefBS*) barrier_set();
+ G1SATBCardTableModRefBS* ct_bs = g1_barrier_set();
MemRegion mr(hr->bottom(), hr->pre_dummy_top());
ct_bs->verify_dirty_region(mr);
}
void G1CollectedHeap::verify_dirty_young_list(HeapRegion* head) {
- CardTableModRefBS* ct_bs = (CardTableModRefBS*) barrier_set();
+ G1SATBCardTableModRefBS* ct_bs = g1_barrier_set();
for (HeapRegion* hr = head; hr != NULL; hr = hr->get_next_young_region()) {
verify_dirty_region(hr);
}
@@ -6051,7 +6051,7 @@
#endif
void G1CollectedHeap::cleanUpCardTable() {
- CardTableModRefBS* ct_bs = (CardTableModRefBS*) (barrier_set());
+ G1SATBCardTableModRefBS* ct_bs = g1_barrier_set();
double start = os::elapsedTime();
{
--- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -31,6 +31,7 @@
#include "gc_implementation/g1/g1HRPrinter.hpp"
#include "gc_implementation/g1/g1MonitoringSupport.hpp"
#include "gc_implementation/g1/g1RemSet.hpp"
+#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp"
#include "gc_implementation/g1/g1YCTypes.hpp"
#include "gc_implementation/g1/heapRegionSeq.hpp"
#include "gc_implementation/g1/heapRegionSets.hpp"
@@ -703,7 +704,7 @@
if (_g1_committed.contains((HeapWord*) obj)) {
// no need to subtract the bottom of the heap from obj,
// _in_cset_fast_test is biased
- uintx index = (uintx) obj >> HeapRegion::LogOfHRGrainBytes;
+ uintx index = cast_from_oop<uintx>(obj) >> HeapRegion::LogOfHRGrainBytes;
bool ret = _in_cset_fast_test[index];
// let's make sure the result is consistent with what the slower
// test returns
@@ -791,8 +792,6 @@
// The g1 remembered set of the heap.
G1RemSet* _g1_rem_set;
- // And it's mod ref barrier set, used to track updates for the above.
- ModRefBarrierSet* _mr_bs;
// A set of cards that cover the objects for which the Rsets should be updated
// concurrently after the collection.
@@ -1127,7 +1126,6 @@
// The rem set and barrier set.
G1RemSet* g1_rem_set() const { return _g1_rem_set; }
- ModRefBarrierSet* mr_bs() const { return _mr_bs; }
unsigned get_gc_time_stamp() {
return _gc_time_stamp;
@@ -1346,6 +1344,10 @@
virtual bool is_in_closed_subset(const void* p) const;
+ G1SATBCardTableModRefBS* g1_barrier_set() {
+ return (G1SATBCardTableModRefBS*) barrier_set();
+ }
+
// This resets the card table to all zeros. It is used after
// a collection pause which used the card table to claim cards.
void cleanUpCardTable();
@@ -1875,7 +1877,7 @@
G1CollectedHeap* _g1h;
RefToScanQueue* _refs;
DirtyCardQueue _dcq;
- CardTableModRefBS* _ct_bs;
+ G1SATBCardTableModRefBS* _ct_bs;
G1RemSet* _g1_rem;
G1ParGCAllocBufferContainer _surviving_alloc_buffer;
@@ -1914,7 +1916,7 @@
void add_to_undo_waste(size_t waste) { _undo_waste += waste; }
DirtyCardQueue& dirty_card_queue() { return _dcq; }
- CardTableModRefBS* ctbs() { return _ct_bs; }
+ G1SATBCardTableModRefBS* ctbs() { return _ct_bs; }
template <class T> void immediate_rs_update(HeapRegion* from, T* p, int tid) {
if (!from->is_survivor()) {
--- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.inline.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.inline.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -134,7 +134,7 @@
assert(containing_hr->is_in(end - 1), "it should also contain end - 1");
MemRegion mr(start, end);
- ((CardTableModRefBS*)_g1h->barrier_set())->dirty(mr);
+ g1_barrier_set()->dirty(mr);
}
inline RefToScanQueue* G1CollectedHeap::task_queue(int i) const {
--- a/hotspot/src/share/vm/gc_implementation/g1/g1EvacFailure.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1EvacFailure.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -41,11 +41,11 @@
private:
G1CollectedHeap* _g1;
DirtyCardQueue *_dcq;
- CardTableModRefBS* _ct_bs;
+ G1SATBCardTableModRefBS* _ct_bs;
public:
UpdateRSetDeferred(G1CollectedHeap* g1, DirtyCardQueue* dcq) :
- _g1(g1), _ct_bs((CardTableModRefBS*)_g1->barrier_set()), _dcq(dcq) {}
+ _g1(g1), _ct_bs(_g1->g1_barrier_set()), _dcq(dcq) {}
virtual void do_oop(narrowOop* p) { do_oop_work(p); }
virtual void do_oop( oop* p) { do_oop_work(p); }
--- a/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -220,7 +220,7 @@
public:
G1PrepareCompactClosure(CompactibleSpace* cs)
: _g1h(G1CollectedHeap::heap()),
- _mrbs(G1CollectedHeap::heap()->mr_bs()),
+ _mrbs(_g1h->g1_barrier_set()),
_cp(NULL, cs, cs->initialize_threshold()),
_humongous_proxy_set("G1MarkSweep Humongous Proxy Set") { }
--- a/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -91,12 +91,12 @@
}
template <class T> inline T* set_partial_array_mask(T obj) {
- assert(((uintptr_t)obj & G1_PARTIAL_ARRAY_MASK) == 0, "Information loss!");
- return (T*) ((uintptr_t)obj | G1_PARTIAL_ARRAY_MASK);
+ assert(((uintptr_t)(void *)obj & G1_PARTIAL_ARRAY_MASK) == 0, "Information loss!");
+ return (T*) ((uintptr_t)(void *)obj | G1_PARTIAL_ARRAY_MASK);
}
template <class T> inline oop clear_partial_array_mask(T* ref) {
- return oop((intptr_t)ref & ~G1_PARTIAL_ARRAY_MASK);
+ return cast_to_oop((intptr_t)ref & ~G1_PARTIAL_ARRAY_MASK);
}
class G1ParScanPartialArrayClosure : public G1ParClosureSuper {
--- a/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -83,7 +83,9 @@
for (uint i = 0; i < n_workers(); i++) {
_cset_rs_update_cl[i] = NULL;
}
- _prev_period_summary.initialize(this, n_workers());
+ if (G1SummarizeRSetStats) {
+ _prev_period_summary.initialize(this);
+ }
}
G1RemSet::~G1RemSet() {
@@ -109,7 +111,7 @@
CodeBlobToOopClosure* _code_root_cl;
G1BlockOffsetSharedArray* _bot_shared;
- CardTableModRefBS *_ct_bs;
+ G1SATBCardTableModRefBS *_ct_bs;
double _strong_code_root_scan_time_sec;
int _worker_i;
@@ -130,7 +132,7 @@
{
_g1h = G1CollectedHeap::heap();
_bot_shared = _g1h->bot_shared();
- _ct_bs = (CardTableModRefBS*) (_g1h->barrier_set());
+ _ct_bs = _g1h->g1_barrier_set();
_block_size = MAX2<int>(G1RSetScanBlockSize, 1);
}
@@ -505,12 +507,7 @@
ScrubRSClosure(BitMap* region_bm, BitMap* card_bm) :
_g1h(G1CollectedHeap::heap()),
_region_bm(region_bm), _card_bm(card_bm),
- _ctbs(NULL)
- {
- ModRefBarrierSet* bs = _g1h->mr_bs();
- guarantee(bs->is_a(BarrierSet::CardTableModRef), "Precondition");
- _ctbs = (CardTableModRefBS*)bs;
- }
+ _ctbs(_g1h->g1_barrier_set()) {}
bool doHeapRegion(HeapRegion* r) {
if (!r->continuesHumongous()) {
@@ -731,19 +728,19 @@
return has_refs_into_cset;
}
-void G1RemSet::print_periodic_summary_info() {
+void G1RemSet::print_periodic_summary_info(const char* header) {
G1RemSetSummary current;
- current.initialize(this, n_workers());
+ current.initialize(this);
_prev_period_summary.subtract_from(¤t);
- print_summary_info(&_prev_period_summary);
+ print_summary_info(&_prev_period_summary, header);
_prev_period_summary.set(¤t);
}
void G1RemSet::print_summary_info() {
G1RemSetSummary current;
- current.initialize(this, n_workers());
+ current.initialize(this);
print_summary_info(¤t, " Cumulative RS summary");
}
--- a/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -145,7 +145,7 @@
virtual void print_summary_info();
// Print accumulated summary info from the last time called.
- virtual void print_periodic_summary_info();
+ virtual void print_periodic_summary_info(const char* header);
// Prepare remembered set for verification.
virtual void prepare_for_verify();
--- a/hotspot/src/share/vm/gc_implementation/g1/g1RemSetSummary.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1RemSetSummary.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -77,12 +77,12 @@
return _rs_threads_vtimes[thread];
}
-void G1RemSetSummary::initialize(G1RemSet* remset, uint num_workers) {
+void G1RemSetSummary::initialize(G1RemSet* remset) {
assert(_rs_threads_vtimes == NULL, "just checking");
assert(remset != NULL, "just checking");
_remset = remset;
- _num_vtimes = num_workers;
+ _num_vtimes = ConcurrentG1Refine::thread_num();
_rs_threads_vtimes = NEW_C_HEAP_ARRAY(double, _num_vtimes, mtGC);
memset(_rs_threads_vtimes, 0, sizeof(double) * _num_vtimes);
@@ -125,25 +125,115 @@
_sampling_thread_vtime = other->sampling_thread_vtime() - _sampling_thread_vtime;
}
+static double percent_of(size_t numerator, size_t denominator) {
+ if (denominator != 0) {
+ return (double)numerator / denominator * 100.0f;
+ } else {
+ return 0.0f;
+ }
+}
+
+static size_t round_to_K(size_t value) {
+ return value / K;
+}
+
+class RegionTypeCounter VALUE_OBJ_CLASS_SPEC {
+private:
+ const char* _name;
+
+ size_t _rs_mem_size;
+ size_t _cards_occupied;
+ size_t _amount;
+
+ size_t _code_root_mem_size;
+ size_t _code_root_elems;
+
+ double rs_mem_size_percent_of(size_t total) {
+ return percent_of(_rs_mem_size, total);
+ }
+
+ double cards_occupied_percent_of(size_t total) {
+ return percent_of(_cards_occupied, total);
+ }
+
+ double code_root_mem_size_percent_of(size_t total) {
+ return percent_of(_code_root_mem_size, total);
+ }
+
+ double code_root_elems_percent_of(size_t total) {
+ return percent_of(_code_root_elems, total);
+ }
+
+ size_t amount() const { return _amount; }
+
+public:
+
+ RegionTypeCounter(const char* name) : _name(name), _rs_mem_size(0), _cards_occupied(0),
+ _amount(0), _code_root_mem_size(0), _code_root_elems(0) { }
+
+ void add(size_t rs_mem_size, size_t cards_occupied, size_t code_root_mem_size,
+ size_t code_root_elems) {
+ _rs_mem_size += rs_mem_size;
+ _cards_occupied += cards_occupied;
+ _code_root_mem_size += code_root_mem_size;
+ _code_root_elems += code_root_elems;
+ _amount++;
+ }
+
+ size_t rs_mem_size() const { return _rs_mem_size; }
+ size_t cards_occupied() const { return _cards_occupied; }
+
+ size_t code_root_mem_size() const { return _code_root_mem_size; }
+ size_t code_root_elems() const { return _code_root_elems; }
+
+ void print_rs_mem_info_on(outputStream * out, size_t total) {
+ out->print_cr(" %8dK (%5.1f%%) by %zd %s regions", round_to_K(rs_mem_size()), rs_mem_size_percent_of(total), amount(), _name);
+ }
+
+ void print_cards_occupied_info_on(outputStream * out, size_t total) {
+ out->print_cr(" %8d (%5.1f%%) entries by %zd %s regions", cards_occupied(), cards_occupied_percent_of(total), amount(), _name);
+ }
+
+ void print_code_root_mem_info_on(outputStream * out, size_t total) {
+ out->print_cr(" %8dK (%5.1f%%) by %zd %s regions", round_to_K(code_root_mem_size()), code_root_mem_size_percent_of(total), amount(), _name);
+ }
+
+ void print_code_root_elems_info_on(outputStream * out, size_t total) {
+ out->print_cr(" %8d (%5.1f%%) elements by %zd %s regions", code_root_elems(), code_root_elems_percent_of(total), amount(), _name);
+ }
+};
+
+
class HRRSStatsIter: public HeapRegionClosure {
- size_t _occupied;
+private:
+ RegionTypeCounter _young;
+ RegionTypeCounter _humonguous;
+ RegionTypeCounter _free;
+ RegionTypeCounter _old;
+ RegionTypeCounter _all;
- size_t _total_rs_mem_sz;
size_t _max_rs_mem_sz;
HeapRegion* _max_rs_mem_sz_region;
- size_t _total_code_root_mem_sz;
+ size_t total_rs_mem_sz() const { return _all.rs_mem_size(); }
+ size_t total_cards_occupied() const { return _all.cards_occupied(); }
+
+ size_t max_rs_mem_sz() const { return _max_rs_mem_sz; }
+ HeapRegion* max_rs_mem_sz_region() const { return _max_rs_mem_sz_region; }
+
size_t _max_code_root_mem_sz;
HeapRegion* _max_code_root_mem_sz_region;
+
+ size_t total_code_root_mem_sz() const { return _all.code_root_mem_size(); }
+ size_t total_code_root_elems() const { return _all.code_root_elems(); }
+
+ size_t max_code_root_mem_sz() const { return _max_code_root_mem_sz; }
+ HeapRegion* max_code_root_mem_sz_region() const { return _max_code_root_mem_sz_region; }
+
public:
- HRRSStatsIter() :
- _occupied(0),
- _total_rs_mem_sz(0),
- _max_rs_mem_sz(0),
- _max_rs_mem_sz_region(NULL),
- _total_code_root_mem_sz(0),
- _max_code_root_mem_sz(0),
- _max_code_root_mem_sz_region(NULL)
+ HRRSStatsIter() : _all("All"), _young("Young"), _humonguous("Humonguous"),
+ _free("Free"), _old("Old"), _max_code_root_mem_sz_region(NULL), _max_rs_mem_sz_region(NULL),
+ _max_rs_mem_sz(0), _max_code_root_mem_sz(0)
{}
bool doHeapRegion(HeapRegion* r) {
@@ -156,46 +246,95 @@
_max_rs_mem_sz = rs_mem_sz;
_max_rs_mem_sz_region = r;
}
- _total_rs_mem_sz += rs_mem_sz;
-
+ size_t occupied_cards = hrrs->occupied();
size_t code_root_mem_sz = hrrs->strong_code_roots_mem_size();
- if (code_root_mem_sz > _max_code_root_mem_sz) {
- _max_code_root_mem_sz = code_root_mem_sz;
+ if (code_root_mem_sz > max_code_root_mem_sz()) {
_max_code_root_mem_sz_region = r;
}
- _total_code_root_mem_sz += code_root_mem_sz;
+ size_t code_root_elems = hrrs->strong_code_roots_list_length();
- size_t occ = hrrs->occupied();
- _occupied += occ;
+ RegionTypeCounter* current = NULL;
+ if (r->is_young()) {
+ current = &_young;
+ } else if (r->isHumongous()) {
+ current = &_humonguous;
+ } else if (r->is_empty()) {
+ current = &_free;
+ } else {
+ current = &_old;
+ }
+ current->add(rs_mem_sz, occupied_cards, code_root_mem_sz, code_root_elems);
+ _all.add(rs_mem_sz, occupied_cards, code_root_mem_sz, code_root_elems);
+
return false;
}
- size_t total_rs_mem_sz() { return _total_rs_mem_sz; }
- size_t max_rs_mem_sz() { return _max_rs_mem_sz; }
- HeapRegion* max_rs_mem_sz_region() { return _max_rs_mem_sz_region; }
- size_t total_code_root_mem_sz() { return _total_code_root_mem_sz; }
- size_t max_code_root_mem_sz() { return _max_code_root_mem_sz; }
- HeapRegion* max_code_root_mem_sz_region() { return _max_code_root_mem_sz_region; }
- size_t occupied() { return _occupied; }
+
+ void print_summary_on(outputStream* out) {
+ RegionTypeCounter* counters[] = { &_young, &_humonguous, &_free, &_old, NULL };
+
+ out->print_cr("\n Current rem set statistics");
+ out->print_cr(" Total per region rem sets sizes = "SIZE_FORMAT"K."
+ " Max = "SIZE_FORMAT"K.",
+ round_to_K(total_rs_mem_sz()), round_to_K(max_rs_mem_sz()));
+ for (RegionTypeCounter** current = &counters[0]; *current != NULL; current++) {
+ (*current)->print_rs_mem_info_on(out, total_rs_mem_sz());
+ }
+
+ out->print_cr(" Static structures = "SIZE_FORMAT"K,"
+ " free_lists = "SIZE_FORMAT"K.",
+ round_to_K(HeapRegionRemSet::static_mem_size()),
+ round_to_K(HeapRegionRemSet::fl_mem_size()));
+
+ out->print_cr(" "SIZE_FORMAT" occupied cards represented.",
+ total_cards_occupied());
+ for (RegionTypeCounter** current = &counters[0]; *current != NULL; current++) {
+ (*current)->print_cards_occupied_info_on(out, total_cards_occupied());
+ }
+
+ // Largest sized rem set region statistics
+ HeapRegionRemSet* rem_set = max_rs_mem_sz_region()->rem_set();
+ out->print_cr(" Region with largest rem set = "HR_FORMAT", "
+ "size = "SIZE_FORMAT "K, occupied = "SIZE_FORMAT"K.",
+ HR_FORMAT_PARAMS(max_rs_mem_sz_region()),
+ round_to_K(rem_set->mem_size()),
+ round_to_K(rem_set->occupied()));
+
+ // Strong code root statistics
+ HeapRegionRemSet* max_code_root_rem_set = max_code_root_mem_sz_region()->rem_set();
+ out->print_cr(" Total heap region code root sets sizes = "SIZE_FORMAT"K."
+ " Max = "SIZE_FORMAT"K.",
+ round_to_K(total_code_root_mem_sz()),
+ round_to_K(max_code_root_rem_set->strong_code_roots_mem_size()));
+ for (RegionTypeCounter** current = &counters[0]; *current != NULL; current++) {
+ (*current)->print_code_root_mem_info_on(out, total_code_root_mem_sz());
+ }
+
+ out->print_cr(" "SIZE_FORMAT" code roots represented.",
+ total_code_root_elems());
+ for (RegionTypeCounter** current = &counters[0]; *current != NULL; current++) {
+ (*current)->print_code_root_elems_info_on(out, total_code_root_elems());
+ }
+
+ out->print_cr(" Region with largest amount of code roots = "HR_FORMAT", "
+ "size = "SIZE_FORMAT "K, num_elems = "SIZE_FORMAT".",
+ HR_FORMAT_PARAMS(max_code_root_mem_sz_region()),
+ round_to_K(max_code_root_rem_set->strong_code_roots_mem_size()),
+ round_to_K(max_code_root_rem_set->strong_code_roots_list_length()));
+ }
};
-double calc_percentage(size_t numerator, size_t denominator) {
- if (denominator != 0) {
- return (double)numerator / denominator * 100.0;
- } else {
- return 0.0f;
- }
-}
-
void G1RemSetSummary::print_on(outputStream* out) {
- out->print_cr("\n Concurrent RS processed "SIZE_FORMAT" cards",
+ out->print_cr("\n Recent concurrent refinement statistics");
+ out->print_cr(" Processed "SIZE_FORMAT" cards",
num_concurrent_refined_cards());
out->print_cr(" Of %d completed buffers:", num_processed_buf_total());
out->print_cr(" %8d (%5.1f%%) by concurrent RS threads.",
num_processed_buf_total(),
- calc_percentage(num_processed_buf_rs_threads(), num_processed_buf_total()));
+ percent_of(num_processed_buf_rs_threads(), num_processed_buf_total()));
out->print_cr(" %8d (%5.1f%%) by mutator threads.",
num_processed_buf_mutator(),
- calc_percentage(num_processed_buf_mutator(), num_processed_buf_total()));
+ percent_of(num_processed_buf_mutator(), num_processed_buf_total()));
+ out->print_cr(" Did %d coarsenings.", num_coarsenings());
out->print_cr(" Concurrent RS threads times (s)");
out->print(" ");
for (uint i = 0; i < _num_vtimes; i++) {
@@ -207,33 +346,5 @@
HRRSStatsIter blk;
G1CollectedHeap::heap()->heap_region_iterate(&blk);
- // RemSet stats
- out->print_cr(" Total heap region rem set sizes = "SIZE_FORMAT"K."
- " Max = "SIZE_FORMAT"K.",
- blk.total_rs_mem_sz()/K, blk.max_rs_mem_sz()/K);
- out->print_cr(" Static structures = "SIZE_FORMAT"K,"
- " free_lists = "SIZE_FORMAT"K.",
- HeapRegionRemSet::static_mem_size() / K,
- HeapRegionRemSet::fl_mem_size() / K);
- out->print_cr(" "SIZE_FORMAT" occupied cards represented.",
- blk.occupied());
- HeapRegion* max_rs_mem_sz_region = blk.max_rs_mem_sz_region();
- HeapRegionRemSet* max_rs_rem_set = max_rs_mem_sz_region->rem_set();
- out->print_cr(" Max size region = "HR_FORMAT", "
- "size = "SIZE_FORMAT "K, occupied = "SIZE_FORMAT"K.",
- HR_FORMAT_PARAMS(max_rs_mem_sz_region),
- (max_rs_rem_set->mem_size() + K - 1)/K,
- (max_rs_rem_set->occupied() + K - 1)/K);
- out->print_cr(" Did %d coarsenings.", num_coarsenings());
- // Strong code root stats
- out->print_cr(" Total heap region code-root set sizes = "SIZE_FORMAT"K."
- " Max = "SIZE_FORMAT"K.",
- blk.total_code_root_mem_sz()/K, blk.max_code_root_mem_sz()/K);
- HeapRegion* max_code_root_mem_sz_region = blk.max_code_root_mem_sz_region();
- HeapRegionRemSet* max_code_root_rem_set = max_code_root_mem_sz_region->rem_set();
- out->print_cr(" Max size region = "HR_FORMAT", "
- "size = "SIZE_FORMAT "K, num_elems = "SIZE_FORMAT".",
- HR_FORMAT_PARAMS(max_code_root_mem_sz_region),
- (max_code_root_rem_set->strong_code_roots_mem_size() + K - 1)/K,
- (max_code_root_rem_set->strong_code_roots_list_length()));
+ blk.print_summary_on(out);
}
--- a/hotspot/src/share/vm/gc_implementation/g1/g1RemSetSummary.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1RemSetSummary.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -84,7 +84,7 @@
void subtract_from(G1RemSetSummary* other);
// initialize and get the first sampling
- void initialize(G1RemSet* remset, uint num_workers);
+ void initialize(G1RemSet* remset);
void print_on(outputStream* out);
--- a/hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -64,6 +64,27 @@
}
}
+bool G1SATBCardTableModRefBS::mark_card_deferred(size_t card_index) {
+ jbyte val = _byte_map[card_index];
+ // It's already processed
+ if ((val & (clean_card_mask_val() | deferred_card_val())) == deferred_card_val()) {
+ return false;
+ }
+ // Cached bit can be installed either on a clean card or on a claimed card.
+ jbyte new_val = val;
+ if (val == clean_card_val()) {
+ new_val = (jbyte)deferred_card_val();
+ } else {
+ if (val & claimed_card_val()) {
+ new_val = val | (jbyte)deferred_card_val();
+ }
+ }
+ if (new_val != val) {
+ Atomic::cmpxchg(new_val, &_byte_map[card_index], val);
+ }
+ return true;
+}
+
G1SATBCardTableLoggingModRefBS::
G1SATBCardTableLoggingModRefBS(MemRegion whole_heap,
int max_covered_regions) :
@@ -95,7 +116,7 @@
G1SATBCardTableLoggingModRefBS::write_ref_field_static(void* field,
oop new_val) {
uintptr_t field_uint = (uintptr_t)field;
- uintptr_t new_val_uint = (uintptr_t)new_val;
+ uintptr_t new_val_uint = cast_from_oop<uintptr_t>(new_val);
uintptr_t comb = field_uint ^ new_val_uint;
comb = comb >> HeapRegion::LogOfHRGrainBytes;
if (comb == 0) return;
--- a/hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -89,6 +89,42 @@
write_ref_array_pre_work(dst, count);
}
}
+
+/*
+ Claimed and deferred bits are used together in G1 during the evacuation
+ pause. These bits can have the following state transitions:
+ 1. The claimed bit can be put over any other card state. Except that
+ the "dirty -> dirty and claimed" transition is checked for in
+ G1 code and is not used.
+ 2. Deferred bit can be set only if the previous state of the card
+ was either clean or claimed. mark_card_deferred() is wait-free.
+ We do not care if the operation is be successful because if
+ it does not it will only result in duplicate entry in the update
+ buffer because of the "cache-miss". So it's not worth spinning.
+ */
+
+ bool is_card_claimed(size_t card_index) {
+ jbyte val = _byte_map[card_index];
+ return (val & (clean_card_mask_val() | claimed_card_val())) == claimed_card_val();
+ }
+
+ void set_card_claimed(size_t card_index) {
+ jbyte val = _byte_map[card_index];
+ if (val == clean_card_val()) {
+ val = (jbyte)claimed_card_val();
+ } else {
+ val |= (jbyte)claimed_card_val();
+ }
+ _byte_map[card_index] = val;
+ }
+
+ bool mark_card_deferred(size_t card_index);
+
+ bool is_card_deferred(size_t card_index) {
+ jbyte val = _byte_map[card_index];
+ return (val & (clean_card_mask_val() | deferred_card_val())) == deferred_card_val();
+ }
+
};
// Adds card-table logging to the post-barrier.
--- a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -637,7 +637,7 @@
gclog_or_tty->print_cr("Object "PTR_FORMAT" in region "
"["PTR_FORMAT", "PTR_FORMAT") is above "
"top "PTR_FORMAT,
- obj, _hr->bottom(), _hr->end(), _hr->top());
+ (void *)obj, _hr->bottom(), _hr->end(), _hr->top());
_failures = true;
return;
}
@@ -951,12 +951,12 @@
Klass* klass = obj->klass();
if (!klass->is_metaspace_object()) {
gclog_or_tty->print_cr("klass "PTR_FORMAT" of object "PTR_FORMAT" "
- "not metadata", klass, obj);
+ "not metadata", klass, (void *)obj);
*failures = true;
return;
} else if (!klass->is_klass()) {
gclog_or_tty->print_cr("klass "PTR_FORMAT" of object "PTR_FORMAT" "
- "not a klass", klass, obj);
+ "not a klass", klass, (void *)obj);
*failures = true;
return;
} else {
@@ -971,7 +971,7 @@
}
}
} else {
- gclog_or_tty->print_cr(PTR_FORMAT" no an oop", obj);
+ gclog_or_tty->print_cr(PTR_FORMAT" no an oop", (void *)obj);
*failures = true;
return;
}
--- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -91,8 +91,8 @@
gclog_or_tty->print_cr(" PRT::Add_reference_work(" PTR_FORMAT "->" PTR_FORMAT").",
from,
UseCompressedOops
- ? oopDesc::load_decode_heap_oop((narrowOop*)from)
- : oopDesc::load_decode_heap_oop((oop*)from));
+ ? (void *)oopDesc::load_decode_heap_oop((narrowOop*)from)
+ : (void *)oopDesc::load_decode_heap_oop((oop*)from));
}
HeapRegion* loc_hr = hr();
@@ -403,8 +403,8 @@
gclog_or_tty->print_cr("ORT::add_reference_work(" PTR_FORMAT "->" PTR_FORMAT ").",
from,
UseCompressedOops
- ? oopDesc::load_decode_heap_oop((narrowOop*)from)
- : oopDesc::load_decode_heap_oop((oop*)from));
+ ? (void *)oopDesc::load_decode_heap_oop((narrowOop*)from)
+ : (void *)oopDesc::load_decode_heap_oop((oop*)from));
}
int from_card = (int)(uintptr_t(from) >> CardTableModRefBS::card_shift);
--- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -71,27 +71,16 @@
// Public
-void HeapRegionSeq::initialize(HeapWord* bottom, HeapWord* end,
- uint max_length) {
+void HeapRegionSeq::initialize(HeapWord* bottom, HeapWord* end) {
assert((uintptr_t) bottom % HeapRegion::GrainBytes == 0,
"bottom should be heap region aligned");
assert((uintptr_t) end % HeapRegion::GrainBytes == 0,
"end should be heap region aligned");
- _length = 0;
- _heap_bottom = bottom;
- _heap_end = end;
- _region_shift = HeapRegion::LogOfHRGrainBytes;
_next_search_index = 0;
_allocated_length = 0;
- _max_length = max_length;
- _regions = NEW_C_HEAP_ARRAY(HeapRegion*, max_length, mtGC);
- memset(_regions, 0, (size_t) max_length * sizeof(HeapRegion*));
- _regions_biased = _regions - ((uintx) bottom >> _region_shift);
-
- assert(&_regions[0] == &_regions_biased[addr_to_index_biased(bottom)],
- "bottom should be included in the region with index 0");
+ _regions.initialize(bottom, end, HeapRegion::GrainBytes);
}
MemRegion HeapRegionSeq::expand_by(HeapWord* old_end,
@@ -101,15 +90,15 @@
G1CollectedHeap* g1h = G1CollectedHeap::heap();
HeapWord* next_bottom = old_end;
- assert(_heap_bottom <= next_bottom, "invariant");
+ assert(heap_bottom() <= next_bottom, "invariant");
while (next_bottom < new_end) {
- assert(next_bottom < _heap_end, "invariant");
+ assert(next_bottom < heap_end(), "invariant");
uint index = length();
- assert(index < _max_length, "otherwise we cannot expand further");
+ assert(index < max_length(), "otherwise we cannot expand further");
if (index == 0) {
// We have not allocated any regions so far
- assert(next_bottom == _heap_bottom, "invariant");
+ assert(next_bottom == heap_bottom(), "invariant");
} else {
// next_bottom should match the end of the last/previous region
assert(next_bottom == at(index - 1)->end(), "invariant");
@@ -122,8 +111,8 @@
// allocation failed, we bail out and return what we have done so far
return MemRegion(old_end, next_bottom);
}
- assert(_regions[index] == NULL, "invariant");
- _regions[index] = new_hr;
+ assert(_regions.get_by_index(index) == NULL, "invariant");
+ _regions.set_by_index(index, new_hr);
increment_allocated_length();
}
// Have to increment the length first, otherwise we will get an
@@ -228,26 +217,26 @@
#ifndef PRODUCT
void HeapRegionSeq::verify_optional() {
- guarantee(_length <= _allocated_length,
+ guarantee(length() <= _allocated_length,
err_msg("invariant: _length: %u _allocated_length: %u",
- _length, _allocated_length));
- guarantee(_allocated_length <= _max_length,
+ length(), _allocated_length));
+ guarantee(_allocated_length <= max_length(),
err_msg("invariant: _allocated_length: %u _max_length: %u",
- _allocated_length, _max_length));
- guarantee(_next_search_index <= _length,
+ _allocated_length, max_length()));
+ guarantee(_next_search_index <= length(),
err_msg("invariant: _next_search_index: %u _length: %u",
- _next_search_index, _length));
+ _next_search_index, length()));
- HeapWord* prev_end = _heap_bottom;
+ HeapWord* prev_end = heap_bottom();
for (uint i = 0; i < _allocated_length; i += 1) {
- HeapRegion* hr = _regions[i];
+ HeapRegion* hr = _regions.get_by_index(i);
guarantee(hr != NULL, err_msg("invariant: i: %u", i));
guarantee(hr->bottom() == prev_end,
err_msg("invariant i: %u "HR_FORMAT" prev_end: "PTR_FORMAT,
i, HR_FORMAT_PARAMS(hr), prev_end));
guarantee(hr->hrs_index() == i,
err_msg("invariant: i: %u hrs_index(): %u", i, hr->hrs_index()));
- if (i < _length) {
+ if (i < length()) {
// Asserts will fire if i is >= _length
HeapWord* addr = hr->bottom();
guarantee(addr_to_region(addr) == hr, "sanity");
@@ -265,8 +254,8 @@
prev_end = hr->end();
}
}
- for (uint i = _allocated_length; i < _max_length; i += 1) {
- guarantee(_regions[i] == NULL, err_msg("invariant i: %u", i));
+ for (uint i = _allocated_length; i < max_length(); i += 1) {
+ guarantee(_regions.get_by_index(i) == NULL, err_msg("invariant i: %u", i));
}
}
#endif // PRODUCT
--- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -25,10 +25,17 @@
#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONSEQ_HPP
#define SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONSEQ_HPP
+#include "gc_implementation/g1/g1BiasedArray.hpp"
+
class HeapRegion;
class HeapRegionClosure;
class FreeRegionList;
+class G1HeapRegionTable : public G1BiasedMappedArray<HeapRegion*> {
+ protected:
+ virtual HeapRegion* default_value() const { return NULL; }
+};
+
// This class keeps track of the region metadata (i.e., HeapRegion
// instances). They are kept in the _regions array in address
// order. A region's index in the array corresponds to its index in
@@ -44,35 +51,21 @@
//
// We keep track of three lengths:
//
-// * _length (returned by length()) is the number of currently
+// * _committed_length (returned by length()) is the number of currently
// committed regions.
// * _allocated_length (not exposed outside this class) is the
// number of regions for which we have HeapRegions.
-// * _max_length (returned by max_length()) is the maximum number of
-// regions the heap can have.
+// * max_length() returns the maximum number of regions the heap can have.
//
-// and maintain that: _length <= _allocated_length <= _max_length
+// and maintain that: _committed_length <= _allocated_length <= max_length()
class HeapRegionSeq: public CHeapObj<mtGC> {
friend class VMStructs;
- // The array that holds the HeapRegions.
- HeapRegion** _regions;
-
- // Version of _regions biased to address 0
- HeapRegion** _regions_biased;
+ G1HeapRegionTable _regions;
// The number of regions committed in the heap.
- uint _length;
-
- // The address of the first reserved word in the heap.
- HeapWord* _heap_bottom;
-
- // The address of the last reserved word in the heap - 1.
- HeapWord* _heap_end;
-
- // The log of the region byte size.
- uint _region_shift;
+ uint _committed_length;
// A hint for which index to start searching from for humongous
// allocations.
@@ -81,37 +74,33 @@
// The number of regions for which we have allocated HeapRegions for.
uint _allocated_length;
- // The maximum number of regions in the heap.
- uint _max_length;
-
// Find a contiguous set of empty regions of length num, starting
// from the given index.
uint find_contiguous_from(uint from, uint num);
- // Map a heap address to a biased region index. Assume that the
- // address is valid.
- inline uintx addr_to_index_biased(HeapWord* addr) const;
-
void increment_allocated_length() {
- assert(_allocated_length < _max_length, "pre-condition");
+ assert(_allocated_length < max_length(), "pre-condition");
_allocated_length++;
}
void increment_length() {
- assert(_length < _max_length, "pre-condition");
- _length++;
+ assert(length() < max_length(), "pre-condition");
+ _committed_length++;
}
void decrement_length() {
- assert(_length > 0, "pre-condition");
- _length--;
+ assert(length() > 0, "pre-condition");
+ _committed_length--;
}
+ HeapWord* heap_bottom() const { return _regions.bottom_address_mapped(); }
+ HeapWord* heap_end() const {return _regions.end_address_mapped(); }
+
public:
// Empty contructor, we'll initialize it with the initialize() method.
- HeapRegionSeq() { }
+ HeapRegionSeq() : _regions(), _committed_length(0), _next_search_index(0), _allocated_length(0) { }
- void initialize(HeapWord* bottom, HeapWord* end, uint max_length);
+ void initialize(HeapWord* bottom, HeapWord* end);
// Return the HeapRegion at the given index. Assume that the index
// is valid.
@@ -126,10 +115,10 @@
inline HeapRegion* addr_to_region_unsafe(HeapWord* addr) const;
// Return the number of regions that have been committed in the heap.
- uint length() const { return _length; }
+ uint length() const { return _committed_length; }
// Return the maximum number of regions in the heap.
- uint max_length() const { return _max_length; }
+ uint max_length() const { return (uint)_regions.length(); }
// Expand the sequence to reflect that the heap has grown from
// old_end to new_end. Either create new HeapRegions, or re-use
--- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.inline.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.inline.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -28,28 +28,16 @@
#include "gc_implementation/g1/heapRegion.hpp"
#include "gc_implementation/g1/heapRegionSeq.hpp"
-inline uintx HeapRegionSeq::addr_to_index_biased(HeapWord* addr) const {
- assert(_heap_bottom <= addr && addr < _heap_end,
- err_msg("addr: "PTR_FORMAT" bottom: "PTR_FORMAT" end: "PTR_FORMAT,
- addr, _heap_bottom, _heap_end));
- uintx index = (uintx) addr >> _region_shift;
- return index;
-}
-
inline HeapRegion* HeapRegionSeq::addr_to_region_unsafe(HeapWord* addr) const {
- assert(_heap_bottom <= addr && addr < _heap_end,
- err_msg("addr: "PTR_FORMAT" bottom: "PTR_FORMAT" end: "PTR_FORMAT,
- addr, _heap_bottom, _heap_end));
- uintx index_biased = addr_to_index_biased(addr);
- HeapRegion* hr = _regions_biased[index_biased];
+ HeapRegion* hr = _regions.get_by_address(addr);
assert(hr != NULL, "invariant");
return hr;
}
inline HeapRegion* HeapRegionSeq::addr_to_region(HeapWord* addr) const {
- if (addr != NULL && addr < _heap_end) {
- assert(addr >= _heap_bottom,
- err_msg("addr: "PTR_FORMAT" bottom: "PTR_FORMAT, addr, _heap_bottom));
+ if (addr != NULL && addr < heap_end()) {
+ assert(addr >= heap_bottom(),
+ err_msg("addr: "PTR_FORMAT" bottom: "PTR_FORMAT, addr, heap_bottom()));
return addr_to_region_unsafe(addr);
}
return NULL;
@@ -57,7 +45,7 @@
inline HeapRegion* HeapRegionSeq::at(uint index) const {
assert(index < length(), "pre-condition");
- HeapRegion* hr = _regions[index];
+ HeapRegion* hr = _regions.get_by_index(index);
assert(hr != NULL, "sanity");
assert(hr->hrs_index() == index, "sanity");
return hr;
--- a/hotspot/src/share/vm/gc_implementation/g1/vmStructs_g1.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/g1/vmStructs_g1.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -34,8 +34,14 @@
static_field(HeapRegion, GrainBytes, size_t) \
static_field(HeapRegion, LogOfHRGrainBytes, int) \
\
- nonstatic_field(HeapRegionSeq, _regions, HeapRegion**) \
- nonstatic_field(HeapRegionSeq, _length, uint) \
+ nonstatic_field(G1HeapRegionTable, _base, address) \
+ nonstatic_field(G1HeapRegionTable, _length, size_t) \
+ nonstatic_field(G1HeapRegionTable, _biased_base, address) \
+ nonstatic_field(G1HeapRegionTable, _bias, size_t) \
+ nonstatic_field(G1HeapRegionTable, _shift_by, uint) \
+ \
+ nonstatic_field(HeapRegionSeq, _regions, G1HeapRegionTable) \
+ nonstatic_field(HeapRegionSeq, _committed_length, uint) \
\
nonstatic_field(G1CollectedHeap, _hrs, HeapRegionSeq) \
nonstatic_field(G1CollectedHeap, _g1_committed, MemRegion) \
@@ -58,6 +64,8 @@
#define VM_TYPES_G1(declare_type, declare_toplevel_type) \
\
+ declare_toplevel_type(G1HeapRegionTable) \
+ \
declare_type(G1CollectedHeap, SharedHeap) \
\
declare_type(HeapRegion, ContiguousSpace) \
--- a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1103,7 +1103,7 @@
}
}
-static const oop ClaimedForwardPtr = oop(0x4);
+static const oop ClaimedForwardPtr = cast_to_oop<intptr_t>(0x4);
// Because of concurrency, there are times where an object for which
// "is_forwarded()" is true contains an "interim" forwarding pointer
@@ -1226,7 +1226,7 @@
if (TraceScavenge) {
gclog_or_tty->print_cr("{%s %s " PTR_FORMAT " -> " PTR_FORMAT " (%d)}",
is_in_reserved(new_obj) ? "copying" : "tenuring",
- new_obj->klass()->internal_name(), old, new_obj, new_obj->size());
+ new_obj->klass()->internal_name(), (void *)old, (void *)new_obj, new_obj->size());
}
#endif
@@ -1347,7 +1347,7 @@
if (TraceScavenge) {
gclog_or_tty->print_cr("{%s %s " PTR_FORMAT " -> " PTR_FORMAT " (%d)}",
is_in_reserved(new_obj) ? "copying" : "tenuring",
- new_obj->klass()->internal_name(), old, new_obj, new_obj->size());
+ new_obj->klass()->internal_name(), (void *)old, (void *)new_obj, new_obj->size());
}
#endif
@@ -1436,7 +1436,7 @@
// (although some performance comparisons would be useful since
// single global lists have their own performance disadvantages
// as we were made painfully aware not long ago, see 6786503).
-#define BUSY (oop(0x1aff1aff))
+#define BUSY (cast_to_oop<intptr_t>(0x1aff1aff))
void ParNewGeneration::push_on_overflow_list(oop from_space_obj, ParScanThreadState* par_scan_state) {
assert(is_in_reserved(from_space_obj), "Should be from this generation");
if (ParGCUseLocalOverflow) {
@@ -1512,7 +1512,7 @@
if (_overflow_list == NULL) return false;
// Otherwise, there was something there; try claiming the list.
- oop prefix = (oop)Atomic::xchg_ptr(BUSY, &_overflow_list);
+ oop prefix = cast_to_oop(Atomic::xchg_ptr(BUSY, &_overflow_list));
// Trim off a prefix of at most objsFromOverflow items
Thread* tid = Thread::current();
size_t spin_count = (size_t)ParallelGCThreads;
@@ -1526,7 +1526,7 @@
return false;
} else if (_overflow_list != BUSY) {
// try and grab the prefix
- prefix = (oop)Atomic::xchg_ptr(BUSY, &_overflow_list);
+ prefix = cast_to_oop(Atomic::xchg_ptr(BUSY, &_overflow_list));
}
}
if (prefix == NULL || prefix == BUSY) {
--- a/hotspot/src/share/vm/gc_implementation/parNew/parOopClosures.inline.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/parNew/parOopClosures.inline.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 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
@@ -84,7 +84,7 @@
Space* sp = gch->space_containing(p);
oop obj = oop(sp->block_start(p));
assert((HeapWord*)obj < (HeapWord*)p, "Error");
- tty->print_cr("Object: " PTR_FORMAT, obj);
+ tty->print_cr("Object: " PTR_FORMAT, (void *)obj);
tty->print_cr("-------");
obj->print();
tty->print_cr("-----");
@@ -110,7 +110,7 @@
if (TraceScavenge) {
gclog_or_tty->print_cr("{%s %s ( " PTR_FORMAT " ) " PTR_FORMAT " -> " PTR_FORMAT " (%d)}",
"forwarded ",
- new_obj->klass()->internal_name(), p, obj, new_obj, new_obj->size());
+ new_obj->klass()->internal_name(), p, (void *)obj, (void *)new_obj, new_obj->size());
}
#endif
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/generationSizer.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/generationSizer.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -40,10 +40,8 @@
void initialize_flags() {
// Do basic sizing work
- this->TwoGenerationCollectorPolicy::initialize_flags();
+ TwoGenerationCollectorPolicy::initialize_flags();
- // If the user hasn't explicitly set the number of worker
- // threads, set the count.
assert(UseSerialGC ||
!FLAG_IS_DEFAULT(ParallelGCThreads) ||
(ParallelGCThreads > 0),
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -23,7 +23,6 @@
*/
#include "precompiled.hpp"
-#include "gc_implementation/parallelScavenge/generationSizer.hpp"
#include "gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp"
#include "gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.hpp"
#include "gc_implementation/parallelScavenge/psScavenge.hpp"
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -53,7 +53,6 @@
// Forward decls
class elapsedTimer;
-class GenerationSizer;
class PSAdaptiveSizePolicy : public AdaptiveSizePolicy {
friend class PSGCAdaptivePolicyCounters;
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -26,7 +26,6 @@
#include "classfile/symbolTable.hpp"
#include "classfile/systemDictionary.hpp"
#include "code/codeCache.hpp"
-#include "gc_implementation/parallelScavenge/generationSizer.hpp"
#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp"
#include "gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp"
#include "gc_implementation/parallelScavenge/psMarkSweep.hpp"
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -27,7 +27,6 @@
#include "classfile/systemDictionary.hpp"
#include "code/codeCache.hpp"
#include "gc_implementation/parallelScavenge/gcTaskManager.hpp"
-#include "gc_implementation/parallelScavenge/generationSizer.hpp"
#include "gc_implementation/parallelScavenge/parallelScavengeHeap.inline.hpp"
#include "gc_implementation/parallelScavenge/pcTasks.hpp"
#include "gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp"
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -333,7 +333,7 @@
gclog_or_tty->print_cr("{%s %s 0x%x (%d)}",
"promotion-failure",
obj->klass()->internal_name(),
- obj, obj->size());
+ (void *)obj, obj->size());
}
#endif
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -126,7 +126,7 @@
oop* mask_chunked_array_oop(oop obj) {
assert(!is_oop_masked((oop*) obj), "invariant");
- oop* ret = (oop*) ((uintptr_t)obj | PS_CHUNKED_ARRAY_OOP_MASK);
+ oop* ret = (oop*) (cast_from_oop<uintptr_t>(obj) | PS_CHUNKED_ARRAY_OOP_MASK);
assert(is_oop_masked(ret), "invariant");
return ret;
}
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.inline.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.inline.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -225,7 +225,7 @@
if (TraceScavenge) {
gclog_or_tty->print_cr("{%s %s " PTR_FORMAT " -> " PTR_FORMAT " (%d)}",
PSScavenge::should_scavenge(&new_obj) ? "copying" : "tenuring",
- new_obj->klass()->internal_name(), o, new_obj, new_obj->size());
+ new_obj->klass()->internal_name(), (void *)o, (void *)new_obj, new_obj->size());
}
#endif
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -27,7 +27,6 @@
#include "code/codeCache.hpp"
#include "gc_implementation/parallelScavenge/cardTableExtension.hpp"
#include "gc_implementation/parallelScavenge/gcTaskManager.hpp"
-#include "gc_implementation/parallelScavenge/generationSizer.hpp"
#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp"
#include "gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp"
#include "gc_implementation/parallelScavenge/psMarkSweep.hpp"
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.inline.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.inline.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 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
@@ -81,7 +81,7 @@
if (TraceScavenge && o->is_forwarded()) {
gclog_or_tty->print_cr("{%s %s " PTR_FORMAT " -> " PTR_FORMAT " (%d)}",
"forwarding",
- new_obj->klass()->internal_name(), o, new_obj, new_obj->size());
+ new_obj->klass()->internal_name(), (void *)o, (void *)new_obj, new_obj->size());
}
#endif
--- a/hotspot/src/share/vm/interpreter/bytecodeTracer.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/interpreter/bytecodeTracer.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -215,7 +215,7 @@
st->print_cr(" %s", buf);
}
} else {
- st->print_cr(" " PTR_FORMAT, (intptr_t) value);
+ st->print_cr(" " PTR_FORMAT, (void *)value);
}
}
--- a/hotspot/src/share/vm/interpreter/linkResolver.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/interpreter/linkResolver.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,4 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -573,6 +572,16 @@
}
if (check_access) {
+ // JDK8 adds non-public interface methods, and accessability check requirement
+ assert(current_klass.not_null() , "current_klass should not be null");
+
+ // check if method can be accessed by the referring class
+ check_method_accessability(current_klass,
+ resolved_klass,
+ KlassHandle(THREAD, resolved_method->method_holder()),
+ resolved_method,
+ CHECK);
+
HandleMark hm(THREAD);
Handle loader (THREAD, InstanceKlass::cast(current_klass())->class_loader());
Handle class_loader (THREAD, resolved_method->method_holder()->class_loader());
@@ -604,6 +613,20 @@
}
}
}
+
+ if (TraceItables && Verbose) {
+ ResourceMark rm(THREAD);
+ tty->print("invokeinterface resolved method: caller-class:%s, compile-time-class:%s, method:%s, method_holder:%s, access_flags: ",
+ (current_klass.is_null() ? "<NULL>" : current_klass->internal_name()),
+ (resolved_klass.is_null() ? "<NULL>" : resolved_klass->internal_name()),
+ Method::name_and_sig_as_C_string(resolved_klass(),
+ resolved_method->name(),
+ resolved_method->signature()),
+ resolved_method->method_holder()->internal_name()
+ );
+ resolved_method->access_flags().print_on(tty);
+ tty->cr();
+ }
}
//------------------------------------------------------------------------------------------------------------------------
@@ -795,26 +818,12 @@
Symbol* method_name, Symbol* method_signature,
KlassHandle current_klass, bool check_access, TRAPS) {
- if (resolved_klass->is_interface() && current_klass() != NULL) {
- // If the target class is a direct interface, treat this as a "super"
- // default call.
- //
- // If the current method is an overpass that happens to call a direct
- // super-interface's method, then we'll end up rerunning the default method
- // analysis even though we don't need to, but that's ok since it will end
- // up with the same answer.
- InstanceKlass* ik = InstanceKlass::cast(current_klass());
- Array<Klass*>* interfaces = ik->local_interfaces();
- int num_interfaces = interfaces->length();
- for (int index = 0; index < num_interfaces; index++) {
- if (interfaces->at(index) == resolved_klass()) {
- Method* method = DefaultMethods::find_super_default(current_klass(),
- resolved_klass(), method_name, method_signature, CHECK);
- resolved_method = methodHandle(THREAD, method);
- return;
- }
- }
- }
+ // Invokespecial is called for multiple special reasons:
+ // <init>
+ // local private method invocation, for classes and interfaces
+ // superclass.method, which can also resolve to a default method
+ // and the selected method is recalculated relative to the direct superclass
+ // superinterface.method, which explicitly does not check shadowing
resolve_method(resolved_method, resolved_klass, method_name, method_signature, current_klass, check_access, CHECK);
@@ -844,6 +853,26 @@
resolved_method->signature()));
THROW_MSG(vmSymbols::java_lang_IncompatibleClassChangeError(), buf);
}
+ if (TraceItables && Verbose) {
+ ResourceMark rm(THREAD);
+ tty->print("invokespecial resolved method: caller-class:%s, compile-time-class:%s, method:%s, method_holder:%s, access_flags: ",
+ (current_klass.is_null() ? "<NULL>" : current_klass->internal_name()),
+ (resolved_klass.is_null() ? "<NULL>" : resolved_klass->internal_name()),
+ Method::name_and_sig_as_C_string(resolved_klass(),
+ resolved_method->name(),
+ resolved_method->signature()),
+ resolved_method->method_holder()->internal_name()
+ );
+ resolved_method->access_flags().print_on(tty);
+ if (resolved_method->method_holder()->is_interface() &&
+ !resolved_method->is_abstract()) {
+ tty->print("default");
+ }
+ if (resolved_method->is_overpass()) {
+ tty->print("overpass");
+ }
+ tty->cr();
+ }
}
// throws runtime exceptions
@@ -851,23 +880,24 @@
KlassHandle current_klass, bool check_access, TRAPS) {
// resolved method is selected method unless we have an old-style lookup
+ // for a superclass method
+ // Invokespecial for a superinterface, resolved method is selected method,
+ // no checks for shadowing
methodHandle sel_method(THREAD, resolved_method());
// check if this is an old-style super call and do a new lookup if so
{ KlassHandle method_klass = KlassHandle(THREAD,
resolved_method->method_holder());
- const bool direct_calling_default_method =
- resolved_klass() != NULL && resolved_method() != NULL &&
- resolved_klass->is_interface() && !resolved_method->is_abstract();
-
- if (!direct_calling_default_method &&
- check_access &&
+ if (check_access &&
// a) check if ACC_SUPER flag is set for the current class
(current_klass->is_super() || !AllowNonVirtualCalls) &&
- // b) check if the method class is a superclass of the current class (superclass relation is not reflexive!)
- current_klass->is_subtype_of(method_klass()) &&
- current_klass() != method_klass() &&
+ // b) check if the class of the resolved_klass is a superclass
+ // (not supertype in order to exclude interface classes) of the current class.
+ // This check is not performed for super.invoke for interface methods
+ // in super interfaces.
+ current_klass->is_subclass_of(resolved_klass()) &&
+ current_klass() != resolved_klass() &&
// c) check if the method is not <init>
resolved_method->name() != vmSymbols::object_initializer_name()) {
// Lookup super method
@@ -905,6 +935,23 @@
sel_method->signature()));
}
+ if (TraceItables && Verbose) {
+ ResourceMark rm(THREAD);
+ tty->print("invokespecial selected method: resolved-class:%s, method:%s, method_holder:%s, access_flags: ",
+ (resolved_klass.is_null() ? "<NULL>" : resolved_klass->internal_name()),
+ Method::name_and_sig_as_C_string(resolved_klass(),
+ sel_method->name(),
+ sel_method->signature()),
+ sel_method->method_holder()->internal_name()
+ );
+ sel_method->access_flags().print_on(tty);
+ if (sel_method->method_holder()->is_interface() &&
+ !sel_method->is_abstract()) {
+ tty->print("default");
+ }
+ tty->cr();
+ }
+
// setup result
result.set_static(resolved_klass, sel_method, CHECK);
}
@@ -927,6 +974,18 @@
assert(resolved_method->name() != vmSymbols::object_initializer_name(), "should have been checked in verifier");
assert(resolved_method->name() != vmSymbols::class_initializer_name (), "should have been checked in verifier");
+ // check if private interface method
+ if (resolved_klass->is_interface() && resolved_method->is_private()) {
+ ResourceMark rm(THREAD);
+ char buf[200];
+ jio_snprintf(buf, sizeof(buf), "private interface method requires invokespecial, not invokevirtual: method %s, caller-class:%s",
+ Method::name_and_sig_as_C_string(resolved_klass(),
+ resolved_method->name(),
+ resolved_method->signature()),
+ (current_klass.is_null() ? "<NULL>" : current_klass->internal_name()));
+ THROW_MSG(vmSymbols::java_lang_IncompatibleClassChangeError(), buf);
+ }
+
// check if not static
if (resolved_method->is_static()) {
ResourceMark rm(THREAD);
@@ -936,6 +995,27 @@
resolved_method->signature()));
THROW_MSG(vmSymbols::java_lang_IncompatibleClassChangeError(), buf);
}
+
+ if (PrintVtables && Verbose) {
+ ResourceMark rm(THREAD);
+ tty->print("invokevirtual resolved method: caller-class:%s, compile-time-class:%s, method:%s, method_holder:%s, access_flags: ",
+ (current_klass.is_null() ? "<NULL>" : current_klass->internal_name()),
+ (resolved_klass.is_null() ? "<NULL>" : resolved_klass->internal_name()),
+ Method::name_and_sig_as_C_string(resolved_klass(),
+ resolved_method->name(),
+ resolved_method->signature()),
+ resolved_method->method_holder()->internal_name()
+ );
+ resolved_method->access_flags().print_on(tty);
+ if (resolved_method->method_holder()->is_interface() &&
+ !resolved_method->is_abstract()) {
+ tty->print("default");
+ }
+ if (resolved_method->is_overpass()) {
+ tty->print("overpass");
+ }
+ tty->cr();
+ }
}
// throws runtime exceptions
@@ -1012,6 +1092,27 @@
selected_method->signature()));
}
+ if (PrintVtables && Verbose) {
+ ResourceMark rm(THREAD);
+ tty->print("invokevirtual selected method: receiver-class:%s, resolved-class:%s, method:%s, method_holder:%s, vtable_index:%d, access_flags: ",
+ (recv_klass.is_null() ? "<NULL>" : recv_klass->internal_name()),
+ (resolved_klass.is_null() ? "<NULL>" : resolved_klass->internal_name()),
+ Method::name_and_sig_as_C_string(resolved_klass(),
+ resolved_method->name(),
+ resolved_method->signature()),
+ selected_method->method_holder()->internal_name(),
+ vtable_index
+ );
+ selected_method->access_flags().print_on(tty);
+ if (selected_method->method_holder()->is_interface() &&
+ !selected_method->is_abstract()) {
+ tty->print("default");
+ }
+ if (resolved_method->is_overpass()) {
+ tty->print("overpass");
+ }
+ tty->cr();
+ }
// setup result
result.set_virtual(resolved_klass, recv_klass, resolved_method, selected_method, vtable_index, CHECK);
}
@@ -1042,6 +1143,17 @@
THROW(vmSymbols::java_lang_NullPointerException());
}
+ // check if private interface method
+ if (resolved_klass->is_interface() && resolved_method->is_private()) {
+ ResourceMark rm(THREAD);
+ char buf[200];
+ jio_snprintf(buf, sizeof(buf), "private interface method requires invokespecial, not invokeinterface: method %s",
+ Method::name_and_sig_as_C_string(resolved_klass(),
+ resolved_method->name(),
+ resolved_method->signature()));
+ THROW_MSG(vmSymbols::java_lang_IncompatibleClassChangeError(), buf);
+ }
+
// check if receiver klass implements the resolved interface
if (!recv_klass->is_subtype_of(resolved_klass())) {
ResourceMark rm(THREAD);
@@ -1071,28 +1183,15 @@
resolved_method->signature()));
}
// check access
- if (sel_method->method_holder()->is_interface()) {
- // Method holder is an interface. Throw Illegal Access Error if sel_method
- // is neither public nor private.
- if (!(sel_method->is_public() || sel_method->is_private())) {
- ResourceMark rm(THREAD);
- THROW_MSG(vmSymbols::java_lang_IllegalAccessError(),
- Method::name_and_sig_as_C_string(recv_klass(),
- sel_method->name(),
- sel_method->signature()));
- }
+ // Throw Illegal Access Error if sel_method is not public.
+ if (!sel_method->is_public()) {
+ ResourceMark rm(THREAD);
+ THROW_MSG(vmSymbols::java_lang_IllegalAccessError(),
+ Method::name_and_sig_as_C_string(recv_klass(),
+ sel_method->name(),
+ sel_method->signature()));
}
- else {
- // Method holder is a class. Throw Illegal Access Error if sel_method
- // is not public.
- if (!sel_method->is_public()) {
- ResourceMark rm(THREAD);
- THROW_MSG(vmSymbols::java_lang_IllegalAccessError(),
- Method::name_and_sig_as_C_string(recv_klass(),
- sel_method->name(),
- sel_method->signature()));
- }
- }
+
// check if abstract
if (check_null_and_abstract && sel_method->is_abstract()) {
ResourceMark rm(THREAD);
@@ -1109,6 +1208,27 @@
return;
}
int itable_index = resolved_method()->itable_index();
+
+ if (TraceItables && Verbose) {
+ ResourceMark rm(THREAD);
+ tty->print("invokeinterface selected method: receiver-class:%s, resolved-class:%s, method:%s, method_holder:%s, access_flags: ",
+ (recv_klass.is_null() ? "<NULL>" : recv_klass->internal_name()),
+ (resolved_klass.is_null() ? "<NULL>" : resolved_klass->internal_name()),
+ Method::name_and_sig_as_C_string(resolved_klass(),
+ resolved_method->name(),
+ resolved_method->signature()),
+ sel_method->method_holder()->internal_name()
+ );
+ sel_method->access_flags().print_on(tty);
+ if (sel_method->method_holder()->is_interface() &&
+ !sel_method->is_abstract()) {
+ tty->print("default");
+ }
+ if (resolved_method->is_overpass()) {
+ tty->print("overpass");
+ }
+ tty->cr();
+ }
result.set_interface(resolved_klass, recv_klass, resolved_method, sel_method, itable_index, CHECK);
}
@@ -1384,7 +1504,7 @@
THREAD);
if (HAS_PENDING_EXCEPTION) {
if (TraceMethodHandles) {
- tty->print_cr("invokedynamic throws BSME for "INTPTR_FORMAT, PENDING_EXCEPTION);
+ tty->print_cr("invokedynamic throws BSME for "INTPTR_FORMAT, (void *)PENDING_EXCEPTION);
PENDING_EXCEPTION->print();
}
if (PENDING_EXCEPTION->is_a(SystemDictionary::BootstrapMethodError_klass())) {
--- a/hotspot/src/share/vm/memory/cardTableModRefBS.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/memory/cardTableModRefBS.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -423,60 +423,6 @@
inline_write_ref_field(field, newVal);
}
-/*
- Claimed and deferred bits are used together in G1 during the evacuation
- pause. These bits can have the following state transitions:
- 1. The claimed bit can be put over any other card state. Except that
- the "dirty -> dirty and claimed" transition is checked for in
- G1 code and is not used.
- 2. Deferred bit can be set only if the previous state of the card
- was either clean or claimed. mark_card_deferred() is wait-free.
- We do not care if the operation is be successful because if
- it does not it will only result in duplicate entry in the update
- buffer because of the "cache-miss". So it's not worth spinning.
- */
-
-
-bool CardTableModRefBS::claim_card(size_t card_index) {
- jbyte val = _byte_map[card_index];
- assert(val != dirty_card_val(), "Shouldn't claim a dirty card");
- while (val == clean_card_val() ||
- (val & (clean_card_mask_val() | claimed_card_val())) != claimed_card_val()) {
- jbyte new_val = val;
- if (val == clean_card_val()) {
- new_val = (jbyte)claimed_card_val();
- } else {
- new_val = val | (jbyte)claimed_card_val();
- }
- jbyte res = Atomic::cmpxchg(new_val, &_byte_map[card_index], val);
- if (res == val) {
- return true;
- }
- val = res;
- }
- return false;
-}
-
-bool CardTableModRefBS::mark_card_deferred(size_t card_index) {
- jbyte val = _byte_map[card_index];
- // It's already processed
- if ((val & (clean_card_mask_val() | deferred_card_val())) == deferred_card_val()) {
- return false;
- }
- // Cached bit can be installed either on a clean card or on a claimed card.
- jbyte new_val = val;
- if (val == clean_card_val()) {
- new_val = (jbyte)deferred_card_val();
- } else {
- if (val & claimed_card_val()) {
- new_val = val | (jbyte)deferred_card_val();
- }
- }
- if (new_val != val) {
- Atomic::cmpxchg(new_val, &_byte_map[card_index], val);
- }
- return true;
-}
void CardTableModRefBS::non_clean_card_iterate_possibly_parallel(Space* sp,
MemRegion mr,
--- a/hotspot/src/share/vm/memory/cardTableModRefBS.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/memory/cardTableModRefBS.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -339,34 +339,10 @@
_byte_map[card_index] = dirty_card_val();
}
- bool is_card_claimed(size_t card_index) {
- jbyte val = _byte_map[card_index];
- return (val & (clean_card_mask_val() | claimed_card_val())) == claimed_card_val();
- }
-
- void set_card_claimed(size_t card_index) {
- jbyte val = _byte_map[card_index];
- if (val == clean_card_val()) {
- val = (jbyte)claimed_card_val();
- } else {
- val |= (jbyte)claimed_card_val();
- }
- _byte_map[card_index] = val;
- }
-
- bool claim_card(size_t card_index);
-
bool is_card_clean(size_t card_index) {
return _byte_map[card_index] == clean_card_val();
}
- bool is_card_deferred(size_t card_index) {
- jbyte val = _byte_map[card_index];
- return (val & (clean_card_mask_val() | deferred_card_val())) == deferred_card_val();
- }
-
- bool mark_card_deferred(size_t card_index);
-
// Card marking array base (adjusted for heap low boundary)
// This would be the 0th element of _byte_map, if the heap started at 0x0.
// But since the heap starts at some higher address, this points to somewhere
--- a/hotspot/src/share/vm/memory/collectorPolicy.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/memory/collectorPolicy.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -64,19 +64,21 @@
vm_exit_during_initialization("Incompatible initial and maximum heap sizes specified");
}
- if (!is_size_aligned(MaxMetaspaceSize, max_alignment())) {
- FLAG_SET_ERGO(uintx, MaxMetaspaceSize,
- restricted_align_down(MaxMetaspaceSize, max_alignment()));
- }
+ // Do not use FLAG_SET_ERGO to update MaxMetaspaceSize, since this will
+ // override if MaxMetaspaceSize was set on the command line or not.
+ // This information is needed later to conform to the specification of the
+ // java.lang.management.MemoryUsage API.
+ //
+ // Ideally, we would be able to set the default value of MaxMetaspaceSize in
+ // globals.hpp to the aligned value, but this is not possible, since the
+ // alignment depends on other flags being parsed.
+ MaxMetaspaceSize = restricted_align_down(MaxMetaspaceSize, max_alignment());
if (MetaspaceSize > MaxMetaspaceSize) {
- FLAG_SET_ERGO(uintx, MetaspaceSize, MaxMetaspaceSize);
+ MetaspaceSize = MaxMetaspaceSize;
}
- if (!is_size_aligned(MetaspaceSize, min_alignment())) {
- FLAG_SET_ERGO(uintx, MetaspaceSize,
- restricted_align_down(MetaspaceSize, min_alignment()));
- }
+ MetaspaceSize = restricted_align_down(MetaspaceSize, min_alignment());
assert(MetaspaceSize <= MaxMetaspaceSize, "Must be");
@@ -135,15 +137,8 @@
GenRemSet* CollectorPolicy::create_rem_set(MemRegion whole_heap,
int max_covered_regions) {
- switch (rem_set_name()) {
- case GenRemSet::CardTable: {
- CardTableRS* res = new CardTableRS(whole_heap, max_covered_regions);
- return res;
- }
- default:
- guarantee(false, "unrecognized GenRemSet::Name");
- return NULL;
- }
+ assert(rem_set_name() == GenRemSet::CardTable, "unrecognized GenRemSet::Name");
+ return new CardTableRS(whole_heap, max_covered_regions);
}
void CollectorPolicy::cleared_all_soft_refs() {
--- a/hotspot/src/share/vm/memory/gcLocker.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/memory/gcLocker.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -122,7 +122,7 @@
// strictly needed. It's added here to make it clear that
// the GC will NOT be performed if any other caller
// of GC_locker::lock() still needs GC locked.
- if (!is_active()) {
+ if (!is_active_internal()) {
_doing_gc = true;
{
// Must give up the lock while at a safepoint
--- a/hotspot/src/share/vm/memory/gcLocker.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/memory/gcLocker.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -88,7 +88,7 @@
public:
// Accessors
static bool is_active() {
- assert(_needs_gc || SafepointSynchronize::is_at_safepoint(), "only read at safepoint");
+ assert(SafepointSynchronize::is_at_safepoint(), "only read at safepoint");
return is_active_internal();
}
static bool needs_gc() { return _needs_gc; }
--- a/hotspot/src/share/vm/memory/genRemSet.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/memory/genRemSet.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -32,13 +32,8 @@
// enumeration.)
uintx GenRemSet::max_alignment_constraint(Name nm) {
- switch (nm) {
- case GenRemSet::CardTable:
- return CardTableRS::ct_max_alignment_constraint();
- default:
- guarantee(false, "Unrecognized GenRemSet type.");
- return (0); // Make Windows compiler happy
- }
+ assert(nm == GenRemSet::CardTable, "Unrecognized GenRemSet type.");
+ return CardTableRS::ct_max_alignment_constraint();
}
class HasAccumulatedModifiedOopsClosure : public KlassClosure {
--- a/hotspot/src/share/vm/memory/heapInspection.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/memory/heapInspection.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -150,11 +150,11 @@
HEAP_INSPECTION_COLUMNS_DO(DECLARE_KLASS_SIZE_STATS_FIELD)
static int count(oop x) {
- return (HeapWordSize * ((x) ? (x)->size() : 0));
+ return (HeapWordSize * (((x) != NULL) ? (x)->size() : 0));
}
static int count_array(objArrayOop x) {
- return (HeapWordSize * ((x) ? (x)->size() : 0));
+ return (HeapWordSize * (((x) != NULL) ? (x)->size() : 0));
}
template <class T> static int count(T* x) {
--- a/hotspot/src/share/vm/memory/metaspace.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/memory/metaspace.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -23,6 +23,7 @@
*/
#include "precompiled.hpp"
#include "gc_interface/collectedHeap.hpp"
+#include "memory/allocation.hpp"
#include "memory/binaryTreeDictionary.hpp"
#include "memory/freeList.hpp"
#include "memory/collectorPolicy.hpp"
@@ -111,7 +112,7 @@
// Has three lists of free chunks, and a total size and
// count that includes all three
-class ChunkManager VALUE_OBJ_CLASS_SPEC {
+class ChunkManager : public CHeapObj<mtInternal> {
// Free list of chunks of different sizes.
// SpecializedChunk
@@ -158,7 +159,12 @@
public:
- ChunkManager() : _free_chunks_total(0), _free_chunks_count(0) {}
+ ChunkManager(size_t specialized_size, size_t small_size, size_t medium_size)
+ : _free_chunks_total(0), _free_chunks_count(0) {
+ _free_chunks[SpecializedIndex].set_size(specialized_size);
+ _free_chunks[SmallIndex].set_size(small_size);
+ _free_chunks[MediumIndex].set_size(medium_size);
+ }
// add or delete (return) a chunk to the global freelist.
Metachunk* chunk_freelist_allocate(size_t word_size);
@@ -219,7 +225,7 @@
void locked_print_free_chunks(outputStream* st);
void locked_print_sum_free_chunks(outputStream* st);
- void print_on(outputStream* st);
+ void print_on(outputStream* st) const;
};
// Used to manage the free list of Metablocks (a block corresponds
@@ -276,11 +282,6 @@
// VirtualSpace
Metachunk* first_chunk() { return (Metachunk*) bottom(); }
- void inc_container_count();
-#ifdef ASSERT
- uint container_count_slow();
-#endif
-
public:
VirtualSpaceNode(size_t byte_size);
@@ -314,8 +315,10 @@
void inc_top(size_t word_size) { _top += word_size; }
uintx container_count() { return _container_count; }
+ void inc_container_count();
void dec_container_count();
#ifdef ASSERT
+ uint container_count_slow();
void verify_container_count();
#endif
@@ -421,8 +424,6 @@
VirtualSpaceNode* _virtual_space_list;
// virtual space currently being used for allocations
VirtualSpaceNode* _current_virtual_space;
- // Free chunk list for all other metadata
- ChunkManager _chunk_manager;
// Can this virtual list allocate >1 spaces? Also, used to determine
// whether to allocate unlimited small chunks in this virtual space
@@ -475,7 +476,6 @@
return _current_virtual_space;
}
- ChunkManager* chunk_manager() { return &_chunk_manager; }
bool is_class() const { return _is_class; }
// Allocate the first virtualspace.
@@ -494,14 +494,7 @@
void dec_virtual_space_count();
// Unlink empty VirtualSpaceNodes and free it.
- void purge();
-
- // Used and capacity in the entire list of virtual spaces.
- // These are global values shared by all Metaspaces
- size_t capacity_words_sum();
- size_t capacity_bytes_sum() { return capacity_words_sum() * BytesPerWord; }
- size_t used_words_sum();
- size_t used_bytes_sum() { return used_words_sum() * BytesPerWord; }
+ void purge(ChunkManager* chunk_manager);
bool contains(const void *ptr);
@@ -582,18 +575,12 @@
// Type of metadata allocated.
Metaspace::MetadataType _mdtype;
- // Chunk related size
- size_t _medium_chunk_bunch;
-
// List of chunks in use by this SpaceManager. Allocations
// are done from the current chunk. The list is used for deallocating
// chunks when the SpaceManager is freed.
Metachunk* _chunks_in_use[NumberOfInUseLists];
Metachunk* _current_chunk;
- // Virtual space where allocation comes from.
- VirtualSpaceList* _vs_list;
-
// Number of small chunks to allocate to a manager
// If class space manager, small chunks are unlimited
static uint const _small_chunk_limit;
@@ -626,7 +613,9 @@
}
Metaspace::MetadataType mdtype() { return _mdtype; }
- VirtualSpaceList* vs_list() const { return _vs_list; }
+
+ VirtualSpaceList* vs_list() const { return Metaspace::get_space_list(_mdtype); }
+ ChunkManager* chunk_manager() const { return Metaspace::get_chunk_manager(_mdtype); }
Metachunk* current_chunk() const { return _current_chunk; }
void set_current_chunk(Metachunk* v) {
@@ -648,18 +637,19 @@
public:
SpaceManager(Metaspace::MetadataType mdtype,
- Mutex* lock,
- VirtualSpaceList* vs_list);
+ Mutex* lock);
~SpaceManager();
enum ChunkMultiples {
MediumChunkMultiple = 4
};
+ bool is_class() { return _mdtype == Metaspace::ClassType; }
+
// Accessors
size_t specialized_chunk_size() { return SpecializedChunk; }
- size_t small_chunk_size() { return (size_t) vs_list()->is_class() ? ClassSmallChunk : SmallChunk; }
- size_t medium_chunk_size() { return (size_t) vs_list()->is_class() ? ClassMediumChunk : MediumChunk; }
+ size_t small_chunk_size() { return (size_t) is_class() ? ClassSmallChunk : SmallChunk; }
+ size_t medium_chunk_size() { return (size_t) is_class() ? ClassMediumChunk : MediumChunk; }
size_t medium_chunk_bunch() { return medium_chunk_size() * MediumChunkMultiple; }
size_t allocated_blocks_words() const { return _allocated_blocks_words; }
@@ -762,7 +752,7 @@
_container_count++;
assert(_container_count == container_count_slow(),
err_msg("Inconsistency in countainer_count _container_count " SIZE_FORMAT
- "container_count_slow() " SIZE_FORMAT,
+ " container_count_slow() " SIZE_FORMAT,
_container_count, container_count_slow()));
}
@@ -775,7 +765,7 @@
void VirtualSpaceNode::verify_container_count() {
assert(_container_count == container_count_slow(),
err_msg("Inconsistency in countainer_count _container_count " SIZE_FORMAT
- "container_count_slow() " SIZE_FORMAT, _container_count, container_count_slow()));
+ " container_count_slow() " SIZE_FORMAT, _container_count, container_count_slow()));
}
#endif
@@ -1020,7 +1010,7 @@
// Walk the list of VirtualSpaceNodes and delete
// nodes with a 0 container_count. Remove Metachunks in
// the node from their respective freelists.
-void VirtualSpaceList::purge() {
+void VirtualSpaceList::purge(ChunkManager* chunk_manager) {
assert_lock_strong(SpaceManager::expand_lock());
// Don't use a VirtualSpaceListIterator because this
// list is being changed and a straightforward use of an iterator is not safe.
@@ -1042,7 +1032,7 @@
prev_vsl->set_next(vsl->next());
}
- vsl->purge(chunk_manager());
+ vsl->purge(chunk_manager);
dec_reserved_words(vsl->reserved_words());
dec_committed_words(vsl->committed_words());
dec_virtual_space_count();
@@ -1064,36 +1054,6 @@
#endif
}
-size_t VirtualSpaceList::used_words_sum() {
- size_t allocated_by_vs = 0;
- VirtualSpaceListIterator iter(virtual_space_list());
- while (iter.repeat()) {
- VirtualSpaceNode* vsl = iter.get_next();
- // Sum used region [bottom, top) in each virtualspace
- allocated_by_vs += vsl->used_words_in_vs();
- }
- assert(allocated_by_vs >= chunk_manager()->free_chunks_total_words(),
- err_msg("Total in free chunks " SIZE_FORMAT
- " greater than total from virtual_spaces " SIZE_FORMAT,
- allocated_by_vs, chunk_manager()->free_chunks_total_words()));
- size_t used =
- allocated_by_vs - chunk_manager()->free_chunks_total_words();
- return used;
-}
-
-// Space available in all MetadataVirtualspaces allocated
-// for metadata. This is the upper limit on the capacity
-// of chunks allocated out of all the MetadataVirtualspaces.
-size_t VirtualSpaceList::capacity_words_sum() {
- size_t capacity = 0;
- VirtualSpaceListIterator iter(virtual_space_list());
- while (iter.repeat()) {
- VirtualSpaceNode* vsl = iter.get_next();
- capacity += vsl->capacity_words_in_vs();
- }
- return capacity;
-}
-
VirtualSpaceList::VirtualSpaceList(size_t word_size ) :
_is_class(false),
_virtual_space_list(NULL),
@@ -1104,10 +1064,6 @@
MutexLockerEx cl(SpaceManager::expand_lock(),
Mutex::_no_safepoint_check_flag);
bool initialization_succeeded = grow_vs(word_size);
-
- _chunk_manager.free_chunks(SpecializedIndex)->set_size(SpecializedChunk);
- _chunk_manager.free_chunks(SmallIndex)->set_size(SmallChunk);
- _chunk_manager.free_chunks(MediumIndex)->set_size(MediumChunk);
assert(initialization_succeeded,
" VirtualSpaceList initialization should not fail");
}
@@ -1123,9 +1079,6 @@
Mutex::_no_safepoint_check_flag);
VirtualSpaceNode* class_entry = new VirtualSpaceNode(rs);
bool succeeded = class_entry->initialize();
- _chunk_manager.free_chunks(SpecializedIndex)->set_size(SpecializedChunk);
- _chunk_manager.free_chunks(SmallIndex)->set_size(ClassSmallChunk);
- _chunk_manager.free_chunks(MediumIndex)->set_size(ClassMediumChunk);
assert(succeeded, " VirtualSpaceList initialization should not fail");
link_vs(class_entry);
}
@@ -1142,7 +1095,7 @@
}
// Reserve the space
size_t vs_byte_size = vs_word_size * BytesPerWord;
- assert(vs_byte_size % os::vm_page_size() == 0, "Not aligned");
+ assert(vs_byte_size % os::vm_allocation_granularity() == 0, "Not aligned");
// Allocate the meta virtual space and initialize it.
VirtualSpaceNode* new_entry = new VirtualSpaceNode(vs_byte_size);
@@ -1195,15 +1148,8 @@
size_t grow_chunks_by_words,
size_t medium_chunk_bunch) {
- // Get a chunk from the chunk freelist
- Metachunk* next = chunk_manager()->chunk_freelist_allocate(grow_chunks_by_words);
-
- if (next != NULL) {
- next->container()->inc_container_count();
- } else {
- // Allocate a chunk out of the current virtual space.
- next = current_virtual_space()->get_chunk_vs(grow_chunks_by_words);
- }
+ // Allocate a chunk out of the current virtual space.
+ Metachunk* next = current_virtual_space()->get_chunk_vs(grow_chunks_by_words);
if (next == NULL) {
// Not enough room in current virtual space. Try to commit
@@ -1221,12 +1167,14 @@
// being used for CompressedHeaders, don't allocate a new virtualspace.
if (can_grow() && MetaspaceGC::should_expand(this, word_size)) {
// Get another virtual space.
- size_t grow_vs_words =
- MAX2((size_t)VirtualSpaceSize, aligned_expand_vs_by_words);
+ size_t allocation_aligned_expand_words =
+ align_size_up(aligned_expand_vs_by_words, os::vm_allocation_granularity() / BytesPerWord);
+ size_t grow_vs_words =
+ MAX2((size_t)VirtualSpaceSize, allocation_aligned_expand_words);
if (grow_vs(grow_vs_words)) {
// Got it. It's on the list now. Get a chunk from it.
assert(current_virtual_space()->expanded_words() == 0,
- "New virtuals space nodes should not have expanded");
+ "New virtual space nodes should not have expanded");
size_t grow_chunks_by_words_aligned = align_size_up(grow_chunks_by_words,
page_size_words);
@@ -1342,8 +1290,9 @@
// reserved space, because this is a larger space prereserved for compressed
// class pointers.
if (!FLAG_IS_DEFAULT(MaxMetaspaceSize)) {
- size_t real_allocated = Metaspace::space_list()->reserved_words() +
- MetaspaceAux::allocated_capacity_bytes(Metaspace::ClassType);
+ size_t nonclass_allocated = MetaspaceAux::reserved_bytes(Metaspace::NonClassType);
+ size_t class_allocated = MetaspaceAux::allocated_capacity_bytes(Metaspace::ClassType);
+ size_t real_allocated = nonclass_allocated + class_allocated;
if (real_allocated >= MaxMetaspaceSize) {
return false;
}
@@ -1536,15 +1485,15 @@
if (dummy_chunk == NULL) {
break;
}
- vsl->chunk_manager()->chunk_freelist_deallocate(dummy_chunk);
+ sm->chunk_manager()->chunk_freelist_deallocate(dummy_chunk);
if (TraceMetadataChunkAllocation && Verbose) {
gclog_or_tty->print("Metadebug::deallocate_chunk_a_lot: %d) ",
sm->sum_count_in_chunks_in_use());
dummy_chunk->print_on(gclog_or_tty);
gclog_or_tty->print_cr(" Free chunks total %d count %d",
- vsl->chunk_manager()->free_chunks_total_words(),
- vsl->chunk_manager()->free_chunks_count());
+ sm->chunk_manager()->free_chunks_total_words(),
+ sm->chunk_manager()->free_chunks_count());
}
}
} else {
@@ -1796,6 +1745,8 @@
// work.
chunk->set_is_free(false);
#endif
+ chunk->container()->inc_container_count();
+
slow_locked_verify();
return chunk;
}
@@ -1830,9 +1781,9 @@
return chunk;
}
-void ChunkManager::print_on(outputStream* out) {
+void ChunkManager::print_on(outputStream* out) const {
if (PrintFLSStatistics != 0) {
- humongous_dictionary()->report_statistics();
+ const_cast<ChunkManager *>(this)->humongous_dictionary()->report_statistics();
}
}
@@ -1979,8 +1930,8 @@
}
}
- vs_list()->chunk_manager()->locked_print_free_chunks(st);
- vs_list()->chunk_manager()->locked_print_sum_free_chunks(st);
+ chunk_manager()->locked_print_free_chunks(st);
+ chunk_manager()->locked_print_sum_free_chunks(st);
}
size_t SpaceManager::calc_chunk_size(size_t word_size) {
@@ -2084,9 +2035,7 @@
}
SpaceManager::SpaceManager(Metaspace::MetadataType mdtype,
- Mutex* lock,
- VirtualSpaceList* vs_list) :
- _vs_list(vs_list),
+ Mutex* lock) :
_mdtype(mdtype),
_allocated_blocks_words(0),
_allocated_chunks_words(0),
@@ -2172,9 +2121,7 @@
MutexLockerEx fcl(SpaceManager::expand_lock(),
Mutex::_no_safepoint_check_flag);
- ChunkManager* chunk_manager = vs_list()->chunk_manager();
-
- chunk_manager->slow_locked_verify();
+ chunk_manager()->slow_locked_verify();
dec_total_from_size_metrics();
@@ -2188,8 +2135,8 @@
// Have to update before the chunks_in_use lists are emptied
// below.
- chunk_manager->inc_free_chunks_total(allocated_chunks_words(),
- sum_count_in_chunks_in_use());
+ chunk_manager()->inc_free_chunks_total(allocated_chunks_words(),
+ sum_count_in_chunks_in_use());
// Add all the chunks in use by this space manager
// to the global list of free chunks.
@@ -2204,11 +2151,11 @@
chunk_size_name(i));
}
Metachunk* chunks = chunks_in_use(i);
- chunk_manager->return_chunks(i, chunks);
+ chunk_manager()->return_chunks(i, chunks);
set_chunks_in_use(i, NULL);
if (TraceMetadataChunkAllocation && Verbose) {
gclog_or_tty->print_cr("updated freelist count %d %s",
- chunk_manager->free_chunks(i)->count(),
+ chunk_manager()->free_chunks(i)->count(),
chunk_size_name(i));
}
assert(i != HumongousIndex, "Humongous chunks are handled explicitly later");
@@ -2245,16 +2192,16 @@
humongous_chunks->word_size(), HumongousChunkGranularity));
Metachunk* next_humongous_chunks = humongous_chunks->next();
humongous_chunks->container()->dec_container_count();
- chunk_manager->humongous_dictionary()->return_chunk(humongous_chunks);
+ chunk_manager()->humongous_dictionary()->return_chunk(humongous_chunks);
humongous_chunks = next_humongous_chunks;
}
if (TraceMetadataChunkAllocation && Verbose) {
gclog_or_tty->print_cr("");
gclog_or_tty->print_cr("updated dictionary count %d %s",
- chunk_manager->humongous_dictionary()->total_count(),
+ chunk_manager()->humongous_dictionary()->total_count(),
chunk_size_name(HumongousIndex));
}
- chunk_manager->slow_locked_verify();
+ chunk_manager()->slow_locked_verify();
}
const char* SpaceManager::chunk_size_name(ChunkIndex index) const {
@@ -2343,9 +2290,7 @@
gclog_or_tty->print("SpaceManager::add_chunk: %d) ",
sum_count_in_chunks_in_use());
new_chunk->print_on(gclog_or_tty);
- if (vs_list() != NULL) {
- vs_list()->chunk_manager()->locked_print_free_chunks(gclog_or_tty);
- }
+ chunk_manager()->locked_print_free_chunks(gclog_or_tty);
}
}
@@ -2361,10 +2306,14 @@
Metachunk* SpaceManager::get_new_chunk(size_t word_size,
size_t grow_chunks_by_words) {
-
- Metachunk* next = vs_list()->get_new_chunk(word_size,
- grow_chunks_by_words,
- medium_chunk_bunch());
+ // Get a chunk from the chunk freelist
+ Metachunk* next = chunk_manager()->chunk_freelist_allocate(grow_chunks_by_words);
+
+ if (next == NULL) {
+ next = vs_list()->get_new_chunk(word_size,
+ grow_chunks_by_words,
+ medium_chunk_bunch());
+ }
if (TraceMetadataHumongousAllocation && next != NULL &&
SpaceManager::is_humongous(next->word_size())) {
@@ -2644,13 +2593,12 @@
size_t MetaspaceAux::min_chunk_size_words() { return Metaspace::first_chunk_word_size(); }
size_t MetaspaceAux::free_chunks_total_words(Metaspace::MetadataType mdtype) {
- VirtualSpaceList* list = Metaspace::get_space_list(mdtype);
- if (list == NULL) {
+ ChunkManager* chunk_manager = Metaspace::get_chunk_manager(mdtype);
+ if (chunk_manager == NULL) {
return 0;
}
- ChunkManager* chunk = list->chunk_manager();
- chunk->slow_verify();
- return chunk->free_chunks_total_words();
+ chunk_manager->slow_verify();
+ return chunk_manager->free_chunks_total_words();
}
size_t MetaspaceAux::free_chunks_total_bytes(Metaspace::MetadataType mdtype) {
@@ -2801,9 +2749,9 @@
}
void MetaspaceAux::verify_free_chunks() {
- Metaspace::space_list()->chunk_manager()->verify();
+ Metaspace::chunk_manager_metadata()->verify();
if (Metaspace::using_class_space()) {
- Metaspace::class_space_list()->chunk_manager()->verify();
+ Metaspace::chunk_manager_class()->verify();
}
}
@@ -2874,6 +2822,9 @@
VirtualSpaceList* Metaspace::_space_list = NULL;
VirtualSpaceList* Metaspace::_class_space_list = NULL;
+ChunkManager* Metaspace::_chunk_manager_metadata = NULL;
+ChunkManager* Metaspace::_chunk_manager_class = NULL;
+
#define VIRTUALSPACEMULTIPLIER 2
#ifdef _LP64
@@ -2981,6 +2932,7 @@
err_msg(SIZE_FORMAT " != " UINTX_FORMAT, rs.size(), CompressedClassSpaceSize));
assert(using_class_space(), "Must be using class space");
_class_space_list = new VirtualSpaceList(rs);
+ _chunk_manager_class = new ChunkManager(SpecializedChunk, ClassSmallChunk, ClassMediumChunk);
}
#endif
@@ -3006,6 +2958,7 @@
// remainder is the misc code and data chunks.
cds_total = FileMapInfo::shared_spaces_size();
_space_list = new VirtualSpaceList(cds_total/wordSize);
+ _chunk_manager_metadata = new ChunkManager(SpecializedChunk, SmallChunk, MediumChunk);
#ifdef _LP64
// Set the compressed klass pointer base so that decoding of these pointers works
@@ -3073,15 +3026,30 @@
size_t word_size = VIRTUALSPACEMULTIPLIER * first_chunk_word_size();
// Initialize the list of virtual spaces.
_space_list = new VirtualSpaceList(word_size);
+ _chunk_manager_metadata = new ChunkManager(SpecializedChunk, SmallChunk, MediumChunk);
}
}
+Metachunk* Metaspace::get_initialization_chunk(MetadataType mdtype,
+ size_t chunk_word_size,
+ size_t chunk_bunch) {
+ // Get a chunk from the chunk freelist
+ Metachunk* chunk = get_chunk_manager(mdtype)->chunk_freelist_allocate(chunk_word_size);
+ if (chunk != NULL) {
+ return chunk;
+ }
+
+ return get_space_list(mdtype)->get_initialization_chunk(chunk_word_size, chunk_bunch);
+}
+
void Metaspace::initialize(Mutex* lock, MetaspaceType type) {
assert(space_list() != NULL,
"Metadata VirtualSpaceList has not been initialized");
-
- _vsm = new SpaceManager(NonClassType, lock, space_list());
+ assert(chunk_manager_metadata() != NULL,
+ "Metadata ChunkManager has not been initialized");
+
+ _vsm = new SpaceManager(NonClassType, lock);
if (_vsm == NULL) {
return;
}
@@ -3090,11 +3058,13 @@
vsm()->get_initial_chunk_sizes(type, &word_size, &class_word_size);
if (using_class_space()) {
- assert(class_space_list() != NULL,
- "Class VirtualSpaceList has not been initialized");
+ assert(class_space_list() != NULL,
+ "Class VirtualSpaceList has not been initialized");
+ assert(chunk_manager_class() != NULL,
+ "Class ChunkManager has not been initialized");
// Allocate SpaceManager for classes.
- _class_vsm = new SpaceManager(ClassType, lock, class_space_list());
+ _class_vsm = new SpaceManager(ClassType, lock);
if (_class_vsm == NULL) {
return;
}
@@ -3103,9 +3073,9 @@
MutexLockerEx cl(SpaceManager::expand_lock(), Mutex::_no_safepoint_check_flag);
// Allocate chunk for metadata objects
- Metachunk* new_chunk =
- space_list()->get_initialization_chunk(word_size,
- vsm()->medium_chunk_bunch());
+ Metachunk* new_chunk = get_initialization_chunk(NonClassType,
+ word_size,
+ vsm()->medium_chunk_bunch());
assert(!DumpSharedSpaces || new_chunk != NULL, "should have enough space for both chunks");
if (new_chunk != NULL) {
// Add to this manager's list of chunks in use and current_chunk().
@@ -3114,9 +3084,9 @@
// Allocate chunk for class metadata objects
if (using_class_space()) {
- Metachunk* class_chunk =
- class_space_list()->get_initialization_chunk(class_word_size,
- class_vsm()->medium_chunk_bunch());
+ Metachunk* class_chunk = get_initialization_chunk(ClassType,
+ class_word_size,
+ class_vsm()->medium_chunk_bunch());
if (class_chunk != NULL) {
class_vsm()->add_chunk(class_chunk, true);
}
@@ -3134,7 +3104,7 @@
MetaWord* Metaspace::allocate(size_t word_size, MetadataType mdtype) {
// DumpSharedSpaces doesn't use class metadata area (yet)
// Also, don't use class_vsm() unless UseCompressedClassPointers is true.
- if (mdtype == ClassType && using_class_space()) {
+ if (is_class_space_allocation(mdtype)) {
return class_vsm()->allocate(word_size);
} else {
return vsm()->allocate(word_size);
@@ -3282,8 +3252,8 @@
MetaspaceAux::dump(gclog_or_tty);
}
// -XX:+HeapDumpOnOutOfMemoryError and -XX:OnOutOfMemoryError support
- const char* space_string = (mdtype == ClassType) ? "Compressed class space" :
- "Metadata space";
+ const char* space_string = is_class_space_allocation(mdtype) ? "Compressed class space" :
+ "Metadata space";
report_java_out_of_memory(space_string);
if (JvmtiExport::should_post_resource_exhausted()) {
@@ -3291,7 +3261,7 @@
JVMTI_RESOURCE_EXHAUSTED_OOM_ERROR,
space_string);
}
- if (mdtype == ClassType) {
+ if (is_class_space_allocation(mdtype)) {
THROW_OOP_0(Universe::out_of_memory_error_class_metaspace());
} else {
THROW_OOP_0(Universe::out_of_memory_error_metaspace());
@@ -3333,12 +3303,16 @@
}
}
+void Metaspace::purge(MetadataType mdtype) {
+ get_space_list(mdtype)->purge(get_chunk_manager(mdtype));
+}
+
void Metaspace::purge() {
MutexLockerEx cl(SpaceManager::expand_lock(),
Mutex::_no_safepoint_check_flag);
- space_list()->purge();
+ purge(NonClassType);
if (using_class_space()) {
- class_space_list()->purge();
+ purge(ClassType);
}
}
@@ -3385,7 +3359,7 @@
#ifndef PRODUCT
-class MetaspaceAuxTest : AllStatic {
+class TestMetaspaceAuxTest : AllStatic {
public:
static void test_reserved() {
size_t reserved = MetaspaceAux::reserved_bytes();
@@ -3425,14 +3399,25 @@
}
}
+ static void test_virtual_space_list_large_chunk() {
+ VirtualSpaceList* vs_list = new VirtualSpaceList(os::vm_allocation_granularity());
+ MutexLockerEx cl(SpaceManager::expand_lock(), Mutex::_no_safepoint_check_flag);
+ // A size larger than VirtualSpaceSize (256k) and add one page to make it _not_ be
+ // vm_allocation_granularity aligned on Windows.
+ size_t large_size = (size_t)(2*256*K + (os::vm_page_size()/BytesPerWord));
+ large_size += (os::vm_page_size()/BytesPerWord);
+ vs_list->get_new_chunk(large_size, large_size, 0);
+ }
+
static void test() {
test_reserved();
test_committed();
+ test_virtual_space_list_large_chunk();
}
};
-void MetaspaceAux_test() {
- MetaspaceAuxTest::test();
+void TestMetaspaceAux_test() {
+ TestMetaspaceAuxTest::test();
}
#endif
--- a/hotspot/src/share/vm/memory/metaspace.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/memory/metaspace.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -56,12 +56,15 @@
// +-------------------+
//
+class ChunkManager;
class ClassLoaderData;
class Metablock;
+class Metachunk;
class MetaWord;
class Mutex;
class outputStream;
class SpaceManager;
+class VirtualSpaceList;
// Metaspaces each have a SpaceManager and allocations
// are done by the SpaceManager. Allocations are done
@@ -76,8 +79,6 @@
// allocate() method returns a block for use as a
// quantum of metadata.
-class VirtualSpaceList;
-
class Metaspace : public CHeapObj<mtClass> {
friend class VMStructs;
friend class SpaceManager;
@@ -102,6 +103,10 @@
private:
void initialize(Mutex* lock, MetaspaceType type);
+ Metachunk* get_initialization_chunk(MetadataType mdtype,
+ size_t chunk_word_size,
+ size_t chunk_bunch);
+
// Align up the word size to the allocation word size
static size_t align_word_size_up(size_t);
@@ -134,6 +139,10 @@
static VirtualSpaceList* _space_list;
static VirtualSpaceList* _class_space_list;
+ static ChunkManager* _chunk_manager_metadata;
+ static ChunkManager* _chunk_manager_class;
+
+ public:
static VirtualSpaceList* space_list() { return _space_list; }
static VirtualSpaceList* class_space_list() { return _class_space_list; }
static VirtualSpaceList* get_space_list(MetadataType mdtype) {
@@ -141,6 +150,14 @@
return mdtype == ClassType ? class_space_list() : space_list();
}
+ static ChunkManager* chunk_manager_metadata() { return _chunk_manager_metadata; }
+ static ChunkManager* chunk_manager_class() { return _chunk_manager_class; }
+ static ChunkManager* get_chunk_manager(MetadataType mdtype) {
+ assert(mdtype != MetadataTypeCount, "MetadaTypeCount can't be used as mdtype");
+ return mdtype == ClassType ? chunk_manager_class() : chunk_manager_metadata();
+ }
+
+ private:
// This is used by DumpSharedSpaces only, where only _vsm is used. So we will
// maintain a single list for now.
void record_allocation(void* ptr, MetaspaceObj::Type type, size_t word_size);
@@ -199,6 +216,7 @@
void dump(outputStream* const out) const;
// Free empty virtualspaces
+ static void purge(MetadataType mdtype);
static void purge();
void print_on(outputStream* st) const;
@@ -217,6 +235,9 @@
return NOT_LP64(false) LP64_ONLY(UseCompressedClassPointers && !DumpSharedSpaces);
}
+ static bool is_class_space_allocation(MetadataType mdType) {
+ return mdType == ClassType && using_class_space();
+ }
};
class MetaspaceAux : AllStatic {
--- a/hotspot/src/share/vm/memory/metaspaceShared.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/memory/metaspaceShared.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -103,9 +103,10 @@
if (k->oop_is_instance()) {
InstanceKlass* ik = InstanceKlass::cast(k);
for (int i = 0; i < ik->methods()->length(); i++) {
- ResourceMark rm;
Method* m = ik->methods()->at(i);
- (new Fingerprinter(m))->fingerprint();
+ Fingerprinter fp(m);
+ // The side effect of this call sets method's fingerprint field.
+ fp.fingerprint();
}
}
}
--- a/hotspot/src/share/vm/memory/referenceProcessor.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/memory/referenceProcessor.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -367,7 +367,7 @@
next_d = java_lang_ref_Reference::discovered(obj);
if (TraceReferenceGC && PrintGCDetails) {
gclog_or_tty->print_cr(" obj " INTPTR_FORMAT "/next_d " INTPTR_FORMAT,
- obj, next_d);
+ (void *)obj, (void *)next_d);
}
assert(java_lang_ref_Reference::next(obj) == NULL,
"Reference not active; should not be discovered");
@@ -392,7 +392,7 @@
next_d = java_lang_ref_Reference::discovered(obj);
if (TraceReferenceGC && PrintGCDetails) {
gclog_or_tty->print_cr(" obj " INTPTR_FORMAT "/next_d " INTPTR_FORMAT,
- obj, next_d);
+ (void *)obj, (void *)next_d);
}
assert(java_lang_ref_Reference::next(obj) == NULL,
"The reference should not be enqueued");
@@ -562,7 +562,7 @@
!policy->should_clear_reference(iter.obj(), _soft_ref_timestamp_clock)) {
if (TraceReferenceGC) {
gclog_or_tty->print_cr("Dropping reference (" INTPTR_FORMAT ": %s" ") by policy",
- iter.obj(), iter.obj()->klass()->internal_name());
+ (void *)iter.obj(), iter.obj()->klass()->internal_name());
}
// Remove Reference object from list
iter.remove();
@@ -601,7 +601,7 @@
if (iter.is_referent_alive()) {
if (TraceReferenceGC) {
gclog_or_tty->print_cr("Dropping strongly reachable reference (" INTPTR_FORMAT ": %s)",
- iter.obj(), iter.obj()->klass()->internal_name());
+ (void *)iter.obj(), iter.obj()->klass()->internal_name());
}
// The referent is reachable after all.
// Remove Reference object from list.
@@ -687,7 +687,7 @@
if (TraceReferenceGC) {
gclog_or_tty->print_cr("Adding %sreference (" INTPTR_FORMAT ": %s) as pending",
clear_referent ? "cleared " : "",
- iter.obj(), iter.obj()->klass()->internal_name());
+ (void *)iter.obj(), iter.obj()->klass()->internal_name());
}
assert(iter.obj()->is_oop(UseConcMarkSweepGC), "Adding a bad reference");
iter.next();
@@ -1003,7 +1003,7 @@
gclog_or_tty->print_cr("clean_up_discovered_list: Dropping Reference: "
INTPTR_FORMAT " with next field: " INTPTR_FORMAT
" and referent: " INTPTR_FORMAT,
- iter.obj(), next, iter.referent());
+ (void *)iter.obj(), (void *)next, (void *)iter.referent());
}
)
// Remove Reference object from list
@@ -1103,14 +1103,14 @@
if (TraceReferenceGC) {
gclog_or_tty->print_cr("Discovered reference (mt) (" INTPTR_FORMAT ": %s)",
- obj, obj->klass()->internal_name());
+ (void *)obj, obj->klass()->internal_name());
}
} else {
// If retest was non NULL, another thread beat us to it:
// The reference has already been discovered...
if (TraceReferenceGC) {
gclog_or_tty->print_cr("Already discovered reference (" INTPTR_FORMAT ": %s)",
- obj, obj->klass()->internal_name());
+ (void *)obj, obj->klass()->internal_name());
}
}
}
@@ -1125,7 +1125,7 @@
assert(da ? referent->is_oop() : referent->is_oop_or_null(),
err_msg("Bad referent " INTPTR_FORMAT " found in Reference "
INTPTR_FORMAT " during %satomic discovery ",
- (intptr_t)referent, (intptr_t)obj, da ? "" : "non-"));
+ (void *)referent, (void *)obj, da ? "" : "non-"));
}
#endif
@@ -1205,7 +1205,7 @@
// The reference has already been discovered...
if (TraceReferenceGC) {
gclog_or_tty->print_cr("Already discovered reference (" INTPTR_FORMAT ": %s)",
- obj, obj->klass()->internal_name());
+ (void *)obj, obj->klass()->internal_name());
}
if (RefDiscoveryPolicy == ReferentBasedDiscovery) {
// assumes that an object is not processed twice;
@@ -1273,7 +1273,7 @@
if (TraceReferenceGC) {
gclog_or_tty->print_cr("Discovered reference (" INTPTR_FORMAT ": %s)",
- obj, obj->klass()->internal_name());
+ (void *)obj, obj->klass()->internal_name());
}
}
assert(obj->is_oop(), "Discovered a bad reference");
@@ -1372,7 +1372,7 @@
// active; we need to trace and mark its cohort.
if (TraceReferenceGC) {
gclog_or_tty->print_cr("Precleaning Reference (" INTPTR_FORMAT ": %s)",
- iter.obj(), iter.obj()->klass()->internal_name());
+ (void *)iter.obj(), iter.obj()->klass()->internal_name());
}
// Remove Reference object from list
iter.remove();
--- a/hotspot/src/share/vm/oops/constantPool.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/oops/constantPool.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -108,16 +108,16 @@
void ConstantPool::initialize_resolved_references(ClassLoaderData* loader_data,
intStack reference_map,
int constant_pool_map_length,
- TRAPS) {
+ TRAPS) {
// Initialized the resolved object cache.
int map_length = reference_map.length();
if (map_length > 0) {
// Only need mapping back to constant pool entries. The map isn't used for
- // invokedynamic resolved_reference entries. The constant pool cache index
- // has the mapping back to both the constant pool and to the resolved
- // reference index.
+ // invokedynamic resolved_reference entries. For invokedynamic entries,
+ // the constant pool cache index has the mapping back to both the constant
+ // pool and to the resolved reference index.
if (constant_pool_map_length > 0) {
- Array<u2>* om = MetadataFactory::new_array<u2>(loader_data, map_length, CHECK);
+ Array<u2>* om = MetadataFactory::new_array<u2>(loader_data, constant_pool_map_length, CHECK);
for (int i = 0; i < constant_pool_map_length; i++) {
int x = reference_map.at(i);
@@ -182,16 +182,9 @@
int ConstantPool::cp_to_object_index(int cp_index) {
// this is harder don't do this so much.
- for (int i = 0; i< reference_map()->length(); i++) {
- if (reference_map()->at(i) == cp_index) return i;
- // Zero entry is divider between constant pool indices for strings,
- // method handles and method types. After that the index is a constant
- // pool cache index for invokedynamic. Stop when zero (which can never
- // be a constant pool index)
- if (reference_map()->at(i) == 0) break;
- }
- // We might not find the index.
- return _no_index_sentinel;
+ int i = reference_map()->find(cp_index);
+ // We might not find the index for jsr292 call.
+ return (i < 0) ? _no_index_sentinel : i;
}
Klass* ConstantPool::klass_at_impl(constantPoolHandle this_oop, int which, TRAPS) {
@@ -840,8 +833,7 @@
// If the string has already been interned, this entry will be non-null
oop str = this_oop->resolved_references()->obj_at(obj_index);
if (str != NULL) return str;
-
- Symbol* sym = this_oop->unresolved_string_at(which);
+ Symbol* sym = this_oop->unresolved_string_at(which);
str = StringTable::intern(sym, CHECK_(NULL));
this_oop->string_at_put(which, obj_index, str);
assert(java_lang_String::is_instance(str), "must be string");
@@ -1619,9 +1611,11 @@
case JVM_CONSTANT_UnresolvedClassInError:
case JVM_CONSTANT_StringIndex:
case JVM_CONSTANT_MethodType:
+ case JVM_CONSTANT_MethodTypeInError:
return 3;
case JVM_CONSTANT_MethodHandle:
+ case JVM_CONSTANT_MethodHandleInError:
return 4; //tag, ref_kind, ref_index
case JVM_CONSTANT_Integer:
@@ -1802,8 +1796,8 @@
case JVM_CONSTANT_MethodHandle:
case JVM_CONSTANT_MethodHandleInError: {
*bytes = JVM_CONSTANT_MethodHandle;
- int kind = method_handle_ref_kind_at(idx);
- idx1 = method_handle_index_at(idx);
+ int kind = method_handle_ref_kind_at_error_ok(idx);
+ idx1 = method_handle_index_at_error_ok(idx);
*(bytes+1) = (unsigned char) kind;
Bytes::put_Java_u2((address) (bytes+2), idx1);
DBG(printf("JVM_CONSTANT_MethodHandle: %d %hd", kind, idx1));
@@ -1812,7 +1806,7 @@
case JVM_CONSTANT_MethodType:
case JVM_CONSTANT_MethodTypeInError: {
*bytes = JVM_CONSTANT_MethodType;
- idx1 = method_type_index_at(idx);
+ idx1 = method_type_index_at_error_ok(idx);
Bytes::put_Java_u2((address) (bytes+1), idx1);
DBG(printf("JVM_CONSTANT_MethodType: %hd", idx1));
break;
@@ -1924,7 +1918,7 @@
st->print_cr(" - holder: " INTPTR_FORMAT, pool_holder());
}
st->print_cr(" - cache: " INTPTR_FORMAT, cache());
- st->print_cr(" - resolved_references: " INTPTR_FORMAT, resolved_references());
+ st->print_cr(" - resolved_references: " INTPTR_FORMAT, (void *)resolved_references());
st->print_cr(" - reference_map: " INTPTR_FORMAT, reference_map());
for (int index = 1; index < length(); index++) { // Index 0 is unused
@@ -2000,12 +1994,12 @@
break;
case JVM_CONSTANT_MethodHandle :
case JVM_CONSTANT_MethodHandleInError :
- st->print("ref_kind=%d", method_handle_ref_kind_at(index));
- st->print(" ref_index=%d", method_handle_index_at(index));
+ st->print("ref_kind=%d", method_handle_ref_kind_at_error_ok(index));
+ st->print(" ref_index=%d", method_handle_index_at_error_ok(index));
break;
case JVM_CONSTANT_MethodType :
case JVM_CONSTANT_MethodTypeInError :
- st->print("signature_index=%d", method_type_index_at(index));
+ st->print("signature_index=%d", method_type_index_at_error_ok(index));
break;
case JVM_CONSTANT_InvokeDynamic :
{
--- a/hotspot/src/share/vm/oops/constantPool.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/oops/constantPool.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -231,7 +231,6 @@
static int cache_offset_in_bytes() { return offset_of(ConstantPool, _cache); }
static int pool_holder_offset_in_bytes() { return offset_of(ConstantPool, _pool_holder); }
static int resolved_references_offset_in_bytes() { return offset_of(ConstantPool, _resolved_references); }
- static int reference_map_offset_in_bytes() { return offset_of(ConstantPool, _reference_map); }
// Storing constants
@@ -475,18 +474,42 @@
return *int_at_addr(which);
}
+ private:
+ int method_handle_ref_kind_at(int which, bool error_ok) {
+ assert(tag_at(which).is_method_handle() ||
+ (error_ok && tag_at(which).is_method_handle_in_error()), "Corrupted constant pool");
+ return extract_low_short_from_int(*int_at_addr(which)); // mask out unwanted ref_index bits
+ }
+ int method_handle_index_at(int which, bool error_ok) {
+ assert(tag_at(which).is_method_handle() ||
+ (error_ok && tag_at(which).is_method_handle_in_error()), "Corrupted constant pool");
+ return extract_high_short_from_int(*int_at_addr(which)); // shift out unwanted ref_kind bits
+ }
+ int method_type_index_at(int which, bool error_ok) {
+ assert(tag_at(which).is_method_type() ||
+ (error_ok && tag_at(which).is_method_type_in_error()), "Corrupted constant pool");
+ return *int_at_addr(which);
+ }
+ public:
int method_handle_ref_kind_at(int which) {
- assert(tag_at(which).is_method_handle(), "Corrupted constant pool");
- return extract_low_short_from_int(*int_at_addr(which)); // mask out unwanted ref_index bits
+ return method_handle_ref_kind_at(which, false);
+ }
+ int method_handle_ref_kind_at_error_ok(int which) {
+ return method_handle_ref_kind_at(which, true);
}
int method_handle_index_at(int which) {
- assert(tag_at(which).is_method_handle(), "Corrupted constant pool");
- return extract_high_short_from_int(*int_at_addr(which)); // shift out unwanted ref_kind bits
+ return method_handle_index_at(which, false);
+ }
+ int method_handle_index_at_error_ok(int which) {
+ return method_handle_index_at(which, true);
}
int method_type_index_at(int which) {
- assert(tag_at(which).is_method_type(), "Corrupted constant pool");
- return *int_at_addr(which);
+ return method_type_index_at(which, false);
}
+ int method_type_index_at_error_ok(int which) {
+ return method_type_index_at(which, true);
+ }
+
// Derived queries:
Symbol* method_handle_name_ref_at(int which) {
int member = method_handle_index_at(which);
--- a/hotspot/src/share/vm/oops/cpCache.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/oops/cpCache.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -306,8 +306,8 @@
if (TraceInvokeDynamic) {
tty->print_cr("set_method_handle bc=%d appendix="PTR_FORMAT"%s method_type="PTR_FORMAT"%s method="PTR_FORMAT" ",
invoke_code,
- (intptr_t)appendix(), (has_appendix ? "" : " (unused)"),
- (intptr_t)method_type(), (has_method_type ? "" : " (unused)"),
+ (void *)appendix(), (has_appendix ? "" : " (unused)"),
+ (void *)method_type(), (has_method_type ? "" : " (unused)"),
(intptr_t)adapter());
adapter->print();
if (has_appendix) appendix()->print();
--- a/hotspot/src/share/vm/oops/instanceKlass.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/oops/instanceKlass.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -106,7 +106,7 @@
len = name->utf8_length(); \
} \
HS_DTRACE_PROBE4(hotspot, class__initialization__##type, \
- data, len, (clss)->class_loader(), thread_type); \
+ data, len, SOLARIS_ONLY((void *))(clss)->class_loader(), thread_type); \
}
#define DTRACE_CLASSINIT_PROBE_WAIT(type, clss, thread_type, wait) \
@@ -119,7 +119,7 @@
len = name->utf8_length(); \
} \
HS_DTRACE_PROBE5(hotspot, class__initialization__##type, \
- data, len, (clss)->class_loader(), thread_type, wait); \
+ data, len, SOLARIS_ONLY((void *))(clss)->class_loader(), thread_type, wait); \
}
#else /* USDT2 */
@@ -1419,6 +1419,8 @@
}
// lookup a method in all the interfaces that this class implements
+// Do NOT return private or static methods, new in JDK8 which are not externally visible
+// They should only be found in the initial InterfaceMethodRef
Method* InstanceKlass::lookup_method_in_all_interfaces(Symbol* name,
Symbol* signature) const {
Array<Klass*>* all_ifs = transitive_interfaces();
@@ -1427,7 +1429,7 @@
for (int i = 0; i < num_ifs; i++) {
ik = InstanceKlass::cast(all_ifs->at(i));
Method* m = ik->lookup_method(name, signature);
- if (m != NULL) {
+ if (m != NULL && m->is_public() && !m->is_static()) {
return m;
}
}
@@ -2303,7 +2305,7 @@
}
address InstanceKlass::static_field_addr(int offset) {
- return (address)(offset + InstanceMirrorKlass::offset_of_static_fields() + (intptr_t)java_mirror());
+ return (address)(offset + InstanceMirrorKlass::offset_of_static_fields() + cast_from_oop<intptr_t>(java_mirror()));
}
@@ -2769,24 +2771,17 @@
st->print(BULLET"field annotations: "); fields_annotations()->print_value_on(st); st->cr();
st->print(BULLET"field type annotations: "); fields_type_annotations()->print_value_on(st); st->cr();
{
- ResourceMark rm;
- // PreviousVersionInfo objects returned via PreviousVersionWalker
- // contain a GrowableArray of handles. We have to clean up the
- // GrowableArray _after_ the PreviousVersionWalker destructor
- // has destroyed the handles.
- {
- bool have_pv = false;
- PreviousVersionWalker pvw((InstanceKlass*)this);
- for (PreviousVersionInfo * pv_info = pvw.next_previous_version();
- pv_info != NULL; pv_info = pvw.next_previous_version()) {
- if (!have_pv)
- st->print(BULLET"previous version: ");
- have_pv = true;
- pv_info->prev_constant_pool_handle()()->print_value_on(st);
- }
- if (have_pv) st->cr();
- } // pvw is cleaned up
- } // rm is cleaned up
+ bool have_pv = false;
+ PreviousVersionWalker pvw(Thread::current(), (InstanceKlass*)this);
+ for (PreviousVersionNode * pv_node = pvw.next_previous_version();
+ pv_node != NULL; pv_node = pvw.next_previous_version()) {
+ if (!have_pv)
+ st->print(BULLET"previous version: ");
+ have_pv = true;
+ pv_node->prev_constant_pool()->print_value_on(st);
+ }
+ if (have_pv) st->cr();
+ } // pvw is cleaned up
if (generic_signature() != NULL) {
st->print(BULLET"generic signature: ");
@@ -3317,34 +3312,34 @@
Array<Method*>* old_methods = ikh->methods();
if (cp_ref->on_stack()) {
- PreviousVersionNode * pv_node = NULL;
- if (emcp_method_count == 0) {
+ PreviousVersionNode * pv_node = NULL;
+ if (emcp_method_count == 0) {
// non-shared ConstantPool gets a reference
- pv_node = new PreviousVersionNode(cp_ref, !cp_ref->is_shared(), NULL);
- RC_TRACE(0x00000400,
- ("add: all methods are obsolete; flushing any EMCP refs"));
- } else {
- int local_count = 0;
+ pv_node = new PreviousVersionNode(cp_ref, NULL);
+ RC_TRACE(0x00000400,
+ ("add: all methods are obsolete; flushing any EMCP refs"));
+ } else {
+ int local_count = 0;
GrowableArray<Method*>* method_refs = new (ResourceObj::C_HEAP, mtClass)
- GrowableArray<Method*>(emcp_method_count, true);
- for (int i = 0; i < old_methods->length(); i++) {
- if (emcp_methods->at(i)) {
- // this old method is EMCP. Save it only if it's on the stack
- Method* old_method = old_methods->at(i);
- if (old_method->on_stack()) {
- method_refs->append(old_method);
+ GrowableArray<Method*>(emcp_method_count, true);
+ for (int i = 0; i < old_methods->length(); i++) {
+ if (emcp_methods->at(i)) {
+ // this old method is EMCP. Save it only if it's on the stack
+ Method* old_method = old_methods->at(i);
+ if (old_method->on_stack()) {
+ method_refs->append(old_method);
+ }
+ if (++local_count >= emcp_method_count) {
+ // no more EMCP methods so bail out now
+ break;
}
- if (++local_count >= emcp_method_count) {
- // no more EMCP methods so bail out now
- break;
}
}
- }
// non-shared ConstantPool gets a reference
- pv_node = new PreviousVersionNode(cp_ref, !cp_ref->is_shared(), method_refs);
+ pv_node = new PreviousVersionNode(cp_ref, method_refs);
}
// append new previous version.
- _previous_versions->append(pv_node);
+ _previous_versions->append(pv_node);
}
// Since the caller is the VMThread and we are at a safepoint, this
@@ -3445,6 +3440,8 @@
return m;
}
}
+ // None found, return null for the caller to handle.
+ return NULL;
}
return m;
}
@@ -3461,10 +3458,9 @@
// Construct a PreviousVersionNode entry for the array hung off
// the InstanceKlass.
PreviousVersionNode::PreviousVersionNode(ConstantPool* prev_constant_pool,
- bool prev_cp_is_weak, GrowableArray<Method*>* prev_EMCP_methods) {
+ GrowableArray<Method*>* prev_EMCP_methods) {
_prev_constant_pool = prev_constant_pool;
- _prev_cp_is_weak = prev_cp_is_weak;
_prev_EMCP_methods = prev_EMCP_methods;
}
@@ -3480,99 +3476,38 @@
}
}
-
-// Construct a PreviousVersionInfo entry
-PreviousVersionInfo::PreviousVersionInfo(PreviousVersionNode *pv_node) {
- _prev_constant_pool_handle = constantPoolHandle(); // NULL handle
- _prev_EMCP_method_handles = NULL;
-
- ConstantPool* cp = pv_node->prev_constant_pool();
- assert(cp != NULL, "constant pool ref was unexpectedly cleared");
- if (cp == NULL) {
- return; // robustness
- }
-
- // make the ConstantPool* safe to return
- _prev_constant_pool_handle = constantPoolHandle(cp);
-
- GrowableArray<Method*>* method_refs = pv_node->prev_EMCP_methods();
- if (method_refs == NULL) {
- // the InstanceKlass did not have any EMCP methods
- return;
- }
-
- _prev_EMCP_method_handles = new GrowableArray<methodHandle>(10);
-
- int n_methods = method_refs->length();
- for (int i = 0; i < n_methods; i++) {
- Method* method = method_refs->at(i);
- assert (method != NULL, "method has been cleared");
- if (method == NULL) {
- continue; // robustness
- }
- // make the Method* safe to return
- _prev_EMCP_method_handles->append(methodHandle(method));
- }
-}
-
-
-// Destroy a PreviousVersionInfo
-PreviousVersionInfo::~PreviousVersionInfo() {
- // Since _prev_EMCP_method_handles is not C-heap allocated, we
- // don't have to delete it.
-}
-
-
// Construct a helper for walking the previous versions array
-PreviousVersionWalker::PreviousVersionWalker(InstanceKlass *ik) {
+PreviousVersionWalker::PreviousVersionWalker(Thread* thread, InstanceKlass *ik) {
+ _thread = thread;
_previous_versions = ik->previous_versions();
_current_index = 0;
- // _hm needs no initialization
_current_p = NULL;
-}
-
-
-// Destroy a PreviousVersionWalker
-PreviousVersionWalker::~PreviousVersionWalker() {
- // Delete the current info just in case the caller didn't walk to
- // the end of the previous versions list. No harm if _current_p is
- // already NULL.
- delete _current_p;
-
- // When _hm is destroyed, all the Handles returned in
- // PreviousVersionInfo objects will be destroyed.
- // Also, after this destructor is finished it will be
- // safe to delete the GrowableArray allocated in the
- // PreviousVersionInfo objects.
+ _current_constant_pool_handle = constantPoolHandle(thread, ik->constants());
}
// Return the interesting information for the next previous version
// of the klass. Returns NULL if there are no more previous versions.
-PreviousVersionInfo* PreviousVersionWalker::next_previous_version() {
+PreviousVersionNode* PreviousVersionWalker::next_previous_version() {
if (_previous_versions == NULL) {
// no previous versions so nothing to return
return NULL;
}
- delete _current_p; // cleanup the previous info for the caller
- _current_p = NULL; // reset to NULL so we don't delete same object twice
+ _current_p = NULL; // reset to NULL
+ _current_constant_pool_handle = NULL;
int length = _previous_versions->length();
while (_current_index < length) {
PreviousVersionNode * pv_node = _previous_versions->at(_current_index++);
- PreviousVersionInfo * pv_info = new (ResourceObj::C_HEAP, mtClass)
- PreviousVersionInfo(pv_node);
-
- constantPoolHandle cp_h = pv_info->prev_constant_pool_handle();
- assert (!cp_h.is_null(), "null cp found in previous version");
-
- // The caller will need to delete pv_info when they are done with it.
- _current_p = pv_info;
- return pv_info;
+
+ // Save a handle to the constant pool for this previous version,
+ // which keeps all the methods from being deallocated.
+ _current_constant_pool_handle = constantPoolHandle(_thread, pv_node->prev_constant_pool());
+ _current_p = pv_node;
+ return pv_node;
}
- // all of the underlying nodes' info has been deleted
return NULL;
} // end next_previous_version()
--- a/hotspot/src/share/vm/oops/instanceKlass.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/oops/instanceKlass.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -1126,21 +1126,11 @@
// A collection point for interesting information about the previous
-// version(s) of an InstanceKlass. This class uses weak references to
-// the information so that the information may be collected as needed
-// by the system. If the information is shared, then a regular
-// reference must be used because a weak reference would be seen as
-// collectible. A GrowableArray of PreviousVersionNodes is attached
-// to the InstanceKlass as needed. See PreviousVersionWalker below.
+// version(s) of an InstanceKlass. A GrowableArray of PreviousVersionNodes
+// is attached to the InstanceKlass as needed. See PreviousVersionWalker below.
class PreviousVersionNode : public CHeapObj<mtClass> {
private:
- // A shared ConstantPool is never collected so we'll always have
- // a reference to it so we can update items in the cache. We'll
- // have a weak reference to a non-shared ConstantPool until all
- // of the methods (EMCP or obsolete) have been collected; the
- // non-shared ConstantPool becomes collectible at that point.
- ConstantPool* _prev_constant_pool; // regular or weak reference
- bool _prev_cp_is_weak; // true if not a shared ConstantPool
+ ConstantPool* _prev_constant_pool;
// If the previous version of the InstanceKlass doesn't have any
// EMCP methods, then _prev_EMCP_methods will be NULL. If all the
@@ -1149,8 +1139,8 @@
GrowableArray<Method*>* _prev_EMCP_methods;
public:
- PreviousVersionNode(ConstantPool* prev_constant_pool, bool prev_cp_is_weak,
- GrowableArray<Method*>* prev_EMCP_methods);
+ PreviousVersionNode(ConstantPool* prev_constant_pool,
+ GrowableArray<Method*>* prev_EMCP_methods);
~PreviousVersionNode();
ConstantPool* prev_constant_pool() const {
return _prev_constant_pool;
@@ -1161,59 +1151,26 @@
};
-// A Handle-ized version of PreviousVersionNode.
-class PreviousVersionInfo : public ResourceObj {
- private:
- constantPoolHandle _prev_constant_pool_handle;
- // If the previous version of the InstanceKlass doesn't have any
- // EMCP methods, then _prev_EMCP_methods will be NULL. Since the
- // methods cannot be collected while we hold a handle,
- // _prev_EMCP_methods should never have a length of zero.
- GrowableArray<methodHandle>* _prev_EMCP_method_handles;
-
-public:
- PreviousVersionInfo(PreviousVersionNode *pv_node);
- ~PreviousVersionInfo();
- constantPoolHandle prev_constant_pool_handle() const {
- return _prev_constant_pool_handle;
- }
- GrowableArray<methodHandle>* prev_EMCP_method_handles() const {
- return _prev_EMCP_method_handles;
- }
-};
-
-
-// Helper object for walking previous versions. This helper cleans up
-// the Handles that it allocates when the helper object is destroyed.
-// The PreviousVersionInfo object returned by next_previous_version()
-// is only valid until a subsequent call to next_previous_version() or
-// the helper object is destroyed.
+// Helper object for walking previous versions.
class PreviousVersionWalker : public StackObj {
private:
+ Thread* _thread;
GrowableArray<PreviousVersionNode *>* _previous_versions;
int _current_index;
- // Fields for cleaning up when we are done walking the previous versions:
- // A HandleMark for the PreviousVersionInfo handles:
- HandleMark _hm;
+
+ // A pointer to the current node object so we can handle the deletes.
+ PreviousVersionNode* _current_p;
- // It would be nice to have a ResourceMark field in this helper also,
- // but the ResourceMark code says to be careful to delete handles held
- // in GrowableArrays _before_ deleting the GrowableArray. Since we
- // can't guarantee the order in which the fields are destroyed, we
- // have to let the creator of the PreviousVersionWalker object do
- // the right thing. Also, adding a ResourceMark here causes an
- // include loop.
-
- // A pointer to the current info object so we can handle the deletes.
- PreviousVersionInfo * _current_p;
+ // The constant pool handle keeps all the methods in this class from being
+ // deallocated from the metaspace during class unloading.
+ constantPoolHandle _current_constant_pool_handle;
public:
- PreviousVersionWalker(InstanceKlass *ik);
- ~PreviousVersionWalker();
+ PreviousVersionWalker(Thread* thread, InstanceKlass *ik);
// Return the interesting information for the next previous version
// of the klass. Returns NULL if there are no more previous versions.
- PreviousVersionInfo* next_previous_version();
+ PreviousVersionNode* next_previous_version();
};
--- a/hotspot/src/share/vm/oops/instanceMirrorKlass.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/oops/instanceMirrorKlass.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -66,7 +66,7 @@
// Static field offset is an offset into the Heap, should be converted by
// based on UseCompressedOop for traversal
static HeapWord* start_of_static_fields(oop obj) {
- return (HeapWord*)((intptr_t)obj + offset_of_static_fields());
+ return (HeapWord*)(cast_from_oop<intptr_t>(obj) + offset_of_static_fields());
}
static void init_offset_of_static_fields() {
--- a/hotspot/src/share/vm/oops/instanceRefKlass.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/oops/instanceRefKlass.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -51,7 +51,7 @@
T heap_oop = oopDesc::load_heap_oop(referent_addr);
debug_only(
if(TraceReferenceGC && PrintGCDetails) {
- gclog_or_tty->print_cr("InstanceRefKlass::oop_follow_contents " INTPTR_FORMAT, obj);
+ gclog_or_tty->print_cr("InstanceRefKlass::oop_follow_contents " INTPTR_FORMAT, (void *)obj);
}
)
if (!oopDesc::is_null(heap_oop)) {
@@ -62,7 +62,7 @@
ref->InstanceKlass::oop_follow_contents(obj);
debug_only(
if(TraceReferenceGC && PrintGCDetails) {
- gclog_or_tty->print_cr(" Non NULL enqueued " INTPTR_FORMAT, obj);
+ gclog_or_tty->print_cr(" Non NULL enqueued " INTPTR_FORMAT, (void *)obj);
}
)
return;
@@ -70,7 +70,7 @@
// treat referent as normal oop
debug_only(
if(TraceReferenceGC && PrintGCDetails) {
- gclog_or_tty->print_cr(" Non NULL normal " INTPTR_FORMAT, obj);
+ gclog_or_tty->print_cr(" Non NULL normal " INTPTR_FORMAT, (void *)obj);
}
)
MarkSweep::mark_and_push(referent_addr);
@@ -130,7 +130,7 @@
T heap_oop = oopDesc::load_heap_oop(referent_addr);
debug_only(
if(TraceReferenceGC && PrintGCDetails) {
- gclog_or_tty->print_cr("InstanceRefKlass::oop_follow_contents " INTPTR_FORMAT, obj);
+ gclog_or_tty->print_cr("InstanceRefKlass::oop_follow_contents " INTPTR_FORMAT, (void *)obj);
}
)
if (!oopDesc::is_null(heap_oop)) {
@@ -142,7 +142,7 @@
ref->InstanceKlass::oop_follow_contents(cm, obj);
debug_only(
if(TraceReferenceGC && PrintGCDetails) {
- gclog_or_tty->print_cr(" Non NULL enqueued " INTPTR_FORMAT, obj);
+ gclog_or_tty->print_cr(" Non NULL enqueued " INTPTR_FORMAT, (void *)obj);
}
)
return;
@@ -150,7 +150,7 @@
// treat referent as normal oop
debug_only(
if(TraceReferenceGC && PrintGCDetails) {
- gclog_or_tty->print_cr(" Non NULL normal " INTPTR_FORMAT, obj);
+ gclog_or_tty->print_cr(" Non NULL normal " INTPTR_FORMAT, (void *)obj);
}
)
PSParallelCompact::mark_and_push(cm, referent_addr);
--- a/hotspot/src/share/vm/oops/klassVtable.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/oops/klassVtable.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -292,9 +292,10 @@
return allocate_new;
}
- // private methods always have a new entry in the vtable
+ // private methods in classes always have a new entry in the vtable
// specification interpretation since classic has
// private methods not overriding
+ // JDK8 adds private methods in interfaces which require invokespecial
if (target_method()->is_private()) {
return allocate_new;
}
@@ -442,9 +443,10 @@
return true;
}
- // private methods always have a new entry in the vtable
+ // private methods in classes always have a new entry in the vtable
// specification interpretation since classic has
// private methods not overriding
+ // JDK8 adds private methods in interfaces which require invokespecial
if (target_method()->is_private()) {
return true;
}
@@ -520,7 +522,7 @@
Klass* method_holder = m->method_holder();
InstanceKlass *mhk = InstanceKlass::cast(method_holder);
- // miranda methods are interface methods in a class's vtable
+ // miranda methods are public abstract instance interface methods in a class's vtable
if (mhk->is_interface()) {
assert(m->is_public(), "should be public");
assert(ik()->implements_interface(method_holder) , "this class should implement the interface");
@@ -534,6 +536,8 @@
// "miranda" means not static, not defined by this class, and not defined
// in super unless it is private and therefore inaccessible to this class.
// the caller must make sure that the method belongs to an interface implemented by the class
+// Miranda methods only include public interface instance methods
+// Not private methods, not static methods, not default = concrete abstract
bool klassVtable::is_miranda(Method* m, Array<Method*>* class_methods, Klass* super) {
if (m->is_static()) {
return false;
--- a/hotspot/src/share/vm/oops/method.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/oops/method.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -901,16 +901,6 @@
// This function must not hit a safepoint!
address Method::verified_code_entry() {
debug_only(No_Safepoint_Verifier nsv;)
- nmethod *code = (nmethod *)OrderAccess::load_ptr_acquire(&_code);
- if (code == NULL && UseCodeCacheFlushing) {
- nmethod *saved_code = CodeCache::reanimate_saved_code(this);
- if (saved_code != NULL) {
- methodHandle method(this);
- assert( ! saved_code->is_osr_method(), "should not get here for osr" );
- set_code( method, saved_code );
- }
- }
-
assert(_from_compiled_entry != NULL, "must be set");
return _from_compiled_entry;
}
--- a/hotspot/src/share/vm/oops/methodData.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/oops/methodData.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -333,10 +333,10 @@
return (int)data()->cell_at(index);
}
void set_oop_at(int index, oop value) {
- set_intptr_at(index, (intptr_t) value);
+ set_intptr_at(index, cast_from_oop<intptr_t>(value));
}
oop oop_at(int index) {
- return (oop)intptr_at(index);
+ return cast_to_oop(intptr_at(index));
}
void set_flag_at(int flag_number) {
--- a/hotspot/src/share/vm/oops/oop.inline.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/oops/oop.inline.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -183,7 +183,7 @@
// in inner GC loops so these are separated.
inline bool check_obj_alignment(oop obj) {
- return (intptr_t)obj % MinObjAlignmentInBytes == 0;
+ return cast_from_oop<intptr_t>(obj) % MinObjAlignmentInBytes == 0;
}
inline narrowOop oopDesc::encode_heap_oop_not_null(oop v) {
--- a/hotspot/src/share/vm/oops/oopsHierarchy.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/oops/oopsHierarchy.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -55,11 +55,16 @@
// to and from the underlying oopDesc pointer type.
//
// Because oop and its subclasses <type>Oop are class types, arbitrary
-// conversions are not accepted by the compiler, and you may get a message
-// about overloading ambiguity (between long and int is common when converting
-// from a constant in 64 bit mode), or unable to convert from type to 'oop'.
-// Applying a cast to one of these conversion operators first will get to the
-// underlying oopDesc* type if appropriate.
+// conversions are not accepted by the compiler. Applying a cast to
+// an oop will cause the best matched conversion operator to be
+// invoked returning the underlying oopDesc* type if appropriate.
+// No copy constructors, explicit user conversions or operators of
+// numerical type should be defined within the oop class. Most C++
+// compilers will issue a compile time error concerning the overloading
+// ambiguity between operators of numerical and pointer types. If
+// a conversion to or from an oop to a numerical type is needed,
+// use the inline template methods, cast_*_oop, defined below.
+//
// Converting NULL to oop to Handle implicit is no longer accepted by the
// compiler because there are too many steps in the conversion. Use Handle()
// instead, which generates less code anyway.
@@ -83,12 +88,9 @@
void raw_set_obj(const void* p) { _o = (oopDesc*)p; }
oop() { set_obj(NULL); }
+ oop(const oop& o) { set_obj(o.obj()); }
oop(const volatile oop& o) { set_obj(o.obj()); }
oop(const void* p) { set_obj(p); }
- oop(intptr_t i) { set_obj((void *)i); }
-#ifdef _LP64
- oop(int i) { set_obj((void *)i); }
-#endif
~oop() {
if (CheckUnhandledOops) unregister_oop();
}
@@ -101,8 +103,6 @@
bool operator==(void *p) const { return obj() == p; }
bool operator!=(const volatile oop o) const { return obj() != o.obj(); }
bool operator!=(void *p) const { return obj() != p; }
- bool operator==(intptr_t p) const { return obj() == (oopDesc*)p; }
- bool operator!=(intptr_t p) const { return obj() != (oopDesc*)p; }
bool operator<(oop o) const { return obj() < o.obj(); }
bool operator>(oop o) const { return obj() > o.obj(); }
@@ -110,8 +110,18 @@
bool operator>=(oop o) const { return obj() >= o.obj(); }
bool operator!() const { return !obj(); }
- // Cast
+ // Assignment
+ oop& operator=(const oop& o) { _o = o.obj(); return *this; }
+#ifndef SOLARIS
+ volatile oop& operator=(const oop& o) volatile { _o = o.obj(); return *this; }
+#endif
+ volatile oop& operator=(const volatile oop& o) volatile { _o = o.obj(); return *this; }
+
+ // Explict user conversions
operator void* () const { return (void *)obj(); }
+#ifndef SOLARIS
+ operator void* () const volatile { return (void *)obj(); }
+#endif
operator HeapWord* () const { return (HeapWord*)obj(); }
operator oopDesc* () const { return obj(); }
operator intptr_t* () const { return (intptr_t*)obj(); }
@@ -119,7 +129,6 @@
operator markOop () const { return markOop(obj()); }
operator address () const { return (address)obj(); }
- operator intptr_t () const volatile { return (intptr_t)obj(); }
// from javaCalls.cpp
operator jobject () const { return (jobject)obj(); }
@@ -141,12 +150,26 @@
class type##Oop : public oop { \
public: \
type##Oop() : oop() {} \
+ type##Oop(const oop& o) : oop(o) {} \
type##Oop(const volatile oop& o) : oop(o) {} \
type##Oop(const void* p) : oop(p) {} \
operator type##OopDesc* () const { return (type##OopDesc*)obj(); } \
type##OopDesc* operator->() const { \
return (type##OopDesc*)obj(); \
} \
+ type##Oop& operator=(const type##Oop& o) { \
+ oop::operator=(o); \
+ return *this; \
+ } \
+ NOT_SOLARIS( \
+ volatile type##Oop& operator=(const type##Oop& o) volatile { \
+ (void)const_cast<oop&>(oop::operator=(o)); \
+ return *this; \
+ }) \
+ volatile type##Oop& operator=(const volatile type##Oop& o) volatile {\
+ (void)const_cast<oop&>(oop::operator=(o)); \
+ return *this; \
+ } \
};
DEF_OOP(instance);
@@ -156,6 +179,16 @@
#endif // CHECK_UNHANDLED_OOPS
+// For CHECK_UNHANDLED_OOPS, it is ambiguous C++ behavior to have the oop
+// structure contain explicit user defined conversions of both numerical
+// and pointer type. Define inline methods to provide the numerical conversions.
+template <class T> inline oop cast_to_oop(T value) {
+ return (oop)(CHECK_UNHANDLED_OOPS_ONLY((void *))(value));
+}
+template <class T> inline T cast_from_oop(oop o) {
+ return (T)(CHECK_UNHANDLED_OOPS_ONLY((void*))o);
+}
+
// The metadata hierarchy is separate from the oop hierarchy
// class MetaspaceObj
--- a/hotspot/src/share/vm/opto/bytecodeInfo.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/opto/bytecodeInfo.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -123,7 +123,7 @@
// Allows targeted inlining
if(callee_method->should_inline()) {
*wci_result = *(WarmCallInfo::always_hot());
- if (PrintInlining && Verbose) {
+ if (C->print_inlining() && Verbose) {
CompileTask::print_inline_indent(inline_level());
tty->print_cr("Inlined method is hot: ");
}
@@ -137,7 +137,7 @@
if(callee_method->interpreter_throwout_count() > InlineThrowCount &&
size < InlineThrowMaxSize ) {
wci_result->set_profit(wci_result->profit() * 100);
- if (PrintInlining && Verbose) {
+ if (C->print_inlining() && Verbose) {
CompileTask::print_inline_indent(inline_level());
tty->print_cr("Inlined method with many throws (throws=%d):", callee_method->interpreter_throwout_count());
}
@@ -491,7 +491,7 @@
C->log()->inline_fail(inline_msg);
}
}
- if (PrintInlining) {
+ if (C->print_inlining()) {
C->print_inlining(callee_method, inline_level(), caller_bci, inline_msg);
if (callee_method == NULL) tty->print(" callee not monotonic or profiled");
if (Verbose && callee_method) {
@@ -540,7 +540,7 @@
#ifndef PRODUCT
if (UseOldInlining && InlineWarmCalls
- && (PrintOpto || PrintOptoInlining || PrintInlining)) {
+ && (PrintOpto || C->print_inlining())) {
bool cold = wci.is_cold();
bool hot = !cold && wci.is_hot();
bool old_cold = !success;
@@ -617,7 +617,7 @@
callee_method->is_compiled_lambda_form()) {
max_inline_level_adjust += 1; // don't count method handle calls from java.lang.invoke implem
}
- if (max_inline_level_adjust != 0 && PrintInlining && (Verbose || WizardMode)) {
+ if (max_inline_level_adjust != 0 && C->print_inlining() && (Verbose || WizardMode)) {
CompileTask::print_inline_indent(inline_level());
tty->print_cr(" \\-> discounting inline depth");
}
--- a/hotspot/src/share/vm/opto/c2_globals.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/opto/c2_globals.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -636,7 +636,9 @@
\
diagnostic(bool, OptimizeExpensiveOps, true, \
"Find best control for expensive operations") \
-
+ \
+ product(bool, UseMathExactIntrinsics, true, \
+ "Enables intrinsification of various java.lang.Math funcitons")
C2_FLAGS(DECLARE_DEVELOPER_FLAG, DECLARE_PD_DEVELOPER_FLAG, DECLARE_PRODUCT_FLAG, DECLARE_PD_PRODUCT_FLAG, DECLARE_DIAGNOSTIC_FLAG, DECLARE_EXPERIMENTAL_FLAG, DECLARE_NOTPRODUCT_FLAG)
--- a/hotspot/src/share/vm/opto/callGenerator.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/opto/callGenerator.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -65,6 +65,8 @@
virtual bool is_predicted() const { return false; }
// is_trap: Does not return to the caller. (E.g., uncommon trap.)
virtual bool is_trap() const { return false; }
+ // does_virtual_dispatch: Should try inlining as normal method first.
+ virtual bool does_virtual_dispatch() const { return false; }
// is_late_inline: supports conversion of call into an inline
virtual bool is_late_inline() const { return false; }
@@ -159,8 +161,9 @@
virtual void print_inlining_late(const char* msg) { ShouldNotReachHere(); }
static void print_inlining(Compile* C, ciMethod* callee, int inline_level, int bci, const char* msg) {
- if (PrintInlining)
+ if (C->print_inlining()) {
C->print_inlining(callee, inline_level, bci, msg);
+ }
}
};
--- a/hotspot/src/share/vm/opto/classes.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/opto/classes.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -32,6 +32,7 @@
#include "opto/loopnode.hpp"
#include "opto/machnode.hpp"
#include "opto/memnode.hpp"
+#include "opto/mathexactnode.hpp"
#include "opto/mulnode.hpp"
#include "opto/multnode.hpp"
#include "opto/node.hpp"
--- a/hotspot/src/share/vm/opto/classes.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/opto/classes.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -29,6 +29,7 @@
macro(AbsF)
macro(AbsI)
macro(AddD)
+macro(AddExactI)
macro(AddF)
macro(AddI)
macro(AddL)
@@ -133,6 +134,7 @@
macro(ExpD)
macro(FastLock)
macro(FastUnlock)
+macro(FlagsProj)
macro(Goto)
macro(Halt)
macro(If)
@@ -167,6 +169,7 @@
macro(LoopLimit)
macro(Mach)
macro(MachProj)
+macro(MathExact)
macro(MaxI)
macro(MemBarAcquire)
macro(MemBarAcquireLock)
--- a/hotspot/src/share/vm/opto/compile.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/opto/compile.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -654,7 +654,7 @@
_inlining_progress(false),
_inlining_incrementally(false),
_print_inlining_list(NULL),
- _print_inlining(0) {
+ _print_inlining_idx(0) {
C = this;
CompileWrapper cw(this);
@@ -679,6 +679,8 @@
set_print_assembly(print_opto_assembly);
set_parsed_irreducible_loop(false);
#endif
+ set_print_inlining(PrintInlining || method()->has_option("PrintInlining") NOT_PRODUCT( || PrintOptoInlining));
+ set_print_intrinsics(PrintIntrinsics || method()->has_option("PrintIntrinsics"));
if (ProfileTraps) {
// Make sure the method being compiled gets its own MDO,
@@ -710,7 +712,7 @@
PhaseGVN gvn(node_arena(), estimated_size);
set_initial_gvn(&gvn);
- if (PrintInlining || PrintIntrinsics NOT_PRODUCT( || PrintOptoInlining)) {
+ if (print_inlining() || print_intrinsics()) {
_print_inlining_list = new (comp_arena())GrowableArray<PrintInliningBuffer>(comp_arena(), 1, 1, PrintInliningBuffer());
}
{ // Scope for timing the parser
@@ -937,7 +939,7 @@
_inlining_progress(false),
_inlining_incrementally(false),
_print_inlining_list(NULL),
- _print_inlining(0) {
+ _print_inlining_idx(0) {
C = this;
#ifndef PRODUCT
@@ -3611,7 +3613,7 @@
}
void Compile::dump_inlining() {
- if (PrintInlining || PrintIntrinsics NOT_PRODUCT( || PrintOptoInlining)) {
+ if (print_inlining() || print_intrinsics()) {
// Print inlining message for candidates that we couldn't inline
// for lack of space or non constant receiver
for (int i = 0; i < _late_inlines.length(); i++) {
@@ -3635,7 +3637,7 @@
}
}
for (int i = 0; i < _print_inlining_list->length(); i++) {
- tty->print(_print_inlining_list->at(i).ss()->as_string());
+ tty->print(_print_inlining_list->adr_at(i)->ss()->as_string());
}
}
}
--- a/hotspot/src/share/vm/opto/compile.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/opto/compile.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -312,6 +312,8 @@
bool _do_method_data_update; // True if we generate code to update MethodData*s
int _AliasLevel; // Locally-adjusted version of AliasLevel flag.
bool _print_assembly; // True if we should dump assembly code for this compilation
+ bool _print_inlining; // True if we should print inlining for this compilation
+ bool _print_intrinsics; // True if we should print intrinsics for this compilation
#ifndef PRODUCT
bool _trace_opto_output;
bool _parsed_irreducible_loop; // True if ciTypeFlow detected irreducible loops during parsing
@@ -414,7 +416,7 @@
};
GrowableArray<PrintInliningBuffer>* _print_inlining_list;
- int _print_inlining;
+ int _print_inlining_idx;
// Only keep nodes in the expensive node list that need to be optimized
void cleanup_expensive_nodes(PhaseIterGVN &igvn);
@@ -426,24 +428,24 @@
public:
outputStream* print_inlining_stream() const {
- return _print_inlining_list->at(_print_inlining).ss();
+ return _print_inlining_list->adr_at(_print_inlining_idx)->ss();
}
void print_inlining_skip(CallGenerator* cg) {
- if (PrintInlining) {
- _print_inlining_list->at(_print_inlining).set_cg(cg);
- _print_inlining++;
- _print_inlining_list->insert_before(_print_inlining, PrintInliningBuffer());
+ if (_print_inlining) {
+ _print_inlining_list->adr_at(_print_inlining_idx)->set_cg(cg);
+ _print_inlining_idx++;
+ _print_inlining_list->insert_before(_print_inlining_idx, PrintInliningBuffer());
}
}
void print_inlining_insert(CallGenerator* cg) {
- if (PrintInlining) {
+ if (_print_inlining) {
for (int i = 0; i < _print_inlining_list->length(); i++) {
- if (_print_inlining_list->at(i).cg() == cg) {
+ if (_print_inlining_list->adr_at(i)->cg() == cg) {
_print_inlining_list->insert_before(i+1, PrintInliningBuffer());
- _print_inlining = i+1;
- _print_inlining_list->at(i).set_cg(NULL);
+ _print_inlining_idx = i+1;
+ _print_inlining_list->adr_at(i)->set_cg(NULL);
return;
}
}
@@ -572,6 +574,10 @@
int AliasLevel() const { return _AliasLevel; }
bool print_assembly() const { return _print_assembly; }
void set_print_assembly(bool z) { _print_assembly = z; }
+ bool print_inlining() const { return _print_inlining; }
+ void set_print_inlining(bool z) { _print_inlining = z; }
+ bool print_intrinsics() const { return _print_intrinsics; }
+ void set_print_intrinsics(bool z) { _print_intrinsics = z; }
// check the CompilerOracle for special behaviours for this compile
bool method_has_option(const char * option) {
return method() != NULL && method()->has_option(option);
--- a/hotspot/src/share/vm/opto/doCall.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/opto/doCall.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -41,9 +41,9 @@
#include "runtime/sharedRuntime.hpp"
void trace_type_profile(Compile* C, ciMethod *method, int depth, int bci, ciMethod *prof_method, ciKlass *prof_klass, int site_count, int receiver_count) {
- if (TraceTypeProfile || PrintInlining NOT_PRODUCT(|| PrintOptoInlining)) {
+ if (TraceTypeProfile || C->print_inlining()) {
outputStream* out = tty;
- if (!PrintInlining) {
+ if (!C->print_inlining()) {
if (NOT_PRODUCT(!PrintOpto &&) !PrintCompilation) {
method->print_short_name();
tty->cr();
@@ -110,6 +110,7 @@
// then we return it as the inlined version of the call.
// We do this before the strict f.p. check below because the
// intrinsics handle strict f.p. correctly.
+ CallGenerator* cg_intrinsic = NULL;
if (allow_inline && allow_intrinsics) {
CallGenerator* cg = find_intrinsic(callee, call_does_dispatch);
if (cg != NULL) {
@@ -121,7 +122,16 @@
cg = CallGenerator::for_predicted_intrinsic(cg, inline_cg);
}
}
- return cg;
+
+ // If intrinsic does the virtual dispatch, we try to use the type profile
+ // first, and hopefully inline it as the regular virtual call below.
+ // We will retry the intrinsic if nothing had claimed it afterwards.
+ if (cg->does_virtual_dispatch()) {
+ cg_intrinsic = cg;
+ cg = NULL;
+ } else {
+ return cg;
+ }
}
}
@@ -266,6 +276,13 @@
}
}
+ // Nothing claimed the intrinsic, we go with straight-forward inlining
+ // for already discovered intrinsic.
+ if (allow_inline && allow_intrinsics && cg_intrinsic != NULL) {
+ assert(cg_intrinsic->does_virtual_dispatch(), "sanity");
+ return cg_intrinsic;
+ }
+
// There was no special inlining tactic, or it bailed out.
// Use a more generic tactic, like a simple call.
if (call_does_dispatch) {
--- a/hotspot/src/share/vm/opto/graphKit.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/opto/graphKit.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -3849,9 +3849,9 @@
const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(),
false, NULL, 0);
const TypePtr* value_field_type = string_type->add_offset(value_offset);
- int value_field_idx = C->get_alias_index(value_field_type);
- store_to_memory(ctrl, basic_plus_adr(str, value_offset),
- value, T_OBJECT, value_field_idx);
+
+ store_oop_to_object(ctrl, str, basic_plus_adr(str, value_offset), value_field_type,
+ value, TypeAryPtr::CHARS, T_OBJECT);
}
void GraphKit::store_String_length(Node* ctrl, Node* str, Node* value) {
--- a/hotspot/src/share/vm/opto/ifnode.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/opto/ifnode.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -76,6 +76,7 @@
if( !i1->is_Bool() ) return NULL;
BoolNode *b = i1->as_Bool();
Node *cmp = b->in(1);
+ if( cmp->is_FlagsProj() ) return NULL;
if( !cmp->is_Cmp() ) return NULL;
i1 = cmp->in(1);
if( i1 == NULL || !i1->is_Phi() ) return NULL;
--- a/hotspot/src/share/vm/opto/lcm.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/opto/lcm.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -472,6 +472,13 @@
break;
}
+ // For nodes that produce a FlagsProj, make the node adjacent to the
+ // use of the FlagsProj
+ if (use->is_FlagsProj() && get_block_for_node(use) == block) {
+ found_machif = true;
+ break;
+ }
+
// More than this instruction pending for successor to be ready,
// don't choose this if other opportunities are ready
if (ready_cnt.at(use->_idx) > 1)
--- a/hotspot/src/share/vm/opto/library_call.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/opto/library_call.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -32,6 +32,7 @@
#include "opto/callGenerator.hpp"
#include "opto/cfgnode.hpp"
#include "opto/idealKit.hpp"
+#include "opto/mathexactnode.hpp"
#include "opto/mulnode.hpp"
#include "opto/parse.hpp"
#include "opto/runtime.hpp"
@@ -46,19 +47,22 @@
private:
bool _is_virtual;
bool _is_predicted;
+ bool _does_virtual_dispatch;
vmIntrinsics::ID _intrinsic_id;
public:
- LibraryIntrinsic(ciMethod* m, bool is_virtual, bool is_predicted, vmIntrinsics::ID id)
+ LibraryIntrinsic(ciMethod* m, bool is_virtual, bool is_predicted, bool does_virtual_dispatch, vmIntrinsics::ID id)
: InlineCallGenerator(m),
_is_virtual(is_virtual),
_is_predicted(is_predicted),
+ _does_virtual_dispatch(does_virtual_dispatch),
_intrinsic_id(id)
{
}
virtual bool is_intrinsic() const { return true; }
virtual bool is_virtual() const { return _is_virtual; }
virtual bool is_predicted() const { return _is_predicted; }
+ virtual bool does_virtual_dispatch() const { return _does_virtual_dispatch; }
virtual JVMState* generate(JVMState* jvms);
virtual Node* generate_predicate(JVMState* jvms);
vmIntrinsics::ID intrinsic_id() const { return _intrinsic_id; }
@@ -199,6 +203,8 @@
bool inline_math_native(vmIntrinsics::ID id);
bool inline_trig(vmIntrinsics::ID id);
bool inline_math(vmIntrinsics::ID id);
+ bool inline_math_mathExact(Node* math);
+ bool inline_math_addExact();
bool inline_exp();
bool inline_pow();
void finish_pow_exp(Node* result, Node* x, Node* y, const TypeFunc* call_type, address funcAddr, const char* funcName);
@@ -352,6 +358,7 @@
}
bool is_predicted = false;
+ bool does_virtual_dispatch = false;
switch (id) {
case vmIntrinsics::_compareTo:
@@ -378,8 +385,10 @@
break;
case vmIntrinsics::_hashCode:
if (!InlineObjectHash) return NULL;
+ does_virtual_dispatch = true;
break;
case vmIntrinsics::_clone:
+ does_virtual_dispatch = true;
case vmIntrinsics::_copyOf:
case vmIntrinsics::_copyOfRange:
if (!InlineObjectCopy) return NULL;
@@ -498,6 +507,15 @@
if (!UseCRC32Intrinsics) return NULL;
break;
+ case vmIntrinsics::_addExact:
+ if (!Matcher::match_rule_supported(Op_AddExactI)) {
+ return NULL;
+ }
+ if (!UseMathExactIntrinsics) {
+ return NULL;
+ }
+ break;
+
default:
assert(id <= vmIntrinsics::LAST_COMPILER_INLINE, "caller responsibility");
assert(id != vmIntrinsics::_Object_init && id != vmIntrinsics::_invoke, "enum out of order?");
@@ -529,7 +547,7 @@
if (!InlineUnsafeOps) return NULL;
}
- return new LibraryIntrinsic(m, is_virtual, is_predicted, (vmIntrinsics::ID) id);
+ return new LibraryIntrinsic(m, is_virtual, is_predicted, does_virtual_dispatch, (vmIntrinsics::ID) id);
}
//----------------------register_library_intrinsics-----------------------
@@ -543,7 +561,7 @@
Compile* C = kit.C;
int nodes = C->unique();
#ifndef PRODUCT
- if ((PrintIntrinsics || PrintInlining NOT_PRODUCT( || PrintOptoInlining) ) && Verbose) {
+ if ((C->print_intrinsics() || C->print_inlining()) && Verbose) {
char buf[1000];
const char* str = vmIntrinsics::short_name_as_C_string(intrinsic_id(), buf, sizeof(buf));
tty->print_cr("Intrinsic %s", str);
@@ -554,7 +572,7 @@
// Try to inline the intrinsic.
if (kit.try_to_inline()) {
- if (PrintIntrinsics || PrintInlining NOT_PRODUCT( || PrintOptoInlining) ) {
+ if (C->print_intrinsics() || C->print_inlining()) {
C->print_inlining(callee, jvms->depth() - 1, bci, is_virtual() ? "(intrinsic, virtual)" : "(intrinsic)");
}
C->gather_intrinsic_statistics(intrinsic_id(), is_virtual(), Compile::_intrinsic_worked);
@@ -570,7 +588,7 @@
}
// The intrinsic bailed out
- if (PrintIntrinsics || PrintInlining NOT_PRODUCT( || PrintOptoInlining) ) {
+ if (C->print_intrinsics() || C->print_inlining()) {
if (jvms->has_method()) {
// Not a root compile.
const char* msg = is_virtual() ? "failed to inline (intrinsic, virtual)" : "failed to inline (intrinsic)";
@@ -592,7 +610,7 @@
int nodes = C->unique();
#ifndef PRODUCT
assert(is_predicted(), "sanity");
- if ((PrintIntrinsics || PrintInlining NOT_PRODUCT( || PrintOptoInlining) ) && Verbose) {
+ if ((C->print_intrinsics() || C->print_inlining()) && Verbose) {
char buf[1000];
const char* str = vmIntrinsics::short_name_as_C_string(intrinsic_id(), buf, sizeof(buf));
tty->print_cr("Predicate for intrinsic %s", str);
@@ -603,7 +621,7 @@
Node* slow_ctl = kit.try_to_predicate();
if (!kit.failing()) {
- if (PrintIntrinsics || PrintInlining NOT_PRODUCT( || PrintOptoInlining) ) {
+ if (C->print_intrinsics() || C->print_inlining()) {
C->print_inlining(callee, jvms->depth() - 1, bci, is_virtual() ? "(intrinsic, virtual)" : "(intrinsic)");
}
C->gather_intrinsic_statistics(intrinsic_id(), is_virtual(), Compile::_intrinsic_worked);
@@ -617,7 +635,7 @@
}
// The intrinsic bailed out
- if (PrintIntrinsics || PrintInlining NOT_PRODUCT( || PrintOptoInlining) ) {
+ if (C->print_intrinsics() || C->print_inlining()) {
if (jvms->has_method()) {
// Not a root compile.
const char* msg = "failed to generate predicate for intrinsic";
@@ -668,6 +686,8 @@
case vmIntrinsics::_min:
case vmIntrinsics::_max: return inline_min_max(intrinsic_id());
+ case vmIntrinsics::_addExact: return inline_math_addExact();
+
case vmIntrinsics::_arraycopy: return inline_arraycopy();
case vmIntrinsics::_compareTo: return inline_string_compareTo();
@@ -1911,6 +1931,45 @@
return true;
}
+bool LibraryCallKit::inline_math_mathExact(Node* math) {
+ Node* result = _gvn.transform( new(C) ProjNode(math, MathExactNode::result_proj_node));
+ Node* flags = _gvn.transform( new(C) FlagsProjNode(math, MathExactNode::flags_proj_node));
+
+ Node* bol = _gvn.transform( new (C) BoolNode(flags, BoolTest::overflow) );
+ IfNode* check = create_and_map_if(control(), bol, PROB_UNLIKELY_MAG(3), COUNT_UNKNOWN);
+ Node* fast_path = _gvn.transform( new (C) IfFalseNode(check));
+ Node* slow_path = _gvn.transform( new (C) IfTrueNode(check) );
+
+ {
+ PreserveJVMState pjvms(this);
+ PreserveReexecuteState preexecs(this);
+ jvms()->set_should_reexecute(true);
+
+ set_control(slow_path);
+ set_i_o(i_o());
+
+ uncommon_trap(Deoptimization::Reason_intrinsic,
+ Deoptimization::Action_none);
+ }
+
+ set_control(fast_path);
+ set_result(result);
+ return true;
+}
+
+bool LibraryCallKit::inline_math_addExact() {
+ Node* arg1 = argument(0);
+ Node* arg2 = argument(1);
+
+ Node* add = _gvn.transform( new(C) AddExactINode(NULL, arg1, arg2) );
+ if (add->Opcode() == Op_AddExactI) {
+ return inline_math_mathExact(add);
+ } else {
+ set_result(add);
+ }
+ return true;
+}
+
Node*
LibraryCallKit::generate_min_max(vmIntrinsics::ID id, Node* x0, Node* y0) {
// These are the candidate return value:
@@ -2299,7 +2358,7 @@
const TypeOopPtr* tjp = TypeOopPtr::make_from_klass(sharpened_klass);
#ifndef PRODUCT
- if (PrintIntrinsics || PrintInlining || PrintOptoInlining) {
+ if (C->print_intrinsics() || C->print_inlining()) {
tty->print(" from base type: "); adr_type->dump();
tty->print(" sharpened value: "); tjp->dump();
}
@@ -3260,7 +3319,7 @@
if (mirror_con == NULL) return false; // cannot happen?
#ifndef PRODUCT
- if (PrintIntrinsics || PrintInlining || PrintOptoInlining) {
+ if (C->print_intrinsics() || C->print_inlining()) {
ciType* k = mirror_con->java_mirror_type();
if (k) {
tty->print("Inlining %s on constant Class ", vmIntrinsics::name_at(intrinsic_id()));
@@ -3952,14 +4011,14 @@
// caller sensitive methods.
bool LibraryCallKit::inline_native_Reflection_getCallerClass() {
#ifndef PRODUCT
- if ((PrintIntrinsics || PrintInlining || PrintOptoInlining) && Verbose) {
+ if ((C->print_intrinsics() || C->print_inlining()) && Verbose) {
tty->print_cr("Attempting to inline sun.reflect.Reflection.getCallerClass");
}
#endif
if (!jvms()->has_method()) {
#ifndef PRODUCT
- if ((PrintIntrinsics || PrintInlining || PrintOptoInlining) && Verbose) {
+ if ((C->print_intrinsics() || C->print_inlining()) && Verbose) {
tty->print_cr(" Bailing out because intrinsic was inlined at top level");
}
#endif
@@ -3983,7 +4042,7 @@
// Frame 0 and 1 must be caller sensitive (see JVM_GetCallerClass).
if (!m->caller_sensitive()) {
#ifndef PRODUCT
- if ((PrintIntrinsics || PrintInlining || PrintOptoInlining) && Verbose) {
+ if ((C->print_intrinsics() || C->print_inlining()) && Verbose) {
tty->print_cr(" Bailing out: CallerSensitive annotation expected at frame %d", n);
}
#endif
@@ -3999,7 +4058,7 @@
set_result(makecon(TypeInstPtr::make(caller_mirror)));
#ifndef PRODUCT
- if ((PrintIntrinsics || PrintInlining || PrintOptoInlining) && Verbose) {
+ if ((C->print_intrinsics() || C->print_inlining()) && Verbose) {
tty->print_cr(" Succeeded: caller = %d) %s.%s, JVMS depth = %d", n, caller_klass->name()->as_utf8(), caller_jvms->method()->name()->as_utf8(), jvms()->depth());
tty->print_cr(" JVM state at this point:");
for (int i = jvms()->depth(), n = 1; i >= 1; i--, n++) {
@@ -4015,7 +4074,7 @@
}
#ifndef PRODUCT
- if ((PrintIntrinsics || PrintInlining || PrintOptoInlining) && Verbose) {
+ if ((C->print_intrinsics() || C->print_inlining()) && Verbose) {
tty->print_cr(" Bailing out because caller depth exceeded inlining depth = %d", jvms()->depth());
tty->print_cr(" JVM state at this point:");
for (int i = jvms()->depth(), n = 1; i >= 1; i--, n++) {
--- a/hotspot/src/share/vm/opto/loopTransform.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/opto/loopTransform.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -776,6 +776,9 @@
continue; // not RC
Node *cmp = bol->in(1);
+ if (cmp->is_FlagsProj()) {
+ continue;
+ }
Node *rc_exp = cmp->in(1);
Node *limit = cmp->in(2);
--- a/hotspot/src/share/vm/opto/loopopts.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/opto/loopopts.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -2355,7 +2355,8 @@
opc == Op_Catch ||
opc == Op_CatchProj ||
opc == Op_Jump ||
- opc == Op_JumpProj) {
+ opc == Op_JumpProj ||
+ opc == Op_FlagsProj) {
#if !defined(PRODUCT)
if (TracePartialPeeling) {
tty->print_cr("\nExit control too complex: lp: %d", head->_idx);
--- a/hotspot/src/share/vm/opto/machnode.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/opto/machnode.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -341,7 +341,7 @@
return TypePtr::BOTTOM;
}
// %%% make offset be intptr_t
- assert(!Universe::heap()->is_in_reserved((oop)offset), "must be a raw ptr");
+ assert(!Universe::heap()->is_in_reserved(cast_to_oop(offset)), "must be a raw ptr");
return TypeRawPtr::BOTTOM;
}
--- a/hotspot/src/share/vm/opto/matcher.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/opto/matcher.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1964,6 +1964,7 @@
case Op_Catch:
case Op_CatchProj:
case Op_CProj:
+ case Op_FlagsProj:
case Op_JumpProj:
case Op_JProj:
case Op_NeverBranch:
--- a/hotspot/src/share/vm/opto/matcher.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/opto/matcher.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -337,6 +337,9 @@
// Register for MODL projection of divmodL
static RegMask modL_proj_mask();
+ static const RegMask mathExactI_result_proj_mask();
+ static const RegMask mathExactI_flags_proj_mask();
+
// Use hardware DIV instruction when it is faster than
// a code which use multiply for division by constant.
static bool use_asm_for_ldiv_by_con( jlong divisor );
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/src/share/vm/opto/mathexactnode.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+#include "precompiled.hpp"
+#include "memory/allocation.inline.hpp"
+#include "opto/addnode.hpp"
+#include "opto/machnode.hpp"
+#include "opto/mathexactnode.hpp"
+#include "opto/matcher.hpp"
+#include "opto/subnode.hpp"
+
+MathExactNode::MathExactNode(Node* ctrl, Node* n1, Node* n2) : MultiNode(3) {
+ init_req(0, ctrl);
+ init_req(1, n1);
+ init_req(2, n2);
+}
+
+Node* AddExactINode::match(const ProjNode* proj, const Matcher* m) {
+ uint ideal_reg = proj->ideal_reg();
+ RegMask rm;
+ if (proj->_con == result_proj_node) {
+ rm = m->mathExactI_result_proj_mask();
+ } else {
+ assert(proj->_con == flags_proj_node, "must be result or flags");
+ assert(ideal_reg == Op_RegFlags, "sanity");
+ rm = m->mathExactI_flags_proj_mask();
+ }
+ return new (m->C) MachProjNode(this, proj->_con, rm, ideal_reg);
+}
+
+// If the MathExactNode won't overflow we have to replace the
+// FlagsProjNode and ProjNode that is generated by the MathExactNode
+Node* MathExactNode::no_overflow(PhaseGVN *phase, Node* new_result) {
+ PhaseIterGVN *igvn = phase->is_IterGVN();
+ if (igvn) {
+ ProjNode* result = result_node();
+ ProjNode* flags = flags_node();
+
+ if (result != NULL) {
+ igvn->replace_node(result, new_result);
+ }
+
+ if (flags != NULL) {
+ BoolNode* bolnode = (BoolNode *) flags->unique_out();
+ switch (bolnode->_test._test) {
+ case BoolTest::overflow:
+ // if the check is for overflow - never taken
+ igvn->replace_node(bolnode, phase->intcon(0));
+ break;
+ case BoolTest::no_overflow:
+ // if the check is for no overflow - always taken
+ igvn->replace_node(bolnode, phase->intcon(1));
+ break;
+ default:
+ fatal("Unexpected value of BoolTest");
+ break;
+ }
+ flags->del_req(0);
+ }
+ }
+ return new_result;
+}
+
+Node *AddExactINode::Ideal(PhaseGVN *phase, bool can_reshape) {
+ Node *arg1 = in(1);
+ Node *arg2 = in(2);
+
+ const Type* type1 = phase->type(arg1);
+ const Type* type2 = phase->type(arg2);
+
+ if (type1 != Type::TOP && type1->singleton() &&
+ type2 != Type::TOP && type2->singleton()) {
+ jint val1 = arg1->get_int();
+ jint val2 = arg2->get_int();
+ jint result = val1 + val2;
+ // Hacker's Delight 2-12 Overflow if both arguments have the opposite sign of the result
+ if ( (((val1 ^ result) & (val2 ^ result)) >= 0)) {
+ Node* con_result = ConINode::make(phase->C, result);
+ return no_overflow(phase, con_result);
+ }
+ return NULL;
+ }
+
+ if (type1 == TypeInt::ZERO) { // (Add 0 x) == x
+ Node* add_result = new (phase->C) AddINode(arg1, arg2);
+ return no_overflow(phase, add_result);
+ }
+
+ if (type2 == TypeInt::ZERO) { // (Add x 0) == x
+ Node* add_result = new (phase->C) AddINode(arg1, arg2);
+ return no_overflow(phase, add_result);
+ }
+
+ if (type2->singleton()) {
+ return NULL; // no change - keep constant on the right
+ }
+
+ if (type1->singleton()) {
+ // Make it x + Constant - move constant to the right
+ swap_edges(1, 2);
+ return this;
+ }
+
+ if (arg2->is_Load()) {
+ return NULL; // no change - keep load on the right
+ }
+
+ if (arg1->is_Load()) {
+ // Make it x + Load - move load to the right
+ swap_edges(1, 2);
+ return this;
+ }
+
+ if (arg1->_idx > arg2->_idx) {
+ // Sort the edges
+ swap_edges(1, 2);
+ return this;
+ }
+
+ return NULL;
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/src/share/vm/opto/mathexactnode.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+#ifndef SHARE_VM_OPTO_MATHEXACTNODE_HPP
+#define SHARE_VM_OPTO_MATHEXACTNODE_HPP
+
+#include "opto/multnode.hpp"
+#include "opto/node.hpp"
+#include "opto/type.hpp"
+
+class Node;
+
+class PhaseGVN;
+class PhaseTransform;
+
+class MathExactNode : public MultiNode {
+public:
+ MathExactNode(Node* ctrl, Node* in1, Node* in2);
+ enum {
+ result_proj_node = 0,
+ flags_proj_node = 1
+ };
+ virtual int Opcode() const;
+ virtual Node* Identity(PhaseTransform* phase) { return this; }
+ virtual Node* Ideal(PhaseGVN* phase, bool can_reshape) { return NULL; }
+ virtual const Type* Value(PhaseTransform* phase) const { return bottom_type(); }
+ virtual uint hash() const { return Node::hash(); }
+ virtual bool is_CFG() const { return false; }
+ virtual uint ideal_reg() const { return NotAMachineReg; }
+
+ ProjNode* result_node() { return proj_out(result_proj_node); }
+ ProjNode* flags_node() { return proj_out(flags_proj_node); }
+protected:
+ Node* no_overflow(PhaseGVN *phase, Node* new_result);
+};
+
+class AddExactINode : public MathExactNode {
+public:
+ AddExactINode(Node* ctrl, Node* in1, Node* in2) : MathExactNode(ctrl, in1, in2) {}
+ virtual int Opcode() const;
+ virtual const Type* bottom_type() const { return TypeTuple::INT_CC_PAIR; }
+ virtual Node* match(const ProjNode* proj, const Matcher* m);
+ virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
+};
+
+class FlagsProjNode : public ProjNode {
+public:
+ FlagsProjNode(Node* src, uint con) : ProjNode(src, con) {
+ init_class_id(Class_FlagsProj);
+ }
+
+ virtual int Opcode() const;
+ virtual bool is_CFG() const { return false; }
+ virtual const Type* bottom_type() const { return TypeInt::CC; }
+ virtual uint ideal_reg() const { return Op_RegFlags; }
+};
+
+
+#endif
+
--- a/hotspot/src/share/vm/opto/multnode.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/opto/multnode.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -25,6 +25,7 @@
#include "precompiled.hpp"
#include "opto/callnode.hpp"
#include "opto/matcher.hpp"
+#include "opto/mathexactnode.hpp"
#include "opto/multnode.hpp"
#include "opto/opcodes.hpp"
#include "opto/phaseX.hpp"
@@ -46,15 +47,21 @@
assert(Opcode() != Op_If || outcnt() == 2, "bad if #1");
for( DUIterator_Fast imax, i = fast_outs(imax); i < imax; i++ ) {
Node *p = fast_out(i);
- if( !p->is_Proj() ) {
+ if (p->is_Proj()) {
+ ProjNode *proj = p->as_Proj();
+ if (proj->_con == which_proj) {
+ assert(Opcode() != Op_If || proj->Opcode() == (which_proj?Op_IfTrue:Op_IfFalse), "bad if #2");
+ return proj;
+ }
+ } else if (p->is_FlagsProj()) {
+ FlagsProjNode *proj = p->as_FlagsProj();
+ if (proj->_con == which_proj) {
+ return proj;
+ }
+ } else {
assert(p == this && this->is_Start(), "else must be proj");
continue;
}
- ProjNode *proj = p->as_Proj();
- if( proj->_con == which_proj ) {
- assert(Opcode() != Op_If || proj->Opcode() == (which_proj?Op_IfTrue:Op_IfFalse), "bad if #2");
- return proj;
- }
}
return NULL;
}
--- a/hotspot/src/share/vm/opto/node.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/opto/node.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -69,6 +69,7 @@
class EncodePKlassNode;
class FastLockNode;
class FastUnlockNode;
+class FlagsProjNode;
class IfNode;
class IfFalseNode;
class IfTrueNode;
@@ -623,6 +624,7 @@
DEFINE_CLASS_ID(Cmp, Sub, 0)
DEFINE_CLASS_ID(FastLock, Cmp, 0)
DEFINE_CLASS_ID(FastUnlock, Cmp, 1)
+ DEFINE_CLASS_ID(FlagsProj, Cmp, 2)
DEFINE_CLASS_ID(MergeMem, Node, 7)
DEFINE_CLASS_ID(Bool, Node, 8)
@@ -726,6 +728,7 @@
DEFINE_CLASS_QUERY(EncodePKlass)
DEFINE_CLASS_QUERY(FastLock)
DEFINE_CLASS_QUERY(FastUnlock)
+ DEFINE_CLASS_QUERY(FlagsProj)
DEFINE_CLASS_QUERY(If)
DEFINE_CLASS_QUERY(IfFalse)
DEFINE_CLASS_QUERY(IfTrue)
--- a/hotspot/src/share/vm/opto/subnode.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/opto/subnode.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1064,7 +1064,7 @@
// Print special per-node info
#ifndef PRODUCT
void BoolTest::dump_on(outputStream *st) const {
- const char *msg[] = {"eq","gt","??","lt","ne","le","??","ge"};
+ const char *msg[] = {"eq","gt","of","lt","ne","le","nof","ge"};
st->print(msg[_test]);
}
#endif
@@ -1126,7 +1126,7 @@
Node *cmp = in(1);
if( !cmp->is_Sub() ) return NULL;
int cop = cmp->Opcode();
- if( cop == Op_FastLock || cop == Op_FastUnlock ) return NULL;
+ if( cop == Op_FastLock || cop == Op_FastUnlock || cop == Op_FlagsProj) return NULL;
Node *cmp1 = cmp->in(1);
Node *cmp2 = cmp->in(2);
if( !cmp1 ) return NULL;
--- a/hotspot/src/share/vm/opto/subnode.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/opto/subnode.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -263,16 +263,16 @@
// We pick the values as 3 bits; the low order 2 bits we compare against the
// condition codes, the high bit flips the sense of the result.
struct BoolTest VALUE_OBJ_CLASS_SPEC {
- enum mask { eq = 0, ne = 4, le = 5, ge = 7, lt = 3, gt = 1, illegal = 8 };
+ enum mask { eq = 0, ne = 4, le = 5, ge = 7, lt = 3, gt = 1, overflow = 2, no_overflow = 6, illegal = 8 };
mask _test;
BoolTest( mask btm ) : _test(btm) {}
const Type *cc2logical( const Type *CC ) const;
// Commute the test. I use a small table lookup. The table is created as
// a simple char array where each element is the ASCII version of a 'mask'
// enum from above.
- mask commute( ) const { return mask("038147858"[_test]-'0'); }
+ mask commute( ) const { return mask("032147658"[_test]-'0'); }
mask negate( ) const { return mask(_test^4); }
- bool is_canonical( ) const { return (_test == BoolTest::ne || _test == BoolTest::lt || _test == BoolTest::le); }
+ bool is_canonical( ) const { return (_test == BoolTest::ne || _test == BoolTest::lt || _test == BoolTest::le || _test == BoolTest::overflow); }
#ifndef PRODUCT
void dump_on(outputStream *st) const;
#endif
--- a/hotspot/src/share/vm/opto/type.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/opto/type.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -430,6 +430,11 @@
longpair[1] = TypeLong::LONG;
TypeTuple::LONG_PAIR = TypeTuple::make(2, longpair);
+ const Type **intccpair = TypeTuple::fields(2);
+ intccpair[0] = TypeInt::INT;
+ intccpair[1] = TypeInt::CC;
+ TypeTuple::INT_CC_PAIR = TypeTuple::make(2, intccpair);
+
_const_basic_type[T_NARROWOOP] = TypeNarrowOop::BOTTOM;
_const_basic_type[T_NARROWKLASS] = Type::BOTTOM;
_const_basic_type[T_BOOLEAN] = TypeInt::BOOL;
@@ -1646,6 +1651,7 @@
const TypeTuple *TypeTuple::START_I2C;
const TypeTuple *TypeTuple::INT_PAIR;
const TypeTuple *TypeTuple::LONG_PAIR;
+const TypeTuple *TypeTuple::INT_CC_PAIR;
//------------------------------make-------------------------------------------
--- a/hotspot/src/share/vm/opto/type.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/opto/type.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -584,6 +584,7 @@
static const TypeTuple *START_I2C;
static const TypeTuple *INT_PAIR;
static const TypeTuple *LONG_PAIR;
+ static const TypeTuple *INT_CC_PAIR;
#ifndef PRODUCT
virtual void dump2( Dict &d, uint, outputStream *st ) const; // Specialized per-Type dumping
#endif
--- a/hotspot/src/share/vm/prims/jni.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/prims/jni.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -5046,7 +5046,10 @@
void TestReservedSpace_test();
void TestReserveMemorySpecial_test();
void TestVirtualSpace_test();
-void MetaspaceAux_test();
+void TestMetaspaceAux_test();
+#if INCLUDE_ALL_GCS
+void TestG1BiasedArray_test();
+#endif
void execute_internal_vm_tests() {
if (ExecuteInternalVMTests) {
@@ -5054,7 +5057,7 @@
run_unit_test(TestReservedSpace_test());
run_unit_test(TestReserveMemorySpecial_test());
run_unit_test(TestVirtualSpace_test());
- run_unit_test(MetaspaceAux_test());
+ run_unit_test(TestMetaspaceAux_test());
run_unit_test(GlobalDefinitions::test_globals());
run_unit_test(GCTimerAllTest::all());
run_unit_test(arrayOopDesc::test_max_array_length());
@@ -5066,6 +5069,7 @@
run_unit_test(VMStructs::test());
#endif
#if INCLUDE_ALL_GCS
+ run_unit_test(TestG1BiasedArray_test());
run_unit_test(HeapRegionRemSet::test_prt());
#endif
tty->print_cr("All internal VM tests passed");
--- a/hotspot/src/share/vm/prims/jvm.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/prims/jvm.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1835,16 +1835,27 @@
}
JVM_END
-JVM_ENTRY(jobjectArray, JVM_GetClassDeclaredMethods(JNIEnv *env, jclass ofClass, jboolean publicOnly))
-{
- JVMWrapper("JVM_GetClassDeclaredMethods");
+static bool select_method(methodHandle method, bool want_constructor) {
+ if (want_constructor) {
+ return (method->is_initializer() && !method->is_static());
+ } else {
+ return (!method->is_initializer() && !method->is_overpass());
+ }
+}
+
+static jobjectArray get_class_declared_methods_helper(
+ JNIEnv *env,
+ jclass ofClass, jboolean publicOnly,
+ bool want_constructor,
+ Klass* klass, TRAPS) {
+
JvmtiVMObjectAllocEventCollector oam;
// Exclude primitive types and array types
if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass))
|| java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->oop_is_array()) {
// Return empty array
- oop res = oopFactory::new_objArray(SystemDictionary::reflect_Method_klass(), 0, CHECK_NULL);
+ oop res = oopFactory::new_objArray(klass, 0, CHECK_NULL);
return (jobjectArray) JNIHandles::make_local(env, res);
}
@@ -1855,87 +1866,67 @@
Array<Method*>* methods = k->methods();
int methods_length = methods->length();
+
+ // Save original method_idnum in case of redefinition, which can change
+ // the idnum of obsolete methods. The new method will have the same idnum
+ // but if we refresh the methods array, the counts will be wrong.
+ ResourceMark rm(THREAD);
+ GrowableArray<int>* idnums = new GrowableArray<int>(methods_length);
int num_methods = 0;
- int i;
- for (i = 0; i < methods_length; i++) {
+ for (int i = 0; i < methods_length; i++) {
methodHandle method(THREAD, methods->at(i));
- if (!method->is_initializer() && !method->is_overpass()) {
+ if (select_method(method, want_constructor)) {
if (!publicOnly || method->is_public()) {
+ idnums->push(method->method_idnum());
++num_methods;
}
}
}
// Allocate result
- objArrayOop r = oopFactory::new_objArray(SystemDictionary::reflect_Method_klass(), num_methods, CHECK_NULL);
+ objArrayOop r = oopFactory::new_objArray(klass, num_methods, CHECK_NULL);
objArrayHandle result (THREAD, r);
- int out_idx = 0;
- for (i = 0; i < methods_length; i++) {
- methodHandle method(THREAD, methods->at(i));
- if (!method->is_initializer() && !method->is_overpass()) {
- if (!publicOnly || method->is_public()) {
- oop m = Reflection::new_method(method, UseNewReflection, false, CHECK_NULL);
- result->obj_at_put(out_idx, m);
- ++out_idx;
+ // Now just put the methods that we selected above, but go by their idnum
+ // in case of redefinition. The methods can be redefined at any safepoint,
+ // so above when allocating the oop array and below when creating reflect
+ // objects.
+ for (int i = 0; i < num_methods; i++) {
+ methodHandle method(THREAD, k->method_with_idnum(idnums->at(i)));
+ if (method.is_null()) {
+ // Method may have been deleted and seems this API can handle null
+ // Otherwise should probably put a method that throws NSME
+ result->obj_at_put(i, NULL);
+ } else {
+ oop m;
+ if (want_constructor) {
+ m = Reflection::new_constructor(method, CHECK_NULL);
+ } else {
+ m = Reflection::new_method(method, UseNewReflection, false, CHECK_NULL);
}
+ result->obj_at_put(i, m);
}
}
- assert(out_idx == num_methods, "just checking");
+
return (jobjectArray) JNIHandles::make_local(env, result());
}
+
+JVM_ENTRY(jobjectArray, JVM_GetClassDeclaredMethods(JNIEnv *env, jclass ofClass, jboolean publicOnly))
+{
+ JVMWrapper("JVM_GetClassDeclaredMethods");
+ return get_class_declared_methods_helper(env, ofClass, publicOnly,
+ /*want_constructor*/ false,
+ SystemDictionary::reflect_Method_klass(), THREAD);
+}
JVM_END
JVM_ENTRY(jobjectArray, JVM_GetClassDeclaredConstructors(JNIEnv *env, jclass ofClass, jboolean publicOnly))
{
JVMWrapper("JVM_GetClassDeclaredConstructors");
- JvmtiVMObjectAllocEventCollector oam;
-
- // Exclude primitive types and array types
- if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass))
- || java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->oop_is_array()) {
- // Return empty array
- oop res = oopFactory::new_objArray(SystemDictionary::reflect_Constructor_klass(), 0 , CHECK_NULL);
- return (jobjectArray) JNIHandles::make_local(env, res);
- }
-
- instanceKlassHandle k(THREAD, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)));
-
- // Ensure class is linked
- k->link_class(CHECK_NULL);
-
- Array<Method*>* methods = k->methods();
- int methods_length = methods->length();
- int num_constructors = 0;
-
- int i;
- for (i = 0; i < methods_length; i++) {
- methodHandle method(THREAD, methods->at(i));
- if (method->is_initializer() && !method->is_static()) {
- if (!publicOnly || method->is_public()) {
- ++num_constructors;
- }
- }
- }
-
- // Allocate result
- objArrayOop r = oopFactory::new_objArray(SystemDictionary::reflect_Constructor_klass(), num_constructors, CHECK_NULL);
- objArrayHandle result(THREAD, r);
-
- int out_idx = 0;
- for (i = 0; i < methods_length; i++) {
- methodHandle method(THREAD, methods->at(i));
- if (method->is_initializer() && !method->is_static()) {
- if (!publicOnly || method->is_public()) {
- oop m = Reflection::new_constructor(method, CHECK_NULL);
- result->obj_at_put(out_idx, m);
- ++out_idx;
- }
- }
- }
- assert(out_idx == num_constructors, "just checking");
- return (jobjectArray) JNIHandles::make_local(env, result());
+ return get_class_declared_methods_helper(env, ofClass, publicOnly,
+ /*want_constructor*/ true,
+ SystemDictionary::reflect_Constructor_klass(), THREAD);
}
JVM_END
@@ -4235,13 +4226,13 @@
JVM_LEAF(jboolean, JVM_AccessVMBooleanFlag(const char* name, jboolean* value, jboolean is_get))
JVMWrapper("JVM_AccessBoolVMFlag");
- return is_get ? CommandLineFlags::boolAt((char*) name, (bool*) value) : CommandLineFlags::boolAtPut((char*) name, (bool*) value, INTERNAL);
+ return is_get ? CommandLineFlags::boolAt((char*) name, (bool*) value) : CommandLineFlags::boolAtPut((char*) name, (bool*) value, Flag::INTERNAL);
JVM_END
JVM_LEAF(jboolean, JVM_AccessVMIntFlag(const char* name, jint* value, jboolean is_get))
JVMWrapper("JVM_AccessVMIntFlag");
intx v;
- jboolean result = is_get ? CommandLineFlags::intxAt((char*) name, &v) : CommandLineFlags::intxAtPut((char*) name, &v, INTERNAL);
+ jboolean result = is_get ? CommandLineFlags::intxAt((char*) name, &v) : CommandLineFlags::intxAtPut((char*) name, &v, Flag::INTERNAL);
*value = (jint)v;
return result;
JVM_END
--- a/hotspot/src/share/vm/prims/jvmtiEnvBase.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/prims/jvmtiEnvBase.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -406,7 +406,11 @@
VMOp_Type type() const { return VMOp_GetCurrentContendedMonitor; }
jvmtiError result() { return _result; }
void doit() {
- _result = ((JvmtiEnvBase *)_env)->get_current_contended_monitor(_calling_thread,_java_thread,_owned_monitor_ptr);
+ _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
+ if (Threads::includes(_java_thread) && !_java_thread->is_exiting() &&
+ _java_thread->threadObj() != NULL) {
+ _result = ((JvmtiEnvBase *)_env)->get_current_contended_monitor(_calling_thread,_java_thread,_owned_monitor_ptr);
+ }
}
};
--- a/hotspot/src/share/vm/prims/jvmtiImpl.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/prims/jvmtiImpl.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -273,59 +273,49 @@
// add/remove breakpoint to/from versions of the method that
// are EMCP. Directly or transitively obsolete methods are
- // not saved in the PreviousVersionInfo.
+ // not saved in the PreviousVersionNodes.
Thread *thread = Thread::current();
instanceKlassHandle ikh = instanceKlassHandle(thread, _method->method_holder());
Symbol* m_name = _method->name();
Symbol* m_signature = _method->signature();
- {
- ResourceMark rm(thread);
- // PreviousVersionInfo objects returned via PreviousVersionWalker
- // contain a GrowableArray of handles. We have to clean up the
- // GrowableArray _after_ the PreviousVersionWalker destructor
- // has destroyed the handles.
- {
- // search previous versions if they exist
- PreviousVersionWalker pvw((InstanceKlass *)ikh());
- for (PreviousVersionInfo * pv_info = pvw.next_previous_version();
- pv_info != NULL; pv_info = pvw.next_previous_version()) {
- GrowableArray<methodHandle>* methods =
- pv_info->prev_EMCP_method_handles();
+ // search previous versions if they exist
+ PreviousVersionWalker pvw(thread, (InstanceKlass *)ikh());
+ for (PreviousVersionNode * pv_node = pvw.next_previous_version();
+ pv_node != NULL; pv_node = pvw.next_previous_version()) {
+ GrowableArray<Method*>* methods = pv_node->prev_EMCP_methods();
- if (methods == NULL) {
- // We have run into a PreviousVersion generation where
- // all methods were made obsolete during that generation's
- // RedefineClasses() operation. At the time of that
- // operation, all EMCP methods were flushed so we don't
- // have to go back any further.
- //
- // A NULL methods array is different than an empty methods
- // array. We cannot infer any optimizations about older
- // generations from an empty methods array for the current
- // generation.
- break;
- }
+ if (methods == NULL) {
+ // We have run into a PreviousVersion generation where
+ // all methods were made obsolete during that generation's
+ // RedefineClasses() operation. At the time of that
+ // operation, all EMCP methods were flushed so we don't
+ // have to go back any further.
+ //
+ // A NULL methods array is different than an empty methods
+ // array. We cannot infer any optimizations about older
+ // generations from an empty methods array for the current
+ // generation.
+ break;
+ }
- for (int i = methods->length() - 1; i >= 0; i--) {
- methodHandle method = methods->at(i);
- // obsolete methods that are running are not deleted from
- // previous version array, but they are skipped here.
- if (!method->is_obsolete() &&
- method->name() == m_name &&
- method->signature() == m_signature) {
- RC_TRACE(0x00000800, ("%sing breakpoint in %s(%s)",
- meth_act == &Method::set_breakpoint ? "sett" : "clear",
- method->name()->as_C_string(),
- method->signature()->as_C_string()));
+ for (int i = methods->length() - 1; i >= 0; i--) {
+ Method* method = methods->at(i);
+ // obsolete methods that are running are not deleted from
+ // previous version array, but they are skipped here.
+ if (!method->is_obsolete() &&
+ method->name() == m_name &&
+ method->signature() == m_signature) {
+ RC_TRACE(0x00000800, ("%sing breakpoint in %s(%s)",
+ meth_act == &Method::set_breakpoint ? "sett" : "clear",
+ method->name()->as_C_string(),
+ method->signature()->as_C_string()));
- ((Method*)method()->*meth_act)(_bci);
- break;
- }
- }
+ (method->*meth_act)(_bci);
+ break;
}
- } // pvw is cleaned up
- } // rm is cleaned up
+ }
+ }
}
void JvmtiBreakpoint::set() {
--- a/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -2807,28 +2807,20 @@
&trace_name_printed);
}
}
- {
- ResourceMark rm(_thread);
- // PreviousVersionInfo objects returned via PreviousVersionWalker
- // contain a GrowableArray of handles. We have to clean up the
- // GrowableArray _after_ the PreviousVersionWalker destructor
- // has destroyed the handles.
- {
- // the previous versions' constant pool caches may need adjustment
- PreviousVersionWalker pvw(ik);
- for (PreviousVersionInfo * pv_info = pvw.next_previous_version();
- pv_info != NULL; pv_info = pvw.next_previous_version()) {
- other_cp = pv_info->prev_constant_pool_handle();
- cp_cache = other_cp->cache();
- if (cp_cache != NULL) {
- cp_cache->adjust_method_entries(_matching_old_methods,
- _matching_new_methods,
- _matching_methods_length,
- &trace_name_printed);
- }
- }
- } // pvw is cleaned up
- } // rm is cleaned up
+
+ // the previous versions' constant pool caches may need adjustment
+ PreviousVersionWalker pvw(_thread, ik);
+ for (PreviousVersionNode * pv_node = pvw.next_previous_version();
+ pv_node != NULL; pv_node = pvw.next_previous_version()) {
+ other_cp = pv_node->prev_constant_pool();
+ cp_cache = other_cp->cache();
+ if (cp_cache != NULL) {
+ cp_cache->adjust_method_entries(_matching_old_methods,
+ _matching_new_methods,
+ _matching_methods_length,
+ &trace_name_printed);
+ }
+ }
}
}
@@ -2942,10 +2934,9 @@
// obsolete methods need a unique idnum
u2 num = InstanceKlass::cast(_the_class_oop)->next_method_idnum();
if (num != ConstMethod::UNSET_IDNUM) {
-// u2 old_num = old_method->method_idnum();
old_method->set_method_idnum(num);
-// TO DO: attach obsolete annotations to obsolete method's new idnum
}
+
// With tracing we try not to "yack" too much. The position of
// this trace assumes there are fewer obsolete methods than
// EMCP methods.
--- a/hotspot/src/share/vm/prims/jvmtiTagMap.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/prims/jvmtiTagMap.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -165,7 +165,7 @@
static unsigned int hash(oop key, int size) {
// shift right to get better distribution (as these bits will be zero
// with aligned addresses)
- unsigned int addr = (unsigned int)((intptr_t)key);
+ unsigned int addr = (unsigned int)(cast_from_oop<intptr_t>(key));
#ifdef _LP64
return (addr >> 3) % size;
#else
--- a/hotspot/src/share/vm/prims/unsafe.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/prims/unsafe.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -292,9 +292,9 @@
volatile oop v;
if (UseCompressedOops) {
volatile narrowOop n = *(volatile narrowOop*) addr;
- v = oopDesc::decode_heap_oop(n);
+ (void)const_cast<oop&>(v = oopDesc::decode_heap_oop(n));
} else {
- v = *(volatile oop*) addr;
+ (void)const_cast<oop&>(v = *(volatile oop*) addr);
}
OrderAccess::acquire();
return JNIHandles::make_local(env, v);
@@ -1222,9 +1222,9 @@
#endif /* USDT2 */
if (event.should_commit()) {
oop obj = thread->current_park_blocker();
- event.set_klass(obj ? obj->klass() : NULL);
+ event.set_klass((obj != NULL) ? obj->klass() : NULL);
event.set_timeout(time);
- event.set_address(obj ? (TYPE_ADDRESS) (uintptr_t) obj : 0);
+ event.set_address((obj != NULL) ? (TYPE_ADDRESS) cast_from_oop<uintptr_t>(obj) : 0);
event.commit();
}
UNSAFE_END
--- a/hotspot/src/share/vm/runtime/arguments.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/runtime/arguments.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -625,11 +625,11 @@
}
}
-static bool set_bool_flag(char* name, bool value, FlagValueOrigin origin) {
+static bool set_bool_flag(char* name, bool value, Flag::Flags origin) {
return CommandLineFlags::boolAtPut(name, &value, origin);
}
-static bool set_fp_numeric_flag(char* name, char* value, FlagValueOrigin origin) {
+static bool set_fp_numeric_flag(char* name, char* value, Flag::Flags origin) {
double v;
if (sscanf(value, "%lf", &v) != 1) {
return false;
@@ -641,7 +641,7 @@
return false;
}
-static bool set_numeric_flag(char* name, char* value, FlagValueOrigin origin) {
+static bool set_numeric_flag(char* name, char* value, Flag::Flags origin) {
julong v;
intx intx_v;
bool is_neg = false;
@@ -674,14 +674,14 @@
return false;
}
-static bool set_string_flag(char* name, const char* value, FlagValueOrigin origin) {
+static bool set_string_flag(char* name, const char* value, Flag::Flags origin) {
if (!CommandLineFlags::ccstrAtPut(name, &value, origin)) return false;
// Contract: CommandLineFlags always returns a pointer that needs freeing.
FREE_C_HEAP_ARRAY(char, value, mtInternal);
return true;
}
-static bool append_to_string_flag(char* name, const char* new_value, FlagValueOrigin origin) {
+static bool append_to_string_flag(char* name, const char* new_value, Flag::Flags origin) {
const char* old_value = "";
if (!CommandLineFlags::ccstrAt(name, &old_value)) return false;
size_t old_len = old_value != NULL ? strlen(old_value) : 0;
@@ -709,7 +709,7 @@
return true;
}
-bool Arguments::parse_argument(const char* arg, FlagValueOrigin origin) {
+bool Arguments::parse_argument(const char* arg, Flag::Flags origin) {
// range of acceptable characters spelled out for portability reasons
#define NAME_RANGE "[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]"
@@ -850,7 +850,7 @@
}
bool Arguments::process_argument(const char* arg,
- jboolean ignore_unrecognized, FlagValueOrigin origin) {
+ jboolean ignore_unrecognized, Flag::Flags origin) {
JDK_Version since = JDK_Version();
@@ -904,7 +904,7 @@
jio_fprintf(defaultStream::error_stream(),
"Did you mean '%s%s%s'?\n",
(fuzzy_matched->is_bool()) ? "(+/-)" : "",
- fuzzy_matched->name,
+ fuzzy_matched->_name,
(fuzzy_matched->is_bool()) ? "" : "=<value>");
}
}
@@ -952,7 +952,7 @@
// this allows a way to include spaces in string-valued options
token[pos] = '\0';
logOption(token);
- result &= process_argument(token, ignore_unrecognized, CONFIG_FILE);
+ result &= process_argument(token, ignore_unrecognized, Flag::CONFIG_FILE);
build_jvm_flags(token);
pos = 0;
in_white_space = true;
@@ -970,7 +970,7 @@
}
if (pos > 0) {
token[pos] = '\0';
- result &= process_argument(token, ignore_unrecognized, CONFIG_FILE);
+ result &= process_argument(token, ignore_unrecognized, Flag::CONFIG_FILE);
build_jvm_flags(token);
}
fclose(stream);
@@ -1100,6 +1100,7 @@
}
}
+#if defined(COMPILER2) || defined(_LP64) || !INCLUDE_CDS
// Conflict: required to use shared spaces (-Xshare:on), but
// incompatible command line options were chosen.
@@ -1112,6 +1113,7 @@
FLAG_SET_DEFAULT(UseSharedSpaces, false);
}
}
+#endif
void Arguments::set_tiered_flags() {
// With tiered, set default policy to AdvancedThresholdPolicy, which is 3.
@@ -1130,6 +1132,9 @@
Tier3InvokeNotifyFreqLog = 0;
Tier4InvocationThreshold = 0;
}
+ if (FLAG_IS_DEFAULT(NmethodSweepFraction)) {
+ FLAG_SET_DEFAULT(NmethodSweepFraction, 1 + ReservedCodeCacheSize / (16 * M));
+ }
}
#if INCLUDE_ALL_GCS
@@ -1520,16 +1525,18 @@
FLAG_SET_ERGO(bool, UseParallelGC, true);
}
}
- // Shared spaces work fine with other GCs but causes bytecode rewriting
- // to be disabled, which hurts interpreter performance and decreases
- // server performance. On server class machines, keep the default
- // off unless it is asked for. Future work: either add bytecode rewriting
- // at link time, or rewrite bytecodes in non-shared methods.
- if (!DumpSharedSpaces && !RequireSharedSpaces &&
- (FLAG_IS_DEFAULT(UseSharedSpaces) || !UseSharedSpaces)) {
- no_shared_spaces();
- }
}
+#ifdef COMPILER2
+ // Shared spaces work fine with other GCs but causes bytecode rewriting
+ // to be disabled, which hurts interpreter performance and decreases
+ // server performance. When -server is specified, keep the default off
+ // unless it is asked for. Future work: either add bytecode rewriting
+ // at link time, or rewrite bytecodes in non-shared methods.
+ if (!DumpSharedSpaces && !RequireSharedSpaces &&
+ (FLAG_IS_DEFAULT(UseSharedSpaces) || !UseSharedSpaces)) {
+ no_shared_spaces();
+ }
+#endif
set_conservative_max_heap_alignment();
@@ -2333,6 +2340,10 @@
(2*G)/M);
status = false;
}
+
+ status &= verify_interval(NmethodSweepFraction, 1, ReservedCodeCacheSize/K, "NmethodSweepFraction");
+ status &= verify_interval(NmethodSweepActivity, 0, 2000, "NmethodSweepActivity");
+
return status;
}
@@ -2434,26 +2445,11 @@
}
// Parse JavaVMInitArgs structure passed in
- result = parse_each_vm_init_arg(args, &scp, &scp_assembly_required, COMMAND_LINE);
+ result = parse_each_vm_init_arg(args, &scp, &scp_assembly_required, Flag::COMMAND_LINE);
if (result != JNI_OK) {
return result;
}
- if (AggressiveOpts) {
- // Insert alt-rt.jar between user-specified bootclasspath
- // prefix and the default bootclasspath. os::set_boot_path()
- // uses meta_index_dir as the default bootclasspath directory.
- const char* altclasses_jar = "alt-rt.jar";
- size_t altclasses_path_len = strlen(get_meta_index_dir()) + 1 +
- strlen(altclasses_jar);
- char* altclasses_path = NEW_C_HEAP_ARRAY(char, altclasses_path_len, mtInternal);
- strcpy(altclasses_path, get_meta_index_dir());
- strcat(altclasses_path, altclasses_jar);
- scp.add_suffix_to_prefix(altclasses_path);
- scp_assembly_required = true;
- FREE_C_HEAP_ARRAY(char, altclasses_path, mtInternal);
- }
-
// Parse _JAVA_OPTIONS environment variable (if present) (mimics classic VM)
result = parse_java_options_environment_variable(&scp, &scp_assembly_required);
if (result != JNI_OK) {
@@ -2521,7 +2517,7 @@
jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs* args,
SysClassPath* scp_p,
bool* scp_assembly_required_p,
- FlagValueOrigin origin) {
+ Flag::Flags origin) {
// Remaining part of option string
const char* tail;
@@ -3344,7 +3340,7 @@
}
}
- return(parse_each_vm_init_arg(&vm_args, scp_p, scp_assembly_required_p, ENVIRON_VAR));
+ return(parse_each_vm_init_arg(&vm_args, scp_p, scp_assembly_required_p, Flag::ENVIRON_VAR));
}
return JNI_OK;
}
--- a/hotspot/src/share/vm/runtime/arguments.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/runtime/arguments.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -360,15 +360,15 @@
// Argument parsing
static void do_pd_flag_adjustments();
- static bool parse_argument(const char* arg, FlagValueOrigin origin);
- static bool process_argument(const char* arg, jboolean ignore_unrecognized, FlagValueOrigin origin);
+ static bool parse_argument(const char* arg, Flag::Flags origin);
+ static bool process_argument(const char* arg, jboolean ignore_unrecognized, Flag::Flags origin);
static void process_java_launcher_argument(const char*, void*);
static void process_java_compiler_argument(char* arg);
static jint parse_options_environment_variable(const char* name, SysClassPath* scp_p, bool* scp_assembly_required_p);
static jint parse_java_tool_options_environment_variable(SysClassPath* scp_p, bool* scp_assembly_required_p);
static jint parse_java_options_environment_variable(SysClassPath* scp_p, bool* scp_assembly_required_p);
static jint parse_vm_init_args(const JavaVMInitArgs* args);
- static jint parse_each_vm_init_arg(const JavaVMInitArgs* args, SysClassPath* scp_p, bool* scp_assembly_required_p, FlagValueOrigin origin);
+ static jint parse_each_vm_init_arg(const JavaVMInitArgs* args, SysClassPath* scp_p, bool* scp_assembly_required_p, Flag::Flags origin);
static jint finalize_vm_init_args(SysClassPath* scp_p, bool scp_assembly_required);
static bool is_bad_option(const JavaVMOption* option, jboolean ignore,
const char* option_type);
--- a/hotspot/src/share/vm/runtime/biasedLocking.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/runtime/biasedLocking.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -161,7 +161,7 @@
if (TraceBiasedLocking && (Verbose || !is_bulk)) {
ResourceMark rm;
tty->print_cr("Revoking bias of object " INTPTR_FORMAT " , mark " INTPTR_FORMAT " , type %s , prototype header " INTPTR_FORMAT " , allow rebias %d , requesting thread " INTPTR_FORMAT,
- (intptr_t) obj, (intptr_t) mark, obj->klass()->external_name(), (intptr_t) obj->klass()->prototype_header(), (allow_rebias ? 1 : 0), (intptr_t) requesting_thread);
+ (void *)obj, (intptr_t) mark, obj->klass()->external_name(), (intptr_t) obj->klass()->prototype_header(), (allow_rebias ? 1 : 0), (intptr_t) requesting_thread);
}
JavaThread* biased_thread = mark->biased_locker();
@@ -214,8 +214,8 @@
if (mon_info->owner() == obj) {
if (TraceBiasedLocking && Verbose) {
tty->print_cr(" mon_info->owner (" PTR_FORMAT ") == obj (" PTR_FORMAT ")",
- (intptr_t) mon_info->owner(),
- (intptr_t) obj);
+ (void *) mon_info->owner(),
+ (void *) obj);
}
// Assume recursive case and fix up highest lock later
markOop mark = markOopDesc::encode((BasicLock*) NULL);
@@ -224,8 +224,8 @@
} else {
if (TraceBiasedLocking && Verbose) {
tty->print_cr(" mon_info->owner (" PTR_FORMAT ") != obj (" PTR_FORMAT ")",
- (intptr_t) mon_info->owner(),
- (intptr_t) obj);
+ (void *) mon_info->owner(),
+ (void *) obj);
}
}
}
@@ -326,7 +326,7 @@
tty->print_cr("* Beginning bulk revocation (kind == %s) because of object "
INTPTR_FORMAT " , mark " INTPTR_FORMAT " , type %s",
(bulk_rebias ? "rebias" : "revoke"),
- (intptr_t) o, (intptr_t) o->mark(), o->klass()->external_name());
+ (void *) o, (intptr_t) o->mark(), o->klass()->external_name());
}
jlong cur_time = os::javaTimeMillis();
--- a/hotspot/src/share/vm/runtime/deoptimization.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/runtime/deoptimization.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -234,7 +234,7 @@
assert(Universe::heap()->is_in_or_null(result), "must be heap pointer");
if (TraceDeoptimization) {
ttyLocker ttyl;
- tty->print_cr("SAVED OOP RESULT " INTPTR_FORMAT " in thread " INTPTR_FORMAT, result, thread);
+ tty->print_cr("SAVED OOP RESULT " INTPTR_FORMAT " in thread " INTPTR_FORMAT, (void *)result, thread);
}
}
bool reallocated = false;
@@ -278,7 +278,7 @@
first = false;
tty->print_cr("RELOCK OBJECTS in thread " INTPTR_FORMAT, thread);
}
- tty->print_cr(" object <" INTPTR_FORMAT "> locked", mi->owner());
+ tty->print_cr(" object <" INTPTR_FORMAT "> locked", (void *)mi->owner());
}
}
}
@@ -977,7 +977,7 @@
KlassHandle k(java_lang_Class::as_Klass(sv->klass()->as_ConstantOopReadValue()->value()()));
Handle obj = sv->value();
- tty->print(" object <" INTPTR_FORMAT "> of type ", sv->value()());
+ tty->print(" object <" INTPTR_FORMAT "> of type ", (void *)sv->value()());
k->print_value();
tty->print(" allocated (%d bytes)", obj->size() * HeapWordSize);
tty->cr();
--- a/hotspot/src/share/vm/runtime/frame.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/runtime/frame.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -1097,7 +1097,7 @@
return NULL;
}
oop r = *oop_adr;
- assert(Universe::heap()->is_in_or_null(r), err_msg("bad receiver: " INTPTR_FORMAT " (" INTX_FORMAT ")", (intptr_t) r, (intptr_t) r));
+ assert(Universe::heap()->is_in_or_null(r), err_msg("bad receiver: " INTPTR_FORMAT " (" INTX_FORMAT ")", (void *) r, (void *) r));
return r;
}
@@ -1228,9 +1228,7 @@
void frame::ZapDeadClosure::do_oop(oop* p) {
if (TraceZapDeadLocals) tty->print_cr("zapping @ " INTPTR_FORMAT " containing " INTPTR_FORMAT, p, (address)*p);
- // Need cast because on _LP64 the conversion to oop is ambiguous. Constant
- // can be either long or int.
- *p = (oop)(int)0xbabebabe;
+ *p = cast_to_oop<intptr_t>(0xbabebabe);
}
frame::ZapDeadClosure frame::_zap_dead;
--- a/hotspot/src/share/vm/runtime/globals.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/runtime/globals.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -62,26 +62,174 @@
MATERIALIZE_FLAGS_EXT
+void Flag::check_writable() {
+ if (is_constant_in_binary()) {
+ fatal(err_msg("flag is constant: %s", _name));
+ }
+}
+
+bool Flag::is_bool() const {
+ return strcmp(_type, "bool") == 0;
+}
+
+bool Flag::get_bool() const {
+ return *((bool*) _addr);
+}
+
+void Flag::set_bool(bool value) {
+ check_writable();
+ *((bool*) _addr) = value;
+}
+
+bool Flag::is_intx() const {
+ return strcmp(_type, "intx") == 0;
+}
+
+intx Flag::get_intx() const {
+ return *((intx*) _addr);
+}
+
+void Flag::set_intx(intx value) {
+ check_writable();
+ *((intx*) _addr) = value;
+}
+
+bool Flag::is_uintx() const {
+ return strcmp(_type, "uintx") == 0;
+}
+
+uintx Flag::get_uintx() const {
+ return *((uintx*) _addr);
+}
+
+void Flag::set_uintx(uintx value) {
+ check_writable();
+ *((uintx*) _addr) = value;
+}
+
+bool Flag::is_uint64_t() const {
+ return strcmp(_type, "uint64_t") == 0;
+}
+
+uint64_t Flag::get_uint64_t() const {
+ return *((uint64_t*) _addr);
+}
+
+void Flag::set_uint64_t(uint64_t value) {
+ check_writable();
+ *((uint64_t*) _addr) = value;
+}
+
+bool Flag::is_double() const {
+ return strcmp(_type, "double") == 0;
+}
+
+double Flag::get_double() const {
+ return *((double*) _addr);
+}
+
+void Flag::set_double(double value) {
+ check_writable();
+ *((double*) _addr) = value;
+}
+
+bool Flag::is_ccstr() const {
+ return strcmp(_type, "ccstr") == 0 || strcmp(_type, "ccstrlist") == 0;
+}
+
+bool Flag::ccstr_accumulates() const {
+ return strcmp(_type, "ccstrlist") == 0;
+}
+
+ccstr Flag::get_ccstr() const {
+ return *((ccstr*) _addr);
+}
+
+void Flag::set_ccstr(ccstr value) {
+ check_writable();
+ *((ccstr*) _addr) = value;
+}
+
+
+Flag::Flags Flag::get_origin() {
+ return Flags(_flags & VALUE_ORIGIN_MASK);
+}
+
+void Flag::set_origin(Flags origin) {
+ assert((origin & VALUE_ORIGIN_MASK) == origin, "sanity");
+ _flags = Flags((_flags & ~VALUE_ORIGIN_MASK) | origin);
+}
+
+bool Flag::is_default() {
+ return (get_origin() == DEFAULT);
+}
+
+bool Flag::is_ergonomic() {
+ return (get_origin() == ERGONOMIC);
+}
+
+bool Flag::is_command_line() {
+ return (get_origin() == COMMAND_LINE);
+}
+
+bool Flag::is_product() const {
+ return (_flags & KIND_PRODUCT) != 0;
+}
+
+bool Flag::is_manageable() const {
+ return (_flags & KIND_MANAGEABLE) != 0;
+}
+
+bool Flag::is_diagnostic() const {
+ return (_flags & KIND_DIAGNOSTIC) != 0;
+}
+
+bool Flag::is_experimental() const {
+ return (_flags & KIND_EXPERIMENTAL) != 0;
+}
+
+bool Flag::is_notproduct() const {
+ return (_flags & KIND_NOT_PRODUCT) != 0;
+}
+
+bool Flag::is_develop() const {
+ return (_flags & KIND_DEVELOP) != 0;
+}
+
+bool Flag::is_read_write() const {
+ return (_flags & KIND_READ_WRITE) != 0;
+}
+
+bool Flag::is_commercial() const {
+ return (_flags & KIND_COMMERCIAL) != 0;
+}
+
+/**
+ * Returns if this flag is a constant in the binary. Right now this is
+ * true for notproduct and develop flags in product builds.
+ */
+bool Flag::is_constant_in_binary() const {
+#ifdef PRODUCT
+ return is_notproduct() || is_develop();
+#else
+ return false;
+#endif
+}
+
bool Flag::is_unlocker() const {
- return strcmp(name, "UnlockDiagnosticVMOptions") == 0 ||
- strcmp(name, "UnlockExperimentalVMOptions") == 0 ||
+ return strcmp(_name, "UnlockDiagnosticVMOptions") == 0 ||
+ strcmp(_name, "UnlockExperimentalVMOptions") == 0 ||
is_unlocker_ext();
}
bool Flag::is_unlocked() const {
- if (strcmp(kind, "{diagnostic}") == 0 ||
- strcmp(kind, "{C2 diagnostic}") == 0 ||
- strcmp(kind, "{ARCH diagnostic}") == 0 ||
- strcmp(kind, "{Shark diagnostic}") == 0) {
+ if (is_diagnostic()) {
return UnlockDiagnosticVMOptions;
- } else if (strcmp(kind, "{experimental}") == 0 ||
- strcmp(kind, "{C2 experimental}") == 0 ||
- strcmp(kind, "{ARCH experimental}") == 0 ||
- strcmp(kind, "{Shark experimental}") == 0) {
+ }
+ if (is_experimental()) {
return UnlockExperimentalVMOptions;
- } else {
- return is_unlocked_ext();
}
+ return is_unlocked_ext();
}
// Get custom message for this locked flag, or return NULL if
@@ -91,16 +239,14 @@
}
bool Flag::is_writeable() const {
- return strcmp(kind, "{manageable}") == 0 ||
- strcmp(kind, "{product rw}") == 0 ||
- is_writeable_ext();
+ return is_manageable() || (is_product() && is_read_write()) || is_writeable_ext();
}
// All flags except "manageable" are assumed to be internal flags.
// Long term, we need to define a mechanism to specify which flags
// are external/stable and change this function accordingly.
bool Flag::is_external() const {
- return strcmp(kind, "{manageable}") == 0 || is_external_ext();
+ return is_manageable() || is_external_ext();
}
@@ -108,53 +254,113 @@
#define FORMAT_BUFFER_LEN 16
void Flag::print_on(outputStream* st, bool withComments) {
- st->print("%9s %-40s %c= ", type, name, (origin != DEFAULT ? ':' : ' '));
- if (is_bool()) st->print("%-16s", get_bool() ? "true" : "false");
- if (is_intx()) st->print("%-16ld", get_intx());
- if (is_uintx()) st->print("%-16lu", get_uintx());
- if (is_uint64_t()) st->print("%-16lu", get_uint64_t());
- if (is_double()) st->print("%-16f", get_double());
+ // Don't print notproduct and develop flags in a product build.
+ if (is_constant_in_binary()) {
+ return;
+ }
+
+ st->print("%9s %-40s %c= ", _type, _name, (!is_default() ? ':' : ' '));
+ if (is_bool()) {
+ st->print("%-16s", get_bool() ? "true" : "false");
+ }
+ if (is_intx()) {
+ st->print("%-16ld", get_intx());
+ }
+ if (is_uintx()) {
+ st->print("%-16lu", get_uintx());
+ }
+ if (is_uint64_t()) {
+ st->print("%-16lu", get_uint64_t());
+ }
+ if (is_double()) {
+ st->print("%-16f", get_double());
+ }
if (is_ccstr()) {
- const char* cp = get_ccstr();
- if (cp != NULL) {
- const char* eol;
- while ((eol = strchr(cp, '\n')) != NULL) {
- char format_buffer[FORMAT_BUFFER_LEN];
- size_t llen = pointer_delta(eol, cp, sizeof(char));
- jio_snprintf(format_buffer, FORMAT_BUFFER_LEN,
- "%%." SIZE_FORMAT "s", llen);
- st->print(format_buffer, cp);
- st->cr();
- cp = eol+1;
- st->print("%5s %-35s += ", "", name);
- }
- st->print("%-16s", cp);
- }
- else st->print("%-16s", "");
+ const char* cp = get_ccstr();
+ if (cp != NULL) {
+ const char* eol;
+ while ((eol = strchr(cp, '\n')) != NULL) {
+ char format_buffer[FORMAT_BUFFER_LEN];
+ size_t llen = pointer_delta(eol, cp, sizeof(char));
+ jio_snprintf(format_buffer, FORMAT_BUFFER_LEN,
+ "%%." SIZE_FORMAT "s", llen);
+ st->print(format_buffer, cp);
+ st->cr();
+ cp = eol+1;
+ st->print("%5s %-35s += ", "", _name);
+ }
+ st->print("%-16s", cp);
+ }
+ else st->print("%-16s", "");
}
- st->print("%-20s", kind);
+
+ st->print("%-20");
+ print_kind(st);
+
if (withComments) {
#ifndef PRODUCT
- st->print("%s", doc );
+ st->print("%s", _doc);
#endif
}
st->cr();
}
+void Flag::print_kind(outputStream* st) {
+ struct Data {
+ int flag;
+ const char* name;
+ };
+
+ Data data[] = {
+ { KIND_C1, "C1" },
+ { KIND_C2, "C2" },
+ { KIND_ARCH, "ARCH" },
+ { KIND_SHARK, "SHARK" },
+ { KIND_PLATFORM_DEPENDENT, "pd" },
+ { KIND_PRODUCT, "product" },
+ { KIND_MANAGEABLE, "manageable" },
+ { KIND_DIAGNOSTIC, "diagnostic" },
+ { KIND_NOT_PRODUCT, "notproduct" },
+ { KIND_DEVELOP, "develop" },
+ { KIND_LP64_PRODUCT, "lp64_product" },
+ { KIND_READ_WRITE, "rw" },
+ { -1, "" }
+ };
+
+ if ((_flags & KIND_MASK) != 0) {
+ st->print("{");
+ bool is_first = true;
+
+ for (int i = 0; data[i].flag != -1; i++) {
+ Data d = data[i];
+ if ((_flags & d.flag) != 0) {
+ if (is_first) {
+ is_first = false;
+ } else {
+ st->print(" ");
+ }
+ st->print(d.name);
+ }
+ }
+
+ st->print("}");
+ }
+}
+
void Flag::print_as_flag(outputStream* st) {
if (is_bool()) {
- st->print("-XX:%s%s", get_bool() ? "+" : "-", name);
+ st->print("-XX:%s%s", get_bool() ? "+" : "-", _name);
} else if (is_intx()) {
- st->print("-XX:%s=" INTX_FORMAT, name, get_intx());
+ st->print("-XX:%s=" INTX_FORMAT, _name, get_intx());
} else if (is_uintx()) {
- st->print("-XX:%s=" UINTX_FORMAT, name, get_uintx());
+ st->print("-XX:%s=" UINTX_FORMAT, _name, get_uintx());
} else if (is_uint64_t()) {
- st->print("-XX:%s=" UINT64_FORMAT, name, get_uint64_t());
+ st->print("-XX:%s=" UINT64_FORMAT, _name, get_uint64_t());
} else if (is_double()) {
- st->print("-XX:%s=%f", name, get_double());
+ st->print("-XX:%s=%f", _name, get_double());
} else if (is_ccstr()) {
- st->print("-XX:%s=", name);
+ st->print("-XX:%s=", _name);
const char* cp = get_ccstr();
if (cp != NULL) {
// Need to turn embedded '\n's back into separate arguments
@@ -167,7 +373,7 @@
st->print("%c", *cp);
break;
case '\n':
- st->print(" -XX:%s=", name);
+ st->print(" -XX:%s=", _name);
break;
}
}
@@ -180,79 +386,51 @@
// 4991491 do not "optimize out" the was_set false values: omitting them
// tickles a Microsoft compiler bug causing flagTable to be malformed
-#define RUNTIME_PRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{product}", DEFAULT },
-#define RUNTIME_PD_PRODUCT_FLAG_STRUCT(type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{pd product}", DEFAULT },
-#define RUNTIME_DIAGNOSTIC_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{diagnostic}", DEFAULT },
-#define RUNTIME_EXPERIMENTAL_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{experimental}", DEFAULT },
-#define RUNTIME_MANAGEABLE_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{manageable}", DEFAULT },
-#define RUNTIME_PRODUCT_RW_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{product rw}", DEFAULT },
+#define NAME(name) NOT_PRODUCT(&name) PRODUCT_ONLY(&CONST_##name)
-#ifdef PRODUCT
- #define RUNTIME_DEVELOP_FLAG_STRUCT(type, name, value, doc) /* flag is constant */
- #define RUNTIME_PD_DEVELOP_FLAG_STRUCT(type, name, doc) /* flag is constant */
- #define RUNTIME_NOTPRODUCT_FLAG_STRUCT(type, name, value, doc)
-#else
- #define RUNTIME_DEVELOP_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, doc, "", DEFAULT },
- #define RUNTIME_PD_DEVELOP_FLAG_STRUCT(type, name, doc) { #type, XSTR(name), &name, doc, "{pd}", DEFAULT },
- #define RUNTIME_NOTPRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, doc, "{notproduct}", DEFAULT },
-#endif
+#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_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) },
+#define RUNTIME_DEVELOP_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_DEVELOP) },
+#define RUNTIME_PD_DEVELOP_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_DEVELOP | Flag::KIND_PLATFORM_DEPENDENT) },
+#define RUNTIME_NOTPRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_NOT_PRODUCT) },
#ifdef _LP64
- #define RUNTIME_LP64_PRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{lp64_product}", DEFAULT },
+#define RUNTIME_LP64_PRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_LP64_PRODUCT) },
#else
- #define RUNTIME_LP64_PRODUCT_FLAG_STRUCT(type, name, value, doc) /* flag is constant */
+#define RUNTIME_LP64_PRODUCT_FLAG_STRUCT(type, name, value, doc) /* flag is constant */
#endif // _LP64
-#define C1_PRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{C1 product}", DEFAULT },
-#define C1_PD_PRODUCT_FLAG_STRUCT(type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{C1 pd product}", DEFAULT },
-#define C1_DIAGNOSTIC_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{C1 diagnostic}", DEFAULT },
-#ifdef PRODUCT
- #define C1_DEVELOP_FLAG_STRUCT(type, name, value, doc) /* flag is constant */
- #define C1_PD_DEVELOP_FLAG_STRUCT(type, name, doc) /* flag is constant */
- #define C1_NOTPRODUCT_FLAG_STRUCT(type, name, value, doc)
-#else
- #define C1_DEVELOP_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, doc, "{C1}", DEFAULT },
- #define C1_PD_DEVELOP_FLAG_STRUCT(type, name, doc) { #type, XSTR(name), &name, doc, "{C1 pd}", DEFAULT },
- #define C1_NOTPRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, doc, "{C1 notproduct}", DEFAULT },
-#endif
+#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_DEVELOP_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), NAME(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), NAME(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), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_NOT_PRODUCT) },
-#define C2_PRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{C2 product}", DEFAULT },
-#define C2_PD_PRODUCT_FLAG_STRUCT(type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{C2 pd product}", DEFAULT },
-#define C2_DIAGNOSTIC_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{C2 diagnostic}", DEFAULT },
-#define C2_EXPERIMENTAL_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{C2 experimental}", DEFAULT },
-#ifdef PRODUCT
- #define C2_DEVELOP_FLAG_STRUCT(type, name, value, doc) /* flag is constant */
- #define C2_PD_DEVELOP_FLAG_STRUCT(type, name, doc) /* flag is constant */
- #define C2_NOTPRODUCT_FLAG_STRUCT(type, name, value, doc)
-#else
- #define C2_DEVELOP_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, doc, "{C2}", DEFAULT },
- #define C2_PD_DEVELOP_FLAG_STRUCT(type, name, doc) { #type, XSTR(name), &name, doc, "{C2 pd}", DEFAULT },
- #define C2_NOTPRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, doc, "{C2 notproduct}", DEFAULT },
-#endif
+#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_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), NAME(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), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_DEVELOP | Flag::KIND_PLATFORM_DEPENDENT) },
+#define C2_NOTPRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_NOT_PRODUCT) },
-#define ARCH_PRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{ARCH product}", DEFAULT },
-#define ARCH_DIAGNOSTIC_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{ARCH diagnostic}", DEFAULT },
-#define ARCH_EXPERIMENTAL_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{ARCH experimental}", DEFAULT },
-#ifdef PRODUCT
- #define ARCH_DEVELOP_FLAG_STRUCT(type, name, value, doc) /* flag is constant */
- #define ARCH_NOTPRODUCT_FLAG_STRUCT(type, name, value, doc)
-#else
- #define ARCH_DEVELOP_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, doc, "{ARCH}", DEFAULT },
- #define ARCH_NOTPRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, doc, "{ARCH notproduct}", DEFAULT },
-#endif
+#define ARCH_PRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_ARCH | Flag::KIND_PRODUCT) },
+#define ARCH_DIAGNOSTIC_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_ARCH | Flag::KIND_DIAGNOSTIC) },
+#define ARCH_EXPERIMENTAL_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_ARCH | Flag::KIND_EXPERIMENTAL) },
+#define ARCH_DEVELOP_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_ARCH | Flag::KIND_DEVELOP) },
+#define ARCH_NOTPRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_ARCH | Flag::KIND_NOT_PRODUCT) },
-#define SHARK_PRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{Shark product}", DEFAULT },
-#define SHARK_PD_PRODUCT_FLAG_STRUCT(type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{Shark pd product}", DEFAULT },
-#define SHARK_DIAGNOSTIC_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{Shark diagnostic}", DEFAULT },
-#ifdef PRODUCT
- #define SHARK_DEVELOP_FLAG_STRUCT(type, name, value, doc) /* flag is constant */
- #define SHARK_PD_DEVELOP_FLAG_STRUCT(type, name, doc) /* flag is constant */
- #define SHARK_NOTPRODUCT_FLAG_STRUCT(type, name, value, doc)
-#else
- #define SHARK_DEVELOP_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, doc, "{Shark}", DEFAULT },
- #define SHARK_PD_DEVELOP_FLAG_STRUCT(type, name, doc) { #type, XSTR(name), &name, doc, "{Shark pd}", DEFAULT },
- #define SHARK_NOTPRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, doc, "{Shark notproduct}", DEFAULT },
-#endif
+#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_DEVELOP_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), NAME(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), NAME(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), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_NOT_PRODUCT) },
static Flag flagTable[] = {
RUNTIME_FLAGS(RUNTIME_DEVELOP_FLAG_STRUCT, RUNTIME_PD_DEVELOP_FLAG_STRUCT, RUNTIME_PRODUCT_FLAG_STRUCT, RUNTIME_PD_PRODUCT_FLAG_STRUCT, RUNTIME_DIAGNOSTIC_FLAG_STRUCT, RUNTIME_EXPERIMENTAL_FLAG_STRUCT, RUNTIME_NOTPRODUCT_FLAG_STRUCT, RUNTIME_MANAGEABLE_FLAG_STRUCT, RUNTIME_PRODUCT_RW_FLAG_STRUCT, RUNTIME_LP64_PRODUCT_FLAG_STRUCT)
@@ -285,9 +463,14 @@
// Search the flag table for a named flag
Flag* Flag::find_flag(const char* name, size_t length, bool allow_locked) {
- for (Flag* current = &flagTable[0]; current->name != NULL; current++) {
- if (str_equal(current->name, name, length)) {
- // Found a matching entry. Report locked flags only if allowed.
+ for (Flag* current = &flagTable[0]; current->_name != NULL; current++) {
+ if (str_equal(current->_name, name, length)) {
+ // Found a matching entry.
+ // Don't report notproduct and develop flags in product builds.
+ if (current->is_constant_in_binary()) {
+ return NULL;
+ }
+ // Report locked flags only if allowed.
if (!(current->is_unlocked() || current->is_unlocker())) {
if (!allow_locked) {
// disable use of locked flags, e.g. diagnostic, experimental,
@@ -327,8 +510,8 @@
float score;
float max_score = -1;
- for (Flag* current = &flagTable[0]; current->name != NULL; current++) {
- score = str_similar(current->name, name, length);
+ for (Flag* current = &flagTable[0]; current->_name != NULL; current++) {
+ score = str_similar(current->_name, name, length);
if (score > max_score) {
max_score = score;
match = current;
@@ -357,25 +540,25 @@
bool CommandLineFlagsEx::is_default(CommandLineFlag flag) {
assert((size_t)flag < Flag::numFlags, "bad command line flag index");
Flag* f = &Flag::flags[flag];
- return (f->origin == DEFAULT);
+ return f->is_default();
}
bool CommandLineFlagsEx::is_ergo(CommandLineFlag flag) {
assert((size_t)flag < Flag::numFlags, "bad command line flag index");
Flag* f = &Flag::flags[flag];
- return (f->origin == ERGONOMIC);
+ return f->is_ergonomic();
}
bool CommandLineFlagsEx::is_cmdline(CommandLineFlag flag) {
assert((size_t)flag < Flag::numFlags, "bad command line flag index");
Flag* f = &Flag::flags[flag];
- return (f->origin == COMMAND_LINE);
+ return f->is_command_line();
}
bool CommandLineFlags::wasSetOnCmdline(const char* name, bool* value) {
Flag* result = Flag::find_flag((char*)name, strlen(name));
if (result == NULL) return false;
- *value = (result->origin == COMMAND_LINE);
+ *value = result->is_command_line();
return true;
}
@@ -387,22 +570,22 @@
return true;
}
-bool CommandLineFlags::boolAtPut(char* name, size_t len, bool* value, FlagValueOrigin origin) {
+bool CommandLineFlags::boolAtPut(char* name, size_t len, bool* value, Flag::Flags origin) {
Flag* result = Flag::find_flag(name, len);
if (result == NULL) return false;
if (!result->is_bool()) return false;
bool old_value = result->get_bool();
result->set_bool(*value);
*value = old_value;
- result->origin = origin;
+ result->set_origin(origin);
return true;
}
-void CommandLineFlagsEx::boolAtPut(CommandLineFlagWithType flag, bool value, FlagValueOrigin origin) {
+void CommandLineFlagsEx::boolAtPut(CommandLineFlagWithType flag, bool value, Flag::Flags origin) {
Flag* faddr = address_of_flag(flag);
guarantee(faddr != NULL && faddr->is_bool(), "wrong flag type");
faddr->set_bool(value);
- faddr->origin = origin;
+ faddr->set_origin(origin);
}
bool CommandLineFlags::intxAt(char* name, size_t len, intx* value) {
@@ -413,22 +596,22 @@
return true;
}
-bool CommandLineFlags::intxAtPut(char* name, size_t len, intx* value, FlagValueOrigin origin) {
+bool CommandLineFlags::intxAtPut(char* name, size_t len, intx* value, Flag::Flags origin) {
Flag* result = Flag::find_flag(name, len);
if (result == NULL) return false;
if (!result->is_intx()) return false;
intx old_value = result->get_intx();
result->set_intx(*value);
*value = old_value;
- result->origin = origin;
+ result->set_origin(origin);
return true;
}
-void CommandLineFlagsEx::intxAtPut(CommandLineFlagWithType flag, intx value, FlagValueOrigin origin) {
+void CommandLineFlagsEx::intxAtPut(CommandLineFlagWithType flag, intx value, Flag::Flags origin) {
Flag* faddr = address_of_flag(flag);
guarantee(faddr != NULL && faddr->is_intx(), "wrong flag type");
faddr->set_intx(value);
- faddr->origin = origin;
+ faddr->set_origin(origin);
}
bool CommandLineFlags::uintxAt(char* name, size_t len, uintx* value) {
@@ -439,22 +622,22 @@
return true;
}
-bool CommandLineFlags::uintxAtPut(char* name, size_t len, uintx* value, FlagValueOrigin origin) {
+bool CommandLineFlags::uintxAtPut(char* name, size_t len, uintx* value, Flag::Flags origin) {
Flag* result = Flag::find_flag(name, len);
if (result == NULL) return false;
if (!result->is_uintx()) return false;
uintx old_value = result->get_uintx();
result->set_uintx(*value);
*value = old_value;
- result->origin = origin;
+ result->set_origin(origin);
return true;
}
-void CommandLineFlagsEx::uintxAtPut(CommandLineFlagWithType flag, uintx value, FlagValueOrigin origin) {
+void CommandLineFlagsEx::uintxAtPut(CommandLineFlagWithType flag, uintx value, Flag::Flags origin) {
Flag* faddr = address_of_flag(flag);
guarantee(faddr != NULL && faddr->is_uintx(), "wrong flag type");
faddr->set_uintx(value);
- faddr->origin = origin;
+ faddr->set_origin(origin);
}
bool CommandLineFlags::uint64_tAt(char* name, size_t len, uint64_t* value) {
@@ -465,22 +648,22 @@
return true;
}
-bool CommandLineFlags::uint64_tAtPut(char* name, size_t len, uint64_t* value, FlagValueOrigin origin) {
+bool CommandLineFlags::uint64_tAtPut(char* name, size_t len, uint64_t* value, Flag::Flags origin) {
Flag* result = Flag::find_flag(name, len);
if (result == NULL) return false;
if (!result->is_uint64_t()) return false;
uint64_t old_value = result->get_uint64_t();
result->set_uint64_t(*value);
*value = old_value;
- result->origin = origin;
+ result->set_origin(origin);
return true;
}
-void CommandLineFlagsEx::uint64_tAtPut(CommandLineFlagWithType flag, uint64_t value, FlagValueOrigin origin) {
+void CommandLineFlagsEx::uint64_tAtPut(CommandLineFlagWithType flag, uint64_t value, Flag::Flags origin) {
Flag* faddr = address_of_flag(flag);
guarantee(faddr != NULL && faddr->is_uint64_t(), "wrong flag type");
faddr->set_uint64_t(value);
- faddr->origin = origin;
+ faddr->set_origin(origin);
}
bool CommandLineFlags::doubleAt(char* name, size_t len, double* value) {
@@ -491,22 +674,22 @@
return true;
}
-bool CommandLineFlags::doubleAtPut(char* name, size_t len, double* value, FlagValueOrigin origin) {
+bool CommandLineFlags::doubleAtPut(char* name, size_t len, double* value, Flag::Flags origin) {
Flag* result = Flag::find_flag(name, len);
if (result == NULL) return false;
if (!result->is_double()) return false;
double old_value = result->get_double();
result->set_double(*value);
*value = old_value;
- result->origin = origin;
+ result->set_origin(origin);
return true;
}
-void CommandLineFlagsEx::doubleAtPut(CommandLineFlagWithType flag, double value, FlagValueOrigin origin) {
+void CommandLineFlagsEx::doubleAtPut(CommandLineFlagWithType flag, double value, Flag::Flags origin) {
Flag* faddr = address_of_flag(flag);
guarantee(faddr != NULL && faddr->is_double(), "wrong flag type");
faddr->set_double(value);
- faddr->origin = origin;
+ faddr->set_origin(origin);
}
bool CommandLineFlags::ccstrAt(char* name, size_t len, ccstr* value) {
@@ -519,7 +702,7 @@
// Contract: Flag will make private copy of the incoming value.
// Outgoing value is always malloc-ed, and caller MUST call free.
-bool CommandLineFlags::ccstrAtPut(char* name, size_t len, ccstr* value, FlagValueOrigin origin) {
+bool CommandLineFlags::ccstrAtPut(char* name, size_t len, ccstr* value, Flag::Flags origin) {
Flag* result = Flag::find_flag(name, len);
if (result == NULL) return false;
if (!result->is_ccstr()) return false;
@@ -530,35 +713,35 @@
strcpy(new_value, *value);
}
result->set_ccstr(new_value);
- if (result->origin == DEFAULT && old_value != NULL) {
+ if (result->is_default() && old_value != NULL) {
// Prior value is NOT heap allocated, but was a literal constant.
char* old_value_to_free = NEW_C_HEAP_ARRAY(char, strlen(old_value)+1, mtInternal);
strcpy(old_value_to_free, old_value);
old_value = old_value_to_free;
}
*value = old_value;
- result->origin = origin;
+ result->set_origin(origin);
return true;
}
// Contract: Flag will make private copy of the incoming value.
-void CommandLineFlagsEx::ccstrAtPut(CommandLineFlagWithType flag, ccstr value, FlagValueOrigin origin) {
+void CommandLineFlagsEx::ccstrAtPut(CommandLineFlagWithType flag, ccstr value, Flag::Flags origin) {
Flag* faddr = address_of_flag(flag);
guarantee(faddr != NULL && faddr->is_ccstr(), "wrong flag type");
ccstr old_value = faddr->get_ccstr();
char* new_value = NEW_C_HEAP_ARRAY(char, strlen(value)+1, mtInternal);
strcpy(new_value, value);
faddr->set_ccstr(new_value);
- if (faddr->origin != DEFAULT && old_value != NULL) {
+ if (!faddr->is_default() && old_value != NULL) {
// Prior value is heap allocated so free it.
FREE_C_HEAP_ARRAY(char, old_value, mtInternal);
}
- faddr->origin = origin;
+ faddr->set_origin(origin);
}
extern "C" {
static int compare_flags(const void* void_a, const void* void_b) {
- return strcmp((*((Flag**) void_a))->name, (*((Flag**) void_b))->name);
+ return strcmp((*((Flag**) void_a))->_name, (*((Flag**) void_b))->_name);
}
}
@@ -567,20 +750,19 @@
// note: this method is called before the thread structure is in place
// which means resource allocation cannot be used.
- // Compute size
- int length= 0;
- while (flagTable[length].name != NULL) length++;
+ // The last entry is the null entry.
+ const size_t length = Flag::numFlags - 1;
// Sort
Flag** array = NEW_C_HEAP_ARRAY(Flag*, length, mtInternal);
- for (int index = 0; index < length; index++) {
- array[index] = &flagTable[index];
+ for (size_t i = 0; i < length; i++) {
+ array[i] = &flagTable[i];
}
qsort(array, length, sizeof(Flag*), compare_flags);
// Print
- for (int i = 0; i < length; i++) {
- if (array[i]->origin /* naked field! */) {
+ for (size_t i = 0; i < length; i++) {
+ if (array[i]->get_origin() /* naked field! */) {
array[i]->print_as_flag(out);
out->print(" ");
}
@@ -603,20 +785,19 @@
// note: this method is called before the thread structure is in place
// which means resource allocation cannot be used.
- // Compute size
- int length= 0;
- while (flagTable[length].name != NULL) length++;
+ // The last entry is the null entry.
+ const size_t length = Flag::numFlags - 1;
// Sort
Flag** array = NEW_C_HEAP_ARRAY(Flag*, length, mtInternal);
- for (int index = 0; index < length; index++) {
- array[index] = &flagTable[index];
+ for (size_t i = 0; i < length; i++) {
+ array[i] = &flagTable[i];
}
qsort(array, length, sizeof(Flag*), compare_flags);
// Print
out->print_cr("[Global flags]");
- for (int i = 0; i < length; i++) {
+ for (size_t i = 0; i < length; i++) {
if (array[i]->is_unlocked()) {
array[i]->print_on(out, withComments);
}
--- a/hotspot/src/share/vm/runtime/globals.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/runtime/globals.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -194,29 +194,49 @@
typedef const char* ccstr;
typedef const char* ccstrlist; // represents string arguments which accumulate
-enum FlagValueOrigin {
- DEFAULT = 0,
- COMMAND_LINE = 1,
- ENVIRON_VAR = 2,
- CONFIG_FILE = 3,
- MANAGEMENT = 4,
- ERGONOMIC = 5,
- ATTACH_ON_DEMAND = 6,
- INTERNAL = 99
-};
+struct Flag {
+ enum Flags {
+ // value origin
+ DEFAULT = 0,
+ COMMAND_LINE = 1,
+ ENVIRON_VAR = 2,
+ CONFIG_FILE = 3,
+ MANAGEMENT = 4,
+ ERGONOMIC = 5,
+ ATTACH_ON_DEMAND = 6,
+ INTERNAL = 7,
+
+ LAST_VALUE_ORIGIN = INTERNAL,
+ VALUE_ORIGIN_BITS = 4,
+ VALUE_ORIGIN_MASK = right_n_bits(VALUE_ORIGIN_BITS),
-struct Flag {
- const char *type;
- const char *name;
- void* addr;
+ // flag kind
+ KIND_PRODUCT = 1 << 4,
+ KIND_MANAGEABLE = 1 << 5,
+ KIND_DIAGNOSTIC = 1 << 6,
+ KIND_EXPERIMENTAL = 1 << 7,
+ KIND_NOT_PRODUCT = 1 << 8,
+ KIND_DEVELOP = 1 << 9,
+ KIND_PLATFORM_DEPENDENT = 1 << 10,
+ KIND_READ_WRITE = 1 << 11,
+ KIND_C1 = 1 << 12,
+ KIND_C2 = 1 << 13,
+ KIND_ARCH = 1 << 14,
+ KIND_SHARK = 1 << 15,
+ KIND_LP64_PRODUCT = 1 << 16,
+ KIND_COMMERCIAL = 1 << 17,
- NOT_PRODUCT(const char *doc;)
+ KIND_MASK = ~VALUE_ORIGIN_MASK
+ };
- const char *kind;
- FlagValueOrigin origin;
+ const char* _type;
+ const char* _name;
+ void* _addr;
+ NOT_PRODUCT(const char* _doc;)
+ Flags _flags;
// points to all Flags static array
- static Flag *flags;
+ static Flag* flags;
// number of flags
static size_t numFlags;
@@ -224,30 +244,50 @@
static Flag* find_flag(const char* name, size_t length, bool allow_locked = false);
static Flag* fuzzy_match(const char* name, size_t length, bool allow_locked = false);
- bool is_bool() const { return strcmp(type, "bool") == 0; }
- bool get_bool() const { return *((bool*) addr); }
- void set_bool(bool value) { *((bool*) addr) = value; }
+ void check_writable();
+
+ bool is_bool() const;
+ bool get_bool() const;
+ void set_bool(bool value);
+
+ bool is_intx() const;
+ intx get_intx() const;
+ void set_intx(intx value);
- bool is_intx() const { return strcmp(type, "intx") == 0; }
- intx get_intx() const { return *((intx*) addr); }
- void set_intx(intx value) { *((intx*) addr) = value; }
+ bool is_uintx() const;
+ uintx get_uintx() const;
+ void set_uintx(uintx value);
- bool is_uintx() const { return strcmp(type, "uintx") == 0; }
- uintx get_uintx() const { return *((uintx*) addr); }
- void set_uintx(uintx value) { *((uintx*) addr) = value; }
+ bool is_uint64_t() const;
+ uint64_t get_uint64_t() const;
+ void set_uint64_t(uint64_t value);
+
+ bool is_double() const;
+ double get_double() const;
+ void set_double(double value);
- bool is_uint64_t() const { return strcmp(type, "uint64_t") == 0; }
- uint64_t get_uint64_t() const { return *((uint64_t*) addr); }
- void set_uint64_t(uint64_t value) { *((uint64_t*) addr) = value; }
+ bool is_ccstr() const;
+ bool ccstr_accumulates() const;
+ ccstr get_ccstr() const;
+ void set_ccstr(ccstr value);
+
+ Flags get_origin();
+ void set_origin(Flags origin);
- bool is_double() const { return strcmp(type, "double") == 0; }
- double get_double() const { return *((double*) addr); }
- void set_double(double value) { *((double*) addr) = value; }
+ bool is_default();
+ bool is_ergonomic();
+ bool is_command_line();
- bool is_ccstr() const { return strcmp(type, "ccstr") == 0 || strcmp(type, "ccstrlist") == 0; }
- bool ccstr_accumulates() const { return strcmp(type, "ccstrlist") == 0; }
- ccstr get_ccstr() const { return *((ccstr*) addr); }
- void set_ccstr(ccstr value) { *((ccstr*) addr) = value; }
+ bool is_product() const;
+ bool is_manageable() const;
+ bool is_diagnostic() const;
+ bool is_experimental() const;
+ bool is_notproduct() const;
+ bool is_develop() const;
+ bool is_read_write() const;
+ bool is_commercial() const;
+
+ bool is_constant_in_binary() const;
bool is_unlocker() const;
bool is_unlocked() const;
@@ -263,6 +303,7 @@
void get_locked_message_ext(char*, int) const;
void print_on(outputStream* st, bool withComments = false );
+ void print_kind(outputStream* st);
void print_as_flag(outputStream* st);
};
@@ -310,33 +351,33 @@
public:
static bool boolAt(char* name, size_t len, bool* value);
static bool boolAt(char* name, bool* value) { return boolAt(name, strlen(name), value); }
- static bool boolAtPut(char* name, size_t len, bool* value, FlagValueOrigin origin);
- static bool boolAtPut(char* name, bool* value, FlagValueOrigin origin) { return boolAtPut(name, strlen(name), value, origin); }
+ static bool boolAtPut(char* name, size_t len, bool* value, Flag::Flags origin);
+ static bool boolAtPut(char* name, bool* value, Flag::Flags origin) { return boolAtPut(name, strlen(name), value, origin); }
static bool intxAt(char* name, size_t len, intx* value);
static bool intxAt(char* name, intx* value) { return intxAt(name, strlen(name), value); }
- static bool intxAtPut(char* name, size_t len, intx* value, FlagValueOrigin origin);
- static bool intxAtPut(char* name, intx* value, FlagValueOrigin origin) { return intxAtPut(name, strlen(name), value, origin); }
+ static bool intxAtPut(char* name, size_t len, intx* value, Flag::Flags origin);
+ static bool intxAtPut(char* name, intx* value, Flag::Flags origin) { return intxAtPut(name, strlen(name), value, origin); }
static bool uintxAt(char* name, size_t len, uintx* value);
static bool uintxAt(char* name, uintx* value) { return uintxAt(name, strlen(name), value); }
- static bool uintxAtPut(char* name, size_t len, uintx* value, FlagValueOrigin origin);
- static bool uintxAtPut(char* name, uintx* value, FlagValueOrigin origin) { return uintxAtPut(name, strlen(name), value, origin); }
+ static bool uintxAtPut(char* name, size_t len, uintx* value, Flag::Flags origin);
+ static bool uintxAtPut(char* name, uintx* value, Flag::Flags origin) { return uintxAtPut(name, strlen(name), value, origin); }
static bool uint64_tAt(char* name, size_t len, uint64_t* value);
static bool uint64_tAt(char* name, uint64_t* value) { return uint64_tAt(name, strlen(name), value); }
- static bool uint64_tAtPut(char* name, size_t len, uint64_t* value, FlagValueOrigin origin);
- static bool uint64_tAtPut(char* name, uint64_t* value, FlagValueOrigin origin) { return uint64_tAtPut(name, strlen(name), value, origin); }
+ static bool uint64_tAtPut(char* name, size_t len, uint64_t* value, Flag::Flags origin);
+ static bool uint64_tAtPut(char* name, uint64_t* value, Flag::Flags origin) { return uint64_tAtPut(name, strlen(name), value, origin); }
static bool doubleAt(char* name, size_t len, double* value);
static bool doubleAt(char* name, double* value) { return doubleAt(name, strlen(name), value); }
- static bool doubleAtPut(char* name, size_t len, double* value, FlagValueOrigin origin);
- static bool doubleAtPut(char* name, double* value, FlagValueOrigin origin) { return doubleAtPut(name, strlen(name), value, origin); }
+ static bool doubleAtPut(char* name, size_t len, double* value, Flag::Flags origin);
+ static bool doubleAtPut(char* name, double* value, Flag::Flags origin) { return doubleAtPut(name, strlen(name), value, origin); }
static bool ccstrAt(char* name, size_t len, ccstr* value);
static bool ccstrAt(char* name, ccstr* value) { return ccstrAt(name, strlen(name), value); }
- static bool ccstrAtPut(char* name, size_t len, ccstr* value, FlagValueOrigin origin);
- static bool ccstrAtPut(char* name, ccstr* value, FlagValueOrigin origin) { return ccstrAtPut(name, strlen(name), value, origin); }
+ static bool ccstrAtPut(char* name, size_t len, ccstr* value, Flag::Flags origin);
+ static bool ccstrAtPut(char* name, ccstr* value, Flag::Flags origin) { return ccstrAtPut(name, strlen(name), value, origin); }
// Returns false if name is not a command line flag.
static bool wasSetOnCmdline(const char* name, bool* value);
@@ -2526,6 +2567,9 @@
product(bool, PrintStringTableStatistics, false, \
"print statistics about the StringTable and SymbolTable") \
\
+ diagnostic(bool, VerifyStringTableAtExit, false, \
+ "verify StringTable contents at exit") \
+ \
notproduct(bool, PrintSymbolTableSizeHistogram, false, \
"print histogram of the symbol table") \
\
@@ -2827,6 +2871,10 @@
product(intx, NmethodSweepCheckInterval, 5, \
"Compilers wake up every n seconds to possibly sweep nmethods") \
\
+ product(intx, NmethodSweepActivity, 10, \
+ "Removes cold nmethods from code cache if > 0. Higher values " \
+ "result in more aggressive sweeping") \
+ \
notproduct(bool, LogSweeper, false, \
"Keep a ring buffer of sweeper activity") \
\
@@ -3198,15 +3246,6 @@
product(bool, UseCodeCacheFlushing, true, \
"Attempt to clean the code cache before shutting off compiler") \
\
- product(intx, MinCodeCacheFlushingInterval, 30, \
- "Min number of seconds between code cache cleaning sessions") \
- \
- product(uintx, CodeCacheFlushingMinimumFreeSpace, 1500*K, \
- "When less than X space left, start code cache cleaning") \
- \
- product(uintx, CodeCacheFlushingFraction, 2, \
- "Fraction of the code cache that is flushed when full") \
- \
/* interpreter debugging */ \
develop(intx, BinarySwitchThreshold, 5, \
"Minimal number of lookupswitch entries for rewriting to binary " \
@@ -3727,20 +3766,20 @@
*/
// Interface macros
-#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_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_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;
+#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;
#ifdef PRODUCT
-#define DECLARE_DEVELOPER_FLAG(type, name, value, doc) const type name = value;
-#define DECLARE_PD_DEVELOPER_FLAG(type, name, doc) const type name = pd_##name;
-#define DECLARE_NOTPRODUCT_FLAG(type, name, value, doc)
+#define DECLARE_DEVELOPER_FLAG(type, name, value, doc) extern "C" type CONST_##name; const type name = value;
+#define DECLARE_PD_DEVELOPER_FLAG(type, name, doc) extern "C" type CONST_##name; const type name = pd_##name;
+#define DECLARE_NOTPRODUCT_FLAG(type, name, value, doc) extern "C" type CONST_##name;
#else
-#define DECLARE_DEVELOPER_FLAG(type, name, value, doc) extern "C" type name;
-#define DECLARE_PD_DEVELOPER_FLAG(type, name, doc) extern "C" type name;
-#define DECLARE_NOTPRODUCT_FLAG(type, name, value, doc) extern "C" type name;
+#define DECLARE_DEVELOPER_FLAG(type, name, value, doc) extern "C" type name;
+#define DECLARE_PD_DEVELOPER_FLAG(type, name, doc) extern "C" type name;
+#define DECLARE_NOTPRODUCT_FLAG(type, name, value, doc) extern "C" type name;
#endif
// Special LP64 flags, product only needed for now.
#ifdef _LP64
@@ -3750,23 +3789,23 @@
#endif // _LP64
// Implementation macros
-#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_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_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;
+#define MATERIALIZE_MANAGEABLE_FLAG(type, name, value, doc) type name = value;
+#define MATERIALIZE_PRODUCT_RW_FLAG(type, name, value, doc) type name = value;
#ifdef PRODUCT
-#define MATERIALIZE_DEVELOPER_FLAG(type, name, value, doc) /* flag name is constant */
-#define MATERIALIZE_PD_DEVELOPER_FLAG(type, name, doc) /* flag name is constant */
-#define MATERIALIZE_NOTPRODUCT_FLAG(type, name, value, doc)
+#define MATERIALIZE_DEVELOPER_FLAG(type, name, value, doc) type CONST_##name = value;
+#define MATERIALIZE_PD_DEVELOPER_FLAG(type, name, doc) type CONST_##name = pd_##name;
+#define MATERIALIZE_NOTPRODUCT_FLAG(type, name, value, doc) type CONST_##name = value;
#else
-#define MATERIALIZE_DEVELOPER_FLAG(type, name, value, doc) type name = value;
-#define MATERIALIZE_PD_DEVELOPER_FLAG(type, name, doc) type name = pd_##name;
-#define MATERIALIZE_NOTPRODUCT_FLAG(type, name, value, doc) type name = value;
+#define MATERIALIZE_DEVELOPER_FLAG(type, name, value, doc) type name = value;
+#define MATERIALIZE_PD_DEVELOPER_FLAG(type, name, doc) type name = pd_##name;
+#define MATERIALIZE_NOTPRODUCT_FLAG(type, name, value, doc) type name = value;
#endif
#ifdef _LP64
-#define MATERIALIZE_LP64_PRODUCT_FLAG(type, name, value, doc) type name = value;
+#define MATERIALIZE_LP64_PRODUCT_FLAG(type, name, value, doc) type name = value;
#else
#define MATERIALIZE_LP64_PRODUCT_FLAG(type, name, value, doc) /* flag is constant */
#endif // _LP64
--- a/hotspot/src/share/vm/runtime/globals_extension.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/runtime/globals_extension.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -34,64 +34,42 @@
// Parens left off in the following for the enum decl below.
#define FLAG_MEMBER(flag) Flag_##flag
-#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_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_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),
-#ifdef PRODUCT
- #define RUNTIME_DEVELOP_FLAG_MEMBER(type, name, value, doc) /* flag is constant */
- #define RUNTIME_PD_DEVELOP_FLAG_MEMBER(type, name, doc) /* flag is constant */
- #define RUNTIME_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc)
+#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),
+#define RUNTIME_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
+#define RUNTIME_PD_DEVELOP_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),
+#define RUNTIME_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
+
+#ifdef _LP64
+#define RUNTIME_LP64_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#else
- #define RUNTIME_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
- #define RUNTIME_PD_DEVELOP_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),
- #define RUNTIME_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
-#endif
-#ifdef _LP64
-#define RUNTIME_LP64_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
-#else
-#define RUNTIME_LP64_PRODUCT_FLAG_MEMBER(type, name, value, doc) /* flag is constant */
+#define RUNTIME_LP64_PRODUCT_FLAG_MEMBER(type, name, value, doc) /* flag is constant */
#endif // _LP64
-#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),
-#ifdef PRODUCT
- #define C1_DEVELOP_FLAG_MEMBER(type, name, value, doc) /* flag is constant */
- #define C1_PD_DEVELOP_FLAG_MEMBER(type, name, doc) /* flag is constant */
- #define C1_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc)
-#else
- #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),
-#endif
+#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_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),
-#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_EXPERIMENTAL_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
-#ifdef PRODUCT
- #define C2_DEVELOP_FLAG_MEMBER(type, name, value, doc) /* flag is constant */
- #define C2_PD_DEVELOP_FLAG_MEMBER(type, name, doc) /* flag is constant */
- #define C2_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc)
-#else
- #define C2_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
- #define C2_PD_DEVELOP_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),
- #define C2_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
-#endif
+#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_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),
+#define C2_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define ARCH_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define ARCH_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define ARCH_EXPERIMENTAL_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
-#ifdef PRODUCT
- #define ARCH_DEVELOP_FLAG_MEMBER(type, name, value, doc) /* flag is constant */
- #define ARCH_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc)
-#else
- #define ARCH_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
- #define ARCH_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
-#endif
+#define ARCH_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
+#define ARCH_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
typedef enum {
RUNTIME_FLAGS(RUNTIME_DEVELOP_FLAG_MEMBER, RUNTIME_PD_DEVELOP_FLAG_MEMBER, RUNTIME_PRODUCT_FLAG_MEMBER, RUNTIME_PD_PRODUCT_FLAG_MEMBER, RUNTIME_DIAGNOSTIC_FLAG_MEMBER, RUNTIME_EXPERIMENTAL_FLAG_MEMBER, RUNTIME_NOTPRODUCT_FLAG_MEMBER, RUNTIME_MANAGEABLE_FLAG_MEMBER, RUNTIME_PRODUCT_RW_FLAG_MEMBER, RUNTIME_LP64_PRODUCT_FLAG_MEMBER)
@@ -114,64 +92,42 @@
#define FLAG_MEMBER_WITH_TYPE(flag,type) Flag_##flag##_##type
-#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_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_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),
-#ifdef PRODUCT
- #define RUNTIME_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) /* flag is constant */
- #define RUNTIME_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc) /* flag is constant */
- #define RUNTIME_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)
-#else
- #define RUNTIME_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
- #define RUNTIME_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type),
- #define RUNTIME_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
-#endif
+#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),
+#define RUNTIME_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
+#define RUNTIME_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type),
+#define RUNTIME_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),
-#ifdef PRODUCT
- #define C1_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) /* flag is constant */
- #define C1_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc) /* flag is constant */
- #define C1_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)
+#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_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),
+
+#ifdef _LP64
+#define RUNTIME_LP64_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#else
- #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),
-#endif
-#ifdef _LP64
-#define RUNTIME_LP64_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
-#else
-#define RUNTIME_LP64_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) /* flag is constant */
+#define RUNTIME_LP64_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) /* flag is constant */
#endif // _LP64
-#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_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_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
-#ifdef PRODUCT
- #define C2_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) /* flag is constant */
- #define C2_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc) /* flag is constant */
- #define C2_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)
-#else
- #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),
- #define C2_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
-#endif
+#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),
+#define C2_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define ARCH_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define ARCH_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
-#define ARCH_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
-#ifdef PRODUCT
- #define ARCH_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) /* flag is constant */
- #define ARCH_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)
-#else
- #define ARCH_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
- #define ARCH_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
-#endif
+#define ARCH_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
+#define ARCH_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
+#define ARCH_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
typedef enum {
RUNTIME_FLAGS(RUNTIME_DEVELOP_FLAG_MEMBER_WITH_TYPE,
@@ -233,19 +189,19 @@
#define FLAG_SET_DEFAULT(name, value) ((name) = (value))
-#define FLAG_SET_CMDLINE(type, name, value) (CommandLineFlagsEx::type##AtPut(FLAG_MEMBER_WITH_TYPE(name,type), (type)(value), COMMAND_LINE))
-#define FLAG_SET_ERGO(type, name, value) (CommandLineFlagsEx::type##AtPut(FLAG_MEMBER_WITH_TYPE(name,type), (type)(value), ERGONOMIC))
+#define FLAG_SET_CMDLINE(type, name, value) (CommandLineFlagsEx::type##AtPut(FLAG_MEMBER_WITH_TYPE(name,type), (type)(value), Flag::COMMAND_LINE))
+#define FLAG_SET_ERGO(type, name, value) (CommandLineFlagsEx::type##AtPut(FLAG_MEMBER_WITH_TYPE(name,type), (type)(value), Flag::ERGONOMIC))
// Can't put the following in CommandLineFlags because
// of a circular dependency on the enum definition.
class CommandLineFlagsEx : CommandLineFlags {
public:
- static void boolAtPut(CommandLineFlagWithType flag, bool value, FlagValueOrigin origin);
- static void intxAtPut(CommandLineFlagWithType flag, intx value, FlagValueOrigin origin);
- static void uintxAtPut(CommandLineFlagWithType flag, uintx value, FlagValueOrigin origin);
- static void uint64_tAtPut(CommandLineFlagWithType flag, uint64_t value, FlagValueOrigin origin);
- static void doubleAtPut(CommandLineFlagWithType flag, double value, FlagValueOrigin origin);
- static void ccstrAtPut(CommandLineFlagWithType flag, ccstr value, FlagValueOrigin origin);
+ static void boolAtPut(CommandLineFlagWithType flag, bool value, Flag::Flags origin);
+ static void intxAtPut(CommandLineFlagWithType flag, intx value, Flag::Flags origin);
+ static void uintxAtPut(CommandLineFlagWithType flag, uintx value, Flag::Flags origin);
+ static void uint64_tAtPut(CommandLineFlagWithType flag, uint64_t value, Flag::Flags origin);
+ static void doubleAtPut(CommandLineFlagWithType flag, double value, Flag::Flags origin);
+ static void ccstrAtPut(CommandLineFlagWithType flag, ccstr value, Flag::Flags origin);
static bool is_default(CommandLineFlag flag);
static bool is_ergo(CommandLineFlag flag);
--- a/hotspot/src/share/vm/runtime/handles.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/runtime/handles.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -136,7 +136,7 @@
// Specific Handles for different oop types
#define DEF_METADATA_HANDLE(name, type) \
class name##Handle; \
- class name##Handle { \
+ class name##Handle : public StackObj { \
type* _value; \
Thread* _thread; \
protected: \
@@ -175,7 +175,7 @@
// Writing this class explicitly, since DEF_METADATA_HANDLE(klass) doesn't
// provide the necessary Klass* <-> Klass* conversions. This Klass
// could be removed when we don't have the Klass* typedef anymore.
-class KlassHandle {
+class KlassHandle : public StackObj {
Klass* _value;
protected:
Klass* obj() const { return _value; }
--- a/hotspot/src/share/vm/runtime/handles.inline.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/runtime/handles.inline.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -79,6 +79,7 @@
} else { \
_thread = Thread::current(); \
} \
+ assert (_thread->is_in_stack((address)this), "not on stack?"); \
_thread->metadata_handles()->push((Metadata*)_value); \
} else { \
_thread = NULL; \
@@ -95,6 +96,7 @@
} else { \
_thread = Thread::current(); \
} \
+ assert (_thread->is_in_stack((address)this), "not on stack?"); \
_thread->metadata_handles()->push((Metadata*)_value); \
} else { \
_thread = NULL; \
--- a/hotspot/src/share/vm/runtime/java.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/runtime/java.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -544,6 +544,19 @@
// it will run into trouble when system destroys static variables.
MemTracker::shutdown(MemTracker::NMT_normal);
+ if (VerifyStringTableAtExit) {
+ int fail_cnt = 0;
+ {
+ MutexLocker ml(StringTable_lock);
+ fail_cnt = StringTable::verify_and_compare_entries();
+ }
+
+ if (fail_cnt != 0) {
+ tty->print_cr("ERROR: fail_cnt=%d", fail_cnt);
+ guarantee(fail_cnt == 0, "unexpected StringTable verification failures");
+ }
+ }
+
#undef BEFORE_EXIT_NOT_RUN
#undef BEFORE_EXIT_RUNNING
#undef BEFORE_EXIT_DONE
--- a/hotspot/src/share/vm/runtime/javaCalls.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/runtime/javaCalls.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -430,7 +430,7 @@
for(int i = 0; i < _size; i++) {
if (_is_oop[i]) {
// Handle conversion
- _value[i] = (intptr_t)Handle::raw_resolve((oop *)_value[i]);
+ _value[i] = cast_from_oop<intptr_t>(Handle::raw_resolve((oop *)_value[i]));
}
}
// Return argument vector
--- a/hotspot/src/share/vm/runtime/safepoint.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/runtime/safepoint.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -519,8 +519,8 @@
}
{
- TraceTime t4("sweeping nmethods", TraceSafepointCleanupTime);
- NMethodSweeper::scan_stacks();
+ TraceTime t4("mark nmethods", TraceSafepointCleanupTime);
+ NMethodSweeper::mark_active_nmethods();
}
if (SymbolTable::needs_rehashing()) {
@@ -745,14 +745,14 @@
#endif
static void print_ptrs(intptr_t oldptr, intptr_t newptr, bool wasoop) {
- bool is_oop = newptr ? ((oop)newptr)->is_oop() : false;
+ bool is_oop = newptr ? (cast_to_oop(newptr))->is_oop() : false;
tty->print_cr(PTR_FORMAT PTR_PAD " %s %c " PTR_FORMAT PTR_PAD " %s %s",
oldptr, wasoop?"oop":" ", oldptr == newptr ? ' ' : '!',
newptr, is_oop?"oop":" ", (wasoop && !is_oop) ? "STALE" : ((wasoop==false&&is_oop==false&&oldptr !=newptr)?"STOMP":" "));
}
static void print_longs(jlong oldptr, jlong newptr, bool wasoop) {
- bool is_oop = newptr ? ((oop)(intptr_t)newptr)->is_oop() : false;
+ bool is_oop = newptr ? (cast_to_oop(newptr))->is_oop() : false;
tty->print_cr(PTR64_FORMAT " %s %c " PTR64_FORMAT " %s %s",
oldptr, wasoop?"oop":" ", oldptr == newptr ? ' ' : '!',
newptr, is_oop?"oop":" ", (wasoop && !is_oop) ? "STALE" : ((wasoop==false&&is_oop==false&&oldptr !=newptr)?"STOMP":" "));
--- a/hotspot/src/share/vm/runtime/sharedRuntime.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/runtime/sharedRuntime.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -577,7 +577,7 @@
assert(caller.is_interpreted_frame(), "");
int args_size = ArgumentSizeComputer(sig).size() + 1;
assert(args_size <= caller.interpreter_frame_expression_stack_size(), "receiver must be on interpreter stack");
- oop result = (oop) *caller.interpreter_frame_tos_at(args_size - 1);
+ oop result = cast_to_oop(*caller.interpreter_frame_tos_at(args_size - 1));
assert(Universe::heap()->is_in(result) && result->is_oop(), "receiver must be an oop");
return result;
}
@@ -1506,8 +1506,11 @@
info, CHECK_(methodHandle()));
inline_cache->set_to_monomorphic(info);
} else if (!inline_cache->is_megamorphic() && !inline_cache->is_clean()) {
- // Change to megamorphic
- inline_cache->set_to_megamorphic(&call_info, bc, CHECK_(methodHandle()));
+ // Potential change to megamorphic
+ bool successful = inline_cache->set_to_megamorphic(&call_info, bc, CHECK_(methodHandle()));
+ if (!successful) {
+ inline_cache->set_to_clean();
+ }
} else {
// Either clean or megamorphic
}
@@ -2872,7 +2875,7 @@
ObjectSynchronizer::inflate_helper(kptr2->obj());
// Now the displaced header is free to move
buf[i++] = (intptr_t)lock->displaced_header();
- buf[i++] = (intptr_t)kptr2->obj();
+ buf[i++] = cast_from_oop<intptr_t>(kptr2->obj());
}
}
assert( i - max_locals == active_monitor_count*2, "found the expected number of monitors" );
--- a/hotspot/src/share/vm/runtime/sweeper.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/runtime/sweeper.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -127,64 +127,79 @@
#define SWEEP(nm)
#endif
+nmethod* NMethodSweeper::_current = NULL; // Current nmethod
+long NMethodSweeper::_traversals = 0; // Nof. stack traversals performed
+int NMethodSweeper::_seen = 0; // Nof. nmethods we have currently processed in current pass of CodeCache
+int NMethodSweeper::_flushed_count = 0; // Nof. nmethods flushed in current sweep
+int NMethodSweeper::_zombified_count = 0; // Nof. nmethods made zombie in current sweep
+int NMethodSweeper::_marked_count = 0; // Nof. nmethods marked for reclaim in current sweep
-long NMethodSweeper::_traversals = 0; // No. of stack traversals performed
-nmethod* NMethodSweeper::_current = NULL; // Current nmethod
-int NMethodSweeper::_seen = 0 ; // No. of nmethods we have currently processed in current pass of CodeCache
-int NMethodSweeper::_flushed_count = 0; // Nof. nmethods flushed in current sweep
-int NMethodSweeper::_zombified_count = 0; // Nof. nmethods made zombie in current sweep
-int NMethodSweeper::_marked_count = 0; // Nof. nmethods marked for reclaim in current sweep
-
-volatile int NMethodSweeper::_invocations = 0; // No. of invocations left until we are completed with this pass
+volatile int NMethodSweeper::_invocations = 0; // Nof. invocations left until we are completed with this pass
volatile int NMethodSweeper::_sweep_started = 0; // Whether a sweep is in progress.
-jint NMethodSweeper::_locked_seen = 0;
+jint NMethodSweeper::_locked_seen = 0;
jint NMethodSweeper::_not_entrant_seen_on_stack = 0;
-bool NMethodSweeper::_resweep = false;
-jint NMethodSweeper::_flush_token = 0;
-jlong NMethodSweeper::_last_full_flush_time = 0;
-int NMethodSweeper::_highest_marked = 0;
-int NMethodSweeper::_dead_compile_ids = 0;
-long NMethodSweeper::_last_flush_traversal_id = 0;
+bool NMethodSweeper::_request_mark_phase = false;
-int NMethodSweeper::_number_of_flushes = 0; // Total of full traversals caused by full cache
int NMethodSweeper::_total_nof_methods_reclaimed = 0;
-jlong NMethodSweeper::_total_time_sweeping = 0;
-jlong NMethodSweeper::_total_time_this_sweep = 0;
-jlong NMethodSweeper::_peak_sweep_time = 0;
-jlong NMethodSweeper::_peak_sweep_fraction_time = 0;
-jlong NMethodSweeper::_total_disconnect_time = 0;
-jlong NMethodSweeper::_peak_disconnect_time = 0;
+jlong NMethodSweeper::_total_time_sweeping = 0;
+jlong NMethodSweeper::_total_time_this_sweep = 0;
+jlong NMethodSweeper::_peak_sweep_time = 0;
+jlong NMethodSweeper::_peak_sweep_fraction_time = 0;
+int NMethodSweeper::_hotness_counter_reset_val = 0;
+
class MarkActivationClosure: public CodeBlobClosure {
public:
virtual void do_code_blob(CodeBlob* cb) {
- // If we see an activation belonging to a non_entrant nmethod, we mark it.
- if (cb->is_nmethod() && ((nmethod*)cb)->is_not_entrant()) {
- ((nmethod*)cb)->mark_as_seen_on_stack();
+ if (cb->is_nmethod()) {
+ nmethod* nm = (nmethod*)cb;
+ nm->set_hotness_counter(NMethodSweeper::hotness_counter_reset_val());
+ // If we see an activation belonging to a non_entrant nmethod, we mark it.
+ if (nm->is_not_entrant()) {
+ nm->mark_as_seen_on_stack();
+ }
}
}
};
static MarkActivationClosure mark_activation_closure;
+class SetHotnessClosure: public CodeBlobClosure {
+public:
+ virtual void do_code_blob(CodeBlob* cb) {
+ if (cb->is_nmethod()) {
+ nmethod* nm = (nmethod*)cb;
+ nm->set_hotness_counter(NMethodSweeper::hotness_counter_reset_val());
+ }
+ }
+};
+static SetHotnessClosure set_hotness_closure;
+
+
+int NMethodSweeper::hotness_counter_reset_val() {
+ if (_hotness_counter_reset_val == 0) {
+ _hotness_counter_reset_val = (ReservedCodeCacheSize < M) ? 1 : (ReservedCodeCacheSize / M) * 2;
+ }
+ return _hotness_counter_reset_val;
+}
bool NMethodSweeper::sweep_in_progress() {
return (_current != NULL);
}
-void NMethodSweeper::scan_stacks() {
+// Scans the stacks of all Java threads and marks activations of not-entrant methods.
+// No need to synchronize access, since 'mark_active_nmethods' is always executed at a
+// safepoint.
+void NMethodSweeper::mark_active_nmethods() {
assert(SafepointSynchronize::is_at_safepoint(), "must be executed at a safepoint");
- if (!MethodFlushing) return;
-
- // No need to synchronize access, since this is always executed at a
- // safepoint.
-
- // Make sure CompiledIC_lock in unlocked, since we might update some
- // inline caches. If it is, we just bail-out and try later.
- if (CompiledIC_lock->is_locked() || Patching_lock->is_locked()) return;
+ // If we do not want to reclaim not-entrant or zombie methods there is no need
+ // to scan stacks
+ if (!MethodFlushing) {
+ return;
+ }
// Check for restart
assert(CodeCache::find_blob_unsafe(_current) == _current, "Sweeper nmethod cached state invalid");
- if (!sweep_in_progress() && _resweep) {
+ if (!sweep_in_progress() && need_marking_phase()) {
_seen = 0;
_invocations = NmethodSweepFraction;
_current = CodeCache::first_nmethod();
@@ -197,30 +212,22 @@
Threads::nmethods_do(&mark_activation_closure);
// reset the flags since we started a scan from the beginning.
- _resweep = false;
+ reset_nmethod_marking();
_locked_seen = 0;
_not_entrant_seen_on_stack = 0;
+ } else {
+ // Only set hotness counter
+ Threads::nmethods_do(&set_hotness_closure);
}
- if (UseCodeCacheFlushing) {
- // only allow new flushes after the interval is complete.
- jlong now = os::javaTimeMillis();
- jlong max_interval = (jlong)MinCodeCacheFlushingInterval * (jlong)1000;
- jlong curr_interval = now - _last_full_flush_time;
- if (curr_interval > max_interval) {
- _flush_token = 0;
- }
-
- if (!CodeCache::needs_flushing() && !CompileBroker::should_compile_new_jobs()) {
- CompileBroker::set_should_compile_new_jobs(CompileBroker::run_compilation);
- log_sweep("restart_compiler");
- }
- }
+ OrderAccess::storestore();
}
void NMethodSweeper::possibly_sweep() {
assert(JavaThread::current()->thread_state() == _thread_in_vm, "must run in vm mode");
- if (!MethodFlushing || !sweep_in_progress()) return;
+ if (!MethodFlushing || !sweep_in_progress()) {
+ return;
+ }
if (_invocations > 0) {
// Only one thread at a time will sweep
@@ -258,8 +265,7 @@
if (!CompileBroker::should_compile_new_jobs()) {
// If we have turned off compilations we might as well do full sweeps
// in order to reach the clean state faster. Otherwise the sleeping compiler
- // threads will slow down sweeping. After a few iterations the cache
- // will be clean and sweeping stops (_resweep will not be set)
+ // threads will slow down sweeping.
_invocations = 1;
}
@@ -271,9 +277,11 @@
int todo = (CodeCache::nof_nmethods() - _seen) / _invocations;
int swept_count = 0;
+
assert(!SafepointSynchronize::is_at_safepoint(), "should not be in safepoint when we get here");
assert(!CodeCache_lock->owned_by_self(), "just checking");
+ int freed_memory = 0;
{
MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
@@ -299,7 +307,7 @@
// Now ready to process nmethod and give up CodeCache_lock
{
MutexUnlockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
- process_nmethod(_current);
+ freed_memory += process_nmethod(_current);
}
_seen++;
_current = next;
@@ -308,11 +316,11 @@
assert(_invocations > 1 || _current == NULL, "must have scanned the whole cache");
- if (!sweep_in_progress() && !_resweep && (_locked_seen || _not_entrant_seen_on_stack)) {
+ if (!sweep_in_progress() && !need_marking_phase() && (_locked_seen || _not_entrant_seen_on_stack)) {
// we've completed a scan without making progress but there were
// nmethods we were unable to process either because they were
- // locked or were still on stack. We don't have to aggresively
- // clean them up so just stop scanning. We could scan once more
+ // locked or were still on stack. We don't have to aggressively
+ // clean them up so just stop scanning. We could scan once more
// but that complicates the control logic and it's unlikely to
// matter much.
if (PrintMethodFlushing) {
@@ -351,9 +359,16 @@
log_sweep("finished");
}
- // Sweeper is the only case where memory is released,
- // check here if it is time to restart the compiler.
- if (UseCodeCacheFlushing && !CompileBroker::should_compile_new_jobs() && !CodeCache::needs_flushing()) {
+ // Sweeper is the only case where memory is released, check here if it
+ // is time to restart the compiler. Only checking if there is a certain
+ // amount of free memory in the code cache might lead to re-enabling
+ // compilation although no memory has been released. For example, there are
+ // cases when compilation was disabled although there is 4MB (or more) free
+ // memory in the code cache. The reason is code cache fragmentation. Therefore,
+ // it only makes sense to re-enable compilation if we have actually freed memory.
+ // Note that typically several kB are released for sweeping 16MB of the code
+ // cache. As a result, 'freed_memory' > 0 to restart the compiler.
+ if (UseCodeCacheFlushing && (!CompileBroker::should_compile_new_jobs() && (freed_memory > 0))) {
CompileBroker::set_should_compile_new_jobs(CompileBroker::run_compilation);
log_sweep("restart_compiler");
}
@@ -367,8 +382,8 @@
_thread = CompilerThread::current();
if (!nm->is_zombie() && !nm->is_unloaded()) {
// Only expose live nmethods for scanning
- _thread->set_scanned_nmethod(nm);
- }
+ _thread->set_scanned_nmethod(nm);
+ }
}
~NMethodMarker() {
_thread->set_scanned_nmethod(NULL);
@@ -392,20 +407,20 @@
nm->flush();
}
-void NMethodSweeper::process_nmethod(nmethod *nm) {
+int NMethodSweeper::process_nmethod(nmethod *nm) {
assert(!CodeCache_lock->owned_by_self(), "just checking");
+ int freed_memory = 0;
// Make sure this nmethod doesn't get unloaded during the scan,
- // since the locks acquired below might safepoint.
+ // since safepoints may happen during acquired below locks.
NMethodMarker nmm(nm);
-
SWEEP(nm);
// Skip methods that are currently referenced by the VM
if (nm->is_locked_by_vm()) {
// But still remember to clean-up inline caches for alive nmethods
if (nm->is_alive()) {
- // Clean-up all inline caches that points to zombie/non-reentrant methods
+ // Clean inline caches that point to zombie/non-entrant methods
MutexLocker cl(CompiledIC_lock);
nm->cleanup_inline_caches();
SWEEP(nm);
@@ -413,18 +428,19 @@
_locked_seen++;
SWEEP(nm);
}
- return;
+ return freed_memory;
}
if (nm->is_zombie()) {
- // If it is first time, we see nmethod then we mark it. Otherwise,
- // we reclame it. When we have seen a zombie method twice, we know that
+ // If it is the first time we see nmethod then we mark it. Otherwise,
+ // we reclaim it. When we have seen a zombie method twice, we know that
// there are no inline caches that refer to it.
if (nm->is_marked_for_reclamation()) {
assert(!nm->is_locked_by_vm(), "must not flush locked nmethods");
if (PrintMethodFlushing && Verbose) {
tty->print_cr("### Nmethod %3d/" PTR_FORMAT " (marked for reclamation) being flushed", nm->compile_id(), nm);
}
+ freed_memory = nm->total_size();
release_nmethod(nm);
_flushed_count++;
} else {
@@ -432,19 +448,19 @@
tty->print_cr("### Nmethod %3d/" PTR_FORMAT " (zombie) being marked for reclamation", nm->compile_id(), nm);
}
nm->mark_for_reclamation();
- _resweep = true;
+ request_nmethod_marking();
_marked_count++;
SWEEP(nm);
}
} else if (nm->is_not_entrant()) {
- // If there is no current activations of this method on the
+ // If there are no current activations of this method on the
// stack we can safely convert it to a zombie method
if (nm->can_not_entrant_be_converted()) {
if (PrintMethodFlushing && Verbose) {
tty->print_cr("### Nmethod %3d/" PTR_FORMAT " (not entrant) being made zombie", nm->compile_id(), nm);
}
nm->make_zombie();
- _resweep = true;
+ request_nmethod_marking();
_zombified_count++;
SWEEP(nm);
} else {
@@ -459,159 +475,57 @@
}
} else if (nm->is_unloaded()) {
// Unloaded code, just make it a zombie
- if (PrintMethodFlushing && Verbose)
+ if (PrintMethodFlushing && Verbose) {
tty->print_cr("### Nmethod %3d/" PTR_FORMAT " (unloaded) being made zombie", nm->compile_id(), nm);
-
+ }
if (nm->is_osr_method()) {
SWEEP(nm);
// No inline caches will ever point to osr methods, so we can just remove it
+ freed_memory = nm->total_size();
release_nmethod(nm);
_flushed_count++;
} else {
nm->make_zombie();
- _resweep = true;
+ request_nmethod_marking();
_zombified_count++;
SWEEP(nm);
}
} else {
- assert(nm->is_alive(), "should be alive");
-
if (UseCodeCacheFlushing) {
- if (nm->is_speculatively_disconnected() && !nm->is_locked_by_vm() && !nm->is_osr_method() &&
- (_traversals > _last_flush_traversal_id + 2) && (nm->compile_id() < _highest_marked)) {
- // This method has not been called since the forced cleanup happened
- nm->make_not_entrant();
+ if (!nm->is_locked_by_vm() && !nm->is_osr_method() && !nm->is_native_method()) {
+ // Do not make native methods and OSR-methods not-entrant
+ nm->dec_hotness_counter();
+ // Get the initial value of the hotness counter. This value depends on the
+ // ReservedCodeCacheSize
+ int reset_val = hotness_counter_reset_val();
+ int time_since_reset = reset_val - nm->hotness_counter();
+ double threshold = -reset_val + (CodeCache::reverse_free_ratio() * NmethodSweepActivity);
+ // The less free space in the code cache we have - the bigger reverse_free_ratio() is.
+ // I.e., 'threshold' increases with lower available space in the code cache and a higher
+ // NmethodSweepActivity. If the current hotness counter - which decreases from its initial
+ // value until it is reset by stack walking - is smaller than the computed threshold, the
+ // corresponding nmethod is considered for removal.
+ if ((NmethodSweepActivity > 0) && (nm->hotness_counter() < threshold) && (time_since_reset > 10)) {
+ // A method is marked as not-entrant if the method is
+ // 1) 'old enough': nm->hotness_counter() < threshold
+ // 2) The method was in_use for a minimum amount of time: (time_since_reset > 10)
+ // The second condition is necessary if we are dealing with very small code cache
+ // sizes (e.g., <10m) and the code cache size is too small to hold all hot methods.
+ // The second condition ensures that methods are not immediately made not-entrant
+ // after compilation.
+ nm->make_not_entrant();
+ request_nmethod_marking();
+ }
}
}
-
- // Clean-up all inline caches that points to zombie/non-reentrant methods
+ // Clean-up all inline caches that point to zombie/non-reentrant methods
MutexLocker cl(CompiledIC_lock);
nm->cleanup_inline_caches();
SWEEP(nm);
}
-}
-
-// Code cache unloading: when compilers notice the code cache is getting full,
-// they will call a vm op that comes here. This code attempts to speculatively
-// unload the oldest half of the nmethods (based on the compile job id) by
-// saving the old code in a list in the CodeCache. Then
-// execution resumes. If a method so marked is not called by the second sweeper
-// stack traversal after the current one, the nmethod will be marked non-entrant and
-// got rid of by normal sweeping. If the method is called, the Method*'s
-// _code field is restored and the Method*/nmethod
-// go back to their normal state.
-void NMethodSweeper::handle_full_code_cache(bool is_full) {
-
- if (is_full) {
- // Since code cache is full, immediately stop new compiles
- if (CompileBroker::set_should_compile_new_jobs(CompileBroker::stop_compilation)) {
- log_sweep("disable_compiler");
- }
- }
-
- // Make sure only one thread can flush
- // The token is reset after CodeCacheMinimumFlushInterval in scan stacks,
- // no need to check the timeout here.
- jint old = Atomic::cmpxchg( 1, &_flush_token, 0 );
- if (old != 0) {
- return;
- }
-
- VM_HandleFullCodeCache op(is_full);
- VMThread::execute(&op);
-
- // resweep again as soon as possible
- _resweep = true;
+ return freed_memory;
}
-void NMethodSweeper::speculative_disconnect_nmethods(bool is_full) {
- // If there was a race in detecting full code cache, only run
- // one vm op for it or keep the compiler shut off
-
- jlong disconnect_start_counter = os::elapsed_counter();
-
- // Traverse the code cache trying to dump the oldest nmethods
- int curr_max_comp_id = CompileBroker::get_compilation_id();
- int flush_target = ((curr_max_comp_id - _dead_compile_ids) / CodeCacheFlushingFraction) + _dead_compile_ids;
-
- log_sweep("start_cleaning");
-
- nmethod* nm = CodeCache::alive_nmethod(CodeCache::first());
- jint disconnected = 0;
- jint made_not_entrant = 0;
- jint nmethod_count = 0;
-
- while ((nm != NULL)){
- int curr_comp_id = nm->compile_id();
-
- // OSR methods cannot be flushed like this. Also, don't flush native methods
- // since they are part of the JDK in most cases
- if (!nm->is_osr_method() && !nm->is_locked_by_vm() && !nm->is_native_method()) {
-
- // only count methods that can be speculatively disconnected
- nmethod_count++;
-
- if (nm->is_in_use() && (curr_comp_id < flush_target)) {
- if ((nm->method()->code() == nm)) {
- // This method has not been previously considered for
- // unloading or it was restored already
- CodeCache::speculatively_disconnect(nm);
- disconnected++;
- } else if (nm->is_speculatively_disconnected()) {
- // This method was previously considered for preemptive unloading and was not called since then
- CompilationPolicy::policy()->delay_compilation(nm->method());
- nm->make_not_entrant();
- made_not_entrant++;
- }
-
- if (curr_comp_id > _highest_marked) {
- _highest_marked = curr_comp_id;
- }
- }
- }
- nm = CodeCache::alive_nmethod(CodeCache::next(nm));
- }
-
- // remember how many compile_ids wheren't seen last flush.
- _dead_compile_ids = curr_max_comp_id - nmethod_count;
-
- log_sweep("stop_cleaning",
- "disconnected='" UINT32_FORMAT "' made_not_entrant='" UINT32_FORMAT "'",
- disconnected, made_not_entrant);
-
- // Shut off compiler. Sweeper will start over with a new stack scan and
- // traversal cycle and turn it back on if it clears enough space.
- if (is_full) {
- _last_full_flush_time = os::javaTimeMillis();
- }
-
- jlong disconnect_end_counter = os::elapsed_counter();
- jlong disconnect_time = disconnect_end_counter - disconnect_start_counter;
- _total_disconnect_time += disconnect_time;
- _peak_disconnect_time = MAX2(disconnect_time, _peak_disconnect_time);
-
- EventCleanCodeCache event(UNTIMED);
- if (event.should_commit()) {
- event.set_starttime(disconnect_start_counter);
- event.set_endtime(disconnect_end_counter);
- event.set_disconnectedCount(disconnected);
- event.set_madeNonEntrantCount(made_not_entrant);
- event.commit();
- }
- _number_of_flushes++;
-
- // After two more traversals the sweeper will get rid of unrestored nmethods
- _last_flush_traversal_id = _traversals;
- _resweep = true;
-#ifdef ASSERT
-
- if(PrintMethodFlushing && Verbose) {
- tty->print_cr("### sweeper: unload time: " INT64_FORMAT, (jlong)disconnect_time);
- }
-#endif
-}
-
-
// Print out some state information about the current sweep and the
// state of the code cache if it's requested.
void NMethodSweeper::log_sweep(const char* msg, const char* format, ...) {
--- a/hotspot/src/share/vm/runtime/sweeper.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/runtime/sweeper.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -27,8 +27,30 @@
// An NmethodSweeper is an incremental cleaner for:
// - cleanup inline caches
-// - reclamation of unreferences zombie nmethods
-//
+// - reclamation of nmethods
+// Removing nmethods from the code cache includes two operations
+// 1) mark active nmethods
+// Is done in 'mark_active_nmethods()'. This function is called at a
+// safepoint and marks all nmethods that are active on a thread's stack.
+// 2) sweep nmethods
+// Is done in sweep_code_cache(). This function is the only place in the
+// sweeper where memory is reclaimed. Note that sweep_code_cache() is not
+// called at a safepoint. However, sweep_code_cache() stops executing if
+// another thread requests a safepoint. Consequently, 'mark_active_nmethods()'
+// and sweep_code_cache() cannot execute at the same time.
+// To reclaim memory, nmethods are first marked as 'not-entrant'. Methods can
+// be made not-entrant by (i) the sweeper, (ii) deoptimization, (iii) dependency
+// invalidation, and (iv) being replaced be a different method version (tiered
+// compilation). Not-entrant nmethod cannot be called by Java threads, but they
+// can still be active on the stack. To ensure that active nmethod are not reclaimed,
+// we have to wait until the next marking phase has completed. If a not-entrant
+// nmethod was NOT marked as active, it can be converted to 'zombie' state. To safely
+// remove the nmethod, all inline caches (IC) that point to the the nmethod must be
+// cleared. After that, the nmethod can be evicted from the code cache. Each nmethod's
+// state change happens during separate sweeps. It may take at least 3 sweeps before an
+// nmethod's space is freed. Sweeping is currently done by compiler threads between
+// compilations or at least each 5 sec (NmethodSweepCheckInterval) when the code cache
+// is full.
class NMethodSweeper : public AllStatic {
static long _traversals; // Stack scan count, also sweep ID.
@@ -41,46 +63,38 @@
static volatile int _invocations; // No. of invocations left until we are completed with this pass
static volatile int _sweep_started; // Flag to control conc sweeper
- //The following are reset in scan_stacks and synchronized by the safepoint
- static bool _resweep; // Indicates that a change has happend and we want another sweep,
- // always checked and reset at a safepoint so memory will be in sync.
- static int _locked_seen; // Number of locked nmethods encountered during the scan
+ //The following are reset in mark_active_nmethods and synchronized by the safepoint
+ static bool _request_mark_phase; // Indicates that a change has happend and we need another mark pahse,
+ // always checked and reset at a safepoint so memory will be in sync.
+ static int _locked_seen; // Number of locked nmethods encountered during the scan
static int _not_entrant_seen_on_stack; // Number of not entrant nmethod were are still on stack
- static jint _flush_token; // token that guards method flushing, making sure it is executed only once.
-
- // These are set during a flush, a VM-operation
- static long _last_flush_traversal_id; // trav number at last flush unloading
- static jlong _last_full_flush_time; // timestamp of last emergency unloading
-
- // These are synchronized by the _sweep_started token
- static int _highest_marked; // highest compile id dumped at last emergency unloading
- static int _dead_compile_ids; // number of compile ids that where not in the cache last flush
// Stat counters
- static int _number_of_flushes; // Total of full traversals caused by full cache
static int _total_nof_methods_reclaimed; // Accumulated nof methods flushed
static jlong _total_time_sweeping; // Accumulated time sweeping
static jlong _total_time_this_sweep; // Total time this sweep
static jlong _peak_sweep_time; // Peak time for a full sweep
static jlong _peak_sweep_fraction_time; // Peak time sweeping one fraction
- static jlong _total_disconnect_time; // Total time cleaning code mem
- static jlong _peak_disconnect_time; // Peak time cleaning code mem
- static void process_nmethod(nmethod *nm);
+ static int process_nmethod(nmethod *nm);
static void release_nmethod(nmethod* nm);
- static void log_sweep(const char* msg, const char* format = NULL, ...);
static bool sweep_in_progress();
+ static void sweep_code_cache();
+ static void request_nmethod_marking() { _request_mark_phase = true; }
+ static void reset_nmethod_marking() { _request_mark_phase = false; }
+ static bool need_marking_phase() { return _request_mark_phase; }
+
+ static int _hotness_counter_reset_val;
public:
static long traversal_count() { return _traversals; }
- static int number_of_flushes() { return _number_of_flushes; }
static int total_nof_methods_reclaimed() { return _total_nof_methods_reclaimed; }
static jlong total_time_sweeping() { return _total_time_sweeping; }
static jlong peak_sweep_time() { return _peak_sweep_time; }
static jlong peak_sweep_fraction_time() { return _peak_sweep_fraction_time; }
- static jlong total_disconnect_time() { return _total_disconnect_time; }
- static jlong peak_disconnect_time() { return _peak_disconnect_time; }
+ static void log_sweep(const char* msg, const char* format = NULL, ...);
+
#ifdef ASSERT
static bool is_sweeping(nmethod* which) { return _current == which; }
@@ -90,19 +104,18 @@
static void report_events();
#endif
- static void scan_stacks(); // Invoked at the end of each safepoint
- static void sweep_code_cache(); // Concurrent part of sweep job
- static void possibly_sweep(); // Compiler threads call this to sweep
+ static void mark_active_nmethods(); // Invoked at the end of each safepoint
+ static void possibly_sweep(); // Compiler threads call this to sweep
- static void notify(nmethod* nm) {
+ static int sort_nmethods_by_hotness(nmethod** nm1, nmethod** nm2);
+ static int hotness_counter_reset_val();
+
+ static void notify() {
// Request a new sweep of the code cache from the beginning. No
// need to synchronize the setting of this flag since it only
// changes to false at safepoint so we can never overwrite it with false.
- _resweep = true;
+ request_nmethod_marking();
}
-
- static void handle_full_code_cache(bool is_full); // Called by compilers who fail to allocate
- static void speculative_disconnect_nmethods(bool was_full); // Called by vm op to deal with alloc failure
};
#endif // SHARE_VM_RUNTIME_SWEEPER_HPP
--- a/hotspot/src/share/vm/runtime/synchronizer.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/runtime/synchronizer.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -154,7 +154,7 @@
static volatile intptr_t ListLock = 0 ; // protects global monitor free-list cache
static volatile int MonitorFreeCount = 0 ; // # on gFreeList
static volatile int MonitorPopulation = 0 ; // # Extant -- in circulation
-#define CHAINMARKER ((oop)-1)
+#define CHAINMARKER (cast_to_oop<intptr_t>(-1))
// -----------------------------------------------------------------------------
// Fast Monitor Enter/Exit
@@ -510,7 +510,7 @@
// then for each thread on the list, set the flag and unpark() the thread.
// This is conceptually similar to muxAcquire-muxRelease, except that muxRelease
// wakes at most one thread whereas we need to wake the entire list.
- int ix = (intptr_t(obj) >> 5) & (NINFLATIONLOCKS-1) ;
+ int ix = (cast_from_oop<intptr_t>(obj) >> 5) & (NINFLATIONLOCKS-1) ;
int YieldThenBlock = 0 ;
assert (ix >= 0 && ix < NINFLATIONLOCKS, "invariant") ;
assert ((NINFLATIONLOCKS & (NINFLATIONLOCKS-1)) == 0, "invariant") ;
@@ -565,7 +565,7 @@
// This variation has the property of being stable (idempotent)
// between STW operations. This can be useful in some of the 1-0
// synchronization schemes.
- intptr_t addrBits = intptr_t(obj) >> 3 ;
+ intptr_t addrBits = cast_from_oop<intptr_t>(obj) >> 3 ;
value = addrBits ^ (addrBits >> 5) ^ GVars.stwRandom ;
} else
if (hashCode == 2) {
@@ -575,7 +575,7 @@
value = ++GVars.hcSequence ;
} else
if (hashCode == 4) {
- value = intptr_t(obj) ;
+ value = cast_from_oop<intptr_t>(obj) ;
} else {
// Marsaglia's xor-shift scheme with thread-specific state
// This is probably the best overall implementation -- we'll
@@ -1321,7 +1321,7 @@
if (object->is_instance()) {
ResourceMark rm;
tty->print_cr("Inflating object " INTPTR_FORMAT " , mark " INTPTR_FORMAT " , type %s",
- (intptr_t) object, (intptr_t) object->mark(),
+ (void *) object, (intptr_t) object->mark(),
object->klass()->external_name());
}
}
@@ -1371,7 +1371,7 @@
if (object->is_instance()) {
ResourceMark rm;
tty->print_cr("Inflating object " INTPTR_FORMAT " , mark " INTPTR_FORMAT " , type %s",
- (intptr_t) object, (intptr_t) object->mark(),
+ (void *) object, (intptr_t) object->mark(),
object->klass()->external_name());
}
}
@@ -1439,7 +1439,7 @@
if (obj->is_instance()) {
ResourceMark rm;
tty->print_cr("Deflating object " INTPTR_FORMAT " , mark " INTPTR_FORMAT " , type %s",
- (intptr_t) obj, (intptr_t) obj->mark(), obj->klass()->external_name());
+ (void *) obj, (intptr_t) obj->mark(), obj->klass()->external_name());
}
}
--- a/hotspot/src/share/vm/runtime/thread.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/runtime/thread.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1444,7 +1444,7 @@
_in_deopt_handler = 0;
_doing_unsafe_access = false;
_stack_guard_state = stack_guard_unused;
- _exception_oop = NULL;
+ (void)const_cast<oop&>(_exception_oop = NULL);
_exception_pc = 0;
_exception_handler_pc = 0;
_is_method_handle_return = 0;
--- a/hotspot/src/share/vm/runtime/thread.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/runtime/thread.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -1278,7 +1278,7 @@
address exception_handler_pc() const { return _exception_handler_pc; }
bool is_method_handle_return() const { return _is_method_handle_return == 1; }
- void set_exception_oop(oop o) { _exception_oop = o; }
+ void set_exception_oop(oop o) { (void)const_cast<oop&>(_exception_oop = o); }
void set_exception_pc(address a) { _exception_pc = a; }
void set_exception_handler_pc(address a) { _exception_handler_pc = a; }
void set_is_method_handle_return(bool value) { _is_method_handle_return = value ? 1 : 0; }
--- a/hotspot/src/share/vm/runtime/vframeArray.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/runtime/vframeArray.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -111,7 +111,7 @@
case T_OBJECT:
assert(!value->obj_is_scalar_replaced(), "object should be reallocated already");
// preserve object type
- _locals->add( new StackValue((intptr_t) (value->get_obj()()), T_OBJECT ));
+ _locals->add( new StackValue(cast_from_oop<intptr_t>((value->get_obj()())), T_OBJECT ));
break;
case T_CONFLICT:
// A dead local. Will be initialized to null/zero.
@@ -136,7 +136,7 @@
case T_OBJECT:
assert(!value->obj_is_scalar_replaced(), "object should be reallocated already");
// preserve object type
- _expressions->add( new StackValue((intptr_t) (value->get_obj()()), T_OBJECT ));
+ _expressions->add( new StackValue(cast_from_oop<intptr_t>((value->get_obj()())), T_OBJECT ));
break;
case T_CONFLICT:
// A dead stack element. Will be initialized to null/zero.
--- a/hotspot/src/share/vm/runtime/vmStructs.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/runtime/vmStructs.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -176,6 +176,7 @@
#include "opto/loopnode.hpp"
#include "opto/machnode.hpp"
#include "opto/matcher.hpp"
+#include "opto/mathexactnode.hpp"
#include "opto/mulnode.hpp"
#include "opto/phaseX.hpp"
#include "opto/parse.hpp"
@@ -841,7 +842,7 @@
nonstatic_field(nmethod, _osr_link, nmethod*) \
nonstatic_field(nmethod, _scavenge_root_link, nmethod*) \
nonstatic_field(nmethod, _scavenge_root_state, jbyte) \
- nonstatic_field(nmethod, _state, unsigned char) \
+ nonstatic_field(nmethod, _state, volatile unsigned char) \
nonstatic_field(nmethod, _exception_offset, int) \
nonstatic_field(nmethod, _deoptimize_offset, int) \
nonstatic_field(nmethod, _deoptimize_mh_offset, int) \
@@ -1185,11 +1186,10 @@
/* -XX flags */ \
/*********************/ \
\
- nonstatic_field(Flag, type, const char*) \
- nonstatic_field(Flag, name, const char*) \
- unchecked_nonstatic_field(Flag, addr, sizeof(void*)) /* NOTE: no type */ \
- nonstatic_field(Flag, kind, const char*) \
- nonstatic_field(Flag, origin, FlagValueOrigin) \
+ nonstatic_field(Flag, _type, const char*) \
+ nonstatic_field(Flag, _name, const char*) \
+ unchecked_nonstatic_field(Flag, _addr, sizeof(void*)) /* NOTE: no type */ \
+ nonstatic_field(Flag, _flags, Flag::Flags) \
static_field(Flag, flags, Flag*) \
static_field(Flag, numFlags, size_t) \
\
@@ -1360,6 +1360,7 @@
declare_integer_type(long) \
declare_integer_type(char) \
declare_unsigned_integer_type(unsigned char) \
+ declare_unsigned_integer_type(volatile unsigned char) \
declare_unsigned_integer_type(u_char) \
declare_unsigned_integer_type(unsigned int) \
declare_unsigned_integer_type(uint) \
@@ -1382,6 +1383,7 @@
declare_toplevel_type(char**) \
declare_toplevel_type(u_char*) \
declare_toplevel_type(unsigned char*) \
+ declare_toplevel_type(volatile unsigned char*) \
\
/*******************************************************************/ \
/* Types which it will be handy to have available over in the SA */ \
@@ -1928,6 +1930,9 @@
declare_c2_type(CmpF3Node, CmpFNode) \
declare_c2_type(CmpDNode, CmpNode) \
declare_c2_type(CmpD3Node, CmpDNode) \
+ declare_c2_type(MathExactNode, MultiNode) \
+ declare_c2_type(AddExactINode, MathExactNode) \
+ declare_c2_type(FlagsProjNode, ProjNode) \
declare_c2_type(BoolNode, Node) \
declare_c2_type(AbsNode, Node) \
declare_c2_type(AbsINode, AbsNode) \
@@ -2074,7 +2079,7 @@
declare_integer_type(JavaThreadState) \
declare_integer_type(Location::Type) \
declare_integer_type(Location::Where) \
- declare_integer_type(FlagValueOrigin) \
+ declare_integer_type(Flag::Flags) \
COMPILER2_PRESENT(declare_integer_type(OptoReg::Name)) \
\
declare_toplevel_type(CHeapObj<mtInternal>) \
@@ -2082,7 +2087,7 @@
declare_type(Array<u1>, MetaspaceObj) \
declare_type(Array<u2>, MetaspaceObj) \
declare_type(Array<Klass*>, MetaspaceObj) \
- declare_type(Array<Method*>, MetaspaceObj) \
+ declare_type(Array<Method*>, MetaspaceObj) \
\
declare_integer_type(AccessFlags) /* FIXME: wrong type (not integer) */\
declare_toplevel_type(address) /* FIXME: should this be an integer type? */\
--- a/hotspot/src/share/vm/runtime/vm_operations.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/runtime/vm_operations.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -173,10 +173,6 @@
SymbolTable::unlink();
}
-void VM_HandleFullCodeCache::doit() {
- NMethodSweeper::speculative_disconnect_nmethods(_is_full);
-}
-
void VM_Verify::doit() {
Universe::heap()->prepare_for_verify();
Universe::verify(_silent);
--- a/hotspot/src/share/vm/runtime/vm_operations.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/runtime/vm_operations.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -51,7 +51,6 @@
template(DeoptimizeAll) \
template(ZombieAll) \
template(UnlinkSymbols) \
- template(HandleFullCodeCache) \
template(Verify) \
template(PrintJNI) \
template(HeapDumper) \
@@ -261,16 +260,6 @@
bool allow_nested_vm_operations() const { return true; }
};
-class VM_HandleFullCodeCache: public VM_Operation {
- private:
- bool _is_full;
- public:
- VM_HandleFullCodeCache(bool is_full) { _is_full = is_full; }
- VMOp_Type type() const { return VMOp_HandleFullCodeCache; }
- void doit();
- bool allow_nested_vm_operations() const { return true; }
-};
-
#ifndef PRODUCT
class VM_DeoptimizeAll: public VM_Operation {
private:
--- a/hotspot/src/share/vm/runtime/vm_version.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/runtime/vm_version.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -78,7 +78,13 @@
static const char* jre_release_version();
// does HW support an 8-byte compare-exchange operation?
- static bool supports_cx8() {return _supports_cx8;}
+ static bool supports_cx8() {
+#ifdef SUPPORTS_NATIVE_CX8
+ return true;
+#else
+ return _supports_cx8;
+#endif
+ }
// does HW support atomic get-and-set or atomic get-and-add? Used
// to guide intrinsification decisions for Unsafe atomic ops
static bool supports_atomic_getset4() {return _supports_atomic_getset4;}
--- a/hotspot/src/share/vm/services/attachListener.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/services/attachListener.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -245,7 +245,7 @@
}
value = (tmp != 0);
}
- bool res = CommandLineFlags::boolAtPut((char*)name, &value, ATTACH_ON_DEMAND);
+ bool res = CommandLineFlags::boolAtPut((char*)name, &value, Flag::ATTACH_ON_DEMAND);
if (! res) {
out->print_cr("setting flag %s failed", name);
}
@@ -263,7 +263,7 @@
return JNI_ERR;
}
}
- bool res = CommandLineFlags::intxAtPut((char*)name, &value, ATTACH_ON_DEMAND);
+ bool res = CommandLineFlags::intxAtPut((char*)name, &value, Flag::ATTACH_ON_DEMAND);
if (! res) {
out->print_cr("setting flag %s failed", name);
}
@@ -282,7 +282,7 @@
return JNI_ERR;
}
}
- bool res = CommandLineFlags::uintxAtPut((char*)name, &value, ATTACH_ON_DEMAND);
+ bool res = CommandLineFlags::uintxAtPut((char*)name, &value, Flag::ATTACH_ON_DEMAND);
if (! res) {
out->print_cr("setting flag %s failed", name);
}
@@ -301,7 +301,7 @@
return JNI_ERR;
}
}
- bool res = CommandLineFlags::uint64_tAtPut((char*)name, &value, ATTACH_ON_DEMAND);
+ bool res = CommandLineFlags::uint64_tAtPut((char*)name, &value, Flag::ATTACH_ON_DEMAND);
if (! res) {
out->print_cr("setting flag %s failed", name);
}
@@ -316,7 +316,7 @@
out->print_cr("flag value must be a string");
return JNI_ERR;
}
- bool res = CommandLineFlags::ccstrAtPut((char*)name, &value, ATTACH_ON_DEMAND);
+ bool res = CommandLineFlags::ccstrAtPut((char*)name, &value, Flag::ATTACH_ON_DEMAND);
if (res) {
FREE_C_HEAP_ARRAY(char, value, mtInternal);
} else {
@@ -470,7 +470,17 @@
vmSymbols::threadgroup_string_void_signature(),
thread_group,
string,
- CHECK);
+ THREAD);
+
+ if (HAS_PENDING_EXCEPTION) {
+ tty->print_cr("Exception in VM (AttachListener::init) : ");
+ java_lang_Throwable::print(PENDING_EXCEPTION, tty);
+ tty->cr();
+
+ CLEAR_PENDING_EXCEPTION;
+
+ return;
+ }
KlassHandle group(THREAD, SystemDictionary::ThreadGroup_klass());
JavaCalls::call_special(&result,
@@ -479,7 +489,17 @@
vmSymbols::add_method_name(),
vmSymbols::thread_void_signature(),
thread_oop, // ARG 1
- CHECK);
+ THREAD);
+
+ if (HAS_PENDING_EXCEPTION) {
+ tty->print_cr("Exception in VM (AttachListener::init) : ");
+ java_lang_Throwable::print(PENDING_EXCEPTION, tty);
+ tty->cr();
+
+ CLEAR_PENDING_EXCEPTION;
+
+ return;
+ }
{ MutexLocker mu(Threads_lock);
JavaThread* listener_thread = new JavaThread(&attach_listener_thread_entry);
--- a/hotspot/src/share/vm/services/classLoadingService.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/services/classLoadingService.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -52,7 +52,7 @@
len = name->utf8_length(); \
} \
HS_DTRACE_PROBE4(hotspot, class__##type, \
- data, len, (clss)->class_loader(), (shared)); \
+ data, len, SOLARIS_ONLY((void *))(clss)->class_loader(), (shared)); \
}
#else /* USDT2 */
@@ -202,7 +202,7 @@
MutexLocker m(Management_lock);
// verbose will be set to the previous value
- bool succeed = CommandLineFlags::boolAtPut((char*)"TraceClassLoading", &verbose, MANAGEMENT);
+ bool succeed = CommandLineFlags::boolAtPut((char*)"TraceClassLoading", &verbose, Flag::MANAGEMENT);
assert(succeed, "Setting TraceClassLoading flag fails");
reset_trace_class_unloading();
@@ -213,7 +213,7 @@
void ClassLoadingService::reset_trace_class_unloading() {
assert(Management_lock->owned_by_self(), "Must own the Management_lock");
bool value = MemoryService::get_verbose() || ClassLoadingService::get_verbose();
- bool succeed = CommandLineFlags::boolAtPut((char*)"TraceClassUnloading", &value, MANAGEMENT);
+ bool succeed = CommandLineFlags::boolAtPut((char*)"TraceClassUnloading", &value, Flag::MANAGEMENT);
assert(succeed, "Setting TraceClassUnLoading flag fails");
}
--- a/hotspot/src/share/vm/services/diagnosticArgument.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/services/diagnosticArgument.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -61,7 +61,7 @@
}
void GenDCmdArgument::to_string(char* c, char* buf, size_t len) {
- jio_snprintf(buf, len, "%s", c);
+ jio_snprintf(buf, len, "%s", (c != NULL) ? c : "");
}
void GenDCmdArgument::to_string(StringArrayArgument* f, char* buf, size_t len) {
--- a/hotspot/src/share/vm/services/dtraceAttacher.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/services/dtraceAttacher.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -51,7 +51,7 @@
static void set_bool_flag(const char* flag, bool value) {
CommandLineFlags::boolAtPut((char*)flag, strlen(flag), &value,
- ATTACH_ON_DEMAND);
+ Flag::ATTACH_ON_DEMAND);
}
// Enable only the "fine grained" flags. Do *not* touch
--- a/hotspot/src/share/vm/services/heapDumper.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/services/heapDumper.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -563,7 +563,7 @@
}
void DumpWriter::write_objectID(oop o) {
- address a = (address)((uintptr_t)o);
+ address a = (address)o;
#ifdef _LP64
write_u8((u8)a);
#else
--- a/hotspot/src/share/vm/services/management.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/services/management.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1643,9 +1643,13 @@
int num_entries = 0;
for (int i = 0; i < nFlags; i++) {
Flag* flag = &Flag::flags[i];
+ // Exclude notproduct and develop flags in product builds.
+ if (flag->is_constant_in_binary()) {
+ continue;
+ }
// Exclude the locked (experimental, diagnostic) flags
if (flag->is_unlocked() || flag->is_unlocker()) {
- Handle s = java_lang_String::create_from_str(flag->name, CHECK_0);
+ Handle s = java_lang_String::create_from_str(flag->_name, CHECK_0);
flags_ah->obj_at_put(num_entries, s());
num_entries++;
}
@@ -1669,7 +1673,7 @@
bool add_global_entry(JNIEnv* env, Handle name, jmmVMGlobal *global, Flag *flag, TRAPS) {
Handle flag_name;
if (name() == NULL) {
- flag_name = java_lang_String::create_from_str(flag->name, CHECK_false);
+ flag_name = java_lang_String::create_from_str(flag->_name, CHECK_false);
} else {
flag_name = name;
}
@@ -1698,23 +1702,23 @@
global->writeable = flag->is_writeable();
global->external = flag->is_external();
- switch (flag->origin) {
- case DEFAULT:
+ switch (flag->get_origin()) {
+ case Flag::DEFAULT:
global->origin = JMM_VMGLOBAL_ORIGIN_DEFAULT;
break;
- case COMMAND_LINE:
+ case Flag::COMMAND_LINE:
global->origin = JMM_VMGLOBAL_ORIGIN_COMMAND_LINE;
break;
- case ENVIRON_VAR:
+ case Flag::ENVIRON_VAR:
global->origin = JMM_VMGLOBAL_ORIGIN_ENVIRON_VAR;
break;
- case CONFIG_FILE:
+ case Flag::CONFIG_FILE:
global->origin = JMM_VMGLOBAL_ORIGIN_CONFIG_FILE;
break;
- case MANAGEMENT:
+ case Flag::MANAGEMENT:
global->origin = JMM_VMGLOBAL_ORIGIN_MANAGEMENT;
break;
- case ERGONOMIC:
+ case Flag::ERGONOMIC:
global->origin = JMM_VMGLOBAL_ORIGIN_ERGONOMIC;
break;
default:
@@ -1781,6 +1785,10 @@
int num_entries = 0;
for (int i = 0; i < nFlags && num_entries < count; i++) {
Flag* flag = &Flag::flags[i];
+ // Exclude notproduct and develop flags in product builds.
+ if (flag->is_constant_in_binary()) {
+ continue;
+ }
// Exclude the locked (diagnostic, experimental) flags
if ((flag->is_unlocked() || flag->is_unlocker()) &&
add_global_entry(env, null_h, &globals[num_entries], flag, THREAD)) {
@@ -1813,23 +1821,23 @@
bool succeed;
if (flag->is_bool()) {
bool bvalue = (new_value.z == JNI_TRUE ? true : false);
- succeed = CommandLineFlags::boolAtPut(name, &bvalue, MANAGEMENT);
+ succeed = CommandLineFlags::boolAtPut(name, &bvalue, Flag::MANAGEMENT);
} else if (flag->is_intx()) {
intx ivalue = (intx)new_value.j;
- succeed = CommandLineFlags::intxAtPut(name, &ivalue, MANAGEMENT);
+ succeed = CommandLineFlags::intxAtPut(name, &ivalue, Flag::MANAGEMENT);
} else if (flag->is_uintx()) {
uintx uvalue = (uintx)new_value.j;
- succeed = CommandLineFlags::uintxAtPut(name, &uvalue, MANAGEMENT);
+ succeed = CommandLineFlags::uintxAtPut(name, &uvalue, Flag::MANAGEMENT);
} else if (flag->is_uint64_t()) {
uint64_t uvalue = (uint64_t)new_value.j;
- succeed = CommandLineFlags::uint64_tAtPut(name, &uvalue, MANAGEMENT);
+ succeed = CommandLineFlags::uint64_tAtPut(name, &uvalue, Flag::MANAGEMENT);
} else if (flag->is_ccstr()) {
oop str = JNIHandles::resolve_external_guard(new_value.l);
if (str == NULL) {
THROW(vmSymbols::java_lang_NullPointerException());
}
ccstr svalue = java_lang_String::as_utf8_string(str);
- succeed = CommandLineFlags::ccstrAtPut(name, &svalue, MANAGEMENT);
+ succeed = CommandLineFlags::ccstrAtPut(name, &svalue, Flag::MANAGEMENT);
}
assert(succeed, "Setting flag should succeed");
JVM_END
--- a/hotspot/src/share/vm/services/memoryManager.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/services/memoryManager.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -45,7 +45,7 @@
MemoryManager::MemoryManager() {
_num_pools = 0;
- _memory_mgr_obj = NULL;
+ (void)const_cast<instanceOop&>(_memory_mgr_obj = NULL);
}
void MemoryManager::add_pool(MemoryPool* pool) {
--- a/hotspot/src/share/vm/services/memoryPool.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/services/memoryPool.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -45,7 +45,7 @@
_name = name;
_initial_size = init_size;
_max_size = max_size;
- _memory_pool_obj = NULL;
+ (void)const_cast<instanceOop&>(_memory_pool_obj = NULL);
_available_for_allocation = true;
_num_managers = 0;
_type = type;
--- a/hotspot/src/share/vm/services/memoryService.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/services/memoryService.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -515,7 +515,7 @@
bool MemoryService::set_verbose(bool verbose) {
MutexLocker m(Management_lock);
// verbose will be set to the previous value
- bool succeed = CommandLineFlags::boolAtPut((char*)"PrintGC", &verbose, MANAGEMENT);
+ bool succeed = CommandLineFlags::boolAtPut((char*)"PrintGC", &verbose, Flag::MANAGEMENT);
assert(succeed, "Setting PrintGC flag fails");
ClassLoadingService::reset_trace_class_unloading();
@@ -618,4 +618,3 @@
MemoryService::gc_end(_fullGC, _recordPostGCUsage, _recordAccumulatedGCTime,
_recordGCEndTime, _countCollection, _cause);
}
-
--- a/hotspot/src/share/vm/trace/trace.xml Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/trace/trace.xml Thu Oct 10 13:41:08 2013 -0700
@@ -313,13 +313,6 @@
<value type="UINT" field="zombifiedCount" label="Methods Zombified"/>
</event>
- <event id="CleanCodeCache" path="vm/code_sweeper/clean" label="Clean Code Cache"
- description="Clean code cache from oldest methods"
- has_thread="true" is_requestable="false" is_constant="false">
- <value type="UINT" field="disconnectedCount" label="Methods Disconnected"/>
- <value type="UINT" field="madeNonEntrantCount" label="Methods Made Non-Entrant"/>
- </event>
-
<!-- Code cache events -->
<event id="CodeCacheFull" path="vm/code_cache/full" label="Code Cache Full"
--- a/hotspot/src/share/vm/utilities/array.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/utilities/array.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -353,9 +353,9 @@
// sort the array.
bool contains(const T& x) const { return index_of(x) >= 0; }
- T at(int i) const { assert(i >= 0 && i< _length, err_msg_res("oob: 0 <= %d < %d", i, _length)); return _data[i]; }
- void at_put(const int i, const T& x) { assert(i >= 0 && i< _length, err_msg_res("oob: 0 <= %d < %d", i, _length)); _data[i] = x; }
- T* adr_at(const int i) { assert(i >= 0 && i< _length, err_msg_res("oob: 0 <= %d < %d", i, _length)); return &_data[i]; }
+ T at(int i) const { assert(i >= 0 && i< _length, err_msg("oob: 0 <= %d < %d", i, _length)); return _data[i]; }
+ void at_put(const int i, const T& x) { assert(i >= 0 && i< _length, err_msg("oob: 0 <= %d < %d", i, _length)); _data[i] = x; }
+ T* adr_at(const int i) { assert(i >= 0 && i< _length, err_msg("oob: 0 <= %d < %d", i, _length)); return &_data[i]; }
int find(const T& x) { return index_of(x); }
T at_acquire(const int which) { return OrderAccess::load_acquire(adr_at(which)); }
--- a/hotspot/src/share/vm/utilities/globalDefinitions.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/utilities/globalDefinitions.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -967,9 +967,9 @@
// (These must be implemented as #defines because C++ compilers are
// not obligated to inline non-integral constants!)
#define badAddress ((address)::badAddressVal)
-#define badOop ((oop)::badOopVal)
+#define badOop (cast_to_oop(::badOopVal))
#define badHeapWord (::badHeapWordVal)
-#define badJNIHandle ((oop)::badJNIHandleVal)
+#define badJNIHandle (cast_to_oop(::badJNIHandleVal))
// Default TaskQueue size is 16K (32-bit) or 128K (64-bit)
#define TASKQUEUE_SIZE (NOT_LP64(1<<14) LP64_ONLY(1<<17))
--- a/hotspot/src/share/vm/utilities/globalDefinitions_visCPP.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/utilities/globalDefinitions_visCPP.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -189,6 +189,10 @@
#pragma warning( disable : 4201 ) // nonstandard extension used : nameless struct/union (needed in windows.h)
#pragma warning( disable : 4511 ) // copy constructor could not be generated
#pragma warning( disable : 4291 ) // no matching operator delete found; memory will not be freed if initialization thows an exception
+#ifdef CHECK_UNHANDLED_OOPS
+#pragma warning( disable : 4521 ) // class has multiple copy ctors of a single type
+#pragma warning( disable : 4522 ) // class has multiple assignment operators of a single type
+#endif // CHECK_UNHANDLED_OOPS
#if _MSC_VER >= 1400
#pragma warning( disable : 4996 ) // unsafe string functions. Same as define _CRT_SECURE_NO_WARNINGS/_CRT_SECURE_NO_DEPRICATE
#endif
--- a/hotspot/src/share/vm/utilities/hashtable.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/utilities/hashtable.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -356,9 +356,9 @@
template class Hashtable<Symbol*, mtSymbol>;
template class Hashtable<Klass*, mtClass>;
template class Hashtable<oop, mtClass>;
-#ifdef SOLARIS
+#if defined(SOLARIS) || defined(CHECK_UNHANDLED_OOPS)
template class Hashtable<oop, mtSymbol>;
-#endif
+#endif // SOLARIS || CHECK_UNHANDLED_OOPS
template class Hashtable<oopDesc*, mtSymbol>;
template class Hashtable<Symbol*, mtClass>;
template class HashtableEntry<Symbol*, mtSymbol>;
--- a/hotspot/src/share/vm/utilities/taskqueue.hpp Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/src/share/vm/utilities/taskqueue.hpp Thu Oct 10 13:41:08 2013 -0700
@@ -322,11 +322,11 @@
// Attempts to claim a task from the "local" end of the queue (the most
// recently pushed). If successful, returns true and sets t to the task;
// otherwise, returns false (the queue is empty).
- inline bool pop_local(E& t);
+ inline bool pop_local(volatile E& t);
// Like pop_local(), but uses the "global" end of the queue (the least
// recently pushed).
- bool pop_global(E& t);
+ bool pop_global(volatile E& t);
// Delete any resource associated with the queue.
~GenericTaskQueue();
@@ -424,7 +424,7 @@
}
template<class E, MEMFLAGS F, unsigned int N>
-bool GenericTaskQueue<E, F, N>::pop_global(E& t) {
+bool GenericTaskQueue<E, F, N>::pop_global(volatile E& t) {
Age oldAge = _age.get();
// Architectures with weak memory model require a barrier here
// to guarantee that bottom is not older than age,
@@ -701,7 +701,7 @@
}
template<class E, MEMFLAGS F, unsigned int N> inline bool
-GenericTaskQueue<E, F, N>::pop_local(E& t) {
+GenericTaskQueue<E, F, N>::pop_local(volatile E& t) {
uint localBot = _bottom;
// This value cannot be N-1. That can only occur as a result of
// the assignment to bottom in this method. If it does, this method
@@ -799,7 +799,7 @@
}
volatile ObjArrayTask&
operator =(const volatile ObjArrayTask& t) volatile {
- _obj = t._obj;
+ (void)const_cast<oop&>(_obj = t._obj);
_index = t._index;
return *this;
}
--- a/hotspot/test/TEST.groups Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/test/TEST.groups Thu Oct 10 13:41:08 2013 -0700
@@ -193,6 +193,7 @@
serviceability/ \
compiler/ \
testlibrary/ \
+ testlibrary_tests/ \
sanity/ \
runtime/ \
gc/ \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/intrinsics/mathexact/CondTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8024924
+ * @summary Test non constant addExact
+ * @compile CondTest.java Verify.java
+ * @run main CondTest
+ *
+ */
+
+import java.lang.ArithmeticException;
+
+public class CondTest {
+ public static int result = 0;
+
+ public static void main(String[] args) {
+ for (int i = 0; i < 50000; ++i) {
+ runTest();
+ }
+ }
+
+ public static void runTest() {
+ int i = 7;
+ while (java.lang.Math.addExact(i, result) < 89361) {
+ if ((java.lang.Math.addExact(i, i) & 1) == 1) {
+ i += 3;
+ } else if ((i & 5) == 4) {
+ i += 7;
+ } else if ((i & 0xf) == 6) {
+ i += 2;
+ } else {
+ i += 1;
+ }
+ result += 2;
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/intrinsics/mathexact/ConstantTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8024924
+ * @summary Test constant addExact
+ * @compile ConstantTest.java Verify.java
+ * @run main ConstantTest
+ *
+ */
+
+import java.lang.ArithmeticException;
+
+public class ConstantTest {
+ public static void main(String[] args) {
+ for (int i = 0; i < 50000; ++i) {
+ Verify.verify(5, 7);
+ Verify.verify(Integer.MAX_VALUE, 1);
+ Verify.verify(Integer.MIN_VALUE, -1);
+ Verify.verify(Integer.MAX_VALUE, -1);
+ Verify.verify(Integer.MIN_VALUE, 1);
+ Verify.verify(Integer.MAX_VALUE / 2, Integer.MAX_VALUE / 2);
+ Verify.verify(Integer.MAX_VALUE / 2, (Integer.MAX_VALUE / 2) + 3);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/intrinsics/mathexact/LoadTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8024924
+ * @summary Test non constant addExact
+ * @compile LoadTest.java Verify.java
+ * @run main LoadTest
+ *
+ */
+
+import java.lang.ArithmeticException;
+
+public class LoadTest {
+ public static java.util.Random rnd = new java.util.Random();
+ public static int[] values = new int[256];
+
+ public static void main(String[] args) {
+ for (int i = 0; i < values.length; ++i) {
+ values[i] = rnd.nextInt();
+ }
+
+ for (int i = 0; i < 50000; ++i) {
+ Verify.verify(values[i & 255], values[i & 255] - i);
+ Verify.verify(values[i & 255] + i, values[i & 255] - i);
+ Verify.verify(values[i & 255], values[i & 255]);
+ if ((i & 1) == 1 && i > 5) {
+ Verify.verify(values[i & 255] + i, values[i & 255] - i);
+ } else {
+ Verify.verify(values[i & 255] - i, values[i & 255] + i);
+ }
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/intrinsics/mathexact/LoopDependentTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8024924
+ * @summary Test non constant addExact
+ * @compile LoopDependentTest.java Verify.java
+ * @run main LoopDependentTest
+ *
+ */
+
+import java.lang.ArithmeticException;
+
+public class LoopDependentTest {
+ public static java.util.Random rnd = new java.util.Random();
+
+ public static void main(String[] args) {
+ int rnd1 = rnd.nextInt(), rnd2 = rnd.nextInt();
+ for (int i = 0; i < 50000; ++i) {
+ Verify.verify(rnd1 + i, rnd2 + i);
+ Verify.verify(rnd1 + i, rnd2 + (i & 0xff));
+ Verify.verify(rnd1 - i, rnd2 - (i & 0xff));
+ Verify.verify(rnd1 + i + 1, rnd2 + i + 2);
+ Verify.verify(rnd1 + i * 2, rnd2 + i);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/intrinsics/mathexact/NonConstantTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8024924
+ * @summary Test non constant addExact
+ * @compile NonConstantTest.java Verify.java
+ * @run main NonConstantTest
+ *
+ */
+
+import java.lang.ArithmeticException;
+
+public class NonConstantTest {
+ public static java.util.Random rnd = new java.util.Random();
+
+ public static void main(String[] args) {
+ for (int i = 0; i < 50000; ++i) {
+ int rnd1 = rnd.nextInt(), rnd2 = rnd.nextInt();
+ Verify.verify(rnd1, rnd2);
+ Verify.verify(rnd1, rnd2 + 1);
+ Verify.verify(rnd1 + 1, rnd2);
+ Verify.verify(rnd1 - 1, rnd2);
+ Verify.verify(rnd1, rnd2 - 1);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/intrinsics/mathexact/Verify.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+public class Verify {
+ public static String throwWord(boolean threw) {
+ return (threw ? "threw" : "didn't throw");
+ }
+
+ public static void verify(int a, int b) {
+ boolean exception1 = false, exception2 = false;
+ int result1 = 0, result2 = 0;
+ try {
+ result1 = testIntrinsic(a, b);
+ } catch (ArithmeticException e) {
+ exception1 = true;
+ }
+ try {
+ result2 = testNonIntrinsic(a, b);
+ } catch (ArithmeticException e) {
+ exception2 = true;
+ }
+
+ if (exception1 != exception2) {
+ throw new RuntimeException("Intrinsic version " + throwWord(exception1) + " exception, NonIntrinsic version " + throwWord(exception2) + " for: " + a + " + " + b);
+ }
+ if (result1 != result2) {
+ throw new RuntimeException("Intrinsic version returned: " + a + " while NonIntrinsic version returned: " + b);
+ }
+ }
+
+ public static int testIntrinsic(int a, int b) {
+ return java.lang.Math.addExact(a, b);
+ }
+
+ public static int testNonIntrinsic(int a, int b) {
+ return safeAddExact(a, b);
+ }
+
+ // Copied java.lang.Math.addExact to avoid intrinsification
+ public static int safeAddExact(int x, int y) {
+ int r = x + y;
+ // HD 2-12 Overflow iff both arguments have the opposite sign of the result
+ if (((x ^ r) & (y ^ r)) < 0) {
+ throw new ArithmeticException("integer overflow");
+ }
+ return r;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/jsr292/methodHandleExceptions/ByteClassLoader.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+/**
+ * A minimal classloader for loading bytecodes that could not result from
+ * properly compiled Java.
+ *
+ * @author dr2chase
+ */
+public class ByteClassLoader extends ClassLoader {
+ /**
+ * (pre)load class name using classData for the definition.
+ *
+ * @param name
+ * @param classData
+ * @return
+ */
+ public Class<?> loadBytes(String name, byte[] classData) {
+ Class<?> clazz = defineClass(name, classData, 0, classData.length);
+ resolveClass(clazz);
+ return clazz;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/jsr292/methodHandleExceptions/C.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+/**
+ * Test class -- implements I, which provides default for m, but this class
+ * declares it abstract which (should) hide the interface default, and throw
+ * an abstract method error if it is called (calling it requires bytecode hacking
+ * or inconsistent compilation).
+ */
+public abstract class C implements I {
+ public abstract int m();
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/jsr292/methodHandleExceptions/I.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+public interface I {
+ default public int m() { return 1; }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/jsr292/methodHandleExceptions/TestAMEnotNPE.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+import java.lang.reflect.InvocationTargetException;
+import jdk.internal.org.objectweb.asm.ClassWriter;
+import jdk.internal.org.objectweb.asm.Handle;
+import jdk.internal.org.objectweb.asm.MethodVisitor;
+import jdk.internal.org.objectweb.asm.Opcodes;
+
+/**
+ * @test
+ * @bug 8025260
+ * @summary Ensure that AbstractMethodError is thrown, not NullPointerException, through MethodHandles::jump_from_method_handle code path
+ *
+ * @compile -XDignore.symbol.file ByteClassLoader.java I.java C.java TestAMEnotNPE.java
+ * @run main/othervm TestAMEnotNPE
+ */
+
+public class TestAMEnotNPE implements Opcodes {
+
+ /**
+ * The bytes for D, a NOT abstract class extending abstract class C
+ * without supplying an implementation for abstract method m.
+ * There is a default method in the interface I, but it should lose to
+ * the abstract class.
+
+ class D extends C {
+ D() { super(); }
+ // does not define m
+ }
+
+ * @return
+ * @throws Exception
+ */
+ public static byte[] bytesForD() throws Exception {
+
+ ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES|ClassWriter.COMPUTE_MAXS);
+ MethodVisitor mv;
+
+ cw.visit(V1_8, ACC_PUBLIC + ACC_SUPER, "D", null, "C", null);
+
+ {
+ mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
+ mv.visitCode();
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitMethodInsn(INVOKESPECIAL, "C", "<init>", "()V");
+ mv.visitInsn(RETURN);
+ mv.visitMaxs(0, 0);
+ mv.visitEnd();
+ }
+ cw.visitEnd();
+
+ return cw.toByteArray();
+ }
+
+
+ /**
+ * The bytecodes for an invokeExact of a particular methodHandle, I.m, invoked on a D
+
+ class T {
+ T() { super(); } // boring constructor
+ int test() {
+ MethodHandle mh = `I.m():int`;
+ D d = new D();
+ return mh.invokeExact(d); // Should explode here, AbstractMethodError
+ }
+ }
+
+ * @return
+ * @throws Exception
+ */
+ public static byte[] bytesForT() throws Exception {
+
+ ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES|ClassWriter.COMPUTE_MAXS);
+ MethodVisitor mv;
+
+ cw.visit(V1_8, ACC_PUBLIC + ACC_SUPER, "T", null, "java/lang/Object", null);
+ {
+ mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
+ mv.visitCode();
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
+ mv.visitInsn(RETURN);
+ mv.visitMaxs(0,0);
+ mv.visitEnd();
+ }
+ {
+ mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "test", "()I", null, null);
+ mv.visitCode();
+ mv.visitLdcInsn(new Handle(Opcodes.H_INVOKEINTERFACE, "I", "m", "()I"));
+ mv.visitTypeInsn(NEW, "D");
+ mv.visitInsn(DUP);
+ mv.visitMethodInsn(INVOKESPECIAL, "D", "<init>", "()V");
+ mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/invoke/MethodHandle", "invokeExact", "(LI;)I");
+ mv.visitInsn(IRETURN);
+ mv.visitMaxs(0,0);
+ mv.visitEnd();
+ }
+ cw.visitEnd();
+ return cw.toByteArray();
+ }
+
+ public static void main(String args[] ) throws Throwable {
+ ByteClassLoader bcl = new ByteClassLoader();
+ Class<?> d = bcl.loadBytes("D", bytesForD());
+ Class<?> t = bcl.loadBytes("T", bytesForT());
+ try {
+ Object result = t.getMethod("test").invoke(null);
+ System.out.println("Expected AbstractMethodError wrapped in InvocationTargetException, saw no exception");
+ throw new Error("Missing expected exception");
+ } catch (InvocationTargetException e) {
+ Throwable th = e.getCause();
+ if (th instanceof AbstractMethodError) {
+ th.printStackTrace(System.out);
+ System.out.println("PASS, saw expected exception (AbstractMethodError, wrapped in InvocationTargetException).");
+ } else {
+ System.out.println("Expected AbstractMethodError wrapped in InvocationTargetException, saw " + th);
+ throw th;
+ }
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/print/PrintInlining.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8022585
+ * @summary VM crashes when ran with -XX:+PrintInlining
+ * @run main/othervm -Xcomp -XX:+PrintInlining PrintInlining
+ *
+ */
+
+public class PrintInlining {
+ public static void main(String[] args) {
+ System.out.println("Passed");
+ }
+}
--- a/hotspot/test/compiler/whitebox/CompilerWhiteBoxTest.java Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/test/compiler/whitebox/CompilerWhiteBoxTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -74,6 +74,9 @@
protected static final int THRESHOLD;
/** count of invocation to triger OSR compilation */
protected static final long BACKEDGE_THRESHOLD;
+ /** Value of {@code java.vm.info} (interpreted|mixed|comp mode) */
+ protected static final String MODE
+ = System.getProperty("java.vm.info");
static {
if (TIERED_COMPILATION) {
@@ -202,7 +205,7 @@
if (WHITE_BOX.getMethodCompilationLevel(method, true) != 0) {
throw new RuntimeException(method + " osr_comp_level must be == 0");
}
- }
+ }
/**
* Checks, that {@linkplain #method} is compiled.
--- a/hotspot/test/compiler/whitebox/DeoptimizeAllTest.java Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/test/compiler/whitebox/DeoptimizeAllTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -53,6 +53,12 @@
*/
@Override
protected void test() throws Exception {
+ if (testCase.isOsr && CompilerWhiteBoxTest.MODE.startsWith(
+ "compiled ")) {
+ System.err.printf("Warning: %s is not applicable in %s%n",
+ testCase.name(), CompilerWhiteBoxTest.MODE);
+ return;
+ }
compile();
checkCompiled();
WHITE_BOX.deoptimizeAll();
--- a/hotspot/test/compiler/whitebox/DeoptimizeMethodTest.java Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/test/compiler/whitebox/DeoptimizeMethodTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -53,6 +53,12 @@
*/
@Override
protected void test() throws Exception {
+ if (testCase.isOsr && CompilerWhiteBoxTest.MODE.startsWith(
+ "compiled ")) {
+ System.err.printf("Warning: %s is not applicable in %s%n",
+ testCase.name(), CompilerWhiteBoxTest.MODE);
+ return;
+ }
compile();
checkCompiled();
deoptimize();
--- a/hotspot/test/compiler/whitebox/EnqueueMethodForCompilationTest.java Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/test/compiler/whitebox/EnqueueMethodForCompilationTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -70,12 +70,10 @@
int compLevel = getCompLevel();
int bci = WHITE_BOX.getMethodEntryBci(method);
- System.out.println("bci = " + bci);
- printInfo();
deoptimize();
- printInfo();
checkNotCompiled();
- printInfo();
+ WHITE_BOX.clearMethodState(method);
+
WHITE_BOX.enqueueMethodForCompilation(method, compLevel, bci);
checkCompiled();
deoptimize();
--- a/hotspot/test/compiler/whitebox/IsMethodCompilableTest.java Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/test/compiler/whitebox/IsMethodCompilableTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -68,6 +68,12 @@
*/
@Override
protected void test() throws Exception {
+ if (testCase.isOsr && CompilerWhiteBoxTest.MODE.startsWith(
+ "compiled ")) {
+ System.err.printf("Warning: %s is not applicable in %s%n",
+ testCase.name(), CompilerWhiteBoxTest.MODE);
+ return;
+ }
if (!isCompilable()) {
throw new RuntimeException(method + " must be compilable");
}
--- a/hotspot/test/compiler/whitebox/MakeMethodNotCompilableTest.java Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/test/compiler/whitebox/MakeMethodNotCompilableTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -62,6 +62,12 @@
*/
@Override
protected void test() throws Exception {
+ if (testCase.isOsr && CompilerWhiteBoxTest.MODE.startsWith(
+ "compiled ")) {
+ System.err.printf("Warning: %s is not applicable in %s%n",
+ testCase.name(), CompilerWhiteBoxTest.MODE);
+ return;
+ }
checkNotCompiled();
if (!isCompilable()) {
throw new RuntimeException(method + " must be compilable");
--- a/hotspot/test/gc/g1/TestSummarizeRSetStats.java Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/test/gc/g1/TestSummarizeRSetStats.java Thu Oct 10 13:41:08 2013 -0700
@@ -25,140 +25,61 @@
* @test TestSummarizeRSetStats.java
* @bug 8013895
* @library /testlibrary
- * @build TestSummarizeRSetStats
+ * @build TestSummarizeRSetStatsTools TestSummarizeRSetStats
* @summary Verify output of -XX:+G1SummarizeRSetStats
* @run main TestSummarizeRSetStats
*
* Test the output of G1SummarizeRSetStats in conjunction with G1SummarizeRSetStatsPeriod.
*/
-import com.oracle.java.testlibrary.*;
-import java.lang.Thread;
-import java.util.ArrayList;
-import java.util.Arrays;
-
-class RunSystemGCs {
- // 4M size, both are directly allocated into the old gen
- static Object[] largeObject1 = new Object[1024 * 1024];
- static Object[] largeObject2 = new Object[1024 * 1024];
-
- static int[] temp;
-
- public static void main(String[] args) {
- // create some cross-references between these objects
- for (int i = 0; i < largeObject1.length; i++) {
- largeObject1[i] = largeObject2;
- }
-
- for (int i = 0; i < largeObject2.length; i++) {
- largeObject2[i] = largeObject1;
- }
-
- int numGCs = Integer.parseInt(args[0]);
-
- if (numGCs > 0) {
- // try to force a minor collection: the young gen is 4M, the
- // amount of data allocated below is roughly that (4*1024*1024 +
- // some header data)
- for (int i = 0; i < 1024 ; i++) {
- temp = new int[1024];
- }
- }
-
- for (int i = 0; i < numGCs - 1; i++) {
- System.gc();
- }
- }
-}
-
public class TestSummarizeRSetStats {
- public static String runTest(String[] additionalArgs, int numGCs) throws Exception {
- ArrayList<String> finalargs = new ArrayList<String>();
- String[] defaultArgs = new String[] {
- "-XX:+UseG1GC",
- "-Xmn4m",
- "-Xmx20m",
- "-XX:InitiatingHeapOccupancyPercent=100", // we don't want the additional GCs due to initial marking
- "-XX:+PrintGC",
- "-XX:+UnlockDiagnosticVMOptions",
- "-XX:G1HeapRegionSize=1M",
- };
-
- finalargs.addAll(Arrays.asList(defaultArgs));
-
- if (additionalArgs != null) {
- finalargs.addAll(Arrays.asList(additionalArgs));
- }
-
- finalargs.add(RunSystemGCs.class.getName());
- finalargs.add(String.valueOf(numGCs));
-
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
- finalargs.toArray(new String[0]));
- OutputAnalyzer output = new OutputAnalyzer(pb.start());
-
- output.shouldHaveExitValue(0);
-
- String result = output.getStdout();
- return result;
- }
-
- private static void expectStatistics(String result, int expectedCumulative, int expectedPeriodic) throws Exception {
- int actualTotal = result.split("Concurrent RS processed").length - 1;
- int actualCumulative = result.split("Cumulative RS summary").length - 1;
-
- if (expectedCumulative != actualCumulative) {
- throw new Exception("Incorrect amount of RSet summaries at the end. Expected " + expectedCumulative + ", got " + actualCumulative);
- }
-
- if (expectedPeriodic != (actualTotal - actualCumulative)) {
- throw new Exception("Incorrect amount of per-period RSet summaries at the end. Expected " + expectedPeriodic + ", got " + (actualTotal - actualCumulative));
- }
- }
-
public static void main(String[] args) throws Exception {
String result;
- // no RSet statistics output
- result = runTest(null, 0);
- expectStatistics(result, 0, 0);
+ if (!TestSummarizeRSetStatsTools.testingG1GC()) {
+ return;
+ }
- // no RSet statistics output
- result = runTest(null, 2);
- expectStatistics(result, 0, 0);
+ // no remembered set summary output
+ result = TestSummarizeRSetStatsTools.runTest(null, 0);
+ TestSummarizeRSetStatsTools.expectRSetSummaries(result, 0, 0);
- // no RSet statistics output
- result = runTest(new String[] { "-XX:G1SummarizeRSetStatsPeriod=1" }, 3);
- expectStatistics(result, 0, 0);
+ // no remembered set summary output
+ result = TestSummarizeRSetStatsTools.runTest(null, 2);
+ TestSummarizeRSetStatsTools.expectRSetSummaries(result, 0, 0);
- // single RSet statistics output at the end
- result = runTest(new String[] { "-XX:+G1SummarizeRSetStats" }, 0);
- expectStatistics(result, 1, 0);
+ // no remembered set summary output
+ result = TestSummarizeRSetStatsTools.runTest(new String[] { "-XX:G1SummarizeRSetStatsPeriod=1" }, 3);
+ TestSummarizeRSetStatsTools.expectRSetSummaries(result, 0, 0);
- // single RSet statistics output at the end
- result = runTest(new String[] { "-XX:+G1SummarizeRSetStats" }, 2);
- expectStatistics(result, 1, 0);
+ // single remembered set summary output at the end
+ result = TestSummarizeRSetStatsTools.runTest(new String[] { "-XX:+G1SummarizeRSetStats" }, 0);
+ TestSummarizeRSetStatsTools.expectRSetSummaries(result, 1, 0);
- // single RSet statistics output
- result = runTest(new String[] { "-XX:+G1SummarizeRSetStats", "-XX:G1SummarizeRSetStatsPeriod=1" }, 0);
- expectStatistics(result, 1, 0);
+ // single remembered set summary output at the end
+ result = TestSummarizeRSetStatsTools.runTest(new String[] { "-XX:+G1SummarizeRSetStats" }, 2);
+ TestSummarizeRSetStatsTools.expectRSetSummaries(result, 1, 0);
- // two times RSet statistics output
- result = runTest(new String[] { "-XX:+G1SummarizeRSetStats", "-XX:G1SummarizeRSetStatsPeriod=1" }, 1);
- expectStatistics(result, 1, 1);
+ // single remembered set summary output
+ result = TestSummarizeRSetStatsTools.runTest(new String[] { "-XX:+G1SummarizeRSetStats", "-XX:G1SummarizeRSetStatsPeriod=1" }, 0);
+ TestSummarizeRSetStatsTools.expectRSetSummaries(result, 1, 0);
+
+ // two times remembered set summary output
+ result = TestSummarizeRSetStatsTools.runTest(new String[] { "-XX:+G1SummarizeRSetStats", "-XX:G1SummarizeRSetStatsPeriod=1" }, 1);
+ TestSummarizeRSetStatsTools.expectRSetSummaries(result, 1, 2);
- // four times RSet statistics output
- result = runTest(new String[] { "-XX:+G1SummarizeRSetStats", "-XX:G1SummarizeRSetStatsPeriod=1" }, 3);
- expectStatistics(result, 1, 3);
+ // four times remembered set summary output
+ result = TestSummarizeRSetStatsTools.runTest(new String[] { "-XX:+G1SummarizeRSetStats", "-XX:G1SummarizeRSetStatsPeriod=1" }, 3);
+ TestSummarizeRSetStatsTools.expectRSetSummaries(result, 1, 6);
- // three times RSet statistics output
- result = runTest(new String[] { "-XX:+G1SummarizeRSetStats", "-XX:G1SummarizeRSetStatsPeriod=2" }, 3);
- expectStatistics(result, 1, 2);
+ // three times remembered set summary output
+ result = TestSummarizeRSetStatsTools.runTest(new String[] { "-XX:+G1SummarizeRSetStats", "-XX:G1SummarizeRSetStatsPeriod=2" }, 3);
+ TestSummarizeRSetStatsTools.expectRSetSummaries(result, 1, 4);
- // single RSet statistics output
- result = runTest(new String[] { "-XX:+G1SummarizeRSetStats", "-XX:G1SummarizeRSetStatsPeriod=100" }, 3);
- expectStatistics(result, 1, 1);
+ // single remembered set summary output
+ result = TestSummarizeRSetStatsTools.runTest(new String[] { "-XX:+G1SummarizeRSetStats", "-XX:G1SummarizeRSetStatsPeriod=100" }, 3);
+ TestSummarizeRSetStatsTools.expectRSetSummaries(result, 1, 2);
}
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/gc/g1/TestSummarizeRSetStatsPerRegion.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test TestSummarizeRSetStatsPerRegion.java
+ * @bug 8014078
+ * @library /testlibrary
+ * @build TestSummarizeRSetStatsTools TestSummarizeRSetStatsPerRegion
+ * @summary Verify output of -XX:+G1SummarizeRSetStats in regards to per-region type output
+ * @run main TestSummarizeRSetStatsPerRegion
+ */
+
+import com.oracle.java.testlibrary.*;
+import java.lang.Thread;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+public class TestSummarizeRSetStatsPerRegion {
+
+ public static void main(String[] args) throws Exception {
+ String result;
+
+ if (!TestSummarizeRSetStatsTools.testingG1GC()) {
+ return;
+ }
+
+ // single remembered set summary output at the end
+ result = TestSummarizeRSetStatsTools.runTest(new String[] { "-XX:+G1SummarizeRSetStats" }, 0);
+ TestSummarizeRSetStatsTools.expectPerRegionRSetSummaries(result, 1, 0);
+
+ // two times remembered set summary output
+ result = TestSummarizeRSetStatsTools.runTest(new String[] { "-XX:+G1SummarizeRSetStats", "-XX:G1SummarizeRSetStatsPeriod=1" }, 1);
+ TestSummarizeRSetStatsTools.expectPerRegionRSetSummaries(result, 1, 2);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/gc/g1/TestSummarizeRSetStatsThreads.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test TestSummarizeRSetStatsThreads
+ * @bug 8025441
+ * @summary Ensure that various values of worker threads/concurrent
+ * refinement threads do not crash the VM.
+ * @key gc
+ * @library /testlibrary
+ */
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import com.oracle.java.testlibrary.ProcessTools;
+import com.oracle.java.testlibrary.OutputAnalyzer;
+
+public class TestSummarizeRSetStatsThreads {
+
+ private static void runTest(int refinementThreads, int workerThreads) throws Exception {
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC",
+ "-XX:+UnlockDiagnosticVMOptions",
+ "-XX:+G1SummarizeRSetStats",
+ "-XX:G1ConcRefinementThreads=" + refinementThreads,
+ "-XX:ParallelGCThreads=" + workerThreads,
+ "-version");
+
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
+
+ // check output to contain the string "Concurrent RS threads times (s)" followed by
+ // the correct number of values in the next line.
+
+ // a zero in refinement thread numbers indicates that the value in ParallelGCThreads should be used.
+ // Additionally use at least one thread.
+ int expectedNumRefinementThreads = refinementThreads == 0 ? workerThreads : refinementThreads;
+ expectedNumRefinementThreads = Math.max(1, expectedNumRefinementThreads);
+ // create the pattern made up of n copies of a floating point number pattern
+ String numberPattern = String.format("%0" + expectedNumRefinementThreads + "d", 0)
+ .replace("0", "\\s+\\d+\\.\\d+");
+ String pattern = "Concurrent RS threads times \\(s\\)$" + numberPattern + "$";
+ Matcher m = Pattern.compile(pattern, Pattern.MULTILINE).matcher(output.getStdout());
+
+ if (!m.find()) {
+ throw new Exception("Could not find correct output for concurrent RS threads times in stdout," +
+ " should match the pattern \"" + pattern + "\", but stdout is \n" + output.getStdout());
+ }
+ output.shouldHaveExitValue(0);
+ }
+
+ public static void main(String[] args) throws Exception {
+ if (!TestSummarizeRSetStatsTools.testingG1GC()) {
+ return;
+ }
+ // different valid combinations of number of refinement and gc worker threads
+ runTest(0, 0);
+ runTest(0, 5);
+ runTest(5, 0);
+ runTest(10, 10);
+ runTest(1, 2);
+ runTest(4, 3);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/gc/g1/TestSummarizeRSetStatsTools.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,154 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * Common helpers for TestSummarizeRSetStats* tests
+ */
+
+import sun.management.ManagementFactoryHelper;
+import com.sun.management.HotSpotDiagnosticMXBean;
+import com.sun.management.VMOption;
+
+import com.oracle.java.testlibrary.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.lang.Thread;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+class VerifySummaryOutput {
+ // 4M size, both are directly allocated into the old gen
+ static Object[] largeObject1 = new Object[1024 * 1024];
+ static Object[] largeObject2 = new Object[1024 * 1024];
+
+ static int[] temp;
+
+ public static void main(String[] args) {
+ // create some cross-references between these objects
+ for (int i = 0; i < largeObject1.length; i++) {
+ largeObject1[i] = largeObject2;
+ }
+
+ for (int i = 0; i < largeObject2.length; i++) {
+ largeObject2[i] = largeObject1;
+ }
+
+ int numGCs = Integer.parseInt(args[0]);
+
+ if (numGCs > 0) {
+ // try to force a minor collection: the young gen is 4M, the
+ // amount of data allocated below is roughly that (4*1024*1024 +
+ // some header data)
+ for (int i = 0; i < 1024 ; i++) {
+ temp = new int[1024];
+ }
+ }
+
+ for (int i = 0; i < numGCs - 1; i++) {
+ System.gc();
+ }
+ }
+}
+
+public class TestSummarizeRSetStatsTools {
+
+ // the VM is currently run using G1GC, i.e. trying to test G1 functionality.
+ public static boolean testingG1GC() {
+ HotSpotDiagnosticMXBean diagnostic = ManagementFactoryHelper.getDiagnosticMXBean();
+
+ VMOption option = diagnostic.getVMOption("UseG1GC");
+ if (option.getValue().equals("false")) {
+ System.out.println("Skipping this test. It is only a G1 test.");
+ return false;
+ }
+ return true;
+ }
+
+ public static String runTest(String[] additionalArgs, int numGCs) throws Exception {
+ ArrayList<String> finalargs = new ArrayList<String>();
+ String[] defaultArgs = new String[] {
+ "-XX:+UseG1GC",
+ "-XX:+UseCompressedOops",
+ "-Xmn4m",
+ "-Xmx20m",
+ "-XX:InitiatingHeapOccupancyPercent=100", // we don't want the additional GCs due to initial marking
+ "-XX:+PrintGC",
+ "-XX:+UnlockDiagnosticVMOptions",
+ "-XX:G1HeapRegionSize=1M",
+ };
+
+ finalargs.addAll(Arrays.asList(defaultArgs));
+
+ if (additionalArgs != null) {
+ finalargs.addAll(Arrays.asList(additionalArgs));
+ }
+
+ finalargs.add(VerifySummaryOutput.class.getName());
+ finalargs.add(String.valueOf(numGCs));
+
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
+ finalargs.toArray(new String[0]));
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
+
+ output.shouldHaveExitValue(0);
+
+ String result = output.getStdout();
+ return result;
+ }
+
+ private static void checkCounts(int expected, int actual, String which) throws Exception {
+ if (expected != actual) {
+ throw new Exception("RSet summaries mention " + which + " regions an incorrect number of times. Expected " + expected + ", got " + actual);
+ }
+ }
+
+ public static void expectPerRegionRSetSummaries(String result, int expectedCumulative, int expectedPeriodic) throws Exception {
+ expectRSetSummaries(result, expectedCumulative, expectedPeriodic);
+ int actualYoung = result.split("Young regions").length - 1;
+ int actualHumonguous = result.split("Humonguous regions").length - 1;
+ int actualFree = result.split("Free regions").length - 1;
+ int actualOther = result.split("Old regions").length - 1;
+
+ // the strings we check for above are printed four times per summary
+ int expectedPerRegionTypeInfo = (expectedCumulative + expectedPeriodic) * 4;
+
+ checkCounts(expectedPerRegionTypeInfo, actualYoung, "Young");
+ checkCounts(expectedPerRegionTypeInfo, actualHumonguous, "Humonguous");
+ checkCounts(expectedPerRegionTypeInfo, actualFree, "Free");
+ checkCounts(expectedPerRegionTypeInfo, actualOther, "Old");
+ }
+
+ public static void expectRSetSummaries(String result, int expectedCumulative, int expectedPeriodic) throws Exception {
+ int actualTotal = result.split("concurrent refinement").length - 1;
+ int actualCumulative = result.split("Cumulative RS summary").length - 1;
+
+ if (expectedCumulative != actualCumulative) {
+ throw new Exception("Incorrect amount of RSet summaries at the end. Expected " + expectedCumulative + ", got " + actualCumulative);
+ }
+
+ if (expectedPeriodic != (actualTotal - actualCumulative)) {
+ throw new Exception("Incorrect amount of per-period RSet summaries at the end. Expected " + expectedPeriodic + ", got " + (actualTotal - actualCumulative));
+ }
+ }
+}
+
--- a/hotspot/test/gc/metaspace/G1AddMetaspaceDependency.java Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/test/gc/metaspace/G1AddMetaspaceDependency.java Thu Oct 10 13:41:08 2013 -0700
@@ -107,7 +107,6 @@
Loader f_loader = new Loader(b_name, b_bytes, a_name, a_loader);
Loader g_loader = new Loader(b_name, b_bytes, a_name, a_loader);
- byte[] b = new byte[20 * 2 << 20];
Class<?> c;
c = b_loader.loadClass(b_name);
c = c_loader.loadClass(b_name);
--- a/hotspot/test/gc/metaspace/TestPerfCountersAndMemoryPools.java Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/test/gc/metaspace/TestPerfCountersAndMemoryPools.java Thu Oct 10 13:41:08 2013 -0700
@@ -29,10 +29,11 @@
/* @test TestPerfCountersAndMemoryPools
* @bug 8023476
+ * @library /testlibrary
* @summary Tests that a MemoryPoolMXBeans and PerfCounters for metaspace
* report the same data.
- * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-UseCompressedOops -XX:-UseCompressedKlassPointers -XX:+UseSerialGC -XX:+UsePerfData TestPerfCountersAndMemoryPools
- * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+UseCompressedOops -XX:+UseCompressedKlassPointers -XX:+UseSerialGC -XX:+UsePerfData TestPerfCountersAndMemoryPools
+ * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-UseCompressedOops -XX:-UseCompressedKlassPointers -XX:+UseSerialGC -XX:+UsePerfData -Xint TestPerfCountersAndMemoryPools
+ * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+UseCompressedOops -XX:+UseCompressedKlassPointers -XX:+UseSerialGC -XX:+UsePerfData -Xint TestPerfCountersAndMemoryPools
*/
public class TestPerfCountersAndMemoryPools {
public static void main(String[] args) throws Exception {
@@ -43,11 +44,11 @@
}
}
- private static MemoryUsage getMemoryUsage(String memoryPoolName) {
+ private static MemoryPoolMXBean getMemoryPool(String memoryPoolName) {
List<MemoryPoolMXBean> pools = ManagementFactory.getMemoryPoolMXBeans();
for (MemoryPoolMXBean pool : pools) {
if (pool.getName().equals(memoryPoolName)) {
- return pool.getUsage();
+ return pool;
}
}
@@ -57,19 +58,18 @@
private static void checkMemoryUsage(String memoryPoolName, String perfNS)
throws Exception {
- // Need to do a gc before each comparison to update the perf counters
+ MemoryPoolMXBean pool = getMemoryPool(memoryPoolName);
- System.gc();
- MemoryUsage mu = getMemoryUsage(memoryPoolName);
- assertEQ(getMinCapacity(perfNS), mu.getInit());
-
+ // Must do a GC to update performance counters
System.gc();
- mu = getMemoryUsage(memoryPoolName);
- assertEQ(getUsed(perfNS), mu.getUsed());
+ assertEQ(getMinCapacity(perfNS), pool.getUsage().getInit());
+ // Must do a second GC to update the perfomance counters again, since
+ // the call pool.getUsage().getInit() could have allocated some
+ // metadata.
System.gc();
- mu = getMemoryUsage(memoryPoolName);
- assertEQ(getCapacity(perfNS), mu.getCommitted());
+ assertEQ(getUsed(perfNS), pool.getUsage().getUsed());
+ assertEQ(getCapacity(perfNS), pool.getUsage().getCommitted());
}
private static long getMinCapacity(String ns) throws Exception {
--- a/hotspot/test/runtime/CDSCompressedKPtrs/XShareAuto.java Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/test/runtime/CDSCompressedKPtrs/XShareAuto.java Thu Oct 10 13:41:08 2013 -0700
@@ -33,16 +33,9 @@
public class XShareAuto {
public static void main(String[] args) throws Exception {
- if (!Platform.is64bit()) {
- System.out.println("ObjectAlignmentInBytes for CDS is only " +
- "supported on 64bit platforms; this plaform is " +
- System.getProperty("sun.arch.data.model"));
- System.out.println("Skipping the test");
- return;
- }
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
- "-XX:+UnlockDiagnosticVMOptions", "-XX:SharedArchiveFile=./sample.jsa",
- "-Xshare:dump");
+ "-server", "-XX:+UnlockDiagnosticVMOptions",
+ "-XX:SharedArchiveFile=./sample.jsa", "-Xshare:dump");
OutputAnalyzer output = new OutputAnalyzer(pb.start());
output.shouldContain("Loading classes to share");
output.shouldHaveExitValue(0);
--- a/hotspot/test/testlibrary/AssertsTest.java Thu Oct 10 08:51:55 2013 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,237 +0,0 @@
-/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-import static com.oracle.java.testlibrary.Asserts.*;
-
-/* @test
- * @summary Tests the different assertions in the Assert class
- * @library /testlibrary
- */
-public class AssertsTest {
- private static class Foo implements Comparable<Foo> {
- final int id;
- public Foo(int id) {
- this.id = id;
- }
-
- public int compareTo(Foo f) {
- return new Integer(id).compareTo(new Integer(f.id));
- }
- }
-
- public static void main(String[] args) throws Exception {
- testLessThan();
- testLessThanOrEqual();
- testEquals();
- testGreaterThanOrEqual();
- testGreaterThan();
- testNotEquals();
- testNull();
- testNotNull();
- testTrue();
- testFalse();
- }
-
- private static void testLessThan() throws Exception {
- expectPass(Assertion.LT, 1, 2);
-
- expectFail(Assertion.LT, 2, 2);
- expectFail(Assertion.LT, 2, 1);
- expectFail(Assertion.LT, null, 2);
- expectFail(Assertion.LT, 2, null);
- }
-
- private static void testLessThanOrEqual() throws Exception {
- expectPass(Assertion.LTE, 1, 2);
- expectPass(Assertion.LTE, 2, 2);
-
- expectFail(Assertion.LTE, 3, 2);
- expectFail(Assertion.LTE, null, 2);
- expectFail(Assertion.LTE, 2, null);
- }
-
- private static void testEquals() throws Exception {
- expectPass(Assertion.EQ, 1, 1);
- expectPass(Assertion.EQ, null, null);
-
- Foo f1 = new Foo(1);
- expectPass(Assertion.EQ, f1, f1);
-
- Foo f2 = new Foo(1);
- expectFail(Assertion.EQ, f1, f2);
- expectFail(Assertion.LTE, null, 2);
- expectFail(Assertion.LTE, 2, null);
- }
-
- private static void testGreaterThanOrEqual() throws Exception {
- expectPass(Assertion.GTE, 1, 1);
- expectPass(Assertion.GTE, 2, 1);
-
- expectFail(Assertion.GTE, 1, 2);
- expectFail(Assertion.GTE, null, 2);
- expectFail(Assertion.GTE, 2, null);
- }
-
- private static void testGreaterThan() throws Exception {
- expectPass(Assertion.GT, 2, 1);
-
- expectFail(Assertion.GT, 1, 1);
- expectFail(Assertion.GT, 1, 2);
- expectFail(Assertion.GT, null, 2);
- expectFail(Assertion.GT, 2, null);
- }
-
- private static void testNotEquals() throws Exception {
- expectPass(Assertion.NE, null, 1);
- expectPass(Assertion.NE, 1, null);
-
- Foo f1 = new Foo(1);
- Foo f2 = new Foo(1);
- expectPass(Assertion.NE, f1, f2);
-
- expectFail(Assertion.NE, null, null);
- expectFail(Assertion.NE, f1, f1);
- expectFail(Assertion.NE, 1, 1);
- }
-
- private static void testNull() throws Exception {
- expectPass(Assertion.NULL, null);
-
- expectFail(Assertion.NULL, 1);
- }
-
- private static void testNotNull() throws Exception {
- expectPass(Assertion.NOTNULL, 1);
-
- expectFail(Assertion.NOTNULL, null);
- }
-
- private static void testTrue() throws Exception {
- expectPass(Assertion.TRUE, true);
-
- expectFail(Assertion.TRUE, false);
- }
-
- private static void testFalse() throws Exception {
- expectPass(Assertion.FALSE, false);
-
- expectFail(Assertion.FALSE, true);
- }
-
- private static <T extends Comparable<T>> void expectPass(Assertion assertion, T ... args)
- throws Exception {
- Assertion.run(assertion, args);
- }
-
- private static <T extends Comparable<T>> void expectFail(Assertion assertion, T ... args)
- throws Exception {
- try {
- Assertion.run(assertion, args);
- } catch (RuntimeException e) {
- return;
- }
- throw new Exception("Expected " + Assertion.format(assertion, (Object[]) args) +
- " to throw a RuntimeException");
- }
-
-}
-
-enum Assertion {
- LT, LTE, EQ, GTE, GT, NE, NULL, NOTNULL, FALSE, TRUE;
-
- public static <T extends Comparable<T>> void run(Assertion assertion, T ... args) {
- String msg = "Expected " + format(assertion, args) + " to pass";
- switch (assertion) {
- case LT:
- assertLessThan(args[0], args[1], msg);
- break;
- case LTE:
- assertLessThanOrEqual(args[0], args[1], msg);
- break;
- case EQ:
- assertEquals(args[0], args[1], msg);
- break;
- case GTE:
- assertGreaterThanOrEqual(args[0], args[1], msg);
- break;
- case GT:
- assertGreaterThan(args[0], args[1], msg);
- break;
- case NE:
- assertNotEquals(args[0], args[1], msg);
- break;
- case NULL:
- assertNull(args == null ? args : args[0], msg);
- break;
- case NOTNULL:
- assertNotNull(args == null ? args : args[0], msg);
- break;
- case FALSE:
- assertFalse((Boolean) args[0], msg);
- break;
- case TRUE:
- assertTrue((Boolean) args[0], msg);
- break;
- default:
- // do nothing
- }
- }
-
- public static String format(Assertion assertion, Object ... args) {
- switch (assertion) {
- case LT:
- return asString("assertLessThan", args);
- case LTE:
- return asString("assertLessThanOrEqual", args);
- case EQ:
- return asString("assertEquals", args);
- case GTE:
- return asString("assertGreaterThanOrEquals", args);
- case GT:
- return asString("assertGreaterThan", args);
- case NE:
- return asString("assertNotEquals", args);
- case NULL:
- return asString("assertNull", args);
- case NOTNULL:
- return asString("assertNotNull", args);
- case FALSE:
- return asString("assertFalse", args);
- case TRUE:
- return asString("assertTrue", args);
- default:
- return "";
- }
- }
-
- private static String asString(String assertion, Object ... args) {
- if (args == null) {
- return String.format("%s(null)", assertion);
- }
- if (args.length == 1) {
- return String.format("%s(%s)", assertion, args[0]);
- } else {
- return String.format("%s(%s, %s)", assertion, args[0], args[1]);
- }
- }
-}
--- a/hotspot/test/testlibrary/OutputAnalyzerReportingTest.java Thu Oct 10 08:51:55 2013 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,124 +0,0 @@
-/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-
-/*
- * @test
- * @summary Test the OutputAnalyzer reporting functionality,
- * such as printing additional diagnostic info
- * (exit code, stdout, stderr, command line, etc.)
- * @library /testlibrary
- */
-
-import java.io.ByteArrayOutputStream;
-import java.io.PrintStream;
-
-import com.oracle.java.testlibrary.OutputAnalyzer;
-import com.oracle.java.testlibrary.ProcessTools;
-
-
-public class OutputAnalyzerReportingTest {
-
- public static void main(String[] args) throws Exception {
- // Create the output analyzer under test
- String stdout = "aaaaaa";
- String stderr = "bbbbbb";
- OutputAnalyzer output = new OutputAnalyzer(stdout, stderr);
-
- // Expected summary values should be the same for all cases,
- // since the outputAnalyzer object is the same
- String expectedExitValue = "-1";
- String expectedSummary =
- " stdout: [" + stdout + "];\n" +
- " stderr: [" + stderr + "]\n" +
- " exitValue = " + expectedExitValue + "\n";
-
-
- DiagnosticSummaryTestRunner testRunner =
- new DiagnosticSummaryTestRunner();
-
- // should have exit value
- testRunner.init(expectedSummary);
- int unexpectedExitValue = 2;
- try {
- output.shouldHaveExitValue(unexpectedExitValue);
- } catch (RuntimeException e) { }
- testRunner.closeAndCheckResults();
-
- // should not contain
- testRunner.init(expectedSummary);
- try {
- output.shouldNotContain(stdout);
- } catch (RuntimeException e) { }
- testRunner.closeAndCheckResults();
-
- // should contain
- testRunner.init(expectedSummary);
- try {
- output.shouldContain("unexpected-stuff");
- } catch (RuntimeException e) { }
- testRunner.closeAndCheckResults();
-
- // should not match
- testRunner.init(expectedSummary);
- try {
- output.shouldNotMatch("[a]");
- } catch (RuntimeException e) { }
- testRunner.closeAndCheckResults();
-
- // should match
- testRunner.init(expectedSummary);
- try {
- output.shouldMatch("[qwerty]");
- } catch (RuntimeException e) { }
- testRunner.closeAndCheckResults();
-
- }
-
- private static class DiagnosticSummaryTestRunner {
- private ByteArrayOutputStream byteStream =
- new ByteArrayOutputStream(10000);
-
- private String expectedSummary = "";
- private PrintStream errStream;
-
-
- public void init(String expectedSummary) {
- this.expectedSummary = expectedSummary;
- byteStream.reset();
- errStream = new PrintStream(byteStream);
- System.setErr(errStream);
- }
-
- public void closeAndCheckResults() {
- // check results
- errStream.close();
- String stdErrStr = byteStream.toString();
- if (!stdErrStr.contains(expectedSummary)) {
- throw new RuntimeException("The output does not contain "
- + "the diagnostic message, or the message is incorrect");
- }
- }
- }
-
-}
--- a/hotspot/test/testlibrary/OutputAnalyzerTest.java Thu Oct 10 08:51:55 2013 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,193 +0,0 @@
-/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @summary Test the OutputAnalyzer utility class
- * @library /testlibrary
- */
-
-import com.oracle.java.testlibrary.OutputAnalyzer;
-
-public class OutputAnalyzerTest {
-
- public static void main(String args[]) throws Exception {
-
- String stdout = "aaaaaa";
- String stderr = "bbbbbb";
-
- // Regexps used for testing pattern matching of the test input
- String stdoutPattern = "[a]";
- String stderrPattern = "[b]";
- String nonExistingPattern = "[c]";
-
- OutputAnalyzer output = new OutputAnalyzer(stdout, stderr);
-
- if (!stdout.equals(output.getStdout())) {
- throw new Exception("getStdout() returned '" + output.getStdout() + "', expected '" + stdout + "'");
- }
-
- if (!stderr.equals(output.getStderr())) {
- throw new Exception("getStderr() returned '" + output.getStderr() + "', expected '" + stderr + "'");
- }
-
- try {
- output.shouldContain(stdout);
- output.stdoutShouldContain(stdout);
- output.shouldContain(stderr);
- output.stderrShouldContain(stderr);
- } catch (RuntimeException e) {
- throw new Exception("shouldContain() failed", e);
- }
-
- try {
- output.shouldContain("cccc");
- throw new Exception("shouldContain() failed to throw exception");
- } catch (RuntimeException e) {
- // expected
- }
-
- try {
- output.stdoutShouldContain(stderr);
- throw new Exception("stdoutShouldContain() failed to throw exception");
- } catch (RuntimeException e) {
- // expected
- }
-
- try {
- output.stderrShouldContain(stdout);
- throw new Exception("stdoutShouldContain() failed to throw exception");
- } catch (RuntimeException e) {
- // expected
- }
-
- try {
- output.shouldNotContain("cccc");
- output.stdoutShouldNotContain("cccc");
- output.stderrShouldNotContain("cccc");
- } catch (RuntimeException e) {
- throw new Exception("shouldNotContain() failed", e);
- }
-
- try {
- output.shouldNotContain(stdout);
- throw new Exception("shouldContain() failed to throw exception");
- } catch (RuntimeException e) {
- // expected
- }
-
- try {
- output.stdoutShouldNotContain(stdout);
- throw new Exception("shouldContain() failed to throw exception");
- } catch (RuntimeException e) {
- // expected
- }
-
- try {
- output.stderrShouldNotContain(stderr);
- throw new Exception("shouldContain() failed to throw exception");
- } catch (RuntimeException e) {
- // expected
- }
-
- // Should match
- try {
- output.shouldMatch(stdoutPattern);
- output.stdoutShouldMatch(stdoutPattern);
- output.shouldMatch(stderrPattern);
- output.stderrShouldMatch(stderrPattern);
- } catch (RuntimeException e) {
- throw new Exception("shouldMatch() failed", e);
- }
-
- try {
- output.shouldMatch(nonExistingPattern);
- throw new Exception("shouldMatch() failed to throw exception");
- } catch (RuntimeException e) {
- // expected
- }
-
- try {
- output.stdoutShouldMatch(stderrPattern);
- throw new Exception(
- "stdoutShouldMatch() failed to throw exception");
- } catch (RuntimeException e) {
- // expected
- }
-
- try {
- output.stderrShouldMatch(stdoutPattern);
- throw new Exception(
- "stderrShouldMatch() failed to throw exception");
- } catch (RuntimeException e) {
- // expected
- }
-
- // Should not match
- try {
- output.shouldNotMatch(nonExistingPattern);
- output.stdoutShouldNotMatch(nonExistingPattern);
- output.stderrShouldNotMatch(nonExistingPattern);
- } catch (RuntimeException e) {
- throw new Exception("shouldNotMatch() failed", e);
- }
-
- try {
- output.shouldNotMatch(stdoutPattern);
- throw new Exception("shouldNotMatch() failed to throw exception");
- } catch (RuntimeException e) {
- // expected
- }
-
- try {
- output.stdoutShouldNotMatch(stdoutPattern);
- throw new Exception("shouldNotMatch() failed to throw exception");
- } catch (RuntimeException e) {
- // expected
- }
-
- try {
- output.stderrShouldNotMatch(stderrPattern);
- throw new Exception("shouldNotMatch() failed to throw exception");
- } catch (RuntimeException e) {
- // expected
- }
-
- {
- String aaaa = "aaaa";
- String result = output.firstMatch(aaaa);
- if (!aaaa.equals(result)) {
- throw new Exception("firstMatch(String) faild to match. Expected: " + aaaa + " got: " + result);
- }
- }
-
- {
- String aa = "aa";
- String aa_grouped_aa = aa + "(" + aa + ")";
- String result = output.firstMatch(aa_grouped_aa, 1);
- if (!aa.equals(result)) {
- throw new Exception("firstMatch(String, int) failed to match. Expected: " + aa + " got: " + result);
- }
- }
- }
-}
--- a/hotspot/test/testlibrary/com/oracle/java/testlibrary/Platform.java Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/test/testlibrary/com/oracle/java/testlibrary/Platform.java Thu Oct 10 13:41:08 2013 -0700
@@ -24,50 +24,80 @@
package com.oracle.java.testlibrary;
public class Platform {
- private static final String osName = System.getProperty("os.name");
- private static final String dataModel = System.getProperty("sun.arch.data.model");
- private static final String vmVersion = System.getProperty("java.vm.version");
- private static final String osArch = System.getProperty("os.arch");
+ private static final String osName = System.getProperty("os.name");
+ private static final String dataModel = System.getProperty("sun.arch.data.model");
+ private static final String vmVersion = System.getProperty("java.vm.version");
+ private static final String osArch = System.getProperty("os.arch");
- public static boolean is64bit() {
- return dataModel.equals("64");
- }
+ public static boolean is32bit() {
+ return dataModel.equals("32");
+ }
+
+ public static boolean is64bit() {
+ return dataModel.equals("64");
+ }
+
+ public static boolean isSolaris() {
+ return isOs("sunos");
+ }
- public static boolean isSolaris() {
- return osName.toLowerCase().startsWith("sunos");
- }
+ public static boolean isWindows() {
+ return isOs("win");
+ }
+
+ public static boolean isOSX() {
+ return isOs("mac");
+ }
- public static boolean isWindows() {
- return osName.toLowerCase().startsWith("win");
- }
+ public static boolean isLinux() {
+ return isOs("linux");
+ }
- public static boolean isOSX() {
- return osName.toLowerCase().startsWith("mac");
- }
+ private static boolean isOs(String osname) {
+ return osName.toLowerCase().startsWith(osname.toLowerCase());
+ }
+
+ public static String getOsName() {
+ return osName;
+ }
- public static boolean isLinux() {
- return osName.toLowerCase().startsWith("linux");
- }
+ public static boolean isDebugBuild() {
+ return vmVersion.toLowerCase().contains("debug");
+ }
+
+ public static String getVMVersion() {
+ return vmVersion;
+ }
- public static String getOsName() {
- return osName;
- }
+ // Returns true for sparc and sparcv9.
+ public static boolean isSparc() {
+ return isArch("sparc");
+ }
- public static boolean isDebugBuild() {
- return vmVersion.toLowerCase().contains("debug");
- }
+ public static boolean isARM() {
+ return isArch("arm");
+ }
- public static String getVMVersion() {
- return vmVersion;
- }
+ public static boolean isPPC() {
+ return isArch("ppc");
+ }
+
+ public static boolean isX86() {
+ // On Linux it's 'i386', Windows 'x86'
+ return (isArch("i386") || isArch("x86"));
+ }
- // Returns true for sparc and sparcv9.
- public static boolean isSparc() {
- return osArch.toLowerCase().startsWith("sparc");
- }
+ public static boolean isX64() {
+ // On OSX it's 'x86_64' and on other (Linux, Windows and Solaris) platforms it's 'amd64'
+ return (isArch("amd64") || isArch("x86_64"));
+ }
- public static String getOsArch() {
- return osArch;
- }
+ private static boolean isArch(String archname) {
+ return osArch.toLowerCase().startsWith(archname.toLowerCase());
+ }
+
+ public static String getOsArch() {
+ return osArch;
+ }
}
--- a/hotspot/test/testlibrary/ctw/src/sun/hotspot/tools/ctw/ClassPathDirEntry.java Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/test/testlibrary/ctw/src/sun/hotspot/tools/ctw/ClassPathDirEntry.java Thu Oct 10 13:41:08 2013 -0700
@@ -36,8 +36,7 @@
import java.nio.file.attribute.*;
/**
- * * Handler for dirs containing classes to compile.
- * @author igor.ignatyev@oracle.com
+ * Handler for dirs containing classes to compile.
*/
public class ClassPathDirEntry extends PathHandler {
--- a/hotspot/test/testlibrary/ctw/src/sun/hotspot/tools/ctw/ClassPathJarEntry.java Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/test/testlibrary/ctw/src/sun/hotspot/tools/ctw/ClassPathJarEntry.java Thu Oct 10 13:41:08 2013 -0700
@@ -35,7 +35,6 @@
/**
* Handler for jar-files containing classes to compile.
- * @author igor.ignatyev@oracle.com
*/
public class ClassPathJarEntry extends PathHandler {
--- a/hotspot/test/testlibrary/ctw/src/sun/hotspot/tools/ctw/ClassPathJarInDirEntry.java Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/test/testlibrary/ctw/src/sun/hotspot/tools/ctw/ClassPathJarInDirEntry.java Thu Oct 10 13:41:08 2013 -0700
@@ -31,8 +31,6 @@
/**
* Handler for dirs containing jar-files with classes to compile.
- *
- * @author igor.ignatyev@oracle.com
*/
public class ClassPathJarInDirEntry extends PathHandler {
--- a/hotspot/test/testlibrary/ctw/src/sun/hotspot/tools/ctw/ClassesListInFile.java Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/test/testlibrary/ctw/src/sun/hotspot/tools/ctw/ClassesListInFile.java Thu Oct 10 13:41:08 2013 -0700
@@ -32,8 +32,6 @@
/**
* Handler for files containing a list of classes to compile.
- *
- * @author igor.ignatyev@oracle.com
*/
public class ClassesListInFile extends PathHandler {
public ClassesListInFile(Path root, Executor executor) {
--- a/hotspot/test/testlibrary/ctw/src/sun/hotspot/tools/ctw/CompileTheWorld.java Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/test/testlibrary/ctw/src/sun/hotspot/tools/ctw/CompileTheWorld.java Thu Oct 10 13:41:08 2013 -0700
@@ -32,9 +32,6 @@
import java.util.List;
import java.util.concurrent.*;
-/**
- * @author igor.ignatyev@oracle.com
- */
public class CompileTheWorld {
/**
* Entry point. Compiles classes in {@code args}, or all classes in
--- a/hotspot/test/testlibrary/ctw/src/sun/hotspot/tools/ctw/Compiler.java Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/test/testlibrary/ctw/src/sun/hotspot/tools/ctw/Compiler.java Thu Oct 10 13:41:08 2013 -0700
@@ -36,8 +36,6 @@
/**
* Provide method to compile whole class.
* Also contains compiled methods and classes counters.
- *
- * @author igor.ignatyev@oracle.com
*/
public class Compiler {
private Compiler() { }
--- a/hotspot/test/testlibrary/ctw/src/sun/hotspot/tools/ctw/PathHandler.java Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/test/testlibrary/ctw/src/sun/hotspot/tools/ctw/PathHandler.java Thu Oct 10 13:41:08 2013 -0700
@@ -35,10 +35,7 @@
/**
* Abstract handler for path.
- * <p/>
* Concrete subclasses should implement method {@link #process()}.
- *
- * @author igor.ignatyev@oracle.com
*/
public abstract class PathHandler {
private static final Pattern JAR_IN_DIR_PATTERN
--- a/hotspot/test/testlibrary/ctw/src/sun/hotspot/tools/ctw/Utils.java Thu Oct 10 08:51:55 2013 +0200
+++ b/hotspot/test/testlibrary/ctw/src/sun/hotspot/tools/ctw/Utils.java Thu Oct 10 13:41:08 2013 -0700
@@ -31,8 +31,6 @@
/**
* Auxiliary methods.
- *
- * @author igor.ignatyev@oracle.com
*/
public class Utils {
/**
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/testlibrary_tests/AssertsTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,237 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import static com.oracle.java.testlibrary.Asserts.*;
+
+/* @test
+ * @summary Tests the different assertions in the Assert class
+ * @library /testlibrary
+ */
+public class AssertsTest {
+ private static class Foo implements Comparable<Foo> {
+ final int id;
+ public Foo(int id) {
+ this.id = id;
+ }
+
+ public int compareTo(Foo f) {
+ return new Integer(id).compareTo(new Integer(f.id));
+ }
+ }
+
+ public static void main(String[] args) throws Exception {
+ testLessThan();
+ testLessThanOrEqual();
+ testEquals();
+ testGreaterThanOrEqual();
+ testGreaterThan();
+ testNotEquals();
+ testNull();
+ testNotNull();
+ testTrue();
+ testFalse();
+ }
+
+ private static void testLessThan() throws Exception {
+ expectPass(Assertion.LT, 1, 2);
+
+ expectFail(Assertion.LT, 2, 2);
+ expectFail(Assertion.LT, 2, 1);
+ expectFail(Assertion.LT, null, 2);
+ expectFail(Assertion.LT, 2, null);
+ }
+
+ private static void testLessThanOrEqual() throws Exception {
+ expectPass(Assertion.LTE, 1, 2);
+ expectPass(Assertion.LTE, 2, 2);
+
+ expectFail(Assertion.LTE, 3, 2);
+ expectFail(Assertion.LTE, null, 2);
+ expectFail(Assertion.LTE, 2, null);
+ }
+
+ private static void testEquals() throws Exception {
+ expectPass(Assertion.EQ, 1, 1);
+ expectPass(Assertion.EQ, null, null);
+
+ Foo f1 = new Foo(1);
+ expectPass(Assertion.EQ, f1, f1);
+
+ Foo f2 = new Foo(1);
+ expectFail(Assertion.EQ, f1, f2);
+ expectFail(Assertion.LTE, null, 2);
+ expectFail(Assertion.LTE, 2, null);
+ }
+
+ private static void testGreaterThanOrEqual() throws Exception {
+ expectPass(Assertion.GTE, 1, 1);
+ expectPass(Assertion.GTE, 2, 1);
+
+ expectFail(Assertion.GTE, 1, 2);
+ expectFail(Assertion.GTE, null, 2);
+ expectFail(Assertion.GTE, 2, null);
+ }
+
+ private static void testGreaterThan() throws Exception {
+ expectPass(Assertion.GT, 2, 1);
+
+ expectFail(Assertion.GT, 1, 1);
+ expectFail(Assertion.GT, 1, 2);
+ expectFail(Assertion.GT, null, 2);
+ expectFail(Assertion.GT, 2, null);
+ }
+
+ private static void testNotEquals() throws Exception {
+ expectPass(Assertion.NE, null, 1);
+ expectPass(Assertion.NE, 1, null);
+
+ Foo f1 = new Foo(1);
+ Foo f2 = new Foo(1);
+ expectPass(Assertion.NE, f1, f2);
+
+ expectFail(Assertion.NE, null, null);
+ expectFail(Assertion.NE, f1, f1);
+ expectFail(Assertion.NE, 1, 1);
+ }
+
+ private static void testNull() throws Exception {
+ expectPass(Assertion.NULL, null);
+
+ expectFail(Assertion.NULL, 1);
+ }
+
+ private static void testNotNull() throws Exception {
+ expectPass(Assertion.NOTNULL, 1);
+
+ expectFail(Assertion.NOTNULL, null);
+ }
+
+ private static void testTrue() throws Exception {
+ expectPass(Assertion.TRUE, true);
+
+ expectFail(Assertion.TRUE, false);
+ }
+
+ private static void testFalse() throws Exception {
+ expectPass(Assertion.FALSE, false);
+
+ expectFail(Assertion.FALSE, true);
+ }
+
+ private static <T extends Comparable<T>> void expectPass(Assertion assertion, T ... args)
+ throws Exception {
+ Assertion.run(assertion, args);
+ }
+
+ private static <T extends Comparable<T>> void expectFail(Assertion assertion, T ... args)
+ throws Exception {
+ try {
+ Assertion.run(assertion, args);
+ } catch (RuntimeException e) {
+ return;
+ }
+ throw new Exception("Expected " + Assertion.format(assertion, (Object[]) args) +
+ " to throw a RuntimeException");
+ }
+
+}
+
+enum Assertion {
+ LT, LTE, EQ, GTE, GT, NE, NULL, NOTNULL, FALSE, TRUE;
+
+ public static <T extends Comparable<T>> void run(Assertion assertion, T ... args) {
+ String msg = "Expected " + format(assertion, args) + " to pass";
+ switch (assertion) {
+ case LT:
+ assertLessThan(args[0], args[1], msg);
+ break;
+ case LTE:
+ assertLessThanOrEqual(args[0], args[1], msg);
+ break;
+ case EQ:
+ assertEquals(args[0], args[1], msg);
+ break;
+ case GTE:
+ assertGreaterThanOrEqual(args[0], args[1], msg);
+ break;
+ case GT:
+ assertGreaterThan(args[0], args[1], msg);
+ break;
+ case NE:
+ assertNotEquals(args[0], args[1], msg);
+ break;
+ case NULL:
+ assertNull(args == null ? args : args[0], msg);
+ break;
+ case NOTNULL:
+ assertNotNull(args == null ? args : args[0], msg);
+ break;
+ case FALSE:
+ assertFalse((Boolean) args[0], msg);
+ break;
+ case TRUE:
+ assertTrue((Boolean) args[0], msg);
+ break;
+ default:
+ // do nothing
+ }
+ }
+
+ public static String format(Assertion assertion, Object ... args) {
+ switch (assertion) {
+ case LT:
+ return asString("assertLessThan", args);
+ case LTE:
+ return asString("assertLessThanOrEqual", args);
+ case EQ:
+ return asString("assertEquals", args);
+ case GTE:
+ return asString("assertGreaterThanOrEquals", args);
+ case GT:
+ return asString("assertGreaterThan", args);
+ case NE:
+ return asString("assertNotEquals", args);
+ case NULL:
+ return asString("assertNull", args);
+ case NOTNULL:
+ return asString("assertNotNull", args);
+ case FALSE:
+ return asString("assertFalse", args);
+ case TRUE:
+ return asString("assertTrue", args);
+ default:
+ return "";
+ }
+ }
+
+ private static String asString(String assertion, Object ... args) {
+ if (args == null) {
+ return String.format("%s(null)", assertion);
+ }
+ if (args.length == 1) {
+ return String.format("%s(%s)", assertion, args[0]);
+ } else {
+ return String.format("%s(%s, %s)", assertion, args[0], args[1]);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/testlibrary_tests/OutputAnalyzerReportingTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,124 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ * @summary Test the OutputAnalyzer reporting functionality,
+ * such as printing additional diagnostic info
+ * (exit code, stdout, stderr, command line, etc.)
+ * @library /testlibrary
+ */
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+
+import com.oracle.java.testlibrary.OutputAnalyzer;
+import com.oracle.java.testlibrary.ProcessTools;
+
+
+public class OutputAnalyzerReportingTest {
+
+ public static void main(String[] args) throws Exception {
+ // Create the output analyzer under test
+ String stdout = "aaaaaa";
+ String stderr = "bbbbbb";
+ OutputAnalyzer output = new OutputAnalyzer(stdout, stderr);
+
+ // Expected summary values should be the same for all cases,
+ // since the outputAnalyzer object is the same
+ String expectedExitValue = "-1";
+ String expectedSummary =
+ " stdout: [" + stdout + "];\n" +
+ " stderr: [" + stderr + "]\n" +
+ " exitValue = " + expectedExitValue + "\n";
+
+
+ DiagnosticSummaryTestRunner testRunner =
+ new DiagnosticSummaryTestRunner();
+
+ // should have exit value
+ testRunner.init(expectedSummary);
+ int unexpectedExitValue = 2;
+ try {
+ output.shouldHaveExitValue(unexpectedExitValue);
+ } catch (RuntimeException e) { }
+ testRunner.closeAndCheckResults();
+
+ // should not contain
+ testRunner.init(expectedSummary);
+ try {
+ output.shouldNotContain(stdout);
+ } catch (RuntimeException e) { }
+ testRunner.closeAndCheckResults();
+
+ // should contain
+ testRunner.init(expectedSummary);
+ try {
+ output.shouldContain("unexpected-stuff");
+ } catch (RuntimeException e) { }
+ testRunner.closeAndCheckResults();
+
+ // should not match
+ testRunner.init(expectedSummary);
+ try {
+ output.shouldNotMatch("[a]");
+ } catch (RuntimeException e) { }
+ testRunner.closeAndCheckResults();
+
+ // should match
+ testRunner.init(expectedSummary);
+ try {
+ output.shouldMatch("[qwerty]");
+ } catch (RuntimeException e) { }
+ testRunner.closeAndCheckResults();
+
+ }
+
+ private static class DiagnosticSummaryTestRunner {
+ private ByteArrayOutputStream byteStream =
+ new ByteArrayOutputStream(10000);
+
+ private String expectedSummary = "";
+ private PrintStream errStream;
+
+
+ public void init(String expectedSummary) {
+ this.expectedSummary = expectedSummary;
+ byteStream.reset();
+ errStream = new PrintStream(byteStream);
+ System.setErr(errStream);
+ }
+
+ public void closeAndCheckResults() {
+ // check results
+ errStream.close();
+ String stdErrStr = byteStream.toString();
+ if (!stdErrStr.contains(expectedSummary)) {
+ throw new RuntimeException("The output does not contain "
+ + "the diagnostic message, or the message is incorrect");
+ }
+ }
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/testlibrary_tests/OutputAnalyzerTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,193 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @summary Test the OutputAnalyzer utility class
+ * @library /testlibrary
+ */
+
+import com.oracle.java.testlibrary.OutputAnalyzer;
+
+public class OutputAnalyzerTest {
+
+ public static void main(String args[]) throws Exception {
+
+ String stdout = "aaaaaa";
+ String stderr = "bbbbbb";
+
+ // Regexps used for testing pattern matching of the test input
+ String stdoutPattern = "[a]";
+ String stderrPattern = "[b]";
+ String nonExistingPattern = "[c]";
+
+ OutputAnalyzer output = new OutputAnalyzer(stdout, stderr);
+
+ if (!stdout.equals(output.getStdout())) {
+ throw new Exception("getStdout() returned '" + output.getStdout() + "', expected '" + stdout + "'");
+ }
+
+ if (!stderr.equals(output.getStderr())) {
+ throw new Exception("getStderr() returned '" + output.getStderr() + "', expected '" + stderr + "'");
+ }
+
+ try {
+ output.shouldContain(stdout);
+ output.stdoutShouldContain(stdout);
+ output.shouldContain(stderr);
+ output.stderrShouldContain(stderr);
+ } catch (RuntimeException e) {
+ throw new Exception("shouldContain() failed", e);
+ }
+
+ try {
+ output.shouldContain("cccc");
+ throw new Exception("shouldContain() failed to throw exception");
+ } catch (RuntimeException e) {
+ // expected
+ }
+
+ try {
+ output.stdoutShouldContain(stderr);
+ throw new Exception("stdoutShouldContain() failed to throw exception");
+ } catch (RuntimeException e) {
+ // expected
+ }
+
+ try {
+ output.stderrShouldContain(stdout);
+ throw new Exception("stdoutShouldContain() failed to throw exception");
+ } catch (RuntimeException e) {
+ // expected
+ }
+
+ try {
+ output.shouldNotContain("cccc");
+ output.stdoutShouldNotContain("cccc");
+ output.stderrShouldNotContain("cccc");
+ } catch (RuntimeException e) {
+ throw new Exception("shouldNotContain() failed", e);
+ }
+
+ try {
+ output.shouldNotContain(stdout);
+ throw new Exception("shouldContain() failed to throw exception");
+ } catch (RuntimeException e) {
+ // expected
+ }
+
+ try {
+ output.stdoutShouldNotContain(stdout);
+ throw new Exception("shouldContain() failed to throw exception");
+ } catch (RuntimeException e) {
+ // expected
+ }
+
+ try {
+ output.stderrShouldNotContain(stderr);
+ throw new Exception("shouldContain() failed to throw exception");
+ } catch (RuntimeException e) {
+ // expected
+ }
+
+ // Should match
+ try {
+ output.shouldMatch(stdoutPattern);
+ output.stdoutShouldMatch(stdoutPattern);
+ output.shouldMatch(stderrPattern);
+ output.stderrShouldMatch(stderrPattern);
+ } catch (RuntimeException e) {
+ throw new Exception("shouldMatch() failed", e);
+ }
+
+ try {
+ output.shouldMatch(nonExistingPattern);
+ throw new Exception("shouldMatch() failed to throw exception");
+ } catch (RuntimeException e) {
+ // expected
+ }
+
+ try {
+ output.stdoutShouldMatch(stderrPattern);
+ throw new Exception(
+ "stdoutShouldMatch() failed to throw exception");
+ } catch (RuntimeException e) {
+ // expected
+ }
+
+ try {
+ output.stderrShouldMatch(stdoutPattern);
+ throw new Exception(
+ "stderrShouldMatch() failed to throw exception");
+ } catch (RuntimeException e) {
+ // expected
+ }
+
+ // Should not match
+ try {
+ output.shouldNotMatch(nonExistingPattern);
+ output.stdoutShouldNotMatch(nonExistingPattern);
+ output.stderrShouldNotMatch(nonExistingPattern);
+ } catch (RuntimeException e) {
+ throw new Exception("shouldNotMatch() failed", e);
+ }
+
+ try {
+ output.shouldNotMatch(stdoutPattern);
+ throw new Exception("shouldNotMatch() failed to throw exception");
+ } catch (RuntimeException e) {
+ // expected
+ }
+
+ try {
+ output.stdoutShouldNotMatch(stdoutPattern);
+ throw new Exception("shouldNotMatch() failed to throw exception");
+ } catch (RuntimeException e) {
+ // expected
+ }
+
+ try {
+ output.stderrShouldNotMatch(stderrPattern);
+ throw new Exception("shouldNotMatch() failed to throw exception");
+ } catch (RuntimeException e) {
+ // expected
+ }
+
+ {
+ String aaaa = "aaaa";
+ String result = output.firstMatch(aaaa);
+ if (!aaaa.equals(result)) {
+ throw new Exception("firstMatch(String) faild to match. Expected: " + aaaa + " got: " + result);
+ }
+ }
+
+ {
+ String aa = "aa";
+ String aa_grouped_aa = aa + "(" + aa + ")";
+ String result = output.firstMatch(aa_grouped_aa, 1);
+ if (!aa.equals(result)) {
+ throw new Exception("firstMatch(String, int) failed to match. Expected: " + aa + " got: " + result);
+ }
+ }
+ }
+}
--- a/jaxp/.hgtags Thu Oct 10 08:51:55 2013 +0200
+++ b/jaxp/.hgtags Thu Oct 10 13:41:08 2013 -0700
@@ -230,3 +230,5 @@
d3be8e3b429df917e72c1c23e7920c651219b587 jdk8-b106
d6a32e3831aab20a9a3bc78cdc0a60aaad725c6c jdk8-b107
8ade3eed63da87067a7137c111f684a821e9e531 jdk8-b108
+02bfab2aa93899e0f02584f1e85537485a196553 jdk8-b109
+4c84c5b447b09aff27f3b72667ab3a5401e85968 jdk8-b110
--- a/jaxws/.hgtags Thu Oct 10 08:51:55 2013 +0200
+++ b/jaxws/.hgtags Thu Oct 10 13:41:08 2013 -0700
@@ -230,3 +230,5 @@
6908370afe834ff01739e8ec992d4246c74b7e6e jdk8-b106
e3c9328f75638289a342ce15fbe532f05078946e jdk8-b107
d1ea68556fd7925a3c7078dd9f77c6ca73d5aa9e jdk8-b108
+df5d4d01642572e77fd3c01e4c8703ed3f6eec87 jdk8-b109
+cc682329886be2fc26220fc30597ee4e5bba43ed jdk8-b110
--- a/jdk/.hgtags Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/.hgtags Thu Oct 10 13:41:08 2013 -0700
@@ -230,3 +230,5 @@
c817276bd870dfe1dcc3a3dbbc092436b6907f75 jdk8-b106
eea685b9ccaa1980e0a7e07d6a3a84bcc7e9ab82 jdk8-b107
006aaa5f069e7dd98fccdc696866c9f8582c087c jdk8-b108
+946f3fd5f8bf0ccd180c258d25e5837fa1bf004c jdk8-b109
+54e099776f08430d3a7f4feabd9f2ba886b55320 jdk8-b110
--- a/jdk/make/bridge/AccessBridgeJava/Makefile Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/make/bridge/AccessBridgeJava/Makefile Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -51,7 +51,7 @@
#
# Java files to compile.
#
-FILES_java = com/sun/java/accessibility/AccessBridge.java
+FILES_java = com/sun/java/accessibility/AccessBridgeLoader.java com/sun/java/accessibility/AccessBridge.java
#
# Location for the newly built classfiles.
@@ -61,14 +61,13 @@
#
# Rules
#
-CLASSDESTDIR = $(TEMPDIR)/classes
FILES_class = $(FILES_java:%.java=$(CLASSDESTDIR)/%.class)
build: prebuild
prebuild:
- $(CP) $(CLOSED_PLATFORM_SRC)/classes/com/sun/java/accessibility/$(ABPLATFORM)/AccessBridge.java \
+ $(CP) $(CLOSED_PLATFORM_SRC)/classes/com/sun/java/accessibility/$(ABPLATFORM)/AccessBridgeLoader.java \
$(CLOSED_PLATFORM_SRC)/classes/com/sun/java/accessibility
all : build $(JARFILE)
--- a/jdk/make/java/security/Makefile Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/make/java/security/Makefile Thu Oct 10 13:41:08 2013 -0700
@@ -70,9 +70,13 @@
CACERTS_SRC = $(CACERTS_FILE)
CACERTS_BUILD = $(LIBDIR)/security/cacerts
+BLACKLISTED_CERTS_SRC = $(TOPDIR)/src/share/lib/security/blacklisted.certs
+BLACKLISTED_CERTS_BUILD = $(LIBDIR)/security/blacklisted.certs
+
ifndef OPENJDK
BLACKLIST_SRC = $(CLOSED_SHARE_SRC)/lib/security/blacklist
BLACKLIST_BUILD = $(LIBDIR)/security/blacklist
+ BLACKLISTED_CERTS_SRC += $(wildcard $(CLOSED_SHARE_SRC)/lib/security/blacklisted.certs)
TRUSTEDLIBS_SRC = $(CLOSED_SHARE_SRC)/lib/security/trusted.libraries
TRUSTEDLIBS_BUILD = $(LIBDIR)/security/trusted.libraries
endif
@@ -85,9 +89,9 @@
include $(BUILDDIR)/common/Rules.gmk
ifdef OPENJDK
-build: properties policy cacerts
+build: properties policy cacerts blacklisted-certs
else
-build: properties policy cacerts blacklist trustedlibs
+build: properties policy cacerts blacklist blacklisted-certs trustedlibs
endif
install: all
@@ -100,6 +104,8 @@
blacklist: classes $(BLACKLIST_BUILD)
+blacklisted-certs: classes $(BLACKLISTED_CERTS_BUILD)
+
trustedlibs: classes $(TRUSTEDLIBS_BUILD)
$(PROPS_BUILD): $(PROPS_SRC)
@@ -114,12 +120,25 @@
$(BLACKLIST_BUILD): $(BLACKLIST_SRC)
$(install-file)
+$(BLACKLISTED_CERTS_BUILD): $(BLACKLISTED_CERTS_SRC)
+ $(MKDIR) -p $(@D)
+ $(CAT) $^ | $(SED) '/^$$/d' | $(SORT) | $(UNIQ) > $@.tmp
+ $(GREP) -i Algorithm $@.tmp > $@
+ if [ `$(SED) -n -e "$$=" $@` != 1 ]; then \
+ $(ECHO) "Different algorithms defined in $^"; \
+ $(RM) $@ $@.tmp; \
+ false; \
+ fi
+ $(GREP) -iv Algorithm $@.tmp >> $@
+ $(RM) $@.tmp
+
$(TRUSTEDLIBS_BUILD): $(TRUSTEDLIBS_SRC)
$(install-file)
clean clobber:: .delete.classlist
$(RM) -r $(CLASSBINDIR)/java/security
- $(RM) $(PROPS_BUILD) $(POLICY_BUILD) $(CACERTS_BUILD) $(BLACKLIST_BUILD) $(TRUSTEDLIBS_BUILD)
+ $(RM) $(PROPS_BUILD) $(POLICY_BUILD) $(CACERTS_BUILD) $(BLACKLIST_BUILD) \
+ $(BLACKLISTED_CERTS_BUILD) $(TRUSTEDLIBS_BUILD)
# Additional Rule for building sun.security.util
$(CLASSBINDIR)/%.class: $(SHARE_SRC)/sun/%.java
--- a/jdk/make/sun/lwawt/FILES_export_macosx.gmk Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/make/sun/lwawt/FILES_export_macosx.gmk Thu Oct 10 13:41:08 2013 -0700
@@ -110,7 +110,6 @@
sun/lwawt/LWWindowPeer.java \
sun/lwawt/PlatformWindow.java \
sun/lwawt/SecurityWarningWindow.java \
- sun/lwawt/SelectionClearListener.java \
sun/lwawt/macosx/CPrinterDevice.java \
sun/lwawt/macosx/CPrinterDialog.java \
sun/lwawt/macosx/CPrinterDialogPeer.java \
@@ -141,7 +140,6 @@
sun/lwawt/macosx/CMenuBar.java \
sun/lwawt/macosx/CMenuComponent.java \
sun/lwawt/macosx/CMenuItem.java \
- sun/lwawt/macosx/CMouseInfoPeer.java \
sun/lwawt/macosx/CPlatformView.java \
sun/lwawt/macosx/CPlatformWindow.java \
sun/lwawt/macosx/CWarningWindow.java \
--- a/jdk/make/sun/xawt/mapfile-vers Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/make/sun/xawt/mapfile-vers Thu Oct 10 13:41:08 2013 -0700
@@ -305,6 +305,7 @@
Java_sun_awt_X11_XlibWrapper_XkbGetUpdatedMap;
Java_sun_awt_X11_XlibWrapper_XkbFreeKeyboard;
Java_sun_awt_X11_XlibWrapper_XkbTranslateKeyCode;
+ Java_sun_awt_X11_XlibWrapper_XkbSetDetectableAutoRepeat;
Java_sun_awt_X11_XlibWrapper_XGetModifierMapping;
Java_sun_awt_X11_XlibWrapper_XFreeModifiermap;
Java_sun_awt_X11_XlibWrapper_XRefreshKeyboardMapping;
--- a/jdk/makefiles/CompileDemos.gmk Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/makefiles/CompileDemos.gmk Thu Oct 10 13:41:08 2013 -0700
@@ -65,14 +65,10 @@
$(eval $(call SetupAppletDemo,DrawTest))
$(eval $(call SetupAppletDemo,Fractal))
$(eval $(call SetupAppletDemo,GraphicsTest))
-$(eval $(call SetupAppletDemo,MoleculeViewer))
$(eval $(call SetupAppletDemo,NervousText))
$(eval $(call SetupAppletDemo,SimpleGraph))
$(eval $(call SetupAppletDemo,SortDemo))
$(eval $(call SetupAppletDemo,SpreadSheet))
-# Build WireFrame without a server since it
-# has a class Matrix3D that also exists in MoleculeViewer.
-$(eval $(call SetupAppletDemo,WireFrame,true))
ifndef OPENJDK
$(eval $(call SetupAppletDemo,Animator,,closed/))
@@ -83,7 +79,7 @@
##################################################################################################
-PATTERNS_TO_COPY=.html .txt .properties .js .gif .jpg .theme .data .opt README .c .h .png .ttf
+PATTERNS_TO_COPY=.html .txt .properties .js .gif .jpg .theme .data .opt README .c .h .png .ttf .xyz .obj
define SetupDemo
# Param 1 = Name of the demo
@@ -161,6 +157,8 @@
BUILD_DEMOS+=$(JDK_OUTPUTDIR)/demo/jfc/CodePointIM/_the.services
+$(eval $(call SetupDemo,MoleculeViewer,applets,,XYZChemModel,,,example*.html XYZApp.java))
+$(eval $(call SetupDemo,WireFrame,applets,,ThreeD,,,example*.html ThreeD.java))
$(eval $(call SetupDemo,FileChooserDemo,jfc,,FileChooserDemo,,,README*))
$(eval $(call SetupDemo,Font2DTest,jfc,,Font2DTest,,,*.html *.txt))
$(eval $(call SetupDemo,Metalworks,jfc,,Metalworks,,,README*))
--- a/jdk/makefiles/CompileJavaClasses.gmk Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/makefiles/CompileJavaClasses.gmk Thu Oct 10 13:41:08 2013 -0700
@@ -62,6 +62,7 @@
# AccessBridge is compiled separately below.
EXFILES += AccessBridge.java \
+ AccessBridgeLoader.java \
com/sun/java/accessibility/util/java/awt/ChoiceTranslator.java
# This seems to never be built
EXCLUDES += com/sun/java/accessibility/extensions
--- a/jdk/makefiles/CompileLaunchers.gmk Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/makefiles/CompileLaunchers.gmk Thu Oct 10 13:41:08 2013 -0700
@@ -23,7 +23,7 @@
# questions.
#
-defalt: all
+default: all
include $(SPEC)
include MakeBase.gmk
--- a/jdk/makefiles/CompileNativeLibraries.gmk Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/makefiles/CompileNativeLibraries.gmk Thu Oct 10 13:41:08 2013 -0700
@@ -23,7 +23,7 @@
# questions.
#
-defalt: all
+default: all
include $(SPEC)
include MakeBase.gmk
--- a/jdk/makefiles/CopyFiles.gmk Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/makefiles/CopyFiles.gmk Thu Oct 10 13:41:08 2013 -0700
@@ -382,11 +382,16 @@
##########################################################################################
+BLACKLISTED_CERTS_SRC := $(JDK_TOPDIR)/src/share/lib/security/blacklisted.certs
+BLACKLISTED_CERTS_DST := $(JDK_OUTPUTDIR)/lib/security/blacklisted.certs
+
ifndef OPENJDK
BLACKLIST_SRC := $(JDK_TOPDIR)/src/closed/share/lib/security/blacklist
BLACKLIST_DST := $(JDK_OUTPUTDIR)/lib/security/blacklist
+BLACKLISTED_CERTS_SRC += $(wildcard $(JDK_TOPDIR)/src/closed/share/lib/security/blacklisted.certs)
+
TRUSTEDLIBS_SRC := $(JDK_TOPDIR)/src/closed/share/lib/security/trusted.libraries
TRUSTEDLIBS_DST := $(JDK_OUTPUTDIR)/lib/security/trusted.libraries
@@ -402,6 +407,20 @@
endif
+$(BLACKLISTED_CERTS_DST): $(BLACKLISTED_CERTS_SRC)
+ $(MKDIR) -p $(@D)
+ $(CAT) $^ | $(SED) '/^$$/d' | $(SORT) | $(UNIQ) > $@.tmp
+ $(GREP) -i Algorithm $@.tmp > $@
+ if [ `$(SED) -n -e "$$=" $@` != 1 ]; then \
+ $(ECHO) "Different algorithms defined in $^"; \
+ $(RM) $@ $@.tmp; \
+ false; \
+ fi
+ $(GREP) -iv Algorithm $@.tmp >> $@
+ $(RM) $@.tmp
+
+COPY_FILES += $(BLACKLISTED_CERTS_DST)
+
##########################################################################################
ifndef OPENJDK
--- a/jdk/makefiles/CreateJars.gmk Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/makefiles/CreateJars.gmk Thu Oct 10 13:41:08 2013 -0700
@@ -863,26 +863,13 @@
com/sun/java_cup \
com/sun/javadoc \
com/sun/java/swing \
- com/sun/jlex \
com/sun/jmx \
com/sun/naming \
com/sun/org/apache \
com/sun/security/auth \
com/sun/security/jgss \
com/sun/source \
- java/applet \
- java/awt \
- java/beans \
- java/io \
- java/lang \
- java/math \
- java/net \
- java/nio \
- java/rmi \
- java/security \
- java/sql \
- java/text \
- java/util \
+ java \
javax/accessibility \
javax/annotation \
javax/imageio \
@@ -902,7 +889,7 @@
org/omg \
org/w3c/dom \
org/xml/sax \
- sunw
+ #
SRC_ZIP_SRCS = $(JDK_TOPDIR)/src/share/classes $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/classes
SRC_ZIP_SRCS += $(JDK_OUTPUTDIR)/gensrc
@@ -953,13 +940,13 @@
ifeq ($(OPENJDK_TARGET_CPU_BITS), 32)
$(eval $(call SetupArchive,BUILD_ACCESSBRIDGE_32_JAR,,\
- SRCS:=$(JDK_OUTPUTDIR)/classes_ab/32bit $(JDK_OUTPUTDIR)/classes,\
+ SRCS:=$(JDK_OUTPUTDIR)/classes_ab/32bit,\
INCLUDES:=com/sun/java/accessibility,\
JAR:=$(IMAGES_OUTPUTDIR)/lib/ext/access-bridge-32.jar,\
SKIP_METAINF:=true))
$(eval $(call SetupArchive,BUILD_ACCESSBRIDGE_LEGACY_JAR,,\
- SRCS:=$(JDK_OUTPUTDIR)/classes_ab/legacy $(JDK_OUTPUTDIR)/classes,\
+ SRCS:=$(JDK_OUTPUTDIR)/classes_ab/legacy,\
INCLUDES:=com/sun/java/accessibility,\
JAR:=$(IMAGES_OUTPUTDIR)/lib/ext/access-bridge.jar,\
SKIP_METAINF:=true))
@@ -968,9 +955,8 @@
$(IMAGES_OUTPUTDIR)/lib/ext/access-bridge.jar
else
$(eval $(call SetupArchive,BUILD_ACCESSBRIDGE_64_JAR,,\
- SRCS:=$(JDK_OUTPUTDIR)/classes_ab/64bit $(JDK_OUTPUTDIR)/classes,\
+ SRCS:=$(JDK_OUTPUTDIR)/classes_ab/64bit,\
INCLUDES:=com/sun/java/accessibility,\
- EXCLUDES:=com/sun/java/accessibility/util/java,\
JAR:=$(IMAGES_OUTPUTDIR)/lib/ext/access-bridge-64.jar,\
SKIP_METAINF:=true))
--- a/jdk/makefiles/GensrcMisc.gmk Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/makefiles/GensrcMisc.gmk Thu Oct 10 13:41:08 2013 -0700
@@ -200,26 +200,42 @@
AB_SRC_DIR := $(JDK_TOPDIR)/src/closed/windows/classes/com/sun/java/accessibility
ifeq ($(OPENJDK_TARGET_CPU_BITS), 32)
+ $(AB_GENSRC_DIR)/32bit/com/sun/java/accessibility/AccessBridgeLoader.java: \
+ $(AB_SRC_DIR)/32bit/AccessBridgeLoader.java
+ $(install-file)
+
$(AB_GENSRC_DIR)/32bit/com/sun/java/accessibility/AccessBridge.java: \
- $(AB_SRC_DIR)/32bit/AccessBridge.java
+ $(AB_SRC_DIR)/AccessBridge.java
+ $(install-file)
+
+ $(AB_GENSRC_DIR)/legacy/com/sun/java/accessibility/AccessBridgeLoader.java: \
+ $(AB_SRC_DIR)/legacy/AccessBridgeLoader.java
$(install-file)
$(AB_GENSRC_DIR)/legacy/com/sun/java/accessibility/AccessBridge.java: \
- $(AB_SRC_DIR)/legacy/AccessBridge.java
+ $(AB_SRC_DIR)/AccessBridge.java
$(install-file)
- GENSRC_MISC += $(AB_GENSRC_DIR)/32bit/com/sun/java/accessibility/AccessBridge.java \
- $(AB_GENSRC_DIR)/legacy/com/sun/java/accessibility/AccessBridge.java
+ GENSRC_MISC += $(AB_GENSRC_DIR)/32bit/com/sun/java/accessibility/AccessBridgeLoader.java \
+ $(AB_GENSRC_DIR)/legacy/com/sun/java/accessibility/AccessBridgeLoader.java \
+ $(AB_GENSRC_DIR)/32bit/com/sun/java/accessibility/AccessBridge.java \
+ $(AB_GENSRC_DIR)/legacy/com/sun/java/accessibility/AccessBridge.java
else
- $(AB_GENSRC_DIR)/64bit/com/sun/java/accessibility/AccessBridge.java: \
- $(AB_SRC_DIR)/64bit/AccessBridge.java
+ $(AB_GENSRC_DIR)/64bit/com/sun/java/accessibility/AccessBridgeLoader.java: \
+ $(AB_SRC_DIR)/64bit/AccessBridgeLoader.java
$(install-file)
- GENSRC_MISC += $(AB_GENSRC_DIR)/64bit/com/sun/java/accessibility/AccessBridge.java
+ $(AB_GENSRC_DIR)/64bit/com/sun/java/accessibility/AccessBridge.java: \
+ $(AB_SRC_DIR)/AccessBridge.java
+ $(install-file)
+
+ GENSRC_MISC += $(AB_GENSRC_DIR)/64bit/com/sun/java/accessibility/AccessBridgeLoader.java \
+ $(AB_GENSRC_DIR)/64bit/com/sun/java/accessibility/AccessBridge.java
endif
+
endif
endif
-##########################################################################################
\ No newline at end of file
+##########################################################################################
--- a/jdk/makefiles/GensrcProperties.gmk Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/makefiles/GensrcProperties.gmk Thu Oct 10 13:41:08 2013 -0700
@@ -253,6 +253,13 @@
$(call CacheFind,$(JDK_TOPDIR)/src/windows/classes/sun/awt/windows)),\
ListResourceBundle,%zh_TW,%zh_HK))
endif
+# os x specific awt properties
+ifeq ($(OPENJDK_TARGET_OS),macosx)
+$(eval $(call add_properties_to_compile,SUN_AWT,\
+ $(filter $(JDK_TOPDIR)/src/macosx/classes/sun/awt/resources/%.properties,\
+ $(call CacheFind,$(JDK_TOPDIR)/src/macosx/classes/sun/awt/resources)),\
+ ListResourceBundle))
+endif
#sun/launcher/resources
$(eval $(call add_properties_to_compile,SUN_LAUNCHER,\
--- a/jdk/makefiles/Images.gmk Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/makefiles/Images.gmk Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 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
@@ -190,6 +190,26 @@
$(foreach f,$(filter $(OVERLAY_FILTER),$(JDKJRE_BIN_LIST)),\
$(eval $(call AddFileToCopy,$(JDK_OUTPUTDIR),$(JDK_OVERLAY_IMAGE_DIR)/jre,$f,JDKJRE_BIN_TARGETS)))
+ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU_BITS),solaris-64)
+ define AddIsadirLink
+ # Param 1 - src file
+ # Param 2 - variable to add targets to
+
+ $1_LINK := $$(dir $1)$(OPENJDK_TARGET_CPU_ISADIR)/$$(notdir $1)
+
+ $$($1_LINK):
+ $(ECHO) $(LOG_INFO) Creating link $$(patsubst $(OUTPUT_ROOT)/%,%,$$@)
+ $(MKDIR) -p $$(@D)
+ $(LN) -s ../$$(@F) $$@
+
+ $2 += $$($1_LINK)
+ endef
+
+ $(foreach f,$(JRE_BIN_TARGETS),$(eval $(call AddIsadirLink,$f,JRE_BIN_ISADIR_LINK_TARGETS)))
+ $(foreach f,$(JDK_BIN_TARGETS),$(eval $(call AddIsadirLink,$f,JDK_BIN_ISADIR_LINK_TARGETS)))
+ $(foreach f,$(JDKJRE_BIN_TARGETS),$(eval $(call AddIsadirLink,$f,JDKJRE_BIN_ISADIR_LINK_TARGETS)))
+endif
+
################################################################################
# /lib dir
ifneq ($(OPENJDK_TARGET_OS), macosx)
@@ -730,7 +750,8 @@
jre-image: $(JRE_BIN_TARGETS) $(JRE_LIB_TARGETS) $(JRE_IMAGE_DIR)/lib/applet \
$(JRE_IMAGE_DIR)/lib/meta-index $(JRE_IMAGE_DIR)/lib/ext/meta-index \
- $(JRE_MAN_PAGE_LIST) $(JRE_DOC_TARGETS) $(JRE_INFO_FILE) $(JRE_STRIP_LIST)
+ $(JRE_MAN_PAGE_LIST) $(JRE_DOC_TARGETS) $(JRE_INFO_FILE) $(JRE_STRIP_LIST) \
+ $(JRE_BIN_ISADIR_LINK_TARGETS)
jdk-image: $(JDK_BIN_TARGETS) $(JDKJRE_BIN_TARGETS) \
$(JDK_LIB_TARGETS) $(JDKJRE_LIB_TARGETS) \
@@ -741,7 +762,8 @@
$(JDK_DB_TARGETS) $(JDK_INCLUDE_TARGETS) \
$(JDKJRE_DOC_TARGETS) $(JDK_DOC_TARGETS) \
$(JDK_INFO_FILE) $(JDKJRE_STRIP_LIST) $(JDK_BIN_STRIP_LIST) \
- $(JDK_IMAGE_DIR)/src.zip
+ $(JDK_IMAGE_DIR)/src.zip \
+ $(JDK_BIN_ISADIR_LINK_TARGETS) $(JDKJRE_BIN_ISADIR_LINK_TARGETS)
jre-overlay-image: $(JRE_OVERLAY_BIN_TARGETS) $(JRE_OVERLAY_LIB_TARGETS) \
$(JRE_OVERLAY_INFO_FILE) $(JRE_OVERLAY_STRIP_LIST)
--- a/jdk/makefiles/Tools.gmk Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/makefiles/Tools.gmk Thu Oct 10 13:41:08 2013 -0700
@@ -25,7 +25,6 @@
# Cache all finds needed for this file. Only used on windows.
$(eval $(call FillCacheFind,$(JDK_TOPDIR)/make/tools \
- $(JDK_TOPDIR)/src/solaris/classes \
$(JDK_TOPDIR)/makefiles/sun))
TOOLS_SRC:=$(JDK_TOPDIR)/make/tools/src \
--- a/jdk/makefiles/mapfiles/libawt_xawt/mapfile-vers Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/makefiles/mapfiles/libawt_xawt/mapfile-vers Thu Oct 10 13:41:08 2013 -0700
@@ -305,6 +305,7 @@
Java_sun_awt_X11_XlibWrapper_XkbGetUpdatedMap;
Java_sun_awt_X11_XlibWrapper_XkbFreeKeyboard;
Java_sun_awt_X11_XlibWrapper_XkbTranslateKeyCode;
+ Java_sun_awt_X11_XlibWrapper_XkbSetDetectableAutoRepeat;
Java_sun_awt_X11_XlibWrapper_XGetModifierMapping;
Java_sun_awt_X11_XlibWrapper_XFreeModifiermap;
Java_sun_awt_X11_XlibWrapper_XRefreshKeyboardMapping;
--- a/jdk/src/macosx/classes/apple/applescript/AppleScriptEngineFactory.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/macosx/classes/apple/applescript/AppleScriptEngineFactory.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -30,14 +30,9 @@
import javax.script.*;
public class AppleScriptEngineFactory implements ScriptEngineFactory {
- private static native void initNative();
+ private static volatile boolean initialized = false;
- static {
- java.awt.Toolkit.getDefaultToolkit();
- System.loadLibrary("AppleScriptEngine");
- initNative();
- TRACE("<static-init>");
- }
+ private static native void initNative();
static void TRACE(final String str) {
// System.out.println(AppleScriptEngineFactory.class.getName() + "." + str);
@@ -80,6 +75,7 @@
*
* @return full name of the ScriptEngine
*/
+ @Override
public String getEngineName() {
TRACE("getEngineName()");
return ENGINE_NAME;
@@ -90,6 +86,7 @@
*
* @return version of the ScriptEngine
*/
+ @Override
public String getEngineVersion() {
TRACE("getEngineVersion()");
return ENGINE_VERSION;
@@ -100,6 +97,7 @@
*
* @return name of the language supported by the ScriptEngine(Factory)
*/
+ @Override
public String getLanguageName() {
TRACE("getLanguageName()");
return LANGUAGE;
@@ -110,11 +108,12 @@
*
* @return language version supported by the ScriptEngine(Factory)
*/
+ @Override
public String getLanguageVersion() {
TRACE("getLanguageVersion()");
return AccessController.doPrivileged(new PrivilegedAction<String>() {
public String run() {
- final AppleScriptEngine engine = new AppleScriptEngine(AppleScriptEngineFactory.this);
+ final AppleScriptEngine engine = getScriptEngine();
return engine.getLanguageVersion();
}
});
@@ -126,6 +125,7 @@
*
* @return ArrayList of file extensions AppleScript associates with
*/
+ @Override
public List<String> getExtensions() {
TRACE("getExtensions()");
return Arrays.asList("scpt", "applescript", "app");
@@ -137,6 +137,7 @@
*
* @return ArrayList of mimetypes that AppleScript associates with
*/
+ @Override
public List<String> getMimeTypes() {
TRACE("getMimeTypes()");
return Arrays.asList("application/x-applescript", "text/plain", "text/applescript");
@@ -148,6 +149,7 @@
*
* @return
*/
+ @Override
public List<String> getNames() {
TRACE("getNames()");
return Arrays.asList("AppleScriptEngine", "AppleScript", "OSA");
@@ -165,6 +167,7 @@
* arguments to the function
* @return the AppleScript string calling the method
*/
+ @Override
public String getMethodCallSyntax(final String obj, final String fname, final String ... args) {
// StringBuilder builder = new StringBuilder();
// builder.append("my " + fname + "(");
@@ -181,6 +184,7 @@
* @param toDisplay
* @return
*/
+ @Override
public String getOutputStatement(final String toDisplay) {
// TODO -- this might even be good enough? XD
return getMethodCallSyntax(null, "print", toDisplay);
@@ -193,8 +197,9 @@
* the key to look up
* @return the static preseeded value for the key in the ScriptEngine, if it exists, otherwise <code>null</code>
*/
+ @Override
public Object getParameter(final String key) {
- final AppleScriptEngine engine = new AppleScriptEngine(this);
+ final AppleScriptEngine engine = getScriptEngine();
if (!engine.getBindings(ScriptContext.ENGINE_SCOPE).containsKey(key)) return null;
return engine.getBindings(ScriptContext.ENGINE_SCOPE).get(key);
}
@@ -205,6 +210,7 @@
* @param statements
* @return
*/
+ @Override
public String getProgram(final String ... statements) {
final StringBuilder program = new StringBuilder();
for (final String statement : statements) {
@@ -218,8 +224,21 @@
*
* @return new AppleScriptEngine with this factory as it's parent
*/
- public ScriptEngine getScriptEngine() {
+ @Override
+ public AppleScriptEngine getScriptEngine() {
AppleScriptEngine.checkSecurity();
+ ensureInitialized();
+
return new AppleScriptEngine(this);
}
+
+ private static synchronized void ensureInitialized() {
+ if (!initialized) {
+ initialized = true;
+
+ java.awt.Toolkit.getDefaultToolkit();
+ System.loadLibrary("AppleScriptEngine");
+ initNative();
+ }
+ }
}
--- a/jdk/src/macosx/classes/com/apple/laf/AquaFileChooserUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/macosx/classes/com/apple/laf/AquaFileChooserUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -42,6 +42,7 @@
import javax.swing.plaf.*;
import javax.swing.table.*;
+import sun.swing.AbstractFilterComboBoxModel;
import sun.swing.SwingUtilities2;
public class AquaFileChooserUI extends FileChooserUI {
@@ -1266,64 +1267,9 @@
/**
* Data model for a type-face selection combo-box.
*/
- protected class FilterComboBoxModel extends DefaultListModel implements ComboBoxModel, PropertyChangeListener {
- int selectedIndex = -1;
-
- protected FilterComboBoxModel() {
- super();
- final FileFilter filters[] = getFileChooser().getChoosableFileFilters();
- for (int i = 0; i < filters.length; i++) {
- this.add(i, filters[i]);
- }
- }
-
- public void propertyChange(final PropertyChangeEvent e) {
- final String prop = e.getPropertyName();
- if (prop == JFileChooser.CHOOSABLE_FILE_FILTER_CHANGED_PROPERTY) {
- this.clear();
- final FileFilter filters[] = (FileFilter[])e.getNewValue();
-
- for (int i = 0; i < filters.length; i++) {
- this.add(i, filters[i]);
- }
-
- fireContentsChanged(this, -1, -1);
- } else if (prop == JFileChooser.FILE_FILTER_CHANGED_PROPERTY) {
- final FileFilter currentFilter = (FileFilter)e.getNewValue();
- FileFilter filters[] = getFileChooser().getChoosableFileFilters();
-
- boolean found = false;
- if (currentFilter != null) {
- for (final FileFilter element : filters) {
- if (element == currentFilter) {
- found = true;
- }
- }
- if (found == false) {
- getFileChooser().addChoosableFileFilter(currentFilter);
- }
- }
-
- filters = getFileChooser().getChoosableFileFilters();
- setSelectedItem(e.getNewValue());
- }
- }
-
- public void setSelectedItem(final Object filter) {
- if (filter != null) {
- selectedIndex = this.indexOf(filter);
- fireContentsChanged(this, -1, -1);
- }
- }
-
- public Object getSelectedItem() {
- final Object returnValue = null;
-
- if (this.size() > 0) {
- if ((selectedIndex != -1) && (selectedIndex < size())) { return this.get(selectedIndex); }
- }
-
- return returnValue;
+ protected class FilterComboBoxModel extends AbstractFilterComboBoxModel {
+ protected JFileChooser getFileChooser() {
+ return AquaFileChooserUI.this.getFileChooser();
}
}
--- a/jdk/src/macosx/classes/com/apple/laf/resources/aqua_ko.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/macosx/classes/com/apple/laf/resources/aqua_ko.properties Thu Oct 10 13:41:08 2013 -0700
@@ -46,7 +46,7 @@
FileChooser.openButton.textAndMnemonic=\uC5F4\uAE30
FileChooser.saveDialogTitle.textAndMnemonic=\uC800\uC7A5
FileChooser.openDialogTitle.textAndMnemonic=\uC5F4\uAE30
-FileChooser.updateButton.textAndMnemonic=\uAC31\uC2E0
+FileChooser.updateButton.textAndMnemonic=\uC5C5\uB370\uC774\uD2B8
FileChooser.helpButton.textAndMnemonic=\uB3C4\uC6C0\uB9D0
FileChooser.directoryOpenButton.textAndMnemonic=\uC5F4\uAE30
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/macosx/classes/sun/awt/resources/awtosx.properties Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,71 @@
+#
+# OS X specific AWT properties
+#
+
+# Modifier names
+AWT.shift=\u21e7
+AWT.control=\u2303
+AWT.alt=\u2325
+AWT.meta=\u2318
+AWT.altGraph=\u2325
+
+# Key names
+AWT.enter=\u23ce
+AWT.backSpace=\u232b
+AWT.tab=\u21e5
+AWT.cancel=\u238b
+AWT.clear=\u2327
+AWT.capsLock=\u21ea
+AWT.escape=\u238b
+AWT.space=\u2423
+AWT.pgup=\u21de
+AWT.pgdn=\u21df
+AWT.end=\u2198
+AWT.home=\u2196
+AWT.left=\u2190
+AWT.up=\u2191
+AWT.right=\u2192
+AWT.down=\u2193
+AWT.comma=,
+AWT.period=.
+AWT.slash=/
+AWT.semicolon=;
+AWT.equals=\u003d
+AWT.openBracket=[
+AWT.backSlash=\\
+AWT.closeBracket=]
+AWT.multiply=\u2328 *
+AWT.add=\u2328 +
+AWT.separator=\u2328 ,
+AWT.separater=\u2328 ,
+AWT.subtract=\u2328 -
+AWT.decimal=\u2328 .
+AWT.divide=\u2328 /
+AWT.delete=\u2326
+AWT.printScreen=\u2399
+AWT.backQuote=`
+AWT.quote='
+AWT.ampersand=&
+AWT.asterisk=*
+AWT.quoteDbl="
+AWT.Less=<
+AWT.greater=>
+AWT.braceLeft=[
+AWT.braceRight=]
+AWT.at=@
+AWT.colon=:
+AWT.circumflex=^
+AWT.dollar=$
+AWT.euro=\u20ac
+AWT.exclamationMark=!
+AWT.invertedExclamationMark=\u00a1
+AWT.leftParenthesis=(
+AWT.numberSign=#
+AWT.plus=+
+AWT.minus=-
+AWT.rightParenthesis=)
+AWT.underscore=_
+
+# Numeric Keypad
+AWT.numpad=\u2328
+
--- a/jdk/src/macosx/classes/sun/lwawt/LWButtonPeer.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/macosx/classes/sun/lwawt/LWButtonPeer.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 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
@@ -33,6 +33,10 @@
import javax.swing.JButton;
+/**
+ * Lightweight implementation of {@link ButtonPeer}. Delegates most of the work
+ * to the {@link JButton}.
+ */
final class LWButtonPeer extends LWComponentPeer<Button, JButton>
implements ButtonPeer, ActionListener {
@@ -42,7 +46,7 @@
}
@Override
- protected JButton createDelegate() {
+ JButton createDelegate() {
return new JButtonDelegate();
}
@@ -74,6 +78,7 @@
return true;
}
+ @SuppressWarnings("serial")// Safe: outer class is non-serializable.
private final class JButtonDelegate extends JButton {
// Empty non private constructor was added because access to this
--- a/jdk/src/macosx/classes/sun/lwawt/LWCanvasPeer.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/macosx/classes/sun/lwawt/LWCanvasPeer.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 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
@@ -33,6 +33,10 @@
import javax.swing.JComponent;
+/**
+ * Lightweight implementation of {@link CanvasPeer}. This peer is empty, because
+ * all the components in lwawt use graphic object from the top level window.
+ */
class LWCanvasPeer<T extends Component, D extends JComponent>
extends LWComponentPeer<T, D> implements CanvasPeer {
--- a/jdk/src/macosx/classes/sun/lwawt/LWCheckboxPeer.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/macosx/classes/sun/lwawt/LWCheckboxPeer.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -41,6 +41,11 @@
import javax.swing.JToggleButton;
import javax.swing.SwingUtilities;
+/**
+ * Lightweight implementation of {@link CheckboxPeer}. Delegates most of the
+ * work to the {@link JCheckBox} and {@link JRadioButton}, which are placed
+ * inside an empty {@link JComponent}.
+ */
final class LWCheckboxPeer
extends LWComponentPeer<Checkbox, LWCheckboxPeer.CheckboxDelegate>
implements CheckboxPeer, ItemListener {
@@ -51,12 +56,12 @@
}
@Override
- protected CheckboxDelegate createDelegate() {
+ CheckboxDelegate createDelegate() {
return new CheckboxDelegate();
}
@Override
- protected Component getDelegateFocusOwner() {
+ Component getDelegateFocusOwner() {
return getDelegate().getCurrentButton();
}
@@ -137,6 +142,7 @@
return true;
}
+ @SuppressWarnings("serial")// Safe: outer class is non-serializable.
final class CheckboxDelegate extends JComponent {
private final JCheckBox cb;
--- a/jdk/src/macosx/classes/sun/lwawt/LWChoicePeer.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/macosx/classes/sun/lwawt/LWChoicePeer.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 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
@@ -26,14 +26,18 @@
package sun.lwawt;
-import java.awt.Choice;
-import java.awt.Point;
+import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.peer.ChoicePeer;
-import javax.swing.JComboBox;
+import javax.accessibility.Accessible;
+import javax.swing.*;
+/**
+ * Lightweight implementation of {@link ChoicePeer}. Delegates most of the work
+ * to the {@link JComboBox}.
+ */
final class LWChoicePeer extends LWComponentPeer<Choice, JComboBox<String>>
implements ChoicePeer, ItemListener {
@@ -50,7 +54,7 @@
}
@Override
- protected JComboBox<String> createDelegate() {
+ JComboBox<String> createDelegate() {
return new JComboBoxDelegate();
}
@@ -128,6 +132,7 @@
return true;
}
+ @SuppressWarnings("serial")// Safe: outer class is non-serializable.
private final class JComboBoxDelegate extends JComboBox<String> {
// Empty non private constructor was added because access to this
@@ -159,5 +164,32 @@
}
super.setSelectedItem(anObject);
}
+
+ @Override
+ public void firePopupMenuWillBecomeVisible() {
+ super.firePopupMenuWillBecomeVisible();
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ JPopupMenu popupMenu = getPopupMenu();
+ if (popupMenu != null) {
+ if (popupMenu.getInvoker() != LWChoicePeer.this.getTarget()) {
+ popupMenu.setVisible(false);
+ popupMenu.show(LWChoicePeer.this.getTarget(), 0, 0);
+ }
+ }
+ }
+ });
+ }
+
+ private JPopupMenu getPopupMenu() {
+ for (int i = 0; i < getAccessibleContext().getAccessibleChildrenCount(); i++) {
+ Accessible child = getAccessibleContext().getAccessibleChild(i);
+ if (child instanceof JPopupMenu) {
+ return (JPopupMenu) child;
+ }
+ }
+ return null;
+ }
}
}
--- a/jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -72,19 +72,23 @@
{
private static final PlatformLogger focusLog = PlatformLogger.getLogger("sun.lwawt.focus.LWComponentPeer");
- // State lock is to be used for modifications to this
- // peer's fields (e.g. bounds, background, font, etc.)
- // It should be the last lock in the lock chain
- private final Object stateLock =
- new StringBuilder("LWComponentPeer.stateLock");
+ /**
+ * State lock is to be used for modifications to this peer's fields (e.g.
+ * bounds, background, font, etc.) It should be the last lock in the lock
+ * chain
+ */
+ private final Object stateLock = new Object();
- // The lock to operate with the peers hierarchy. AWT tree
- // lock is not used as there are many peers related ops
- // to be done on the toolkit thread, and we don't want to
- // depend on a public lock on this thread
- private static final Object peerTreeLock =
- new StringBuilder("LWComponentPeer.peerTreeLock");
+ /**
+ * The lock to operate with the peers hierarchy. AWT tree lock is not used
+ * as there are many peers related ops to be done on the toolkit thread, and
+ * we don't want to depend on a public lock on this thread
+ */
+ private static final Object peerTreeLock = new Object();
+ /**
+ * The associated AWT object.
+ */
private final T target;
/**
@@ -95,7 +99,7 @@
* the hierarchy. The exception is LWWindowPeers: their containers are
* always null
*/
- private final LWContainerPeer containerPeer;
+ private final LWContainerPeer<?, ?> containerPeer;
/**
* Handy reference to the top-level window peer. Window peer is borrowed
@@ -147,11 +151,18 @@
*/
private Image backBuffer;
+ /**
+ * All Swing delegates use delegateContainer as a parent. This container
+ * intentionally do not use parent of the peer.
+ */
+ @SuppressWarnings("serial")// Safe: outer class is non-serializable.
private final class DelegateContainer extends Container {
{
enableEvents(0xFFFFFFFF);
}
+ // Empty non private constructor was added because access to this
+ // class shouldn't be emulated by a synthetic accessor method.
DelegateContainer() {
super();
}
@@ -182,7 +193,7 @@
}
}
- public LWComponentPeer(T target, PlatformComponent platformComponent) {
+ LWComponentPeer(final T target, final PlatformComponent platformComponent) {
targetPaintArea = new LWRepaintArea();
this.target = target;
this.platformComponent = platformComponent;
@@ -276,15 +287,18 @@
* This method is called under getDelegateLock().
* Overridden in subclasses.
*/
- protected D createDelegate() {
+ D createDelegate() {
return null;
}
- protected final D getDelegate() {
+ final D getDelegate() {
return delegate;
}
- protected Component getDelegateFocusOwner() {
+ /**
+ * This method should be called under getDelegateLock().
+ */
+ Component getDelegateFocusOwner() {
return getDelegate();
}
@@ -356,7 +370,7 @@
}
// Just a helper method
- protected final LWContainerPeer getContainerPeer() {
+ protected final LWContainerPeer<?, ?> getContainerPeer() {
return containerPeer;
}
@@ -390,7 +404,7 @@
protected void disposeImpl() {
destroyBuffers();
- LWContainerPeer cp = getContainerPeer();
+ LWContainerPeer<?, ?> cp = getContainerPeer();
if (cp != null) {
cp.removeChildPeer(this);
}
@@ -462,12 +476,13 @@
sg2d.constrain(size.x, size.y, size.width, size.height, getVisibleRegion());
}
- public Region getVisibleRegion() {
+ Region getVisibleRegion() {
return computeVisibleRect(this, getRegion());
}
- static final Region computeVisibleRect(LWComponentPeer c, Region region) {
- final LWContainerPeer p = c.getContainerPeer();
+ static final Region computeVisibleRect(final LWComponentPeer<?, ?> c,
+ Region region) {
+ final LWContainerPeer<?, ?> p = c.getContainerPeer();
if (p != null) {
final Rectangle r = c.getBounds();
region = region.getTranslatedRegion(r.x, r.y);
@@ -612,7 +627,7 @@
* @param p Point relative to the peer.
* @return Cursor of the peer or null if default cursor should be used.
*/
- protected Cursor getCursor(final Point p) {
+ Cursor getCursor(final Point p) {
return getTarget().getCursor();
}
@@ -717,7 +732,7 @@
@Override
public void setEnabled(final boolean e) {
boolean status = e;
- final LWComponentPeer cp = getContainerPeer();
+ final LWComponentPeer<?, ?> cp = getContainerPeer();
if (cp != null) {
status &= cp.isEnabled();
}
@@ -802,12 +817,12 @@
}
@Override
- public void setZOrder(ComponentPeer above) {
- LWContainerPeer cp = getContainerPeer();
+ public void setZOrder(final ComponentPeer above) {
+ LWContainerPeer<?, ?> cp = getContainerPeer();
// Don't check containerPeer for null as it can only happen
// for windows, but this method is overridden in
// LWWindowPeer and doesn't call super()
- cp.setChildPeerZOrder(this, (LWComponentPeer) above);
+ cp.setChildPeerZOrder(this, (LWComponentPeer<?, ?>) above);
}
@Override
@@ -923,7 +938,9 @@
LWKeyboardFocusManagerPeer.removeLastFocusRequest(getTarget());
return false;
}
- LWWindowPeer parentPeer = (LWWindowPeer) parentWindow.getPeer();
+ final LWWindowPeer parentPeer =
+ (LWWindowPeer) AWTAccessor.getComponentAccessor()
+ .getPeer(parentWindow);
if (parentPeer == null) {
focusLog.fine("request rejected, parentPeer is null");
LWKeyboardFocusManagerPeer.removeLastFocusRequest(getTarget());
@@ -1138,7 +1155,7 @@
}
protected final void repaintParent(final Rectangle oldB) {
- final LWContainerPeer cp = getContainerPeer();
+ final LWContainerPeer<?, ?> cp = getContainerPeer();
if (cp != null) {
// Repaint unobscured part of the parent
cp.repaintPeer(cp.getContentSize().intersection(oldB));
@@ -1254,6 +1271,8 @@
KeyEvent ke = (KeyEvent) e;
delegateEvent = new KeyEvent(getDelegateFocusOwner(), ke.getID(), ke.getWhen(),
ke.getModifiers(), ke.getKeyCode(), ke.getKeyChar(), ke.getKeyLocation());
+ AWTAccessor.getKeyEventAccessor().setExtendedKeyCode((KeyEvent) delegateEvent,
+ ke.getExtendedKeyCode());
} else if (e instanceof FocusEvent) {
FocusEvent fe = (FocusEvent) e;
delegateEvent = new FocusEvent(getDelegateFocusOwner(), fe.getID(), fe.isTemporary());
@@ -1273,7 +1292,7 @@
/**
* Handler for FocusEvents.
*/
- protected void handleJavaFocusEvent(FocusEvent e) {
+ void handleJavaFocusEvent(final FocusEvent e) {
// Note that the peer receives all the FocusEvents from
// its lightweight children as well
KeyboardFocusManagerPeer kfmPeer = LWKeyboardFocusManagerPeer.getInstance();
@@ -1309,7 +1328,7 @@
* Finds a top-most visible component for the given point. The location is
* specified relative to the peer's parent.
*/
- public LWComponentPeer findPeerAt(final int x, final int y) {
+ LWComponentPeer<?, ?> findPeerAt(final int x, final int y) {
final Rectangle r = getBounds();
final Region sh = getRegion();
final boolean found = isVisible() && sh.contains(x - r.x, y - r.y);
@@ -1326,7 +1345,7 @@
}
public Point windowToLocal(Point p, LWWindowPeer wp) {
- LWComponentPeer cp = this;
+ LWComponentPeer<?, ?> cp = this;
while (cp != wp) {
Rectangle cpb = cp.getBounds();
p.x -= cpb.x;
@@ -1347,7 +1366,7 @@
}
public Point localToWindow(Point p) {
- LWComponentPeer cp = getContainerPeer();
+ LWComponentPeer<?, ?> cp = getContainerPeer();
Rectangle r = getBounds();
while (cp != null) {
p.x += r.x;
@@ -1368,7 +1387,7 @@
repaintPeer(getSize());
}
- public void repaintPeer(final Rectangle r) {
+ void repaintPeer(final Rectangle r) {
final Rectangle toPaint = getSize().intersection(r);
if (!isShowing() || toPaint.isEmpty()) {
return;
@@ -1387,7 +1406,7 @@
protected final boolean isShowing() {
synchronized (getPeerTreeLock()) {
if (isVisible()) {
- final LWContainerPeer container = getContainerPeer();
+ final LWContainerPeer<?, ?> container = getContainerPeer();
return (container == null) || container.isShowing();
}
}
@@ -1395,8 +1414,7 @@
}
/**
- * Paints the peer. Overridden in subclasses to delegate the actual painting
- * to Swing components.
+ * Paints the peer. Delegate the actual painting to Swing components.
*/
protected final void paintPeer(final Graphics g) {
final D delegate = getDelegate();
--- a/jdk/src/macosx/classes/sun/lwawt/LWContainerPeer.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/macosx/classes/sun/lwawt/LWContainerPeer.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -41,32 +41,25 @@
import javax.swing.JComponent;
abstract class LWContainerPeer<T extends Container, D extends JComponent>
- extends LWCanvasPeer<T, D>
- implements ContainerPeer
-{
- // List of child peers sorted by z-order from bottom-most
- // to top-most
- private List<LWComponentPeer> childPeers =
- new LinkedList<LWComponentPeer>();
+ extends LWCanvasPeer<T, D> implements ContainerPeer {
- LWContainerPeer(T target, PlatformComponent platformComponent) {
+ /**
+ * List of child peers sorted by z-order from bottom-most to top-most.
+ */
+ private final List<LWComponentPeer<?, ?>> childPeers = new LinkedList<>();
+
+ LWContainerPeer(final T target, final PlatformComponent platformComponent) {
super(target, platformComponent);
}
- void addChildPeer(LWComponentPeer child) {
+ final void addChildPeer(final LWComponentPeer<?, ?> child) {
synchronized (getPeerTreeLock()) {
- addChildPeer(child, childPeers.size());
+ childPeers.add(childPeers.size(), child);
+ // TODO: repaint
}
}
- void addChildPeer(LWComponentPeer child, int index) {
- synchronized (getPeerTreeLock()) {
- childPeers.add(index, child);
- }
- // TODO: repaint
- }
-
- void removeChildPeer(LWComponentPeer child) {
+ final void removeChildPeer(final LWComponentPeer<?, ?> child) {
synchronized (getPeerTreeLock()) {
childPeers.remove(child);
}
@@ -74,7 +67,8 @@
}
// Used by LWComponentPeer.setZOrder()
- void setChildPeerZOrder(LWComponentPeer peer, LWComponentPeer above) {
+ final void setChildPeerZOrder(final LWComponentPeer<?, ?> peer,
+ final LWComponentPeer<?, ?> above) {
synchronized (getPeerTreeLock()) {
childPeers.remove(peer);
int index = (above != null) ? childPeers.indexOf(above) : childPeers.size();
@@ -98,25 +92,27 @@
}
@Override
- public void beginValidate() {
- // TODO: it seems that begin/endValidate() is only useful
- // for heavyweight windows, when a batch movement for
- // child windows occurs. That's why no-op
- }
- @Override
- public void endValidate() {
+ public final void beginValidate() {
// TODO: it seems that begin/endValidate() is only useful
// for heavyweight windows, when a batch movement for
// child windows occurs. That's why no-op
}
@Override
- public void beginLayout() {
+ public final void endValidate() {
+ // TODO: it seems that begin/endValidate() is only useful
+ // for heavyweight windows, when a batch movement for
+ // child windows occurs. That's why no-op
+ }
+
+ @Override
+ public final void beginLayout() {
// Skip all painting till endLayout()
setLayouting(true);
}
+
@Override
- public void endLayout() {
+ public final void endLayout() {
setLayouting(false);
// Post an empty event to flush all the pending target paints
@@ -125,18 +121,19 @@
// ---- PEER NOTIFICATIONS ---- //
- /*
+ /**
* Returns a copy of the childPeer collection.
*/
- protected List<LWComponentPeer> getChildren() {
+ @SuppressWarnings("unchecked")
+ final List<LWComponentPeer<?, ?>> getChildren() {
synchronized (getPeerTreeLock()) {
- Object copy = ((LinkedList)childPeers).clone();
- return (List<LWComponentPeer>)copy;
+ Object copy = ((LinkedList<?>) childPeers).clone();
+ return (List<LWComponentPeer<?, ?>>) copy;
}
}
@Override
- public final Region getVisibleRegion() {
+ final Region getVisibleRegion() {
return cutChildren(super.getVisibleRegion(), null);
}
@@ -144,9 +141,9 @@
* Removes bounds of children above specific child from the region. If above
* is null removes all bounds of children.
*/
- protected final Region cutChildren(Region r, final LWComponentPeer above) {
+ final Region cutChildren(Region r, final LWComponentPeer<?, ?> above) {
boolean aboveFound = above == null;
- for (final LWComponentPeer child : getChildren()) {
+ for (final LWComponentPeer<?, ?> child : getChildren()) {
if (!aboveFound && child == above) {
aboveFound = true;
continue;
@@ -170,8 +167,8 @@
* specified relative to the peer's parent.
*/
@Override
- public final LWComponentPeer findPeerAt(int x, int y) {
- LWComponentPeer peer = super.findPeerAt(x, y);
+ final LWComponentPeer<?, ?> findPeerAt(int x, int y) {
+ LWComponentPeer<?, ?> peer = super.findPeerAt(x, y);
final Rectangle r = getBounds();
// Translate to this container's coordinates to pass to children
x -= r.x;
@@ -179,7 +176,7 @@
if (peer != null && getContentSize().contains(x, y)) {
synchronized (getPeerTreeLock()) {
for (int i = childPeers.size() - 1; i >= 0; --i) {
- LWComponentPeer p = childPeers.get(i).findPeerAt(x, y);
+ LWComponentPeer<?, ?> p = childPeers.get(i).findPeerAt(x, y);
if (p != null) {
peer = p;
break;
@@ -195,7 +192,7 @@
* peers should be repainted
*/
@Override
- public final void repaintPeer(final Rectangle r) {
+ final void repaintPeer(final Rectangle r) {
final Rectangle toPaint = getSize().intersection(r);
if (!isShowing() || toPaint.isEmpty()) {
return;
@@ -208,13 +205,13 @@
repaintChildren(toPaint);
}
- /*
- * Paints all the child peers in the straight z-order, so the
- * bottom-most ones are painted first.
- */
+ /**
+ * Paints all the child peers in the straight z-order, so the
+ * bottom-most ones are painted first.
+ */
private void repaintChildren(final Rectangle r) {
final Rectangle content = getContentSize();
- for (final LWComponentPeer child : getChildren()) {
+ for (final LWComponentPeer<?, ?> child : getChildren()) {
final Rectangle childBounds = child.getBounds();
Rectangle toPaint = r.intersection(childBounds);
toPaint = toPaint.intersection(content);
@@ -223,21 +220,21 @@
}
}
- protected Rectangle getContentSize() {
+ Rectangle getContentSize() {
return getSize();
}
@Override
public void setEnabled(final boolean e) {
super.setEnabled(e);
- for (final LWComponentPeer child : getChildren()) {
+ for (final LWComponentPeer<?, ?> child : getChildren()) {
child.setEnabled(e && child.getTarget().isEnabled());
}
}
@Override
public void setBackground(final Color c) {
- for (final LWComponentPeer child : getChildren()) {
+ for (final LWComponentPeer<?, ?> child : getChildren()) {
if (!child.getTarget().isBackgroundSet()) {
child.setBackground(c);
}
@@ -247,7 +244,7 @@
@Override
public void setForeground(final Color c) {
- for (final LWComponentPeer child : getChildren()) {
+ for (final LWComponentPeer<?, ?> child : getChildren()) {
if (!child.getTarget().isForegroundSet()) {
child.setForeground(c);
}
@@ -257,7 +254,7 @@
@Override
public void setFont(final Font f) {
- for (final LWComponentPeer child : getChildren()) {
+ for (final LWComponentPeer<?, ?> child : getChildren()) {
if (!child.getTarget().isFontSet()) {
child.setFont(f);
}
--- a/jdk/src/macosx/classes/sun/lwawt/LWCursorManager.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/macosx/classes/sun/lwawt/LWCursorManager.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -32,6 +32,7 @@
import java.util.concurrent.atomic.AtomicBoolean;
+import sun.awt.AWTAccessor;
import sun.awt.SunToolkit;
public abstract class LWCursorManager {
@@ -105,11 +106,13 @@
c = peer.getTarget();
if (c instanceof Container) {
final Point p = peer.getLocationOnScreen();
- c = ((Container) c).findComponentAt(cursorPos.x - p.x,
- cursorPos.y - p.y);
+ c = AWTAccessor.getContainerAccessor().findComponentAt(
+ (Container) c, cursorPos.x - p.x, cursorPos.y - p.y, false);
+
}
while (c != null) {
- if (c.isVisible() && c.isEnabled() && (c.getPeer() != null)) {
+ final Object p = AWTAccessor.getComponentAccessor().getPeer(c);
+ if (c.isVisible() && c.isEnabled() && p != null) {
break;
}
c = c.getParent();
--- a/jdk/src/macosx/classes/sun/lwawt/LWLabelPeer.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/macosx/classes/sun/lwawt/LWLabelPeer.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -44,7 +44,7 @@
}
@Override
- protected JLabel createDelegate() {
+ JLabel createDelegate() {
return new JLabel();
}
--- a/jdk/src/macosx/classes/sun/lwawt/LWLightweightFramePeer.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/macosx/classes/sun/lwawt/LWLightweightFramePeer.java Thu Oct 10 13:41:08 2013 -0700
@@ -34,6 +34,8 @@
import sun.awt.CausedFocusEvent;
import sun.awt.LightweightFrame;
+import sun.swing.JLightweightFrame;
+import sun.swing.SwingAccessor;
public class LWLightweightFramePeer extends LWWindowPeer {
@@ -91,11 +93,6 @@
}
@Override
- public void updateCursorImmediately() {
- // TODO: tries to switch to the awt/fx toolkit thread and causes a deadlock on macosx
- }
-
- @Override
public void addDropTarget(DropTarget dt) {
}
@@ -112,4 +109,9 @@
public void ungrab() {
getLwTarget().ungrabFocus();
}
+
+ @Override
+ public void updateCursorImmediately() {
+ SwingAccessor.getJLightweightFrameAccessor().updateCursor((JLightweightFrame)getLwTarget());
+ }
}
--- a/jdk/src/macosx/classes/sun/lwawt/LWListPeer.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/macosx/classes/sun/lwawt/LWListPeer.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 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
@@ -33,7 +33,8 @@
import java.util.Arrays;
/**
- * Lightweight implementation of {@link ListPeer}.
+ * Lightweight implementation of {@link ListPeer}. Delegates most of the work to
+ * the {@link JList}, which is placed inside {@link JScrollPane}.
*/
final class LWListPeer extends LWComponentPeer<List, LWListPeer.ScrollableJList>
implements ListPeer {
@@ -56,7 +57,7 @@
}
@Override
- protected ScrollableJList createDelegate() {
+ ScrollableJList createDelegate() {
return new ScrollableJList();
}
@@ -78,7 +79,7 @@
}
@Override
- protected Component getDelegateFocusOwner() {
+ Component getDelegateFocusOwner() {
return getDelegate().getView();
}
@@ -193,6 +194,7 @@
}
}
+ @SuppressWarnings("serial")// Safe: outer class is non-serializable.
final class ScrollableJList extends JScrollPane implements ListSelectionListener {
private boolean skipStateChangedEvent;
@@ -234,9 +236,10 @@
}
@Override
+ @SuppressWarnings("unchecked")
public void valueChanged(final ListSelectionEvent e) {
if (!e.getValueIsAdjusting() && !isSkipStateChangedEvent()) {
- final JList source = (JList) e.getSource();
+ final JList<?> source = (JList<?>) e.getSource();
for(int i = 0 ; i < source.getModel().getSize(); i++) {
final boolean wasSelected = Arrays.binarySearch(oldSelectedIndices, i) >= 0;
@@ -255,6 +258,7 @@
}
}
+ @SuppressWarnings("unchecked")
public JList<String> getView() {
return (JList<String>) getViewport().getView();
}
@@ -289,7 +293,7 @@
private final class JListDelegate extends JList<String> {
JListDelegate() {
- super(ScrollableJList.this.model);
+ super(model);
}
@Override
--- a/jdk/src/macosx/classes/sun/lwawt/LWMouseInfoPeer.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/macosx/classes/sun/lwawt/LWMouseInfoPeer.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -30,10 +30,9 @@
import java.awt.peer.MouseInfoPeer;
-public class LWMouseInfoPeer implements MouseInfoPeer {
+import sun.awt.AWTAccessor;
- public LWMouseInfoPeer() {
- }
+public class LWMouseInfoPeer implements MouseInfoPeer {
@Override
public int fillPointWithCoords(Point point) {
@@ -52,7 +51,7 @@
return false;
}
- LWWindowPeer windowPeer = (LWWindowPeer)w.getPeer();
+ final Object windowPeer = AWTAccessor.getComponentAccessor().getPeer(w);
return LWWindowPeer.getWindowUnderCursor() == windowPeer;
}
--- a/jdk/src/macosx/classes/sun/lwawt/LWPanelPeer.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/macosx/classes/sun/lwawt/LWPanelPeer.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -31,6 +31,10 @@
import javax.swing.JPanel;
+/**
+ * Lightweight implementation of {@link PanelPeer}. Delegates most of the work
+ * to the {@link JPanel}.
+ */
final class LWPanelPeer extends LWContainerPeer<Panel, JPanel>
implements PanelPeer {
@@ -39,7 +43,7 @@
}
@Override
- public JPanel createDelegate() {
+ JPanel createDelegate() {
return new JPanel();
}
}
--- a/jdk/src/macosx/classes/sun/lwawt/LWRepaintArea.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/macosx/classes/sun/lwawt/LWRepaintArea.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 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
@@ -26,39 +26,38 @@
package sun.lwawt;
-import sun.awt.RepaintArea;
-
import java.awt.Component;
import java.awt.Graphics;
+import sun.awt.AWTAccessor;
+import sun.awt.RepaintArea;
+
/**
+ * Emulates appearance of heavyweight components before call of the user code.
+ *
* @author Sergey Bylokhov
*/
final class LWRepaintArea extends RepaintArea {
@Override
protected void updateComponent(final Component comp, final Graphics g) {
+ // We shouldn't paint native component as a result of UPDATE events,
+ // just flush onscreen back-buffer.
if (comp != null) {
super.updateComponent(comp, g);
- flushBuffers((LWComponentPeer) comp.getPeer());
+ LWComponentPeer.flushOnscreenGraphics();
}
}
@Override
protected void paintComponent(final Component comp, final Graphics g) {
if (comp != null) {
- final LWComponentPeer peer = (LWComponentPeer) comp.getPeer();
+ Object peer = AWTAccessor.getComponentAccessor().getPeer(comp);
if (peer != null) {
- peer.paintPeer(g);
+ ((LWComponentPeer<?, ?>) peer).paintPeer(g);
}
super.paintComponent(comp, g);
- flushBuffers(peer);
- }
- }
-
- private static void flushBuffers(final LWComponentPeer peer) {
- if (peer != null) {
- peer.flushOnscreenGraphics();
+ LWComponentPeer.flushOnscreenGraphics();
}
}
}
--- a/jdk/src/macosx/classes/sun/lwawt/LWScrollBarPeer.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/macosx/classes/sun/lwawt/LWScrollBarPeer.java Thu Oct 10 13:41:08 2013 -0700
@@ -34,10 +34,14 @@
import javax.swing.JScrollBar;
+/**
+ * Lightweight implementation of {@link ScrollbarPeer}. Delegates most of the
+ * work to the {@link JScrollBar}.
+ */
final class LWScrollBarPeer extends LWComponentPeer<Scrollbar, JScrollBar>
implements ScrollbarPeer, AdjustmentListener {
- //JScrollBar fires two changes with firePropertyChange (one for old value
+ // JScrollBar fires two changes with firePropertyChange (one for old value
// and one for new one.
// We save the last value and don't fire event if not changed.
private int currentValue;
@@ -48,7 +52,7 @@
}
@Override
- protected JScrollBar createDelegate() {
+ JScrollBar createDelegate() {
return new JScrollBar();
}
--- a/jdk/src/macosx/classes/sun/lwawt/LWScrollPanePeer.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/macosx/classes/sun/lwawt/LWScrollPanePeer.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 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
@@ -33,6 +33,10 @@
import java.awt.peer.ScrollPanePeer;
import java.util.List;
+/**
+ * Lightweight implementation of {@link ScrollPanePeer}. Delegates most of the
+ * work to the {@link JScrollPane}.
+ */
final class LWScrollPanePeer extends LWContainerPeer<ScrollPane, JScrollPane>
implements ScrollPanePeer, ChangeListener {
@@ -41,7 +45,8 @@
super(target, platformComponent);
}
- protected JScrollPane createDelegate() {
+ @Override
+ JScrollPane createDelegate() {
final JScrollPane sp = new JScrollPane();
final JPanel panel = new JPanel();
panel.setOpaque(false);
@@ -72,7 +77,7 @@
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
- final LWComponentPeer viewPeer = getViewPeer();
+ final LWComponentPeer<?, ?> viewPeer = getViewPeer();
if (viewPeer != null) {
final Rectangle r;
synchronized (getDelegateLock()) {
@@ -96,14 +101,13 @@
}
}
- LWComponentPeer getViewPeer() {
- List<LWComponentPeer> peerList = getChildren();
+ LWComponentPeer<?, ?> getViewPeer() {
+ final List<LWComponentPeer<?, ?>> peerList = getChildren();
return peerList.isEmpty() ? null : peerList.get(0);
}
-
@Override
- protected Rectangle getContentSize() {
+ Rectangle getContentSize() {
Rectangle viewRect = getDelegate().getViewport().getViewRect();
return new Rectangle(viewRect.width, viewRect.height);
}
@@ -112,7 +116,7 @@
public void layout() {
super.layout();
synchronized (getDelegateLock()) {
- LWComponentPeer viewPeer = getViewPeer();
+ final LWComponentPeer<?, ?> viewPeer = getViewPeer();
if (viewPeer != null) {
Component view = getDelegate().getViewport().getView();
view.setBounds(viewPeer.getBounds());
--- a/jdk/src/macosx/classes/sun/lwawt/LWTextAreaPeer.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/macosx/classes/sun/lwawt/LWTextAreaPeer.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -44,7 +44,7 @@
/**
* Lightweight implementation of {@link TextAreaPeer}. Delegates most of the
- * work to the {@link JTextArea} inside JScrollPane.
+ * work to the {@link JTextArea} inside {@link JScrollPane}.
*/
final class LWTextAreaPeer
extends LWTextComponentPeer<TextArea, LWTextAreaPeer.ScrollableJTextArea>
@@ -66,7 +66,7 @@
}
@Override
- protected ScrollableJTextArea createDelegate() {
+ ScrollableJTextArea createDelegate() {
return new ScrollableJTextArea();
}
@@ -85,7 +85,7 @@
}
@Override
- protected Cursor getCursor(final Point p) {
+ Cursor getCursor(final Point p) {
final boolean isContains;
synchronized (getDelegateLock()) {
isContains = getDelegate().getViewport().getBounds().contains(p);
@@ -94,7 +94,7 @@
}
@Override
- protected Component getDelegateFocusOwner() {
+ Component getDelegateFocusOwner() {
return getTextComponent();
}
@@ -200,7 +200,7 @@
}
}
- @SuppressWarnings("serial")
+ @SuppressWarnings("serial")// Safe: outer class is non-serializable.
final class ScrollableJTextArea extends JScrollPane {
ScrollableJTextArea() {
@@ -218,7 +218,6 @@
super.setEnabled(enabled);
}
- @SuppressWarnings("serial")
private final class JTextAreaDelegate extends JTextArea {
// Empty non private constructor was added because access to this
--- a/jdk/src/macosx/classes/sun/lwawt/LWTextComponentPeer.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/macosx/classes/sun/lwawt/LWTextComponentPeer.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -44,11 +44,14 @@
import javax.swing.text.Document;
import javax.swing.text.JTextComponent;
+/**
+ * Lightweight implementation of {@link TextComponentPeer}. Provides useful
+ * methods for {@link LWTextAreaPeer} and {@link LWTextFieldPeer}
+ */
abstract class LWTextComponentPeer<T extends TextComponent, D extends JComponent>
extends LWComponentPeer<T, D>
implements DocumentListener, TextComponentPeer, InputMethodListener {
-
private volatile boolean firstChangeSkipped;
LWTextComponentPeer(final T target,
@@ -218,14 +221,14 @@
}
@Override
- public void inputMethodTextChanged(InputMethodEvent event) {
+ public void inputMethodTextChanged(final InputMethodEvent event) {
synchronized (getDelegateLock()) {
AWTAccessor.getComponentAccessor().processEvent(getTextComponent(), event);
}
}
@Override
- public void caretPositionChanged(InputMethodEvent event) {
+ public void caretPositionChanged(final InputMethodEvent event) {
synchronized (getDelegateLock()) {
AWTAccessor.getComponentAccessor().processEvent(getTextComponent(), event);
}
--- a/jdk/src/macosx/classes/sun/lwawt/LWTextFieldPeer.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/macosx/classes/sun/lwawt/LWTextFieldPeer.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 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
@@ -37,6 +37,10 @@
import javax.swing.*;
import javax.swing.text.JTextComponent;
+/**
+ * Lightweight implementation of {@link TextFieldPeer}. Delegates most of the
+ * work to the {@link JPasswordField}.
+ */
final class LWTextFieldPeer
extends LWTextComponentPeer<TextField, JPasswordField>
implements TextFieldPeer, ActionListener {
@@ -47,7 +51,7 @@
}
@Override
- protected JPasswordField createDelegate() {
+ JPasswordField createDelegate() {
return new JPasswordFieldDelegate();
}
@@ -107,7 +111,7 @@
* @param e the focus event
*/
@Override
- protected void handleJavaFocusEvent(final FocusEvent e) {
+ void handleJavaFocusEvent(final FocusEvent e) {
if (e.getID() == FocusEvent.FOCUS_LOST) {
// In order to de-select the selection
setCaretPosition(0);
@@ -115,6 +119,7 @@
super.handleJavaFocusEvent(e);
}
+ @SuppressWarnings("serial")// Safe: outer class is non-serializable.
private final class JPasswordFieldDelegate extends JPasswordField {
// Empty non private constructor was added because access to this
--- a/jdk/src/macosx/classes/sun/lwawt/LWToolkit.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/macosx/classes/sun/lwawt/LWToolkit.java Thu Oct 10 13:41:08 2013 -0700
@@ -557,16 +557,18 @@
}
@Override
- public void grab(Window w) {
- if (w.getPeer() != null) {
- ((LWWindowPeer)w.getPeer()).grab();
+ public void grab(final Window w) {
+ final Object peer = AWTAccessor.getComponentAccessor().getPeer(w);
+ if (peer != null) {
+ ((LWWindowPeer) peer).grab();
}
}
@Override
- public void ungrab(Window w) {
- if (w.getPeer() != null) {
- ((LWWindowPeer)w.getPeer()).ungrab(false);
+ public void ungrab(final Window w) {
+ final Object peer = AWTAccessor.getComponentAccessor().getPeer(w);
+ if (peer != null) {
+ ((LWWindowPeer) peer).ungrab(false);
}
}
--- a/jdk/src/macosx/classes/sun/lwawt/LWWindowPeer.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/macosx/classes/sun/lwawt/LWWindowPeer.java Thu Oct 10 13:41:08 2013 -0700
@@ -43,7 +43,7 @@
extends LWContainerPeer<Window, JComponent>
implements FramePeer, DialogPeer, FullScreenCapable, DisplayChangedListener, PlatformEventNotifier
{
- public static enum PeerType {
+ public enum PeerType {
SIMPLEWINDOW,
FRAME,
DIALOG,
@@ -83,15 +83,15 @@
// A peer where the last mouse event came to. Used by cursor manager to
// find the component under cursor
- private static volatile LWComponentPeer lastCommonMouseEventPeer = null;
+ private static volatile LWComponentPeer<?, ?> lastCommonMouseEventPeer;
// A peer where the last mouse event came to. Used to generate
// MOUSE_ENTERED/EXITED notifications
- private volatile LWComponentPeer lastMouseEventPeer;
+ private volatile LWComponentPeer<?, ?> lastMouseEventPeer;
// Peers where all dragged/released events should come to,
// depending on what mouse button is being dragged according to Cocoa
- private static LWComponentPeer mouseDownTarget[] = new LWComponentPeer[3];
+ private static final LWComponentPeer<?, ?>[] mouseDownTarget = new LWComponentPeer<?, ?>[3];
// A bitmask that indicates what mouse buttons produce MOUSE_CLICKED events
// on MOUSE_RELEASE. Click events are only generated if there were no drag
@@ -129,7 +129,8 @@
this.peerType = peerType;
Window owner = target.getOwner();
- LWWindowPeer ownerPeer = (owner != null) ? (LWWindowPeer)owner.getPeer() : null;
+ LWWindowPeer ownerPeer = owner == null ? null :
+ (LWWindowPeer) AWTAccessor.getComponentAccessor().getPeer(owner);
PlatformWindow ownerDelegate = (ownerPeer != null) ? ownerPeer.getPlatformWindow() : null;
// The delegate.initialize() needs a non-null GC on X11.
@@ -163,10 +164,10 @@
// Init warning window(for applets)
SecurityWarningWindow warn = null;
- if (((Window)target).getWarningString() != null) {
+ if (target.getWarningString() != null) {
// accessSystemTray permission allows to display TrayIcon, TrayIcon tooltip
// and TrayIcon balloon windows without a warning window.
- if (!AWTAccessor.getWindowAccessor().isTrayIconWindow((Window)target)) {
+ if (!AWTAccessor.getWindowAccessor().isTrayIconWindow(target)) {
LWToolkit toolkit = (LWToolkit)Toolkit.getDefaultToolkit();
warn = toolkit.createSecurityWarning(target, this);
}
@@ -210,6 +211,7 @@
}
// Just a helper method
+ @Override
public PlatformWindow getPlatformWindow() {
return platformWindow;
}
@@ -391,7 +393,8 @@
@Override
public void setModalBlocked(Dialog blocker, boolean blocked) {
synchronized (getPeerTreeLock()) {
- this.blocker = blocked ? (LWWindowPeer)blocker.getPeer() : null;
+ this.blocker = !blocked ? null :
+ (LWWindowPeer) AWTAccessor.getComponentAccessor().getPeer(blocker);
}
platformWindow.setModalBlocked(blocked);
@@ -458,6 +461,7 @@
textured = isTextured;
}
+ @Override
public final boolean isTranslucent() {
synchronized (getStateLock()) {
/*
@@ -537,7 +541,8 @@
public void blockWindows(List<Window> windows) {
//TODO: LWX will probably need some collectJavaToplevels to speed this up
for (Window w : windows) {
- WindowPeer wp = (WindowPeer)w.getPeer();
+ WindowPeer wp =
+ (WindowPeer) AWTAccessor.getComponentAccessor().getPeer(w);
if (wp != null) {
wp.setModalBlocked((Dialog)getTarget(), true);
}
@@ -694,7 +699,7 @@
// TODO: fill "bdata" member of AWTEvent
Rectangle r = getBounds();
// findPeerAt() expects parent coordinates
- LWComponentPeer targetPeer = findPeerAt(r.x + x, r.y + y);
+ LWComponentPeer<?, ?> targetPeer = findPeerAt(r.x + x, r.y + y);
if (id == MouseEvent.MOUSE_EXITED) {
isMouseOver = false;
@@ -743,7 +748,7 @@
screenX, screenY, modifiers, clickCount, popupTrigger,
targetPeer);
} else {
- LWComponentPeer topmostTargetPeer =
+ LWComponentPeer<?, ?> topmostTargetPeer =
topmostWindowPeer != null ? topmostWindowPeer.findPeerAt(r.x + x, r.y + y) : null;
topmostWindowPeer.generateMouseEnterExitEventsForComponents(when, button, x, y,
screenX, screenY, modifiers, clickCount, popupTrigger,
@@ -840,7 +845,7 @@
private void generateMouseEnterExitEventsForComponents(long when,
int button, int x, int y, int screenX, int screenY,
int modifiers, int clickCount, boolean popupTrigger,
- LWComponentPeer targetPeer) {
+ final LWComponentPeer<?, ?> targetPeer) {
if (!isMouseOver || targetPeer == lastMouseEventPeer) {
return;
@@ -899,7 +904,7 @@
// TODO: could we just use the last mouse event target here?
Rectangle r = getBounds();
// findPeerAt() expects parent coordinates
- final LWComponentPeer targetPeer = findPeerAt(r.x + x, r.y + y);
+ final LWComponentPeer<?, ?> targetPeer = findPeerAt(r.x + x, r.y + y);
if (targetPeer == null || !targetPeer.isEnabled()) {
return;
}
@@ -933,7 +938,12 @@
focusOwner = this.getTarget();
}
}
- postEvent(new KeyEvent(focusOwner, id, when, modifiers, keyCode, keyChar, keyLocation));
+
+ KeyEvent keyEvent = new KeyEvent(focusOwner, id, when, modifiers,
+ keyCode, keyChar, keyLocation);
+ AWTAccessor.getKeyEventAccessor().setExtendedKeyCode(keyEvent,
+ ExtendedKeyCodes.getExtendedKeyCodeForChar(keyChar));
+ postEvent(keyEvent);
}
// ---- UTILITY METHODS ---- //
@@ -1152,8 +1162,9 @@
if (focusLog.isLoggable(PlatformLogger.Level.FINE)) {
focusLog.fine("requesting native focus to the owner " + owner);
}
- LWWindowPeer currentActivePeer = (currentActive != null ?
- (LWWindowPeer)currentActive.getPeer() : null);
+ LWWindowPeer currentActivePeer = currentActive == null ? null :
+ (LWWindowPeer) AWTAccessor.getComponentAccessor().getPeer(
+ currentActive);
// Ensure the opposite is natively active and suppress sending events.
if (currentActivePeer != null && currentActivePeer.platformWindow.isActive()) {
@@ -1265,7 +1276,8 @@
while (owner != null && !(owner instanceof Frame || owner instanceof Dialog)) {
owner = owner.getOwner();
}
- return owner != null ? (LWWindowPeer)owner.getPeer() : null;
+ return owner == null ? null :
+ (LWWindowPeer) AWTAccessor.getComponentAccessor().getPeer(owner);
}
/**
@@ -1284,11 +1296,13 @@
}
}
+ @Override
public void enterFullScreenMode() {
platformWindow.enterFullScreenMode();
updateSecurityWarningVisibility();
}
+ @Override
public void exitFullScreenMode() {
platformWindow.exitFullScreenMode();
updateSecurityWarningVisibility();
--- a/jdk/src/macosx/classes/sun/lwawt/SelectionClearListener.java Thu Oct 10 08:51:55 2013 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.lwawt;
-
-/*
- * Every time the TextField (or TextArea) change selection, every other text components
- * must immediately clear their selections.
- */
-interface SelectionClearListener {
- void clearSelection();
-}
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CMenu.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CMenu.java Thu Oct 10 13:41:08 2013 -0700
@@ -26,9 +26,11 @@
package sun.lwawt.macosx;
import java.awt.*;
+import java.awt.peer.MenuItemPeer;
import java.awt.peer.MenuPeer;
public class CMenu extends CMenuItem implements MenuPeer {
+
public CMenu(Menu target) {
super(target);
}
@@ -41,6 +43,20 @@
}
@Override
+ public final void setEnabled(final boolean b) {
+ super.setEnabled(b);
+ final Menu target = (Menu) getTarget();
+ final int count = target.getItemCount();
+ for (int i = 0; i < count; ++i) {
+ MenuItem item = target.getItem(i);
+ MenuItemPeer p = (MenuItemPeer) LWCToolkit.targetToPeer(item);
+ if (p != null) {
+ p.setEnabled(b && item.isEnabled());
+ }
+ }
+ }
+
+ @Override
protected long createModel() {
CMenuComponent parent = (CMenuComponent)
LWCToolkit.targetToPeer(getTarget().getParent());
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CMenuItem.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CMenuItem.java Thu Oct 10 13:41:08 2013 -0700
@@ -28,17 +28,20 @@
import sun.awt.SunToolkit;
import sun.lwawt.LWToolkit;
+import java.awt.MenuContainer;
import java.awt.MenuItem;
import java.awt.MenuShortcut;
import java.awt.event.*;
import java.awt.peer.MenuItemPeer;
+import java.util.concurrent.atomic.AtomicBoolean;
public class CMenuItem extends CMenuComponent implements MenuItemPeer {
+ private final AtomicBoolean enabled = new AtomicBoolean(true);
+
public CMenuItem(MenuItem target) {
super(target);
initialize(target);
-
}
// This way we avoiding invocation of the setters twice
@@ -124,9 +127,19 @@
setEnabled(false);
}
+ public final boolean isEnabled() {
+ return enabled.get();
+ }
+
@Override
public void setEnabled(boolean b) {
- nativeSetEnabled(getModel(), b);
+ final Object parent = LWToolkit.targetToPeer(getTarget().getParent());
+ if (parent instanceof CMenuItem) {
+ b &= ((CMenuItem) parent).isEnabled();
+ }
+ if (enabled.compareAndSet(!b, b)) {
+ nativeSetEnabled(getModel(), b);
+ }
}
private native long nativeCreate(long parentMenu, boolean isSeparator);
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CMouseInfoPeer.java Thu Oct 10 08:51:55 2013 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.lwawt.macosx;
-
-import java.awt.Window;
-import sun.lwawt.LWMouseInfoPeer;
-import sun.lwawt.LWWindowPeer;
-
-public class CMouseInfoPeer extends LWMouseInfoPeer
-{
- //If a new window is to appear under the cursor,
- //we get wrong window.
- //This is a workaround for macosx.
- @Override
- public boolean isWindowUnderMouse(Window w) {
- if (w == null) {
- return false;
- }
-
- return ((LWWindowPeer)w.getPeer()).getPlatformWindow().isUnderMouse();
- }
-}
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java Thu Oct 10 13:41:08 2013 -0700
@@ -820,6 +820,7 @@
}
nativeSetEnabled(getNSWindowPtr(), !blocked);
+ checkBlockingAndOrder();
}
public final void invalidateShadow(){
@@ -984,7 +985,7 @@
setStyleBits(SHOULD_BECOME_KEY | SHOULD_BECOME_MAIN, isFocusable); // set both bits at once
}
- private boolean checkBlocking() {
+ private boolean checkBlockingAndOrder() {
LWWindowPeer blocker = (peer == null)? null : peer.getBlocker();
if (blocker == null) {
return false;
@@ -1040,7 +1041,7 @@
private void windowDidBecomeMain() {
assert CThreading.assertAppKit();
- if (checkBlocking()) return;
+ if (checkBlockingAndOrder()) return;
// If it's not blocked, make sure it's above its siblings
orderAboveSiblings();
}
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java Thu Oct 10 13:41:08 2013 -0700
@@ -44,6 +44,8 @@
import sun.lwawt.LWWindowPeer.PeerType;
import sun.security.action.GetBooleanAction;
+import sun.util.CoreResourceBundleControl;
+
class NamedCursor extends Cursor {
NamedCursor(String name) {
super(name);
@@ -67,13 +69,28 @@
static {
System.err.flush();
- java.security.AccessController.doPrivileged(new java.security.PrivilegedAction<Object>() {
- public Object run() {
+
+ ResourceBundle platformResources = java.security.AccessController.doPrivileged(
+ new java.security.PrivilegedAction<ResourceBundle>() {
+ public ResourceBundle run() {
+ ResourceBundle platformResources = null;
+ try {
+ platformResources =
+ ResourceBundle.getBundle("sun.awt.resources.awtosx",
+ CoreResourceBundleControl.getRBControlInstance());
+ } catch (MissingResourceException e) {
+ // No resource file; defaults will be used.
+ }
+
System.loadLibrary("awt");
System.loadLibrary("fontmanager");
- return null;
+
+ return platformResources;
}
});
+
+ AWTAccessor.getToolkitAccessor().setPlatformResources(platformResources);
+
if (!GraphicsEnvironment.isHeadless()) {
initIDs();
}
@@ -207,9 +224,9 @@
@Override
public MenuBarPeer createMenuBar(MenuBar target) {
- MenuBarPeer peer = new CMenuBar(target);
- targetCreatedPeer(target, peer);
- return peer;
+ MenuBarPeer peer = new CMenuBar(target);
+ targetCreatedPeer(target, peer);
+ return peer;
}
@Override
@@ -303,11 +320,6 @@
}
@Override
- protected MouseInfoPeer createMouseInfoPeerImpl() {
- return new CMouseInfoPeer();
- }
-
- @Override
protected int getScreenHeight() {
return GraphicsEnvironment.getLocalGraphicsEnvironment()
.getDefaultScreenDevice().getDefaultConfiguration().getBounds().height;
--- a/jdk/src/macosx/native/sun/awt/AWTEvent.m Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/macosx/native/sun/awt/AWTEvent.m Thu Oct 10 13:41:08 2013 -0700
@@ -759,7 +759,7 @@
*/
JNIEXPORT jint JNICALL
Java_sun_lwawt_macosx_event_NSEvent_nsToJavaChar
-(JNIEnv *env, jclass cls, char nsChar, jint modifierFlags)
+(JNIEnv *env, jclass cls, jchar nsChar, jint modifierFlags)
{
jchar javaChar = 0;
--- a/jdk/src/macosx/native/sun/awt/AWTView.m Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/macosx/native/sun/awt/AWTView.m Thu Oct 10 13:41:08 2013 -0700
@@ -126,7 +126,7 @@
self.cglLayer = nil;
- JNIEnv *env = [ThreadUtilities getJNIEnv];
+ JNIEnv *env = [ThreadUtilities getJNIEnvUncached];
(*env)->DeleteGlobalRef(env, m_cPlatformView);
m_cPlatformView = NULL;
@@ -387,7 +387,7 @@
[rolloverTrackingArea release];
}
- int options = (NSTrackingActiveInActiveApp | NSTrackingMouseEnteredAndExited |
+ int options = (NSTrackingActiveAlways | NSTrackingMouseEnteredAndExited |
NSTrackingMouseMoved | NSTrackingEnabledDuringMouseDrag);
rolloverTrackingArea = [[NSTrackingArea alloc] initWithRect:[self visibleRect]
--- a/jdk/src/macosx/native/sun/awt/AWTWindow.m Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/macosx/native/sun/awt/AWTWindow.m Thu Oct 10 13:41:08 2013 -0700
@@ -350,7 +350,7 @@
- (void) dealloc {
AWT_ASSERT_APPKIT_THREAD;
- JNIEnv *env = [ThreadUtilities getJNIEnv];
+ JNIEnv *env = [ThreadUtilities getJNIEnvUncached];
[self.javaPlatformWindow setJObject:nil withEnv:env];
self.nsWindow = nil;
@@ -366,6 +366,22 @@
- (BOOL) canBecomeMainWindow {
AWT_ASSERT_APPKIT_THREAD;
+ if(!self.isEnabled){
+ // Native system can bring up the NSWindow to
+ // the top even if the window is not main.
+ // We should bring up the modal dialog manually
+ [AWTToolkit eventCountPlusPlus];
+
+ JNIEnv *env = [ThreadUtilities getJNIEnv];
+ jobject platformWindow = [self.javaPlatformWindow jObjectWithEnv:env];
+ if (platformWindow != NULL) {
+ static JNF_MEMBER_CACHE(jm_checkBlockingAndOrder, jc_CPlatformWindow,
+ "checkBlockingAndOrder", "()Z");
+ JNFCallVoidMethod(env, platformWindow, jm_checkBlockingAndOrder);
+ (*env)->DeleteLocalRef(env, platformWindow);
+ }
+ }
+
return self.isEnabled && IS(self.styleBits, SHOULD_BECOME_MAIN);
}
--- a/jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_de.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_de.properties Thu Oct 10 13:41:08 2013 -0700
@@ -102,7 +102,7 @@
#
# accessible actions
#
-toggleexpand=ein-/ausblenden
+toggleexpand=einblenden umschalten
# new relations, roles and states for J2SE 1.5.0
--- a/jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_es.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_es.properties Thu Oct 10 13:41:08 2013 -0700
@@ -102,7 +102,7 @@
#
# accessible actions
#
-toggleexpand=activar/desactivar ampliaci\u00F3n
+toggleexpand=conmutar ampliaci\u00F3n
# new relations, roles and states for J2SE 1.5.0
--- a/jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_fr.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_fr.properties Thu Oct 10 13:41:08 2013 -0700
@@ -102,7 +102,7 @@
#
# accessible actions
#
-toggleexpand=basculer le d\u00E9veloppement
+toggleexpand=activer/d\u00E9sactiver d\u00E9veloppement
# new relations, roles and states for J2SE 1.5.0
--- a/jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_it.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_it.properties Thu Oct 10 13:41:08 2013 -0700
@@ -102,7 +102,7 @@
#
# accessible actions
#
-toggleexpand=abilita/disabilita espansione
+toggleexpand=attiva/disattiva espansione
# new relations, roles and states for J2SE 1.5.0
--- a/jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_pt_BR.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_pt_BR.properties Thu Oct 10 13:41:08 2013 -0700
@@ -102,7 +102,7 @@
#
# accessible actions
#
-toggleexpand=alternar expans\u00E3o
+toggleexpand=alternar expandir
# new relations, roles and states for J2SE 1.5.0
--- a/jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_sv.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_sv.properties Thu Oct 10 13:41:08 2013 -0700
@@ -102,7 +102,7 @@
#
# accessible actions
#
-toggleexpand=v\u00E4xla ut\u00F6ka
+toggleexpand=v\u00E4xla expandering
# new relations, roles and states for J2SE 1.5.0
--- a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGMetadata.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGMetadata.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2004, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -278,10 +278,11 @@
(JFIFMarkerSegment) findMarkerSegment
(JFIFMarkerSegment.class, true);
if (jfif == null) {
- throw new IIOException
- ("ICC APP2 encountered without prior JFIF!");
+ newGuy = new MarkerSegment(buffer);
+ newGuy.loadData(buffer);
+ } else {
+ jfif.addICC(buffer);
}
- jfif.addICC(buffer);
// newGuy remains null
} else {
newGuy = new MarkerSegment(buffer);
--- a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKFileChooserUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKFileChooserUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -41,6 +41,7 @@
import javax.swing.table.*;
import javax.accessibility.*;
+import sun.swing.AbstractFilterComboBoxModel;
import sun.swing.SwingUtilities2;
import sun.swing.plaf.synth.*;
@@ -1328,71 +1329,9 @@
/**
* Data model for filter combo-box.
*/
- protected class FilterComboBoxModel extends AbstractListModel
- implements ComboBoxModel, PropertyChangeListener {
- protected FileFilter[] filters;
-
- protected FilterComboBoxModel() {
- super();
- filters = getFileChooser().getChoosableFileFilters();
- }
-
- public void propertyChange(PropertyChangeEvent e) {
- String prop = e.getPropertyName();
- if (prop == JFileChooser.CHOOSABLE_FILE_FILTER_CHANGED_PROPERTY) {
- filters = (FileFilter[]) e.getNewValue();
- fireContentsChanged(this, -1, -1);
- } else if (prop == JFileChooser.FILE_FILTER_CHANGED_PROPERTY) {
- fireContentsChanged(this, -1, -1);
- }
- }
-
- public void setSelectedItem(Object filter) {
- if (filter != null) {
- getFileChooser().setFileFilter((FileFilter) filter);
- fireContentsChanged(this, -1, -1);
- }
- }
-
- public Object getSelectedItem() {
- // Ensure that the current filter is in the list.
- // NOTE: we shouldnt' have to do this, since JFileChooser adds
- // the filter to the choosable filters list when the filter
- // is set. Lets be paranoid just in case someone overrides
- // setFileFilter in JFileChooser.
- FileFilter currentFilter = getFileChooser().getFileFilter();
- boolean found = false;
- if (currentFilter != null) {
- for (FileFilter filter : filters) {
- if (filter == currentFilter) {
- found = true;
- }
- }
- if (found == false) {
- getFileChooser().addChoosableFileFilter(currentFilter);
- }
- }
- return getFileChooser().getFileFilter();
- }
-
- public int getSize() {
- if (filters != null) {
- return filters.length;
- } else {
- return 0;
- }
- }
-
- public Object getElementAt(int index) {
- if (index > getSize() - 1) {
- // This shouldn't happen. Try to recover gracefully.
- return getFileChooser().getFileFilter();
- }
- if (filters != null) {
- return filters[index];
- } else {
- return null;
- }
+ protected class FilterComboBoxModel extends AbstractFilterComboBoxModel {
+ protected JFileChooser getFileChooser() {
+ return GTKFileChooserUI.this.getFileChooser();
}
}
}
--- a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/MotifFileChooserUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/MotifFileChooserUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -38,6 +38,7 @@
import java.io.IOException;
import java.util.*;
import sun.awt.shell.ShellFolder;
+import sun.swing.AbstractFilterComboBoxModel;
import sun.swing.SwingUtilities2;
/**
@@ -777,70 +778,9 @@
/**
* Data model for a type-face selection combo-box.
*/
- protected class FilterComboBoxModel extends AbstractListModel<FileFilter> implements ComboBoxModel<FileFilter>,
- PropertyChangeListener {
- protected FileFilter[] filters;
- protected FilterComboBoxModel() {
- super();
- filters = getFileChooser().getChoosableFileFilters();
- }
-
- public void propertyChange(PropertyChangeEvent e) {
- String prop = e.getPropertyName();
- if(prop.equals(JFileChooser.CHOOSABLE_FILE_FILTER_CHANGED_PROPERTY)) {
- filters = (FileFilter[]) e.getNewValue();
- fireContentsChanged(this, -1, -1);
- } else if (prop.equals(JFileChooser.FILE_FILTER_CHANGED_PROPERTY)) {
- fireContentsChanged(this, -1, -1);
- }
- }
-
- public void setSelectedItem(Object filter) {
- if(filter != null) {
- getFileChooser().setFileFilter((FileFilter) filter);
- fireContentsChanged(this, -1, -1);
- }
- }
-
- public Object getSelectedItem() {
- // Ensure that the current filter is in the list.
- // NOTE: we shouldnt' have to do this, since JFileChooser adds
- // the filter to the choosable filters list when the filter
- // is set. Lets be paranoid just in case someone overrides
- // setFileFilter in JFileChooser.
- FileFilter currentFilter = getFileChooser().getFileFilter();
- boolean found = false;
- if(currentFilter != null) {
- for (FileFilter filter : filters) {
- if (filter == currentFilter) {
- found = true;
- }
- }
- if (!found) {
- getFileChooser().addChoosableFileFilter(currentFilter);
- }
- }
- return getFileChooser().getFileFilter();
- }
-
- public int getSize() {
- if(filters != null) {
- return filters.length;
- } else {
- return 0;
- }
- }
-
- public FileFilter getElementAt(int index) {
- if(index > getSize() - 1) {
- // This shouldn't happen. Try to recover gracefully.
- return getFileChooser().getFileFilter();
- }
- if(filters != null) {
- return filters[index];
- } else {
- return null;
- }
+ protected class FilterComboBoxModel extends AbstractFilterComboBoxModel {
+ protected JFileChooser getFileChooser() {
+ return MotifFileChooserUI.this.getFileChooser();
}
}
--- a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_de.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_de.properties Thu Oct 10 13:41:08 2013 -0700
@@ -30,7 +30,7 @@
FileChooser.filterLabel.textAndMnemonic=Filte&r
FileChooser.foldersLabel.textAndMnemonic=Ord&ner
FileChooser.filesLabel.textAndMnemonic=Date&ien
-FileChooser.enterFileNameLabel.textAndMnemonic=Dateiname ei&ngeben:
+FileChooser.enterFileNameLabel.textAndMnemonic=Dateina&me eingeben:
FileChooser.enterFolderNameLabel.textAndMnemonic=Ordnernamen eingeben:
FileChooser.cancelButtonToolTip.textAndMnemonic=Dialogfeld f\u00FCr Dateiauswahl schlie\u00DFen.
--- a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_ko.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_ko.properties Thu Oct 10 13:41:08 2013 -0700
@@ -24,7 +24,7 @@
FileChooser.openButton.textAndMnemonic=\uD655\uC778
FileChooser.saveDialogTitle.textAndMnemonic=\uC800\uC7A5
FileChooser.openDialogTitle.textAndMnemonic=\uC5F4\uAE30
-FileChooser.updateButton.textAndMnemonic=\uAC31\uC2E0
+FileChooser.updateButton.textAndMnemonic=\uC5C5\uB370\uC774\uD2B8
FileChooser.helpButton.textAndMnemonic=\uB3C4\uC6C0\uB9D0
FileChooser.pathLabel.textAndMnemonic=\uACBD\uB85C \uB610\uB294 \uD3F4\uB354 \uC774\uB984 \uC785\uB825(&P):
FileChooser.filterLabel.textAndMnemonic=\uD544\uD130(&R)
@@ -36,5 +36,5 @@
FileChooser.cancelButtonToolTip.textAndMnemonic=\uD30C\uC77C \uC120\uD0DD\uAE30 \uB300\uD654\uC0C1\uC790\uB97C \uC911\uB2E8\uD569\uB2C8\uB2E4.
FileChooser.saveButtonToolTip.textAndMnemonic=\uC120\uD0DD\uB41C \uD30C\uC77C\uC744 \uC800\uC7A5\uD569\uB2C8\uB2E4.
FileChooser.openButtonToolTip.textAndMnemonic=\uC120\uD0DD\uB41C \uD30C\uC77C\uC744 \uC5FD\uB2C8\uB2E4.
-FileChooser.updateButtonToolTip.textAndMnemonic=\uB514\uB809\uD1A0\uB9AC \uBAA9\uB85D\uC744 \uAC31\uC2E0\uD569\uB2C8\uB2E4.
+FileChooser.updateButtonToolTip.textAndMnemonic=\uB514\uB809\uD1A0\uB9AC \uBAA9\uB85D\uC744 \uC5C5\uB370\uC774\uD2B8\uD569\uB2C8\uB2E4.
FileChooser.helpButtonToolTip.textAndMnemonic=FileChooser \uB3C4\uC6C0\uB9D0\uC785\uB2C8\uB2E4.
--- a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -1193,70 +1193,9 @@
/**
* Data model for a type-face selection combo-box.
*/
- protected class FilterComboBoxModel extends AbstractListModel<FileFilter> implements ComboBoxModel<FileFilter>,
- PropertyChangeListener {
- protected FileFilter[] filters;
- protected FilterComboBoxModel() {
- super();
- filters = getFileChooser().getChoosableFileFilters();
- }
-
- public void propertyChange(PropertyChangeEvent e) {
- String prop = e.getPropertyName();
- if(prop == JFileChooser.CHOOSABLE_FILE_FILTER_CHANGED_PROPERTY) {
- filters = (FileFilter[]) e.getNewValue();
- fireContentsChanged(this, -1, -1);
- } else if (prop == JFileChooser.FILE_FILTER_CHANGED_PROPERTY) {
- fireContentsChanged(this, -1, -1);
- }
- }
-
- public void setSelectedItem(Object filter) {
- if(filter != null) {
- getFileChooser().setFileFilter((FileFilter) filter);
- fireContentsChanged(this, -1, -1);
- }
- }
-
- public Object getSelectedItem() {
- // Ensure that the current filter is in the list.
- // NOTE: we shouldnt' have to do this, since JFileChooser adds
- // the filter to the choosable filters list when the filter
- // is set. Lets be paranoid just in case someone overrides
- // setFileFilter in JFileChooser.
- FileFilter currentFilter = getFileChooser().getFileFilter();
- boolean found = false;
- if(currentFilter != null) {
- for (FileFilter filter : filters) {
- if (filter == currentFilter) {
- found = true;
- }
- }
- if(found == false) {
- getFileChooser().addChoosableFileFilter(currentFilter);
- }
- }
- return getFileChooser().getFileFilter();
- }
-
- public int getSize() {
- if(filters != null) {
- return filters.length;
- } else {
- return 0;
- }
- }
-
- public FileFilter getElementAt(int index) {
- if(index > getSize() - 1) {
- // This shouldn't happen. Try to recover gracefully.
- return getFileChooser().getFileFilter();
- }
- if(filters != null) {
- return filters[index];
- } else {
- return null;
- }
+ protected class FilterComboBoxModel extends AbstractFilterComboBoxModel {
+ protected JFileChooser getFileChooser() {
+ return WindowsFileChooserUI.this.getFileChooser();
}
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/DriverResource_ja.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
+ * 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 com.sun.java.util.jar.pack;
+
+import java.util.ListResourceBundle;
+
+public class DriverResource_ja extends ListResourceBundle {
+ public static final String VERSION ="VERSION";
+ public static final String BAD_ARGUMENT ="BAD_ARGUMENT";
+ public static final String BAD_OPTION ="BAD_OPTION";
+ public static final String BAD_REPACK_OUTPUT="BAD_REPACK_OUTPUT";
+ public static final String DETECTED_ZIP_COMMENT="DETECTED_ZIP_COMMENT";
+ public static final String SKIP_FOR_REPACKED ="SKIP_FOR_REPACKED";
+ public static final String WRITE_PACK_FILE ="WRITE_PACK_FILE";
+ public static final String WIRTE_PACKGZ_FILE="WIRTE_PACKGZ_FILE";
+ public static final String SKIP_FOR_MOVE_FAILED="SKIP_FOR_MOVE_FAILED";
+ public static final String PACK_HELP="PACK_HELP";
+ public static final String UNPACK_HELP ="UNPACK_HELP";
+ public static final String MORE_INFO = "MORE_INFO";
+ public static final String DUPLICATE_OPTION = "DUPLICATE_OPTION";
+ public static final String BAD_SPEC = "BAD_SPEC";
+
+ //The following string is duplicate in PACK and UNPACK comment,which was draw out to ruduce translation work.
+ private static final String PARAMETER_V = " -v, --verbose increase program verbosity";
+ private static final String PARAMETER_Q = " -q, --quiet set verbosity to lowest level";
+ private static final String PARAMETER_LF = " -l{F}, --log-file={F} output to the given log file, or '-' for System.out";
+ private static final String PARAMETER_H = " -?, -h, --help print this message";
+ private static final String PARAMETER_VER = " -V, --version print program version";
+ private static final String PARAMETER_J = " -J{X} pass option X to underlying Java VM";
+
+
+ //The following are outputs of command 'pack200' and 'unpack200'.
+ //Don't translate command arguments ,words with a prefix of '-' or '--'.
+ //
+ private static final Object[][] resource= {
+ {VERSION,"{0}\u30D0\u30FC\u30B8\u30E7\u30F3{1}"},//parameter 0:class name;parameter 1: version value
+ {BAD_ARGUMENT,"\u7121\u52B9\u306A\u5F15\u6570: {0}"},
+ {BAD_OPTION,"\u7121\u52B9\u306A\u30AA\u30D7\u30B7\u30E7\u30F3: {0}={1}"},//parameter 0:option name;parameter 1:option value
+ {BAD_REPACK_OUTPUT,"\u7121\u52B9\u306A--repack\u51FA\u529B: {0}"},//parameter 0:filename
+ {DETECTED_ZIP_COMMENT,"\u691C\u51FA\u3055\u308C\u305FZIP\u30B3\u30E1\u30F3\u30C8: {0}"},//parameter 0:comment
+ {SKIP_FOR_REPACKED,"\u3059\u3067\u306B\u518D\u5727\u7E2E\u3055\u308C\u3066\u3044\u308B\u305F\u3081\u30B9\u30AD\u30C3\u30D7\u3057\u3066\u3044\u307E\u3059: {0}"},//parameter 0:filename
+ {WRITE_PACK_FILE,"*.pack\u30D5\u30A1\u30A4\u30EB\u3092\u66F8\u304D\u8FBC\u3080\u306B\u306F\u3001--no-gzip\u3092\u6307\u5B9A\u3057\u307E\u3059: {0}"},//parameter 0:filename
+ {WIRTE_PACKGZ_FILE,"*.pack.gz\u30D5\u30A1\u30A4\u30EB\u3092\u66F8\u304D\u8FBC\u3080\u306B\u306F\u3001--gzip\u3092\u6307\u5B9A\u3057\u307E\u3059: {0}"},//parameter 0:filename
+ {SKIP_FOR_MOVE_FAILED,"\u79FB\u52D5\u304C\u5931\u6557\u3057\u305F\u305F\u3081\u89E3\u51CD\u3092\u30B9\u30AD\u30C3\u30D7\u3057\u3066\u3044\u307E\u3059: {0}"},//parameter 0:filename
+ {PACK_HELP,new String[]{
+ "\u4F7F\u7528\u65B9\u6CD5: pack200 [-opt... | --option=value]... x.pack[.gz] y.jar",
+ "",
+ "\u5727\u7E2E\u30AA\u30D7\u30B7\u30E7\u30F3",
+ " -g\u3001--no-gzip \u30D7\u30EC\u30FC\u30F3\u306A*.pack\u30D5\u30A1\u30A4\u30EB\u3092\u5727\u7E2E\u305B\u305A\u306B\u51FA\u529B\u3057\u307E\u3059",
+ " --gzip (\u30C7\u30D5\u30A9\u30EB\u30C8)\u5727\u7E2E\u51FA\u529B\u3092gzip\u3067\u5F8C\u51E6\u7406\u3057\u307E\u3059",
+ " -G\u3001--strip-debug \u5727\u7E2E\u4E2D\u306B\u30C7\u30D0\u30C3\u30B0\u5C5E\u6027\u3092\u524A\u9664\u3057\u307E\u3059",
+ " -O\u3001--no-keep-file-order \u30D5\u30A1\u30A4\u30EB\u306E\u9806\u5E8F\u4ED8\u3051\u60C5\u5831\u3092\u8EE2\u9001\u3057\u307E\u305B\u3093",
+ " --keep-file-order (\u30C7\u30D5\u30A9\u30EB\u30C8)\u5165\u529B\u30D5\u30A1\u30A4\u30EB\u306E\u9806\u5E8F\u4ED8\u3051\u3092\u4FDD\u6301\u3057\u307E\u3059",
+ " -S{N}\u3001--segment-limit={N} \u30BB\u30B0\u30E1\u30F3\u30C8\u5236\u9650\u3092\u51FA\u529B\u3057\u307E\u3059(\u30C7\u30D5\u30A9\u30EB\u30C8N=1Mb)",
+ " -E{N}\u3001--effort={N} \u5727\u7E2E\u306E\u8A66\u884C(\u30C7\u30D5\u30A9\u30EB\u30C8N=5)",
+ " -H{h}\u3001--deflate-hint={h} \u30C7\u30D5\u30EC\u30FC\u30C8\u30FB\u30D2\u30F3\u30C8\u3092\u8EE2\u9001\u3057\u307E\u3059: true\u3001false\u307E\u305F\u306Fkeep(\u30C7\u30D5\u30A9\u30EB\u30C8)",
+ " -m{V}\u3001--modification-time={V} \u5909\u66F4\u6642\u9593\u3092\u8EE2\u9001\u3057\u307E\u3059: latest\u307E\u305F\u306Fkeep(\u30C7\u30D5\u30A9\u30EB\u30C8)",
+ " -P{F}\u3001--pass-file={F} \u6307\u5B9A\u3055\u308C\u305F\u5727\u7E2E\u3055\u308C\u3066\u3044\u306A\u3044\u5165\u529B\u8981\u7D20\u3092\u8EE2\u9001\u3057\u307E\u3059",
+ " -U{a}\u3001--unknown-attribute={a} \u4E0D\u660E\u306E\u5C5E\u6027\u30A2\u30AF\u30B7\u30E7\u30F3: error\u3001strip\u307E\u305F\u306Fpass(\u30C7\u30D5\u30A9\u30EB\u30C8)",
+ " -C{N}={L}\u3001--class-attribute={N}={L} (\u30E6\u30FC\u30B6\u30FC\u5B9A\u7FA9\u5C5E\u6027)",
+ " -F{N}={L}\u3001--field-attribute={N}={L} (\u30E6\u30FC\u30B6\u30FC\u5B9A\u7FA9\u5C5E\u6027)",
+ " -M{N}={L}\u3001--method-attribute={N}={L} (\u30E6\u30FC\u30B6\u30FC\u5B9A\u7FA9\u5C5E\u6027)",
+ " -D{N}={L}\u3001--code-attribute={N}={L} (\u30E6\u30FC\u30B6\u30FC\u5B9A\u7FA9\u5C5E\u6027)",
+ " -f{F}\u3001--config-file={F} Pack200.Packer\u30D7\u30ED\u30D1\u30C6\u30A3\u306B\u30D5\u30A1\u30A4\u30EBF\u3092\u8AAD\u307F\u8FBC\u307F\u307E\u3059",
+ PARAMETER_V ,
+ PARAMETER_Q ,
+ PARAMETER_LF ,
+ PARAMETER_H ,
+ PARAMETER_VER ,
+ PARAMETER_J,
+ "",
+ "\u6CE8\u610F:",
+ " -P\u3001-C\u3001-F\u3001-M\u304A\u3088\u3073-D\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\u7D2F\u7A4D\u3055\u308C\u307E\u3059\u3002",
+ " \u5C5E\u6027\u5B9A\u7FA9\u306E\u4F8B: -C SourceFile=RUH .",
+ " Config.\u30D5\u30A1\u30A4\u30EB\u30FB\u30D7\u30ED\u30D1\u30C6\u30A3\u306F\u3001Pack200 API\u306B\u3088\u3063\u3066\u5B9A\u7FA9\u3055\u308C\u307E\u3059\u3002",
+ " -S\u3001-E\u3001-H\u3001-m\u3001-U\u306E\u5024\u306E\u610F\u5473\u306F\u3001Pack200 API\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
+ " \u30EC\u30A4\u30A2\u30A6\u30C8\u5B9A\u7FA9(RUH\u306A\u3069)\u306FJSR 200\u306B\u3088\u3063\u3066\u5B9A\u7FA9\u3055\u308C\u307E\u3059\u3002",
+ "",
+ "\u518D\u5727\u7E2E\u30E2\u30FC\u30C9\u3067\u306F\u3001JAR\u30D5\u30A1\u30A4\u30EB\u304C\u5727\u7E2E/\u89E3\u51CD\u30B5\u30A4\u30AF\u30EB\u3067\u66F4\u65B0\u3055\u308C\u307E\u3059:",
+ " pack200 [-r|--repack] [-opt | --option=value]... [repackedy.jar] y.jar\n"
+ }
+ },
+ {UNPACK_HELP,new String[]{
+ "\u4F7F\u7528\u65B9\u6CD5: unpack200 [-opt... | --option=value]... x.pack[.gz] y.jar\n",
+ "",
+ "\u89E3\u51CD\u30AA\u30D7\u30B7\u30E7\u30F3",
+ " -H{h}\u3001--deflate-hint={h} \u8EE2\u9001\u3055\u308C\u305F\u30C7\u30D5\u30EC\u30FC\u30C8\u30FB\u30D2\u30F3\u30C8\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3057\u307E\u3059: true\u3001false\u307E\u305F\u306Fkeep(\u30C7\u30D5\u30A9\u30EB\u30C8)",
+ " -r\u3001--remove-pack-file \u89E3\u51CD\u5F8C\u306B\u5165\u529B\u30D5\u30A1\u30A4\u30EB\u3092\u524A\u9664\u3057\u307E\u3059",
+ PARAMETER_V ,
+ PARAMETER_Q ,
+ PARAMETER_LF ,
+ PARAMETER_H ,
+ PARAMETER_VER ,
+ PARAMETER_J,
+ }
+ },
+
+ {MORE_INFO,"(\u8A73\u7D30\u306F\u3001{0} --help\u3092\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002)"},//parameter 0:command name
+ {DUPLICATE_OPTION,"\u91CD\u8907\u30AA\u30D7\u30B7\u30E7\u30F3: {0}"},//parameter 0:option
+ {BAD_SPEC,"{0}\u306E\u7121\u52B9\u306A\u4ED5\u69D8: {1}"},//parameter 0:option;parameter 1:specifier
+ };
+
+ protected Object[][] getContents() {
+ return resource;
+ }
+
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/DriverResource_zh_CN.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
+ * 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 com.sun.java.util.jar.pack;
+
+import java.util.ListResourceBundle;
+
+public class DriverResource_zh_CN extends ListResourceBundle {
+ public static final String VERSION ="VERSION";
+ public static final String BAD_ARGUMENT ="BAD_ARGUMENT";
+ public static final String BAD_OPTION ="BAD_OPTION";
+ public static final String BAD_REPACK_OUTPUT="BAD_REPACK_OUTPUT";
+ public static final String DETECTED_ZIP_COMMENT="DETECTED_ZIP_COMMENT";
+ public static final String SKIP_FOR_REPACKED ="SKIP_FOR_REPACKED";
+ public static final String WRITE_PACK_FILE ="WRITE_PACK_FILE";
+ public static final String WIRTE_PACKGZ_FILE="WIRTE_PACKGZ_FILE";
+ public static final String SKIP_FOR_MOVE_FAILED="SKIP_FOR_MOVE_FAILED";
+ public static final String PACK_HELP="PACK_HELP";
+ public static final String UNPACK_HELP ="UNPACK_HELP";
+ public static final String MORE_INFO = "MORE_INFO";
+ public static final String DUPLICATE_OPTION = "DUPLICATE_OPTION";
+ public static final String BAD_SPEC = "BAD_SPEC";
+
+ //The following string is duplicate in PACK and UNPACK comment,which was draw out to ruduce translation work.
+ private static final String PARAMETER_V = " -v, --verbose increase program verbosity";
+ private static final String PARAMETER_Q = " -q, --quiet set verbosity to lowest level";
+ private static final String PARAMETER_LF = " -l{F}, --log-file={F} output to the given log file, or '-' for System.out";
+ private static final String PARAMETER_H = " -?, -h, --help print this message";
+ private static final String PARAMETER_VER = " -V, --version print program version";
+ private static final String PARAMETER_J = " -J{X} pass option X to underlying Java VM";
+
+
+ //The following are outputs of command 'pack200' and 'unpack200'.
+ //Don't translate command arguments ,words with a prefix of '-' or '--'.
+ //
+ private static final Object[][] resource= {
+ {VERSION,"{0}\u7248\u672C{1}"},//parameter 0:class name;parameter 1: version value
+ {BAD_ARGUMENT,"\u9519\u8BEF\u53C2\u6570: {0}"},
+ {BAD_OPTION,"\u9519\u8BEF\u9009\u9879: {0}={1}"},//parameter 0:option name;parameter 1:option value
+ {BAD_REPACK_OUTPUT,"--repack \u8F93\u51FA\u9519\u8BEF: {0}"},//parameter 0:filename
+ {DETECTED_ZIP_COMMENT,"\u68C0\u6D4B\u5230 ZIP \u6CE8\u91CA: {0}"},//parameter 0:comment
+ {SKIP_FOR_REPACKED,"\u7531\u4E8E\u5DF2\u91CD\u65B0\u6253\u5305\u800C\u8DF3\u8FC7: {0}"},//parameter 0:filename
+ {WRITE_PACK_FILE,"\u8981\u5199\u5165 *.pack \u6587\u4EF6, \u8BF7\u6307\u5B9A --no-gzip: {0}"},//parameter 0:filename
+ {WIRTE_PACKGZ_FILE,"\u8981\u5199\u5165 *.pack.gz \u6587\u4EF6, \u8BF7\u6307\u5B9A --gzip: {0}"},//parameter 0:filename
+ {SKIP_FOR_MOVE_FAILED,"\u7531\u4E8E\u79FB\u52A8\u5931\u8D25\u800C\u8DF3\u8FC7\u91CD\u65B0\u6253\u5305: {0}"},//parameter 0:filename
+ {PACK_HELP,new String[]{
+ "\u7528\u6CD5: pack200 [-opt... | --option=value]... x.pack[.gz] y.jar",
+ "",
+ "\u6253\u5305\u9009\u9879",
+ " -g, --no-gzip \u8F93\u51FA\u65E0\u683C\u5F0F\u7684 *.pack \u6587\u4EF6, \u4E0D\u538B\u7F29",
+ " --gzip (\u9ED8\u8BA4\u503C) \u4F7F\u7528 gzip \u5BF9\u6253\u5305\u8FDB\u884C\u540E\u5904\u7406",
+ " -G, --strip-debug \u6253\u5305\u65F6\u5220\u9664\u8C03\u8BD5\u5C5E\u6027",
+ " -O, --no-keep-file-order \u4E0D\u4F20\u8F93\u6587\u4EF6\u6392\u5E8F\u4FE1\u606F",
+ " --keep-file-order (\u9ED8\u8BA4\u503C) \u4FDD\u7559\u8F93\u5165\u6587\u4EF6\u6392\u5E8F",
+ " -S{N}, --segment-limit={N} \u8F93\u51FA\u6BB5\u9650\u5236 (\u9ED8\u8BA4\u503C N=1Mb)",
+ " -E{N}, --effort={N} \u6253\u5305\u6548\u679C (\u9ED8\u8BA4\u503C N=5)",
+ " -H{h}, --deflate-hint={h} \u4F20\u8F93\u538B\u7F29\u63D0\u793A: true, false \u6216 keep (\u9ED8\u8BA4\u503C)",
+ " -m{V}, --modification-time={V} \u4F20\u8F93 modtimes: latest \u6216 keep (\u9ED8\u8BA4\u503C)",
+ " -P{F}, --pass-file={F} \u4F20\u8F93\u672A\u89E3\u538B\u7F29\u7684\u7ED9\u5B9A\u8F93\u5165\u5143\u7D20",
+ " -U{a}, --unknown-attribute={a} \u672A\u77E5\u5C5E\u6027\u64CD\u4F5C: error, strip \u6216 pass (\u9ED8\u8BA4\u503C)",
+ " -C{N}={L}, --class-attribute={N}={L} (\u7528\u6237\u5B9A\u4E49\u7684\u5C5E\u6027)",
+ " -F{N}={L}, --field-attribute={N}={L} (\u7528\u6237\u5B9A\u4E49\u7684\u5C5E\u6027)",
+ " -M{N}={L}, --method-attribute={N}={L} (\u7528\u6237\u5B9A\u4E49\u7684\u5C5E\u6027)",
+ " -D{N}={L}, --code-attribute={N}={L} (\u7528\u6237\u5B9A\u4E49\u7684\u5C5E\u6027)",
+ " -f{F}, --config-file={F} \u8BFB\u53D6\u6587\u4EF6 F \u7684 Pack200.Packer \u5C5E\u6027",
+ PARAMETER_V ,
+ PARAMETER_Q ,
+ PARAMETER_LF ,
+ PARAMETER_H ,
+ PARAMETER_VER ,
+ PARAMETER_J,
+ "",
+ "\u6CE8:",
+ " -P, -C, -F, -M \u548C -D \u9009\u9879\u7D2F\u8BA1\u3002",
+ " \u793A\u4F8B\u5C5E\u6027\u5B9A\u4E49: -C SourceFile=RUH\u3002",
+ " Config. \u6587\u4EF6\u5C5E\u6027\u7531 Pack200 API \u5B9A\u4E49\u3002",
+ " \u6709\u5173 -S, -E, -H-, -m, -U \u503C\u7684\u542B\u4E49, \u8BF7\u53C2\u9605 Pack200 API\u3002",
+ " \u5E03\u5C40\u5B9A\u4E49 (\u4F8B\u5982 RUH) \u7531 JSR 200 \u5B9A\u4E49\u3002",
+ "",
+ "\u91CD\u65B0\u6253\u5305\u6A21\u5F0F\u901A\u8FC7\u6253\u5305/\u89E3\u5305\u5468\u671F\u66F4\u65B0 JAR \u6587\u4EF6:",
+ " pack200 [-r|--repack] [-opt | --option=value]... [repackedy.jar] y.jar\n"
+ }
+ },
+ {UNPACK_HELP,new String[]{
+ "\u7528\u6CD5: unpack200 [-opt... | --option=value]... x.pack[.gz] y.jar\n",
+ "",
+ "\u89E3\u5305\u9009\u9879",
+ " -H{h}, --deflate-hint={h} \u8986\u76D6\u5DF2\u4F20\u8F93\u7684\u538B\u7F29\u63D0\u793A: true, false \u6216 keep (\u9ED8\u8BA4\u503C)",
+ " -r, --remove-pack-file \u89E3\u5305\u4E4B\u540E\u5220\u9664\u8F93\u5165\u6587\u4EF6",
+ PARAMETER_V ,
+ PARAMETER_Q ,
+ PARAMETER_LF ,
+ PARAMETER_H ,
+ PARAMETER_VER ,
+ PARAMETER_J,
+ }
+ },
+
+ {MORE_INFO,"(\u6709\u5173\u8BE6\u7EC6\u4FE1\u606F, \u8BF7\u8FD0\u884C {0} --help\u3002)"},//parameter 0:command name
+ {DUPLICATE_OPTION,"\u91CD\u590D\u7684\u9009\u9879: {0}"},//parameter 0:option
+ {BAD_SPEC,"{0}\u7684\u89C4\u8303\u9519\u8BEF: {1}"},//parameter 0:option;parameter 1:specifier
+ };
+
+ protected Object[][] getContents() {
+ return resource;
+ }
+
+
+}
--- a/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_ko.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_ko.properties Thu Oct 10 13:41:08 2013 -0700
@@ -44,7 +44,7 @@
cachedrowsetimpl.dtypemismt = \uB370\uC774\uD130 \uC720\uD615\uC774 \uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
cachedrowsetimpl.datefail = {1} \uC5F4\uC758 \uAC12({0})\uC5D0\uC11C getDate\uB97C \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4. \uBCC0\uD658\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
cachedrowsetimpl.timefail = {1} \uC5F4\uC758 \uAC12({0})\uC5D0\uC11C getTime\uC744 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4. \uBCC0\uD658\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
-cachedrowsetimpl.posupdate = \uC704\uCE58\uAC00 \uC9C0\uC815\uB41C \uAC31\uC2E0\uC774 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
+cachedrowsetimpl.posupdate = \uC704\uCE58\uAC00 \uC9C0\uC815\uB41C \uC5C5\uB370\uC774\uD2B8\uAC00 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
cachedrowsetimpl.unableins = \uC778\uC2A4\uD134\uC2A4\uD654\uD560 \uC218 \uC5C6\uC74C: {0}
cachedrowsetimpl.beforefirst = beforeFirst: \uCEE4\uC11C \uC791\uC5C5\uC774 \uBD80\uC801\uD569\uD569\uB2C8\uB2E4.
cachedrowsetimpl.first = \uCC98\uC74C: \uCEE4\uC11C \uC791\uC5C5\uC774 \uBD80\uC801\uD569\uD569\uB2C8\uB2E4.
@@ -110,7 +110,7 @@
jdbcrowsetimpl.unsetmatch = \uC124\uC815\uC744 \uD574\uC81C\uD558\uB824\uB294 \uC5F4\uC774 \uC124\uC815\uB41C \uC5F4\uACFC \uB2E4\uB985\uB2C8\uB2E4.
jdbcrowsetimpl.usecolname = \uC5F4 \uC774\uB984\uC744 unsetMatchColumn\uC758 \uC778\uC218\uB85C \uC0AC\uC6A9\uD558\uC2ED\uC2DC\uC624.
jdbcrowsetimpl.usecolid = \uC5F4 ID\uB97C unsetMatchColumn\uC758 \uC778\uC218\uB85C \uC0AC\uC6A9\uD558\uC2ED\uC2DC\uC624.
-jdbcrowsetimpl.resnotupd = ResultSet\uB97C \uAC31\uC2E0\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
+jdbcrowsetimpl.resnotupd = ResultSet\uB97C \uC5C5\uB370\uC774\uD2B8\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
jdbcrowsetimpl.opnotysupp = \uC791\uC5C5\uC774 \uC544\uC9C1 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
jdbcrowsetimpl.featnotsupp = \uAE30\uB2A5\uC774 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
@@ -157,7 +157,7 @@
xmlrch.errinsert = insert \uD589\uC744 \uC0DD\uC131\uD558\uB294 \uC911 \uC624\uB958 \uBC1C\uC0DD: {0}
xmlrch.errinsdel = insdel \uD589\uC744 \uC0DD\uC131\uD558\uB294 \uC911 \uC624\uB958 \uBC1C\uC0DD: {0}
xmlrch.errupdate = update \uD589\uC744 \uC0DD\uC131\uD558\uB294 \uC911 \uC624\uB958 \uBC1C\uC0DD: {0}
-xmlrch.errupdrow = \uD589\uC744 \uAC31\uC2E0\uD558\uB294 \uC911 \uC624\uB958 \uBC1C\uC0DD: {0}
+xmlrch.errupdrow = \uD589\uC744 \uC5C5\uB370\uC774\uD2B8\uD558\uB294 \uC911 \uC624\uB958 \uBC1C\uC0DD: {0}
xmlrch.chars = \uBB38\uC790:
xmlrch.badvalue = \uC798\uBABB\uB41C \uAC12: \uB110\uC77C \uC218 \uC5C6\uB294 \uC18D\uC131\uC785\uB2C8\uB2E4.
xmlrch.badvalue1 = \uC798\uBABB\uB41C \uAC12: \uB110\uC77C \uC218 \uC5C6\uB294 \uBA54\uD0C0 \uB370\uC774\uD130\uC785\uB2C8\uB2E4.
--- a/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_ko.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_ko.properties Thu Oct 10 13:41:08 2013 -0700
@@ -46,7 +46,7 @@
FileChooser.openButton.textAndMnemonic=\uC5F4\uAE30(&O)
FileChooser.saveDialogTitle.textAndMnemonic=\uC800\uC7A5
FileChooser.openDialogTitle.textAndMnemonic=\uC5F4\uAE30
-FileChooser.updateButton.textAndMnemonic=\uAC31\uC2E0(&U)
+FileChooser.updateButton.textAndMnemonic=\uC5C5\uB370\uC774\uD2B8(&U)
FileChooser.helpButton.textAndMnemonic=\uB3C4\uC6C0\uB9D0(&H)
FileChooser.directoryOpenButton.textAndMnemonic=\uC5F4\uAE30(&O)
@@ -66,7 +66,7 @@
FileChooser.cancelButtonToolTip.textAndMnemonic=\uD30C\uC77C \uC120\uD0DD\uAE30 \uB300\uD654\uC0C1\uC790 \uC911\uB2E8
FileChooser.saveButtonToolTip.textAndMnemonic=\uC120\uD0DD\uB41C \uD30C\uC77C \uC800\uC7A5
FileChooser.openButtonToolTip.textAndMnemonic=\uC120\uD0DD\uB41C \uD30C\uC77C \uC5F4\uAE30
-FileChooser.updateButtonToolTip.textAndMnemonic=\uB514\uB809\uD1A0\uB9AC \uBAA9\uB85D \uAC31\uC2E0
+FileChooser.updateButtonToolTip.textAndMnemonic=\uB514\uB809\uD1A0\uB9AC \uBAA9\uB85D \uC5C5\uB370\uC774\uD2B8
FileChooser.helpButtonToolTip.textAndMnemonic=FileChooser \uB3C4\uC6C0\uB9D0
FileChooser.directoryOpenButtonToolTip.textAndMnemonic=\uC120\uD0DD\uB41C \uB514\uB809\uD1A0\uB9AC \uC5F4\uAE30
--- a/jdk/src/share/classes/com/sun/swing/internal/plaf/metal/resources/metal_sv.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/com/sun/swing/internal/plaf/metal/resources/metal_sv.properties Thu Oct 10 13:41:08 2013 -0700
@@ -20,8 +20,8 @@
FileChooser.lookInLabel.textAndMnemonic=Leta &i:
FileChooser.saveInLabel.textAndMnemonic=Spara i:
-FileChooser.fileNameLabel.textAndMnemonic=Fil&namn:
-FileChooser.folderNameLabel.textAndMnemonic=Mapp&namn:
+FileChooser.fileNameLabel.textAndMnemonic=&Fil:
+FileChooser.folderNameLabel.textAndMnemonic=&Mapp:
FileChooser.filesOfTypeLabel.textAndMnemonic=Mapp&namn:
FileChooser.upFolderToolTip.textAndMnemonic=Upp en niv\u00E5
FileChooser.upFolderAccessibleName=Upp
--- a/jdk/src/share/classes/com/sun/tools/jdi/SunCommandLineLauncher.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/com/sun/tools/jdi/SunCommandLineLauncher.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -196,19 +196,7 @@
try {
if (home.length() > 0) {
- /*
- * A wrinkle in the environment:
- * 64-bit executables are stored under $JAVA_HOME/bin/os_arch
- * 32-bit executables are stored under $JAVA_HOME/bin
- */
- String os_arch = System.getProperty("os.arch");
- if ("SunOS".equals(System.getProperty("os.name")) &&
- ("sparcv9".equals(os_arch) || "amd64".equals(os_arch))) {
- exePath = home + File.separator + "bin" + File.separator +
- os_arch + File.separator + exe;
- } else {
- exePath = home + File.separator + "bin" + File.separator + exe;
- }
+ exePath = home + File.separator + "bin" + File.separator + exe;
} else {
exePath = exe;
}
--- a/jdk/src/share/classes/java/awt/AWTKeyStroke.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/AWTKeyStroke.java Thu Oct 10 13:41:08 2013 -0700
@@ -67,7 +67,7 @@
public class AWTKeyStroke implements Serializable {
static final long serialVersionUID = -6430539691155161871L;
- private static Map modifierKeywords;
+ private static Map<String, Integer> modifierKeywords;
/**
* Associates VK_XXX (as a String) with code (as Integer). This is
* done to avoid the overhead of the reflective call to find the
@@ -85,8 +85,8 @@
* AWTKeyStroke class.
* Must be called under locked AWTKeyStro
*/
- private static Class getAWTKeyStrokeClass() {
- Class clazz = (Class)AppContext.getAppContext().get(AWTKeyStroke.class);
+ private static Class<AWTKeyStroke> getAWTKeyStrokeClass() {
+ Class<AWTKeyStroke> clazz = (Class)AppContext.getAppContext().get(AWTKeyStroke.class);
if (clazz == null) {
clazz = AWTKeyStroke.class;
AppContext.getAppContext().put(AWTKeyStroke.class, AWTKeyStroke.class);
@@ -182,7 +182,7 @@
throw new IllegalArgumentException("subclass cannot be null");
}
synchronized (AWTKeyStroke.class) {
- Class keyStrokeClass = (Class)AppContext.getAppContext().get(AWTKeyStroke.class);
+ Class<AWTKeyStroke> keyStrokeClass = (Class)AppContext.getAppContext().get(AWTKeyStroke.class);
if (keyStrokeClass != null && keyStrokeClass.equals(subclass)){
// Already registered
return;
@@ -229,8 +229,8 @@
*/
private static Constructor getCtor(final Class clazz)
{
- Object ctor = AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
+ Constructor ctor = AccessController.doPrivileged(new PrivilegedAction<Constructor>() {
+ public Constructor run() {
try {
Constructor ctor = clazz.getDeclaredConstructor((Class[]) null);
if (ctor != null) {
@@ -249,17 +249,17 @@
private static synchronized AWTKeyStroke getCachedStroke
(char keyChar, int keyCode, int modifiers, boolean onKeyRelease)
{
- Map cache = (Map)AppContext.getAppContext().get(APP_CONTEXT_CACHE_KEY);
+ Map<AWTKeyStroke, AWTKeyStroke> cache = (Map)AppContext.getAppContext().get(APP_CONTEXT_CACHE_KEY);
AWTKeyStroke cacheKey = (AWTKeyStroke)AppContext.getAppContext().get(APP_CONTEXT_KEYSTROKE_KEY);
if (cache == null) {
- cache = new HashMap();
+ cache = new HashMap<>();
AppContext.getAppContext().put(APP_CONTEXT_CACHE_KEY, cache);
}
if (cacheKey == null) {
try {
- Class clazz = getAWTKeyStrokeClass();
+ Class<AWTKeyStroke> clazz = getAWTKeyStrokeClass();
cacheKey = (AWTKeyStroke)getCtor(clazz).newInstance((Object[]) null);
AppContext.getAppContext().put(APP_CONTEXT_KEYSTROKE_KEY, cacheKey);
} catch (InstantiationException e) {
@@ -485,11 +485,11 @@
* If typed, pressed or released is not specified, pressed is assumed. Here
* are some examples:
* <pre>
- * "INSERT" => getAWTKeyStroke(KeyEvent.VK_INSERT, 0);
- * "control DELETE" => getAWTKeyStroke(KeyEvent.VK_DELETE, InputEvent.CTRL_MASK);
- * "alt shift X" => getAWTKeyStroke(KeyEvent.VK_X, InputEvent.ALT_MASK | InputEvent.SHIFT_MASK);
- * "alt shift released X" => getAWTKeyStroke(KeyEvent.VK_X, InputEvent.ALT_MASK | InputEvent.SHIFT_MASK, true);
- * "typed a" => getAWTKeyStroke('a');
+ * "INSERT" => getAWTKeyStroke(KeyEvent.VK_INSERT, 0);
+ * "control DELETE" => getAWTKeyStroke(KeyEvent.VK_DELETE, InputEvent.CTRL_MASK);
+ * "alt shift X" => getAWTKeyStroke(KeyEvent.VK_X, InputEvent.ALT_MASK | InputEvent.SHIFT_MASK);
+ * "alt shift released X" => getAWTKeyStroke(KeyEvent.VK_X, InputEvent.ALT_MASK | InputEvent.SHIFT_MASK, true);
+ * "typed a" => getAWTKeyStroke('a');
* </pre>
*
* @param s a String formatted as described above
@@ -513,7 +513,7 @@
synchronized (AWTKeyStroke.class) {
if (modifierKeywords == null) {
- Map uninitializedMap = new HashMap(8, 1.0f);
+ Map<String, Integer> uninitializedMap = new HashMap<>(8, 1.0f);
uninitializedMap.put("shift",
Integer.valueOf(InputEvent.SHIFT_DOWN_MASK
|InputEvent.SHIFT_MASK));
@@ -861,12 +861,12 @@
}
class VKCollection {
- Map code2name;
- Map name2code;
+ Map<Integer, String> code2name;
+ Map<String, Integer> name2code;
public VKCollection() {
- code2name = new HashMap();
- name2code = new HashMap();
+ code2name = new HashMap<>();
+ name2code = new HashMap<>();
}
public synchronized void put(String name, Integer code) {
--- a/jdk/src/share/classes/java/awt/CardLayout.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/CardLayout.java Thu Oct 10 13:41:08 2013 -0700
@@ -66,7 +66,7 @@
* pairs of components and their names.
* @see java.util.Vector
*/
- Vector vector = new Vector();
+ Vector<Card> vector = new Vector<>();
/*
* A pair of Component and String that represents its name.
@@ -570,10 +570,10 @@
if (f.defaulted("vector")) {
// pre-1.4 stream
- Hashtable tab = (Hashtable)f.get("tab", null);
- vector = new Vector();
+ Hashtable<String, Component> tab = (Hashtable)f.get("tab", null);
+ vector = new Vector<>();
if (tab != null && !tab.isEmpty()) {
- for (Enumeration e = tab.keys() ; e.hasMoreElements() ; ) {
+ for (Enumeration<String> e = tab.keys() ; e.hasMoreElements() ; ) {
String key = (String)e.nextElement();
Component comp = (Component)tab.get(key);
vector.add(new Card(key, comp));
@@ -594,7 +594,7 @@
private void writeObject(ObjectOutputStream s)
throws IOException
{
- Hashtable tab = new Hashtable();
+ Hashtable<String, Component> tab = new Hashtable<>();
int ncomponents = vector.size();
for (int i = 0; i < ncomponents; i++) {
Card card = (Card)vector.get(i);
--- a/jdk/src/share/classes/java/awt/Component.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/Component.java Thu Oct 10 13:41:08 2013 -0700
@@ -972,6 +972,10 @@
public AccessControlContext getAccessControlContext(Component comp) {
return comp.getAccessControlContext();
}
+
+ public void revalidateSynchronously(Component comp) {
+ comp.revalidateSynchronously();
+ }
});
}
@@ -2022,7 +2026,7 @@
* @return an instance of <code>Point</code> representing
* the top-left corner of the component's bounds in the
* coordinate space of the screen
- * @throws <code>IllegalComponentStateException</code> if the
+ * @throws IllegalComponentStateException if the
* component is not showing on the screen
* @see #setLocation
* @see #getLocation
@@ -2977,6 +2981,13 @@
* @since 1.7
*/
public void revalidate() {
+ revalidateSynchronously();
+ }
+
+ /**
+ * Revalidates the component synchronously.
+ */
+ final void revalidateSynchronously() {
synchronized (getTreeLock()) {
invalidate();
--- a/jdk/src/share/classes/java/awt/Container.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/Container.java Thu Oct 10 13:41:08 2013 -0700
@@ -258,6 +258,12 @@
public void validateUnconditionally(Container cont) {
cont.validateUnconditionally();
}
+
+ @Override
+ public Component findComponentAt(Container cont, int x, int y,
+ boolean ignoreEnabled) {
+ return cont.findComponentAt(x, y, ignoreEnabled);
+ }
});
}
@@ -2651,7 +2657,6 @@
* behavior. Setting 'ignoreEnabled' to 'false' bypasses disabled
* Components during the search. This behavior is used by the
* lightweight cursor support in sun.awt.GlobalCursorManager.
- * The cursor code calls this function directly via native code.
*
* The addition of this feature is temporary, pending the
* adoption of new, public API which exports this feature.
--- a/jdk/src/share/classes/java/awt/ContainerOrderFocusTraversalPolicy.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/ContainerOrderFocusTraversalPolicy.java Thu Oct 10 13:41:08 2013 -0700
@@ -85,7 +85,7 @@
* list should be reused if possible.
*/
transient private Container cachedRoot;
- transient private List cachedCycle;
+ transient private List<Component> cachedCycle;
/*
* We suppose to use getFocusTraversalCycle & getComponentIndex methods in order
@@ -111,7 +111,7 @@
return cycle.indexOf(aComponent);
}
- private void enumerateCycle(Container container, List cycle) {
+ private void enumerateCycle(Container container, List<Component> cycle) {
if (!(container.isVisible() && container.isDisplayable())) {
return;
}
--- a/jdk/src/share/classes/java/awt/DefaultKeyboardFocusManager.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/DefaultKeyboardFocusManager.java Thu Oct 10 13:41:08 2013 -0700
@@ -808,13 +808,13 @@
}
}
boolean stopPostProcessing = false;
- java.util.List processors = getKeyEventPostProcessors();
+ java.util.List<KeyEventPostProcessor> processors = getKeyEventPostProcessors();
if (processors != null) {
- for (java.util.Iterator iter = processors.iterator();
+ for (java.util.Iterator<KeyEventPostProcessor> iter = processors.iterator();
!stopPostProcessing && iter.hasNext(); )
{
- stopPostProcessing = (((KeyEventPostProcessor)(iter.next())).
- postProcessKeyEvent(e));
+ stopPostProcessing = iter.next().
+ postProcessKeyEvent(e);
}
}
if (!stopPostProcessing) {
@@ -1059,12 +1059,12 @@
return true;
}
- java.util.List dispatchers = getKeyEventDispatchers();
+ java.util.List<KeyEventDispatcher> dispatchers = getKeyEventDispatchers();
if (dispatchers != null) {
- for (java.util.Iterator iter = dispatchers.iterator();
+ for (java.util.Iterator<KeyEventDispatcher> iter = dispatchers.iterator();
iter.hasNext(); )
{
- if (((KeyEventDispatcher)(iter.next())).
+ if (iter.next().
dispatchKeyEvent(ke))
{
return true;
@@ -1131,7 +1131,7 @@
oppStroke = AWTKeyStroke.getAWTKeyStroke(stroke.getKeyCode(),
stroke.getModifiers(),
!stroke.isOnKeyRelease());
- Set toTest;
+ Set<AWTKeyStroke> toTest;
boolean contains, containsOpp;
toTest = focusedComponent.getFocusTraversalKeys(
@@ -1246,7 +1246,7 @@
* any) should be cancelled.
*
* @param after the timestamp specified in the call to
- * <code>enqueueKeyEvents</code>, or any value < 0
+ * <code>enqueueKeyEvents</code>, or any value < 0
* @param untilFocused the Component specified in the call to
* <code>enqueueKeyEvents</code>
* @see #enqueueKeyEvents
--- a/jdk/src/share/classes/java/awt/Dialog.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/Dialog.java Thu Oct 10 13:41:08 2013 -0700
@@ -61,7 +61,7 @@
* <p>
* The default layout for a dialog is <code>BorderLayout</code>.
* <p>
- * A dialog may have its native decorations (i.e. Frame & Titlebar) turned off
+ * A dialog may have its native decorations (i.e. Frame & Titlebar) turned off
* with <code>setUndecorated</code>. This can only be done while the dialog
* is not {@link Component#isDisplayable() displayable}.
* <p>
--- a/jdk/src/share/classes/java/awt/Event.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/Event.java Thu Oct 10 13:41:08 2013 -0700
@@ -524,7 +524,7 @@
* This field has been replaced by MouseEvent.getClickCount().
*
* @serial
- * @see java.awt.event.MouseEvent#getClickCount().
+ * @see java.awt.event.MouseEvent#getClickCount()
*/
public int clickCount;
--- a/jdk/src/share/classes/java/awt/EventQueue.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/EventQueue.java Thu Oct 10 13:41:08 2013 -0700
@@ -690,7 +690,10 @@
final Object src = event.getSource();
final PrivilegedAction<Void> action = new PrivilegedAction<Void>() {
public Void run() {
- if (fwDispatcher == null) {
+ // In case fwDispatcher is installed and we're already on the
+ // dispatch thread (e.g. performing DefaultKeyboardFocusManager.sendMessage),
+ // dispatch the event straight away.
+ if (fwDispatcher == null || isDispatchThreadImpl()) {
dispatchEventImpl(event, src);
} else {
fwDispatcher.scheduleDispatch(new Runnable() {
--- a/jdk/src/share/classes/java/awt/Frame.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/Frame.java Thu Oct 10 13:41:08 2013 -0700
@@ -265,12 +265,12 @@
*
* <p>Note that the correct test for frame being fully maximized is
* <pre>
- * (state & Frame.MAXIMIZED_BOTH) == Frame.MAXIMIZED_BOTH
+ * (state & Frame.MAXIMIZED_BOTH) == Frame.MAXIMIZED_BOTH
* </pre>
*
* <p>To test is frame is maximized in <em>some</em> direction use
* <pre>
- * (state & Frame.MAXIMIZED_BOTH) != 0
+ * (state & Frame.MAXIMIZED_BOTH) != 0
* </pre>
*
* @see #setExtendedState(int)
--- a/jdk/src/share/classes/java/awt/GradientPaintContext.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/GradientPaintContext.java Thu Oct 10 13:41:08 2013 -0700
@@ -41,7 +41,7 @@
new DirectColorModel(24, 0x000000ff, 0x0000ff00, 0x00ff0000);
static ColorModel cachedModel;
- static WeakReference cached;
+ static WeakReference<Raster> cached;
static synchronized Raster getCachedRaster(ColorModel cm, int w, int h) {
if (cm == cachedModel) {
@@ -76,7 +76,7 @@
}
}
cachedModel = cm;
- cached = new WeakReference(ras);
+ cached = new WeakReference<>(ras);
}
double x1;
--- a/jdk/src/share/classes/java/awt/GraphicsEnvironment.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/GraphicsEnvironment.java Thu Oct 10 13:41:08 2013 -0700
@@ -95,18 +95,18 @@
String nm = AccessController.doPrivileged(new GetPropertyAction("java.awt.graphicsenv", null));
try {
// long t0 = System.currentTimeMillis();
- Class geCls;
+ Class<GraphicsEnvironment> geCls;
try {
// First we try if the bootclassloader finds the requested
// class. This way we can avoid to run in a privileged block.
- geCls = Class.forName(nm);
+ geCls = (Class<GraphicsEnvironment>)Class.forName(nm);
} catch (ClassNotFoundException ex) {
// If the bootclassloader fails, we try again with the
// application classloader.
ClassLoader cl = ClassLoader.getSystemClassLoader();
- geCls = Class.forName(nm, true, cl);
+ geCls = (Class<GraphicsEnvironment>)Class.forName(nm, true, cl);
}
- ge = (GraphicsEnvironment) geCls.newInstance();
+ ge = geCls.newInstance();
// long t1 = System.currentTimeMillis();
// System.out.println("GE creation took " + (t1-t0)+ "ms.");
if (isHeadless()) {
@@ -161,7 +161,7 @@
private static boolean getHeadlessProperty() {
if (headless == null) {
java.security.AccessController.doPrivileged(
- new java.security.PrivilegedAction() {
+ new java.security.PrivilegedAction<Object>() {
public Object run() {
String nm = System.getProperty("java.awt.headless");
--- a/jdk/src/share/classes/java/awt/GridBagConstraints.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/GridBagConstraints.java Thu Oct 10 13:41:08 2013 -0700
@@ -30,7 +30,7 @@
* <code>GridBagLayout</code> class.
*
* @author Doug Stein
- * @author Bill Spitzak (orignial NeWS & OLIT implementation)
+ * @author Bill Spitzak (orignial NeWS & OLIT implementation)
* @see java.awt.GridBagLayout
* @since JDK1.0
*/
--- a/jdk/src/share/classes/java/awt/GridBagLayout.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/GridBagLayout.java Thu Oct 10 13:41:08 2013 -0700
@@ -120,9 +120,9 @@
* Orientation relative values are interpreted relative to the container's
* <code>ComponentOrientation</code> property while absolute values
* are not. Baseline relative values are calculated relative to the
- * baseline. Valid values are:</dd>
+ * baseline. Valid values are:
* <p>
- * <center><table BORDER=0 COLS=3 WIDTH=800
+ * <center><table BORDER=0 WIDTH=800
* SUMMARY="absolute, relative and baseline values as described above">
* <tr>
* <th><P ALIGN="LEFT">Absolute Values</th>
@@ -131,6 +131,7 @@
* </tr>
* <tr>
* <td>
+ * <ul style="list-style-type:none">
* <li><code>GridBagConstraints.NORTH</code></li>
* <li><code>GridBagConstraints.SOUTH</code></li>
* <li><code>GridBagConstraints.WEST</code></li>
@@ -140,8 +141,10 @@
* <li><code>GridBagConstraints.SOUTHWEST</code></li>
* <li><code>GridBagConstraints.SOUTHEAST</code></li>
* <li><code>GridBagConstraints.CENTER</code> (the default)</li>
+ * </ul>
* </td>
* <td>
+ * <ul style="list-style-type:none">
* <li><code>GridBagConstraints.PAGE_START</code></li>
* <li><code>GridBagConstraints.PAGE_END</code></li>
* <li><code>GridBagConstraints.LINE_START</code></li>
@@ -150,8 +153,10 @@
* <li><code>GridBagConstraints.FIRST_LINE_END</code></li>
* <li><code>GridBagConstraints.LAST_LINE_START</code></li>
* <li><code>GridBagConstraints.LAST_LINE_END</code></li>
+ * </ul>
* </td>
* <td>
+ * <ul style="list-style-type:none">
* <li><code>GridBagConstraints.BASELINE</code></li>
* <li><code>GridBagConstraints.BASELINE_LEADING</code></li>
* <li><code>GridBagConstraints.BASELINE_TRAILING</code></li>
@@ -161,9 +166,10 @@
* <li><code>GridBagConstraints.BELOW_BASELINE</code></li>
* <li><code>GridBagConstraints.BELOW_BASELINE_LEADING</code></li>
* <li><code>GridBagConstraints.BELOW_BASELINE_TRAILING</code></li>
+ * </ul>
* </td>
* </tr>
- * </table></center><p>
+ * </table></center>
* <dt>{@link GridBagConstraints#weightx},
* {@link GridBagConstraints#weighty}
* <dd>Used to determine how to distribute space, which is
@@ -246,7 +252,7 @@
* left-to-right container and Figure 3 shows the layout for a horizontal,
* right-to-left container.
* <p>
- * <center><table COLS=2 WIDTH=600 summary="layout">
+ * <center><table WIDTH=600 summary="layout">
* <tr ALIGN=CENTER>
* <td>
* <img src="doc-files/GridBagLayout-1.gif" alt="The preceeding text describes this graphic (Figure 1)." ALIGN=center HSPACE=10 VSPACE=7>
@@ -349,7 +355,7 @@
* </pre></blockquote><hr>
* <p>
* @author Doug Stein
- * @author Bill Spitzak (orignial NeWS & OLIT implementation)
+ * @author Bill Spitzak (orignial NeWS & OLIT implementation)
* @see java.awt.GridBagConstraints
* @see java.awt.GridBagLayoutInfo
* @see java.awt.ComponentOrientation
--- a/jdk/src/share/classes/java/awt/GridLayout.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/GridLayout.java Thu Oct 10 13:41:08 2013 -0700
@@ -55,7 +55,7 @@
* If the container's <code>ComponentOrientation</code> property is horizontal
* and right-to-left, the example produces the output shown in Figure 2.
* <p>
- * <center><table COLS=2 WIDTH=600 summary="layout">
+ * <center><table WIDTH=600 summary="layout">
* <tr ALIGN=CENTER>
* <td><img SRC="doc-files/GridLayout-1.gif"
* alt="Shows 6 buttons in rows of 2. Row 1 shows buttons 1 then 2.
--- a/jdk/src/share/classes/java/awt/KeyboardFocusManager.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/KeyboardFocusManager.java Thu Oct 10 13:41:08 2013 -0700
@@ -348,7 +348,7 @@
* Component of those Windows that has no such array of its own explicitly
* set.
*/
- private Set[] defaultFocusTraversalKeys = new Set[4];
+ private Set<AWTKeyStroke>[] defaultFocusTraversalKeys = new Set[4];
/**
* The current focus cycle root. If the focus owner is itself a focus cycle
@@ -376,7 +376,7 @@
* KeyEventDispatchers are registered, this field may be null or refer to
* a List of length 0.
*/
- private java.util.LinkedList keyEventDispatchers;
+ private java.util.LinkedList<KeyEventDispatcher> keyEventDispatchers;
/**
* This KeyboardFocusManager's KeyEventPostProcessor chain. The List does
@@ -385,12 +385,12 @@
* If no other KeyEventPostProcessors are registered, this field may be
* null or refer to a List of length 0.
*/
- private java.util.LinkedList keyEventPostProcessors;
+ private java.util.LinkedList<KeyEventPostProcessor> keyEventPostProcessors;
/**
* Maps Windows to those Windows' most recent focus owners.
*/
- private static java.util.Map mostRecentFocusOwners = new WeakHashMap();
+ private static java.util.Map<Window, WeakReference<Component>> mostRecentFocusOwners = new WeakHashMap<>();
/**
* We cache the permission used to verify that the calling thread is
@@ -431,7 +431,7 @@
*/
public KeyboardFocusManager() {
for (int i = 0; i < TRAVERSAL_KEY_LENGTH; i++) {
- Set work_set = new HashSet();
+ Set<AWTKeyStroke> work_set = new HashSet<>();
for (int j = 0; j < defaultFocusTraversalKeyStrokes[i].length; j++) {
work_set.add(defaultFocusTraversalKeyStrokes[i][j]);
}
@@ -1125,7 +1125,7 @@
throw new IllegalArgumentException("cannot set null Set of default focus traversal keys");
}
- Set oldKeys;
+ Set<AWTKeyStroke> oldKeys;
synchronized (this) {
for (AWTKeyStroke keystroke : keystrokes) {
@@ -1153,7 +1153,7 @@
oldKeys = defaultFocusTraversalKeys[id];
defaultFocusTraversalKeys[id] =
- Collections.unmodifiableSet(new HashSet(keystrokes));
+ Collections.unmodifiableSet(new HashSet<>(keystrokes));
}
firePropertyChange(defaultFocusTraversalKeyPropertyNames[id],
@@ -1699,7 +1699,7 @@
if (dispatcher != null) {
synchronized (this) {
if (keyEventDispatchers == null) {
- keyEventDispatchers = new java.util.LinkedList();
+ keyEventDispatchers = new java.util.LinkedList<>();
}
keyEventDispatchers.add(dispatcher);
}
@@ -1787,7 +1787,7 @@
if (processor != null) {
synchronized (this) {
if (keyEventPostProcessors == null) {
- keyEventPostProcessors = new java.util.LinkedList();
+ keyEventPostProcessors = new java.util.LinkedList<>();
}
keyEventPostProcessors.add(processor);
}
@@ -1865,9 +1865,9 @@
// of Component.parent fields. Since WeakHasMap refers to its
// values strongly, we need to break the strong link from the
// value (component) back to its key (window).
- WeakReference weakValue = null;
+ WeakReference<Component> weakValue = null;
if (component != null) {
- weakValue = new WeakReference(component);
+ weakValue = new WeakReference<>(component);
}
mostRecentFocusOwners.put(window, weakValue);
}
@@ -1906,7 +1906,7 @@
* javax.swing.JComponent.runInputVerifier() using reflection.
*/
static synchronized Component getMostRecentFocusOwner(Window window) {
- WeakReference weakValue =
+ WeakReference<Component> weakValue =
(WeakReference)mostRecentFocusOwners.get(window);
return weakValue == null ? null : (Component)weakValue.get();
}
@@ -2034,7 +2034,7 @@
* oldest</b> timestamp (if any) should be cancelled.
*
* @param after the timestamp specified in the call to
- * <code>enqueueKeyEvents</code>, or any value < 0
+ * <code>enqueueKeyEvents</code>, or any value < 0
* @param untilFocused the Component specified in the call to
* <code>enqueueKeyEvents</code>
* @see #enqueueKeyEvents
@@ -2649,11 +2649,11 @@
Component lastFocusOwner = null;
Component currentFocusOwner = null;
- for (Iterator iter = localLightweightRequests.iterator(); iter.hasNext(); ) {
+ for (Iterator<KeyboardFocusManager.LightweightFocusRequest> iter = localLightweightRequests.iterator(); iter.hasNext(); ) {
currentFocusOwner = manager.getGlobalFocusOwner();
LightweightFocusRequest lwFocusRequest =
- (LightweightFocusRequest)iter.next();
+ iter.next();
/*
* WARNING: This is based on DKFM's logic solely!
@@ -2978,12 +2978,12 @@
if (hwFocusRequest != null) {
heavyweightRequests.removeFirst();
if (hwFocusRequest.lightweightRequests != null) {
- for (Iterator lwIter = hwFocusRequest.lightweightRequests.
+ for (Iterator<KeyboardFocusManager.LightweightFocusRequest> lwIter = hwFocusRequest.lightweightRequests.
iterator();
lwIter.hasNext(); )
{
manager.dequeueKeyEvents
- (-1, ((LightweightFocusRequest)lwIter.next()).
+ (-1, lwIter.next().
component);
}
}
@@ -3063,8 +3063,8 @@
// Accessor to private field isProxyActive of KeyEvent
private static boolean isProxyActiveImpl(KeyEvent e) {
if (proxyActive == null) {
- proxyActive = (Field) AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
+ proxyActive = AccessController.doPrivileged(new PrivilegedAction<Field>() {
+ public Field run() {
Field field = null;
try {
field = KeyEvent.class.getDeclaredField("isProxyActive");
--- a/jdk/src/share/classes/java/awt/MenuBar.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/MenuBar.java Thu Oct 10 13:41:08 2013 -0700
@@ -43,7 +43,7 @@
* This is what a menu bar might look like:
* <p>
* <img src="doc-files/MenuBar-1.gif"
- * <alt="Diagram of MenuBar containing 2 menus: Examples and Options.
+ * alt="Diagram of MenuBar containing 2 menus: Examples and Options.
* Examples menu is expanded showing items: Basic, Simple, Check, and More Examples."
* ALIGN=center HSPACE=10 VSPACE=7>
* <p>
--- a/jdk/src/share/classes/java/awt/ScrollPane.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/ScrollPane.java Thu Oct 10 13:41:08 2013 -0700
@@ -247,7 +247,7 @@
* component is removed and the new one is added.
* @param comp the component to be added
* @param constraints not applicable
- * @param index position of child component (must be <= 0)
+ * @param index position of child component (must be <= 0)
*/
protected final void addImpl(Component comp, Object constraints, int index) {
synchronized (getTreeLock()) {
--- a/jdk/src/share/classes/java/awt/ScrollPaneAdjustable.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/ScrollPaneAdjustable.java Thu Oct 10 13:41:08 2013 -0700
@@ -220,7 +220,7 @@
* This method is public for this class to properly implement
* <code>Adjustable</code> interface.
*
- * @throws <code>AWTError</code> Always throws an error when called.
+ * @throws AWTError Always throws an error when called.
*/
public void setMinimum(int min) {
throw new AWTError(SCROLLPANE_ONLY);
@@ -237,7 +237,7 @@
* This method is public for this class to properly implement
* <code>Adjustable</code> interface.
*
- * @throws <code>AWTError</code> Always throws an error when called.
+ * @throws AWTError Always throws an error when called.
*/
public void setMaximum(int max) {
throw new AWTError(SCROLLPANE_ONLY);
@@ -274,7 +274,7 @@
* This method is public for this class to properly implement
* <code>Adjustable</code> interface.
*
- * @throws <code>AWTError</code> Always throws an error when called.
+ * @throws AWTError Always throws an error when called.
*/
public void setVisibleAmount(int v) {
throw new AWTError(SCROLLPANE_ONLY);
--- a/jdk/src/share/classes/java/awt/Scrollbar.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/Scrollbar.java Thu Oct 10 13:41:08 2013 -0700
@@ -715,6 +715,9 @@
* The unit increment must be greater than zero.
* Attepts to set the unit increment to a value lower than 1
* will result in a value of 1 being set.
+ * <p>
+ * In some operating systems, this property
+ * can be ignored by the underlying controls.
*
* @param v the amount by which to increment or decrement
* the scroll bar's value
@@ -752,6 +755,9 @@
* scroll bar, generally through a mouse or keyboard gesture
* that the scroll bar receives as an adjustment event.
* The unit increment must be greater than zero.
+ * <p>
+ * In some operating systems, this property
+ * can be ignored by the underlying controls.
*
* @return the unit increment of this scroll bar
* @see java.awt.Scrollbar#setUnitIncrement
--- a/jdk/src/share/classes/java/awt/SequencedEvent.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/SequencedEvent.java Thu Oct 10 13:41:08 2013 -0700
@@ -49,7 +49,7 @@
private static final int ID =
java.awt.event.FocusEvent.FOCUS_LAST + 1;
- private static final LinkedList list = new LinkedList();
+ private static final LinkedList<SequencedEvent> list = new LinkedList<>();
private final AWTEvent nested;
private AppContext appContext;
--- a/jdk/src/share/classes/java/awt/SystemTray.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/SystemTray.java Thu Oct 10 13:41:08 2013 -0700
@@ -63,8 +63,8 @@
*
* <p>The following code snippet demonstrates how to access
* and customize the system tray:
+ * <pre>
* <code>
- * <pre>
* {@link TrayIcon} trayIcon = null;
* if (SystemTray.isSupported()) {
* // get the SystemTray instance
@@ -109,8 +109,8 @@
* trayIcon.{@link TrayIcon#setImage(java.awt.Image) setImage}(updatedImage);
* }
* // ...
+ * </code>
* </pre>
- * </code>
*
* @since 1.6
* @see TrayIcon
--- a/jdk/src/share/classes/java/awt/TextComponent.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/TextComponent.java Thu Oct 10 13:41:08 2013 -0700
@@ -972,7 +972,7 @@
* coordinates. If the index is invalid a null rectangle
* is returned.
*
- * @param i the index into the String >= 0
+ * @param i the index into the String >= 0
* @return the screen coordinates of the character's bounding box
*/
public Rectangle getCharacterBounds(int i) {
@@ -982,7 +982,7 @@
/**
* Returns the number of characters (valid indicies)
*
- * @return the number of characters >= 0
+ * @return the number of characters >= 0
*/
public int getCharCount() {
return TextComponent.this.getText().length();
@@ -1018,7 +1018,7 @@
* Return 0 if the text is empty, or the caret position
* if no selection.
*
- * @return the index into the text of the start of the selection >= 0
+ * @return the index into the text of the start of the selection >= 0
*/
public int getSelectionStart() {
return TextComponent.this.getSelectionStart();
@@ -1031,7 +1031,7 @@
* Return 0 if the text is empty, or the caret position
* if no selection.
*
- * @return the index into teh text of the end of the selection >= 0
+ * @return the index into teh text of the end of the selection >= 0
*/
public int getSelectionEnd() {
return TextComponent.this.getSelectionEnd();
@@ -1056,7 +1056,7 @@
*
* @param part the AccessibleText.CHARACTER, AccessibleText.WORD,
* or AccessibleText.SENTENCE to retrieve
- * @param index an index within the text >= 0
+ * @param index an index within the text >= 0
* @return the letter, word, or sentence,
* null for an invalid index or part
*/
@@ -1122,7 +1122,7 @@
*
* @param part the AccessibleText.CHARACTER, AccessibleText.WORD,
* or AccessibleText.SENTENCE to retrieve
- * @param index an index within the text >= 0
+ * @param index an index within the text >= 0
* @return the letter, word, or sentence, null for an invalid
* index or part
*/
@@ -1175,7 +1175,7 @@
*
* @param part the AccessibleText.CHARACTER, AccessibleText.WORD,
* or AccessibleText.SENTENCE to retrieve
- * @param index an index within the text >= 0
+ * @param index an index within the text >= 0
* @return the letter, word, or sentence, null for an invalid index
* or part
*/
--- a/jdk/src/share/classes/java/awt/TextField.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/TextField.java Thu Oct 10 13:41:08 2013 -0700
@@ -503,7 +503,7 @@
*
* @see #addActionListener
* @see #removeActionListener
- * @see java.awt.event#ActionListener
+ * @see java.awt.event.ActionListener
* @since 1.4
*/
public synchronized ActionListener[] getActionListeners() {
--- a/jdk/src/share/classes/java/awt/TexturePaintContext.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/TexturePaintContext.java Thu Oct 10 13:41:08 2013 -0700
@@ -73,11 +73,11 @@
WritableRaster raster = bufImg.getRaster();
ColorModel cm = bufImg.getColorModel();
int maxw = devBounds.width;
- Object val = hints.get(hints.KEY_INTERPOLATION);
+ Object val = hints.get(RenderingHints.KEY_INTERPOLATION);
boolean filter =
(val == null
- ? (hints.get(hints.KEY_RENDERING) == hints.VALUE_RENDER_QUALITY)
- : (val != hints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR));
+ ? (hints.get(RenderingHints.KEY_RENDERING) == RenderingHints.VALUE_RENDER_QUALITY)
+ : (val != RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR));
if (raster instanceof IntegerInterleavedRaster &&
(!filter || isFilterableDCM(cm)))
{
@@ -234,8 +234,8 @@
return outRas;
}
- private static WeakReference xrgbRasRef;
- private static WeakReference argbRasRef;
+ private static WeakReference<Raster> xrgbRasRef;
+ private static WeakReference<Raster> argbRasRef;
synchronized static WritableRaster makeRaster(ColorModel cm,
Raster srcRas,
@@ -278,13 +278,13 @@
return;
}
if (xrgbmodel == cm) {
- xrgbRasRef = new WeakReference(outRas);
+ xrgbRasRef = new WeakReference<>(outRas);
} else if (argbmodel == cm) {
- argbRasRef = new WeakReference(outRas);
+ argbRasRef = new WeakReference<>(outRas);
}
}
- private static WeakReference byteRasRef;
+ private static WeakReference<Raster> byteRasRef;
synchronized static WritableRaster makeByteRaster(Raster srcRas,
int w, int h)
@@ -307,7 +307,7 @@
if (outRas == null) {
return;
}
- byteRasRef = new WeakReference(outRas);
+ byteRasRef = new WeakReference<>(outRas);
}
public abstract WritableRaster makeRaster(int w, int h);
--- a/jdk/src/share/classes/java/awt/Toolkit.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/Toolkit.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -56,6 +56,7 @@
import sun.awt.NullComponentPeer;
import sun.awt.PeerEvent;
import sun.awt.SunToolkit;
+import sun.awt.AWTAccessor;
import sun.security.util.SecurityConstants;
import sun.util.CoreResourceBundleControl;
@@ -467,7 +468,7 @@
GraphicsEnvironment.checkHeadless();
}
-/**
+ /**
* Controls whether the layout of Containers is validated dynamically
* during resizing, or statically, after resizing is complete.
* Use {@code isDynamicLayoutActive()} to detect if this feature enabled
@@ -497,9 +498,12 @@
* @see java.awt.GraphicsEnvironment#isHeadless
* @since 1.4
*/
- public void setDynamicLayout(boolean dynamic)
+ public void setDynamicLayout(final boolean dynamic)
throws HeadlessException {
GraphicsEnvironment.checkHeadless();
+ if (this != getDefaultToolkit()) {
+ getDefaultToolkit().setDynamicLayout(dynamic);
+ }
}
/**
@@ -1239,7 +1243,8 @@
}
/**
- * Emits an audio beep.
+ * Emits an audio beep depending on native system settings and hardware
+ * capabilities.
* @since JDK1.1
*/
public abstract void beep();
@@ -1598,6 +1603,12 @@
* here, so that only one copy is maintained.
*/
private static ResourceBundle resources;
+ private static ResourceBundle platformResources;
+
+ // called by platform toolkit
+ private static void setPlatformResources(ResourceBundle bundle) {
+ platformResources = bundle;
+ }
/**
* Initialize JNI field and method ids
@@ -1646,6 +1657,14 @@
}
static {
+ AWTAccessor.setToolkitAccessor(
+ new AWTAccessor.ToolkitAccessor() {
+ @Override
+ public void setPlatformResources(ResourceBundle bundle) {
+ Toolkit.setPlatformResources(bundle);
+ }
+ });
+
java.security.AccessController.doPrivileged(
new java.security.PrivilegedAction<Void>() {
public Void run() {
@@ -1673,6 +1692,15 @@
* This method returns defaultValue if the property is not found.
*/
public static String getProperty(String key, String defaultValue) {
+ // first try platform specific bundle
+ if (platformResources != null) {
+ try {
+ return platformResources.getString(key);
+ }
+ catch (MissingResourceException e) {}
+ }
+
+ // then shared one
if (resources != null) {
try {
return resources.getString(key);
--- a/jdk/src/share/classes/java/awt/WaitDispatchSupport.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/WaitDispatchSupport.java Thu Oct 10 13:41:08 2013 -0700
@@ -224,8 +224,8 @@
// starts. Thus, the enter() method will not hang.
//
// Event pump should be privileged. See 6300270.
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
+ AccessController.doPrivileged(new PrivilegedAction<Void>() {
+ public Void run() {
run.run();
return null;
}
--- a/jdk/src/share/classes/java/awt/Window.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/Window.java Thu Oct 10 13:41:08 2013 -0700
@@ -1075,7 +1075,6 @@
* Hide this Window, its subcomponents, and all of its owned children.
* The Window and its subcomponents can be made visible again
* with a call to {@code show}.
- * </p>
* @see #show
* @see #dispose
* @deprecated As of JDK version 1.5, replaced by
@@ -3373,27 +3372,27 @@
* this property of the Window.
* <p>
* For example, after the following code is executed:
- * <pre><blockquote>
+ * <pre>
* setLocationByPlatform(true);
* setVisible(true);
* boolean flag = isLocationByPlatform();
- * </blockquote></pre>
+ * </pre>
* The window will be shown at platform's default location and
* {@code flag} will be {@code false}.
* <p>
* In the following sample:
- * <pre><blockquote>
+ * <pre>
* setLocationByPlatform(true);
* setLocation(10, 10);
* boolean flag = isLocationByPlatform();
* setVisible(true);
- * </blockquote></pre>
+ * </pre>
* The window will be shown at (10, 10) and {@code flag} will be
* {@code false}.
*
* @param locationByPlatform {@code true} if this Window should appear
* at the default location, {@code false} if at the current location
- * @throws {@code IllegalComponentStateException} if the window
+ * @throws IllegalComponentStateException if the window
* is showing on screen and locationByPlatform is {@code true}.
* @see #setLocation
* @see #isShowing
--- a/jdk/src/share/classes/java/awt/datatransfer/DataFlavor.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/datatransfer/DataFlavor.java Thu Oct 10 13:41:08 2013 -0700
@@ -454,7 +454,7 @@
/**
* Constructs a <code>DataFlavor</code> from a <code>mimeType</code> string.
- * The string can specify a "class=<fully specified Java class name>"
+ * The string can specify a "class=<fully specified Java class name>"
* parameter to create a <code>DataFlavor</code> with the desired
* representation class. If the string does not contain "class=" parameter,
* <code>java.io.InputStream</code> is used as default.
--- a/jdk/src/share/classes/java/awt/datatransfer/SystemFlavorMap.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/datatransfer/SystemFlavorMap.java Thu Oct 10 13:41:08 2013 -0700
@@ -70,7 +70,7 @@
/**
* System singleton which maps a thread's ClassLoader to a SystemFlavorMap.
*/
- private static final WeakHashMap flavorMaps = new WeakHashMap();
+ private static final WeakHashMap<ClassLoader, FlavorMap> flavorMaps = new WeakHashMap<>();
/**
* Copied from java.util.Properties.
@@ -139,7 +139,7 @@
* native Strings.
* Do not use the field directly, use getFlavorToNative() instead.
*/
- private final Map flavorToNative = new HashMap();
+ private final Map<DataFlavor, List<String>> flavorToNative = new HashMap<>();
/**
* Accessor to flavorToNative map. Since we use lazy initialization we must
@@ -148,7 +148,7 @@
*
* @return flavorToNative
*/
- private synchronized Map getFlavorToNative() {
+ private synchronized Map<DataFlavor, List<String>> getFlavorToNative() {
if (!isMapInitialized) {
initSystemFlavorMap();
}
@@ -164,13 +164,13 @@
* Caches the result of getNativesForFlavor(). Maps DataFlavors to
* SoftReferences which reference Lists of String natives.
*/
- private Map getNativesForFlavorCache = new HashMap();
+ private Map<DataFlavor, SoftReference<List<String>>> getNativesForFlavorCache = new HashMap<>();
/**
* Caches the result getFlavorsForNative(). Maps String natives to
* SoftReferences which reference Lists of DataFlavors.
*/
- private Map getFlavorsForNativeCache = new HashMap();
+ private Map<String, SoftReference<List<DataFlavor>>> getFlavorsForNativeCache = new HashMap<>();
/**
* Dynamic mapping generation used for text mappings should not be applied
@@ -193,7 +193,7 @@
FlavorMap fm;
synchronized(flavorMaps) {
- fm = (FlavorMap)flavorMaps.get(contextClassLoader);
+ fm = flavorMaps.get(contextClassLoader);
if (fm == null) {
fm = new SystemFlavorMap();
flavorMaps.put(contextClassLoader, fm);
@@ -520,10 +520,10 @@
* the appropriate Map location, but rather will be appended to a List
* stored in that location.
*/
- private void store(Object hashed, Object listed, Map map) {
- List list = (List)map.get(hashed);
+ private <H, L> void store(H hashed, L listed, Map<H, List<L>> map) {
+ List<L> list = map.get(hashed);
if (list == null) {
- list = new ArrayList(1);
+ list = new ArrayList<>(1);
map.put(hashed, list);
}
if (!list.contains(listed)) {
@@ -537,17 +537,17 @@
* case, a new DataFlavor is synthesized, stored, and returned, if and
* only if the specified native is encoded as a Java MIME type.
*/
- private List nativeToFlavorLookup(String nat) {
+ private List<DataFlavor> nativeToFlavorLookup(String nat) {
List<DataFlavor> flavors = getNativeToFlavor().get(nat);
if (nat != null && !disabledMappingGenerationKeys.contains(nat)) {
DataTransferer transferer = DataTransferer.getInstance();
if (transferer != null) {
- List platformFlavors =
+ List<DataFlavor> platformFlavors =
transferer.getPlatformMappingsForNative(nat);
if (!platformFlavors.isEmpty()) {
if (flavors != null) {
- platformFlavors.removeAll(new HashSet(flavors));
+ platformFlavors.removeAll(new HashSet<>(flavors));
// Prepending the platform-specific mappings ensures
// that the flavors added with
// addFlavorForUnencodedNative() are at the end of
@@ -573,15 +573,15 @@
}
if (flavor != null) {
- flavors = new ArrayList(1);
+ flavors = new ArrayList<>(1);
getNativeToFlavor().put(nat, flavors);
flavors.add(flavor);
getFlavorsForNativeCache.remove(nat);
getFlavorsForNativeCache.remove(null);
- List natives = (List)getFlavorToNative().get(flavor);
+ List<String> natives = getFlavorToNative().get(flavor);
if (natives == null) {
- natives = new ArrayList(1);
+ natives = new ArrayList<>(1);
getFlavorToNative().put(flavor, natives);
}
natives.add(nat);
@@ -590,7 +590,7 @@
}
}
- return (flavors != null) ? flavors : new ArrayList(0);
+ return (flavors != null) ? flavors : new ArrayList<>(0);
}
/**
@@ -601,18 +601,18 @@
* encoding the DataFlavor's MIME type. Otherwise an empty List is returned
* and 'flavorToNative' remains unaffected.
*/
- private List flavorToNativeLookup(final DataFlavor flav,
- final boolean synthesize) {
- List natives = (List)getFlavorToNative().get(flav);
+ private List<String> flavorToNativeLookup(final DataFlavor flav,
+ final boolean synthesize) {
+ List<String> natives = getFlavorToNative().get(flav);
if (flav != null && !disabledMappingGenerationKeys.contains(flav)) {
DataTransferer transferer = DataTransferer.getInstance();
if (transferer != null) {
- List platformNatives =
+ List<String> platformNatives =
transferer.getPlatformMappingsForFlavor(flav);
if (!platformNatives.isEmpty()) {
if (natives != null) {
- platformNatives.removeAll(new HashSet(natives));
+ platformNatives.removeAll(new HashSet<>(natives));
// Prepend the platform-specific mappings to ensure
// that the natives added with
// addUnencodedNativeForFlavor() are at the end of
@@ -627,7 +627,7 @@
if (natives == null) {
if (synthesize) {
String encoded = encodeDataFlavor(flav);
- natives = new ArrayList(1);
+ natives = new ArrayList<>(1);
getFlavorToNative().put(flav, natives);
natives.add(encoded);
getNativesForFlavorCache.remove(flav);
@@ -635,14 +635,14 @@
List<DataFlavor> flavors = getNativeToFlavor().get(encoded);
if (flavors == null) {
- flavors = new ArrayList(1);
+ flavors = new ArrayList<>(1);
getNativeToFlavor().put(encoded, flavors);
}
flavors.add(flav);
getFlavorsForNativeCache.remove(encoded);
getFlavorsForNativeCache.remove(null);
} else {
- natives = new ArrayList(0);
+ natives = new ArrayList<>(0);
}
}
@@ -675,21 +675,21 @@
* @since 1.4
*/
public synchronized List<String> getNativesForFlavor(DataFlavor flav) {
- List retval = null;
+ List<String> retval = null;
// Check cache, even for null flav
- SoftReference ref = (SoftReference)getNativesForFlavorCache.get(flav);
+ SoftReference<List<String>> ref = getNativesForFlavorCache.get(flav);
if (ref != null) {
- retval = (List)ref.get();
+ retval = ref.get();
if (retval != null) {
// Create a copy, because client code can modify the returned
// list.
- return new ArrayList(retval);
+ return new ArrayList<>(retval);
}
}
if (flav == null) {
- retval = new ArrayList<String>(getNativeToFlavor().keySet());
+ retval = new ArrayList<>(getNativeToFlavor().keySet());
} else if (disabledMappingGenerationKeys.contains(flav)) {
// In this case we shouldn't synthesize a native for this flavor,
// since its mappings were explicitly specified.
@@ -699,7 +699,7 @@
// For text/* flavors, flavor-to-native mappings specified in
// flavormap.properties are stored per flavor's base type.
if ("text".equals(flav.getPrimaryType())) {
- retval = (List)getFlavorToNative().get(flav.mimeType.getBaseType());
+ retval = getAllNativesForType(flav.mimeType.getBaseType());
if (retval != null) {
// To prevent the List stored in the map from modification.
retval = new ArrayList(retval);
@@ -707,15 +707,15 @@
}
// Also include text/plain natives, but don't duplicate Strings
- List textPlainList = (List)getFlavorToNative().get(TEXT_PLAIN_BASE_TYPE);
+ List<String> textPlainList = getAllNativesForType(TEXT_PLAIN_BASE_TYPE);
if (textPlainList != null && !textPlainList.isEmpty()) {
// To prevent the List stored in the map from modification.
// This also guarantees that removeAll() is supported.
- textPlainList = new ArrayList(textPlainList);
+ textPlainList = new ArrayList<>(textPlainList);
if (retval != null && !retval.isEmpty()) {
// Use HashSet to get constant-time performance for search.
- textPlainList.removeAll(new HashSet(retval));
+ textPlainList.removeAll(new HashSet<>(retval));
retval.addAll(textPlainList);
} else {
retval = textPlainList;
@@ -728,7 +728,7 @@
// In this branch it is guaranteed that natives explicitly
// listed for flav's MIME type were added with
// addUnencodedNativeForFlavor(), so they have lower priority.
- List explicitList =
+ List<String> explicitList =
flavorToNativeLookup(flav, !SYNTHESIZE_IF_NOT_FOUND);
// flavorToNativeLookup() never returns null.
@@ -736,14 +736,14 @@
if (!explicitList.isEmpty()) {
// To prevent the List stored in the map from modification.
// This also guarantees that removeAll() is supported.
- explicitList = new ArrayList(explicitList);
+ explicitList = new ArrayList<>(explicitList);
// Use HashSet to get constant-time performance for search.
- explicitList.removeAll(new HashSet(retval));
+ explicitList.removeAll(new HashSet<>(retval));
retval.addAll(explicitList);
}
}
} else if (DataTransferer.isFlavorNoncharsetTextType(flav)) {
- retval = (List)getFlavorToNative().get(flav.mimeType.getBaseType());
+ retval = getAllNativesForType(flav.mimeType.getBaseType());
if (retval == null || retval.isEmpty()) {
retval = flavorToNativeLookup(flav, SYNTHESIZE_IF_NOT_FOUND);
@@ -751,7 +751,7 @@
// In this branch it is guaranteed that natives explicitly
// listed for flav's MIME type were added with
// addUnencodedNativeForFlavor(), so they have lower priority.
- List explicitList =
+ List<String> explicitList =
flavorToNativeLookup(flav, !SYNTHESIZE_IF_NOT_FOUND);
// flavorToNativeLookup() never returns null.
@@ -759,10 +759,10 @@
if (!explicitList.isEmpty()) {
// To prevent the List stored in the map from modification.
// This also guarantees that add/removeAll() are supported.
- retval = new ArrayList(retval);
- explicitList = new ArrayList(explicitList);
+ retval = new ArrayList<>(retval);
+ explicitList = new ArrayList<>(explicitList);
// Use HashSet to get constant-time performance for search.
- explicitList.removeAll(new HashSet(retval));
+ explicitList.removeAll(new HashSet<>(retval));
retval.addAll(explicitList);
}
}
@@ -770,9 +770,9 @@
retval = flavorToNativeLookup(flav, SYNTHESIZE_IF_NOT_FOUND);
}
- getNativesForFlavorCache.put(flav, new SoftReference(retval));
+ getNativesForFlavorCache.put(flav, new SoftReference<>(retval));
// Create a copy, because client code can modify the returned list.
- return new ArrayList(retval);
+ return new ArrayList<>(retval);
}
/**
@@ -809,11 +809,11 @@
public synchronized List<DataFlavor> getFlavorsForNative(String nat) {
// Check cache, even for null nat
- SoftReference ref = (SoftReference)getFlavorsForNativeCache.get(nat);
+ SoftReference<List<DataFlavor>> ref = getFlavorsForNativeCache.get(nat);
if (ref != null) {
- ArrayList retval = (ArrayList)ref.get();
+ List<DataFlavor> retval = ref.get();
if (retval != null) {
- return (List)retval.clone();
+ return new ArrayList<>(retval);
}
}
@@ -859,16 +859,15 @@
}
- final ArrayList arrayList = new ArrayList(returnValue);
- getFlavorsForNativeCache.put(nat, new SoftReference(arrayList));
- return (List)arrayList.clone();
+ final List<DataFlavor> arrayList = new ArrayList<>(returnValue);
+ getFlavorsForNativeCache.put(nat, new SoftReference<>(arrayList));
+ return new ArrayList<>(arrayList);
}
- private static LinkedHashSet<DataFlavor> convertMimeTypeToDataFlavors(
+ private static Set<DataFlavor> convertMimeTypeToDataFlavors(
final String baseType) {
- final LinkedHashSet<DataFlavor> returnValue =
- new LinkedHashSet<DataFlavor>();
+ final Set<DataFlavor> returnValue = new LinkedHashSet<>();
String subType = null;
@@ -1009,11 +1008,11 @@
flavor_list.toArray(flavors);
}
- HashMap retval = new HashMap(flavors.length, 1.0f);
- for (int i = 0; i < flavors.length; i++) {
- List natives = getNativesForFlavor(flavors[i]);
- String nat = (natives.isEmpty()) ? null : (String)natives.get(0);
- retval.put(flavors[i], nat);
+ Map<DataFlavor, String> retval = new HashMap<>(flavors.length, 1.0f);
+ for (DataFlavor flavor : flavors) {
+ List<String> natives = getNativesForFlavor(flavor);
+ String nat = (natives.isEmpty()) ? null : natives.get(0);
+ retval.put(flavor, nat);
}
return retval;
@@ -1054,12 +1053,11 @@
native_list.toArray(natives);
}
- HashMap retval = new HashMap(natives.length, 1.0f);
- for (int i = 0; i < natives.length; i++) {
- List flavors = getFlavorsForNative(natives[i]);
- DataFlavor flav = (flavors.isEmpty())
- ? null : (DataFlavor)flavors.get(0);
- retval.put(natives[i], flav);
+ Map<String, DataFlavor> retval = new HashMap<>(natives.length, 1.0f);
+ for (String aNative : natives) {
+ List<DataFlavor> flavors = getFlavorsForNative(aNative);
+ DataFlavor flav = (flavors.isEmpty())? null : flavors.get(0);
+ retval.put(aNative, flav);
}
return retval;
@@ -1091,9 +1089,9 @@
throw new NullPointerException("null arguments not permitted");
}
- List natives = (List)getFlavorToNative().get(flav);
+ List<String> natives = getFlavorToNative().get(flav);
if (natives == null) {
- natives = new ArrayList(1);
+ natives = new ArrayList<>(1);
getFlavorToNative().put(flav, natives);
} else if (natives.contains(nat)) {
return;
@@ -1138,8 +1136,8 @@
}
getFlavorToNative().remove(flav);
- for (int i = 0; i < natives.length; i++) {
- addUnencodedNativeForFlavor(flav, natives[i]);
+ for (String aNative : natives) {
+ addUnencodedNativeForFlavor(flav, aNative);
}
disabledMappingGenerationKeys.add(flav);
// Clear the cache to handle the case of empty natives.
@@ -1171,9 +1169,9 @@
throw new NullPointerException("null arguments not permitted");
}
- List flavors = (List)getNativeToFlavor().get(nat);
+ List<DataFlavor> flavors = getNativeToFlavor().get(nat);
if (flavors == null) {
- flavors = new ArrayList(1);
+ flavors = new ArrayList<>(1);
getNativeToFlavor().put(nat, flavors);
} else if (flavors.contains(flav)) {
return;
@@ -1217,8 +1215,8 @@
}
getNativeToFlavor().remove(nat);
- for (int i = 0; i < flavors.length; i++) {
- addFlavorForUnencodedNative(nat, flavors[i]);
+ for (DataFlavor flavor : flavors) {
+ addFlavorForUnencodedNative(nat, flavor);
}
disabledMappingGenerationKeys.add(nat);
// Clear the cache to handle the case of empty flavors.
@@ -1321,4 +1319,18 @@
? new DataFlavor(retval_str)
: null;
}
+
+ private List<String> getAllNativesForType(String type) {
+ List<String> retval = null;
+ for (DataFlavor dataFlavor : convertMimeTypeToDataFlavors(type)) {
+ List<String> natives = getFlavorToNative().get(dataFlavor);
+ if (!natives.isEmpty()) {
+ if (retval == null) {
+ retval = new ArrayList<>();
+ }
+ retval.addAll(natives);
+ }
+ }
+ return retval;
+ }
}
--- a/jdk/src/share/classes/java/awt/dnd/DragGestureRecognizer.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/dnd/DragGestureRecognizer.java Thu Oct 10 13:41:08 2013 -0700
@@ -114,7 +114,7 @@
* @param dgl the <code>DragGestureRecognizer</code>
* to notify when a drag gesture is detected
* <P>
- * @throws <code>IllegalArgumentException</code>
+ * @throws IllegalArgumentException
* if ds is <code>null</code>.
*/
@@ -157,7 +157,7 @@
* @param sa the set (logical OR) of the <code>DnDConstants</code>
* that this Drag and Drop operation will support
* <P>
- * @throws <code>IllegalArgumentException</code>
+ * @throws IllegalArgumentException
* if ds is <code>null</code>.
*/
@@ -185,7 +185,7 @@
* the <code>DragGestureRecognizer</code>
* is not associated with any <code>Component</code>.
* <P>
- * @throws <code>IllegalArgumentException</code>
+ * @throws IllegalArgumentException
* if ds is <code>null</code>.
*/
@@ -202,7 +202,7 @@
* <code>DragGestureRecognizer</code> will
* use to process the Drag and Drop operation
* <P>
- * @throws <code>IllegalArgumentException</code>
+ * @throws IllegalArgumentException
* if ds is <code>null</code>.
*/
@@ -332,7 +332,7 @@
* @param dgl the <code>DragGestureListener</code> to unregister
* from this <code>DragGestureRecognizer</code>
* <P>
- * @throws <code>IllegalArgumentException</code> if
+ * @throws IllegalArgumentException if
* dgl is not (equal to) the currently registered <code>DragGestureListener</code>.
*/
--- a/jdk/src/share/classes/java/awt/dnd/DragSource.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/dnd/DragSource.java Thu Oct 10 13:41:08 2013 -0700
@@ -676,7 +676,7 @@
* <code><em>Foo</em>Listener</code>s on this
* <code>DragSource</code>, or an empty array if no such listeners
* have been added
- * @exception <code>ClassCastException</code> if <code>listenerType</code>
+ * @exception ClassCastException if <code>listenerType</code>
* doesn't specify a class or interface that implements
* <code>java.util.EventListener</code>
*
--- a/jdk/src/share/classes/java/awt/dnd/DragSourceContext.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/dnd/DragSourceContext.java Thu Oct 10 13:41:08 2013 -0700
@@ -63,7 +63,7 @@
* itself between the platform and the
* listeners provided by the initiator of the drag operation.
* <p>
- * <a name="defaultCursor" />
+ * <a name="defaultCursor"></a>
* By default, {@code DragSourceContext} sets the cursor as appropriate
* for the current state of the drag and drop operation. For example, if
* the user has chosen {@linkplain DnDConstants#ACTION_MOVE the move action},
--- a/jdk/src/share/classes/java/awt/dnd/DragSourceDragEvent.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/dnd/DragSourceDragEvent.java Thu Oct 10 13:41:08 2013 -0700
@@ -47,9 +47,9 @@
* source and the drop action selected by the user. The user can select a drop
* action by pressing modifier keys during the drag operation:
* <pre>
- * Ctrl + Shift -> ACTION_LINK
- * Ctrl -> ACTION_COPY
- * Shift -> ACTION_MOVE
+ * Ctrl + Shift -> ACTION_LINK
+ * Ctrl -> ACTION_COPY
+ * Shift -> ACTION_MOVE
* </pre>
* If the user selects a drop action, the <i>user drop action</i> is one of
* <code>DnDConstants</code> that represents the selected drop action if this
@@ -103,7 +103,7 @@
* in one event. Use of the extended modifiers is
* preferred.
*
- * @throws <code>IllegalArgumentException</code> if <code>dsc</code> is <code>null</code>.
+ * @throws IllegalArgumentException if <code>dsc</code> is <code>null</code>.
*
* @see java.awt.event.InputEvent
* @see DragSourceEvent#getLocation
@@ -154,7 +154,7 @@
* @param x the horizontal coordinate for the cursor location
* @param y the vertical coordinate for the cursor location
*
- * @throws <code>IllegalArgumentException</code> if <code>dsc</code> is <code>null</code>.
+ * @throws IllegalArgumentException if <code>dsc</code> is <code>null</code>.
*
* @see java.awt.event.InputEvent
* @since 1.4
--- a/jdk/src/share/classes/java/awt/dnd/DragSourceDropEvent.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/dnd/DragSourceDropEvent.java Thu Oct 10 13:41:08 2013 -0700
@@ -63,7 +63,7 @@
* @param action the drop action
* @param success a boolean indicating if the drop was successful
*
- * @throws <code>IllegalArgumentException</code> if <code>dsc</code> is <code>null</code>.
+ * @throws IllegalArgumentException if <code>dsc</code> is <code>null</code>.
*
* @see DragSourceEvent#getLocation
*/
@@ -91,7 +91,7 @@
* @param x the horizontal coordinate for the cursor location
* @param y the vertical coordinate for the cursor location
*
- * @throws <code>IllegalArgumentException</code> if <code>dsc</code> is <code>null</code>.
+ * @throws IllegalArgumentException if <code>dsc</code> is <code>null</code>.
*
* @since 1.4
*/
@@ -112,7 +112,7 @@
*
* @param dsc the <code>DragSourceContext</code>
*
- * @throws <code>IllegalArgumentException</code> if <code>dsc</code> is <code>null</code>.
+ * @throws IllegalArgumentException if <code>dsc</code> is <code>null</code>.
*
* @see DragSourceEvent#getLocation
*/
--- a/jdk/src/share/classes/java/awt/dnd/DragSourceEvent.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/dnd/DragSourceEvent.java Thu Oct 10 13:41:08 2013 -0700
@@ -96,7 +96,7 @@
*
* @param dsc the <code>DragSourceContext</code>
*
- * @throws <code>IllegalArgumentException</code> if <code>dsc</code> is <code>null</code>.
+ * @throws IllegalArgumentException if <code>dsc</code> is <code>null</code>.
*
* @see #getLocation
*/
@@ -117,7 +117,7 @@
* @param x the horizontal coordinate for the cursor location
* @param y the vertical coordinate for the cursor location
*
- * @throws <code>IllegalArgumentException</code> if <code>dsc</code> is <code>null</code>.
+ * @throws IllegalArgumentException if <code>dsc</code> is <code>null</code>.
*
* @since 1.4
*/
--- a/jdk/src/share/classes/java/awt/dnd/DropTarget.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/dnd/DropTarget.java Thu Oct 10 13:41:08 2013 -0700
@@ -305,7 +305,7 @@
* <P>
* @param dtl The new <code>DropTargetListener</code>
* <P>
- * @throws <code>TooManyListenersException</code> if a
+ * @throws TooManyListenersException if a
* <code>DropTargetListener</code> is already added to this
* <code>DropTarget</code>.
*/
@@ -351,6 +351,8 @@
* @see #isActive
*/
public synchronized void dragEnter(DropTargetDragEvent dtde) {
+ isDraggingInside = true;
+
if (!active) return;
if (dtListener != null) {
@@ -421,6 +423,8 @@
* @see #isActive
*/
public synchronized void dragExit(DropTargetEvent dte) {
+ isDraggingInside = false;
+
if (!active) return;
if (dtListener != null && active) dtListener.dragExit(dte);
@@ -444,6 +448,8 @@
* @see #isActive
*/
public synchronized void drop(DropTargetDropEvent dtde) {
+ isDraggingInside = false;
+
clearAutoscroll();
if (dtListener != null && active)
@@ -533,6 +539,12 @@
((DropTargetPeer)nativePeer).removeDropTarget(this);
componentPeer = nativePeer = null;
+
+ synchronized (this) {
+ if (isDraggingInside) {
+ dragExit(new DropTargetEvent(getDropTargetContext()));
+ }
+ }
}
/**
@@ -832,7 +844,7 @@
int actions = DnDConstants.ACTION_COPY_OR_MOVE;
/**
- * <code>true</code> if the DropTarget is accepting Drag & Drop operations.
+ * <code>true</code> if the DropTarget is accepting Drag & Drop operations.
*
* @serial
*/
@@ -855,4 +867,9 @@
*/
private transient FlavorMap flavorMap;
+
+ /*
+ * If the dragging is currently inside this drop target
+ */
+ private transient boolean isDraggingInside;
}
--- a/jdk/src/share/classes/java/awt/dnd/DropTargetDragEvent.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/dnd/DropTargetDragEvent.java Thu Oct 10 13:41:08 2013 -0700
@@ -49,9 +49,9 @@
* source and the drop action selected by the user. The user can select a drop
* action by pressing modifier keys during the drag operation:
* <pre>
- * Ctrl + Shift -> ACTION_LINK
- * Ctrl -> ACTION_COPY
- * Shift -> ACTION_MOVE
+ * Ctrl + Shift -> ACTION_LINK
+ * Ctrl -> ACTION_COPY
+ * Shift -> ACTION_MOVE
* </pre>
* If the user selects a drop action, the <i>user drop action</i> is one of
* <code>DnDConstants</code> that represents the selected drop action if this
@@ -88,11 +88,11 @@
* @param srcActions The source drop actions
*
* @throws NullPointerException if cursorLocn is null
- * @throws <code>IllegalArgumentException</code> if dropAction is not one of
+ * @throws IllegalArgumentException if dropAction is not one of
* <code>DnDConstants</code>.
- * @throws <code>IllegalArgumentException</code> if srcActions is not
+ * @throws IllegalArgumentException if srcActions is not
* a bitwise mask of <code>DnDConstants</code>.
- * @throws <code>IllegalArgumentException</code> if dtc is <code>null</code>.
+ * @throws IllegalArgumentException if dtc is <code>null</code>.
*/
public DropTargetDragEvent(DropTargetContext dtc, Point cursorLocn, int dropAction, int srcActions) {
--- a/jdk/src/share/classes/java/awt/dnd/DropTargetDropEvent.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/dnd/DropTargetDropEvent.java Thu Oct 10 13:41:08 2013 -0700
@@ -48,9 +48,9 @@
* source and the drop action selected by the user. The user can select a drop
* action by pressing modifier keys during the drag operation:
* <pre>
- * Ctrl + Shift -> ACTION_LINK
- * Ctrl -> ACTION_COPY
- * Shift -> ACTION_MOVE
+ * Ctrl + Shift -> ACTION_LINK
+ * Ctrl -> ACTION_COPY
+ * Shift -> ACTION_MOVE
* </pre>
* If the user selects a drop action, the <i>user drop action</i> is one of
* <code>DnDConstants</code> that represents the selected drop action if this
@@ -92,13 +92,13 @@
* @param dropAction the user drop action.
* @param srcActions the source drop actions.
*
- * @throws <code>NullPointerException</code>
+ * @throws NullPointerException
* if cursorLocn is <code>null</code>
- * @throws <code>IllegalArgumentException</code> if dropAction is not one of
- * <code>DnDConstants</code>.
- * @throws <code>IllegalArgumentException</code> if srcActions is not
- * a bitwise mask of <code>DnDConstants</code>.
- * @throws <code>IllegalArgumentException</code> if dtc is <code>null</code>.
+ * @throws IllegalArgumentException
+ * if dropAction is not one of <code>DnDConstants</code>.
+ * @throws IllegalArgumentException
+ * if srcActions is not a bitwise mask of <code>DnDConstants</code>.
+ * @throws IllegalArgumentException if dtc is <code>null</code>.
*/
public DropTargetDropEvent(DropTargetContext dtc, Point cursorLocn, int dropAction, int srcActions) {
@@ -136,13 +136,12 @@
* @param srcActions the source drop actions.
* @param isLocal True if the source is in the same JVM as the target
*
- * @throws <code>NullPointerException</code> if cursorLocn is
- * <code>null</code>
- * @throws <code>IllegalArgumentException</code> if dropAction is not one of
- * <code>DnDConstants</code>.
- * @throws <code>IllegalArgumentException</code> if srcActions is not
- * a bitwise mask of <code>DnDConstants</code>.
- * @throws <code>IllegalArgumentException</code> if dtc is <code>null</code>.
+ * @throws NullPointerException
+ * if cursorLocn is <code>null</code>
+ * @throws IllegalArgumentException
+ * if dropAction is not one of <code>DnDConstants</code>.
+ * @throws IllegalArgumentException if srcActions is not a bitwise mask of <code>DnDConstants</code>.
+ * @throws IllegalArgumentException if dtc is <code>null</code>.
*/
public DropTargetDropEvent(DropTargetContext dtc, Point cursorLocn, int dropAction, int srcActions, boolean isLocal) {
--- a/jdk/src/share/classes/java/awt/event/MouseMotionListener.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/event/MouseMotionListener.java Thu Oct 10 13:41:08 2013 -0700
@@ -60,9 +60,9 @@
* mouse button is released (regardless of whether the mouse position
* is within the bounds of the component).
* <p>
- * Due to platform-dependent Drag&Drop implementations,
+ * Due to platform-dependent Drag&Drop implementations,
* <code>MOUSE_DRAGGED</code> events may not be delivered during a native
- * Drag&Drop operation.
+ * Drag&Drop operation.
*/
public void mouseDragged(MouseEvent e);
--- a/jdk/src/share/classes/java/awt/font/TransformAttribute.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/awt/font/TransformAttribute.java Thu Oct 10 13:41:08 2013 -0700
@@ -141,14 +141,16 @@
* @since 1.6
*/
public boolean equals(Object rhs) {
- try {
- TransformAttribute that = (TransformAttribute)rhs;
- if (transform == null) {
- return that.transform == null;
+ if (rhs != null) {
+ try {
+ TransformAttribute that = (TransformAttribute)rhs;
+ if (transform == null) {
+ return that.transform == null;
+ }
+ return transform.equals(that.transform);
}
- return transform.equals(that.transform);
- }
- catch (ClassCastException e) {
+ catch (ClassCastException e) {
+ }
}
return false;
}
--- a/jdk/src/share/classes/java/beans/DefaultPersistenceDelegate.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/beans/DefaultPersistenceDelegate.java Thu Oct 10 13:41:08 2013 -0700
@@ -149,6 +149,7 @@
* @return An expression whose value is <code>oldInstance</code>.
*
* @throws NullPointerException if {@code out} is {@code null}
+ * and this value is used in the method
*
* @see #DefaultPersistenceDelegate(String[])
*/
--- a/jdk/src/share/classes/java/beans/IndexedPropertyDescriptor.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/beans/IndexedPropertyDescriptor.java Thu Oct 10 13:41:08 2013 -0700
@@ -41,8 +41,8 @@
public class IndexedPropertyDescriptor extends PropertyDescriptor {
private Reference<? extends Class<?>> indexedPropertyTypeRef;
- private Reference<Method> indexedReadMethodRef;
- private Reference<Method> indexedWriteMethodRef;
+ private final MethodRef indexedReadMethodRef = new MethodRef();
+ private final MethodRef indexedWriteMethodRef = new MethodRef();
private String indexedReadMethodName;
private String indexedWriteMethodName;
@@ -173,11 +173,11 @@
* May return null if the property isn't indexed or is write-only.
*/
public synchronized Method getIndexedReadMethod() {
- Method indexedReadMethod = getIndexedReadMethod0();
+ Method indexedReadMethod = this.indexedReadMethodRef.get();
if (indexedReadMethod == null) {
Class<?> cls = getClass0();
if (cls == null ||
- (indexedReadMethodName == null && indexedReadMethodRef == null)) {
+ (indexedReadMethodName == null && !this.indexedReadMethodRef.isSet())) {
// the Indexed readMethod was explicitly set to null.
return null;
}
@@ -215,20 +215,19 @@
// the indexed property type is set by the reader.
setIndexedPropertyType(findIndexedPropertyType(readMethod,
- getIndexedWriteMethod0()));
+ this.indexedWriteMethodRef.get()));
setIndexedReadMethod0(readMethod);
}
private void setIndexedReadMethod0(Method readMethod) {
+ this.indexedReadMethodRef.set(readMethod);
if (readMethod == null) {
indexedReadMethodName = null;
- indexedReadMethodRef = null;
return;
}
setClass0(readMethod.getDeclaringClass());
indexedReadMethodName = readMethod.getName();
- this.indexedReadMethodRef = getSoftReference(readMethod);
setTransient(readMethod.getAnnotation(Transient.class));
}
@@ -241,11 +240,11 @@
* May return null if the property isn't indexed or is read-only.
*/
public synchronized Method getIndexedWriteMethod() {
- Method indexedWriteMethod = getIndexedWriteMethod0();
+ Method indexedWriteMethod = this.indexedWriteMethodRef.get();
if (indexedWriteMethod == null) {
Class<?> cls = getClass0();
if (cls == null ||
- (indexedWriteMethodName == null && indexedWriteMethodRef == null)) {
+ (indexedWriteMethodName == null && !this.indexedWriteMethodRef.isSet())) {
// the Indexed writeMethod was explicitly set to null.
return null;
}
@@ -301,15 +300,14 @@
}
private void setIndexedWriteMethod0(Method writeMethod) {
+ this.indexedWriteMethodRef.set(writeMethod);
if (writeMethod == null) {
indexedWriteMethodName = null;
- indexedWriteMethodRef = null;
return;
}
setClass0(writeMethod.getDeclaringClass());
indexedWriteMethodName = writeMethod.getName();
- this.indexedWriteMethodRef = getSoftReference(writeMethod);
setTransient(writeMethod.getAnnotation(Transient.class));
}
@@ -349,18 +347,6 @@
: null;
}
- private Method getIndexedReadMethod0() {
- return (this.indexedReadMethodRef != null)
- ? this.indexedReadMethodRef.get()
- : null;
- }
-
- private Method getIndexedWriteMethod0() {
- return (this.indexedWriteMethodRef != null)
- ? this.indexedWriteMethodRef.get()
- : null;
- }
-
private Class<?> findIndexedPropertyType(Method indexedReadMethod,
Method indexedWriteMethod)
throws IntrospectionException {
@@ -492,8 +478,8 @@
*/
IndexedPropertyDescriptor(IndexedPropertyDescriptor old) {
super(old);
- indexedReadMethodRef = old.indexedReadMethodRef;
- indexedWriteMethodRef = old.indexedWriteMethodRef;
+ this.indexedReadMethodRef.set(old.indexedReadMethodRef.get());
+ this.indexedWriteMethodRef.set(old.indexedWriteMethodRef.get());
indexedPropertyTypeRef = old.indexedPropertyTypeRef;
indexedWriteMethodName = old.indexedWriteMethodName;
indexedReadMethodName = old.indexedReadMethodName;
@@ -502,7 +488,7 @@
void updateGenericsFor(Class<?> type) {
super.updateGenericsFor(type);
try {
- setIndexedPropertyType(findIndexedPropertyType(getIndexedReadMethod0(), getIndexedWriteMethod0()));
+ setIndexedPropertyType(findIndexedPropertyType(this.indexedReadMethodRef.get(), this.indexedWriteMethodRef.get()));
}
catch (IntrospectionException exception) {
setIndexedPropertyType(null);
@@ -532,7 +518,7 @@
void appendTo(StringBuilder sb) {
super.appendTo(sb);
appendTo(sb, "indexedPropertyType", this.indexedPropertyTypeRef);
- appendTo(sb, "indexedReadMethod", this.indexedReadMethodRef);
- appendTo(sb, "indexedWriteMethod", this.indexedWriteMethodRef);
+ appendTo(sb, "indexedReadMethod", this.indexedReadMethodRef.get());
+ appendTo(sb, "indexedWriteMethod", this.indexedWriteMethodRef.get());
}
}
--- a/jdk/src/share/classes/java/beans/MethodDescriptor.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/beans/MethodDescriptor.java Thu Oct 10 13:41:08 2013 -0700
@@ -38,7 +38,7 @@
public class MethodDescriptor extends FeatureDescriptor {
- private Reference<Method> methodRef;
+ private final MethodRef methodRef = new MethodRef();
private String[] paramNames;
@@ -81,7 +81,7 @@
* @return The low-level description of the method
*/
public synchronized Method getMethod() {
- Method method = getMethod0();
+ Method method = this.methodRef.get();
if (method == null) {
Class<?> cls = getClass0();
String name = getName();
@@ -114,13 +114,7 @@
setClass0(method.getDeclaringClass());
}
setParams(getParameterTypes(getClass0(), method));
- this.methodRef = getSoftReference(method);
- }
-
- private Method getMethod0() {
- return (this.methodRef != null)
- ? this.methodRef.get()
- : null;
+ this.methodRef.set(method);
}
private synchronized void setParams(Class<?>[] param) {
@@ -177,12 +171,10 @@
*/
MethodDescriptor(MethodDescriptor x, MethodDescriptor y) {
- super(x,y);
+ super(x, y);
- methodRef = x.methodRef;
- if (y.methodRef != null) {
- methodRef = y.methodRef;
- }
+ Method method = y.methodRef.get();
+ this.methodRef.set(null != method ? method : x.methodRef.get());
params = x.params;
if (y.params != null) {
params = y.params;
@@ -205,7 +197,7 @@
MethodDescriptor(MethodDescriptor old) {
super(old);
- methodRef = old.methodRef;
+ this.methodRef.set(old.getMethod());
params = old.params;
paramNames = old.paramNames;
@@ -219,7 +211,7 @@
}
void appendTo(StringBuilder sb) {
- appendTo(sb, "method", this.methodRef);
+ appendTo(sb, "method", this.methodRef.get());
if (this.parameterDescriptors != null) {
sb.append("; parameterDescriptors={");
for (ParameterDescriptor pd : this.parameterDescriptors) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/java/beans/MethodRef.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package java.beans;
+
+import java.lang.ref.SoftReference;
+import java.lang.ref.WeakReference;
+import java.lang.reflect.Method;
+
+import static sun.reflect.misc.ReflectUtil.isPackageAccessible;
+
+final class MethodRef {
+ private String signature;
+ private SoftReference<Method> methodRef;
+ private WeakReference<Class<?>> typeRef;
+
+ void set(Method method) {
+ if (method == null) {
+ this.signature = null;
+ this.methodRef = null;
+ this.typeRef = null;
+ }
+ else {
+ this.signature = method.toGenericString();
+ this.methodRef = new SoftReference<>(method);
+ this.typeRef = new WeakReference<Class<?>>(method.getDeclaringClass());
+ }
+ }
+
+ boolean isSet() {
+ return this.methodRef != null;
+ }
+
+ Method get() {
+ if (this.methodRef == null) {
+ return null;
+ }
+ Method method = this.methodRef.get();
+ if (method == null) {
+ method = find(this.typeRef.get(), this.signature);
+ if (method == null) {
+ this.signature = null;
+ this.methodRef = null;
+ this.typeRef = null;
+ }
+ else {
+ this.methodRef = new SoftReference<>(method);
+ }
+ }
+ return isPackageAccessible(method.getDeclaringClass()) ? method : null;
+ }
+
+ private static Method find(Class<?> type, String signature) {
+ if (type != null) {
+ for (Method method : type.getMethods()) {
+ if (type.equals(method.getDeclaringClass())) {
+ if (method.toGenericString().equals(signature)) {
+ return method;
+ }
+ }
+ }
+ }
+ return null;
+ }
+}
--- a/jdk/src/share/classes/java/beans/PersistenceDelegate.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/beans/PersistenceDelegate.java Thu Oct 10 13:41:08 2013 -0700
@@ -162,6 +162,7 @@
* @return An expression whose value is <code>oldInstance</code>.
*
* @throws NullPointerException if {@code out} is {@code null}
+ * and this value is used in the method
*/
protected abstract Expression instantiate(Object oldInstance, Encoder out);
--- a/jdk/src/share/classes/java/beans/PropertyDescriptor.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/beans/PropertyDescriptor.java Thu Oct 10 13:41:08 2013 -0700
@@ -36,8 +36,8 @@
public class PropertyDescriptor extends FeatureDescriptor {
private Reference<? extends Class<?>> propertyTypeRef;
- private Reference<Method> readMethodRef;
- private Reference<Method> writeMethodRef;
+ private final MethodRef readMethodRef = new MethodRef();
+ private final MethodRef writeMethodRef = new MethodRef();
private Reference<? extends Class<?>> propertyEditorClassRef;
private boolean bound;
@@ -68,8 +68,8 @@
public PropertyDescriptor(String propertyName, Class<?> beanClass)
throws IntrospectionException {
this(propertyName, beanClass,
- Introspector.IS_PREFIX + NameGenerator.capitalize(propertyName),
- Introspector.SET_PREFIX + NameGenerator.capitalize(propertyName));
+ Introspector.IS_PREFIX + NameGenerator.capitalize(propertyName),
+ Introspector.SET_PREFIX + NameGenerator.capitalize(propertyName));
}
/**
@@ -203,10 +203,10 @@
* May return null if the property can't be read.
*/
public synchronized Method getReadMethod() {
- Method readMethod = getReadMethod0();
+ Method readMethod = this.readMethodRef.get();
if (readMethod == null) {
Class<?> cls = getClass0();
- if (cls == null || (readMethodName == null && readMethodRef == null)) {
+ if (cls == null || (readMethodName == null && !this.readMethodRef.isSet())) {
// The read method was explicitly set to null.
return null;
}
@@ -247,17 +247,16 @@
*/
public synchronized void setReadMethod(Method readMethod)
throws IntrospectionException {
+ this.readMethodRef.set(readMethod);
if (readMethod == null) {
readMethodName = null;
- readMethodRef = null;
return;
}
// The property type is determined by the read method.
- setPropertyType(findPropertyType(readMethod, getWriteMethod0()));
+ setPropertyType(findPropertyType(readMethod, this.writeMethodRef.get()));
setClass0(readMethod.getDeclaringClass());
readMethodName = readMethod.getName();
- this.readMethodRef = getSoftReference(readMethod);
setTransient(readMethod.getAnnotation(Transient.class));
}
@@ -268,10 +267,10 @@
* May return null if the property can't be written.
*/
public synchronized Method getWriteMethod() {
- Method writeMethod = getWriteMethod0();
+ Method writeMethod = this.writeMethodRef.get();
if (writeMethod == null) {
Class<?> cls = getClass0();
- if (cls == null || (writeMethodName == null && writeMethodRef == null)) {
+ if (cls == null || (writeMethodName == null && !this.writeMethodRef.isSet())) {
// The write method was explicitly set to null.
return null;
}
@@ -318,9 +317,9 @@
*/
public synchronized void setWriteMethod(Method writeMethod)
throws IntrospectionException {
+ this.writeMethodRef.set(writeMethod);
if (writeMethod == null) {
writeMethodName = null;
- writeMethodRef = null;
return;
}
// Set the property type - which validates the method
@@ -328,22 +327,9 @@
setClass0(writeMethod.getDeclaringClass());
writeMethodName = writeMethod.getName();
- this.writeMethodRef = getSoftReference(writeMethod);
setTransient(writeMethod.getAnnotation(Transient.class));
}
- private Method getReadMethod0() {
- return (this.readMethodRef != null)
- ? this.readMethodRef.get()
- : null;
- }
-
- private Method getWriteMethod0() {
- return (this.writeMethodRef != null)
- ? this.writeMethodRef.get()
- : null;
- }
-
/**
* Overridden to ensure that a super class doesn't take precedent
*/
@@ -617,8 +603,8 @@
PropertyDescriptor(PropertyDescriptor old) {
super(old);
propertyTypeRef = old.propertyTypeRef;
- readMethodRef = old.readMethodRef;
- writeMethodRef = old.writeMethodRef;
+ this.readMethodRef.set(old.readMethodRef.get());
+ this.writeMethodRef.set(old.writeMethodRef.get());
propertyEditorClassRef = old.propertyEditorClassRef;
writeMethodName = old.writeMethodName;
@@ -632,7 +618,7 @@
void updateGenericsFor(Class<?> type) {
setClass0(type);
try {
- setPropertyType(findPropertyType(getReadMethod0(), getWriteMethod0()));
+ setPropertyType(findPropertyType(this.readMethodRef.get(), this.writeMethodRef.get()));
}
catch (IntrospectionException exception) {
setPropertyType(null);
@@ -723,8 +709,8 @@
appendTo(sb, "constrained", this.constrained);
appendTo(sb, "propertyEditorClass", this.propertyEditorClassRef);
appendTo(sb, "propertyType", this.propertyTypeRef);
- appendTo(sb, "readMethod", this.readMethodRef);
- appendTo(sb, "writeMethod", this.writeMethodRef);
+ appendTo(sb, "readMethod", this.readMethodRef.get());
+ appendTo(sb, "writeMethod", this.writeMethodRef.get());
}
private boolean isAssignable(Method m1, Method m2) {
--- a/jdk/src/share/classes/java/beans/ThreadGroupContext.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/beans/ThreadGroupContext.java Thu Oct 10 13:41:08 2013 -0700
@@ -41,24 +41,20 @@
*/
final class ThreadGroupContext {
- private static final WeakIdentityMap<ThreadGroupContext> contexts = new WeakIdentityMap<>();
+ private static final WeakIdentityMap<ThreadGroupContext> contexts = new WeakIdentityMap<ThreadGroupContext>() {
+ protected ThreadGroupContext create(Object key) {
+ return new ThreadGroupContext();
+ }
+ };
/**
- * Returns the appropriate {@code AppContext} for the caller,
+ * Returns the appropriate {@code ThreadGroupContext} for the caller,
* as determined by its {@code ThreadGroup}.
*
* @return the application-dependent context
*/
static ThreadGroupContext getContext() {
- ThreadGroup group = Thread.currentThread().getThreadGroup();
- synchronized (contexts) {
- ThreadGroupContext context = contexts.get(group);
- if (context == null) {
- context = new ThreadGroupContext();
- contexts.put(group, context);
- }
- return context;
- }
+ return contexts.get(Thread.currentThread().getThreadGroup());
}
private volatile boolean isDesignTime;
--- a/jdk/src/share/classes/java/beans/WeakIdentityMap.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/beans/WeakIdentityMap.java Thu Oct 10 13:41:08 2013 -0700
@@ -33,18 +33,22 @@
* and reference-equality in place of object-equality to compare them.
* An entry will automatically be removed when its key is no longer
* in ordinary use. Both null values and the null key are supported.
+ * This class does not require additional synchronization.
+ * A thread-safety is provided by a fragile combination
+ * of synchronized blocks and volatile fields.
+ * Be very careful during editing!
*
* @see java.util.IdentityHashMap
* @see java.util.WeakHashMap
*/
-final class WeakIdentityMap<T> {
+abstract class WeakIdentityMap<T> {
private static final int MAXIMUM_CAPACITY = 1 << 30; // it MUST be a power of two
private static final Object NULL = new Object(); // special object for null key
private final ReferenceQueue<Object> queue = new ReferenceQueue<Object>();
- private Entry<T>[] table = newTable(1<<3); // table's length MUST be a power of two
+ private volatile Entry<T>[] table = newTable(1<<3); // table's length MUST be a power of two
private int threshold = 6; // the next size value at which to resize
private int size = 0; // the number of key-value mappings
@@ -54,78 +58,83 @@
key = NULL;
}
int hash = key.hashCode();
- int index = getIndex(this.table, hash);
- for (Entry<T> entry = this.table[index]; entry != null; entry = entry.next) {
+ Entry<T>[] table = this.table;
+ // unsynchronized search improves performance
+ // the null value does not mean that there are no needed entry
+ int index = getIndex(table, hash);
+ for (Entry<T> entry = table[index]; entry != null; entry = entry.next) {
if (entry.isMatched(key, hash)) {
return entry.value;
}
}
- return null;
+ synchronized (NULL) {
+ // synchronized search improves stability
+ // we must create and add new value if there are no needed entry
+ index = getIndex(this.table, hash);
+ for (Entry<T> entry = this.table[index]; entry != null; entry = entry.next) {
+ if (entry.isMatched(key, hash)) {
+ return entry.value;
+ }
+ }
+ T value = create(key);
+ this.table[index] = new Entry<T>(key, hash, value, this.queue, this.table[index]);
+ if (++this.size >= this.threshold) {
+ if (this.table.length == MAXIMUM_CAPACITY) {
+ this.threshold = Integer.MAX_VALUE;
+ }
+ else {
+ removeStaleEntries();
+ table = newTable(this.table.length * 2);
+ transfer(this.table, table);
+ // If ignoring null elements and processing ref queue caused massive
+ // shrinkage, then restore old table. This should be rare, but avoids
+ // unbounded expansion of garbage-filled tables.
+ if (this.size >= this.threshold / 2) {
+ this.table = table;
+ this.threshold *= 2;
+ }
+ else {
+ transfer(table, this.table);
+ }
+ }
+ }
+ return value;
+ }
}
- public T put(Object key, T value) {
- removeStaleEntries();
- if (key == null) {
- key = NULL;
- }
- int hash = key.hashCode();
- int index = getIndex(this.table, hash);
- for (Entry<T> entry = this.table[index]; entry != null; entry = entry.next) {
- if (entry.isMatched(key, hash)) {
- T oldValue = entry.value;
- entry.value = value;
- return oldValue;
- }
- }
- this.table[index] = new Entry<T>(key, hash, value, this.queue, this.table[index]);
- if (++this.size >= this.threshold) {
- if (this.table.length == MAXIMUM_CAPACITY) {
- this.threshold = Integer.MAX_VALUE;
- }
- else {
- removeStaleEntries();
- Entry<T>[] table = newTable(this.table.length * 2);
- transfer(this.table, table);
-
- // If ignoring null elements and processing ref queue caused massive
- // shrinkage, then restore old table. This should be rare, but avoids
- // unbounded expansion of garbage-filled tables.
- if (this.size >= this.threshold / 2) {
- this.table = table;
- this.threshold *= 2;
- }
- else {
- transfer(table, this.table);
- }
- }
- }
- return null;
- }
+ protected abstract T create(Object key);
private void removeStaleEntries() {
- for (Object ref = this.queue.poll(); ref != null; ref = this.queue.poll()) {
- @SuppressWarnings("unchecked")
- Entry<T> entry = (Entry<T>) ref;
- int index = getIndex(this.table, entry.hash);
+ Object ref = this.queue.poll();
+ if (ref != null) {
+ synchronized (NULL) {
+ do {
+ @SuppressWarnings("unchecked")
+ Entry<T> entry = (Entry<T>) ref;
+ int index = getIndex(this.table, entry.hash);
- Entry<T> prev = this.table[index];
- Entry<T> current = prev;
- while (current != null) {
- Entry<T> next = current.next;
- if (current == entry) {
- if (prev == entry) {
- this.table[index] = next;
+ Entry<T> prev = this.table[index];
+ Entry<T> current = prev;
+ while (current != null) {
+ Entry<T> next = current.next;
+ if (current == entry) {
+ if (prev == entry) {
+ this.table[index] = next;
+ }
+ else {
+ prev.next = next;
+ }
+ entry.value = null; // Help GC
+ entry.next = null; // Help GC
+ this.size--;
+ break;
+ }
+ prev = current;
+ current = next;
}
- else {
- prev.next = next;
- }
- entry.value = null; // Help GC
- entry.next = null; // Help GC
- this.size--;
- break;
+ ref = this.queue.poll();
}
- prev = current;
- current = next;
+ while (ref != null);
}
}
}
@@ -164,8 +173,8 @@
private static class Entry<T> extends WeakReference<Object> {
private final int hash;
- private T value;
- private Entry<T> next;
+ private volatile T value;
+ private volatile Entry<T> next;
Entry(Object key, int hash, T value, ReferenceQueue<Object> queue, Entry<T> next) {
super(key, queue);
--- a/jdk/src/share/classes/java/lang/CharSequence.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/lang/CharSequence.java Thu Oct 10 13:41:08 2013 -0700
@@ -228,7 +228,7 @@
Spliterators.spliteratorUnknownSize(
new CodePointIterator(),
Spliterator.ORDERED),
- Spliterator.SUBSIZED | Spliterator.SIZED | Spliterator.ORDERED,
+ Spliterator.ORDERED,
false);
}
}
--- a/jdk/src/share/classes/java/lang/Class.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/lang/Class.java Thu Oct 10 13:41:08 2013 -0700
@@ -48,6 +48,7 @@
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Set;
import java.util.Map;
@@ -2370,11 +2371,14 @@
private static final long reflectionDataOffset;
// offset of Class.annotationType instance field
private static final long annotationTypeOffset;
+ // offset of Class.annotationData instance field
+ private static final long annotationDataOffset;
static {
Field[] fields = Class.class.getDeclaredFields0(false); // bypass caches
reflectionDataOffset = objectFieldOffset(fields, "reflectionData");
annotationTypeOffset = objectFieldOffset(fields, "annotationType");
+ annotationDataOffset = objectFieldOffset(fields, "annotationData");
}
private static long objectFieldOffset(Field[] fields, String fieldName) {
@@ -2396,6 +2400,12 @@
AnnotationType newType) {
return unsafe.compareAndSwapObject(clazz, annotationTypeOffset, oldType, newType);
}
+
+ static <T> boolean casAnnotationData(Class<?> clazz,
+ AnnotationData oldData,
+ AnnotationData newData) {
+ return unsafe.compareAndSwapObject(clazz, annotationDataOffset, oldData, newData);
+ }
}
/**
@@ -2406,7 +2416,7 @@
private static boolean useCaches = true;
// reflection data that might get invalidated when JVM TI RedefineClasses() is called
- static class ReflectionData<T> {
+ private static class ReflectionData<T> {
volatile Field[] declaredFields;
volatile Field[] publicFields;
volatile Method[] declaredMethods;
@@ -3253,8 +3263,7 @@
public <A extends Annotation> A getAnnotation(Class<A> annotationClass) {
Objects.requireNonNull(annotationClass);
- initAnnotationsIfNecessary();
- return (A) annotations.get(annotationClass);
+ return (A) annotationData().annotations.get(annotationClass);
}
/**
@@ -3275,16 +3284,14 @@
public <A extends Annotation> A[] getAnnotationsByType(Class<A> annotationClass) {
Objects.requireNonNull(annotationClass);
- initAnnotationsIfNecessary();
- return AnnotationSupport.getMultipleAnnotations(annotations, annotationClass);
+ return AnnotationSupport.getMultipleAnnotations(annotationData().annotations, annotationClass);
}
/**
* @since 1.5
*/
public Annotation[] getAnnotations() {
- initAnnotationsIfNecessary();
- return AnnotationParser.toArray(annotations);
+ return AnnotationParser.toArray(annotationData().annotations);
}
/**
@@ -3296,8 +3303,7 @@
public <A extends Annotation> A getDeclaredAnnotation(Class<A> annotationClass) {
Objects.requireNonNull(annotationClass);
- initAnnotationsIfNecessary();
- return (A) declaredAnnotations.get(annotationClass);
+ return (A) annotationData().declaredAnnotations.get(annotationClass);
}
/**
@@ -3308,52 +3314,85 @@
public <A extends Annotation> A[] getDeclaredAnnotationsByType(Class<A> annotationClass) {
Objects.requireNonNull(annotationClass);
- initAnnotationsIfNecessary();
- return AnnotationSupport.getMultipleAnnotations(declaredAnnotations, annotationClass);
+ return AnnotationSupport.getMultipleAnnotations(annotationData().declaredAnnotations, annotationClass);
}
/**
* @since 1.5
*/
public Annotation[] getDeclaredAnnotations() {
- initAnnotationsIfNecessary();
- return AnnotationParser.toArray(declaredAnnotations);
+ return AnnotationParser.toArray(annotationData().declaredAnnotations);
}
- // Annotations cache
- private transient Map<Class<? extends Annotation>, Annotation> annotations;
- private transient Map<Class<? extends Annotation>, Annotation> declaredAnnotations;
- // Value of classRedefinedCount when we last cleared the cached annotations and declaredAnnotations fields
- private transient int lastAnnotationsRedefinedCount = 0;
+ // annotation data that might get invalidated when JVM TI RedefineClasses() is called
+ private static class AnnotationData {
+ final Map<Class<? extends Annotation>, Annotation> annotations;
+ final Map<Class<? extends Annotation>, Annotation> declaredAnnotations;
- // Clears cached values that might possibly have been obsoleted by
- // a class redefinition.
- private void clearAnnotationCachesOnClassRedefinition() {
- if (lastAnnotationsRedefinedCount != classRedefinedCount) {
- annotations = declaredAnnotations = null;
- lastAnnotationsRedefinedCount = classRedefinedCount;
+ // Value of classRedefinedCount when we created this AnnotationData instance
+ final int redefinedCount;
+
+ AnnotationData(Map<Class<? extends Annotation>, Annotation> annotations,
+ Map<Class<? extends Annotation>, Annotation> declaredAnnotations,
+ int redefinedCount) {
+ this.annotations = annotations;
+ this.declaredAnnotations = declaredAnnotations;
+ this.redefinedCount = redefinedCount;
}
}
- private synchronized void initAnnotationsIfNecessary() {
- clearAnnotationCachesOnClassRedefinition();
- if (annotations != null)
- return;
- declaredAnnotations = AnnotationParser.parseAnnotations(
- getRawAnnotations(), getConstantPool(), this);
+ // Annotations cache
+ @SuppressWarnings("UnusedDeclaration")
+ private volatile transient AnnotationData annotationData;
+
+ private AnnotationData annotationData() {
+ while (true) { // retry loop
+ AnnotationData annotationData = this.annotationData;
+ int classRedefinedCount = this.classRedefinedCount;
+ if (annotationData != null &&
+ annotationData.redefinedCount == classRedefinedCount) {
+ return annotationData;
+ }
+ // null or stale annotationData -> optimistically create new instance
+ AnnotationData newAnnotationData = createAnnotationData(classRedefinedCount);
+ // try to install it
+ if (Atomic.casAnnotationData(this, annotationData, newAnnotationData)) {
+ // successfully installed new AnnotationData
+ return newAnnotationData;
+ }
+ }
+ }
+
+ private AnnotationData createAnnotationData(int classRedefinedCount) {
+ Map<Class<? extends Annotation>, Annotation> declaredAnnotations =
+ AnnotationParser.parseAnnotations(getRawAnnotations(), getConstantPool(), this);
Class<?> superClass = getSuperclass();
- if (superClass == null) {
+ Map<Class<? extends Annotation>, Annotation> annotations = null;
+ if (superClass != null) {
+ Map<Class<? extends Annotation>, Annotation> superAnnotations =
+ superClass.annotationData().annotations;
+ for (Map.Entry<Class<? extends Annotation>, Annotation> e : superAnnotations.entrySet()) {
+ Class<? extends Annotation> annotationClass = e.getKey();
+ if (AnnotationType.getInstance(annotationClass).isInherited()) {
+ if (annotations == null) { // lazy construction
+ annotations = new LinkedHashMap<>((Math.max(
+ declaredAnnotations.size(),
+ Math.min(12, declaredAnnotations.size() + superAnnotations.size())
+ ) * 4 + 2) / 3
+ );
+ }
+ annotations.put(annotationClass, e.getValue());
+ }
+ }
+ }
+ if (annotations == null) {
+ // no inherited annotations -> share the Map with declaredAnnotations
annotations = declaredAnnotations;
} else {
- annotations = new HashMap<>();
- superClass.initAnnotationsIfNecessary();
- for (Map.Entry<Class<? extends Annotation>, Annotation> e : superClass.annotations.entrySet()) {
- Class<? extends Annotation> annotationClass = e.getKey();
- if (AnnotationType.getInstance(annotationClass).isInherited())
- annotations.put(annotationClass, e.getValue());
- }
+ // at least one inherited annotation -> declared may override inherited
annotations.putAll(declaredAnnotations);
}
+ return new AnnotationData(annotations, declaredAnnotations, classRedefinedCount);
}
// Annotation types cache their internal (AnnotationType) form
--- a/jdk/src/share/classes/java/security/cert/Certificate.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/security/cert/Certificate.java Thu Oct 10 13:41:08 2013 -0700
@@ -66,6 +66,9 @@
// the certificate type
private final String type;
+ /** Cache the hash code for the certiticate */
+ private int hash = -1; // Default to -1
+
/**
* Creates a certificate of the specified type.
*
@@ -123,16 +126,16 @@
* @return the hashcode value.
*/
public int hashCode() {
- int retval = 0;
- try {
- byte[] certData = X509CertImpl.getEncodedInternal(this);
- for (int i = 1; i < certData.length; i++) {
- retval += certData[i] * i;
+ int h = hash;
+ if (h == -1) {
+ try {
+ h = Arrays.hashCode(X509CertImpl.getEncodedInternal(this));
+ } catch (CertificateException e) {
+ h = 0;
}
- return retval;
- } catch (CertificateException e) {
- return retval;
+ hash = h;
}
+ return h;
}
/**
--- a/jdk/src/share/classes/java/util/HashMap.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/util/HashMap.java Thu Oct 10 13:41:08 2013 -0700
@@ -624,8 +624,7 @@
final V putVal(int hash, K key, V value, boolean onlyIfAbsent,
boolean evict) {
Node<K,V>[] tab; Node<K,V> p; int n, i;
- if (size > threshold || (tab = table) == null ||
- (n = tab.length) == 0)
+ if ((tab = table) == null || (n = tab.length) == 0)
n = (tab = resize()).length;
if ((p = tab[i = (n - 1) & hash]) == null)
tab[i] = newNode(hash, key, value, null);
@@ -659,7 +658,8 @@
}
}
++modCount;
- ++size;
+ if (++size > threshold)
+ resize();
afterNodeInsertion(evict);
return null;
}
@@ -1132,6 +1132,8 @@
public V computeIfPresent(K key,
BiFunction<? super K, ? super V, ? extends V> remappingFunction) {
+ if (remappingFunction == null)
+ throw new NullPointerException();
Node<K,V> e; V oldValue;
int hash = hash(key);
if ((e = getNode(hash, key)) != null &&
--- a/jdk/src/share/classes/java/util/Map.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/util/Map.java Thu Oct 10 13:41:08 2013 -0700
@@ -934,6 +934,7 @@
*/
default V computeIfAbsent(K key,
Function<? super K, ? extends V> mappingFunction) {
+ Objects.requireNonNull(mappingFunction);
V v, newValue;
return ((v = get(key)) == null &&
(newValue = mappingFunction.apply(key)) != null &&
@@ -992,6 +993,7 @@
*/
default V computeIfPresent(K key,
BiFunction<? super K, ? super V, ? extends V> remappingFunction) {
+ Objects.requireNonNull(remappingFunction);
V oldValue;
while ((oldValue = get(key)) != null) {
V newValue = remappingFunction.apply(key, oldValue);
@@ -1068,6 +1070,7 @@
*/
default V compute(K key,
BiFunction<? super K, ? super V, ? extends V> remappingFunction) {
+ Objects.requireNonNull(remappingFunction);
V oldValue = get(key);
for (;;) {
V newValue = remappingFunction.apply(key, oldValue);
@@ -1174,6 +1177,7 @@
*/
default V merge(K key, V value,
BiFunction<? super V, ? super V, ? extends V> remappingFunction) {
+ Objects.requireNonNull(remappingFunction);
V oldValue = get(key);
for (;;) {
if (oldValue != null) {
--- a/jdk/src/share/classes/java/util/Spliterator.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/util/Spliterator.java Thu Oct 10 13:41:08 2013 -0700
@@ -539,7 +539,7 @@
* Spliterator is expected to have a documented policy concerning the impact
* of modifications during traversal.
*
- * <p>A top-level Spliterator should not report {@code CONCURRENT} and
+ * <p>A top-level Spliterator should not report both {@code CONCURRENT} and
* {@code SIZED}, since the finite size, if known, may change if the source
* is concurrently modified during traversal. Such a Spliterator is
* inconsistent and no guarantees can be made about any computation using
--- a/jdk/src/share/classes/java/util/Spliterators.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/util/Spliterators.java Thu Oct 10 13:41:08 2013 -0700
@@ -409,16 +409,16 @@
*
* @param <T> Type of elements
* @param c The collection
- * @param additionalCharacteristics Additional spliterator characteristics
- * of this spliterator's source or elements beyond {@code SIZED} and
- * {@code SUBSIZED} which are are always reported
+ * @param characteristics Characteristics of this spliterator's source or
+ * elements. The characteristics {@code SIZED} and {@code SUBSIZED}
+ * are additionally reported unless {@code CONCURRENT} is supplied.
* @return A spliterator from an iterator
* @throws NullPointerException if the given collection is {@code null}
*/
public static <T> Spliterator<T> spliterator(Collection<? extends T> c,
- int additionalCharacteristics) {
+ int characteristics) {
return new IteratorSpliterator<>(Objects.requireNonNull(c),
- additionalCharacteristics);
+ characteristics);
}
/**
@@ -439,17 +439,17 @@
* @param iterator The iterator for the source
* @param size The number of elements in the source, to be reported as
* initial {@code estimateSize}
- * @param additionalCharacteristics Additional spliterator characteristics
- * of this spliterator's source or elements beyond {@code SIZED} and
- * {@code SUBSIZED} which are are always reported
+ * @param characteristics Characteristics of this spliterator's source or
+ * elements. The characteristics {@code SIZED} and {@code SUBSIZED}
+ * are additionally reported unless {@code CONCURRENT} is supplied.
* @return A spliterator from an iterator
* @throws NullPointerException if the given iterator is {@code null}
*/
public static <T> Spliterator<T> spliterator(Iterator<? extends T> iterator,
long size,
- int additionalCharacteristics) {
+ int characteristics) {
return new IteratorSpliterator<>(Objects.requireNonNull(iterator), size,
- additionalCharacteristics);
+ characteristics);
}
/**
@@ -467,7 +467,7 @@
*
* @param <T> Type of elements
* @param iterator The iterator for the source
- * @param characteristics Properties of this spliterator's source
+ * @param characteristics Characteristics of this spliterator's source
* or elements ({@code SIZED} and {@code SUBSIZED}, if supplied, are
* ignored and are not reported.)
* @return A spliterator from an iterator
@@ -496,17 +496,17 @@
* @param iterator The iterator for the source
* @param size The number of elements in the source, to be reported as
* initial {@code estimateSize}.
- * @param additionalCharacteristics Additional spliterator characteristics
- * of this spliterator's source or elements beyond {@code SIZED} and
- * {@code SUBSIZED} which are are always reported
+ * @param characteristics Characteristics of this spliterator's source or
+ * elements. The characteristics {@code SIZED} and {@code SUBSIZED}
+ * are additionally reported unless {@code CONCURRENT} is supplied.
* @return A spliterator from an iterator
* @throws NullPointerException if the given iterator is {@code null}
*/
public static Spliterator.OfInt spliterator(PrimitiveIterator.OfInt iterator,
long size,
- int additionalCharacteristics) {
+ int characteristics) {
return new IntIteratorSpliterator(Objects.requireNonNull(iterator),
- size, additionalCharacteristics);
+ size, characteristics);
}
/**
@@ -524,7 +524,7 @@
* operated on after the spliterator is returned.
*
* @param iterator The iterator for the source
- * @param characteristics Properties of this spliterator's source
+ * @param characteristics Characteristics of this spliterator's source
* or elements ({@code SIZED} and {@code SUBSIZED}, if supplied, are
* ignored and are not reported.)
* @return A spliterator from an iterator
@@ -553,17 +553,17 @@
* @param iterator The iterator for the source
* @param size The number of elements in the source, to be reported as
* initial {@code estimateSize}.
- * @param additionalCharacteristics Additional spliterator characteristics
- * of this spliterator's source or elements beyond {@code SIZED} and
- * {@code SUBSIZED} which are are always reported
+ * @param characteristics Characteristics of this spliterator's source or
+ * elements. The characteristics {@code SIZED} and {@code SUBSIZED}
+ * are additionally reported unless {@code CONCURRENT} is supplied.
* @return A spliterator from an iterator
* @throws NullPointerException if the given iterator is {@code null}
*/
public static Spliterator.OfLong spliterator(PrimitiveIterator.OfLong iterator,
long size,
- int additionalCharacteristics) {
+ int characteristics) {
return new LongIteratorSpliterator(Objects.requireNonNull(iterator),
- size, additionalCharacteristics);
+ size, characteristics);
}
/**
@@ -581,7 +581,7 @@
* operated on after the spliterator is returned.
*
* @param iterator The iterator for the source
- * @param characteristics Properties of this spliterator's source
+ * @param characteristics Characteristics of this spliterator's source
* or elements ({@code SIZED} and {@code SUBSIZED}, if supplied, are
* ignored and are not reported.)
* @return A spliterator from an iterator
@@ -610,17 +610,17 @@
* @param iterator The iterator for the source
* @param size The number of elements in the source, to be reported as
* initial {@code estimateSize}
- * @param additionalCharacteristics Additional spliterator characteristics
- * of this spliterator's source or elements beyond {@code SIZED} and
- * {@code SUBSIZED} which are are always reported
+ * @param characteristics Characteristics of this spliterator's source or
+ * elements. The characteristics {@code SIZED} and {@code SUBSIZED}
+ * are additionally reported unless {@code CONCURRENT} is supplied.
* @return A spliterator from an iterator
* @throws NullPointerException if the given iterator is {@code null}
*/
public static Spliterator.OfDouble spliterator(PrimitiveIterator.OfDouble iterator,
long size,
- int additionalCharacteristics) {
+ int characteristics) {
return new DoubleIteratorSpliterator(Objects.requireNonNull(iterator),
- size, additionalCharacteristics);
+ size, characteristics);
}
/**
@@ -638,7 +638,7 @@
* operated on after the spliterator is returned.
*
* @param iterator The iterator for the source
- * @param characteristics Properties of this spliterator's source
+ * @param characteristics Characteristics of this spliterator's source
* or elements ({@code SIZED} and {@code SUBSIZED}, if supplied, are
* ignored and are not reported.)
* @return A spliterator from an iterator
@@ -1710,7 +1710,9 @@
public IteratorSpliterator(Collection<? extends T> collection, int characteristics) {
this.collection = collection;
this.it = null;
- this.characteristics = characteristics | Spliterator.SIZED | Spliterator.SUBSIZED;
+ this.characteristics = (characteristics & Spliterator.CONCURRENT) == 0
+ ? characteristics | Spliterator.SIZED | Spliterator.SUBSIZED
+ : characteristics;
}
/**
@@ -1727,7 +1729,9 @@
this.collection = null;
this.it = iterator;
this.est = size;
- this.characteristics = characteristics | Spliterator.SIZED | Spliterator.SUBSIZED;
+ this.characteristics = (characteristics & Spliterator.CONCURRENT) == 0
+ ? characteristics | Spliterator.SIZED | Spliterator.SUBSIZED
+ : characteristics;
}
/**
@@ -1857,7 +1861,9 @@
public IntIteratorSpliterator(PrimitiveIterator.OfInt iterator, long size, int characteristics) {
this.it = iterator;
this.est = size;
- this.characteristics = characteristics | Spliterator.SIZED | Spliterator.SUBSIZED;
+ this.characteristics = (characteristics & Spliterator.CONCURRENT) == 0
+ ? characteristics | Spliterator.SIZED | Spliterator.SUBSIZED
+ : characteristics;
}
/**
@@ -1949,7 +1955,9 @@
public LongIteratorSpliterator(PrimitiveIterator.OfLong iterator, long size, int characteristics) {
this.it = iterator;
this.est = size;
- this.characteristics = characteristics | Spliterator.SIZED | Spliterator.SUBSIZED;
+ this.characteristics = (characteristics & Spliterator.CONCURRENT) == 0
+ ? characteristics | Spliterator.SIZED | Spliterator.SUBSIZED
+ : characteristics;
}
/**
@@ -2041,7 +2049,9 @@
public DoubleIteratorSpliterator(PrimitiveIterator.OfDouble iterator, long size, int characteristics) {
this.it = iterator;
this.est = size;
- this.characteristics = characteristics | Spliterator.SIZED | Spliterator.SUBSIZED;
+ this.characteristics = (characteristics & Spliterator.CONCURRENT) == 0
+ ? characteristics | Spliterator.SIZED | Spliterator.SUBSIZED
+ : characteristics;
}
/**
--- a/jdk/src/share/classes/java/util/SplittableRandom.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/util/SplittableRandom.java Thu Oct 10 13:41:08 2013 -0700
@@ -25,8 +25,7 @@
package java.util;
-import java.security.SecureRandom;
-import java.net.InetAddress;
+import java.net.NetworkInterface;
import java.util.concurrent.atomic.AtomicLong;
import java.util.function.IntConsumer;
import java.util.function.LongConsumer;
@@ -242,12 +241,34 @@
s = (s << 8) | ((long)(seedBytes[i]) & 0xffL);
return s;
}
- int hh = 0; // hashed host address
+ long h = 0L;
try {
- hh = InetAddress.getLocalHost().hashCode();
+ Enumeration<NetworkInterface> ifcs =
+ NetworkInterface.getNetworkInterfaces();
+ boolean retry = false; // retry once if getHardwareAddress is null
+ while (ifcs.hasMoreElements()) {
+ NetworkInterface ifc = ifcs.nextElement();
+ if (!ifc.isVirtual()) { // skip fake addresses
+ byte[] bs = ifc.getHardwareAddress();
+ if (bs != null) {
+ int n = bs.length;
+ int m = Math.min(n >>> 1, 4);
+ for (int i = 0; i < m; ++i)
+ h = (h << 16) ^ (bs[i] << 8) ^ bs[n-1-i];
+ if (m < 4)
+ h = (h << 8) ^ bs[n-1-m];
+ h = mix64(h);
+ break;
+ }
+ else if (!retry)
+ retry = true;
+ else
+ break;
+ }
+ }
} catch (Exception ignore) {
}
- return (mix64((((long)hh) << 32) ^ System.currentTimeMillis()) ^
+ return (h ^ mix64(System.currentTimeMillis()) ^
mix64(System.nanoTime()));
}
--- a/jdk/src/share/classes/java/util/concurrent/ThreadLocalRandom.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/util/concurrent/ThreadLocalRandom.java Thu Oct 10 13:41:08 2013 -0700
@@ -36,6 +36,8 @@
package java.util.concurrent;
import java.io.ObjectStreamField;
+import java.net.NetworkInterface;
+import java.util.Enumeration;
import java.util.Random;
import java.util.Spliterator;
import java.util.concurrent.atomic.AtomicInteger;
@@ -71,7 +73,10 @@
*
* <p>Instances of {@code ThreadLocalRandom} are not cryptographically
* secure. Consider instead using {@link java.security.SecureRandom}
- * in security-sensitive applications.
+ * in security-sensitive applications. Additionally,
+ * default-constructed instances do not use a cryptographically random
+ * seed unless the {@linkplain System#getProperty system property}
+ * {@code java.util.secureRandomSeed} is set to {@code true}.
*
* @since 1.7
* @author Doug Lea
@@ -129,9 +134,49 @@
/**
* The next seed for default constructors.
*/
- private static final AtomicLong seeder =
- new AtomicLong(mix64(System.currentTimeMillis()) ^
- mix64(System.nanoTime()));
+ private static final AtomicLong seeder = new AtomicLong(initialSeed());
+
+ private static long initialSeed() {
+ String pp = java.security.AccessController.doPrivileged(
+ new sun.security.action.GetPropertyAction(
+ "java.util.secureRandomSeed"));
+ if (pp != null && pp.equalsIgnoreCase("true")) {
+ byte[] seedBytes = java.security.SecureRandom.getSeed(8);
+ long s = (long)(seedBytes[0]) & 0xffL;
+ for (int i = 1; i < 8; ++i)
+ s = (s << 8) | ((long)(seedBytes[i]) & 0xffL);
+ return s;
+ }
+ long h = 0L;
+ try {
+ Enumeration<NetworkInterface> ifcs =
+ NetworkInterface.getNetworkInterfaces();
+ boolean retry = false; // retry once if getHardwareAddress is null
+ while (ifcs.hasMoreElements()) {
+ NetworkInterface ifc = ifcs.nextElement();
+ if (!ifc.isVirtual()) { // skip fake addresses
+ byte[] bs = ifc.getHardwareAddress();
+ if (bs != null) {
+ int n = bs.length;
+ int m = Math.min(n >>> 1, 4);
+ for (int i = 0; i < m; ++i)
+ h = (h << 16) ^ (bs[i] << 8) ^ bs[n-1-i];
+ if (m < 4)
+ h = (h << 8) ^ bs[n-1-m];
+ h = mix64(h);
+ break;
+ }
+ else if (!retry)
+ retry = true;
+ else
+ break;
+ }
+ }
+ } catch (Exception ignore) {
+ }
+ return (h ^ mix64(System.currentTimeMillis()) ^
+ mix64(System.nanoTime()));
+ }
/**
* The seed increment
--- a/jdk/src/share/classes/java/util/regex/Pattern.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/java/util/regex/Pattern.java Thu Oct 10 13:41:08 2013 -0700
@@ -5755,7 +5755,8 @@
* input sequence that is terminated by another subsequence that matches
* this pattern or is terminated by the end of the input sequence. The
* substrings in the stream are in the order in which they occur in the
- * input.
+ * input. Trailing empty strings will be discarded and not encountered in
+ * the stream.
*
* <p> If this pattern does not match any subsequence of the input then
* the resulting stream has just one element, namely the input sequence in
@@ -5781,6 +5782,8 @@
private int current;
// null if the next element, if any, needs to obtained
private String nextElement;
+ // > 0 if there are N next empty elements
+ private int emptyElementCount;
MatcherIterator() {
this.matcher = matcher(input);
@@ -5790,26 +5793,46 @@
if (!hasNext())
throw new NoSuchElementException();
- String n = nextElement;
- nextElement = null;
- return n;
+ if (emptyElementCount == 0) {
+ String n = nextElement;
+ nextElement = null;
+ return n;
+ } else {
+ emptyElementCount--;
+ return "";
+ }
}
public boolean hasNext() {
- if (nextElement != null)
+ if (nextElement != null || emptyElementCount > 0)
return true;
if (current == input.length())
return false;
- if (matcher.find()) {
+ // Consume the next matching element
+ // Count sequence of matching empty elements
+ while (matcher.find()) {
nextElement = input.subSequence(current, matcher.start()).toString();
current = matcher.end();
+ if (!nextElement.isEmpty()) {
+ return true;
+ } else {
+ emptyElementCount++;
+ }
+ }
+
+ // Consume last matching element
+ nextElement = input.subSequence(current, input.length()).toString();
+ current = input.length();
+ if (!nextElement.isEmpty()) {
+ return true;
} else {
- nextElement = input.subSequence(current, input.length()).toString();
- current = input.length();
+ // Ignore a terminal sequence of matching empty elements
+ emptyElementCount = 0;
+ nextElement = null;
+ return false;
}
- return true;
}
}
return StreamSupport.stream(Spliterators.spliteratorUnknownSize(
--- a/jdk/src/share/classes/javax/management/MBeanAttributeInfo.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/management/MBeanAttributeInfo.java Thu Oct 10 13:41:08 2013 -0700
@@ -286,10 +286,10 @@
if (!(o instanceof MBeanAttributeInfo))
return false;
MBeanAttributeInfo p = (MBeanAttributeInfo) o;
- return (p.getName().equals(getName()) &&
- p.getType().equals(getType()) &&
- p.getDescription().equals(getDescription()) &&
- p.getDescriptor().equals(getDescriptor()) &&
+ return (Objects.equals(p.getName(), getName()) &&
+ Objects.equals(p.getType(), getType()) &&
+ Objects.equals(p.getDescription(), getDescription()) &&
+ Objects.equals(p.getDescriptor(), getDescriptor()) &&
p.isReadable() == isReadable() &&
p.isWritable() == isWritable() &&
p.isIs() == isIs());
--- a/jdk/src/share/classes/javax/management/MBeanConstructorInfo.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/management/MBeanConstructorInfo.java Thu Oct 10 13:41:08 2013 -0700
@@ -191,10 +191,10 @@
if (!(o instanceof MBeanConstructorInfo))
return false;
MBeanConstructorInfo p = (MBeanConstructorInfo) o;
- return (p.getName().equals(getName()) &&
- p.getDescription().equals(getDescription()) &&
+ return (Objects.equals(p.getName(), getName()) &&
+ Objects.equals(p.getDescription(), getDescription()) &&
Arrays.equals(p.fastGetSignature(), fastGetSignature()) &&
- p.getDescriptor().equals(getDescriptor()));
+ Objects.equals(p.getDescriptor(), getDescriptor()));
}
/* Unlike attributes and operations, it's quite likely we'll have
--- a/jdk/src/share/classes/javax/management/MBeanFeatureInfo.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/management/MBeanFeatureInfo.java Thu Oct 10 13:41:08 2013 -0700
@@ -30,6 +30,7 @@
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.io.StreamCorruptedException;
+import java.util.Objects;
/**
* <p>Provides general information for an MBean descriptor object.
@@ -147,9 +148,9 @@
if (!(o instanceof MBeanFeatureInfo))
return false;
MBeanFeatureInfo p = (MBeanFeatureInfo) o;
- return (p.getName().equals(getName()) &&
- p.getDescription().equals(getDescription()) &&
- p.getDescriptor().equals(getDescriptor()));
+ return (Objects.equals(p.getName(), getName()) &&
+ Objects.equals(p.getDescription(), getDescription()) &&
+ Objects.equals(p.getDescriptor(), getDescriptor()));
}
public int hashCode() {
--- a/jdk/src/share/classes/javax/management/MBeanNotificationInfo.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/management/MBeanNotificationInfo.java Thu Oct 10 13:41:08 2013 -0700
@@ -26,6 +26,7 @@
package javax.management;
import java.util.Arrays;
+import java.util.Objects;
/**
* <p>The <CODE>MBeanNotificationInfo</CODE> class is used to describe the
@@ -191,9 +192,9 @@
if (!(o instanceof MBeanNotificationInfo))
return false;
MBeanNotificationInfo p = (MBeanNotificationInfo) o;
- return (p.getName().equals(getName()) &&
- p.getDescription().equals(getDescription()) &&
- p.getDescriptor().equals(getDescriptor()) &&
+ return (Objects.equals(p.getName(), getName()) &&
+ Objects.equals(p.getDescription(), getDescription()) &&
+ Objects.equals(p.getDescriptor(), getDescriptor()) &&
Arrays.equals(p.fastGetNotifTypes(), fastGetNotifTypes()));
}
--- a/jdk/src/share/classes/javax/management/MBeanOperationInfo.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/management/MBeanOperationInfo.java Thu Oct 10 13:41:08 2013 -0700
@@ -294,12 +294,12 @@
if (!(o instanceof MBeanOperationInfo))
return false;
MBeanOperationInfo p = (MBeanOperationInfo) o;
- return (p.getName().equals(getName()) &&
- p.getReturnType().equals(getReturnType()) &&
- p.getDescription().equals(getDescription()) &&
+ return (Objects.equals(p.getName(), getName()) &&
+ Objects.equals(p.getReturnType(), getReturnType()) &&
+ Objects.equals(p.getDescription(), getDescription()) &&
p.getImpact() == getImpact() &&
Arrays.equals(p.fastGetSignature(), fastGetSignature()) &&
- p.getDescriptor().equals(getDescriptor()));
+ Objects.equals(p.getDescriptor(), getDescriptor()));
}
/* We do not include everything in the hashcode. We assume that
--- a/jdk/src/share/classes/javax/management/MBeanParameterInfo.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/management/MBeanParameterInfo.java Thu Oct 10 13:41:08 2013 -0700
@@ -27,6 +27,7 @@
import java.util.Objects;
+
/**
* Describes an argument of an operation exposed by an MBean.
* Instances of this class are immutable. Subclasses may be mutable
@@ -137,10 +138,10 @@
if (!(o instanceof MBeanParameterInfo))
return false;
MBeanParameterInfo p = (MBeanParameterInfo) o;
- return (p.getName().equals(getName()) &&
- p.getType().equals(getType()) &&
- p.getDescription().equals(getDescription()) &&
- p.getDescriptor().equals(getDescriptor()));
+ return (Objects.equals(p.getName(), getName()) &&
+ Objects.equals(p.getType(), getType()) &&
+ Objects.equals(p.getDescription(), getDescription()) &&
+ Objects.equals(p.getDescriptor(), getDescriptor()));
}
public int hashCode() {
--- a/jdk/src/share/classes/javax/sound/sampled/AudioFileFormat.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/sound/sampled/AudioFileFormat.java Thu Oct 10 13:41:08 2013 -0700
@@ -57,7 +57,7 @@
* be used in implementations:
*
* <table border=1>
- * <caption>Audio File Format Property Keys</caption>
+ * <caption>Audio File Format Properties</caption>
* <tr>
* <th>Property key</th>
* <th>Value type</th>
--- a/jdk/src/share/classes/javax/sound/sampled/AudioFormat.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/sound/sampled/AudioFormat.java Thu Oct 10 13:41:08 2013 -0700
@@ -85,7 +85,7 @@
* service providers should use, if applicable:
*
* <table border=0>
- * <caption>Audio Format Property Keys</caption>
+ * <caption>Audio Format Properties</caption>
* <tr>
* <th>Property key</th>
* <th>Value type</th>
--- a/jdk/src/share/classes/javax/swing/JButton.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/JButton.java Thu Oct 10 13:41:08 2013 -0700
@@ -149,7 +149,7 @@
/**
- * Returns a string that specifies the name of the L&F class
+ * Returns a string that specifies the name of the L&F class
* that renders this component.
*
* @return the string "ButtonUI"
@@ -157,7 +157,7 @@
* @see UIDefaults#getUI
* @beaninfo
* expert: true
- * description: A string that specifies the name of the L&F class.
+ * description: A string that specifies the name of the L&F class.
*/
public String getUIClassID() {
return uiClassID;
--- a/jdk/src/share/classes/javax/swing/JCheckBox.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/JCheckBox.java Thu Oct 10 13:41:08 2013 -0700
@@ -230,7 +230,7 @@
/**
- * Returns a string that specifies the name of the L&F class
+ * Returns a string that specifies the name of the L&F class
* that renders this component.
*
* @return the string "CheckBoxUI"
@@ -238,7 +238,7 @@
* @see UIDefaults#getUI
* @beaninfo
* expert: true
- * description: A string that specifies the name of the L&F class
+ * description: A string that specifies the name of the L&F class
*/
public String getUIClassID() {
return uiClassID;
--- a/jdk/src/share/classes/javax/swing/JCheckBoxMenuItem.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/JCheckBoxMenuItem.java Thu Oct 10 13:41:08 2013 -0700
@@ -168,7 +168,7 @@
}
/**
- * Returns the name of the L&F class
+ * Returns the name of the L&F class
* that renders this component.
*
* @return "CheckBoxMenuItemUI"
--- a/jdk/src/share/classes/javax/swing/JColorChooser.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/JColorChooser.java Thu Oct 10 13:41:08 2013 -0700
@@ -216,7 +216,7 @@
}
/**
- * Returns the L&F object that renders this component.
+ * Returns the L&F object that renders this component.
*
* @return the <code>ColorChooserUI</code> object that renders
* this component
@@ -226,9 +226,9 @@
}
/**
- * Sets the L&F object that renders this component.
+ * Sets the L&F object that renders this component.
*
- * @param ui the <code>ColorChooserUI</code> L&F object
+ * @param ui the <code>ColorChooserUI</code> L&F object
* @see UIDefaults#getUI
*
* @beaninfo
@@ -241,7 +241,7 @@
}
/**
- * Notification from the <code>UIManager</code> that the L&F has changed.
+ * Notification from the <code>UIManager</code> that the L&F has changed.
* Replaces the current UI object with the latest version from the
* <code>UIManager</code>.
*
@@ -252,7 +252,7 @@
}
/**
- * Returns the name of the L&F class that renders this component.
+ * Returns the name of the L&F class that renders this component.
*
* @return the string "ColorChooserUI"
* @see JComponent#getUIClassID
--- a/jdk/src/share/classes/javax/swing/JComboBox.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/JComboBox.java Thu Oct 10 13:41:08 2013 -0700
@@ -242,9 +242,9 @@
}
/**
- * Sets the L&F object that renders this component.
+ * Sets the L&F object that renders this component.
*
- * @param ui the <code>ComboBoxUI</code> L&F object
+ * @param ui the <code>ComboBoxUI</code> L&F object
* @see UIDefaults#getUI
*
* @beaninfo
@@ -273,7 +273,7 @@
/**
- * Returns the name of the L&F class that renders this component.
+ * Returns the name of the L&F class that renders this component.
*
* @return the string "ComboBoxUI"
* @see JComponent#getUIClassID
@@ -285,7 +285,7 @@
/**
- * Returns the L&F object that renders this component.
+ * Returns the L&F object that renders this component.
*
* @return the ComboBoxUI object that renders this component
*/
@@ -607,7 +607,7 @@
*
* @param anIndex an integer specifying the list item to select,
* where 0 specifies the first item in the list and -1 indicates no selection
- * @exception IllegalArgumentException if <code>anIndex</code> < -1 or
+ * @exception IllegalArgumentException if <code>anIndex</code> < -1 or
* <code>anIndex</code> is greater than or equal to size
* @beaninfo
* preferred: true
--- a/jdk/src/share/classes/javax/swing/JComponent.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/JComponent.java Thu Oct 10 13:41:08 2013 -0700
@@ -86,7 +86,7 @@
* <ul>
* <li>The base class for both standard and custom components
* that use the Swing architecture.
- * <li>A "pluggable look and feel" (L&F) that can be specified by the
+ * <li>A "pluggable look and feel" (L&F) that can be specified by the
* programmer or (optionally) selected by the user at runtime.
* The look and feel for each component is provided by a
* <em>UI delegate</em> -- an object that descends from
@@ -4523,7 +4523,7 @@
* @param propertyName the name of the property that was listened on
* @param oldValue the old value of the property
* @param newValue the new value of the property
- * @exception PropertyVetoException when the attempt to set the
+ * @exception java.beans.PropertyVetoException when the attempt to set the
* property is vetoed by the component
*/
protected void fireVetoableChange(String propertyName, Object oldValue, Object newValue)
--- a/jdk/src/share/classes/javax/swing/JDesktopPane.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/JDesktopPane.java Thu Oct 10 13:41:08 2013 -0700
@@ -50,13 +50,13 @@
* <code>JLayeredPane</code> to manage the potentially overlapping internal
* frames. It also maintains a reference to an instance of
* <code>DesktopManager</code> that is set by the UI
- * class for the current look and feel (L&F). Note that <code>JDesktopPane</code>
+ * class for the current look and feel (L&F). Note that <code>JDesktopPane</code>
* does not support borders.
* <p>
* This class is normally used as the parent of <code>JInternalFrames</code>
* to provide a pluggable <code>DesktopManager</code> object to the
* <code>JInternalFrames</code>. The <code>installUI</code> of the
- * L&F specific implementation is responsible for setting the
+ * L&F specific implementation is responsible for setting the
* <code>desktopManager</code> variable appropriately.
* When the parent of a <code>JInternalFrame</code> is a <code>JDesktopPane</code>,
* it should delegate most of its behavior to the <code>desktopManager</code>
@@ -146,7 +146,7 @@
}
/**
- * Returns the L&F object that renders this component.
+ * Returns the L&F object that renders this component.
*
* @return the <code>DesktopPaneUI</code> object that
* renders this component
@@ -156,9 +156,9 @@
}
/**
- * Sets the L&F object that renders this component.
+ * Sets the L&F object that renders this component.
*
- * @param ui the DesktopPaneUI L&F object
+ * @param ui the DesktopPaneUI L&F object
* @see UIDefaults#getUI
* @beaninfo
* bound: true
@@ -232,7 +232,7 @@
}
/**
- * Notification from the <code>UIManager</code> that the L&F has changed.
+ * Notification from the <code>UIManager</code> that the L&F has changed.
* Replaces the current UI object with the latest version from the
* <code>UIManager</code>.
*
@@ -244,7 +244,7 @@
/**
- * Returns the name of the L&F class that renders this component.
+ * Returns the name of the L&F class that renders this component.
*
* @return the string "DesktopPaneUI"
* @see JComponent#getUIClassID
--- a/jdk/src/share/classes/javax/swing/JFileChooser.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/JFileChooser.java Thu Oct 10 13:41:08 2013 -0700
@@ -362,6 +362,7 @@
*/
protected void setup(FileSystemView view) {
installShowFilesListener();
+ installHierarchyListener();
if(view == null) {
view = FileSystemView.getFileSystemView();
@@ -374,6 +375,22 @@
enableEvents(AWTEvent.MOUSE_EVENT_MASK);
}
+ private void installHierarchyListener() {
+ addHierarchyListener(new HierarchyListener() {
+ @Override
+ public void hierarchyChanged(HierarchyEvent e) {
+ if ((e.getChangeFlags() & HierarchyEvent.PARENT_CHANGED)
+ == HierarchyEvent.PARENT_CHANGED) {
+ JFileChooser fc = JFileChooser.this;
+ JRootPane rootPane = SwingUtilities.getRootPane(fc);
+ if (rootPane != null) {
+ rootPane.setDefaultButton(fc.getUI().getDefaultButton(fc));
+ }
+ }
+ }
+ });
+ }
+
private void installShowFilesListener() {
// Track native setting for showing hidden files
Toolkit tk = Toolkit.getDefaultToolkit();
@@ -801,7 +818,6 @@
dialog.getRootPane().setWindowDecorationStyle(JRootPane.FILE_CHOOSER_DIALOG);
}
}
- dialog.getRootPane().setDefaultButton(ui.getDefaultButton(this));
dialog.pack();
dialog.setLocationRelativeTo(parent);
--- a/jdk/src/share/classes/javax/swing/JLayer.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/JLayer.java Thu Oct 10 13:41:08 2013 -0700
@@ -44,16 +44,16 @@
* {@code JLayer} is a universal decorator for Swing components
* which enables you to implement various advanced painting effects as well as
* receive notifications of all {@code AWTEvent}s generated within its borders.
- * <p/>
+ * <p>
* {@code JLayer} delegates the handling of painting and input events to a
* {@link javax.swing.plaf.LayerUI} object, which performs the actual decoration.
- * <p/>
+ * <p>
* The custom painting implemented in the {@code LayerUI} and events notification
* work for the JLayer itself and all its subcomponents.
* This combination enables you to enrich existing components
* by adding new advanced functionality such as temporary locking of a hierarchy,
* data tips for compound components, enhanced mouse scrolling etc and so on.
- * <p/>
+ * <p>
* {@code JLayer} is a good solution if you only need to do custom painting
* over compound component or catch input events from its subcomponents.
* <pre>
@@ -202,7 +202,7 @@
/**
* Returns the {@code JLayer}'s view component or {@code null}.
- * <br/>This is a bound property.
+ * <br>This is a bound property.
*
* @return the {@code JLayer}'s view component
* or {@code null} if none exists
@@ -215,7 +215,7 @@
/**
* Sets the {@code JLayer}'s view component, which can be {@code null}.
- * <br/>This is a bound property.
+ * <br>This is a bound property.
*
* @param view the view component for this {@code JLayer}
*
@@ -257,7 +257,7 @@
/**
* Returns the {@code JLayer}'s glassPane component or {@code null}.
- * <br/>This is a bound property.
+ * <br>This is a bound property.
*
* @return the {@code JLayer}'s glassPane component
* or {@code null} if none exists
@@ -270,7 +270,7 @@
/**
* Sets the {@code JLayer}'s glassPane component, which can be {@code null}.
- * <br/>This is a bound property.
+ * <br>This is a bound property.
*
* @param glassPane the glassPane component of this {@code JLayer}
*
@@ -309,7 +309,7 @@
/**
* Sets the layout manager for this container. This method is
* overridden to prevent the layout manager from being set.
- * <p/>Note: If {@code mgr} is non-{@code null}, this
+ * <p>Note: If {@code mgr} is non-{@code null}, this
* method will throw an exception as layout managers are not supported on
* a {@code JLayer}.
*
@@ -327,7 +327,7 @@
* of this component from becoming complex enough to inhibit
* subclassing of {@code LayerUI} class. To create a {@code JLayer} with a border,
* add it to a {@code JPanel} that has a border.
- * <p/>Note: If {@code border} is non-{@code null}, this
+ * <p>Note: If {@code border} is non-{@code null}, this
* method will throw an exception as borders are not supported on
* a {@code JLayer}.
*
@@ -471,11 +471,11 @@
* defined by the specified event mask parameter
* to be delivered to the
* {@link LayerUI#eventDispatched(AWTEvent, JLayer)} method.
- * <p/>
+ * <p>
* Events are delivered provided that {@code LayerUI} is set
* for this {@code JLayer} and the {@code JLayer}
* is displayable.
- * <p/>
+ * <p>
* The following example shows how to correctly use this method
* in the {@code LayerUI} implementations:
* <pre>
@@ -519,10 +519,10 @@
/**
* Returns the bitmap of event mask to receive by this {@code JLayer}
* and its {@code LayerUI}.
- * <p/>
+ * <p>
* It means that {@link javax.swing.plaf.LayerUI#eventDispatched(AWTEvent, JLayer)} method
* will only receive events that match the event mask.
- * <p/>
+ * <p>
* By default {@code JLayer} receives no events.
*
* @return the bitmask of event types to receive for this {@code JLayer}
@@ -543,7 +543,7 @@
/**
* Returns the preferred size of the viewport for a view component.
- * <p/>
+ * <p>
* If the view component of this layer implements {@link Scrollable}, this method delegates its
* implementation to the view component.
*
@@ -562,7 +562,7 @@
* Returns a scroll increment, which is required for components
* that display logical rows or columns in order to completely expose
* one block of rows or columns, depending on the value of orientation.
- * <p/>
+ * <p>
* If the view component of this layer implements {@link Scrollable}, this method delegates its
* implementation to the view component.
*
@@ -584,7 +584,7 @@
* Returns {@code false} to indicate that the height of the viewport does not
* determine the height of the layer, unless the preferred height
* of the layer is smaller than the height of the viewport.
- * <p/>
+ * <p>
* If the view component of this layer implements {@link Scrollable}, this method delegates its
* implementation to the view component.
*
@@ -603,7 +603,7 @@
* Returns {@code false} to indicate that the width of the viewport does not
* determine the width of the layer, unless the preferred width
* of the layer is smaller than the width of the viewport.
- * <p/>
+ * <p>
* If the view component of this layer implements {@link Scrollable}, this method delegates its
* implementation to the view component.
*
@@ -624,10 +624,10 @@
* one new row or column, depending on the value of orientation.
* Ideally, components should handle a partially exposed row or column
* by returning the distance required to completely expose the item.
- * <p/>
+ * <p>
* Scrolling containers, like {@code JScrollPane}, will use this method
* each time the user requests a unit scroll.
- * <p/>
+ * <p>
* If the view component of this layer implements {@link Scrollable}, this method delegates its
* implementation to the view component.
*
--- a/jdk/src/share/classes/javax/swing/JMenuItem.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/JMenuItem.java Thu Oct 10 13:41:08 2013 -0700
@@ -229,7 +229,7 @@
/**
* Sets the look and feel object that renders this component.
*
- * @param ui the <code>JMenuItemUI</code> L&F object
+ * @param ui the <code>JMenuItemUI</code> L&F object
* @see UIDefaults#getUI
* @beaninfo
* bound: true
@@ -252,7 +252,7 @@
/**
- * Returns the suffix used to construct the name of the L&F class used to
+ * Returns the suffix used to construct the name of the L&F class used to
* render this component.
*
* @return the string "MenuItemUI"
--- a/jdk/src/share/classes/javax/swing/JPanel.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/JPanel.java Thu Oct 10 13:41:08 2013 -0700
@@ -127,7 +127,7 @@
}
/**
- * Returns the look and feel (L&F) object that renders this component.
+ * Returns the look and feel (L&amp;F) object that renders this component.
*
* @return the PanelUI object that renders this component
* @since 1.4
@@ -138,9 +138,9 @@
/**
- * Sets the look and feel (L&F) object that renders this component.
+ * Sets the look and feel (L&F) object that renders this component.
*
- * @param ui the PanelUI L&F object
+ * @param ui the PanelUI L&F object
* @see UIDefaults#getUI
* @since 1.4
* @beaninfo
@@ -154,7 +154,7 @@
}
/**
- * Returns a string that specifies the name of the L&F class
+ * Returns a string that specifies the name of the L&F class
* that renders this component.
*
* @return "PanelUI"
@@ -162,7 +162,7 @@
* @see UIDefaults#getUI
* @beaninfo
* expert: true
- * description: A string that specifies the name of the L&F class.
+ * description: A string that specifies the name of the L&F class.
*/
public String getUIClassID() {
return uiClassID;
--- a/jdk/src/share/classes/javax/swing/JPasswordField.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/JPasswordField.java Thu Oct 10 13:41:08 2013 -0700
@@ -101,7 +101,7 @@
* number of columns. A default model is created, and the initial string
* is set to <code>null</code>.
*
- * @param columns the number of columns >= 0
+ * @param columns the number of columns >= 0
*/
public JPasswordField(int columns) {
this(null, null, columns);
@@ -113,7 +113,7 @@
* the default.
*
* @param text the text to be displayed, <code>null</code> if none
- * @param columns the number of columns >= 0
+ * @param columns the number of columns >= 0
*/
public JPasswordField(String text, int columns) {
this(null, text, columns);
@@ -130,7 +130,7 @@
* @param doc the text storage to use
* @param txt the text to be displayed, <code>null</code> if none
* @param columns the number of columns to use to calculate
- * the preferred width >= 0; if columns is set to zero, the
+ * the preferred width >= 0; if columns is set to zero, the
* preferred width will be whatever naturally results from
* the component implementation
*/
@@ -143,7 +143,7 @@
}
/**
- * Returns the name of the L&F class that renders this component.
+ * Returns the name of the L&F class that renders this component.
*
* @return the string "PasswordFieldUI"
* @see JComponent#getUIClassID
@@ -271,8 +271,8 @@
* <code>getPassword</code> method instead.
* @deprecated As of Java 2 platform v1.2,
* replaced by <code>getPassword</code>.
- * @param offs the offset >= 0
- * @param len the length >= 0
+ * @param offs the offset >= 0
+ * @param len the length >= 0
* @return the text
* @exception BadLocationException if the offset or length are invalid
*/
--- a/jdk/src/share/classes/javax/swing/JPopupMenu.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/JPopupMenu.java Thu Oct 10 13:41:08 2013 -0700
@@ -196,7 +196,7 @@
/**
- * Returns the look and feel (L&F) object that renders this component.
+ * Returns the look and feel (L&F) object that renders this component.
*
* @return the <code>PopupMenuUI</code> object that renders this component
*/
@@ -205,9 +205,9 @@
}
/**
- * Sets the L&F object that renders this component.
+ * Sets the L&F object that renders this component.
*
- * @param ui the new <code>PopupMenuUI</code> L&F object
+ * @param ui the new <code>PopupMenuUI</code> L&F object
* @see UIDefaults#getUI
* @beaninfo
* bound: true
@@ -230,7 +230,7 @@
/**
- * Returns the name of the L&F class that renders this component.
+ * Returns the name of the L&F class that renders this component.
*
* @return the string "PopupMenuUI"
* @see JComponent#getUIClassID
@@ -461,7 +461,7 @@
*
* @param pos the position of the item to be removed
* @exception IllegalArgumentException if the value of
- * <code>pos</code> < 0, or if the value of
+ * <code>pos</code> < 0, or if the value of
* <code>pos</code> is greater than the
* number of items
*/
@@ -560,7 +560,7 @@
* @param a the <code>Action</code> object to insert
* @param index specifies the position at which to insert the
* <code>Action</code>, where 0 is the first
- * @exception IllegalArgumentException if <code>index</code> < 0
+ * @exception IllegalArgumentException if <code>index</code> < 0
* @see Action
*/
public void insert(Action a, int index) {
@@ -576,7 +576,7 @@
* @param component the <code>Component</code> to insert
* @param index specifies the position at which
* to insert the component, where 0 is the first
- * @exception IllegalArgumentException if <code>index</code> < 0
+ * @exception IllegalArgumentException if <code>index</code> < 0
*/
public void insert(Component component, int index) {
if (index < 0) {
@@ -1535,7 +1535,7 @@
}
/**
- * Returns the name of the L&F class that renders this component.
+ * Returns the name of the L&F class that renders this component.
*
* @return the string "PopupMenuSeparatorUI"
* @see JComponent#getUIClassID
--- a/jdk/src/share/classes/javax/swing/JRadioButton.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/JRadioButton.java Thu Oct 10 13:41:08 2013 -0700
@@ -193,7 +193,7 @@
/**
- * Returns the name of the L&F class
+ * Returns the name of the L&F class
* that renders this component.
*
* @return String "RadioButtonUI"
@@ -201,7 +201,7 @@
* @see UIDefaults#getUI
* @beaninfo
* expert: true
- * description: A string that specifies the name of the L&F class.
+ * description: A string that specifies the name of the L&F class.
*/
public String getUIClassID() {
return uiClassID;
--- a/jdk/src/share/classes/javax/swing/JRadioButtonMenuItem.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/JRadioButtonMenuItem.java Thu Oct 10 13:41:08 2013 -0700
@@ -181,7 +181,7 @@
}
/**
- * Returns the name of the L&F class that renders this component.
+ * Returns the name of the L&F class that renders this component.
*
* @return the string "RadioButtonMenuItemUI"
* @see JComponent#getUIClassID
--- a/jdk/src/share/classes/javax/swing/JRootPane.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/JRootPane.java Thu Oct 10 13:41:08 2013 -0700
@@ -448,7 +448,7 @@
}
/**
- * Returns the L&F object that renders this component.
+ * Returns the L&F object that renders this component.
*
* @return <code>LabelUI</code> object
* @since 1.3
@@ -458,9 +458,9 @@
}
/**
- * Sets the L&F object that renders this component.
+ * Sets the L&F object that renders this component.
*
- * @param ui the <code>LabelUI</code> L&F object
+ * @param ui the <code>LabelUI</code> L&F object
* @see UIDefaults#getUI
* @beaninfo
* bound: true
@@ -486,7 +486,7 @@
/**
- * Returns a string that specifies the name of the L&F class
+ * Returns a string that specifies the name of the L&F class
* that renders this component.
*
* @return the string "RootPaneUI"
--- a/jdk/src/share/classes/javax/swing/JScrollBar.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/JScrollBar.java Thu Oct 10 13:41:08 2013 -0700
@@ -344,6 +344,9 @@
* that override this method and delegate to the viewports
* Scrollable view, if it has one. The Scrollable interface
* provides a more specialized version of this method.
+ * <p>
+ * Some look and feels implement custom scrolling behavior
+ * and ignore this property.
*
* @param direction is -1 or 1 for up/down respectively
* @return the value of the unitIncrement property
@@ -361,6 +364,10 @@
* <p>
* Note, that if the argument is equal to the value of Integer.MIN_VALUE,
* the most look and feels will not provide the scrolling to the right/down.
+ * <p>
+ * Some look and feels implement custom scrolling behavior
+ * and ignore this property.
+ *
* @see #getUnitIncrement
* @beaninfo
* preferred: true
@@ -387,6 +394,9 @@
* that override this method and delegate to the viewports
* Scrollable view, if it has one. The Scrollable interface
* provides a more specialized version of this method.
+ * <p>
+ * Some look and feels implement custom scrolling behavior
+ * and ignore this property.
*
* @param direction is -1 or 1 for up/down respectively
* @return the value of the blockIncrement property
@@ -404,6 +414,10 @@
* <p>
* Note, that if the argument is equal to the value of Integer.MIN_VALUE,
* the most look and feels will not provide the scrolling to the right/down.
+ * <p>
+ * Some look and feels implement custom scrolling behavior
+ * and ignore this property.
+ *
* @see #getBlockIncrement()
* @beaninfo
* preferred: true
--- a/jdk/src/share/classes/javax/swing/JScrollPane.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/JScrollPane.java Thu Oct 10 13:41:08 2013 -0700
@@ -353,7 +353,7 @@
/**
- * Returns the look and feel (L&F) object that renders this component.
+ * Returns the look and feel (L&F) object that renders this component.
*
* @return the <code>ScrollPaneUI</code> object that renders this
* component
@@ -371,9 +371,9 @@
/**
* Sets the <code>ScrollPaneUI</code> object that provides the
- * look and feel (L&F) for this component.
+ * look and feel (L&F) for this component.
*
- * @param ui the <code>ScrollPaneUI</code> L&F object
+ * @param ui the <code>ScrollPaneUI</code> L&F object
* @see #getUI
*/
public void setUI(ScrollPaneUI ui) {
@@ -395,7 +395,7 @@
/**
- * Returns the suffix used to construct the name of the L&F class used to
+ * Returns the suffix used to construct the name of the L&F class used to
* render this component.
*
* @return the string "ScrollPaneUI"
--- a/jdk/src/share/classes/javax/swing/JSeparator.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/JSeparator.java Thu Oct 10 13:41:08 2013 -0700
@@ -108,7 +108,7 @@
}
/**
- * Returns the L&F object that renders this component.
+ * Returns the L&F object that renders this component.
*
* @return the SeparatorUI object that renders this component
*/
@@ -117,9 +117,9 @@
}
/**
- * Sets the L&F object that renders this component.
+ * Sets the L&F object that renders this component.
*
- * @param ui the SeparatorUI L&F object
+ * @param ui the SeparatorUI L&F object
* @see UIDefaults#getUI
* @beaninfo
* bound: true
@@ -142,7 +142,7 @@
/**
- * Returns the name of the L&F class that renders this component.
+ * Returns the name of the L&F class that renders this component.
*
* @return the string "SeparatorUI"
* @see JComponent#getUIClassID
--- a/jdk/src/share/classes/javax/swing/JSlider.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/JSlider.java Thu Oct 10 13:41:08 2013 -0700
@@ -289,9 +289,9 @@
/**
- * Gets the UI object which implements the L&F for this component.
+ * Gets the UI object which implements the L&F for this component.
*
- * @return the SliderUI object that implements the Slider L&F
+ * @return the SliderUI object that implements the Slider L&F
*/
public SliderUI getUI() {
return(SliderUI)ui;
@@ -299,9 +299,9 @@
/**
- * Sets the UI object which implements the L&F for this component.
+ * Sets the UI object which implements the L&F for this component.
*
- * @param ui the SliderUI L&F object
+ * @param ui the SliderUI L&F object
* @see UIDefaults#getUI
* @beaninfo
* bound: true
@@ -330,7 +330,7 @@
/**
- * Returns the name of the L&F class that renders this component.
+ * Returns the name of the L&F class that renders this component.
*
* @return "SliderUI"
* @see JComponent#getUIClassID
--- a/jdk/src/share/classes/javax/swing/JSpinner.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/JSpinner.java Thu Oct 10 13:41:08 2013 -0700
@@ -171,7 +171,7 @@
/**
- * Returns the look and feel (L&F) object that renders this component.
+ * Returns the look and feel (L&F) object that renders this component.
*
* @return the <code>SpinnerUI</code> object that renders this component
*/
@@ -181,9 +181,9 @@
/**
- * Sets the look and feel (L&F) object that renders this component.
+ * Sets the look and feel (L&F) object that renders this component.
*
- * @param ui the <code>SpinnerUI</code> L&F object
+ * @param ui the <code>SpinnerUI</code> L&F object
* @see UIDefaults#getUI
*/
public void setUI(SpinnerUI ui) {
@@ -193,7 +193,7 @@
/**
* Returns the suffix used to construct the name of the look and feel
- * (L&F) class used to render this component.
+ * (L&F) class used to render this component.
*
* @return the string "SpinnerUI"
* @see JComponent#getUIClassID
--- a/jdk/src/share/classes/javax/swing/JSplitPane.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/JSplitPane.java Thu Oct 10 13:41:08 2013 -0700
@@ -359,9 +359,9 @@
/**
- * Sets the L&F object that renders this component.
+ * Sets the L&F object that renders this component.
*
- * @param ui the <code>SplitPaneUI</code> L&F object
+ * @param ui the <code>SplitPaneUI</code> L&F object
* @see UIDefaults#getUI
* @beaninfo
* bound: true
@@ -384,7 +384,7 @@
* @return the <code>SplitPaneUI</code> object that renders this component
* @beaninfo
* expert: true
- * description: The L&F object that renders this component.
+ * description: The L&F object that renders this component.
*/
public SplitPaneUI getUI() {
return (SplitPaneUI)ui;
@@ -392,7 +392,7 @@
/**
- * Notification from the <code>UIManager</code> that the L&F has changed.
+ * Notification from the <code>UIManager</code> that the L&F has changed.
* Replaces the current UI object with the latest version from the
* <code>UIManager</code>.
*
@@ -405,14 +405,14 @@
/**
- * Returns the name of the L&F class that renders this component.
+ * Returns the name of the L&F class that renders this component.
*
* @return the string "SplitPaneUI"
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
* @beaninfo
* expert: true
- * description: A string that specifies the name of the L&F class.
+ * description: A string that specifies the name of the L&F class.
*/
public String getUIClassID() {
return uiClassID;
@@ -714,7 +714,7 @@
* extra space.
*
* @param value as described above
- * @exception IllegalArgumentException if <code>value</code> is < 0 or > 1
+ * @exception IllegalArgumentException if <code>value</code> is < 0 or > 1
* @since 1.3
* @beaninfo
* bound: true
@@ -769,8 +769,8 @@
* @param proportionalLocation a double-precision floating point value
* that specifies a percentage, from zero (top/left) to 1.0
* (bottom/right)
- * @exception IllegalArgumentException if the specified location is < 0
- * or > 1.0
+ * @exception IllegalArgumentException if the specified location is < 0
+ * or > 1.0
* @beaninfo
* description: The location of the divider.
*/
@@ -845,7 +845,7 @@
* location (typically a pixel count); or -1 if the UI is
* <code>null</code>
* @beaninfo
- * description: The minimum location of the divider from the L&F.
+ * description: The minimum location of the divider from the L&F.
*/
public int getMinimumDividerLocation() {
SplitPaneUI ui = getUI();
--- a/jdk/src/share/classes/javax/swing/JTable.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/JTable.java Thu Oct 10 13:41:08 2013 -0700
@@ -1945,7 +1945,7 @@
* Sets the table's selection mode to allow only single selections, a single
* contiguous interval, or multiple intervals.
* <P>
- * <bold>Note:</bold>
+ * <b>Note:</b>
* <code>JTable</code> provides all the methods for handling
* column and row selection. When setting states,
* such as <code>setSelectionMode</code>, it not only
@@ -2061,7 +2061,7 @@
/**
* Returns true if both row and column selection models are enabled.
- * Equivalent to <code>getRowSelectionAllowed() &&
+ * Equivalent to <code>getRowSelectionAllowed() &&
* getColumnSelectionAllowed()</code>.
*
* @return true if both row and column selection models are enabled
@@ -3034,7 +3034,7 @@
* adjusted.
* </ul>
* <p>
- * <bold>Note:</bold> When a <code>JTable</code> makes adjustments
+ * <b>Note:</b> When a <code>JTable</code> makes adjustments
* to the widths of the columns it respects their minimum and
* maximum values absolutely. It is therefore possible that,
* even after this method is called, the total width of the columns
@@ -3086,14 +3086,14 @@
* </pre>
* where each individual delta[i] is calculated according to:
* <p>
- * If (DELTA < 0) we are in shrink mode where:
+ * If (DELTA < 0) we are in shrink mode where:
* <p>
* <PRE>
* DELTA
* delta[i] = ------------ * (pref[i] - min[i])
* (PREF - MIN)
* </PRE>
- * If (DELTA > 0) we are in expand mode where:
+ * If (DELTA > 0) we are in expand mode where:
* <p>
* <PRE>
* DELTA
@@ -3368,7 +3368,7 @@
* method in order to allow the renderer's tips to be used
* if it has text set.
* <p>
- * <bold>Note:</bold> For <code>JTable</code> to properly display
+ * <b>Note:</b> For <code>JTable</code> to properly display
* tooltips of its renderers
* <code>JTable</code> must be a registered component with the
* <code>ToolTipManager</code>.
@@ -3580,7 +3580,7 @@
//
/**
- * Returns the L&F object that renders this component.
+ * Returns the L&F object that renders this component.
*
* @return the <code>TableUI</code> object that renders this component
*/
@@ -3589,9 +3589,9 @@
}
/**
- * Sets the L&F object that renders this component and repaints.
- *
- * @param ui the TableUI L&F object
+ * Sets the L&F object that renders this component and repaints.
+ *
+ * @param ui the TableUI L&F object
* @see UIDefaults#getUI
* @beaninfo
* bound: true
@@ -3607,7 +3607,7 @@
}
/**
- * Notification from the <code>UIManager</code> that the L&F has changed.
+ * Notification from the <code>UIManager</code> that the L&F has changed.
* Replaces the current UI object with the latest version from the
* <code>UIManager</code>.
*
@@ -3647,7 +3647,7 @@
}
/**
- * Returns the suffix used to construct the name of the L&F class used to
+ * Returns the suffix used to construct the name of the L&F class used to
* render this component.
*
* @return the string "TableUI"
--- a/jdk/src/share/classes/javax/swing/JTextArea.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/JTextArea.java Thu Oct 10 13:41:08 2013 -0700
@@ -155,8 +155,8 @@
* rows and columns. A default model is created, and the initial
* string is null.
*
- * @param rows the number of rows >= 0
- * @param columns the number of columns >= 0
+ * @param rows the number of rows >= 0
+ * @param columns the number of columns >= 0
* @exception IllegalArgumentException if the rows or columns
* arguments are negative.
*/
@@ -169,8 +169,8 @@
* of rows and columns. A default model is created.
*
* @param text the text to be displayed, or null
- * @param rows the number of rows >= 0
- * @param columns the number of columns >= 0
+ * @param rows the number of rows >= 0
+ * @param columns the number of columns >= 0
* @exception IllegalArgumentException if the rows or columns
* arguments are negative.
*/
@@ -195,8 +195,8 @@
*
* @param doc the model to use, or create a default one if null
* @param text the text to be displayed, null if none
- * @param rows the number of rows >= 0
- * @param columns the number of columns >= 0
+ * @param rows the number of rows >= 0
+ * @param columns the number of columns >= 0
* @exception IllegalArgumentException if the rows or columns
* arguments are negative.
*/
@@ -364,8 +364,8 @@
* Translates an offset into the components text to a
* line number.
*
- * @param offset the offset >= 0
- * @return the line number >= 0
+ * @param offset the offset >= 0
+ * @return the line number >= 0
* @exception BadLocationException thrown if the offset is
* less than zero or greater than the document length.
*/
@@ -384,7 +384,7 @@
/**
* Determines the number of lines contained in the area.
*
- * @return the number of lines > 0
+ * @return the number of lines > 0
*/
public int getLineCount() {
Element map = getDocument().getDefaultRootElement();
@@ -394,8 +394,8 @@
/**
* Determines the offset of the start of the given line.
*
- * @param line the line number to translate >= 0
- * @return the offset >= 0
+ * @param line the line number to translate >= 0
+ * @return the offset >= 0
* @exception BadLocationException thrown if the line is
* less than zero or greater or equal to the number of
* lines contained in the document (as reported by
@@ -417,8 +417,8 @@
/**
* Determines the offset of the end of the given line.
*
- * @param line the line >= 0
- * @return the offset >= 0
+ * @param line the line >= 0
+ * @return the offset >= 0
* @exception BadLocationException Thrown if the line is
* less than zero or greater or equal to the number of
* lines contained in the document (as reported by
@@ -446,7 +446,7 @@
* if the model is null or if the text is null or empty.
*
* @param str the text to insert
- * @param pos the position at which to insert >= 0
+ * @param pos the position at which to insert >= 0
* @exception IllegalArgumentException if pos is an
* invalid position in the model
* @see TextComponent#setText
@@ -486,8 +486,8 @@
* does a delete if the new string is null or empty.
*
* @param str the text to use as the replacement
- * @param start the start position >= 0
- * @param end the end position >= start
+ * @param start the start position >= 0
+ * @param end the end position >= start
* @exception IllegalArgumentException if part of the range is an
* invalid position in the model
* @see #insert
@@ -517,7 +517,7 @@
/**
* Returns the number of rows in the TextArea.
*
- * @return the number of rows >= 0
+ * @return the number of rows >= 0
*/
public int getRows() {
return rows;
@@ -527,7 +527,7 @@
* Sets the number of rows for this TextArea. Calls invalidate() after
* setting the new value.
*
- * @param rows the number of rows >= 0
+ * @param rows the number of rows >= 0
* @exception IllegalArgumentException if rows is less than 0
* @see #getRows
* @beaninfo
@@ -548,7 +548,7 @@
* Defines the meaning of the height of a row. This defaults to
* the height of the font.
*
- * @return the height >= 1
+ * @return the height >= 1
*/
protected int getRowHeight() {
if (rowHeight == 0) {
@@ -561,7 +561,7 @@
/**
* Returns the number of columns in the TextArea.
*
- * @return number of columns >= 0
+ * @return number of columns >= 0
*/
public int getColumns() {
return columns;
@@ -571,7 +571,7 @@
* Sets the number of columns for this TextArea. Does an invalidate()
* after setting the new value.
*
- * @param columns the number of columns >= 0
+ * @param columns the number of columns >= 0
* @exception IllegalArgumentException if columns is less than 0
* @see #getColumns
* @beaninfo
@@ -596,7 +596,7 @@
* character <em>m</em> for the font used. This method can be
* redefined to be some alternative amount.
*
- * @return the column width >= 1
+ * @return the column width >= 1
*/
protected int getColumnWidth() {
if (columnWidth == 0) {
--- a/jdk/src/share/classes/javax/swing/JTextField.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/JTextField.java Thu Oct 10 13:41:08 2013 -0700
@@ -128,7 +128,7 @@
return;
}
char[] upper = str.toCharArray();
- for (int i = 0; i < upper.length; i++) {
+ for (int i = 0; i < upper.length; i++) {
upper[i] = Character.toUpperCase(upper[i]);
}
super.insertString(offs, new String(upper), a);
@@ -223,10 +223,10 @@
* <code>createDefaultModel</code> method
* @param text the initial string to display, or <code>null</code>
* @param columns the number of columns to use to calculate
- * the preferred width >= 0; if <code>columns</code>
+ * the preferred width >= 0; if <code>columns</code>
* is set to zero, the preferred width will be whatever
* naturally results from the component implementation
- * @exception IllegalArgumentException if <code>columns</code> < 0
+ * @exception IllegalArgumentException if <code>columns</code> < 0
*/
public JTextField(Document doc, String text, int columns) {
if (columns < 0) {
--- a/jdk/src/share/classes/javax/swing/JToggleButton.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/JToggleButton.java Thu Oct 10 13:41:08 2013 -0700
@@ -186,14 +186,14 @@
}
/**
- * Returns a string that specifies the name of the l&f class
+ * Returns a string that specifies the name of the l&f class
* that renders this component.
*
* @return String "ToggleButtonUI"
* @see JComponent#getUIClassID
* @see UIDefaults#getUI
* @beaninfo
- * description: A string that specifies the name of the L&F class
+ * description: A string that specifies the name of the L&F class
*/
public String getUIClassID() {
return uiClassID;
--- a/jdk/src/share/classes/javax/swing/JToolBar.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/JToolBar.java Thu Oct 10 13:41:08 2013 -0700
@@ -167,9 +167,9 @@
}
/**
- * Sets the L&F object that renders this component.
+ * Sets the L&F object that renders this component.
*
- * @param ui the <code>ToolBarUI</code> L&F object
+ * @param ui the <code>ToolBarUI</code> L&F object
* @see UIDefaults#getUI
* @beaninfo
* bound: true
@@ -182,7 +182,7 @@
}
/**
- * Notification from the <code>UIFactory</code> that the L&F has changed.
+ * Notification from the <code>UIFactory</code> that the L&F has changed.
* Called to replace the UI with the latest version from the
* <code>UIFactory</code>.
*
@@ -202,7 +202,7 @@
/**
- * Returns the name of the L&F class that renders this component.
+ * Returns the name of the L&F class that renders this component.
*
* @return the string "ToolBarUI"
* @see JComponent#getUIClassID
@@ -613,7 +613,7 @@
}
/**
- * Returns the name of the L&F class that renders this component.
+ * Returns the name of the L&F class that renders this component.
*
* @return the string "ToolBarSeparatorUI"
* @see JComponent#getUIClassID
--- a/jdk/src/share/classes/javax/swing/JToolTip.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/JToolTip.java Thu Oct 10 13:41:08 2013 -0700
@@ -85,7 +85,7 @@
}
/**
- * Returns the L&F object that renders this component.
+ * Returns the L&F object that renders this component.
*
* @return the <code>ToolTipUI</code> object that renders this component
*/
@@ -104,7 +104,7 @@
/**
- * Returns the name of the L&F class that renders this component.
+ * Returns the name of the L&F class that renders this component.
*
* @return the string "ToolTipUI"
* @see JComponent#getUIClassID
--- a/jdk/src/share/classes/javax/swing/JTree.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/JTree.java Thu Oct 10 13:41:08 2013 -0700
@@ -41,7 +41,7 @@
/**
- * <a name="jtree_description">
+ * <a name="jtree_description"></a>
* A control that displays a set of hierarchical data as an outline.
* You can find task-oriented documentation and examples of using trees in
* <a href="http://java.sun.com/docs/books/tutorial/uiswing/components/tree.html">How to Use Trees</a>,
@@ -59,7 +59,7 @@
* under a collapsed ancestor. All of a <i>viewable</i> nodes parents
* are expanded, but may or may not be displayed. A <i>displayed</i> node
* is both viewable and in the display area, where it can be seen.
- * <p>
+ * </p>
* The following <code>JTree</code> methods use "visible" to mean "displayed":
* <ul>
* <li><code>isRootVisible()</code>
@@ -69,14 +69,12 @@
* <li><code>getVisibleRowCount()</code>
* <li><code>setVisibleRowCount()</code>
* </ul>
- * <p>
* The next group of <code>JTree</code> methods use "visible" to mean
* "viewable" (under an expanded parent):
* <ul>
* <li><code>isVisible()</code>
* <li><code>makeVisible()</code>
* </ul>
- * <p>
* If you are interested in knowing when the selection changes implement
* the <code>TreeSelectionListener</code> interface and add the instance
* using the method <code>addTreeSelectionListener</code>.
@@ -87,6 +85,7 @@
* If you are interested in detecting either double-click events or when
* a user clicks on a node, regardless of whether or not it was selected,
* we recommend you do the following:
+ * </p>
* <pre>
* final JTree tree = ...;
*
@@ -114,12 +113,13 @@
* a graphic icon and text), subclass {@link TreeCellRenderer} and use
* {@link #setCellRenderer} to tell the tree to use it. To edit such nodes,
* subclass {@link TreeCellEditor} and use {@link #setCellEditor}.
+ * </p>
* <p>
* Like all <code>JComponent</code> classes, you can use {@link InputMap} and
* {@link ActionMap}
* to associate an {@link Action} object with a {@link KeyStroke}
* and execute the action under specified conditions.
- * <p>
+ * </p>
* <strong>Warning:</strong> Swing is not thread safe. For more
* information see <a
* href="package-summary.html#threading">Swing's Threading
@@ -133,7 +133,7 @@
* of all JavaBeans<sup><font size="-2">TM</font></sup>
* has been added to the <code>java.beans</code> package.
* Please see {@link java.beans.XMLEncoder}.
- *
+ *</p>
* @beaninfo
* attribute: isContainer false
* description: A component that displays a set of hierarchical data as an outline.
@@ -174,7 +174,7 @@
transient protected TreeCellRenderer cellRenderer;
/**
- * Height to use for each display row. If this is <= 0 the renderer
+ * Height to use for each display row. If this is <= 0 the renderer
* determines the height for each row.
*/
protected int rowHeight;
@@ -671,7 +671,7 @@
}
/**
- * Returns the L&F object that renders this component.
+ * Returns the L&F object that renders this component.
*
* @return the <code>TreeUI</code> object that renders this component
*/
@@ -680,11 +680,11 @@
}
/**
- * Sets the L&F object that renders this component.
+ * Sets the L&F object that renders this component.
* <p>
* This is a bound property.
*
- * @param ui the <code>TreeUI</code> L&F object
+ * @param ui the <code>TreeUI</code> L&F object
* @see UIDefaults#getUI
* @beaninfo
* bound: true
@@ -706,7 +706,7 @@
}
/**
- * Notification from the <code>UIManager</code> that the L&F has changed.
+ * Notification from the <code>UIManager</code> that the L&F has changed.
* Replaces the current UI object with the latest version from the
* <code>UIManager</code>.
*
@@ -721,7 +721,7 @@
/**
- * Returns the name of the L&F class that renders this component.
+ * Returns the name of the L&F class that renders this component.
*
* @return the string "TreeUI"
* @see JComponent#getUIClassID
@@ -1701,7 +1701,7 @@
/**
* Selects the nodes corresponding to each of the specified rows
* in the display. If a particular element of <code>rows</code> is
- * < 0 or >= <code>getRowCount</code>, it will be ignored.
+ * < 0 or >= <code>getRowCount</code>, it will be ignored.
* If none of the elements
* in <code>rows</code> are valid rows, the selection will
* be cleared. That is it will be as if <code>clearSelection</code>
@@ -2162,8 +2162,8 @@
*
* @param row an integer specifying a row
* @return the <code>TreePath</code> to the specified node,
- * <code>null</code> if <code>row < 0</code>
- * or <code>row >= getRowCount()</code>
+ * <code>null</code> if <code>row < 0</code>
+ * or <code>row >= getRowCount()</code>
*/
public TreePath getPathForRow(int row) {
TreeUI tree = getUI();
@@ -2211,7 +2211,7 @@
* Ensures that the node in the specified row is expanded and
* viewable.
* <p>
- * If <code>row</code> is < 0 or >= <code>getRowCount</code> this
+ * If <code>row</code> is < 0 or >= <code>getRowCount</code> this
* will have no effect.
*
* @param row an integer specifying a display row, where 0 is the
@@ -2234,7 +2234,7 @@
/**
* Ensures that the node in the specified row is collapsed.
* <p>
- * If <code>row</code> is < 0 or >= <code>getRowCount</code> this
+ * If <code>row</code> is < 0 or >= <code>getRowCount</code> this
* will have no effect.
*
* @param row an integer specifying a display row, where 0 is the
--- a/jdk/src/share/classes/javax/swing/JViewport.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/JViewport.java Thu Oct 10 13:41:08 2013 -0700
@@ -25,6 +25,8 @@
package javax.swing;
+import sun.swing.JLightweightFrame;
+
import java.awt.*;
import java.awt.event.*;
import java.awt.peer.ComponentPeer;
@@ -283,7 +285,7 @@
/**
- * Returns the L&F object that renders this component.
+ * Returns the L&F object that renders this component.
*
* @return a <code>ViewportUI</code> object
* @since 1.3
@@ -294,9 +296,9 @@
/**
- * Sets the L&F object that renders this component.
+ * Sets the L&F object that renders this component.
*
- * @param ui the <code>ViewportUI</code> L&F object
+ * @param ui the <code>ViewportUI</code> L&F object
* @see UIDefaults#getUI
* @beaninfo
* bound: true
@@ -321,7 +323,7 @@
/**
- * Returns a string that specifies the name of the L&F class
+ * Returns a string that specifies the name of the L&F class
* that renders this component.
*
* @return the string "ViewportUI"
@@ -361,6 +363,17 @@
super.remove(child);
}
+ @Override
+ public void addNotify() {
+ super.addNotify();
+ // JLightweightFrame does not support BLIT_SCROLL_MODE, so it should be replaced
+ Window rootWindow = SwingUtilities.getWindowAncestor(this);
+ if (rootWindow instanceof JLightweightFrame
+ && getScrollMode() == BLIT_SCROLL_MODE) {
+ setScrollMode(BACKINGSTORE_SCROLL_MODE);
+ }
+ }
+
/**
* Scrolls the view so that <code>Rectangle</code>
--- a/jdk/src/share/classes/javax/swing/KeyStroke.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/KeyStroke.java Thu Oct 10 13:41:08 2013 -0700
@@ -284,11 +284,11 @@
* If typed, pressed or released is not specified, pressed is assumed. Here
* are some examples:
* <pre>
- * "INSERT" => getKeyStroke(KeyEvent.VK_INSERT, 0);
- * "control DELETE" => getKeyStroke(KeyEvent.VK_DELETE, InputEvent.CTRL_MASK);
- * "alt shift X" => getKeyStroke(KeyEvent.VK_X, InputEvent.ALT_MASK | InputEvent.SHIFT_MASK);
- * "alt shift released X" => getKeyStroke(KeyEvent.VK_X, InputEvent.ALT_MASK | InputEvent.SHIFT_MASK, true);
- * "typed a" => getKeyStroke('a');
+ * "INSERT" => getKeyStroke(KeyEvent.VK_INSERT, 0);
+ * "control DELETE" => getKeyStroke(KeyEvent.VK_DELETE, InputEvent.CTRL_MASK);
+ * "alt shift X" => getKeyStroke(KeyEvent.VK_X, InputEvent.ALT_MASK | InputEvent.SHIFT_MASK);
+ * "alt shift released X" => getKeyStroke(KeyEvent.VK_X, InputEvent.ALT_MASK | InputEvent.SHIFT_MASK, true);
+ * "typed a" => getKeyStroke('a');
* </pre>
*
* In order to maintain backward-compatibility, specifying a null String,
--- a/jdk/src/share/classes/javax/swing/OverlayLayout.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/OverlayLayout.java Thu Oct 10 13:41:08 2013 -0700
@@ -190,7 +190,7 @@
* Returns the alignment along the x axis for the container.
*
* @param target the container
- * @return the alignment >= 0.0f && <= 1.0f
+ * @return the alignment >= 0.0f && <= 1.0f
*/
public float getLayoutAlignmentX(Container target) {
checkContainer(target);
@@ -202,7 +202,7 @@
* Returns the alignment along the y axis for the container.
*
* @param target the container
- * @return the alignment >= 0.0f && <= 1.0f
+ * @return the alignment >= 0.0f && <= 1.0f
*/
public float getLayoutAlignmentY(Container target) {
checkContainer(target);
--- a/jdk/src/share/classes/javax/swing/ProgressMonitor.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/ProgressMonitor.java Thu Oct 10 13:41:08 2013 -0700
@@ -251,7 +251,7 @@
/**
* Indicate the progress of the operation being monitored.
- * If the specified value is >= the maximum, the progress
+ * If the specified value is >= the maximum, the progress
* monitor is closed.
* @param nv an int specifying the current value, between the
* maximum and minimum specified for this component
@@ -302,7 +302,7 @@
/**
* Indicate that the operation is complete. This happens automatically
- * when the value set by setProgress is >= max, but it may be called
+ * when the value set by setProgress is >= max, but it may be called
* earlier if the operation ends early.
*/
public void close() {
--- a/jdk/src/share/classes/javax/swing/RowFilter.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/RowFilter.java Thu Oct 10 13:41:08 2013 -0700
@@ -357,7 +357,7 @@
*
* @param index the index of the value to get
* @return value at the specified index
- * @throws <code>IndexOutOfBoundsException</code> if index < 0 or
+ * @throws IndexOutOfBoundsException if index < 0 or
* >= getValueCount
*/
public abstract Object getValue(int index);
@@ -376,7 +376,7 @@
*
* @param index the index of the value to get
* @return {@code non-null} string at the specified index
- * @throws <code>IndexOutOfBoundsException</code> if index < 0 ||
+ * @throws IndexOutOfBoundsException if index < 0 ||
* >= getValueCount
*/
public String getStringValue(int index) {
--- a/jdk/src/share/classes/javax/swing/SizeRequirements.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/SizeRequirements.java Thu Oct 10 13:41:08 2013 -0700
@@ -142,10 +142,10 @@
* Creates a SizeRequirements object with the specified minimum, preferred,
* and maximum sizes and the specified alignment.
*
- * @param min the minimum size >= 0
- * @param pref the preferred size >= 0
- * @param max the maximum size >= 0
- * @param a the alignment >= 0.0f && <= 1.0f
+ * @param min the minimum size >= 0
+ * @param pref the preferred size >= 0
+ * @param max the maximum size >= 0
+ * @param a the alignment >= 0.0f && <= 1.0f
*/
public SizeRequirements(int min, int pref, int max, float a) {
minimum = min;
@@ -246,7 +246,7 @@
* by invoking the getTiledSizeRequirements method. The components
* will be tiled in the forward direction with offsets increasing from 0.
*
- * @param allocated the total span to be allocated >= 0.
+ * @param allocated the total span to be allocated >= 0.
* @param total the total of the children requests. This argument
* is optional and may be null.
* @param children the size requirements for each component.
@@ -282,7 +282,7 @@
* reverse direction represents components tiled from right to left
* or bottom to top.
*
- * @param allocated the total span to be allocated >= 0.
+ * @param allocated the total span to be allocated >= 0.
* @param total the total of the children requests. This argument
* is optional and may be null.
* @param children the size requirements for each component.
@@ -405,7 +405,7 @@
* Normal alignment will be done with an alignment value of 0.0f
* representing the left/top edge of a component.
*
- * @param allocated the total span to be allocated >= 0.
+ * @param allocated the total span to be allocated >= 0.
* @param total the total of the children requests.
* @param children the size requirements for each component.
* @param offsets the offset from 0 for each child where
@@ -441,7 +441,7 @@
* to be aligned. With reverse alignment, 0.0f represents the
* right/bottom edge.
*
- * @param allocated the total span to be allocated >= 0.
+ * @param allocated the total span to be allocated >= 0.
* @param total the total of the children requests.
* @param children the size requirements for each component.
* @param offsets the offset from 0 for each child where
--- a/jdk/src/share/classes/javax/swing/SizeSequence.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/SizeSequence.java Thu Oct 10 13:41:08 2013 -0700
@@ -78,7 +78,7 @@
*
* <p>
*
- * <h4>Implementation Notes</h4>
+ * <h3>Implementation Notes</h3>
*
* Normally when storing the size and position of entries,
* one would choose between
@@ -145,7 +145,7 @@
*
* @param numEntries the number of sizes to track
* @exception NegativeArraySizeException if
- * <code>numEntries < 0</code>
+ * <code>numEntries < 0</code>
*/
public SizeSequence(int numEntries) {
this(numEntries, 0);
@@ -306,7 +306,7 @@
/**
* Returns the size of the specified entry.
* If <code>index</code> is out of the range
- * <code>(0 <= index < getSizes().length)</code>
+ * <code>(0 <= index < getSizes().length)</code>
* the behavior is unspecified.
*
* @param index the index corresponding to the entry
@@ -320,7 +320,7 @@
* Sets the size of the specified entry.
* Note that if the value of <code>index</code>
* does not fall in the range:
- * <code>(0 <= index < getSizes().length)</code>
+ * <code>(0 <= index < getSizes().length)</code>
* the behavior is unspecified.
*
* @param index the index corresponding to the entry
@@ -348,8 +348,8 @@
* Adds a contiguous group of entries to this <code>SizeSequence</code>.
* Note that the values of <code>start</code> and
* <code>length</code> must satisfy the following
- * conditions: <code>(0 <= start < getSizes().length)
- * AND (length >= 0)</code>. If these conditions are
+ * conditions: <code>(0 <= start < getSizes().length)
+ * AND (length >= 0)</code>. If these conditions are
* not met, the behavior is unspecified and an exception
* may be thrown.
*
@@ -359,7 +359,7 @@
* @param value the size to be assigned to each new entry
* @exception ArrayIndexOutOfBoundsException if the parameters
* are outside of the range:
- * (<code>0 <= start < (getSizes().length)) AND (length >= 0)</code>
+ * (<code>0 <= start < (getSizes().length)) AND (length >= 0)</code>
*/
public void insertEntries(int start, int length, int value) {
int sizes[] = getSizes();
@@ -383,8 +383,8 @@
* from this <code>SizeSequence</code>.
* Note that the values of <code>start</code> and
* <code>length</code> must satisfy the following
- * conditions: <code>(0 <= start < getSizes().length)
- * AND (length >= 0)</code>. If these conditions are
+ * conditions: <code>(0 <= start < getSizes().length)
+ * AND (length >= 0)</code>. If these conditions are
* not met, the behavior is unspecified and an exception
* may be thrown.
*
--- a/jdk/src/share/classes/javax/swing/SpinnerDateModel.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/SpinnerDateModel.java Thu Oct 10 13:41:08 2013 -0700
@@ -221,7 +221,7 @@
* MyStartDate implements Comparable {
* long t = 12345;
* public int compareTo(Date d) {
- * return (t < d.getTime() ? -1 : (t == d.getTime() ? 0 : 1));
+ * return (t < d.getTime() ? -1 : (t == d.getTime() ? 0 : 1));
* }
* public int compareTo(Object o) {
* return compareTo((Date)o);
@@ -435,7 +435,7 @@
* If <code>value</code> is <code>null</code>,
* an <code>IllegalArgumentException</code> is thrown. No bounds
* checking is done here:
- * the new value may invalidate the <code>(start <= value < end)</code>
+ * the new value may invalidate the <code>(start <= value < end)</code>
* invariant enforced by the constructors. Naturally, one should ensure
* that the <code>(start <= value <= maximum)</code> invariant is true
* before calling the <code>nextValue</code>, <code>previousValue</code>,
--- a/jdk/src/share/classes/javax/swing/SpinnerListModel.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/SpinnerListModel.java Thu Oct 10 13:41:08 2013 -0700
@@ -71,7 +71,7 @@
* size, an <code>IllegalArugmentException</code> is thrown.
*
* @param values the sequence this model represents
- * @throws IllegalArugmentException if <code>values</code> is
+ * @throws IllegalArgumentException if <code>values</code> is
* <code>null</code> or zero size
*/
public SpinnerListModel(List<?> values) {
@@ -88,10 +88,10 @@
* is defined by the specified array. The initial value of the model
* will be <code>values[0]</code>. If <code>values</code> is
* <code>null</code> or has zero length, an
- * <code>IllegalArugmentException</code> is thrown.
+ * <code>IllegalArgumentException</code> is thrown.
*
* @param values the sequence this model represents
- * @throws IllegalArugmentException if <code>values</code> is
+ * @throws IllegalArgumentException if <code>values</code> is
* <code>null</code> or zero length
*/
public SpinnerListModel(Object[] values) {
--- a/jdk/src/share/classes/javax/swing/SpinnerNumberModel.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/SpinnerNumberModel.java Thu Oct 10 13:41:08 2013 -0700
@@ -180,7 +180,7 @@
* If <code>minimum</code> is <code>null</code>,
* then there is no lower bound. No bounds checking is done here;
* the new <code>minimum</code> value may invalidate the
- * <code>(minimum <= value <= maximum)</code>
+ * <code>(minimum <= value <= maximum)</code>
* invariant enforced by the constructors. This is to simplify updating
* the model, naturally one should ensure that the invariant is true
* before calling the <code>getNextValue</code>,
@@ -196,7 +196,7 @@
* MyDate extends Date { // Date already implements Comparable
* public int compareTo(Long o) {
* long t = getTime();
- * return (t < o.longValue() ? -1 : (t == o.longValue() ? 0 : 1));
+ * return (t < o.longValue() ? -1 : (t == o.longValue() ? 0 : 1));
* }
* }
* </pre>
@@ -235,7 +235,7 @@
* If <code>maximum</code> is <code>null</code>, then there
* is no upper bound. No bounds checking is done here; the new
* <code>maximum</code> value may invalidate the
- * <code>(minimum <= value < maximum)</code>
+ * <code>(minimum <= value < maximum)</code>
* invariant enforced by the constructors. This is to simplify updating
* the model, naturally one should ensure that the invariant is true
* before calling the <code>next</code>, <code>previous</code>,
--- a/jdk/src/share/classes/javax/swing/SpringLayout.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/SpringLayout.java Thu Oct 10 13:41:08 2013 -0700
@@ -727,7 +727,7 @@
* For any other <code>String</code> value passed as the edge,
* no action is taken. For a <code>null</code> edge, a
* <code>NullPointerException</code> is thrown.
- * <p/>
+ * <p>
* <b>Note:</b> This method can affect {@code x} and {@code y} values
* previously set for this {@code Constraints}.
*
--- a/jdk/src/share/classes/javax/swing/TransferHandler.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/TransferHandler.java Thu Oct 10 13:41:08 2013 -0700
@@ -502,7 +502,7 @@
* the action with the source drop actions, and then compare the result
* against the original action. For example:
* <pre>
- * boolean copySupported = (COPY & getSourceDropActions()) == COPY;
+ * boolean copySupported = (COPY & getSourceDropActions()) == COPY;
* </pre>
* <p>
* This method is only for use with drag and drop transfers.
@@ -1268,6 +1268,14 @@
}
}
}
+ if (!isActive()) {
+ // If the Drop target is inactive the dragExit will not be dispatched to the dtListener,
+ // so make sure that we clean up the dtListener anyway.
+ DropTargetListener dtListener = getDropTargetListener();
+ if (dtListener != null && dtListener instanceof DropHandler) {
+ ((DropHandler)dtListener).cleanup(false);
+ }
+ }
}
public void drop(DropTargetDropEvent e) {
--- a/jdk/src/share/classes/javax/swing/UIDefaults.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/UIDefaults.java Thu Oct 10 13:41:08 2013 -0700
@@ -706,7 +706,7 @@
/**
- * Returns the L&F class that renders this component.
+ * Returns the L&F class that renders this component.
*
* @param uiClassID a string containing the class ID
* @return the Class object returned by
--- a/jdk/src/share/classes/javax/swing/UnsupportedLookAndFeelException.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/UnsupportedLookAndFeelException.java Thu Oct 10 13:41:08 2013 -0700
@@ -25,7 +25,7 @@
package javax.swing;
/**
- * An exception that indicates the requested look & feel
+ * An exception that indicates the requested look & feel
* management classes are not present on the user's system.
* <p>
* <strong>Warning:</strong>
--- a/jdk/src/share/classes/javax/swing/ViewportLayout.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/ViewportLayout.java Thu Oct 10 13:41:08 2013 -0700
@@ -25,6 +25,7 @@
package javax.swing;
+import java.awt.AWTError;
import java.awt.LayoutManager;
import java.awt.Component;
import java.awt.Container;
@@ -116,7 +117,7 @@
*
* @param parent the container to lay out
*
- * @exception AWTError if the target isn't the container specified to the
+ * @throws AWTError if the target isn't the container specified to the
* <code>BoxLayout</code> constructor
*/
public void layoutContainer(Container parent)
--- a/jdk/src/share/classes/javax/swing/plaf/LayerUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/LayerUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -35,17 +35,17 @@
/**
* The base class for all {@link javax.swing.JLayer}'s UI delegates.
- * <p/>
+ * <p>
* {@link #paint(java.awt.Graphics, javax.swing.JComponent)} method performs the
* painting of the {@code JLayer}
* and {@link #eventDispatched(AWTEvent, JLayer)} method is notified
* about any {@code AWTEvent}s which have been generated by a {@code JLayer}
* or any of its subcomponents.
- * <p/>
+ * <p>
* The {@code LayerUI} differs from the UI delegates of the other components,
* because it is LookAndFeel independent and is not updated by default when
* the system LookAndFeel is changed.
- * <p/>
+ * <p>
* The subclasses of {@code LayerUI} can either be stateless and shareable
* by multiple {@code JLayer}s or not shareable.
*
@@ -69,7 +69,7 @@
* Subclasses should override this method and use
* the specified {@code Graphics} object to
* render the content of the component.
- * <p/>
+ * <p>
* The default implementation paints the passed component as is.
*
* @param g the {@code Graphics} context in which to paint
@@ -82,7 +82,7 @@
/**
* Processes {@code AWTEvent}s for {@code JLayer}
* and <b>all its descendants</b> to this {@code LayerUI} instance.
- * <p/>
+ * <p>
* To enable the {@code AWTEvent}s of a particular type,
* you call {@link JLayer#setLayerEventMask}
* in {@link #installUI(javax.swing.JComponent)}
@@ -91,7 +91,7 @@
* By default this method calls the appropriate
* {@code process<event type>Event}
* method for the given class of event.
- * <p/>
+ * <p>
* <b>Note:</b> Events are processed only for displayable {@code JLayer}s.
*
* @param e the event to be dispatched
@@ -151,7 +151,7 @@
/**
* Processes component events occurring on the {@link JLayer}
* or any of its subcomponents.
- * <p/>
+ * <p>
* This method is not called unless component events are
* enabled for the {@code JLayer} objects, this {@code LayerUI} is set to.
* Component events are enabled in the overridden {@link #installUI} method
@@ -183,7 +183,7 @@
/**
* Processes focus events occurring on the {@link JLayer}
* or any of its subcomponents.
- * <p/>
+ * <p>
* This method is not called unless focus events are
* enabled for the {@code JLayer} objects, this {@code LayerUI} is set to.
* Focus events are enabled in the overridden {@link #installUI} method
@@ -215,7 +215,7 @@
/**
* Processes key events occurring on the {@link JLayer}
* or any of its subcomponents.
- * <p/>
+ * <p>
* This method is not called unless key events are
* enabled for the {@code JLayer} objects, this {@code LayerUI} is set to.
* Key events are enabled in the overridden {@link #installUI} method
@@ -247,7 +247,7 @@
/**
* Processes mouse events occurring on the {@link JLayer}
* or any of its subcomponents.
- * <p/>
+ * <p>
* This method is not called unless mouse events are
* enabled for the {@code JLayer} objects, this {@code LayerUI} is set to.
* Mouse events are enabled in the overridden {@link #installUI} method
@@ -279,7 +279,7 @@
/**
* Processes mouse motion event occurring on the {@link JLayer}
* or any of its subcomponents.
- * <p/>
+ * <p>
* This method is not called unless mouse motion events are
* enabled for the {@code JLayer} objects, this {@code LayerUI} is set to.
* Mouse motion events are enabled in the overridden {@link #installUI} method
@@ -311,7 +311,7 @@
/**
* Processes mouse wheel event occurring on the {@link JLayer}
* or any of its subcomponents.
- * <p/>
+ * <p>
* This method is not called unless mouse wheel events are
* enabled for the {@code JLayer} objects, this {@code LayerUI} is set to.
* Mouse wheel events are enabled in the overridden {@link #installUI} method
@@ -343,7 +343,7 @@
/**
* Processes input event occurring on the {@link JLayer}
* or any of its subcomponents.
- * <p/>
+ * <p>
* This method is not called unless input events are
* enabled for the {@code JLayer} objects, this {@code LayerUI} is set to.
* Input events are enabled in the overridden {@link #installUI} method
@@ -375,7 +375,7 @@
/**
* Processes hierarchy event occurring on the {@link JLayer}
* or any of its subcomponents.
- * <p/>
+ * <p>
* This method is not called unless hierarchy events are
* enabled for the {@code JLayer} objects, this {@code LayerUI} is set to.
* Hierarchy events are enabled in the overridden {@link #installUI} method
@@ -407,7 +407,7 @@
/**
* Processes hierarchy bounds event occurring on the {@link JLayer}
* or any of its subcomponents.
- * <p/>
+ * <p>
* This method is not called unless hierarchy bounds events are
* enabled for the {@code JLayer} objects, this {@code LayerUI} is set to.
* Hierarchy bounds events are enabled in the overridden {@link #installUI}
@@ -471,7 +471,7 @@
/**
* Adds a PropertyChangeListener to the listener list. The listener is
* registered for all bound properties of this class.
- * <p/>
+ * <p>
* If {@code listener} is {@code null},
* no exception is thrown and no action is performed.
*
@@ -488,7 +488,7 @@
* Removes a PropertyChangeListener from the listener list. This method
* should be used to remove PropertyChangeListeners that were registered
* for all bound properties of this class.
- * <p/>
+ * <p>
* If {@code listener} is {@code null},
* no exception is thrown and no action is performed.
*
@@ -519,7 +519,7 @@
/**
* Adds a PropertyChangeListener to the listener list for a specific
* property.
- * <p/>
+ * <p>
* If {@code propertyName} or {@code listener} is {@code null},
* no exception is thrown and no action is taken.
*
@@ -539,7 +539,7 @@
* list for a specific property. This method should be used to remove
* {@code PropertyChangeListener}s
* that were registered for a specific bound property.
- * <p/>
+ * <p>
* If {@code propertyName} or {@code listener} is {@code null},
* no exception is thrown and no action is taken.
*
@@ -702,7 +702,7 @@
/**
* Paints the specified region in the {@code JLayer} this {@code LayerUI} is set to, immediately.
- * <p/>
+ * <p>
* This method is to be overridden when the dirty region needs to be changed.
* The default implementation delegates its functionality to {@link JComponent#paintImmediately(int, int, int, int)}.
*
--- a/jdk/src/share/classes/javax/swing/plaf/TextUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/TextUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -42,7 +42,7 @@
* Converts the given location in the model to a place in
* the view coordinate system.
*
- * @param pos the local location in the model to translate >= 0
+ * @param pos the local location in the model to translate >= 0
* @return the coordinates as a rectangle
* @exception BadLocationException if the given position does not
* represent a valid location in the associated document
@@ -53,7 +53,7 @@
* Converts the given location in the model to a place in
* the view coordinate system.
*
- * @param pos the local location in the model to translate >= 0
+ * @param pos the local location in the model to translate >= 0
* @return the coordinates as a rectangle
* @exception BadLocationException if the given position does not
* represent a valid location in the associated document
@@ -67,7 +67,7 @@
* @param pt the location in the view to translate. This
* should be in the same coordinate system as the mouse
* events.
- * @return the offset from the start of the document >= 0
+ * @return the offset from the start of the document >= 0
*/
public abstract int viewToModel(JTextComponent t, Point pt);
@@ -84,7 +84,7 @@
* character in the model
*
* @return the location within the model that best represents the
- * given point in the view >= 0
+ * given point in the view >= 0
*/
public abstract int viewToModel(JTextComponent t, Point pt,
Position.Bias[] biasReturn);
@@ -96,7 +96,7 @@
* might not allow access to some of the locations in the model.
*
* @param t the text component for which this UI is installed
- * @param pos the position to convert >= 0
+ * @param pos the position to convert >= 0
* @param b the bias for the position
* @param direction the direction from the current position that can
* be thought of as the arrow keys typically found on a keyboard.
@@ -117,8 +117,8 @@
* Causes the portion of the view responsible for the
* given part of the model to be repainted.
*
- * @param p0 the beginning of the range >= 0
- * @param p1 the end of the range >= p0
+ * @param p0 the beginning of the range >= 0
+ * @param p1 the end of the range >= p0
*/
public abstract void damageRange(JTextComponent t, int p0, int p1);
@@ -126,8 +126,8 @@
* Causes the portion of the view responsible for the
* given part of the model to be repainted.
*
- * @param p0 the beginning of the range >= 0
- * @param p1 the end of the range >= p0
+ * @param p0 the beginning of the range >= 0
+ * @param p1 the end of the range >= p0
*/
public abstract void damageRange(JTextComponent t, int p0, int p1,
Position.Bias firstBias,
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicBorders.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicBorders.java Thu Oct 10 13:41:08 2013 -0700
@@ -38,7 +38,7 @@
import java.awt.Graphics;
/**
- * Factory object that can vend Borders appropriate for the basic L & F.
+ * Factory object that can vend Borders appropriate for the basic L & F.
* @author Georges Saab
* @author Amy Fowler
*/
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicComboBoxUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicComboBoxUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -971,14 +971,16 @@
// cells, if not, this needs to loop through all.
value = comboBox.getModel().getElementAt(0);
}
- if (value == null) {
- value = " ";
- } else if (value instanceof String && "".equals(value)) {
- value = " ";
- }
Component component = renderer.
getListCellRendererComponent(listBox, value, -1,
false, false);
+ if (component instanceof JLabel) {
+ JLabel label = (JLabel) component;
+ String text = label.getText();
+ if ((text == null) || text.isEmpty()) {
+ label.setText(" ");
+ }
+ }
if (component instanceof JComponent) {
component.setFont(comboBox.getFont());
}
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicDesktopIconUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicDesktopIconUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -34,7 +34,7 @@
import java.beans.*;
/**
- * Basic L&F for a minimized window on a desktop.
+ * Basic L&F for a minimized window on a desktop.
*
* @author David Kloba
* @author Steve Wilson
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicDesktopPaneUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicDesktopPaneUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -42,7 +42,7 @@
import sun.awt.AppContext;
/**
- * Basic L&F for a desktop.
+ * Basic L&F for a desktop.
*
* @author Steve Wilson
*/
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicFileChooserUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicFileChooserUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -43,7 +43,7 @@
import sun.swing.SwingUtilities2;
/**
- * Basic L&F implementation of a FileChooser.
+ * Basic L&F implementation of a FileChooser.
*
* @author Jeff Dinkins
*/
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicGraphicsUtils.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicGraphicsUtils.java Thu Oct 10 13:41:08 2013 -0700
@@ -231,7 +231,7 @@
* just like <code>g.drawString</code> would.
* The character at index <code>underlinedIndex</code>
* in text will be underlined. If <code>index</code> is beyond the
- * bounds of <code>text</code> (including < 0), nothing will be
+ * bounds of <code>text</code> (including < 0), nothing will be
* underlined.
*
* @param g Graphics to draw with
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicIconFactory.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicIconFactory.java Thu Oct 10 13:41:08 2013 -0700
@@ -35,7 +35,7 @@
import java.io.Serializable;
/**
- * Factory object that can vend Icons appropriate for the basic L & F.
+ * Factory object that can vend Icons appropriate for the basic L & F.
* <p>
* <strong>Warning:</strong>
* Serialized objects of this class will not be compatible with
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicInternalFrameTitlePane.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicInternalFrameTitlePane.java Thu Oct 10 13:41:08 2013 -0700
@@ -553,7 +553,7 @@
/**
* This class should be treated as a "protected" inner class.
- * Instantiate it only within subclasses of <Foo>.
+ * Instantiate it only within subclasses of <code>Foo</code>.
*/
public class PropertyChangeHandler implements PropertyChangeListener {
// NOTE: This class exists only for backward compatability. All
@@ -567,7 +567,7 @@
/**
* This class should be treated as a "protected" inner class.
- * Instantiate it only within subclasses of <Foo>.
+ * Instantiate it only within subclasses of <code>Foo</code>.
*/
public class TitlePaneLayout implements LayoutManager {
// NOTE: This class exists only for backward compatability. All
@@ -597,7 +597,7 @@
/**
* This class should be treated as a "protected" inner class.
- * Instantiate it only within subclasses of <Foo>.
+ * Instantiate it only within subclasses of <code>Foo</code>.
*/
public class CloseAction extends AbstractAction {
public CloseAction() {
@@ -614,7 +614,7 @@
/**
* This class should be treated as a "protected" inner class.
- * Instantiate it only within subclasses of <Foo>.
+ * Instantiate it only within subclasses of <code>Foo</code>.
*/
public class MaximizeAction extends AbstractAction {
public MaximizeAction() {
@@ -643,7 +643,7 @@
/**
* This class should be treated as a "protected" inner class.
- * Instantiate it only within subclasses of <Foo>.
+ * Instantiate it only within subclasses of <code>Foo</code>.
*/
public class IconifyAction extends AbstractAction {
public IconifyAction() {
@@ -664,7 +664,7 @@
/**
* This class should be treated as a "protected" inner class.
- * Instantiate it only within subclasses of <Foo>.
+ * Instantiate it only within subclasses of <code>Foo</code>.
*/
public class RestoreAction extends AbstractAction {
public RestoreAction() {
@@ -691,7 +691,7 @@
/**
* This class should be treated as a "protected" inner class.
- * Instantiate it only within subclasses of <Foo>.
+ * Instantiate it only within subclasses of <code>Foo</code>.
*/
public class MoveAction extends AbstractAction {
public MoveAction() {
@@ -725,7 +725,7 @@
/**
* This class should be treated as a "protected" inner class.
- * Instantiate it only within subclasses of <Foo>.
+ * Instantiate it only within subclasses of <code>Foo</code>.
*/
public class SizeAction extends AbstractAction {
public SizeAction() {
@@ -741,7 +741,7 @@
/**
* This class should be treated as a "protected" inner class.
- * Instantiate it only within subclasses of <Foo>.
+ * Instantiate it only within subclasses of <code>Foo</code>.
*/
public class SystemMenuBar extends JMenuBar {
public boolean isFocusTraversable() { return false; }
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicInternalFrameUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicInternalFrameUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -35,7 +35,7 @@
import sun.swing.UIAction;
/**
- * A basic L&F implementation of JInternalFrame.
+ * A basic L&F implementation of JInternalFrame.
*
* @author David Kloba
* @author Rich Schiavi
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicLabelUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicLabelUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -50,7 +50,7 @@
import java.beans.PropertyChangeListener;
/**
- * A Windows L&F implementation of LabelUI. This implementation
+ * A Windows L&F implementation of LabelUI. This implementation
* is completely static, i.e. there's only one UIView implementation
* that's shared by all JLabel objects.
*
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicListUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicListUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -537,7 +537,7 @@
* <td>JList.VERTICAL_WRAP
* <td>If the visible row count is greater than zero, the preferredHeight
* is the maximum cell height * visibleRowCount. If the visible row
- * count is <= 0, the preferred height is either the current height
+ * count is <= 0, the preferred height is either the current height
* of the list, or the maximum cell height, whichever is
* bigger. The preferred width is than the maximum cell width *
* number of columns needed. Where the number of columns needs is
@@ -556,7 +556,7 @@
* longer need 8 rows to display this, you only need 5, thus
* the adjustedRowCount is 5.
* <p>If the visible row
- * count is <= 0, the preferred height is dictated by the
+ * count is <= 0, the preferred height is dictated by the
* number of columns, which will be as many as can fit in the width
* of the <code>JList</code> (width / max cell width), with at
* least one column. The preferred height then becomes the
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicMenuBarUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicMenuBarUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -46,7 +46,7 @@
/**
- * A default L&F implementation of MenuBarUI. This implementation
+ * A default L&F implementation of MenuBarUI. This implementation
* is a "combined" view/controller.
*
* @author Georges Saab
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicMenuUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicMenuUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -39,7 +39,7 @@
/**
- * A default L&F implementation of MenuUI. This implementation
+ * A default L&F implementation of MenuUI. This implementation
* is a "combined" view/controller.
*
* @author Georges Saab
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicOptionPaneUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicOptionPaneUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -131,7 +131,7 @@
}
/**
- * Installs the receiver as the L&F for the passed in
+ * Installs the receiver as the L&F for the passed in
* <code>JOptionPane</code>.
*/
public void installUI(JComponent c) {
@@ -144,7 +144,7 @@
}
/**
- * Removes the receiver from the L&F controller of the passed in split
+ * Removes the receiver from the L&F controller of the passed in split
* pane.
*/
public void uninstallUI(JComponent c) {
@@ -827,7 +827,7 @@
}
/**
- * Returns true, basic L&F wants all the buttons to have the same
+ * Returns true, basic L&F wants all the buttons to have the same
* width.
*/
protected boolean getSizeButtonsToSameWidth() {
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -34,7 +34,7 @@
import javax.swing.plaf.ComponentUI;
/**
- * A Basic L&F implementation of PopupMenuSeparatorUI. This implementation
+ * A Basic L&F implementation of PopupMenuSeparatorUI. This implementation
* is a "combined" view/controller.
*
* @author Jeff Shapiro
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicPopupMenuUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicPopupMenuUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -53,7 +53,7 @@
import sun.awt.AppContext;
/**
- * A Windows L&F implementation of PopupMenuUI. This implementation
+ * A Windows L&F implementation of PopupMenuUI. This implementation
* is a "combined" view/controller.
*
* @author Georges Saab
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicProgressBarUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicProgressBarUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -38,7 +38,7 @@
import sun.swing.DefaultLookup;
/**
- * A Basic L&F implementation of ProgressBarUI.
+ * A Basic L&F implementation of ProgressBarUI.
*
* @author Michael C. Albers
* @author Kathy Walrath
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicScrollPaneUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicScrollPaneUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -45,7 +45,7 @@
import java.awt.event.*;
/**
- * A default L&F implementation of ScrollPaneUI.
+ * A default L&F implementation of ScrollPaneUI.
*
* @author Hans Muller
*/
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicSeparatorUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicSeparatorUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -36,7 +36,7 @@
/**
- * A Basic L&F implementation of SeparatorUI. This implementation
+ * A Basic L&F implementation of SeparatorUI. This implementation
* is a "combined" view/controller.
*
* @author Georges Saab
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -39,7 +39,7 @@
/**
- * A Basic L&F implementation of SliderUI.
+ * A Basic L&F implementation of SliderUI.
*
* @author Tom Santos
*/
@@ -1542,7 +1542,7 @@
* Data model listener.
*
* This class should be treated as a "protected" inner class.
- * Instantiate it only within subclasses of <Foo>.
+ * Instantiate it only within subclasses of <code>Foo</code>.
*/
public class ChangeHandler implements ChangeListener {
// NOTE: This class exists only for backward compatability. All
@@ -1561,7 +1561,7 @@
* Track mouse movements.
*
* This class should be treated as a "protected" inner class.
- * Instantiate it only within subclasses of <Foo>.
+ * Instantiate it only within subclasses of <code>Foo</code>.
*/
public class TrackListener extends MouseInputAdapter {
protected transient int offset;
@@ -1805,7 +1805,7 @@
* Scroll-event listener.
*
* This class should be treated as a "protected" inner class.
- * Instantiate it only within subclasses of <Foo>.
+ * Instantiate it only within subclasses of <code>Foo</code>.
*/
public class ScrollListener implements ActionListener {
// changed this class to public to avoid bogus IllegalAccessException
@@ -1849,7 +1849,7 @@
* Listener for resizing events.
* <p>
* This class should be treated as a "protected" inner class.
- * Instantiate it only within subclasses of <Foo>.
+ * Instantiate it only within subclasses of <code>Foo</code>.
*/
public class ComponentHandler extends ComponentAdapter {
// NOTE: This class exists only for backward compatability. All
@@ -1865,7 +1865,7 @@
* Focus-change listener.
* <p>
* This class should be treated as a "protected" inner class.
- * Instantiate it only within subclasses of <Foo>.
+ * Instantiate it only within subclasses of <code>Foo</code>.
*/
public class FocusHandler implements FocusListener {
// NOTE: This class exists only for backward compatability. All
@@ -1892,7 +1892,7 @@
* Please refer to the key bindings specification for further details.
* <p>
* This class should be treated as a "protected" inner class.
- * Instantiate it only within subclasses of <Foo>.
+ * Instantiate it only within subclasses of <code>Foo</code>.
*/
public class ActionScroller extends AbstractAction {
// NOTE: This class exists only for backward compatability. All
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicSplitPaneUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicSplitPaneUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -44,7 +44,7 @@
/**
- * A Basic L&F implementation of the SplitPaneUI.
+ * A Basic L&F implementation of the SplitPaneUI.
*
* @author Scott Violet
* @author Steve Wilson
@@ -1060,7 +1060,7 @@
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
public void paint(Graphics g, JComponent jc) {
if (!painted && splitPane.getDividerLocation()<0) {
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -43,7 +43,7 @@
import sun.swing.UIAction;
/**
- * A Basic L&F implementation of TabbedPaneUI.
+ * A Basic L&F implementation of TabbedPaneUI.
*
* @author Amy Fowler
* @author Philip Milne
@@ -669,7 +669,7 @@
*
* @param tab index of tab to get baseline for
* @exception IndexOutOfBoundsException if index is out of range
- * (index < 0 || index >= tab count)
+ * (index < 0 || index >= tab count)
* @return baseline or a value < 0 indicating there is no reasonable
* baseline
* @since 1.6
@@ -2620,7 +2620,7 @@
// Never move a TAB down a run if it is in the first column.
// Even if there isn't enough room, moving it to a fresh
// line won't help.
- if (rect.x != 2 + insets.left && rect.x + rect.width > returnAt) {
+ if (rect.x != x && rect.x + rect.width > returnAt) {
if (runCount > tabRuns.length - 1) {
expandTabRunsArray();
}
@@ -2648,7 +2648,7 @@
// Never move a TAB over a run if it is in the first run.
// Even if there isn't enough room, moving it to a fresh
// column won't help.
- if (rect.y != 2 + insets.top && rect.y + rect.height > returnAt) {
+ if (rect.y != y && rect.y + rect.height > returnAt) {
if (runCount > tabRuns.length - 1) {
expandTabRunsArray();
}
@@ -3350,6 +3350,7 @@
private void updateView() {
int tabPlacement = tabPane.getTabPlacement();
int tabCount = tabPane.getTabCount();
+ assureRectsCreated(tabCount);
Rectangle vpRect = viewport.getBounds();
Dimension viewSize = viewport.getViewSize();
Rectangle viewRect = viewport.getViewRect();
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -1012,7 +1012,7 @@
* this translation to be computed.
*
* @param tc the text component for which this UI is installed
- * @param pos the local location in the model to translate >= 0
+ * @param pos the local location in the model to translate >= 0
* @return the coordinates as a rectangle, null if the model is not painted
* @exception BadLocationException if the given position does not
* represent a valid location in the associated document
@@ -1029,7 +1029,7 @@
* this translation to be computed.
*
* @param tc the text component for which this UI is installed
- * @param pos the local location in the model to translate >= 0
+ * @param pos the local location in the model to translate >= 0
* @return the coordinates as a rectangle, null if the model is not painted
* @exception BadLocationException if the given position does not
* represent a valid location in the associated document
@@ -1066,7 +1066,7 @@
* @param tc the text component for which this UI is installed
* @param pt the location in the view to translate. This
* should be in the same coordinate system as the mouse events.
- * @return the offset from the start of the document >= 0,
+ * @return the offset from the start of the document >= 0,
* -1 if not painted
* @see TextUI#viewToModel
*/
@@ -1083,7 +1083,7 @@
* @param tc the text component for which this UI is installed
* @param pt the location in the view to translate. This
* should be in the same coordinate system as the mouse events.
- * @return the offset from the start of the document >= 0,
+ * @return the offset from the start of the document >= 0,
* -1 if the component doesn't yet have a positive size.
* @see TextUI#viewToModel
*/
@@ -1141,8 +1141,8 @@
* the view is not currently painted.
*
* @param tc the text component for which this UI is installed
- * @param p0 the beginning of the range >= 0
- * @param p1 the end of the range >= p0
+ * @param p0 the beginning of the range >= 0
+ * @param p1 the end of the range >= p0
* @see TextUI#damageRange
*/
public void damageRange(JTextComponent tc, int p0, int p1) {
@@ -1153,8 +1153,8 @@
* Causes the portion of the view responsible for the
* given part of the model to be repainted.
*
- * @param p0 the beginning of the range >= 0
- * @param p1 the end of the range >= p0
+ * @param p0 the beginning of the range >= 0
+ * @param p1 the end of the range >= p0
*/
public void damageRange(JTextComponent t, int p0, int p1,
Position.Bias p0Bias, Position.Bias p1Bias) {
@@ -1271,8 +1271,8 @@
* it is unable to represent the part of the element.
*
* @param elem the element
- * @param p0 the starting offset >= 0
- * @param p1 the ending offset >= p0
+ * @param p0 the starting offset >= 0
+ * @param p1 the ending offset >= p0
* @return the view
*/
public View create(Element elem, int p0, int p1) {
@@ -1471,7 +1471,7 @@
* the model. This is implemented to return the index of the only
* child.
*
- * @param pos the position >= 0
+ * @param pos the position >= 0
* @return index of the view representing the given position, or
* -1 if no view represents that position
* @since 1.3
@@ -1515,11 +1515,11 @@
* Provides a mapping from the document model coordinate space
* to the coordinate space of the view mapped to it.
*
- * @param p0 the position to convert >= 0
+ * @param p0 the position to convert >= 0
* @param b0 the bias toward the previous character or the
* next character represented by p0, in case the
* position is a boundary of two views.
- * @param p1 the position to convert >= 0
+ * @param p1 the position to convert >= 0
* @param b1 the bias toward the previous character or the
* next character represented by p1, in case the
* position is a boundary of two views.
@@ -1561,7 +1561,7 @@
* they might not be in the same order found in the model, or they just
* might not allow access to some of the locations in the model.
*
- * @param pos the position to convert >= 0
+ * @param pos the position to convert >= 0
* @param a the allocated region to render into
* @param direction the direction from the current position that can
* be thought of as the arrow keys typically found on a keyboard.
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicToolBarSeparatorUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicToolBarSeparatorUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -37,7 +37,7 @@
/**
- * A Basic L&F implementation of ToolBarSeparatorUI. This implementation
+ * A Basic L&F implementation of ToolBarSeparatorUI. This implementation
* is a "combined" view/controller.
* <p>
*
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicToolBarUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicToolBarUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -42,7 +42,7 @@
/**
- * A Basic L&F implementation of ToolBarUI. This implementation
+ * A Basic L&F implementation of ToolBarUI. This implementation
* is a "combined" view/controller.
* <p>
*
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicToolTipUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicToolTipUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -40,7 +40,7 @@
/**
- * Standard tool tip L&F.
+ * Standard tool tip L&F.
* <p>
*
* @author Dave Moore
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicTreeUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicTreeUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -42,13 +42,14 @@
import javax.swing.tree.*;
import javax.swing.text.Position;
import javax.swing.plaf.basic.DragRecognitionSupport.BeforeDrag;
+import sun.awt.AWTAccessor;
import sun.swing.SwingUtilities2;
import sun.swing.DefaultLookup;
import sun.swing.UIAction;
/**
- * The basic L&F for a hierarchical data structure.
+ * The basic L&F for a hierarchical data structure.
* <p>
*
* @author Scott Violet
@@ -2165,11 +2166,7 @@
nodeBounds.width,
nodeBounds.height);
editingPath = path;
- if (editingComponent instanceof JComponent) {
- ((JComponent)editingComponent).revalidate();
- } else {
- editingComponent.validate();
- }
+ AWTAccessor.getComponentAccessor().revalidateSynchronously(editingComponent);
editingComponent.repaint();
if(cellEditor.shouldSelectCell(event)) {
stopEditingInCompleteEditing = false;
--- a/jdk/src/share/classes/javax/swing/plaf/basic/DefaultMenuLayout.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/DefaultMenuLayout.java Thu Oct 10 13:41:08 2013 -0700
@@ -34,7 +34,7 @@
/**
* The default layout manager for Popup menus and menubars. This
* class is an extension of BoxLayout which adds the UIResource tag
- * so that pluggable L&Fs can distinguish it from user-installed
+ * so that pluggable L&Fs can distinguish it from user-installed
* layout managers on menus.
*
* @author Georges Saab
--- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalBorders.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalBorders.java Thu Oct 10 13:41:08 2013 -0700
@@ -43,7 +43,7 @@
/**
- * Factory object that can vend Borders appropriate for the metal L & F.
+ * Factory object that can vend Borders appropriate for the metal L & F.
* @author Steve Wilson
*/
--- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalFileChooserUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalFileChooserUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -46,7 +46,7 @@
import sun.swing.*;
/**
- * Metal L&F implementation of a FileChooser.
+ * Metal L&F implementation of a FileChooser.
*
* @author Jeff Dinkins
*/
@@ -1067,69 +1067,9 @@
/**
* Data model for a type-face selection combo-box.
*/
- protected class FilterComboBoxModel extends AbstractListModel<Object> implements ComboBoxModel<Object>, PropertyChangeListener {
- protected FileFilter[] filters;
- protected FilterComboBoxModel() {
- super();
- filters = getFileChooser().getChoosableFileFilters();
- }
-
- public void propertyChange(PropertyChangeEvent e) {
- String prop = e.getPropertyName();
- if(prop == JFileChooser.CHOOSABLE_FILE_FILTER_CHANGED_PROPERTY) {
- filters = (FileFilter[]) e.getNewValue();
- fireContentsChanged(this, -1, -1);
- } else if (prop == JFileChooser.FILE_FILTER_CHANGED_PROPERTY) {
- fireContentsChanged(this, -1, -1);
- }
- }
-
- public void setSelectedItem(Object filter) {
- if(filter != null) {
- getFileChooser().setFileFilter((FileFilter) filter);
- fireContentsChanged(this, -1, -1);
- }
- }
-
- public Object getSelectedItem() {
- // Ensure that the current filter is in the list.
- // NOTE: we shouldnt' have to do this, since JFileChooser adds
- // the filter to the choosable filters list when the filter
- // is set. Lets be paranoid just in case someone overrides
- // setFileFilter in JFileChooser.
- FileFilter currentFilter = getFileChooser().getFileFilter();
- boolean found = false;
- if(currentFilter != null) {
- for (FileFilter filter : filters) {
- if (filter == currentFilter) {
- found = true;
- }
- }
- if(found == false) {
- getFileChooser().addChoosableFileFilter(currentFilter);
- }
- }
- return getFileChooser().getFileFilter();
- }
-
- public int getSize() {
- if(filters != null) {
- return filters.length;
- } else {
- return 0;
- }
- }
-
- public Object getElementAt(int index) {
- if(index > getSize() - 1) {
- // This shouldn't happen. Try to recover gracefully.
- return getFileChooser().getFileFilter();
- }
- if(filters != null) {
- return filters[index];
- } else {
- return null;
- }
+ protected class FilterComboBoxModel extends AbstractFilterComboBoxModel {
+ protected JFileChooser getFileChooser() {
+ return MetalFileChooserUI.this.getFileChooser();
}
}
--- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalLabelUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalLabelUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -37,7 +37,7 @@
/**
- * A Windows L&F implementation of LabelUI. This implementation
+ * A Windows L&F implementation of LabelUI. This implementation
* is completely static, i.e. there's only one UIView implementation
* that's shared by all JLabel objects.
*
--- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalLookAndFeel.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalLookAndFeel.java Thu Oct 10 13:41:08 2013 -0700
@@ -291,8 +291,7 @@
* Populates {@code table} with system colors. The following values are
* added to {@code table}:
* <table border="1" cellpadding="1" cellspacing="0"
- * summary="Metal's system color mapping"
- * valign="top" >
+ * summary="Metal's system color mapping">
* <tr valign="top" align="left">
* <th bgcolor="#CCCCFF" align="left">Key
* <th bgcolor="#CCCCFF" align="left">Value
--- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalPopupMenuSeparatorUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalPopupMenuSeparatorUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -35,7 +35,7 @@
/**
- * A Metal L&F implementation of PopupMenuSeparatorUI. This implementation
+ * A Metal L&F implementation of PopupMenuSeparatorUI. This implementation
* is a "combined" view/controller.
*
* @author Jeff Shapiro
--- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalScrollPaneUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalScrollPaneUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -37,7 +37,7 @@
/**
- * A Metal L&F implementation of ScrollPaneUI.
+ * A Metal L&F implementation of ScrollPaneUI.
* <p>
* <strong>Warning:</strong>
* Serialized objects of this class will not be compatible with
--- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalSeparatorUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalSeparatorUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -36,7 +36,7 @@
/**
- * A Metal L&F implementation of SeparatorUI. This implementation
+ * A Metal L&F implementation of SeparatorUI. This implementation
* is a "combined" view/controller.
* <p>
* <strong>Warning:</strong>
--- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalSliderUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalSliderUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -37,7 +37,7 @@
import javax.swing.plaf.*;
/**
- * A Java L&F implementation of SliderUI.
+ * A Java L&F implementation of SliderUI.
* <p>
* <strong>Warning:</strong>
* Serialized objects of this class will not be compatible with
--- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalTabbedPaneUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalTabbedPaneUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -776,7 +776,7 @@
}
/**
- * Overridden to do nothing for the Java L&F.
+ * Overridden to do nothing for the Java L&F.
*/
protected int getTabLabelShiftX( int tabPlacement, int tabIndex, boolean isSelected ) {
return 0;
@@ -784,7 +784,7 @@
/**
- * Overridden to do nothing for the Java L&F.
+ * Overridden to do nothing for the Java L&F.
*/
protected int getTabLabelShiftY( int tabPlacement, int tabIndex, boolean isSelected ) {
return 0;
--- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalToolTipUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalToolTipUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -38,7 +38,7 @@
/**
- * A Metal L&F extension of BasicToolTipUI.
+ * A Metal L&F extension of BasicToolTipUI.
* <p>
* <strong>Warning:</strong>
* Serialized objects of this class will not be compatible with
--- a/jdk/src/share/classes/javax/swing/plaf/nimbus/AbstractRegionPainter.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/nimbus/AbstractRegionPainter.java Thu Oct 10 13:41:08 2013 -0700
@@ -137,7 +137,7 @@
protected AbstractRegionPainter() { }
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public final void paint(Graphics2D g, JComponent c, int w, int h) {
@@ -535,11 +535,11 @@
* @param maxH The maximium scale in the horizontal direction to use before punting and redrawing from scratch.
* For example, if maxH is 2, then we will attempt to scale any cached images up to 2x the canvas
* width before redrawing from scratch. Reasonable maxH values may improve painting performance.
- * If set too high, then you may get poor looking graphics at higher zoom levels. Must be >= 1.
+ * If set too high, then you may get poor looking graphics at higher zoom levels. Must be >= 1.
* @param maxV The maximium scale in the vertical direction to use before punting and redrawing from scratch.
* For example, if maxV is 2, then we will attempt to scale any cached images up to 2x the canvas
* height before redrawing from scratch. Reasonable maxV values may improve painting performance.
- * If set too high, then you may get poor looking graphics at higher zoom levels. Must be >= 1.
+ * If set too high, then you may get poor looking graphics at higher zoom levels. Must be >= 1.
*/
public PaintContext(Insets insets, Dimension canvasSize, boolean inverted,
CacheMode cacheMode, double maxH, double maxV) {
--- a/jdk/src/share/classes/javax/swing/plaf/nimbus/NimbusLookAndFeel.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/nimbus/NimbusLookAndFeel.java Thu Oct 10 13:41:08 2013 -0700
@@ -124,7 +124,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override public UIDefaults getDefaults() {
if (uiDefaults == null){
@@ -261,7 +261,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
* @return {@code true}
*/
@Override public boolean shouldUpdateStyleOnAncestorChanged() {
@@ -269,7 +269,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*
* <p>Overridden to return {@code true} when one of the following
* properties change:
--- a/jdk/src/share/classes/javax/swing/plaf/nimbus/NimbusStyle.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/nimbus/NimbusStyle.java Thu Oct 10 13:41:08 2013 -0700
@@ -218,7 +218,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*
* Overridden to cause this style to populate itself with data from
* UIDefaults, if necessary.
@@ -472,7 +472,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*
* Overridden to cause this style to populate itself with data from
* UIDefaults, if necessary.
@@ -519,7 +519,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*
* <p>Overridden to cause this style to populate itself with data from
* UIDefaults, if necessary.</p>
@@ -562,7 +562,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*
* Overridden to cause this style to populate itself with data from
* UIDefaults, if necessary. If a value named "font" is not found in
@@ -590,7 +590,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*
* Returns the SynthPainter for this style, which ends up delegating to
* the Painters installed in this style.
@@ -600,7 +600,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*
* Overridden to cause this style to populate itself with data from
* UIDefaults, if necessary. If opacity is not specified in UI defaults,
@@ -616,7 +616,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*
* <p>Overridden to cause this style to populate itself with data from
* UIDefaults, if necessary.</p>
@@ -628,7 +628,7 @@
* Button.opacity
* Button.Enabled.foreground
* Button.Enabled+Selected.background
- * </pre></p>
+ * </pre>
*
* <p>In this example, suppose you were in the Enabled+Selected state and
* searched for "foreground". In this case, we first check for
--- a/jdk/src/share/classes/javax/swing/plaf/synth/Region.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/Region.java Thu Oct 10 13:41:08 2013 -0700
@@ -62,10 +62,10 @@
* The following <a href="doc-files/synthFileFormat.html">xml</a>
* accomplishes the same thing:
* <pre>
- * <style id="splitPaneStyle">
+ * <style id="splitPaneStyle">
* ...
- * </style>
- * <bind style="splitPaneStyle" type="region" key="SplitPane"/>
+ * </style>
+ * <bind style="splitPaneStyle" type="region" key="SplitPane"/>
* </pre>
*
* @since 1.5
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthButtonUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthButtonUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -34,7 +34,7 @@
import javax.swing.text.View;
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JButton}.
*
* @author Scott Violet
@@ -55,7 +55,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installDefaults(AbstractButton b) {
@@ -65,7 +65,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installListeners(AbstractButton b) {
@@ -109,7 +109,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallListeners(AbstractButton b) {
@@ -118,7 +118,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallDefaults(AbstractButton b) {
@@ -130,7 +130,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
@@ -182,7 +182,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public int getBaseline(JComponent c, int width, int height) {
@@ -305,7 +305,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
@@ -449,7 +449,7 @@
// ********************************
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public Dimension getMinimumSize(JComponent c) {
@@ -470,7 +470,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public Dimension getPreferredSize(JComponent c) {
@@ -491,7 +491,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public Dimension getMaximumSize(JComponent c) {
@@ -525,7 +525,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void propertyChange(PropertyChangeEvent e) {
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthCheckBoxMenuItemUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthCheckBoxMenuItemUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -32,7 +32,7 @@
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JCheckBoxMenuItem}.
*
* @author Leif Samuelsson
@@ -54,7 +54,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected String getPropertyPrefix() {
@@ -68,7 +68,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthCheckBoxUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthCheckBoxUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -31,7 +31,7 @@
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JCheckBox}.
*
* @author Jeff Dinkins
@@ -53,7 +53,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected String getPropertyPrefix() {
@@ -67,7 +67,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthColorChooserUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthColorChooserUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -36,7 +36,7 @@
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JColorChooser}.
*
* @author Tom Santos
@@ -58,7 +58,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected AbstractColorChooserPanel[] createDefaultChoosers() {
@@ -74,7 +74,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installDefaults() {
@@ -89,7 +89,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallDefaults() {
@@ -102,7 +102,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installListeners() {
@@ -111,7 +111,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallListeners() {
@@ -120,7 +120,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
@@ -188,7 +188,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
@@ -197,7 +197,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void propertyChange(PropertyChangeEvent e) {
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthComboBoxUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthComboBoxUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -35,7 +35,7 @@
import java.beans.PropertyChangeEvent;
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JComboBox}.
*
* @author Scott Violet
@@ -103,7 +103,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*
* Overridden to ensure that ButtonHandler is created prior to any of
* the other installXXX methods, since several of them reference
@@ -152,7 +152,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installListeners() {
@@ -163,7 +163,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void uninstallUI(JComponent c) {
@@ -175,7 +175,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallDefaults() {
@@ -187,7 +187,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallListeners() {
@@ -200,7 +200,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
@@ -251,7 +251,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected ComboPopup createPopup() {
@@ -261,7 +261,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected ListCellRenderer createRenderer() {
@@ -269,7 +269,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected ComboBoxEditor createEditor() {
@@ -281,7 +281,7 @@
//======================
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void propertyChange(PropertyChangeEvent e) {
@@ -291,7 +291,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected JButton createArrowButton() {
@@ -360,7 +360,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthDesktopIconUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthDesktopIconUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -34,7 +34,7 @@
/**
- * Provides the Synth L&F UI delegate for a minimized internal frame on a desktop.
+ * Provides the Synth L&F UI delegate for a minimized internal frame on a desktop.
*
* @author Joshua Outwater
* @since 1.7
@@ -55,7 +55,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installComponents() {
@@ -82,7 +82,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installListeners() {
@@ -96,7 +96,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallListeners() {
@@ -109,7 +109,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installDefaults() {
@@ -123,7 +123,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallDefaults() {
@@ -134,7 +134,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
@@ -202,7 +202,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthDesktopPaneUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthDesktopPaneUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -34,7 +34,7 @@
import java.awt.*;
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JDesktopPane}.
*
* @author Joshua Outwater
@@ -58,7 +58,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installListeners() {
@@ -73,7 +73,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installDefaults() {
@@ -123,7 +123,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallListeners() {
@@ -136,7 +136,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallDefaults() {
@@ -164,7 +164,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installDesktopManager() {
@@ -180,7 +180,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallDesktopManager() {
@@ -422,7 +422,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
@@ -489,7 +489,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
@@ -498,7 +498,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void propertyChange(PropertyChangeEvent evt) {
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthEditorPaneUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthEditorPaneUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -33,7 +33,7 @@
import java.beans.PropertyChangeEvent;
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JEditorPane}.
*
* @author Shannon Hickey
@@ -58,7 +58,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installDefaults() {
@@ -74,7 +74,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallDefaults() {
@@ -131,7 +131,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
@@ -181,7 +181,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void paintBackground(Graphics g) {
@@ -194,7 +194,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthFormattedTextFieldUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthFormattedTextFieldUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -29,7 +29,7 @@
import javax.swing.plaf.ComponentUI;
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JFormattedTextField}.
*
* @since 1.7
@@ -58,7 +58,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
void paintBackground(SynthContext context, Graphics g, JComponent c) {
@@ -67,7 +67,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthInternalFrameUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthInternalFrameUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -34,7 +34,7 @@
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JInternalFrame}.
*
* @author David Kloba
@@ -61,7 +61,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void installDefaults() {
@@ -70,7 +70,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installListeners() {
@@ -79,7 +79,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallComponents() {
@@ -90,7 +90,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallListeners() {
@@ -118,7 +118,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallDefaults() {
@@ -133,7 +133,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
@@ -150,7 +150,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected JComponent createNorthPane(JInternalFrame w) {
@@ -160,7 +160,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected ComponentListener createComponentListener() {
@@ -244,7 +244,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
@@ -254,7 +254,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void propertyChange(PropertyChangeEvent evt) {
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthLabelUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthLabelUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -37,7 +37,7 @@
import java.beans.PropertyChangeEvent;
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JLabel}.
*
* @author Scott Violet
@@ -57,7 +57,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installDefaults(JLabel c) {
@@ -71,7 +71,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallDefaults(JLabel c){
@@ -83,7 +83,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
@@ -105,7 +105,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public int getBaseline(JComponent c, int width, int height) {
@@ -218,7 +218,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
@@ -227,7 +227,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public Dimension getPreferredSize(JComponent c) {
@@ -248,7 +248,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public Dimension getMinimumSize(JComponent c) {
@@ -269,7 +269,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public Dimension getMaximumSize(JComponent c) {
@@ -290,7 +290,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void propertyChange(PropertyChangeEvent e) {
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthListUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthListUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -34,7 +34,7 @@
import java.beans.PropertyChangeEvent;
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JList}.
*
* @author Scott Violet
@@ -80,7 +80,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
@@ -89,7 +89,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installListeners() {
@@ -98,7 +98,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void propertyChange(PropertyChangeEvent e) {
@@ -108,7 +108,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallListeners() {
@@ -117,7 +117,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installDefaults() {
@@ -166,7 +166,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallDefaults() {
@@ -180,7 +180,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuBarUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuBarUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -32,7 +32,7 @@
import javax.swing.plaf.basic.*;
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JMenuBar}.
*
* @author Scott Violet
@@ -53,7 +53,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installDefaults() {
@@ -65,7 +65,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installListeners() {
@@ -87,7 +87,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallDefaults() {
@@ -99,7 +99,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallListeners() {
@@ -108,7 +108,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
@@ -175,7 +175,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
@@ -184,7 +184,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void propertyChange(PropertyChangeEvent e) {
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuItemUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuItemUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -34,7 +34,7 @@
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JMenuItem}.
*
* @author Georges Saab
@@ -59,7 +59,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void uninstallUI(JComponent c) {
@@ -73,7 +73,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installDefaults() {
@@ -81,7 +81,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installListeners() {
@@ -134,7 +134,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallDefaults() {
@@ -153,7 +153,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallListeners() {
@@ -162,7 +162,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
@@ -206,7 +206,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected Dimension getPreferredMenuItemSize(JComponent c,
@@ -290,7 +290,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
@@ -299,7 +299,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void propertyChange(PropertyChangeEvent e) {
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuLayout.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuLayout.java Thu Oct 10 13:41:08 2013 -0700
@@ -31,7 +31,7 @@
import java.awt.Dimension;
/**
- * @inheritDoc
+ * {@inheritDoc}
*
* @author Georges Saab
*/
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -32,7 +32,7 @@
import sun.swing.MenuItemLayoutHelper;
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JMenu}.
*
* @author Georges Saab
@@ -56,7 +56,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installDefaults() {
@@ -64,7 +64,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installListeners() {
@@ -120,7 +120,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void uninstallUI(JComponent c) {
@@ -134,7 +134,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallDefaults() {
@@ -153,7 +153,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallListeners() {
@@ -162,7 +162,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
@@ -207,7 +207,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected Dimension getPreferredMenuItemSize(JComponent c,
@@ -286,7 +286,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
@@ -295,7 +295,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void propertyChange(PropertyChangeEvent e) {
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthOptionPaneUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthOptionPaneUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -33,7 +33,7 @@
import sun.swing.DefaultLookup;
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JOptionPane}.
*
* @author James Gosling
@@ -56,7 +56,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installDefaults() {
@@ -64,7 +64,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installListeners() {
@@ -92,7 +92,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallDefaults() {
@@ -104,7 +104,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallListeners() {
@@ -113,7 +113,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installComponents() {
@@ -132,7 +132,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
@@ -199,7 +199,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
@@ -208,7 +208,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void propertyChange(PropertyChangeEvent e) {
@@ -218,7 +218,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected boolean getSizeButtonsToSameWidth() {
@@ -273,7 +273,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected Container createSeparator() {
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthPainter.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthPainter.java Thu Oct 10 13:41:08 2013 -0700
@@ -41,12 +41,12 @@
* example registers a painter for all <code>JButton</code>s that will
* render the image <code>myImage.png</code>:
* <pre>
- * <style id="buttonStyle">
+ * <style id="buttonStyle">
* <imagePainter path="myImage.png" sourceInsets="2 2 2 2"
- * paintCenter="true" stretch="true"/>
- * <insets top="2" bottom="2" left="2" right="2"/>
- * </style>
- * <bind style="buttonStyle" type="REGION" key="button"/>
+ * paintCenter="true" stretch="true"/>
+ * <insets top="2" bottom="2" left="2" right="2"/>
+ * </style>
+ * <bind style="buttonStyle" type="REGION" key="button"/>
*</pre>
* <p>
* <code>SynthPainter</code> is abstract in so far as it does no painting,
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthPanelUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthPanelUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -32,7 +32,7 @@
import java.beans.*;
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JPanel}.
*
* @author Steve Wilson
@@ -53,7 +53,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void installUI(JComponent c) {
@@ -64,7 +64,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void uninstallUI(JComponent c) {
@@ -93,7 +93,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installDefaults(JPanel p) {
@@ -101,7 +101,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallDefaults(JPanel p) {
@@ -119,7 +119,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
@@ -187,7 +187,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
@@ -196,7 +196,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void propertyChange(PropertyChangeEvent pce) {
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthPasswordFieldUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthPasswordFieldUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -31,7 +31,7 @@
import javax.swing.plaf.ComponentUI;
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JPasswordField}.
*
* @author Shannon Hickey
@@ -73,7 +73,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
void paintBackground(SynthContext context, Graphics g, JComponent c) {
@@ -82,7 +82,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
@@ -91,7 +91,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installKeyboardActions() {
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthPopupMenuUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthPopupMenuUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -33,7 +33,7 @@
import java.beans.PropertyChangeEvent;
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JPopupMenu}.
*
* @author Georges Saab
@@ -56,7 +56,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void installDefaults() {
@@ -81,7 +81,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installListeners() {
@@ -90,7 +90,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallDefaults() {
@@ -106,7 +106,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallListeners() {
@@ -115,7 +115,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
@@ -182,7 +182,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
@@ -191,7 +191,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void propertyChange(PropertyChangeEvent e) {
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthProgressBarUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthProgressBarUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -35,7 +35,7 @@
import sun.swing.SwingUtilities2;
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JProgressBar}.
*
* @author Joshua Outwater
@@ -61,7 +61,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installListeners() {
@@ -70,7 +70,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallListeners() {
@@ -79,7 +79,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installDefaults() {
@@ -118,7 +118,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallDefaults() {
@@ -130,7 +130,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
@@ -147,7 +147,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public int getBaseline(JComponent c, int width, int height) {
@@ -165,7 +165,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected Rectangle getBox(Rectangle r) {
@@ -177,7 +177,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void setAnimationIndex(int newValue) {
@@ -386,7 +386,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
@@ -396,7 +396,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void propertyChange(PropertyChangeEvent e) {
@@ -407,7 +407,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public Dimension getPreferredSize(JComponent c) {
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthRadioButtonMenuItemUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthRadioButtonMenuItemUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -30,7 +30,7 @@
import javax.swing.plaf.*;
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JRadioButtonMenuItem}.
*
* @author Georges Saab
@@ -50,7 +50,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected String getPropertyPrefix() {
@@ -64,7 +64,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthRadioButtonUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthRadioButtonUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -30,7 +30,7 @@
import javax.swing.plaf.*;
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JRadioButton}.
*
* @author Jeff Dinkins
@@ -52,7 +52,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected String getPropertyPrefix() {
@@ -75,7 +75,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthRootPaneUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthRootPaneUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -32,7 +32,7 @@
import javax.swing.plaf.basic.BasicRootPaneUI;
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JRootPane}.
*
* @author Scott Violet
@@ -52,7 +52,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installDefaults(JRootPane c){
@@ -60,7 +60,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallDefaults(JRootPane root) {
@@ -72,7 +72,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
@@ -152,7 +152,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthScrollBarUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthScrollBarUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -33,7 +33,7 @@
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JScrollBar}.
*
* @author Scott Violet
@@ -53,7 +53,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installDefaults() {
@@ -68,7 +68,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void configureScrollBarColors() {
@@ -136,7 +136,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installListeners() {
@@ -145,7 +145,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallListeners() {
@@ -154,7 +154,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallDefaults(){
@@ -177,7 +177,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
@@ -212,7 +212,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public boolean getSupportsAbsolutePositioning() {
@@ -283,7 +283,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
@@ -354,7 +354,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected Dimension getMinimumThumbSize() {
@@ -371,7 +371,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected JButton createDecreaseButton(int orientation) {
@@ -400,7 +400,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected JButton createIncreaseButton(int orientation) {
@@ -431,7 +431,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void setThumbRollover(boolean active) {
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthScrollPaneUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthScrollPaneUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -41,7 +41,7 @@
import java.awt.event.FocusEvent;
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JScrollPane}.
*
* @author Scott Violet
@@ -119,7 +119,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
@@ -128,7 +128,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installDefaults(JScrollPane scrollpane) {
@@ -154,7 +154,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installListeners(JScrollPane c) {
@@ -171,7 +171,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallDefaults(JScrollPane c) {
@@ -186,7 +186,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallListeners(JComponent c) {
@@ -203,7 +203,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthSeparatorUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthSeparatorUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -36,7 +36,7 @@
import javax.swing.plaf.DimensionUIResource;
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JSeparator}.
*
* @author Shannon Hickey
@@ -58,7 +58,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void installUI(JComponent c) {
@@ -67,7 +67,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void uninstallUI(JComponent c) {
@@ -191,7 +191,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
@@ -202,7 +202,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public Dimension getPreferredSize(JComponent c) {
@@ -224,7 +224,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public Dimension getMinimumSize(JComponent c) {
@@ -232,7 +232,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public Dimension getMaximumSize(JComponent c) {
@@ -240,7 +240,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthSliderUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthSliderUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -42,7 +42,7 @@
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link JSlider}.
*
* @author Joshua Outwater
@@ -98,7 +98,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installDefaults(JSlider slider) {
@@ -127,7 +127,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installListeners(JSlider slider) {
@@ -136,7 +136,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallListeners(JSlider slider) {
@@ -200,7 +200,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected TrackListener createTrackListener(JSlider s) {
@@ -231,7 +231,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public int getBaseline(JComponent c, int width, int height) {
@@ -302,7 +302,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public Dimension getPreferredSize(JComponent c) {
@@ -320,7 +320,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public Dimension getMinimumSize(JComponent c) {
@@ -335,7 +335,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void calculateGeometry() {
@@ -534,7 +534,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void calculateThumbLocation() {
@@ -551,7 +551,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void setThumbLocation(int x, int y) {
@@ -564,7 +564,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected int xPositionForValue(int value) {
@@ -593,7 +593,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected int yPositionForValue(int value, int trackY, int trackHeight) {
@@ -622,7 +622,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public int valueForYPosition(int yPos) {
@@ -651,7 +651,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public int valueForXPosition(int xPos) {
@@ -680,7 +680,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected Dimension getThumbSize() {
@@ -697,7 +697,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void recalculateIfInsetsChanged() {
@@ -714,7 +714,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
@@ -851,7 +851,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
@@ -899,7 +899,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void propertyChange(PropertyChangeEvent e) {
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthSpinnerUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthSpinnerUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -32,7 +32,7 @@
import java.beans.*;
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JSpinner}.
*
* @author Hans Muller
@@ -65,7 +65,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installListeners() {
@@ -81,7 +81,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallListeners() {
@@ -156,7 +156,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected LayoutManager createLayout() {
@@ -165,7 +165,7 @@
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected Component createPreviousButton() {
@@ -177,7 +177,7 @@
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected Component createNextButton() {
@@ -270,7 +270,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
@@ -334,7 +334,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
@@ -439,7 +439,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void propertyChange(PropertyChangeEvent e) {
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthSplitPaneUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthSplitPaneUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -36,7 +36,7 @@
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JSplitPane}.
*
* @author Scott Violet
@@ -201,7 +201,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
@@ -236,7 +236,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void propertyChange(PropertyChangeEvent e) {
@@ -257,7 +257,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected Component createDefaultNonContinuousLayoutDivider() {
@@ -322,7 +322,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
@@ -343,7 +343,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void finishedPaintingChildren(JSplitPane jc, Graphics g) {
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTabbedPaneUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTabbedPaneUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -37,7 +37,7 @@
import sun.swing.SwingUtilities2;
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JTabbedPane}.
*
* <p>Looks up the {@code selectedTabPadInsets} property from the Style,
@@ -120,7 +120,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installDefaults() {
@@ -183,7 +183,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installListeners() {
@@ -192,7 +192,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallListeners() {
@@ -201,7 +201,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallDefaults() {
@@ -227,7 +227,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
@@ -256,7 +256,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected JButton createScrollButton(int direction) {
@@ -272,7 +272,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void propertyChange(PropertyChangeEvent e) {
@@ -282,7 +282,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*
* Overridden to keep track of whether the selected tab is also pressed.
*/
@@ -333,7 +333,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected int getTabLabelShiftX(int tabPlacement, int tabIndex, boolean isSelected) {
@@ -345,7 +345,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected int getTabLabelShiftY(int tabPlacement, int tabIndex, boolean isSelected) {
@@ -380,7 +380,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected int getBaseline(int tab) {
@@ -404,7 +404,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
@@ -556,7 +556,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void setRolloverTab(int index) {
@@ -750,7 +750,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected int calculateMaxTabHeight(int tabPlacement) {
@@ -766,7 +766,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected int calculateTabWidth(int tabPlacement, int tabIndex,
@@ -797,7 +797,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected int calculateMaxTabWidth(int tabPlacement) {
@@ -813,7 +813,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected Insets getTabInsets(int tabPlacement, int tabIndex) {
@@ -823,7 +823,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected FontMetrics getFontMetrics() {
@@ -867,7 +867,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*
* Overridden to create a TabbedPaneLayout subclass which takes into
* account tabOverlap.
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTableHeaderUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTableHeaderUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -35,7 +35,7 @@
import sun.swing.table.*;
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.table.JTableHeader}.
*
* @author Alan Chung
@@ -64,7 +64,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installDefaults() {
@@ -89,7 +89,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installListeners() {
@@ -98,7 +98,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallDefaults() {
@@ -114,7 +114,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallListeners() {
@@ -174,7 +174,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
@@ -185,7 +185,7 @@
// SynthUI
//
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
@@ -198,7 +198,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void rolloverColumnUpdated(int oldColumn, int newColumn) {
@@ -207,7 +207,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void propertyChange(PropertyChangeEvent evt) {
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTableUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTableUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -54,7 +54,7 @@
import javax.swing.table.TableColumnModel;
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JTable}.
*
* @author Philip Milne
@@ -202,7 +202,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallDefaults() {
@@ -225,7 +225,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallListeners() {
@@ -238,7 +238,7 @@
//
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
@@ -278,7 +278,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
@@ -696,7 +696,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void propertyChange(PropertyChangeEvent event) {
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextAreaUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextAreaUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -66,7 +66,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installDefaults() {
@@ -77,7 +77,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallDefaults() {
@@ -110,7 +110,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
@@ -157,7 +157,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*
* Overridden to do nothing.
*/
@@ -167,7 +167,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextFieldUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextFieldUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -36,7 +36,7 @@
/**
- * Provides the Synth L&F UI delegate for {@link javax.swing.JTextField}.
+ * Provides the Synth L&F UI delegate for {@link javax.swing.JTextField}.
* <p>
* <strong>Warning:</strong>
* Serialized objects of this class will not be compatible with
@@ -148,7 +148,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
@@ -204,7 +204,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
@@ -213,7 +213,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
* Overridden to do nothing.
*/
@Override
@@ -241,7 +241,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installDefaults() {
@@ -252,7 +252,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallDefaults() {
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextPaneUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextPaneUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -185,7 +185,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthToggleButtonUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthToggleButtonUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -31,7 +31,7 @@
import javax.swing.plaf.ComponentUI;
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JToggleButton}.
*
* @author Jeff Dinkins
@@ -53,7 +53,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected String getPropertyPrefix() {
@@ -70,7 +70,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthToolBarUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthToolBarUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -44,7 +44,7 @@
import sun.swing.plaf.synth.SynthIcon;
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JToolBar}.
*
* @since 1.7
@@ -69,7 +69,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installDefaults() {
@@ -78,7 +78,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installListeners() {
@@ -87,7 +87,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallListeners() {
@@ -121,7 +121,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallDefaults() {
@@ -149,13 +149,13 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installComponents() {}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallComponents() {}
@@ -170,7 +170,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
@@ -239,7 +239,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
@@ -314,7 +314,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void paintDragWindow(Graphics g) {
@@ -337,7 +337,7 @@
//
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void propertyChange(PropertyChangeEvent e) {
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthToolTipUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthToolTipUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -37,7 +37,7 @@
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JToolTip}.
*
* @author Joshua Outwater
@@ -58,7 +58,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installDefaults(JComponent c) {
@@ -72,7 +72,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallDefaults(JComponent c) {
@@ -83,7 +83,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installListeners(JComponent c) {
@@ -91,7 +91,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallListeners(JComponent c) {
@@ -99,7 +99,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
@@ -144,7 +144,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
@@ -196,7 +196,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public Dimension getPreferredSize(JComponent c) {
@@ -224,7 +224,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void propertyChange(PropertyChangeEvent e) {
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTreeUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTreeUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -50,7 +50,7 @@
import sun.swing.plaf.synth.SynthIcon;
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JTree}.
*
* @author Scott Violet
@@ -85,7 +85,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public Icon getExpandedIcon() {
@@ -93,7 +93,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installDefaults() {
@@ -156,7 +156,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void installListeners() {
@@ -165,7 +165,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
@@ -193,7 +193,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected TreeCellEditor createDefaultCellEditor() {
@@ -211,7 +211,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected TreeCellRenderer createDefaultCellRenderer() {
@@ -219,7 +219,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallDefaults() {
@@ -241,7 +241,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void uninstallListeners() {
@@ -273,7 +273,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void paintBorder(SynthContext context, Graphics g, int x,
@@ -472,7 +472,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void paintHorizontalPartOfLeg(Graphics g, Rectangle clipBounds,
@@ -489,7 +489,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void paintHorizontalLine(Graphics g, JComponent c, int y,
@@ -499,7 +499,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void paintVerticalPartOfLeg(Graphics g,
@@ -511,7 +511,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void paintVerticalLine(Graphics g, JComponent c, int x, int top,
@@ -586,7 +586,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void paintExpandControl(Graphics g, Rectangle clipBounds,
@@ -607,7 +607,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void drawCentered(Component c, Graphics graphics, Icon icon,
@@ -621,7 +621,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void propertyChange(PropertyChangeEvent event) {
@@ -637,7 +637,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected void paintDropLine(Graphics g) {
@@ -677,7 +677,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
protected int getRowX(int row, int depth) {
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthViewportUI.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthViewportUI.java Thu Oct 10 13:41:08 2013 -0700
@@ -32,7 +32,7 @@
/**
- * Provides the Synth L&F UI delegate for
+ * Provides the Synth L&F UI delegate for
* {@link javax.swing.JViewport}.
*
* @since 1.7
@@ -52,7 +52,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void installUI(JComponent c) {
@@ -62,7 +62,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void uninstallUI(JComponent c) {
@@ -133,7 +133,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public SynthContext getContext(JComponent c) {
@@ -217,7 +217,7 @@
}
/**
- * @inheritDoc
+ * {@inheritDoc}
*/
@Override
public void propertyChange(PropertyChangeEvent e) {
--- a/jdk/src/share/classes/javax/swing/text/AbstractDocument.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/AbstractDocument.java Thu Oct 10 13:41:08 2013 -0700
@@ -934,16 +934,18 @@
* Returns true if the text in the range <code>p0</code> to
* <code>p1</code> is left to right.
*/
- boolean isLeftToRight(int p0, int p1) {
- if(!getProperty(I18NProperty).equals(Boolean.TRUE)) {
- return true;
- }
- Element bidiRoot = getBidiRootElement();
- int index = bidiRoot.getElementIndex(p0);
- Element bidiElem = bidiRoot.getElement(index);
- if(bidiElem.getEndOffset() >= p1) {
- AttributeSet bidiAttrs = bidiElem.getAttributes();
- return ((StyleConstants.getBidiLevel(bidiAttrs) % 2) == 0);
+ static boolean isLeftToRight(Document doc, int p0, int p1) {
+ if (Boolean.TRUE.equals(doc.getProperty(I18NProperty))) {
+ if (doc instanceof AbstractDocument) {
+ AbstractDocument adoc = (AbstractDocument) doc;
+ Element bidiRoot = adoc.getBidiRootElement();
+ int index = bidiRoot.getElementIndex(p0);
+ Element bidiElem = bidiRoot.getElement(index);
+ if (bidiElem.getEndOffset() >= p1) {
+ AttributeSet bidiAttrs = bidiElem.getAttributes();
+ return ((StyleConstants.getBidiLevel(bidiAttrs) % 2) == 0);
+ }
+ }
}
return true;
}
--- a/jdk/src/share/classes/javax/swing/text/AttributeSet.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/AttributeSet.java Thu Oct 10 13:41:08 2013 -0700
@@ -71,7 +71,7 @@
* This interface is the type signature that is expected
* to be present on any attribute key that contributes to
* character level presentation. This would be any attribute
- * that applies to a so-called <term>run</term> of
+ * that applies to a so-called <i>run</i> of
* style.
*/
public interface CharacterAttribute {
--- a/jdk/src/share/classes/javax/swing/text/BadLocationException.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/BadLocationException.java Thu Oct 10 13:41:08 2013 -0700
@@ -46,7 +46,7 @@
* Creates a new BadLocationException object.
*
* @param s a string indicating what was wrong with the arguments
- * @param offs offset within the document that was requested >= 0
+ * @param offs offset within the document that was requested >= 0
*/
public BadLocationException(String s, int offs) {
super(s);
@@ -56,7 +56,7 @@
/**
* Returns the offset into the document that was not legal.
*
- * @return the offset >= 0
+ * @return the offset >= 0
*/
public int offsetRequested() {
return offs;
--- a/jdk/src/share/classes/javax/swing/text/BoxView.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/BoxView.java Thu Oct 10 13:41:08 2013 -0700
@@ -154,7 +154,7 @@
*
* @param g the graphics context
* @param alloc the allocated region to paint into
- * @param index the child index, >= 0 && < getViewCount()
+ * @param index the child index, >= 0 && < getViewCount()
*/
protected void paintChild(Graphics g, Rectangle alloc, int index) {
View child = getView(index);
@@ -170,9 +170,9 @@
* will have an offset and span of 0.
*
* @param index the starting index into the child views to insert
- * the new views; this should be a value >= 0 and <= getViewCount
+ * the new views; this should be a value >= 0 and <= getViewCount
* @param length the number of existing child views to remove;
- * This should be a value >= 0 and <= (getViewCount() - offset)
+ * This should be a value >= 0 and <= (getViewCount() - offset)
* @param elems the child views to add; this value can be
* <code>null</code>to indicate no children are being added
* (useful to remove)
@@ -390,8 +390,8 @@
* information. This is implemented to call the
* layout method with the sizes inside of the insets.
*
- * @param width the width >= 0
- * @param height the height >= 0
+ * @param width the width >= 0
+ * @param height the height >= 0
*/
public void setSize(float width, float height) {
layout(Math.max(0, (int)(width - getLeftInset() - getRightInset())),
@@ -442,7 +442,7 @@
* <code>null</code> if the layout is invalid,
* otherwise the superclass behavior is executed.
*
- * @param index the index of the child, >= 0 && < getViewCount()
+ * @param index the index of the child, >= 0 && > getViewCount()
* @param a the allocation to this view
* @return the allocation to the child; or <code>null</code>
* if <code>a</code> is <code>null</code>;
@@ -469,7 +469,7 @@
* to the coordinate space of the view mapped to it. This makes
* sure the allocation is valid before calling the superclass.
*
- * @param pos the position to convert >= 0
+ * @param pos the position to convert >= 0
* @param a the allocated region to render into
* @return the bounding box of the given position
* @exception BadLocationException if the given position does
@@ -488,11 +488,11 @@
* Provides a mapping from the view coordinate space to the logical
* coordinate space of the model.
*
- * @param x x coordinate of the view location to convert >= 0
- * @param y y coordinate of the view location to convert >= 0
+ * @param x x coordinate of the view location to convert >= 0
+ * @param y y coordinate of the view location to convert >= 0
* @param a the allocated region to render into
* @return the location within the model that best represents the
- * given point in the view >= 0
+ * given point in the view >= 0
* @see View#viewToModel
*/
public int viewToModel(float x, float y, Shape a, Position.Bias[] bias) {
@@ -513,7 +513,7 @@
*
* @param axis may be either <code>View.X_AXIS</code>
* or <code>View.Y_AXIS</code>
- * @return the desired alignment >= 0.0f && <= 1.0f; this should
+ * @return the desired alignment >= 0.0f && <= 1.0f; this should
* be a value between 0.0 and 1.0 where 0 indicates alignment at the
* origin and 1.0 indicates alignment to the full span
* away from the origin; an alignment of 0.5 would be the
@@ -535,7 +535,7 @@
*
* @param axis may be either <code>View.X_AXIS</code>
* or <code>View.Y_AXIS</code>
- * @return the span the view would like to be rendered into >= 0;
+ * @return the span the view would like to be rendered into >= 0;
* typically the view is told to render into the span
* that is returned, although there is no guarantee;
* the parent may choose to resize or break the view
@@ -558,7 +558,7 @@
*
* @param axis may be either <code>View.X_AXIS</code>
* or <code>View.Y_AXIS</code>
- * @return the span the view would like to be rendered into >= 0;
+ * @return the span the view would like to be rendered into >= 0;
* typically the view is told to render into the span
* that is returned, although there is no guarantee;
* the parent may choose to resize or break the view
@@ -581,7 +581,7 @@
*
* @param axis may be either <code>View.X_AXIS</code>
* or <code>View.Y_AXIS</code>
- * @return the span the view would like to be rendered into >= 0;
+ * @return the span the view would like to be rendered into >= 0;
* typically the view is told to render into the span
* that is returned, although there is no guarantee;
* the parent may choose to resize or break the view
@@ -613,8 +613,8 @@
/**
* Determines if a point falls before an allocated region.
*
- * @param x the X coordinate >= 0
- * @param y the Y coordinate >= 0
+ * @param x the X coordinate >= 0
+ * @param y the Y coordinate >= 0
* @param innerAlloc the allocated region; this is the area
* inside of the insets
* @return true if the point lies before the region else false
@@ -630,8 +630,8 @@
/**
* Determines if a point falls after an allocated region.
*
- * @param x the X coordinate >= 0
- * @param y the Y coordinate >= 0
+ * @param x the X coordinate >= 0
+ * @param y the Y coordinate >= 0
* @param innerAlloc the allocated region; this is the area
* inside of the insets
* @return true if the point lies after the region else false
@@ -647,8 +647,8 @@
/**
* Fetches the child view at the given coordinates.
*
- * @param x the X coordinate >= 0
- * @param y the Y coordinate >= 0
+ * @param x the X coordinate >= 0
+ * @param y the Y coordinate >= 0
* @param alloc the parents inner allocation on entry, which should
* be changed to the childs allocation on exit
* @return the view
@@ -688,7 +688,7 @@
* Allocates a region for a child view.
*
* @param index the index of the child view to
- * allocate, >= 0 && < getViewCount()
+ * allocate, >= 0 && < getViewCount()
* @param alloc the allocated region
*/
protected void childAllocation(int index, Rectangle alloc) {
@@ -701,8 +701,8 @@
/**
* Perform layout on the box
*
- * @param width the width (inside of the insets) >= 0
- * @param height the height (inside of the insets) >= 0
+ * @param width the width (inside of the insets) >= 0
+ * @param height the height (inside of the insets) >= 0
*/
protected void layout(int width, int height) {
setSpanOnAxis(X_AXIS, width);
--- a/jdk/src/share/classes/javax/swing/text/Caret.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/Caret.java Thu Oct 10 13:41:08 2013 -0700
@@ -149,7 +149,7 @@
* and how fast the caret blinks, commonly used as one
* way to attract attention to the caret.
*
- * @param rate the delay in milliseconds >= 0. If this is
+ * @param rate the delay in milliseconds >=0. If this is
* zero the caret will not blink.
*/
public void setBlinkRate(int rate);
@@ -159,7 +159,7 @@
* and how fast the caret blinks, commonly used as one
* way to attract attention to the caret.
*
- * @return the delay in milliseconds >= 0. If this is
+ * @return the delay in milliseconds >=0. If this is
* zero the caret will not blink.
*/
public int getBlinkRate();
@@ -167,7 +167,7 @@
/**
* Fetches the current position of the caret.
*
- * @return the position >= 0
+ * @return the position >=0
*/
public int getDot();
@@ -176,7 +176,7 @@
* is a selection, the mark will not be the same as
* the dot.
*
- * @return the position >= 0
+ * @return the position >=0
*/
public int getMark();
@@ -197,7 +197,7 @@
* leaving behind the mark. This is useful for
* making selections.
*
- * @param dot the new position to move the caret to >= 0
+ * @param dot the new position to move the caret to >=0
*/
public void moveDot(int dot);
--- a/jdk/src/share/classes/javax/swing/text/ComponentView.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/ComponentView.java Thu Oct 10 13:41:08 2013 -0700
@@ -125,7 +125,7 @@
* axis of interest.
*
* @param axis may be either View.X_AXIS or View.Y_AXIS
- * @return the span the view would like to be rendered into >= 0.
+ * @return the span the view would like to be rendered into >=0.
* Typically the view is told to render into the span
* that is returned, although there is no guarantee.
* The parent may choose to resize or break the view.
@@ -153,7 +153,7 @@
* axis of interest.
*
* @param axis may be either View.X_AXIS or View.Y_AXIS
- * @return the span the view would like to be rendered into >= 0.
+ * @return the span the view would like to be rendered into >=0.
* Typically the view is told to render into the span
* that is returned, although there is no guarantee.
* The parent may choose to resize or break the view.
@@ -181,7 +181,7 @@
* axis of interest.
*
* @param axis may be either View.X_AXIS or View.Y_AXIS
- * @return the span the view would like to be rendered into >= 0.
+ * @return the span the view would like to be rendered into >=0.
* Typically the view is told to render into the span
* that is returned, although there is no guarantee.
* The parent may choose to resize or break the view.
@@ -319,7 +319,7 @@
* Provides a mapping from the coordinate space of the model to
* that of the view.
*
- * @param pos the position to convert >= 0
+ * @param pos the position to convert >=0
* @param a the allocated region to render into
* @return the bounding box of the given position is returned
* @exception BadLocationException if the given position does not
@@ -344,8 +344,8 @@
* Provides a mapping from the view coordinate space to the logical
* coordinate space of the model.
*
- * @param x the X coordinate >= 0
- * @param y the Y coordinate >= 0
+ * @param x the X coordinate >=0
+ * @param y the Y coordinate >=0
* @param a the allocated region to render into
* @return the location within the model that best represents
* the given point in the view
--- a/jdk/src/share/classes/javax/swing/text/CompositeView.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/CompositeView.java Thu Oct 10 13:41:08 2013 -0700
@@ -143,7 +143,7 @@
/**
* Returns the number of child views of this view.
*
- * @return the number of views >= 0
+ * @return the number of views >= 0
* @see #getView
*/
public int getViewCount() {
@@ -153,7 +153,7 @@
/**
* Returns the n-th view in this container.
*
- * @param n the number of the desired view, >= 0 && < getViewCount()
+ * @param n the number of the desired view, >= 0 && < getViewCount()
* @return the view at index <code>n</code>
*/
public View getView(int n) {
@@ -169,9 +169,9 @@
* may be garbage collected.
*
* @param offset the starting index into the child views to insert
- * the new views; >= 0 and <= getViewCount
+ * the new views; >= 0 and <= getViewCount
* @param length the number of existing child views to remove;
- * this should be a value >= 0 and <= (getViewCount() - offset)
+ * this should be a value >= 0 and <= (getViewCount() - offset)
* @param views the child views to add; this value can be
* <code>null</code>
* to indicate no children are being added (useful to remove)
@@ -223,7 +223,7 @@
* render into. This enables finding out where various views
* are located.
*
- * @param index the index of the child, >= 0 && < getViewCount()
+ * @param index the index of the child, >= 0 && < getViewCount()
* @param a the allocation to this view
* @return the allocation to the child
*/
@@ -237,7 +237,7 @@
* Provides a mapping from the document model coordinate space
* to the coordinate space of the view mapped to it.
*
- * @param pos the position to convert >= 0
+ * @param pos the position to convert >= 0
* @param a the allocated region to render into
* @param b a bias value of either <code>Position.Bias.Forward</code>
* or <code>Position.Bias.Backward</code>
@@ -280,13 +280,13 @@
* Provides a mapping from the document model coordinate space
* to the coordinate space of the view mapped to it.
*
- * @param p0 the position to convert >= 0
+ * @param p0 the position to convert >= 0
* @param b0 the bias toward the previous character or the
* next character represented by p0, in case the
* position is a boundary of two views; either
* <code>Position.Bias.Forward</code> or
* <code>Position.Bias.Backward</code>
- * @param p1 the position to convert >= 0
+ * @param p1 the position to convert >= 0
* @param b1 the bias toward the previous character or the
* next character represented by p1, in case the
* position is a boundary of two views
@@ -378,13 +378,13 @@
* Provides a mapping from the view coordinate space to the logical
* coordinate space of the model.
*
- * @param x x coordinate of the view location to convert >= 0
- * @param y y coordinate of the view location to convert >= 0
+ * @param x x coordinate of the view location to convert >= 0
+ * @param y y coordinate of the view location to convert >= 0
* @param a the allocated region to render into
* @param bias either <code>Position.Bias.Forward</code> or
* <code>Position.Bias.Backward</code>
* @return the location within the model that best represents the
- * given point in the view >= 0
+ * given point in the view >= 0
* @see View#viewToModel
*/
public int viewToModel(float x, float y, Shape a, Position.Bias[] bias) {
@@ -436,7 +436,7 @@
* This is a convenience method for {@link #getNextNorthSouthVisualPositionFrom}
* and {@link #getNextEastWestVisualPositionFrom}.
*
- * @param pos the position to convert >= 0
+ * @param pos the position to convert >= 0
* @param b a bias value of either <code>Position.Bias.Forward</code>
* or <code>Position.Bias.Backward</code>
* @param a the allocated region to render into
@@ -484,7 +484,7 @@
* <code>getViewIndexByPosition</code>
* method for backward compatibility.
*
- * @param pos the position >= 0
+ * @param pos the position >= 0
* @return index of the view representing the given position, or
* -1 if no view represents that position
* @since 1.3
@@ -505,8 +505,8 @@
/**
* Tests whether a point lies before the rectangle range.
*
- * @param x the X coordinate >= 0
- * @param y the Y coordinate >= 0
+ * @param x the X coordinate >= 0
+ * @param y the Y coordinate >= 0
* @param alloc the rectangle
* @return true if the point is before the specified range
*/
@@ -515,8 +515,8 @@
/**
* Tests whether a point lies after the rectangle range.
*
- * @param x the X coordinate >= 0
- * @param y the Y coordinate >= 0
+ * @param x the X coordinate >= 0
+ * @param y the Y coordinate >= 0
* @param alloc the rectangle
* @return true if the point is after the specified range
*/
@@ -525,8 +525,8 @@
/**
* Fetches the child view at the given coordinates.
*
- * @param x the X coordinate >= 0
- * @param y the Y coordinate >= 0
+ * @param x the X coordinate >= 0
+ * @param y the Y coordinate >= 0
* @param alloc the parent's allocation on entry, which should
* be changed to the child's allocation on exit
* @return the child view
@@ -536,7 +536,7 @@
/**
* Returns the allocation for a given child.
*
- * @param index the index of the child, >= 0 && < getViewCount()
+ * @param index the index of the child, >= 0 && < getViewCount()
* @param a the allocation to the interior of the box on entry,
* and the allocation of the child view at the index on exit.
*/
@@ -547,7 +547,7 @@
* the model. This is implemented to fetch the view in the case
* where there is a child view for each child element.
*
- * @param pos the position >= 0
+ * @param pos the position >= 0
* @param a the allocation to the interior of the box on entry,
* and the allocation of the view containing the position on exit
* @return the view representing the given position, or
@@ -570,7 +570,7 @@
* the model. This is implemented to fetch the view in the case
* where there is a child view for each child element.
*
- * @param pos the position >= 0
+ * @param pos the position >= 0
* @return index of the view representing the given position, or
* -1 if no view represents that position
*/
@@ -639,10 +639,10 @@
/**
* Sets the insets for the view.
*
- * @param top the top inset >= 0
- * @param left the left inset >= 0
- * @param bottom the bottom inset >= 0
- * @param right the right inset >= 0
+ * @param top the top inset >= 0
+ * @param left the left inset >= 0
+ * @param bottom the bottom inset >= 0
+ * @param right the right inset >= 0
*/
protected void setInsets(short top, short left, short bottom, short right) {
this.top = top;
@@ -654,7 +654,7 @@
/**
* Gets the left inset.
*
- * @return the inset >= 0
+ * @return the inset >= 0
*/
protected short getLeftInset() {
return left;
@@ -663,7 +663,7 @@
/**
* Gets the right inset.
*
- * @return the inset >= 0
+ * @return the inset >= 0
*/
protected short getRightInset() {
return right;
@@ -672,7 +672,7 @@
/**
* Gets the top inset.
*
- * @return the inset >= 0
+ * @return the inset >= 0
*/
protected short getTopInset() {
return top;
@@ -681,7 +681,7 @@
/**
* Gets the bottom inset.
*
- * @return the inset >= 0
+ * @return the inset >= 0
*/
protected short getBottomInset() {
return bottom;
@@ -691,7 +691,7 @@
* Returns the next visual position for the cursor, in either the
* north or south direction.
*
- * @param pos the position to convert >= 0
+ * @param pos the position to convert >= 0
* @param b a bias value of either <code>Position.Bias.Forward</code>
* or <code>Position.Bias.Backward</code>
* @param a the allocated region to render into
@@ -723,7 +723,7 @@
* Returns the next visual position for the cursor, in either the
* east or west direction.
*
- * @param pos the position to convert >= 0
+ * @param pos the position to convert >= 0
* @param b a bias value of either <code>Position.Bias.Forward</code>
* or <code>Position.Bias.Backward</code>
* @param a the allocated region to render into
--- a/jdk/src/share/classes/javax/swing/text/DefaultCaret.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/DefaultCaret.java Thu Oct 10 13:41:08 2013 -0700
@@ -962,8 +962,8 @@
// focus lost notification can come in later after the
// caret has been deinstalled, in which case the component
// will be null.
+ active = e;
if (component != null) {
- active = e;
TextUI mapper = component.getUI();
if (visible != e) {
visible = e;
@@ -1211,12 +1211,9 @@
boolean isPositionLTR(int position, Position.Bias bias) {
Document doc = component.getDocument();
- if(doc instanceof AbstractDocument ) {
- if(bias == Position.Bias.Backward && --position < 0)
- position = 0;
- return ((AbstractDocument)doc).isLeftToRight(position, position);
- }
- return true;
+ if(bias == Position.Bias.Backward && --position < 0)
+ position = 0;
+ return AbstractDocument.isLeftToRight(doc, position, position);
}
Position.Bias guessBiasForOffset(int offset, Position.Bias lastBias,
--- a/jdk/src/share/classes/javax/swing/text/DefaultEditorKit.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/DefaultEditorKit.java Thu Oct 10 13:41:08 2013 -0700
@@ -140,7 +140,7 @@
* @param in The stream to read from
* @param doc The destination for the insertion.
* @param pos The location in the document to place the
- * content >= 0.
+ * content >=0.
* @exception IOException on any I/O error
* @exception BadLocationException if pos represents an invalid
* location within the document.
@@ -158,8 +158,8 @@
* @param out The stream to write to
* @param doc The source for the write.
* @param pos The location in the document to fetch the
- * content >= 0.
- * @param len The amount to write out >= 0.
+ * content >=0.
+ * @param len The amount to write out >=0.
* @exception IOException on any I/O error
* @exception BadLocationException if pos represents an invalid
* location within the document.
@@ -191,7 +191,7 @@
* @param in The stream to read from
* @param doc The destination for the insertion.
* @param pos The location in the document to place the
- * content >= 0.
+ * content >=0.
* @exception IOException on any I/O error
* @exception BadLocationException if pos represents an invalid
* location within the document.
@@ -300,8 +300,8 @@
* @param out The stream to write to
* @param doc The source for the write.
* @param pos The location in the document to fetch the
- * content from >= 0.
- * @param len The amount to write out >= 0.
+ * content from >=0.
+ * @param len The amount to write out >=0.
* @exception IOException on any I/O error
* @exception BadLocationException if pos is not within 0 and
* the length of the document.
--- a/jdk/src/share/classes/javax/swing/text/DefaultHighlighter.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/DefaultHighlighter.java Thu Oct 10 13:41:08 2013 -0700
@@ -105,8 +105,8 @@
* Adds a highlight to the view. Returns a tag that can be used
* to refer to the highlight.
*
- * @param p0 the start offset of the range to highlight >= 0
- * @param p1 the end offset of the range to highlight >= p0
+ * @param p0 the start offset of the range to highlight >= 0
+ * @param p1 the end offset of the range to highlight >= p0
* @param p the painter to use to actually render the highlight
* @return an object that can be used as a tag
* to refer to the highlight
@@ -220,8 +220,8 @@
* Changes a highlight.
*
* @param tag the highlight tag
- * @param p0 the beginning of the range >= 0
- * @param p1 the end of the range >= p0
+ * @param p0 the beginning of the range >= 0
+ * @param p1 the end of the range >= p0
* @exception BadLocationException if the specified location is invalid
*/
public void changeHighlight(Object tag, int p0, int p1) throws BadLocationException {
@@ -395,8 +395,8 @@
* Paints a highlight.
*
* @param g the graphics context
- * @param offs0 the starting model offset >= 0
- * @param offs1 the ending model offset >= offs1
+ * @param offs0 the starting model offset >= 0
+ * @param offs1 the ending model offset >= offs1
* @param bounds the bounding box for the highlight
* @param c the editor
*/
@@ -441,8 +441,8 @@
* Paints a portion of a highlight.
*
* @param g the graphics context
- * @param offs0 the starting model offset >= 0
- * @param offs1 the ending model offset >= offs1
+ * @param offs0 the starting model offset >= 0
+ * @param offs1 the ending model offset >= offs1
* @param bounds the bounding box of the view, which is not
* necessarily the region to paint.
* @param c the editor
--- a/jdk/src/share/classes/javax/swing/text/DefaultStyledDocument.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/DefaultStyledDocument.java Thu Oct 10 13:41:08 2013 -0700
@@ -176,7 +176,7 @@
* <A HREF="http://download.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
* in Swing</A> for more information.
*
- * @param offset the starting offset >= 0
+ * @param offset the starting offset >= 0
* @param data the element data
* @exception BadLocationException for an invalid starting offset
*/
@@ -429,7 +429,7 @@
* <A HREF="http://download.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
* in Swing</A> for more information.
*
- * @param pos the offset from the start of the document >= 0
+ * @param pos the offset from the start of the document >= 0
* @param s the logical style to assign to the paragraph, null if none
*/
public void setLogicalStyle(int pos, Style s) {
@@ -458,7 +458,7 @@
* represented by the given position.
*
* @param p the location to translate to a paragraph
- * and determine the logical style assigned >= 0. This
+ * and determine the logical style assigned >= 0. This
* is an offset from the start of the document.
* @return the style, null if none
*/
@@ -486,8 +486,8 @@
* <A HREF="http://download.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
* in Swing</A> for more information.
*
- * @param offset the offset in the document >= 0
- * @param length the length >= 0
+ * @param offset the offset in the document >= 0
+ * @param length the length >= 0
* @param s the attributes
* @param replace true if the previous attributes should be replaced
* before setting the new attributes
@@ -539,8 +539,8 @@
* <A HREF="http://download.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
* in Swing</A> for more information.
*
- * @param offset the offset into the paragraph >= 0
- * @param length the number of characters affected >= 0
+ * @param offset the offset into the paragraph >= 0
+ * @param length the number of characters affected >= 0
* @param s the attributes
* @param replace whether to replace existing attributes, or merge them
*/
@@ -589,7 +589,7 @@
* A paragraph consists of at least one child Element, which is usually
* a leaf.
*
- * @param pos the starting offset >= 0
+ * @param pos the starting offset >= 0
* @return the element
*/
public Element getParagraphElement(int pos) {
@@ -606,7 +606,7 @@
/**
* Gets a character element based on a position.
*
- * @param pos the position in the document >= 0
+ * @param pos the position in the document >= 0
* @return the element
*/
public Element getCharacterElement(int pos) {
@@ -1233,7 +1233,7 @@
* @param a the attributes for the element
* @param type the type of the element (StartTagType, EndTagType,
* ContentType)
- * @param len the length >= 0
+ * @param len the length >= 0
*/
public ElementSpec(AttributeSet a, short type, int len) {
this(a, type, null, 0, len);
@@ -1247,8 +1247,8 @@
* @param type the type of the element (StartTagType, EndTagType,
* ContentType)
* @param txt the text for the element
- * @param offs the offset into the text >= 0
- * @param len the length of the text >= 0
+ * @param offs the offset into the text >= 0
+ * @param len the length of the text >= 0
*/
public ElementSpec(AttributeSet a, short type, char[] txt,
int offs, int len) {
@@ -1321,7 +1321,7 @@
/**
* Gets the starting offset.
*
- * @return the offset >= 0
+ * @return the offset >= 0
*/
public int getOffset() {
return offs;
@@ -1330,7 +1330,7 @@
/**
* Gets the length.
*
- * @return the length >= 0
+ * @return the length >= 0
*/
public int getLength() {
return len;
@@ -1420,8 +1420,8 @@
/**
* Inserts new content.
*
- * @param offset the starting offset >= 0
- * @param length the length >= 0
+ * @param offset the starting offset >= 0
+ * @param length the length >= 0
* @param data the data to insert
* @param de the event capturing this edit
*/
@@ -1500,8 +1500,8 @@
/**
* Removes content.
*
- * @param offset the starting offset >= 0
- * @param length the length >= 0
+ * @param offset the starting offset >= 0
+ * @param length the length >= 0
* @param de the event capturing this edit
*/
public void remove(int offset, int length, DefaultDocumentEvent de) {
@@ -1513,8 +1513,8 @@
/**
* Changes content.
*
- * @param offset the starting offset >= 0
- * @param length the length >= 0
+ * @param offset the starting offset >= 0
+ * @param length the length >= 0
* @param de the event capturing this edit
*/
public void change(int offset, int length, DefaultDocumentEvent de) {
--- a/jdk/src/share/classes/javax/swing/text/Document.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/Document.java Thu Oct 10 13:41:08 2013 -0700
@@ -58,9 +58,9 @@
* <p>The following methods give access to the character data
* that makes up the content.
* <ul>
- * <li><a href="#getLength()">getLength()</a>
- * <li><a href="#getText(int, int)">getText(int, int)</a>
- * <li><a href="#getText(int, int, javax.swing.text.Segment)">getText(int, int, Segment)</a>
+ * <li>{@link #getLength()}
+ * <li>{@link #getText(int, int)}
+ * <li>{@link #getText(int, int, javax.swing.text.Segment)}
* </ul>
* <p><b><font size=+1>Structure</font></b>
* <p>
@@ -79,8 +79,8 @@
* <a href="AttributeSet.html">AttributeSet</a> interface.
* <p>The following methods give access to the document structure.
* <ul>
- * <li><a href="#getDefaultRootElement()">getDefaultRootElement</a>
- * <li><a href="#getRootElements()">getRootElements</a>
+ * <li>{@link #getDefaultRootElement()}
+ * <li>{@link #getRootElements()}
* </ul>
*
* <p><b><font size=+1>Mutations</font></b>
@@ -93,9 +93,9 @@
* <p>The following methods are related to mutation of the
* document content:
* <ul>
- * <li><a href="#insertString(int, java.lang.String, javax.swing.text.AttributeSet)">insertString(int, String, AttributeSet)</a>
- * <li><a href="#remove(int, int)">remove(int, int)</a>
- * <li><a href="#createPosition(int)">createPosition(int)</a>
+ * <li>{@link #insertString(int, java.lang.String, javax.swing.text.AttributeSet)}
+ * <li>{@link #remove(int, int)}
+ * <li>{@link #createPosition(int)}
* </ul>
*
* <p><b><font size=+1>Notification</font></b>
@@ -161,8 +161,8 @@
* and the <a href="#TitleProperty">TitleProperty</a>, which can be used to
* name the <code>Document</code>. The methods related to the properties are:
* <ul>
- * <li><a href="#getProperty(java.lang.Object)">getProperty(Object)</a>
- * <li><a href="#putProperty(java.lang.Object, java.lang.Object)">putProperty(Object, Object)</a>
+ * <li>{@link #getProperty(java.lang.Object)}
+ * <li>{@link #putProperty(java.lang.Object, java.lang.Object)}
* </ul>
*
* <p>For more information on the <code>Document</code> class, see
--- a/jdk/src/share/classes/javax/swing/text/DocumentFilter.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/DocumentFilter.java Thu Oct 10 13:41:08 2013 -0700
@@ -68,8 +68,8 @@
* necessary.
*
* @param fb FilterBypass that can be used to mutate Document
- * @param offset the offset from the beginning >= 0
- * @param length the number of characters to remove >= 0
+ * @param offset the offset from the beginning >= 0
+ * @param length the number of characters to remove >= 0
* @exception BadLocationException some portion of the removal range
* was not a valid part of the document. The location in the exception
* is the first bad position encountered.
@@ -86,7 +86,7 @@
* necessary, or call directly into the FilterBypass.
*
* @param fb FilterBypass that can be used to mutate Document
- * @param offset the offset into the document to insert the content >= 0.
+ * @param offset the offset into the document to insert the content >= 0.
* All positions that track change at or after the given location
* will move.
* @param string the string to insert
@@ -141,8 +141,8 @@
* Removes the specified region of text, bypassing the
* DocumentFilter.
*
- * @param offset the offset from the beginning >= 0
- * @param length the number of characters to remove >= 0
+ * @param offset the offset from the beginning >= 0
+ * @param length the number of characters to remove >= 0
* @exception BadLocationException some portion of the removal range
* was not a valid part of the document. The location in the
* exception is the first bad position encountered.
@@ -154,7 +154,7 @@
* Inserts the specified text, bypassing the
* DocumentFilter.
* @param offset the offset into the document to insert the
- * content >= 0. All positions that track change at or after the
+ * content >= 0. All positions that track change at or after the
* given location will move.
* @param string the string to insert
* @param attr the attributes to associate with the inserted
--- a/jdk/src/share/classes/javax/swing/text/EditorKit.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/EditorKit.java Thu Oct 10 13:41:08 2013 -0700
@@ -55,7 +55,7 @@
/**
* Creates a copy of the editor kit. This is implemented
- * to use Object.clone</em>. If the kit cannot be cloned,
+ * to use <code>Object.clone()</code>. If the kit cannot be cloned,
* null is returned.
*
* @return the copy
@@ -139,7 +139,7 @@
* @param in The stream to read from
* @param doc The destination for the insertion.
* @param pos The location in the document to place the
- * content >= 0.
+ * content >= 0.
* @exception IOException on any I/O error
* @exception BadLocationException if pos represents an invalid
* location within the document.
@@ -154,8 +154,8 @@
* @param out The stream to write to
* @param doc The source for the write.
* @param pos The location in the document to fetch the
- * content from >= 0.
- * @param len The amount to write out >= 0.
+ * content from >= 0.
+ * @param len The amount to write out >= 0.
* @exception IOException on any I/O error
* @exception BadLocationException if pos represents an invalid
* location within the document.
@@ -176,7 +176,7 @@
* @param in The stream to read from
* @param doc The destination for the insertion.
* @param pos The location in the document to place the
- * content >= 0.
+ * content >= 0.
* @exception IOException on any I/O error
* @exception BadLocationException if pos represents an invalid
* location within the document.
@@ -196,8 +196,8 @@
* @param out The stream to write to
* @param doc The source for the write.
* @param pos The location in the document to fetch the
- * content >= 0.
- * @param len The amount to write out >= 0.
+ * content >= 0.
+ * @param len The amount to write out >= 0.
* @exception IOException on any I/O error
* @exception BadLocationException if pos represents an invalid
* location within the document.
--- a/jdk/src/share/classes/javax/swing/text/FieldView.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/FieldView.java Thu Oct 10 13:41:08 2013 -0700
@@ -200,7 +200,7 @@
* axis.
*
* @param axis may be either View.X_AXIS or View.Y_AXIS
- * @return the span the view would like to be rendered into >= 0.
+ * @return the span the view would like to be rendered into >= 0.
* Typically the view is told to render into the span
* that is returned, although there is no guarantee.
* The parent may choose to resize or break the view.
@@ -241,7 +241,7 @@
* given axis. A value of 0 or less is not resizable.
*
* @param axis View.X_AXIS or View.Y_AXIS
- * @return the weight -> 1 for View.X_AXIS, else 0
+ * @return the weight -> 1 for View.X_AXIS, else 0
*/
public int getResizeWeight(int axis) {
if (axis == View.X_AXIS) {
@@ -254,7 +254,7 @@
* Provides a mapping from the document model coordinate space
* to the coordinate space of the view mapped to it.
*
- * @param pos the position to convert >= 0
+ * @param pos the position to convert >= 0
* @param a the allocated region to render into
* @return the bounding box of the given position
* @exception BadLocationException if the given position does not
@@ -269,8 +269,8 @@
* Provides a mapping from the view coordinate space to the logical
* coordinate space of the model.
*
- * @param fx the X coordinate >= 0.0f
- * @param fy the Y coordinate >= 0.0f
+ * @param fx the X coordinate >= 0.0f
+ * @param fy the Y coordinate >= 0.0f
* @param a the allocated region to render into
* @return the location within the model that best represents the
* given point in the view
--- a/jdk/src/share/classes/javax/swing/text/FlowView.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/FlowView.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -88,7 +88,7 @@
* is returned.
*
* @param index the index of the row being updated.
- * This should be a value >= 0 and < getViewCount().
+ * This should be a value >= 0 and < getViewCount().
* @see #getFlowStart
*/
public int getFlowSpan(int index) {
@@ -103,7 +103,7 @@
* for the row constraints.
* @param index the index of the row being updated.
- * This should be a value >= 0 and < getViewCount().
+ * This should be a value >= 0 and < getViewCount().
* @see #getFlowSpan
*/
public int getFlowStart(int index) {
@@ -147,7 +147,7 @@
* Fetches the child view index representing the given position in
* the model.
*
- * @param pos the position >= 0
+ * @param pos the position >= 0
* @return index of the view representing the given position, or
* -1 if no view represents that position
*/
@@ -175,9 +175,9 @@
* a preferenceChanged is called. Following all of that,
* the normal box layout of the superclass is performed.
*
- * @param width the width to lay out against >= 0. This is
+ * @param width the width to lay out against >= 0. This is
* the width inside of the inset area.
- * @param height the height to lay out against >= 0 This
+ * @param height the height to lay out against >= 0 This
* is the height inside of the inset area.
*/
protected void layout(int width, int height) {
@@ -580,7 +580,7 @@
*
* @param rowIndex the row to adjust to the current layout
* span.
- * @param desiredSpan the current layout span >= 0
+ * @param desiredSpan the current layout span >= 0
* @param x the location r starts at.
*/
protected void adjustRow(FlowView fv, int rowIndex, int desiredSpan, int x) {
@@ -796,6 +796,22 @@
v.setParent(parent);
}
+ /** {@inheritDoc} */
+ @Override
+ protected void forwardUpdate(DocumentEvent.ElementChange ec,
+ DocumentEvent e, Shape a, ViewFactory f) {
+ calculateUpdateIndexes(e);
+ // Send update event to all views followed by the changed place.
+ lastUpdateIndex = Math.max((getViewCount() - 1), 0);
+ for (int i = firstUpdateIndex; i <= lastUpdateIndex; i++) {
+ View v = getView(i);
+ if (v != null) {
+ Shape childAlloc = getChildAllocation(i, a);
+ forwardUpdateToView(v, e, childAlloc, f);
+ }
+ }
+ }
+
// The following methods don't do anything useful, they
// simply keep the class from being abstract.
@@ -816,8 +832,8 @@
* Implemented to return false, as hit detection is not
* performed on the logical view.
*
- * @param x the X coordinate >= 0
- * @param y the Y coordinate >= 0
+ * @param x the X coordinate >= 0
+ * @param y the Y coordinate >= 0
* @param alloc the rectangle
* @return true if the point is before the specified range
*/
@@ -830,8 +846,8 @@
* Implemented to return false, as hit detection is not
* performed on the logical view.
*
- * @param x the X coordinate >= 0
- * @param y the Y coordinate >= 0
+ * @param x the X coordinate >= 0
+ * @param y the Y coordinate >= 0
* @param alloc the rectangle
* @return true if the point is after the specified range
*/
@@ -844,8 +860,8 @@
* Implemented to return null, as hit detection is not
* performed on the logical view.
*
- * @param x the X coordinate >= 0
- * @param y the Y coordinate >= 0
+ * @param x the X coordinate >= 0
+ * @param y the Y coordinate >= 0
* @param alloc the parent's allocation on entry, which should
* be changed to the child's allocation on exit
* @return the child view
@@ -859,7 +875,7 @@
* Implemented to do nothing, as the logical view doesn't
* perform layout on the children.
*
- * @param index the index of the child, >= 0 && < getViewCount()
+ * @param index the index of the child, >= 0 && < getViewCount()
* @param a the allocation to the interior of the box on entry,
* and the allocation of the child view at the index on exit.
*/
--- a/jdk/src/share/classes/javax/swing/text/GapContent.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/GapContent.java Thu Oct 10 13:41:08 2013 -0700
@@ -107,7 +107,7 @@
/**
* Returns the length of the content.
*
- * @return the length >= 1
+ * @return the length >= 1
* @see AbstractDocument.Content#length
*/
public int length() {
@@ -118,7 +118,7 @@
/**
* Inserts a string into the content.
*
- * @param where the starting position >= 0, < length()
+ * @param where the starting position >= 0, < length()
* @param str the non-null string to insert
* @return an UndoableEdit object for undoing
* @exception BadLocationException if the specified position is invalid
@@ -136,8 +136,8 @@
/**
* Removes part of the content.
*
- * @param where the starting position >= 0, where + nitems < length()
- * @param nitems the number of characters to remove >= 0
+ * @param where the starting position >= 0, where + nitems < length()
+ * @param nitems the number of characters to remove >= 0
* @return an UndoableEdit object for undoing
* @exception BadLocationException if the specified position is invalid
* @see AbstractDocument.Content#remove
@@ -156,8 +156,8 @@
/**
* Retrieves a portion of the content.
*
- * @param where the starting position >= 0
- * @param len the length to retrieve >= 0
+ * @param where the starting position >= 0
+ * @param len the length to retrieve >= 0
* @return a string representing the content
* @exception BadLocationException if the specified position is invalid
* @see AbstractDocument.Content#getString
@@ -174,8 +174,8 @@
* span the gap, the actual store is returned to avoid the copy since
* it is contiguous.
*
- * @param where the starting position >= 0, where + len <= length()
- * @param len the number of characters to retrieve >= 0
+ * @param where the starting position >= 0, where + len <= length()
+ * @param len the number of characters to retrieve >= 0
* @param chars the Segment object to return the characters in
* @exception BadLocationException if the specified position is invalid
* @see AbstractDocument.Content#getChars
@@ -222,7 +222,7 @@
* Creates a position within the content that will
* track change as the content is mutated.
*
- * @param offset the offset to track >= 0
+ * @param offset the offset to track >= 0
* @return the position
* @exception BadLocationException if the specified position is invalid
*/
@@ -705,8 +705,8 @@
* there. The vector with the resulting Positions are returned.
*
* @param v the Vector to use, with a new one created on null
- * @param offset the starting offset >= 0
- * @param length the length >= 0
+ * @param offset the starting offset >= 0
+ * @param length the length >= 0
* @return the set of instances
*/
protected Vector getPositionsInRange(Vector v, int offset, int length) {
--- a/jdk/src/share/classes/javax/swing/text/GlyphPainter2.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/GlyphPainter2.java Thu Oct 10 13:41:08 2013 -0700
@@ -239,10 +239,10 @@
Position.Bias[] biasRet)
throws BadLocationException {
+ Document doc = v.getDocument();
int startOffset = v.getStartOffset();
int endOffset = v.getEndOffset();
Segment text;
- AbstractDocument doc;
boolean viewIsLeftToRight;
TextHitInfo currentHit, nextHit;
@@ -252,8 +252,7 @@
case View.SOUTH:
break;
case View.EAST:
- doc = (AbstractDocument)v.getDocument();
- viewIsLeftToRight = doc.isLeftToRight(startOffset, endOffset);
+ viewIsLeftToRight = AbstractDocument.isLeftToRight(doc, startOffset, endOffset);
if(startOffset == doc.getLength()) {
if(pos == -1) {
@@ -313,8 +312,7 @@
}
return pos;
case View.WEST:
- doc = (AbstractDocument)v.getDocument();
- viewIsLeftToRight = doc.isLeftToRight(startOffset, endOffset);
+ viewIsLeftToRight = AbstractDocument.isLeftToRight(doc, startOffset, endOffset);
if(startOffset == doc.getLength()) {
if(pos == -1) {
--- a/jdk/src/share/classes/javax/swing/text/GlyphView.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/GlyphView.java Thu Oct 10 13:41:08 2013 -0700
@@ -121,8 +121,8 @@
* the GlyphPainter to determine what characters
* it should render glyphs for.
*
- * @param p0 the starting document offset >= 0
- * @param p1 the ending document offset >= p0
+ * @param p0 the starting document offset >= 0
+ * @param p1 the ending document offset >= p0
* @return the <code>Segment</code> containing the text
*/
public Segment getText(int p0, int p1) {
@@ -282,9 +282,9 @@
* tab expansion implementation.
*
* @param x the position the view would be located
- * at for the purpose of tab expansion >= 0.
+ * at for the purpose of tab expansion >= 0.
* @param e how to expand the tabs when encountered.
- * @return the desired span >= 0
+ * @return the desired span >= 0
* @see TabableView#getTabbedSpan
*/
public float getTabbedSpan(float x, TabExpander e) {
@@ -321,9 +321,9 @@
* arrange for its own text buffer to make the
* measurements.
*
- * @param p0 the starting document offset >= 0
- * @param p1 the ending document offset >= p0
- * @return the span >= 0
+ * @param p0 the starting document offset >= 0
+ * @param p1 the ending document offset >= p0
+ * @return the span >= 0
*/
public float getPartialSpan(int p0, int p1) {
checkPainter();
@@ -572,7 +572,7 @@
* axis.
*
* @param axis may be either View.X_AXIS or View.Y_AXIS
- * @return the span the view would like to be rendered into >= 0.
+ * @return the span the view would like to be rendered into >= 0.
* Typically the view is told to render into the span
* that is returned, although there is no guarantee.
* The parent may choose to resize or break the view.
@@ -639,7 +639,7 @@
* Provides a mapping from the document model coordinate space
* to the coordinate space of the view mapped to it.
*
- * @param pos the position to convert >= 0
+ * @param pos the position to convert >= 0
* @param a the allocated region to render into
* @param b either <code>Position.Bias.Forward</code>
* or <code>Position.Bias.Backward</code>
@@ -657,14 +657,14 @@
* Provides a mapping from the view coordinate space to the logical
* coordinate space of the model.
*
- * @param x the X coordinate >= 0
- * @param y the Y coordinate >= 0
+ * @param x the X coordinate >= 0
+ * @param y the Y coordinate >= 0
* @param a the allocated region to render into
* @param biasReturn either <code>Position.Bias.Forward</code>
* or <code>Position.Bias.Backward</code> is returned as the
* zero-th element of this array
* @return the location within the model that best represents the
- * given point of view >= 0
+ * given point of view >= 0
* @see View#viewToModel
*/
public int viewToModel(float x, float y, Shape a, Position.Bias[] biasReturn) {
@@ -702,10 +702,10 @@
*
* @param axis may be either View.X_AXIS or View.Y_AXIS
* @param pos the potential location of the start of the
- * broken view >= 0. This may be useful for calculating tab
+ * broken view >= 0. This may be useful for calculating tab
* positions.
* @param len specifies the relative length from <em>pos</em>
- * where a potential break is desired >= 0.
+ * where a potential break is desired >= 0.
* @return the weight, which should be a value between
* View.ForcedBreakWeight and View.BadBreakWeight.
* @see LabelView
@@ -736,12 +736,12 @@
*
* @param axis may be either View.X_AXIS or View.Y_AXIS
* @param p0 the location in the model where the
- * fragment should start it's representation >= 0.
+ * fragment should start it's representation >= 0.
* @param pos the position along the axis that the
- * broken view would occupy >= 0. This may be useful for
+ * broken view would occupy >= 0. This may be useful for
* things like tab calculations.
* @param len specifies the distance along the axis
- * where a potential break is desired >= 0.
+ * where a potential break is desired >= 0.
* @return the fragment of the view that represents the
* given span, if the view can be broken. If the view
* doesn't support breaking behavior, the view itself is
@@ -852,10 +852,10 @@
* to return a nested class that shares state in this view
* representing only a portion of the view.
*
- * @param p0 the starting offset >= 0. This should be a value
+ * @param p0 the starting offset >= 0. This should be a value
* greater or equal to the element starting offset and
* less than the element ending offset.
- * @param p1 the ending offset > p0. This should be a value
+ * @param p1 the ending offset > p0. This should be a value
* less than or equal to the elements end offset and
* greater than the elements starting offset.
* @return the view fragment, or itself if the view doesn't
@@ -880,7 +880,7 @@
* they just might not allow access to some of the locations in the
* model.
*
- * @param pos the position to convert >= 0
+ * @param pos the position to convert >= 0
* @param a the allocated region to render into
* @param direction the direction from the current position that can
* be thought of as the arrow keys typically found on a keyboard.
@@ -1196,12 +1196,12 @@
*
* @param v the view to find the model location to break at.
* @param p0 the location in the model where the
- * fragment should start it's representation >= 0.
+ * fragment should start it's representation >= 0.
* @param x the graphic location along the axis that the
- * broken view would occupy >= 0. This may be useful for
+ * broken view would occupy >= 0. This may be useful for
* things like tab calculations.
* @param len specifies the distance into the view
- * where a potential break is desired >= 0.
+ * where a potential break is desired >= 0.
* @return the maximum model location possible for a break.
* @see View#breakView
*/
@@ -1214,8 +1214,8 @@
* the painter doesn't hold any significant state, it can
* return itself. The default behavior is to return itself.
* @param v the <code>GlyphView</code> to provide a painter for
- * @param p0 the starting document offset >= 0
- * @param p1 the ending document offset >= p0
+ * @param p0 the starting document offset >= 0
+ * @param p1 the ending document offset >= p0
*/
public GlyphPainter getPainter(GlyphView v, int p0, int p1) {
return this;
@@ -1229,7 +1229,7 @@
* model.
*
* @param v the view to use
- * @param pos the position to convert >= 0
+ * @param pos the position to convert >= 0
* @param b either <code>Position.Bias.Forward</code>
* or <code>Position.Bias.Backward</code>
* @param a the allocated region to render into
--- a/jdk/src/share/classes/javax/swing/text/Highlighter.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/Highlighter.java Thu Oct 10 13:41:08 2013 -0700
@@ -66,8 +66,8 @@
* Adds a highlight to the view. Returns a tag that can be used
* to refer to the highlight.
*
- * @param p0 the beginning of the range >= 0
- * @param p1 the end of the range >= p0
+ * @param p0 the beginning of the range >= 0
+ * @param p1 the end of the range >= p0
* @param p the painter to use for the actual highlighting
* @return an object that refers to the highlight
* @exception BadLocationException for an invalid range specification
@@ -93,8 +93,8 @@
* with a mouse) by damaging only what changed.
*
* @param tag which highlight to change
- * @param p0 the beginning of the range >= 0
- * @param p1 the end of the range >= p0
+ * @param p0 the beginning of the range >= 0
+ * @param p1 the end of the range >= p0
* @exception BadLocationException for an invalid range specification
*/
public void changeHighlight(Object tag, int p0, int p1) throws BadLocationException;
@@ -115,8 +115,8 @@
* Renders the highlight.
*
* @param g the graphics context
- * @param p0 the starting offset in the model >= 0
- * @param p1 the ending offset in the model >= p0
+ * @param p0 the starting offset in the model >= 0
+ * @param p1 the ending offset in the model >= p0
* @param bounds the bounding box for the highlight
* @param c the editor
*/
@@ -129,14 +129,14 @@
/**
* Gets the starting model offset for the highlight.
*
- * @return the starting offset >= 0
+ * @return the starting offset >= 0
*/
public int getStartOffset();
/**
* Gets the ending model offset for the highlight.
*
- * @return the ending offset >= 0
+ * @return the ending offset >= 0
*/
public int getEndOffset();
--- a/jdk/src/share/classes/javax/swing/text/IconView.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/IconView.java Thu Oct 10 13:41:08 2013 -0700
@@ -101,7 +101,7 @@
* along the x axis.
*
* @param axis may be either View.X_AXIS or View.Y_AXIS
- * @return the desired alignment >= 0.0f && <= 1.0f. This should be
+ * @return the desired alignment >= 0.0f && <= 1.0f. This should be
* a value between 0.0 and 1.0 where 0 indicates alignment at the
* origin and 1.0 indicates alignment to the full span
* away from the origin. An alignment of 0.5 would be the
@@ -120,7 +120,7 @@
* Provides a mapping from the document model coordinate space
* to the coordinate space of the view mapped to it.
*
- * @param pos the position to convert >= 0
+ * @param pos the position to convert >= 0
* @param a the allocated region to render into
* @return the bounding box of the given position
* @exception BadLocationException if the given position does not
@@ -145,11 +145,11 @@
* Provides a mapping from the view coordinate space to the logical
* coordinate space of the model.
*
- * @param x the X coordinate >= 0
- * @param y the Y coordinate >= 0
+ * @param x the X coordinate >= 0
+ * @param y the Y coordinate >= 0
* @param a the allocated region to render into
* @return the location within the model that best represents the
- * given point of view >= 0
+ * given point of view >= 0
* @see View#viewToModel
*/
public int viewToModel(float x, float y, Shape a, Position.Bias[] bias) {
--- a/jdk/src/share/classes/javax/swing/text/JTextComponent.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/JTextComponent.java Thu Oct 10 13:41:08 2013 -0700
@@ -1562,8 +1562,10 @@
/**
* Sets the key accelerator that will cause the receiving text
* component to get the focus. The accelerator will be the
- * key combination of the <em>alt</em> key and the character
- * given (converted to upper case). By default, there is no focus
+ * key combination of the platform-specific modifier key and
+ * the character given (converted to upper case). For example,
+ * the ALT key is used as a modifier on Windows and the CTRL+ALT
+ * combination is used on Mac. By default, there is no focus
* accelerator key. Any previous key accelerator setting will be
* superseded. A '\0' key setting will be registered, and has the
* effect of turning off the focus accelerator. When the new key
--- a/jdk/src/share/classes/javax/swing/text/NavigationFilter.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/NavigationFilter.java Thu Oct 10 13:41:08 2013 -0700
@@ -57,7 +57,7 @@
* on the <code>FilterBypass</code>
*
* @param fb FilterBypass that can be used to mutate caret position
- * @param dot the position >= 0
+ * @param dot the position >= 0
* @param bias Bias to place the dot at
*/
public void setDot(FilterBypass fb, int dot, Position.Bias bias) {
@@ -72,7 +72,7 @@
* methods on the <code>FilterBypass</code>.
*
* @param fb FilterBypass that can be used to mutate caret position
- * @param dot the position >= 0
+ * @param dot the position >= 0
* @param bias Bias for new location
*/
public void moveDot(FilterBypass fb, int dot, Position.Bias bias) {
@@ -131,7 +131,7 @@
/**
* Sets the caret location, bypassing the NavigationFilter.
*
- * @param dot the position >= 0
+ * @param dot the position >= 0
* @param bias Bias to place the dot at
*/
public abstract void setDot(int dot, Position.Bias bias);
@@ -139,7 +139,7 @@
/**
* Moves the caret location, bypassing the NavigationFilter.
*
- * @param dot the position >= 0
+ * @param dot the position >= 0
* @param bias Bias for new location
*/
public abstract void moveDot(int dot, Position.Bias bias);
--- a/jdk/src/share/classes/javax/swing/text/ParagraphView.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/ParagraphView.java Thu Oct 10 13:41:08 2013 -0700
@@ -267,8 +267,6 @@
throws BadLocationException {
JTextComponent text = (JTextComponent)getContainer();
Document doc = getDocument();
- AbstractDocument aDoc = (doc instanceof AbstractDocument) ?
- (AbstractDocument)doc : null;
View row = getView(rowIndex);
int lastPos = -1;
// This could be made better to check backward positions too.
@@ -276,8 +274,7 @@
for(int vc = 0, numViews = row.getViewCount(); vc < numViews; vc++) {
View v = row.getView(vc);
int start = v.getStartOffset();
- boolean ltr = (aDoc != null) ? aDoc.isLeftToRight
- (start, start + 1) : true;
+ boolean ltr = AbstractDocument.isLeftToRight(doc, start, start + 1);
if(ltr) {
lastPos = start;
for(int end = v.getEndOffset(); lastPos < end; lastPos++) {
@@ -338,12 +335,8 @@
protected boolean flipEastAndWestAtEnds(int position,
Position.Bias bias) {
Document doc = getDocument();
- if(doc instanceof AbstractDocument &&
- !((AbstractDocument)doc).isLeftToRight(getStartOffset(),
- getStartOffset() + 1)) {
- return true;
- }
- return false;
+ position = getStartOffset();
+ return !AbstractDocument.isLeftToRight(doc, position, position + 1);
}
// --- FlowView methods ---------------------------------------------
@@ -416,8 +409,8 @@
*
* @param x the X reference position
* @param tabOffset the position within the text stream
- * that the tab occurred at >= 0
- * @return the trailing end of the tab expansion >= 0
+ * that the tab occurred at >= 0
+ * @return the trailing end of the tab expansion >= 0
* @see TabSet
* @see TabStop
* @see LabelView
@@ -496,9 +489,9 @@
* the <code>TabableView</code> interface,
* the <code>preferredSpan</code> will be used.
*
- * @param startOffset the starting document offset >= 0
- * @param endOffset the ending document offset >= startOffset
- * @return the size >= 0
+ * @param startOffset the starting document offset >= 0
+ * @param endOffset the ending document offset >= startOffset
+ * @return the size >= 0
*/
protected float getPartialSize(int startOffset, int endOffset) {
float size = 0.0f;
@@ -536,7 +529,7 @@
* there are no characters found, -1 will be returned.
*
* @param string the string of characters
- * @param start where to start in the model >= 0
+ * @param start where to start in the model >= 0
* @return the document offset, or -1 if no characters found
*/
protected int findOffsetToCharactersInString(char[] string,
@@ -649,7 +642,7 @@
* @param axis may be either <code>View.X_AXIS</code>
* or <code>View.Y_AXIS</code>
* @param len specifies where a potential break is desired
- * along the given axis >= 0
+ * along the given axis >= 0
* @param a the current allocation of the view
* @return the fragment of the view that represents the
* given span, if the view can be broken; if the view
@@ -682,7 +675,7 @@
*
* @param axis may be either <code>View.X_AXIS</code>
* or <code>View.Y_AXIS</code>
- * @param len specifies where a potential break is desired >= 0
+ * @param len specifies where a potential break is desired >= 0
* @return a value indicating the attractiveness of breaking here;
* either <code>GoodBreakWeight</code> or <code>BadBreakWeight</code>
* @see View#getBreakWeight
@@ -1148,7 +1141,7 @@
* Fetches the child view index representing the given position in
* the model.
*
- * @param pos the position >= 0
+ * @param pos the position >= 0
* @return index of the view representing the given position, or
* -1 if no view represents that position
*/
--- a/jdk/src/share/classes/javax/swing/text/PasswordView.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/PasswordView.java Thu Oct 10 13:41:08 2013 -0700
@@ -55,11 +55,11 @@
* using the value returned by getEchoChar().
*
* @param g the graphics context
- * @param x the starting X coordinate >= 0
- * @param y the starting Y coordinate >= 0
- * @param p0 the starting offset in the model >= 0
- * @param p1 the ending offset in the model >= p0
- * @return the X location of the end of the range >= 0
+ * @param x the starting X coordinate >= 0
+ * @param y the starting Y coordinate >= 0
+ * @param p0 the starting offset in the model >= 0
+ * @param p1 the ending offset in the model >= p0
+ * @return the X location of the end of the range >= 0
* @exception BadLocationException if p0 or p1 are out of range
*/
protected int drawUnselectedText(Graphics g, int x, int y,
@@ -94,11 +94,11 @@
* display the characters.
*
* @param g the graphics context
- * @param x the starting X coordinate >= 0
- * @param y the starting Y coordinate >= 0
- * @param p0 the starting offset in the model >= 0
- * @param p1 the ending offset in the model >= p0
- * @return the X location of the end of the range >= 0
+ * @param x the starting X coordinate >= 0
+ * @param y the starting Y coordinate >= 0
+ * @param p0 the starting offset in the model >= 0
+ * @param p1 the ending offset in the model >= p0
+ * @return the X location of the end of the range >= 0
* @exception BadLocationException if p0 or p1 are out of range
*/
protected int drawSelectedText(Graphics g, int x,
@@ -126,10 +126,10 @@
* or unselected text.
*
* @param g the graphics context
- * @param x the starting X coordinate >= 0
- * @param y the starting Y coordinate >= 0
+ * @param x the starting X coordinate >= 0
+ * @param y the starting Y coordinate >= 0
* @param c the echo character
- * @return the updated X position >= 0
+ * @return the updated X position >= 0
*/
protected int drawEchoCharacter(Graphics g, int x, int y, char c) {
ONE[0] = c;
@@ -142,7 +142,7 @@
* Provides a mapping from the document model coordinate space
* to the coordinate space of the view mapped to it.
*
- * @param pos the position to convert >= 0
+ * @param pos the position to convert >= 0
* @param a the allocated region to render into
* @return the bounding box of the given position
* @exception BadLocationException if the given position does not
@@ -172,8 +172,8 @@
* Provides a mapping from the view coordinate space to the logical
* coordinate space of the model.
*
- * @param fx the X coordinate >= 0.0f
- * @param fy the Y coordinate >= 0.0f
+ * @param fx the X coordinate >= 0.0f
+ * @param fy the Y coordinate >= 0.0f
* @param a the allocated region to render into
* @return the location within the model that best represents the
* given point in the view
@@ -210,7 +210,7 @@
* axis.
*
* @param axis may be either View.X_AXIS or View.Y_AXIS
- * @return the span the view would like to be rendered into >= 0.
+ * @return the span the view would like to be rendered into >= 0.
* Typically the view is told to render into the span
* that is returned, although there is no guarantee.
* The parent may choose to resize or break the view.
--- a/jdk/src/share/classes/javax/swing/text/PlainDocument.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/PlainDocument.java Thu Oct 10 13:41:08 2013 -0700
@@ -103,7 +103,7 @@
* <A HREF="http://download.oracle.com/javase/tutorial/uiswing/concurrency/index.html">Concurrency
* in Swing</A> for more information.
*
- * @param offs the starting offset >= 0
+ * @param offs the starting offset >= 0
* @param str the string to insert; does nothing with null/empty strings
* @param a the attributes for the inserted content
* @exception BadLocationException the given insert position is not a valid
--- a/jdk/src/share/classes/javax/swing/text/PlainView.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/PlainView.java Thu Oct 10 13:41:08 2013 -0700
@@ -66,10 +66,10 @@
* <code>drawSelectedText</code> so that the way selected and
* unselected text are rendered can be customized.
*
- * @param lineIndex the line to draw >= 0
+ * @param lineIndex the line to draw >= 0
* @param g the <code>Graphics</code> context
- * @param x the starting X position >= 0
- * @param y the starting Y position >= 0
+ * @param x the starting X position >= 0
+ * @param y the starting Y position >= 0
* @see #drawUnselectedText
* @see #drawSelectedText
*/
@@ -138,11 +138,11 @@
* text. Uses the foreground or disabled color to render the text.
*
* @param g the graphics context
- * @param x the starting X coordinate >= 0
- * @param y the starting Y coordinate >= 0
- * @param p0 the beginning position in the model >= 0
- * @param p1 the ending position in the model >= 0
- * @return the X location of the end of the range >= 0
+ * @param x the starting X coordinate >= 0
+ * @param y the starting Y coordinate >= 0
+ * @param p0 the beginning position in the model >= 0
+ * @param p1 the ending position in the model >= 0
+ * @return the X location of the end of the range >= 0
* @exception BadLocationException if the range is invalid
*/
protected int drawUnselectedText(Graphics g, int x, int y,
@@ -163,10 +163,10 @@
* the selected background.
*
* @param g the graphics context
- * @param x the starting X coordinate >= 0
- * @param y the starting Y coordinate >= 0
- * @param p0 the beginning position in the model >= 0
- * @param p1 the ending position in the model >= 0
+ * @param x the starting X coordinate >= 0
+ * @param y the starting Y coordinate >= 0
+ * @param p0 the beginning position in the model >= 0
+ * @param p1 the ending position in the model >= 0
* @return the location of the end of the range
* @exception BadLocationException if the range is invalid
*/
@@ -218,7 +218,7 @@
* axis.
*
* @param axis may be either View.X_AXIS or View.Y_AXIS
- * @return the span the view would like to be rendered into >= 0.
+ * @return the span the view would like to be rendered into >= 0.
* Typically the view is told to render into the span
* that is returned, although there is no guarantee.
* The parent may choose to resize or break the view.
@@ -332,7 +332,7 @@
* Provides a mapping from the document model coordinate space
* to the coordinate space of the view mapped to it.
*
- * @param pos the position to convert >= 0
+ * @param pos the position to convert >= 0
* @param a the allocated region to render into
* @return the bounding box of the given position
* @exception BadLocationException if the given position does not
@@ -369,11 +369,11 @@
* Provides a mapping from the view coordinate space to the logical
* coordinate space of the model.
*
- * @param fx the X coordinate >= 0
- * @param fy the Y coordinate >= 0
+ * @param fx the X coordinate >= 0
+ * @param fy the Y coordinate >= 0
* @param a the allocated region to render into
* @return the location within the model that best represents the
- * given point in the view >= 0
+ * given point in the view >= 0
* @see View#viewToModel
*/
public int viewToModel(float fx, float fy, Shape a, Position.Bias[] bias) {
@@ -482,8 +482,8 @@
* layout of the view along the given axis, if it
* has any layout duties.
*
- * @param width the width >= 0
- * @param height the height >= 0
+ * @param width the width >= 0
+ * @param height the height >= 0
*/
public void setSize(float width, float height) {
super.setSize(width, height);
@@ -497,10 +497,10 @@
* This implementation does not support things like centering so it
* ignores the tabOffset argument.
*
- * @param x the current position >= 0
+ * @param x the current position >= 0
* @param tabOffset the position within the text stream
- * that the tab occurred at >= 0.
- * @return the tab stop, measured in points >= 0
+ * that the tab occurred at >= 0.
+ * @return the tab stop, measured in points >= 0
*/
public float nextTabStop(float x, int tabOffset) {
if (tabSize == 0) {
--- a/jdk/src/share/classes/javax/swing/text/Position.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/Position.java Thu Oct 10 13:41:08 2013 -0700
@@ -51,7 +51,7 @@
/**
* Fetches the current offset within the document.
*
- * @return the offset >= 0
+ * @return the offset >= 0
*/
public int getOffset();
--- a/jdk/src/share/classes/javax/swing/text/StringContent.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/StringContent.java Thu Oct 10 13:41:08 2013 -0700
@@ -61,7 +61,7 @@
/**
* Creates a new StringContent object, with the initial
- * size specified. If the length is < 1, a size of 1 is used.
+ * size specified. If the length is < 1, a size of 1 is used.
*
* @param initialLength the initial size
*/
@@ -77,7 +77,7 @@
/**
* Returns the length of the content.
*
- * @return the length >= 1
+ * @return the length >= 1
* @see AbstractDocument.Content#length
*/
public int length() {
@@ -87,7 +87,7 @@
/**
* Inserts a string into the content.
*
- * @param where the starting position >= 0 && < length()
+ * @param where the starting position >= 0 && < length()
* @param str the non-null string to insert
* @return an UndoableEdit object for undoing
* @exception BadLocationException if the specified position is invalid
@@ -106,10 +106,10 @@
}
/**
- * Removes part of the content. where + nitems must be < length().
+ * Removes part of the content. where + nitems must be < length().
*
- * @param where the starting position >= 0
- * @param nitems the number of characters to remove >= 0
+ * @param where the starting position >= 0
+ * @param nitems the number of characters to remove >= 0
* @return an UndoableEdit object for undoing
* @exception BadLocationException if the specified position is invalid
* @see AbstractDocument.Content#remove
@@ -129,10 +129,10 @@
}
/**
- * Retrieves a portion of the content. where + len must be <= length().
+ * Retrieves a portion of the content. where + len must be <= length().
*
- * @param where the starting position >= 0
- * @param len the length to retrieve >= 0
+ * @param where the starting position >= 0
+ * @param len the length to retrieve >= 0
* @return a string representing the content; may be empty
* @exception BadLocationException if the specified position is invalid
* @see AbstractDocument.Content#getString
@@ -145,10 +145,10 @@
}
/**
- * Retrieves a portion of the content. where + len must be <= length()
+ * Retrieves a portion of the content. where + len must be <= length()
*
- * @param where the starting position >= 0
- * @param len the number of characters to retrieve >= 0
+ * @param where the starting position >= 0
+ * @param len the number of characters to retrieve >= 0
* @param chars the Segment object to return the characters in
* @exception BadLocationException if the specified position is invalid
* @see AbstractDocument.Content#getChars
@@ -166,7 +166,7 @@
* Creates a position within the content that will
* track change as the content is mutated.
*
- * @param offset the offset to create a position for >= 0
+ * @param offset the offset to create a position for >= 0
* @return the position
* @exception BadLocationException if the specified position is invalid
*/
@@ -266,8 +266,8 @@
* to subclasses.
*
* @param v the Vector to use, with a new one created on null
- * @param offset the starting offset >= 0
- * @param length the length >= 0
+ * @param offset the starting offset >= 0
+ * @param length the length >= 0
* @return the set of instances
*/
protected Vector getPositionsInRange(Vector v, int offset,
--- a/jdk/src/share/classes/javax/swing/text/StyleContext.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/StyleContext.java Thu Oct 10 13:41:08 2013 -0700
@@ -241,7 +241,7 @@
*
* @param family the font family (such as "Monospaced")
* @param style the style of the font (such as Font.PLAIN)
- * @param size the point size >= 1
+ * @param size the point size >= 1
* @return the new font
*/
public Font getFont(String family, int style, int size) {
@@ -1387,7 +1387,7 @@
/**
* Gets the number of attributes that are defined.
*
- * @return the number of attributes >= 0
+ * @return the number of attributes >= 0
* @see AttributeSet#getAttributeCount
*/
public int getAttributeCount() {
--- a/jdk/src/share/classes/javax/swing/text/StyledDocument.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/StyledDocument.java Thu Oct 10 13:41:08 2013 -0700
@@ -76,8 +76,8 @@
* giving an Attributes argument that has no attributes defined
* and setting replace to true.
*
- * @param offset the start of the change >= 0
- * @param length the length of the change >= 0
+ * @param offset the start of the change >= 0
+ * @param length the length of the change >= 0
* @param s the non-null attributes to change to. Any attributes
* defined will be applied to the text for the given range.
* @param replace indicates whether or not the previous
@@ -91,8 +91,8 @@
/**
* Sets paragraph attributes.
*
- * @param offset the start of the change >= 0
- * @param length the length of the change >= 0
+ * @param offset the start of the change >= 0
+ * @param length the length of the change >= 0
* @param s the non-null attributes to change to. Any attributes
* defined will be applied to the text for the given range.
* @param replace indicates whether or not the previous
@@ -111,7 +111,7 @@
* in turn may resolve through some hierarchy completely
* independent of the element hierarchy in the document.
*
- * @param pos the starting position >= 0
+ * @param pos the starting position >= 0
* @param s the style to set
*/
public void setLogicalStyle(int pos, Style s);
@@ -119,7 +119,7 @@
/**
* Gets a logical style for a given position in a paragraph.
*
- * @param p the position >= 0
+ * @param p the position >= 0
* @return the style
*/
public Style getLogicalStyle(int p);
@@ -128,7 +128,7 @@
* Gets the element that represents the paragraph that
* encloses the given offset within the document.
*
- * @param pos the offset >= 0
+ * @param pos the offset >= 0
* @return the element
*/
public Element getParagraphElement(int pos);
@@ -137,7 +137,7 @@
* Gets the element that represents the character that
* is at the given offset within the document.
*
- * @param pos the offset >= 0
+ * @param pos the offset >= 0
* @return the element
*/
public Element getCharacterElement(int pos);
--- a/jdk/src/share/classes/javax/swing/text/StyledEditorKit.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/StyledEditorKit.java Thu Oct 10 13:41:08 2013 -0700
@@ -689,7 +689,7 @@
* Creates a new AlignmentAction.
*
* @param nm the action name
- * @param a the alignment >= 0
+ * @param a the alignment >= 0
*/
public AlignmentAction(String nm, int a) {
super(nm);
--- a/jdk/src/share/classes/javax/swing/text/TabExpander.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/TabExpander.java Thu Oct 10 13:41:08 2013 -0700
@@ -37,10 +37,10 @@
* Returns the next tab stop position given a reference
* position. Values are expressed in points.
*
- * @param x the position in points >= 0
+ * @param x the position in points >= 0
* @param tabOffset the position within the text stream
- * that the tab occurred at >= 0.
- * @return the next tab stop >= 0
+ * that the tab occurred at >= 0.
+ * @return the next tab stop >= 0
*/
float nextTabStop(float x, int tabOffset);
--- a/jdk/src/share/classes/javax/swing/text/TabableView.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/TabableView.java Thu Oct 10 13:41:08 2013 -0700
@@ -46,9 +46,9 @@
* along the axis of tab expansion.
*
* @param x the position the view would be located
- * at for the purpose of tab expansion >= 0.
+ * at for the purpose of tab expansion >= 0.
* @param e how to expand the tabs when encountered.
- * @return the desired span >= 0
+ * @return the desired span >= 0
*/
float getTabbedSpan(float x, TabExpander e);
@@ -62,9 +62,9 @@
* an assumption that the range given does not
* contain tabs.
*
- * @param p0 the starting location in the text document >= 0
- * @param p1 the ending location in the text document >= p0
- * @return the span >= 0
+ * @param p0 the starting location in the text document >= 0
+ * @param p1 the ending location in the text document >= p0
+ * @return the span >= 0
*/
float getPartialSpan(int p0, int p1);
}
--- a/jdk/src/share/classes/javax/swing/text/TableView.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/TableView.java Thu Oct 10 13:41:08 2013 -0700
@@ -542,7 +542,7 @@
* view the children do not necessarily have a one to one mapping
* with the child elements.
*
- * @param pos the search position >= 0
+ * @param pos the search position >= 0
* @param a the allocation to the table on entry, and the
* allocation of the view containing the position on exit
* @return the view representing the given position, or
@@ -755,7 +755,7 @@
* view the children do not necessarily have a one to one mapping
* with the child elements.
*
- * @param pos the search position >= 0
+ * @param pos the search position >= 0
* @param a the allocation to the table on entry, and the
* allocation of the view containing the position on exit
* @return the view representing the given position, or
@@ -833,8 +833,8 @@
/**
* Sets the grid location.
*
- * @param row the row >= 0
- * @param col the column >= 0
+ * @param row the row >= 0
+ * @param col the column >= 0
*/
public void setGridLocation(int row, int col) {
this.row = row;
@@ -871,8 +871,8 @@
/**
* Sets the grid location.
*
- * @param row the row >= 0
- * @param col the column >= 0
+ * @param row the row >= 0
+ * @param col the column >= 0
*/
public void setGridLocation(int row, int col);
--- a/jdk/src/share/classes/javax/swing/text/Utilities.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/Utilities.java Thu Oct 10 13:41:08 2013 -0700
@@ -71,12 +71,12 @@
* where ints are used and 72dpi is assumed.
*
* @param s the source of the text
- * @param x the X origin >= 0
- * @param y the Y origin >= 0
+ * @param x the X origin >= 0
+ * @param y the Y origin >= 0
* @param g the graphics context
* @param e how to expand the tabs. If this value is null,
* tabs will be expanded as a space character.
- * @param startOffset starting offset of the text in the document >= 0
+ * @param startOffset starting offset of the text in the document >= 0
* @return the X location at the end of the rendered text
*/
public static final int drawTabbedText(Segment s, int x, int y, Graphics g,
@@ -92,12 +92,12 @@
*
* @param view View requesting rendering, may be null.
* @param s the source of the text
- * @param x the X origin >= 0
- * @param y the Y origin >= 0
+ * @param x the X origin >= 0
+ * @param y the Y origin >= 0
* @param g the graphics context
* @param e how to expand the tabs. If this value is null,
* tabs will be expanded as a space character.
- * @param startOffset starting offset of the text in the document >= 0
+ * @param startOffset starting offset of the text in the document >= 0
* @return the X location at the end of the rendered text
*/
static final int drawTabbedText(View view,
@@ -197,10 +197,10 @@
*
* @param s the source of the text
* @param metrics the font metrics to use for the calculation
- * @param x the X origin >= 0
+ * @param x the X origin >= 0
* @param e how to expand the tabs. If this value is null,
* tabs will be expanded as a space character.
- * @param startOffset starting offset of the text in the document >= 0
+ * @param startOffset starting offset of the text in the document >= 0
* @return the width of the text
*/
public static final int getTabbedTextWidth(Segment s, FontMetrics metrics, int x,
@@ -289,13 +289,13 @@
* @param s the source of the text
* @param metrics the font metrics to use for the calculation
* @param x0 the starting view location representing the start
- * of the given text >= 0.
+ * of the given text >= 0.
* @param x the target view location to translate to an
- * offset into the text >= 0.
+ * offset into the text >= 0.
* @param e how to expand the tabs. If this value is null,
* tabs will be expanded as a space character.
- * @param startOffset starting offset of the text in the document >= 0
- * @return the offset into the text >= 0
+ * @param startOffset starting offset of the text in the document >= 0
+ * @return the offset into the text >= 0
*/
public static final int getTabbedTextOffset(Segment s, FontMetrics metrics,
int x0, int x, TabExpander e,
@@ -488,8 +488,8 @@
* a value of -1 will be returned.
*
* @param c the editor
- * @param offs the offset in the document >= 0
- * @return the position >= 0 if the request can be computed, otherwise
+ * @param offs the offset in the document >= 0
+ * @return the position >= 0 if the request can be computed, otherwise
* a value of -1 will be returned.
* @exception BadLocationException if the offset is out of range
*/
@@ -518,8 +518,8 @@
* a value of -1 will be returned.
*
* @param c the editor
- * @param offs the offset in the document >= 0
- * @return the position >= 0 if the request can be computed, otherwise
+ * @param offs the offset in the document >= 0
+ * @return the position >= 0 if the request can be computed, otherwise
* a value of -1 will be returned.
* @exception BadLocationException if the offset is out of range
*/
@@ -549,9 +549,9 @@
* a value of -1 will be returned.
*
* @param c the editor
- * @param offs the offset in the document >= 0
- * @param x the X coordinate >= 0
- * @return the position >= 0 if the request can be computed, otherwise
+ * @param offs the offset in the document >= 0
+ * @param x the X coordinate >= 0
+ * @return the position >= 0 if the request can be computed, otherwise
* a value of -1 will be returned.
* @exception BadLocationException if the offset is out of range
*/
@@ -586,9 +586,9 @@
* a value of -1 will be returned.
*
* @param c the editor
- * @param offs the offset in the document >= 0
- * @param x the X coordinate >= 0
- * @return the position >= 0 if the request can be computed, otherwise
+ * @param offs the offset in the document >= 0
+ * @param x the X coordinate >= 0
+ * @return the position >= 0 if the request can be computed, otherwise
* a value of -1 will be returned.
* @exception BadLocationException if the offset is out of range
*/
@@ -622,8 +622,8 @@
* Uses BreakIterator.getWordInstance() to actually get the words.
*
* @param c the editor
- * @param offs the offset in the document >= 0
- * @return the location in the model of the word start >= 0
+ * @param offs the offset in the document >= 0
+ * @return the location in the model of the word start >= 0
* @exception BadLocationException if the offset is out of range
*/
public static final int getWordStart(JTextComponent c, int offs) throws BadLocationException {
@@ -656,8 +656,8 @@
* Uses BreakIterator.getWordInstance() to actually get the words.
*
* @param c the editor
- * @param offs the offset in the document >= 0
- * @return the location in the model of the word end >= 0
+ * @param offs the offset in the document >= 0
+ * @return the location in the model of the word end >= 0
* @exception BadLocationException if the offset is out of range
*/
public static final int getWordEnd(JTextComponent c, int offs) throws BadLocationException {
@@ -689,8 +689,8 @@
* Uses BreakIterator.getWordInstance() to actually get the words.
*
* @param c the editor
- * @param offs the offset in the document >= 0
- * @return the location in the model of the word start >= 0
+ * @param offs the offset in the document >= 0
+ * @return the location in the model of the word start >= 0
* @exception BadLocationException if the offset is out of range
*/
public static final int getNextWord(JTextComponent c, int offs) throws BadLocationException {
@@ -767,8 +767,8 @@
* Uses BreakIterator.getWordInstance() to actually get the words.
*
* @param c the editor
- * @param offs the offset in the document >= 0
- * @return the location in the model of the word start >= 0
+ * @param offs the offset in the document >= 0
+ * @return the location in the model of the word start >= 0
* @exception BadLocationException if the offset is out of range
*/
public static final int getPreviousWord(JTextComponent c, int offs) throws BadLocationException {
@@ -841,7 +841,7 @@
* Determines the element to use for a paragraph/line.
*
* @param c the editor
- * @param offs the starting offset in the document >= 0
+ * @param offs the starting offset in the document >= 0
* @return the element
*/
public static final Element getParagraphElement(JTextComponent c, int offs) {
@@ -972,7 +972,7 @@
* must then override the <code>flipEastAndWestAtEnds</code> method.
*
* @param v View to query
- * @param pos the position to convert >= 0
+ * @param pos the position to convert >= 0
* @param a the allocated region to render into
* @param direction the direction from the current position that can
* be thought of as the arrow keys typically found on a keyboard;
--- a/jdk/src/share/classes/javax/swing/text/View.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/View.java Thu Oct 10 13:41:08 2013 -0700
@@ -72,12 +72,12 @@
alt="The above text describes this graphic.">
<p>The minimum set of methods for layout are:
<ul>
- <li><a href="#getMinimumSpan(int)">getMinimumSpan</a>
- <li><a href="#getPreferredSpan(int)">getPreferredSpan</a>
- <li><a href="#getMaximumSpan(int)">getMaximumSpan</a>
- <li><a href="#getAlignment(int)">getAlignment</a>
- <li><a href="#preferenceChanged(javax.swing.text.View, boolean, boolean)">preferenceChanged</a>
- <li><a href="#setSize(float, float)">setSize</a>
+ <li>{@link #getMinimumSpan(int) getMinimumSpan}
+ <li>{@link #getPreferredSpan(int) getPreferredSpan}
+ <li>{@link #getMaximumSpan(int) getMaximumSpan}
+ <li>{@link #getAlignment(int) getAlignment}
+ <li>{@link #preferenceChanged(javax.swing.text.View, boolean, boolean) preferenceChanged}
+ <li>{@link #setSize(float, float) setSize}
</ul>
<p>The <code>setSize</code> method should be prepared to be called a number of times
@@ -142,7 +142,7 @@
</ul>
<p>The methods for rendering are:
<ul>
- <li><a href="#paint(java.awt.Graphics, java.awt.Shape)">paint</a>
+ <li>{@link #paint(java.awt.Graphics, java.awt.Shape) paint}
</ul>
<p>
@@ -153,12 +153,12 @@
to perform translation to properly locate spatial representation of the model.
The methods for doing this are:
<ul>
- <li><a href="#modelToView(int, javax.swing.text.Position.Bias, int, javax.swing.text.Position.Bias, java.awt.Shape)">modelToView</a>
- <li><a href="#viewToModel(float, float, java.awt.Shape, javax.swing.text.Position.Bias[])">viewToModel</a>
- <li><a href="#getDocument()">getDocument</a>
- <li><a href="#getElement()">getElement</a>
- <li><a href="#getStartOffset()">getStartOffset</a>
- <li><a href="#getEndOffset()">getEndOffset</a>
+ <li>{@link #modelToView(int, javax.swing.text.Position.Bias, int, javax.swing.text.Position.Bias, java.awt.Shape) modelToView}
+ <li>{@link #viewToModel(float, float, java.awt.Shape, javax.swing.text.Position.Bias[]) viewToModel}
+ <li>{@link #getDocument() getDocument}
+ <li>{@link #getElement() getElement}
+ <li>{@link #getStartOffset() getStartOffset}
+ <li>{@link #getEndOffset() getEndOffset}
</ul>
<p>The layout must be valid prior to attempting to make the translation.
The translation is not valid, and must not be attempted while changes
@@ -1137,32 +1137,9 @@
*/
protected void forwardUpdate(DocumentEvent.ElementChange ec,
DocumentEvent e, Shape a, ViewFactory f) {
- Element elem = getElement();
- int pos = e.getOffset();
- int index0 = getViewIndex(pos, Position.Bias.Forward);
- if (index0 == -1 && e.getType() == DocumentEvent.EventType.REMOVE &&
- pos >= getEndOffset()) {
- // Event beyond our offsets. We may have represented this, that is
- // the remove may have removed one of our child Elements that
- // represented this, so, we should foward to last element.
- index0 = getViewCount() - 1;
- }
- int index1 = index0;
- View v = (index0 >= 0) ? getView(index0) : null;
- if (v != null) {
- if ((v.getStartOffset() == pos) && (pos > 0)) {
- // If v is at a boundary, forward the event to the previous
- // view too.
- index0 = Math.max(index0 - 1, 0);
- }
- }
- if (e.getType() != DocumentEvent.EventType.REMOVE) {
- index1 = getViewIndex(pos + e.getLength(), Position.Bias.Forward);
- if (index1 < 0) {
- index1 = getViewCount() - 1;
- }
- }
- int hole0 = index1 + 1;
+ calculateUpdateIndexes(e);
+
+ int hole0 = lastUpdateIndex + 1;
int hole1 = hole0;
Element[] addedElems = (ec != null) ? ec.getChildrenAdded() : null;
if ((addedElems != null) && (addedElems.length > 0)) {
@@ -1173,11 +1150,9 @@
// forward to any view not in the forwarding hole
// formed by added elements (i.e. they will be updated
// by initialization.
- index0 = Math.max(index0, 0);
- index1 = Math.max((getViewCount() - 1), 0);
- for (int i = index0; i <= index1; i++) {
+ for (int i = firstUpdateIndex; i <= lastUpdateIndex; i++) {
if (! ((i >= hole0) && (i <= hole1))) {
- v = getView(i);
+ View v = getView(i);
if (v != null) {
Shape childAlloc = getChildAllocation(i, a);
forwardUpdateToView(v, e, childAlloc, f);
@@ -1187,6 +1162,39 @@
}
/**
+ * Calculates the first and the last indexes of the child views
+ * that need to be notified of the change to the model.
+ * @param e the change information from the associated document
+ */
+ void calculateUpdateIndexes(DocumentEvent e) {
+ int pos = e.getOffset();
+ firstUpdateIndex = getViewIndex(pos, Position.Bias.Forward);
+ if (firstUpdateIndex == -1 && e.getType() == DocumentEvent.EventType.REMOVE &&
+ pos >= getEndOffset()) {
+ // Event beyond our offsets. We may have represented this, that is
+ // the remove may have removed one of our child Elements that
+ // represented this, so, we should forward to last element.
+ firstUpdateIndex = getViewCount() - 1;
+ }
+ lastUpdateIndex = firstUpdateIndex;
+ View v = (firstUpdateIndex >= 0) ? getView(firstUpdateIndex) : null;
+ if (v != null) {
+ if ((v.getStartOffset() == pos) && (pos > 0)) {
+ // If v is at a boundary, forward the event to the previous
+ // view too.
+ firstUpdateIndex = Math.max(firstUpdateIndex - 1, 0);
+ }
+ }
+ if (e.getType() != DocumentEvent.EventType.REMOVE) {
+ lastUpdateIndex = getViewIndex(pos + e.getLength(), Position.Bias.Forward);
+ if (lastUpdateIndex < 0) {
+ lastUpdateIndex = getViewCount() - 1;
+ }
+ }
+ firstUpdateIndex = Math.max(firstUpdateIndex, 0);
+ }
+
+ /**
* Forwards the <code>DocumentEvent</code> to the give child view. This
* simply messages the view with a call to <code>insertUpdate</code>,
* <code>removeUpdate</code>, or <code>changedUpdate</code> depending
@@ -1345,4 +1353,14 @@
private View parent;
private Element elem;
+ /**
+ * The index of the first child view to be notified.
+ */
+ int firstUpdateIndex;
+
+ /**
+ * The index of the last child view to be notified.
+ */
+ int lastUpdateIndex;
+
};
--- a/jdk/src/share/classes/javax/swing/text/WrappedPlainView.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/WrappedPlainView.java Thu Oct 10 13:41:08 2013 -0700
@@ -93,11 +93,11 @@
* <code>drawSelectedText</code> so that the way selected and
* unselected text are rendered can be customized.
*
- * @param p0 the starting document location to use >= 0
- * @param p1 the ending document location to use >= p1
+ * @param p0 the starting document location to use >= 0
+ * @param p1 the ending document location to use >= p1
* @param g the graphics context
- * @param x the starting X position >= 0
- * @param y the starting Y position >= 0
+ * @param x the starting X position >= 0
+ * @param y the starting Y position >= 0
* @see #drawUnselectedText
* @see #drawSelectedText
*/
@@ -165,11 +165,11 @@
* text.
*
* @param g the graphics context
- * @param x the starting X coordinate >= 0
- * @param y the starting Y coordinate >= 0
- * @param p0 the beginning position in the model >= 0
- * @param p1 the ending position in the model >= p0
- * @return the X location of the end of the range >= 0
+ * @param x the starting X coordinate >= 0
+ * @param y the starting Y coordinate >= 0
+ * @param p0 the beginning position in the model >= 0
+ * @param p1 the ending position in the model >= p0
+ * @return the X location of the end of the range >= 0
* @exception BadLocationException if the range is invalid
*/
protected int drawUnselectedText(Graphics g, int x, int y,
@@ -190,10 +190,10 @@
* the selected background.
*
* @param g the graphics context
- * @param x the starting X coordinate >= 0
- * @param y the starting Y coordinate >= 0
- * @param p0 the beginning position in the model >= 0
- * @param p1 the ending position in the model >= p0
+ * @param x the starting X coordinate >= 0
+ * @param y the starting Y coordinate >= 0
+ * @param p0 the beginning position in the model >= 0
+ * @param p1 the ending position in the model >= p0
* @return the location of the end of the range.
* @exception BadLocationException if the range is invalid
*/
@@ -326,10 +326,10 @@
* This implementation does not support things like centering so it
* ignores the tabOffset argument.
*
- * @param x the current position >= 0
+ * @param x the current position >= 0
* @param tabOffset the position within the text stream
- * that the tab occurred at >= 0.
- * @return the tab stop, measured in points >= 0
+ * that the tab occurred at >= 0.
+ * @return the tab stop, measured in points >= 0
*/
public float nextTabStop(float x, int tabOffset) {
if (tabSize == 0)
@@ -374,8 +374,8 @@
* layout of the view along the given axis, if it
* has any layout duties.
*
- * @param width the width >= 0
- * @param height the height >= 0
+ * @param width the width >= 0
+ * @param height the height >= 0
*/
public void setSize(float width, float height) {
updateMetrics();
--- a/jdk/src/share/classes/javax/swing/text/ZoneView.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/ZoneView.java Thu Oct 10 13:41:08 2013 -0700
@@ -130,7 +130,7 @@
*
* @param mzl the desired maximum number of zones
* to be actively loaded, must be greater than 0
- * @exception IllegalArgumentException if <code>mzl</code> is < 1
+ * @exception IllegalArgumentException if <code>mzl</code> is < 1
*/
public void setMaxZonesLoaded(int mzl) {
if (mzl < 1) {
@@ -198,11 +198,11 @@
* implementation for a zone by changing this method.
*
* @param p0 the start of the desired zone. This should
- * be >= getStartOffset() and < getEndOffset(). This
- * value should also be < p1.
+ * be >= getStartOffset() and < getEndOffset(). This
+ * value should also be < p1.
* @param p1 the end of the desired zone. This should
- * be > getStartOffset() and <= getEndOffset(). This
- * value should also be > p0.
+ * be > getStartOffset() and <= getEndOffset(). This
+ * value should also be > p0.
*/
protected View createZone(int p0, int p1) {
Document doc = getDocument();
@@ -242,7 +242,7 @@
* Returns the child view index representing the given position in
* the model.
*
- * @param pos the position >= 0
+ * @param pos the position >= 0
* @return index of the view representing the given position, or
* -1 if no view represents that position
*/
--- a/jdk/src/share/classes/javax/swing/text/html/BlockView.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/html/BlockView.java Thu Oct 10 13:41:08 2013 -0700
@@ -352,7 +352,7 @@
*
* @param axis may be either <code>View.X_AXIS</code>
* or <code>View.Y_AXIS</code>
- * @return the span the view would like to be rendered into >= 0;
+ * @return the span the view would like to be rendered into >= 0;
* typically the view is told to render into the span
* that is returned, although there is no guarantee;
* the parent may choose to resize or break the view
@@ -368,7 +368,7 @@
*
* @param axis may be either <code>View.X_AXIS</code>
* or <code>View.Y_AXIS</code>
- * @return the span the view would like to be rendered into >= 0;
+ * @return the span the view would like to be rendered into >= 0;
* typically the view is told to render into the span
* that is returned, although there is no guarantee;
* the parent may choose to resize or break the view
@@ -384,7 +384,7 @@
*
* @param axis may be either <code>View.X_AXIS</code>
* or <code>View.Y_AXIS</code>
- * @return the span the view would like to be rendered into >= 0;
+ * @return the span the view would like to be rendered into >= 0;
* typically the view is told to render into the span
* that is returned, although there is no guarantee;
* the parent may choose to resize or break the view
--- a/jdk/src/share/classes/javax/swing/text/html/CSS.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/html/CSS.java Thu Oct 10 13:41:08 2013 -0700
@@ -117,7 +117,7 @@
* </ul>
* <p><b>Note: for the time being we do not fully support relative units,
* unless noted, so that
- * p { margin-top: 10% } will be treated as if no margin-top was specified.
+ * p { margin-top: 10% } will be treated as if no margin-top was specified.</b>
*
* @author Timothy Prinzing
* @author Scott Violet
--- a/jdk/src/share/classes/javax/swing/text/html/FormView.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/html/FormView.java Thu Oct 10 13:41:08 2013 -0700
@@ -380,7 +380,7 @@
* axis of interest.
*
* @param axis may be either View.X_AXIS or View.Y_AXIS
- * @return the span the view would like to be rendered into >= 0.
+ * @return the span the view would like to be rendered into >= 0.
* Typically the view is told to render into the span
* that is returned, although there is no guarantee.
* The parent may choose to resize or break the view.
--- a/jdk/src/share/classes/javax/swing/text/html/HTMLDocument.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/html/HTMLDocument.java Thu Oct 10 13:41:08 2013 -0700
@@ -107,21 +107,21 @@
* <p>With the following HTML content:</p>
*
* <pre>
- * <html>
- * <head>
- * <title>An example HTMLDocument</title>
- * <style type="text/css">
+ * <html>
+ * <head>
+ * <title>An example HTMLDocument</title>
+ * <style type="text/css">
* div { background-color: silver; }
* ul { color: red; }
- * </style>
- * </head>
- * <body>
- * <div id="BOX">
- * <p>Paragraph 1</p>
- * <p>Paragraph 2</p>
- * </div>
- * </body>
- * </html>
+ * </style>
+ * </head>
+ * <body>
+ * <div id="BOX">
+ * <p>Paragraph 1</p>
+ * <p>Paragraph 2</p>
+ * </div>
+ * </body>
+ * </html>
* </pre>
*
* <p>All the methods for modifying an HTML document require an {@link
@@ -149,10 +149,10 @@
* of any non-leaf element by using the methods
* <code>insertAfterStart</code> and <code>insertBeforeEnd</code>.
* For example, if <code>e</code> is the <code>DIV</code> element,
- * <code>d.insertAfterStart(e, "<ul><li>List
- * Item</li></ul>")</code> inserts the list before the first
- * paragraph, and <code>d.insertBeforeEnd(e, "<ul><li>List
- * Item</li></ul>")</code> inserts the list after the last
+ * <code>d.insertAfterStart(e, "<ul><li>List
+ * Item</li></ul>")</code> inserts the list before the first
+ * paragraph, and <code>d.insertBeforeEnd(e, "<ul><li>List
+ * Item</li></ul>")</code> inserts the list after the last
* paragraph. The <code>DIV</code> block becomes the parent of the
* newly inserted elements.</p>
*
@@ -160,9 +160,9 @@
* using the methods <code>insertBeforeStart</code> and
* <code>insertAfterEnd</code>. For example, if <code>e</code> is the
* <code>DIV</code> element, <code>d.insertBeforeStart(e,
- * "<ul><li>List Item</li></ul>")</code> inserts the list
+ * "<ul><li>List Item</li></ul>")</code> inserts the list
* before the <code>DIV</code> element, and <code>d.insertAfterEnd(e,
- * "<ul><li>List Item</li></ul>")</code> inserts the list
+ * "<ul><li>List Item</li></ul>")</code> inserts the list
* after the <code>DIV</code> element. The newly inserted elements
* become siblings of the <code>DIV</code> element.</p>
*
@@ -171,10 +171,10 @@
* <p>Elements and all their descendants can be replaced by using the
* methods <code>setInnerHTML</code> and <code>setOuterHTML</code>.
* For example, if <code>e</code> is the <code>DIV</code> element,
- * <code>d.setInnerHTML(e, "<ul><li>List
- * Item</li></ul>")</code> replaces all children paragraphs with
- * the list, and <code>d.setOuterHTML(e, "<ul><li>List
- * Item</li></ul>")</code> replaces the <code>DIV</code> element
+ * <code>d.setInnerHTML(e, "<ul><li>List
+ * Item</li></ul>")</code> replaces all children paragraphs with
+ * the list, and <code>d.setOuterHTML(e, "<ul><li>List
+ * Item</li></ul>")</code> replaces the <code>DIV</code> element
* itself. In latter case the parent of the list is the
* <code>BODY</code> element.
*
@@ -184,6 +184,7 @@
* of various methods described above.</p>
*
* <table border=1 cellspacing=0>
+ * <caption></caption>
* <tr>
* <th>Example</th>
* <th><code>insertAfterStart</code></th>
@@ -985,25 +986,25 @@
* parameter is <b>in bold</b>).</p>
*
* <pre>
- * <body>
+ * <body>
* |
- * <b><div></b>
+ * <b><div></b>
* / \
- * <p> <p>
+ * <p> <p>
* </pre>
*
- * <p>Invoking <code>setInnerHTML(elem, "<ul><li>")</code>
+ * <p>Invoking <code>setInnerHTML(elem, "<ul><li>")</code>
* results in the following structure (new elements are <font
* color="red">in red</font>).</p>
*
* <pre>
- * <body>
+ * <body>
* |
- * <b><div></b>
+ * <b><div></b>
* \
- * <font color="red"><ul></font>
+ * <font color="red"><ul></font>
* \
- * <font color="red"><li></font>
+ * <font color="red"><li></font>
* </pre>
*
* <p>Parameter <code>elem</code> must not be a leaf element,
@@ -1066,23 +1067,23 @@
* parameter is <b>in bold</b>).</p>
*
* <pre>
- * <body>
+ * <body>
* |
- * <b><div></b>
+ * <b><div></b>
* / \
- * <p> <p>
+ * <p> <p>
* </pre>
*
- * <p>Invoking <code>setOuterHTML(elem, "<ul><li>")</code>
+ * <p>Invoking <code>setOuterHTML(elem, "<ul><li>")</code>
* results in the following structure (new elements are <font
* color="red">in red</font>).</p>
*
* <pre>
- * <body>
+ * <body>
* |
- * <font color="red"><ul></font>
+ * <font color="red"><ul></font>
* \
- * <font color="red"><li></font>
+ * <font color="red"><li></font>
* </pre>
*
* <p>If either <code>elem</code> or <code>htmlText</code>
@@ -1136,25 +1137,25 @@
* parameter is <b>in bold</b>).</p>
*
* <pre>
- * <body>
+ * <body>
* |
- * <b><div></b>
+ * <b><div></b>
* / \
- * <p> <p>
+ * <p> <p>
* </pre>
*
* <p>Invoking <code>insertAfterStart(elem,
- * "<ul><li>")</code> results in the following structure
+ * "<ul><li>")</code> results in the following structure
* (new elements are <font color="red">in red</font>).</p>
*
* <pre>
- * <body>
+ * <body>
* |
- * <b><div></b>
+ * <b><div></b>
* / | \
- * <font color="red"><ul></font> <p> <p>
+ * <font color="red"><ul></font> <p> <p>
* /
- * <font color="red"><li></font>
+ * <font color="red"><li></font>
* </pre>
*
* <p>Unlike the <code>insertBeforeStart</code> method, new
@@ -1206,25 +1207,25 @@
* parameter is <b>in bold</b>).</p>
*
* <pre>
- * <body>
+ * <body>
* |
- * <b><div></b>
+ * <b><div></b>
* / \
- * <p> <p>
+ * <p> <p>
* </pre>
*
- * <p>Invoking <code>insertBeforeEnd(elem, "<ul><li>")</code>
+ * <p>Invoking <code>insertBeforeEnd(elem, "<ul><li>")</code>
* results in the following structure (new elements are <font
* color="red">in red</font>).</p>
*
* <pre>
- * <body>
+ * <body>
* |
- * <b><div></b>
+ * <b><div></b>
* / | \
- * <p> <p> <font color="red"><ul></font>
+ * <p> <p> <font color="red"><ul></font>
* \
- * <font color="red"><li></font>
+ * <font color="red"><li></font>
* </pre>
*
* <p>Unlike the <code>insertAfterEnd</code> method, new elements
@@ -1273,23 +1274,23 @@
* parameter is <b>in bold</b>).</p>
*
* <pre>
- * <body>
+ * <body>
* |
- * <b><div></b>
+ * <b><div></b>
* / \
- * <p> <p>
+ * <p> <p>
* </pre>
*
* <p>Invoking <code>insertBeforeStart(elem,
- * "<ul><li>")</code> results in the following structure
+ * "<ul><li>")</code> results in the following structure
* (new elements are <font color="red">in red</font>).</p>
*
* <pre>
- * <body>
+ * <body>
* / \
- * <font color="red"><ul></font> <b><div></b>
+ * <font color="red"><ul></font> <b><div></b>
* / / \
- * <font color="red"><li></font> <p> <p>
+ * <font color="red"><li></font> <p> <p>
* </pre>
*
* <p>Unlike the <code>insertAfterStart</code> method, new
@@ -1331,23 +1332,23 @@
* parameter is <b>in bold</b>).</p>
*
* <pre>
- * <body>
+ * <body>
* |
- * <b><div></b>
+ * <b><div></b>
* / \
- * <p> <p>
+ * <p> <p>
* </pre>
*
- * <p>Invoking <code>insertAfterEnd(elem, "<ul><li>")</code>
+ * <p>Invoking <code>insertAfterEnd(elem, "<ul><li>")</code>
* results in the following structure (new elements are <font
* color="red">in red</font>).</p>
*
* <pre>
- * <body>
+ * <body>
* / \
- * <b><div></b> <font color="red"><ul></font>
+ * <b><div></b> <font color="red"><ul></font>
* / \ \
- * <p> <p> <font color="red"><li></font>
+ * <p> <p> <font color="red"><li></font>
* </pre>
*
* <p>Unlike the <code>insertBeforeEnd</code> method, new elements
@@ -2166,7 +2167,7 @@
* <tr><td><code>HTML.Tag.VAR</code> <td>CharacterAction
* </table>
* <p>
- * Once </html> is encountered, the Actions are no longer notified.
+ * Once </html> is encountered, the Actions are no longer notified.
*/
public class HTMLReader extends HTMLEditorKit.ParserCallback {
--- a/jdk/src/share/classes/javax/swing/text/html/HTMLEditorKit.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/html/HTMLEditorKit.java Thu Oct 10 13:41:08 2013 -0700
@@ -55,7 +55,6 @@
* an effect upon the way that HTML is modeled. These
* have influenced its design in a substantial way.
* <dl>
- * <p>
* <dt>
* Support editing
* <dd>
--- a/jdk/src/share/classes/javax/swing/text/html/ImageView.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/html/ImageView.java Thu Oct 10 13:41:08 2013 -0700
@@ -554,8 +554,8 @@
* Sets the size of the view. This should cause
* layout of the view if it has any layout duties.
*
- * @param width the width >= 0
- * @param height the height >= 0
+ * @param width the width >= 0
+ * @param height the height >= 0
*/
public void setSize(float width, float height) {
sync();
--- a/jdk/src/share/classes/javax/swing/text/html/InlineView.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/html/InlineView.java Thu Oct 10 13:41:08 2013 -0700
@@ -130,10 +130,10 @@
*
* @param axis may be either View.X_AXIS or View.Y_AXIS
* @param pos the potential location of the start of the
- * broken view >= 0. This may be useful for calculating tab
+ * broken view >= 0. This may be useful for calculating tab
* positions.
* @param len specifies the relative length from <em>pos</em>
- * where a potential break is desired >= 0.
+ * where a potential break is desired >= 0.
* @return the weight, which should be a value between
* ForcedBreakWeight and BadBreakWeight.
* @see LabelView
@@ -162,14 +162,14 @@
* @param axis may be either <code>View.X_AXIS</code> or
* <code>View.Y_AXIS</code>
* @param offset the location in the document model
- * that a broken fragment would occupy >= 0. This
+ * that a broken fragment would occupy >= 0. This
* would be the starting offset of the fragment
* returned
* @param pos the position along the axis that the
- * broken view would occupy >= 0. This may be useful for
+ * broken view would occupy >= 0. This may be useful for
* things like tab calculations
* @param len specifies the distance along the axis
- * where a potential break is desired >= 0
+ * where a potential break is desired >= 0
* @return the fragment of the view that represents the
* given span.
* @since 1.5
--- a/jdk/src/share/classes/javax/swing/text/html/StyleSheet.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/html/StyleSheet.java Thu Oct 10 13:41:08 2013 -0700
@@ -74,7 +74,7 @@
* is stored to translate the context of an element to a
* rule quickly. The following code fragment will display
* the named styles, and therefore the CSS rules contained.
- * <code><pre>
+ * <pre><code>
*
* import java.util.*;
* import javax.swing.text.*;
@@ -97,7 +97,7 @@
* }
* }
*
- * </pre></code>
+ * </code></pre>
* <p>
* The semantics for when a CSS style should overide visual attributes
* defined by an element are not well defined. For example, the html
--- a/jdk/src/share/classes/javax/swing/text/html/parser/ContentModel.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/html/parser/ContentModel.java Thu Oct 10 13:41:08 2013 -0700
@@ -42,7 +42,7 @@
*/
public final class ContentModel implements Serializable {
/**
- * Type. Either '*', '?', '+', ',', '|', '&'.
+ * Type. Either '*', '?', '+', ',', '|', '&'.
*/
public int type;
@@ -52,7 +52,7 @@
public Object content;
/**
- * The next content model (in a ',', '|' or '&' expression).
+ * The next content model (in a ',', '|' or '&' expression).
*/
public ContentModel next;
--- a/jdk/src/share/classes/javax/swing/text/html/parser/DocumentParser.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/html/parser/DocumentParser.java Thu Oct 10 13:41:08 2013 -0700
@@ -48,8 +48,8 @@
* <li><i>handleStartTag(head, ...)</i></li>
* <li><i>handleEndTag(head)</i></li>
* <li><i>handleStartTag(body, ...)</i></li>
- * <li>handleStartTag(p, ...)</i></li>
- * <li>handleText(...)</li>
+ * <li><i>handleStartTag(p, ...)</i></li>
+ * <li><i>handleText(...)</i></li>
* <li><i>handleEndTag(p)</i></li>
* <li><i>handleEndTag(body)</i></li>
* <li><i>handleEndTag(html)</i></li>
--- a/jdk/src/share/classes/javax/swing/text/html/parser/Parser.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/text/html/parser/Parser.java Thu Oct 10 13:41:08 2013 -0700
@@ -58,12 +58,12 @@
* space should be used here, but I am using &nbsp to force the space to
* be displayed):
* <p>
- * '<b>blah <i> <strike> foo' which can be treated as:
- * '<b>blah <i><strike>foo'
+ * '<b>blah <i> <strike> foo' which can be treated as:
+ * '<b>blah <i><strike>foo'
* <p>as well as:
- * '<p><a href="xx"> <em>Using</em></a></p>'
+ * '<p><a href="xx"> <em>Using</em></a></p>'
* which appears to be treated as:
- * '<p><a href="xx"><em>Using</em></a></p>'
+ * '<p><a href="xx"><em>Using</em></a></p>'
* <p>
* If <code>strict</code> is false, when a tag that breaks flow,
* (<code>TagElement.breaksFlows</code>) or trailing whitespace is
--- a/jdk/src/share/classes/javax/swing/tree/AbstractLayoutCache.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/tree/AbstractLayoutCache.java Thu Oct 10 13:41:08 2013 -0700
@@ -60,7 +60,7 @@
protected boolean rootVisible;
/**
- * Height to use for each row. If this is <= 0 the renderer will be
+ * Height to use for each row. If this is <= 0 the renderer will be
* used to determine the height for each row.
*/
protected int rowHeight;
--- a/jdk/src/share/classes/javax/swing/tree/DefaultTreeCellEditor.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/tree/DefaultTreeCellEditor.java Thu Oct 10 13:41:08 2013 -0700
@@ -430,7 +430,7 @@
/**
* Returns true if <code>event</code> is <code>null</code>,
- * or it is a <code>MouseEvent</code> with a click count > 2
+ * or it is a <code>MouseEvent</code> with a click count > 2
* and <code>inHitRegion</code> returns true.
* @param event the event being studied
*/
@@ -448,7 +448,7 @@
/**
* Returns true if the passed in location is a valid mouse location
* to start editing from. This is implemented to return false if
- * <code>x</code> is <= the width of the icon and icon gap displayed
+ * <code>x</code> is <= the width of the icon and icon gap displayed
* by the renderer. In other words this returns true if the user
* clicks over the text part displayed by the renderer, and false
* otherwise.
--- a/jdk/src/share/classes/javax/swing/tree/DefaultTreeCellRenderer.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/tree/DefaultTreeCellRenderer.java Thu Oct 10 13:41:08 2013 -0700
@@ -60,8 +60,7 @@
* that have a value of type {@code UIResource} are refreshed from the
* defaults table. The following table lists the mapping between
* {@code DefaultTreeCellRenderer} property and defaults table key:
- * <table border="1" cellpadding="1" cellspacing="0"
- * valign="top" >
+ * <table border="1" cellpadding="1" cellspacing="0" summary="">
* <tr valign="top" align="left">
* <th bgcolor="#CCCCFF" align="left">Property:
* <th bgcolor="#CCCCFF" align="left">Key:
--- a/jdk/src/share/classes/javax/swing/tree/DefaultTreeModel.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/tree/DefaultTreeModel.java Thu Oct 10 13:41:08 2013 -0700
@@ -164,8 +164,8 @@
* Returns the child of <I>parent</I> at index <I>index</I> in the parent's
* child array. <I>parent</I> must be a node previously obtained from
* this data source. This should not return null if <i>index</i>
- * is a valid index for <i>parent</i> (that is <i>index</i> >= 0 &&
- * <i>index</i> < getChildCount(<i>parent</i>)).
+ * is a valid index for <i>parent</i> (that is <i>index</i> >= 0 &&
+ * <i>index</i> < getChildCount(<i>parent</i>)).
*
* @param parent a node in the tree, obtained from this data source
* @return the child of <I>parent</I> at index <I>index</I>
--- a/jdk/src/share/classes/javax/swing/tree/TreeCellRenderer.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/tree/TreeCellRenderer.java Thu Oct 10 13:41:08 2013 -0700
@@ -59,8 +59,8 @@
* <pre>
* JTree.DropLocation dropLocation = tree.getDropLocation();
* if (dropLocation != null
- * && dropLocation.getChildIndex() == -1
- * && tree.getRowForPath(dropLocation.getPath()) == row) {
+ * && dropLocation.getChildIndex() == -1
+ * && tree.getRowForPath(dropLocation.getPath()) == row) {
*
* // this row represents the current drop location
* // so render it specially, perhaps with a different color
--- a/jdk/src/share/classes/javax/swing/tree/TreeModel.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/tree/TreeModel.java Thu Oct 10 13:41:08 2013 -0700
@@ -76,8 +76,8 @@
* child array. <code>parent</code> must be a node previously obtained
* from this data source. This should not return <code>null</code>
* if <code>index</code>
- * is a valid index for <code>parent</code> (that is <code>index >= 0 &&
- * index < getChildCount(parent</code>)).
+ * is a valid index for <code>parent</code> (that is <code>index >= 0 &&
+ * index < getChildCount(parent</code>)).
*
* @param parent a node in the tree, obtained from this data source
* @return the child of <code>parent</code> at index <code>index</code>
--- a/jdk/src/share/classes/javax/swing/undo/UndoManager.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/javax/swing/undo/UndoManager.java Thu Oct 10 13:41:08 2013 -0700
@@ -57,9 +57,9 @@
* and italicized are insignificant.
* <p>
* <a name="figure1"></a>
- * <table border=0>
+ * <table border=0 summary="">
* <tr><td>
- * <img src="doc-files/UndoManager-1.gif">
+ * <img src="doc-files/UndoManager-1.gif" alt="">
* <tr><td align=center>Figure 1
* </table>
* <p>
@@ -70,9 +70,9 @@
* figure.
* <p>
* <a name="figure2"></a>
- * <table border=0>
+ * <table border=0 summary="">
* <tr><td>
- * <img src="doc-files/UndoManager-2.gif">
+ * <img src="doc-files/UndoManager-2.gif" alt="">
* <tr><td align=center>Figure 2
* </table>
* <p>
@@ -82,9 +82,9 @@
* next edit to 0, as shown in the following figure.
* <p>
* <a name="figure3"></a>
- * <table border=0>
+ * <table border=0 summary="">
* <tr><td>
- * <img src="doc-files/UndoManager-3.gif">
+ * <img src="doc-files/UndoManager-3.gif" alt="">
* <tr><td align=center>Figure 3
* </table>
* <p>
@@ -108,9 +108,9 @@
* figure.
* <p>
* <a name="figure4"></a>
- * <table border=0>
+ * <table border=0 summary="">
* <tr><td>
- * <img src="doc-files/UndoManager-4.gif">
+ * <img src="doc-files/UndoManager-4.gif" alt="">
* <tr><td align=center>Figure 4
* </table>
* <p>
--- a/jdk/src/share/classes/sun/applet/resources/MsgAppletViewer_de.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/applet/resources/MsgAppletViewer_de.java Thu Oct 10 13:41:08 2013 -0700
@@ -73,7 +73,7 @@
{"appletviewer.parse.warning.embed.requiresheight", "Warnung: F\u00FCr <embed>-Tag ist ein \"height\"-Attribut erforderlich."},
{"appletviewer.parse.warning.embed.requireswidth", "Warnung: F\u00FCr <embed>-Tag ist ein \"width\"-Attribut erforderlich."},
{"appletviewer.parse.warning.appnotLongersupported", "Warnung: <app>-Tag wird nicht mehr unterst\u00FCtzt. Verwenden Sie stattdessen <applet>:"},
- {"appletviewer.usage", "Verwendung: appletviewer <Optionen> url(s)\n\nwobei die <Optionen> Folgendes umfassen:\n -debug Applet Viewer im Java-Debugger starten\n -encoding <Codierung> Zeichencodierung f\u00FCr HTML-Dateien angeben\n -J <Laufzeitkennzeichen> Argument an den Java-Interpreter \u00FCbergeben\n\nDie Option \"-J\" ist nicht standardm\u00E4\u00DFig und kann ohne vorherige Ank\u00FCndigung ge\u00E4ndert werden."},
+ {"appletviewer.usage", "Verwendung: appletviewer <Optionen> url(s)\n\nwobei die <Optionen> Folgendes umfassen:\n -debug Applet Viewer im Java-Debugger starten\n -encoding <Codierung> Zeichencodierung f\u00FCr HTML-Dateien angeben\n -J<Laufzeitkennzeichen> Argument an den Java-Interpreter \u00FCbergeben\n\nDie Option \"-J\" ist nicht standardm\u00E4\u00DFig und kann ohne vorherige Ank\u00FCndigung ge\u00E4ndert werden."},
{"appletviewer.main.err.unsupportedopt", "Nicht unterst\u00FCtzte Option: {0}"},
{"appletviewer.main.err.unrecognizedarg", "Unbekanntes Argument: {0}"},
{"appletviewer.main.err.dupoption", "Doppelte Verwendung von Option: {0}"},
--- a/jdk/src/share/classes/sun/awt/AWTAccessor.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/awt/AWTAccessor.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 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
@@ -39,6 +39,7 @@
import java.security.AccessControlContext;
import java.io.File;
+import java.util.ResourceBundle;
import java.util.Vector;
/**
@@ -236,6 +237,11 @@
*/
AccessControlContext getAccessControlContext(Component comp);
+ /**
+ * Revalidates the component synchronously.
+ */
+ void revalidateSynchronously(Component comp);
+
}
/*
@@ -246,6 +252,14 @@
* Validates the container unconditionally.
*/
void validateUnconditionally(Container cont);
+
+ /**
+ *
+ * Access to the private version of findComponentAt method which has
+ * a controllable behavior. Setting 'ignoreEnabled' to 'false'
+ * bypasses disabled Components during the search.
+ */
+ Component findComponentAt(Container cont, int x, int y, boolean ignoreEnabled);
}
/*
@@ -700,6 +714,13 @@
}
/*
+ * An accessor for the Toolkit class
+ */
+ public interface ToolkitAccessor {
+ void setPlatformResources(ResourceBundle bundle);
+ }
+
+ /*
* Accessor instances are initialized in the static initializers of
* corresponding AWT classes by using setters defined below.
*/
@@ -726,6 +747,7 @@
private static TrayIconAccessor trayIconAccessor;
private static DefaultKeyboardFocusManagerAccessor defaultKeyboardFocusManagerAccessor;
private static SequencedEventAccessor sequencedEventAccessor;
+ private static ToolkitAccessor toolkitAccessor;
/*
* Set an accessor object for the java.awt.Component class.
@@ -1119,4 +1141,22 @@
// (so not a single instance of the event has been created).
return sequencedEventAccessor;
}
+
+ /*
+ * Set an accessor object for the java.awt.Toolkit class.
+ */
+ public static void setToolkitAccessor(ToolkitAccessor ta) {
+ toolkitAccessor = ta;
+ }
+
+ /*
+ * Get the accessor object for the java.awt.Toolkit class.
+ */
+ public static ToolkitAccessor getToolkitAccessor() {
+ if (toolkitAccessor == null) {
+ unsafe.ensureClassInitialized(Toolkit.class);
+ }
+
+ return toolkitAccessor;
+ }
}
--- a/jdk/src/share/classes/sun/awt/GlobalCursorManager.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/awt/GlobalCursorManager.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -134,7 +134,6 @@
*/
protected abstract void getCursorPos(Point p);
- protected abstract Component findComponentAt(Container con, int x, int y);
protected abstract Point getLocationOnScreen(Component com);
/**
@@ -190,9 +189,10 @@
if (p != null) {
queryPos = new Point();
getCursorPos(queryPos);
- Component c = findComponentAt((Container)comp,
- queryPos.x - p.x,
- queryPos.y - p.y);
+ Component c = AWTAccessor.getContainerAccessor().
+ findComponentAt((Container) comp,
+ queryPos.x - p.x, queryPos.y - p.y, false);
+
// If findComponentAt returns null, then something bad has
// happened. For example, the heavyweight Component may
// have been hidden or disabled by another thread. In that
--- a/jdk/src/share/classes/sun/awt/datatransfer/DataTransferer.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/awt/datatransfer/DataTransferer.java Thu Oct 10 13:41:08 2013 -0700
@@ -1765,7 +1765,14 @@
Reader reader = new InputStreamReader(is, unicode);
theObject = constructFlavoredObject(reader, flavor, Reader.class);
-
+ // Target data is a byte array
+ } else if (byteArrayClass.equals(flavor.getRepresentationClass())) {
+ if(isFlavorCharsetTextType(flavor) && isTextFormat(format)) {
+ theObject = translateBytesToString(inputStreamToByteArray(str), format, localeTransferable)
+ .getBytes(DataTransferer.getTextCharset(flavor));
+ } else {
+ theObject = inputStreamToByteArray(str);
+ }
// Target data is an RMI object
} else if (flavor.isRepresentationClassRemote()) {
--- a/jdk/src/share/classes/sun/launcher/LauncherHelper.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/launcher/LauncherHelper.java Thu Oct 10 13:41:08 2013 -0700
@@ -51,6 +51,7 @@
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
+import java.text.Normalizer;
import java.util.ResourceBundle;
import java.text.MessageFormat;
import java.util.ArrayList;
@@ -493,7 +494,19 @@
try {
mainClass = scloader.loadClass(cn);
} catch (NoClassDefFoundError | ClassNotFoundException cnfe) {
- abort(cnfe, "java.launcher.cls.error1", cn);
+ 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 = scloader.loadClass(Normalizer.normalize(cn, Normalizer.Form.NFC));
+ } catch (NoClassDefFoundError | ClassNotFoundException cnfe1) {
+ abort(cnfe, "java.launcher.cls.error1", cn);
+ }
+ } else {
+ abort(cnfe, "java.launcher.cls.error1", cn);
+ }
}
// set to mainClass
appClass = mainClass;
--- a/jdk/src/share/classes/sun/launcher/resources/launcher_de.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/launcher/resources/launcher_de.properties Thu Oct 10 13:41:08 2013 -0700
@@ -34,7 +34,7 @@
java.launcher.ergo.message2 =\ weil die Ausf\u00FChrung auf einem Server-Class-Rechner erfolgt.\n
# Translators please note do not translate the options themselves
-java.launcher.opt.footer =\ -cp <Klassensuchpfad von Verzeichnissen und ZIP-/JAR-Dateien>\n -classpath <Klassensuchpfad von Verzeichnissen und ZIP-/JAR-Dateien>\n Eine durch {0} getrennte Liste mit Verzeichnissen, JAR-Archiven\n und ZIP-Archiven zur Suche nach Klassendateien.\n -D<name>=<value>\n Legt eine Systemeigenschaft fest\n -verbose[:class|gc|jni]\n Aktiviert die Verbose-Ausgabe\n -version Druckt Produktversion und beendet das Programm\n -version:<value>\n Erfordert die angegebene Version zur Ausf\u00FChrung\n -showversion Druckt Produktversion und f\u00E4hrt fort\n -jre-restrict-search | -no-jre-restrict-search\n Bezieht private JREs des Benutzers in Versionssuche ein bzw. schlie\u00DFt sie aus\n -? -help Druckt diese Hilfemeldung\n -X Druckt Hilfe zu Nicht-Standardoptionen\n -ea[:<packagename>...|:<classname>]\n -enableassertions[:<packagename>...|:<classname>]\n Aktiviert Assertionen mit angegebener Granularit\u00E4t\n -da[:<packagename>...|:<classname>]\n -disableassertions[:<packagename>...|:<classname>]\n Deaktiviert Assertionen mit angegebener Granularit\u00E4t\n -esa | -enablesystemassertions\n Aktiviert Systemassertionen\n -dsa | -disablesystemassertions\n Deaktiviert Systemassertionen\n -agentlib:<libname>[=<options>]\n L\u00E4dt native Agent Library <libname>, z.B. -agentlib:hprof\n siehe auch -agentlib:jdwp=help und -agentlib:hprof=help\n -agentpath:<pathname>[=<options>]\n L\u00E4dt native Agent Library nach vollem Pfadnamen\n -javaagent:<jarpath>[=<options>]\n L\u00E4dt Java-Programmiersprachen-Agent, siehe java.lang.instrument\n -splash:<imagepath>\n Zeigt Startbildschirm mit angegebenem Bild\nWeitere Einzelheiten finden Sie unter http://www.oracle.com/technetwork/java/javase/documentation/index.html
+java.launcher.opt.footer =\ -cp <Klassensuchpfad von Verzeichnissen und ZIP-/JAR-Dateien>\n -classpath <Klassensuchpfad von Verzeichnissen und ZIP-/JAR-Dateien>\n Eine durch {0} getrennte Liste mit Verzeichnissen, JAR-Archiven\n und ZIP-Archiven zur Suche nach Klassendateien.\n -D<name>=<value>\n Legt eine Systemeigenschaft fest\n -verbose:[class|gc|jni]\n Aktiviert die Verbose-Ausgabe\n -version Druckt Produktversion und beendet das Programm\n -version:<value>\n Erfordert die angegebene Version zur Ausf\u00FChrung\n -showversion Druckt Produktversion und f\u00E4hrt fort\n -jre-restrict-search | -no-jre-restrict-search\n Bezieht private JREs des Benutzers in Versionssuche ein bzw. schlie\u00DFt sie aus\n -? -help Druckt diese Hilfemeldung\n -X Druckt Hilfe zu Nicht-Standardoptionen\n -ea[:<packagename>...|:<classname>]\n -enableassertions[:<packagename>...|:<classname>]\n Aktiviert Assertionen mit angegebener Granularit\u00E4t\n -da[:<packagename>...|:<classname>]\n -disableassertions[:<packagename>...|:<classname>]\n Deaktiviert Assertionen mit angegebener Granularit\u00E4t\n -esa | -enablesystemassertions\n Aktiviert Systemassertionen\n -dsa | -disablesystemassertions\n Deaktiviert Systemassertionen\n -agentlib:<libname>[=<options>]\n L\u00E4dt native Agent Library <libname>, z.B. -agentlib:hprof\n siehe auch -agentlib:jdwp=help und -agentlib:hprof=help\n -agentpath:<pathname>[=<options>]\n L\u00E4dt native Agent Library nach vollem Pfadnamen\n -javaagent:<jarpath>[=<options>]\n L\u00E4dt Java-Programmiersprachen-Agent, siehe java.lang.instrument\n -splash:<imagepath>\n Zeigt Startbildschirm mit angegebenem Bild\nWeitere Einzelheiten finden Sie unter http://www.oracle.com/technetwork/java/javase/documentation/index.html
# Translators please note do not translate the options themselves
java.launcher.X.usage=\ -Xmixed Ausf\u00FChrung im gemischten Modus (Standard)\n -Xint Nur Ausf\u00FChrung im interpretierten Modus\n -Xbootclasspath:<Verzeichnisse und ZIP-/JAR-Dateien durch {0} getrennt>\n Legt Suchpfad f\u00FCr Bootstrap-Klassen und Ressourcen fest\n -Xbootclasspath/a:<Verzeichnisse und ZIP-/JAR-Dateien durch {0} getrennt>\n H\u00E4ngt an das Ende des Bootstrap Classpath an\n -Xbootclasspath/p:<Verzeichnisse und ZIP-/JAR-Dateien durch {0} getrennt>\n Stellt Bootstrap Classpath voran\n -Xdiag Zeigt zus\u00E4tzliche Diagnosemeldungen an\n -Xnoclassgc Deaktiviert Klassen-Garbage Collection\n -Xincgc Aktiviert inkrementelle Garbage Collection\n -Xloggc:<file> Loggt GC-Status in einer Datei mit Zeitstempeln\n -Xbatch Deaktiviert Hintergrundkompilierung\n -Xms<size> Legt anf\u00E4ngliche Java Heap-Gr\u00F6\u00DFe fest\n -Xmx<size> Legt maximale Java Heap-Gr\u00F6\u00DFe fest\n -Xss<size> Legt Java-Thread-Stackgr\u00F6\u00DFe fest\n -Xprof Gibt CPU-Profiling-Daten aus\n -Xfuture Aktiviert strengste Pr\u00FCfungen, antizipiert zuk\u00FCnftigen Standardwert\n -Xrs Reduziert Verwendung von BS-Signalen durch Java/VM (siehe Dokumentation)\n -Xcheck:jni F\u00FChrt zus\u00E4tzliche Pr\u00FCfungen f\u00FCr JNI-Funktionen durch\n -Xshare:off Kein Versuch, gemeinsame Klassendaten zu verwenden\n -Xshare:auto Verwendet gemeinsame Klassendaten, wenn m\u00F6glich (Standard)\n -Xshare:on Erfordert die Verwendung gemeinsamer Klassendaten, sonst verl\u00E4uft der Vorgang nicht erfolgreich.\n -XshowSettings Zeigt alle Einstellungen und f\u00E4hrt fort\n -XshowSettings:all\n Zeigt alle Einstellungen und f\u00E4hrt fort\n -XshowSettings:vm Zeigt alle VM-bezogenen Einstellungen und f\u00E4hrt fort\n -XshowSettings:properties\n Zeigt alle Eigenschaftseinstellungen und f\u00E4hrt fort\n -XshowSettings:locale\n Zeigt alle gebietsschemabezogenen Einstellungen und f\u00E4hrt fort\n\nDie -X-Optionen sind keine Standardoptionen und k\u00F6nnen ohne Vorank\u00FCndigung ge\u00E4ndert werden.\n
@@ -50,7 +50,5 @@
java.launcher.jar.error1=Fehler: Beim Versuch, Datei {0} zu \u00F6ffnen, ist ein unerwarteter Fehler aufgetreten
java.launcher.jar.error2=Manifest in {0} nicht gefunden
java.launcher.jar.error3=kein Hauptmanifestattribut, in {0}
-java.launcher.jar.error4=kein Profilmanifestattribut in {0}
-java.launcher.jar.error5=Das f\u00FCr {1} erforderliche Profil {0} wird von dieser Runtime-Anwendung nicht unterst\u00FCtzt
java.launcher.init.error=Initialisierungsfehler
java.launcher.javafx.error1=Fehler: Die JavaFX-Methode launchApplication hat die falsche Signatur, sie\nmuss als statisch deklariert werden und einen Wert vom Typ VOID zur\u00FCckgeben
--- a/jdk/src/share/classes/sun/launcher/resources/launcher_es.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/launcher/resources/launcher_es.properties Thu Oct 10 13:41:08 2013 -0700
@@ -50,7 +50,5 @@
java.launcher.jar.error1=Error: se ha producido un error inesperado al intentar abrir el archivo {0}
java.launcher.jar.error2=no se ha encontrado el manifiesto en {0}
java.launcher.jar.error3=no hay ning\u00FAn atributo de manifiesto principal en {0}
-java.launcher.jar.error4=no hay ning\u00FAn atributo de manifiesto de perfil en {0}
-java.launcher.jar.error5=El perfil {0} que necesita {1} no est\u00E1 soportado por este tiempo de ejecuci\u00F3n
java.launcher.init.error=error de inicializaci\u00F3n
java.launcher.javafx.error1=Error: el m\u00E9todo launchApplication de JavaFX tiene una firma que no es correcta.\\nSe debe declarar est\u00E1tico y devolver un valor de tipo nulo
--- a/jdk/src/share/classes/sun/launcher/resources/launcher_fr.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/launcher/resources/launcher_fr.properties Thu Oct 10 13:41:08 2013 -0700
@@ -34,7 +34,7 @@
java.launcher.ergo.message2 =\ car vous ex\u00E9cutez une machine de classe de serveur.\n
# Translators please note do not translate the options themselves
-java.launcher.opt.footer =\ -cp <class search path of directories and zip/jar files>\n -classpath <class search path of directories and zip/jar files>\n Liste de r\u00E9pertoires, d''archives JAR et\n d''archives ZIP s\u00E9par\u00E9s par des {0}, dans laquelle rechercher les fichiers de classe.\n -D<name>=<value>\n d\u00E9finition d''une propri\u00E9t\u00E9 syst\u00E8me\n -verbose[:class|gc|jni]\n activation de la sortie en mode verbose\n -version impression de la version du produit et fin de l''op\u00E9ration\n -version:<value>\n ex\u00E9cution de la version sp\u00E9cifi\u00E9e obligatoire\n -showversion impression de la version du produit et poursuite de l''op\u00E9ration\n -jre-restrict-search | -no-jre-restrict-search\n inclusion/exclusion des environnements JRE priv\u00E9s de l''utilisateur dans la recherche de version\n -? -help impression du message d''aide\n -X impression de l''aide sur les options non standard\n -ea[:<packagename>...|:<classname>]\n -enableassertions[:<packagename>...|:<classname>]\n activation des assertions avec la granularit\u00E9 sp\u00E9cifi\u00E9e\n -da[:<packagename>...|:<classname>]\n -disableassertions[:<packagename>...|:<classname>]\n d\u00E9sactivation des assertions avec la granularit\u00E9 sp\u00E9cifi\u00E9e\n -esa | -enablesystemassertions\n activation des assertions syst\u00E8me\n -dsa | -disablesystemassertions\n d\u00E9sactivation des assertions syst\u00E8me\n -agentlib:<libname>[=<options>]\n chargement de la biblioth\u00E8que d''agent natif <libname>, par exemple -agentlib:hprof\n voir \u00E9galement, -agentlib:jdwp=help et -agentlib:hprof=help\n -agentpath:<pathname>[=<options>]\n chargement de la biblioth\u00E8que d''agent natif via le chemin d''acc\u00E8s complet\n -javaagent:<jarpath>[=<options>]\n chargement de l''agent du langage de programmation Java, voir java.lang.instrument\n -splash:<imagepath>\n affichage de l''\u00E9cran d''accueil avec l''image sp\u00E9cifi\u00E9e\nVoir http://www.oracle.com/technetwork/java/javase/documentation/index.html pour plus de d\u00E9tails.
+java.launcher.opt.footer =\ -cp <class search path of directories and zip/jar files>\n -classpath <class search path of directories and zip/jar files>\n Liste de r\u00E9pertoires, d''archives JAR et\n d''archives ZIP s\u00E9par\u00E9s par des {0}, dans laquelle rechercher les fichiers de classe.\n -D<name>=<value>\n d\u00E9finition d''une propri\u00E9t\u00E9 syst\u00E8me\n -verbose:[class|gc|jni]\n activation de la sortie en mode verbose\n -version impression de la version du produit et fin de l''op\u00E9ration\n -version:<value>\n ex\u00E9cution de la version sp\u00E9cifi\u00E9e obligatoire\n -showversion impression de la version du produit et poursuite de l''op\u00E9ration\n -jre-restrict-search | -no-jre-restrict-search\n inclusion/exclusion des environnements JRE priv\u00E9s de l''utilisateur dans la recherche de version\n -? -help impression du message d''aide\n -X impression de l''aide sur les options non standard\n -ea[:<packagename>...|:<classname>]\n -enableassertions[:<packagename>...|:<classname>]\n activation des assertions avec la granularit\u00E9 sp\u00E9cifi\u00E9e\n -da[:<packagename>...|:<classname>]\n -disableassertions[:<packagename>...|:<classname>]\n d\u00E9sactivation des assertions avec la granularit\u00E9 sp\u00E9cifi\u00E9e\n -esa | -enablesystemassertions\n activation des assertions syst\u00E8me\n -dsa | -disablesystemassertions\n d\u00E9sactivation des assertions syst\u00E8me\n -agentlib:<libname>[=<options>]\n chargement de la biblioth\u00E8que d''agent natif <libname>, par exemple -agentlib:hprof\n voir \u00E9galement, -agentlib:jdwp=help et -agentlib:hprof=help\n -agentpath:<pathname>[=<options>]\n chargement de la biblioth\u00E8que d''agent natif via le chemin d''acc\u00E8s complet\n -javaagent:<jarpath>[=<options>]\n chargement de l''agent du langage de programmation Java, voir java.lang.instrument\n -splash:<imagepath>\n affichage de l''\u00E9cran d''accueil avec l''image sp\u00E9cifi\u00E9e\nVoir http://www.oracle.com/technetwork/java/javase/documentation/index.html pour plus de d\u00E9tails.
# Translators please note do not translate the options themselves
java.launcher.X.usage=\ -Xmixed ex\u00E9cution en mode mixte (valeur par d\u00E9faut)\n -Xint ex\u00E9cution en mode interpr\u00E9t\u00E9 uniquement\n -Xbootclasspath:<directories and zip/jar files separated by {0}>\n d\u00E9finition du chemin de recherche pour les ressources et classes bootstrap\n -Xbootclasspath/a:<directories and zip/jar files separated by {0}>\n ajout \u00E0 la fin du chemin de classe bootstrap\n -Xbootclasspath/p:<directories and zip/jar files separated by {0}>\n ajout au d\u00E9but du chemin de classe bootstrap\n -Xdiag affichage de messages de diagnostic suppl\u00E9mentaires\n -Xnoclassgc d\u00E9sactivation de l''op\u00E9ration de ramasse-miette (garbage collection) de la classe\n -Xincgc activation de l''op\u00E9ration de ramasse-miette (garbage collection) incr\u00E9mentielle\n -Xloggc:<file> journalisation du statut de l''op\u00E9ration de ramasse-miette (garbage collection) dans un fichier avec horodatages\n -Xbatch d\u00E9sactivation de la compilation en arri\u00E8re-plan\n -Xms<size> d\u00E9finition de la taille initiale des portions de m\u00E9moire Java\n -Xmx<size> d\u00E9finition de la taille maximale des portions de m\u00E9moire Java\n -Xss<size> d\u00E9finition de la taille de pile de thread Java\n -Xprof sortie des donn\u00E9es de profilage de l''unit\u00E9 centrale\n -Xfuture activation des contr\u00F4les les plus stricts en vue d''anticiper la future valeur par d\u00E9faut\n -Xrs r\u00E9duction de l''utilisation des signaux OS par Java/la machine virtuelle (voir documentation)\n -Xcheck:jni ex\u00E9cution de contr\u00F4les suppl\u00E9mentaires pour les fonctions JNI\n -Xshare:off aucune tentative d''utilisation des donn\u00E9es de classe partag\u00E9es\n -Xshare:auto utilisation des donn\u00E9es de classe partag\u00E9es si possible (valeur par d\u00E9faut)\n -Xshare:on utilisation des donn\u00E9es de classe partag\u00E9es obligatoire ou \u00E9chec de l''op\u00E9ration\n -XshowSettings affichage de tous les param\u00E8tres et poursuite de l''op\u00E9ration\n -XshowSettings:all\n affichage de tous les param\u00E8tres et poursuite de l''op\u00E9ration\n -XshowSettings:vm affichage de tous les param\u00E8tres de machine virtuelle et poursuite de l''op\u00E9ration\n -XshowSettings:properties\n affichage de tous les param\u00E8tres de propri\u00E9t\u00E9 et poursuite de l''op\u00E9ration\n -XshowSettings:locale\n affichage de tous les param\u00E8tres d''environnement local et poursuite de l''op\u00E9ration\n\nLes options -X ne sont pas des options standard et peuvent faire l''objet de modifications sans pr\u00E9avis.\n
@@ -50,7 +50,5 @@
java.launcher.jar.error1=Erreur : une erreur inattendue est survenue lors de la tentative d''ouverture du fichier {0}
java.launcher.jar.error2=fichier manifeste introuvable dans {0}
java.launcher.jar.error3=aucun attribut manifest principal dans {0}
-java.launcher.jar.error4=aucun attribut manifest ''Profile'' dans {0}
-java.launcher.jar.error5=Profil {0} requis par {1} non pris en charge par cette ex\u00E9cution
java.launcher.init.error=erreur d'initialisation
java.launcher.javafx.error1=Erreur : la signature de la m\u00E9thode launchApplication JavaFX est incorrecte, la\nm\u00E9thode doit \u00EAtre d\u00E9clar\u00E9e statique et renvoyer une valeur de type void
--- a/jdk/src/share/classes/sun/launcher/resources/launcher_it.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/launcher/resources/launcher_it.properties Thu Oct 10 13:41:08 2013 -0700
@@ -50,7 +50,5 @@
java.launcher.jar.error1=Errore: si \u00E8 verificato un errore imprevisto durante il tentativo di aprire il file {0}
java.launcher.jar.error2=manifest non trovato in {0}
java.launcher.jar.error3=nessun attributo manifest principale in {0}
-java.launcher.jar.error4=nessun attributo manifest di profilo in {0}
-java.launcher.jar.error5=Il profilo {0} richiesto da {1} non \u00E8 supportato da questo runtime
java.launcher.init.error=errore di inizializzazione
java.launcher.javafx.error1=Errore: il metodo JavaFX launchApplication dispone di una firma errata, \nla firma deve essere dichiarata static e restituire un valore di tipo void
--- a/jdk/src/share/classes/sun/launcher/resources/launcher_ja.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/launcher/resources/launcher_ja.properties Thu Oct 10 13:41:08 2013 -0700
@@ -34,11 +34,11 @@
java.launcher.ergo.message2 =\ \u3053\u308C\u306F\u30B5\u30FC\u30D0\u30FC\u30AF\u30E9\u30B9\u306E\u30DE\u30B7\u30F3\u3067\u5B9F\u884C\u3057\u3066\u3044\u308B\u305F\u3081\u3067\u3059\u3002\n
# Translators please note do not translate the options themselves
-java.launcher.opt.footer =\ -cp <class search path of directories and zip/jar files>\n -classpath <class search path of directories and zip/jar files>\n \u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u691C\u7D22\u3059\u308B\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3001\n JAR\u30A2\u30FC\u30AB\u30A4\u30D6\u304A\u3088\u3073ZIP\u30A2\u30FC\u30AB\u30A4\u30D6\u306E{0}\u3067\u533A\u5207\u3089\u308C\u305F\u30EA\u30B9\u30C8\u3067\u3059\u3002\n -D<name>=<value>\n \u30B7\u30B9\u30C6\u30E0\u30FB\u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u8A2D\u5B9A\u3059\u308B\n -verbose:[class|gc|jni]\n \u8A73\u7D30\u306A\u51FA\u529B\u3092\u884C\u3046\n -version \u88FD\u54C1\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u51FA\u529B\u3057\u3066\u7D42\u4E86\u3059\u308B\n -version:<value>\n \u6307\u5B9A\u3057\u305F\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u5B9F\u884C\u306B\u5FC5\u9808\u306B\u3059\u308B\n -showversion \u88FD\u54C1\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u51FA\u529B\u3057\u3066\u7D9A\u884C\u3059\u308B\n -jre-restrict-search | -no-jre-restrict-search\n \u30E6\u30FC\u30B6\u30FC\u306E\u30D7\u30E9\u30A4\u30D9\u30FC\u30C8JRE\u3092\u30D0\u30FC\u30B8\u30E7\u30F3\u691C\u7D22\u306B\u542B\u3081\u308B/\u9664\u5916\u3059\u308B\n -? -help \u3053\u306E\u30D8\u30EB\u30D7\u30FB\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u51FA\u529B\u3059\u308B\n -X \u975E\u6A19\u6E96\u30AA\u30D7\u30B7\u30E7\u30F3\u306B\u95A2\u3059\u308B\u30D8\u30EB\u30D7\u3092\u51FA\u529B\u3059\u308B\n -ea[:<packagename>...|:<classname>]\n -enableassertions[:<packagename>...|:<classname>]\n \u6307\u5B9A\u3057\u305F\u7C92\u5EA6\u3067\u30A2\u30B5\u30FC\u30B7\u30E7\u30F3\u3092\u6709\u52B9\u306B\u3059\u308B\n -da[:<packagename>...|:<classname>]\n -disableassertions[:<packagename>...|:<classname>]\n \u6307\u5B9A\u3057\u305F\u7C92\u5EA6\u3067\u30A2\u30B5\u30FC\u30B7\u30E7\u30F3\u3092\u7121\u52B9\u306B\u3059\u308B\n -esa | -enablesystemassertions\n \u30B7\u30B9\u30C6\u30E0\u30FB\u30A2\u30B5\u30FC\u30B7\u30E7\u30F3\u3092\u6709\u52B9\u306B\u3059\u308B\n -dsa | -disablesystemassertions\n \u30B7\u30B9\u30C6\u30E0\u30FB\u30A2\u30B5\u30FC\u30B7\u30E7\u30F3\u3092\u7121\u52B9\u306B\u3059\u308B\n -agentlib:<libname>[=<options>]\n \u30CD\u30A4\u30C6\u30A3\u30D6\u30FB\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30FB\u30E9\u30A4\u30D6\u30E9\u30EA<libname>\u3092\u30ED\u30FC\u30C9\u3059\u308B\u3002\u4F8B: -agentlib:hprof\n -agentlib:jdwp=help\u3068-agentlib:hprof=help\u3082\u53C2\u7167\n -agentpath:<pathname>[=<options>]\n \u30D5\u30EB\u30D1\u30B9\u540D\u3067\u30CD\u30A4\u30C6\u30A3\u30D6\u30FB\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30FB\u30E9\u30A4\u30D6\u30E9\u30EA\u3092\u30ED\u30FC\u30C9\u3059\u308B\n -javaagent:<jarpath>[=<options>]\n Java\u30D7\u30ED\u30B0\u30E9\u30DF\u30F3\u30B0\u8A00\u8A9E\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3092\u30ED\u30FC\u30C9\u3059\u308B\u3002java.lang.instrument\u3092\u53C2\u7167\n -splash:<imagepath>\n \u6307\u5B9A\u3057\u305F\u30A4\u30E1\u30FC\u30B8\u3067\u30B9\u30D7\u30E9\u30C3\u30B7\u30E5\u753B\u9762\u3092\u8868\u793A\u3059\u308B\n\u8A73\u7D30\u306Fhttp://www.oracle.com/technetwork/java/javase/documentation/index.html\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002
+java.launcher.opt.footer =\ -cp <\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u304A\u3088\u3073zip/jar\u30D5\u30A1\u30A4\u30EB\u306E\u30AF\u30E9\u30B9\u691C\u7D22\u30D1\u30B9>\n -classpath <\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u304A\u3088\u3073zip/jar\u30D5\u30A1\u30A4\u30EB\u306E\u30AF\u30E9\u30B9\u691C\u7D22\u30D1\u30B9>\n \u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u691C\u7D22\u3059\u308B\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3001\n JAR\u30A2\u30FC\u30AB\u30A4\u30D6\u304A\u3088\u3073ZIP\u30A2\u30FC\u30AB\u30A4\u30D6\u306E{0}\u3067\u533A\u5207\u3089\u308C\u305F\u30EA\u30B9\u30C8\u3067\u3059\u3002\n -D<name>=<value>\n \u30B7\u30B9\u30C6\u30E0\u30FB\u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u8A2D\u5B9A\u3059\u308B\n -verbose:[class|gc|jni]\n \u8A73\u7D30\u306A\u51FA\u529B\u3092\u884C\u3046\n -version \u88FD\u54C1\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u51FA\u529B\u3057\u3066\u7D42\u4E86\u3059\u308B\n -version:<value>\n \u6307\u5B9A\u3057\u305F\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u5B9F\u884C\u306B\u5FC5\u9808\u306B\u3059\u308B\n -showversion \u88FD\u54C1\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u51FA\u529B\u3057\u3066\u7D9A\u884C\u3059\u308B\n -jre-restrict-search | -no-jre-restrict-search\n \u30E6\u30FC\u30B6\u30FC\u306E\u30D7\u30E9\u30A4\u30D9\u30FC\u30C8JRE\u3092\u30D0\u30FC\u30B8\u30E7\u30F3\u691C\u7D22\u306B\u542B\u3081\u308B/\u9664\u5916\u3059\u308B\n -? -help \u3053\u306E\u30D8\u30EB\u30D7\u30FB\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u51FA\u529B\u3059\u308B\n -X \u975E\u6A19\u6E96\u30AA\u30D7\u30B7\u30E7\u30F3\u306B\u95A2\u3059\u308B\u30D8\u30EB\u30D7\u3092\u51FA\u529B\u3059\u308B\n -ea[:<packagename>...|:<classname>]\n -enableassertions[:<packagename>...|:<classname>]\n \u6307\u5B9A\u3057\u305F\u7C92\u5EA6\u3067\u30A2\u30B5\u30FC\u30B7\u30E7\u30F3\u3092\u6709\u52B9\u306B\u3059\u308B\n -da[:<packagename>...|:<classname>]\n -disableassertions[:<packagename>...|:<classname>]\n \u6307\u5B9A\u3057\u305F\u7C92\u5EA6\u3067\u30A2\u30B5\u30FC\u30B7\u30E7\u30F3\u3092\u7121\u52B9\u306B\u3059\u308B\n -esa | -enablesystemassertions\n \u30B7\u30B9\u30C6\u30E0\u30FB\u30A2\u30B5\u30FC\u30B7\u30E7\u30F3\u3092\u6709\u52B9\u306B\u3059\u308B\n -dsa | -disablesystemassertions\n \u30B7\u30B9\u30C6\u30E0\u30FB\u30A2\u30B5\u30FC\u30B7\u30E7\u30F3\u3092\u7121\u52B9\u306B\u3059\u308B\n -agentlib:<libname>[=<options>]\n \u30CD\u30A4\u30C6\u30A3\u30D6\u30FB\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30FB\u30E9\u30A4\u30D6\u30E9\u30EA<libname>\u3092\u30ED\u30FC\u30C9\u3059\u308B\u3002\u4F8B: -agentlib:hprof\n -agentlib:jdwp=help\u3068-agentlib:hprof=help\u3082\u53C2\u7167\n -agentpath:<pathname>[=<options>]\n \u30D5\u30EB\u30D1\u30B9\u540D\u3067\u30CD\u30A4\u30C6\u30A3\u30D6\u30FB\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30FB\u30E9\u30A4\u30D6\u30E9\u30EA\u3092\u30ED\u30FC\u30C9\u3059\u308B\n -javaagent:<jarpath>[=<options>]\n Java\u30D7\u30ED\u30B0\u30E9\u30DF\u30F3\u30B0\u8A00\u8A9E\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3092\u30ED\u30FC\u30C9\u3059\u308B\u3002java.lang.instrument\u3092\u53C2\u7167\n -splash:<imagepath>\n \u6307\u5B9A\u3057\u305F\u30A4\u30E1\u30FC\u30B8\u3067\u30B9\u30D7\u30E9\u30C3\u30B7\u30E5\u753B\u9762\u3092\u8868\u793A\u3059\u308B\n\u8A73\u7D30\u306Fhttp://www.oracle.com/technetwork/java/javase/documentation/index.html\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002
# Translators please note do not translate the options themselves
-java.launcher.X.usage=\ -Xmixed \u6DF7\u5408\u30E2\u30FC\u30C9\u306E\u5B9F\u884C(\u30C7\u30D5\u30A9\u30EB\u30C8)\n -Xint \u30A4\u30F3\u30BF\u30D7\u30EA\u30BF\u30FB\u30E2\u30FC\u30C9\u306E\u5B9F\u884C\u306E\u307F\n -Xbootclasspath:<directories and zip/jar files separated by {0}>\n \u30D6\u30FC\u30C8\u30B9\u30C8\u30E9\u30C3\u30D7\u306E\u30AF\u30E9\u30B9\u3068\u30EA\u30BD\u30FC\u30B9\u306E\u691C\u7D22\u30D1\u30B9\u3092\u8A2D\u5B9A\u3059\u308B\n -Xbootclasspath/a:<directories and zip/jar files separated by {0}>\n \u30D6\u30FC\u30C8\u30B9\u30C8\u30E9\u30C3\u30D7\u30FB\u30AF\u30E9\u30B9\u30FB\u30D1\u30B9\u306E\u6700\u5F8C\u306B\u8FFD\u52A0\u3059\u308B\n -Xbootclasspath/p:<directories and zip/jar files separated by {0}>\n \u30D6\u30FC\u30C8\u30B9\u30C8\u30E9\u30C3\u30D7\u30FB\u30AF\u30E9\u30B9\u30FB\u30D1\u30B9\u306E\u524D\u306B\u4ED8\u52A0\u3059\u308B\n -Xdiag \u8FFD\u52A0\u306E\u8A3A\u65AD\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u8868\u793A\u3059\u308B\n -Xnoclassgc \u30AF\u30E9\u30B9\u306E\u30AC\u30D9\u30FC\u30B8\u30FB\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u3092\u7121\u52B9\u306B\u3059\u308B\n -Xincgc \u5897\u5206\u30AC\u30D9\u30FC\u30B8\u30FB\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u3092\u6709\u52B9\u306B\u3059\u308B\n -Xloggc:<file> \u30BF\u30A4\u30E0\u30B9\u30BF\u30F3\u30D7\u304C\u4ED8\u3044\u305F\u30D5\u30A1\u30A4\u30EB\u306BGC\u30B9\u30C6\u30FC\u30BF\u30B9\u306E\u30ED\u30B0\u3092\u8A18\u9332\u3059\u308B\n -Xbatch \u30D0\u30C3\u30AF\u30B0\u30E9\u30A6\u30F3\u30C9\u306E\u30B3\u30F3\u30D1\u30A4\u30EB\u3092\u7121\u52B9\u306B\u3059\u308B\n -Xms<size> Java\u306E\u521D\u671F\u30D2\u30FC\u30D7\u30FB\u30B5\u30A4\u30BA\u3092\u8A2D\u5B9A\u3059\u308B\n -Xmx<size> Java\u306E\u6700\u5927\u30D2\u30FC\u30D7\u30FB\u30B5\u30A4\u30BA\u3092\u8A2D\u5B9A\u3059\u308B\n -Xss<size> Java\u306E\u30B9\u30EC\u30C3\u30C9\u30FB\u30B9\u30BF\u30C3\u30AF\u30FB\u30B5\u30A4\u30BA\u3092\u8A2D\u5B9A\u3059\u308B\n -Xprof CPU\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB\u30FB\u30C7\u30FC\u30BF\u3092\u51FA\u529B\u3059\u308B\n -Xfuture \u5C06\u6765\u306E\u30C7\u30D5\u30A9\u30EB\u30C8\u3092\u898B\u8D8A\u3057\u3066\u3001\u6700\u3082\u53B3\u5BC6\u306A\u30C1\u30A7\u30C3\u30AF\u3092\u6709\u52B9\u306B\u3059\u308B\n -Xrs Java/VM\u306B\u3088\u308BOS\u30B7\u30B0\u30CA\u30EB\u306E\u4F7F\u7528\u3092\u524A\u6E1B\u3059\u308B(\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u53C2\u7167)\n -Xcheck:jni JNI\u95A2\u6570\u306B\u5BFE\u3059\u308B\u8FFD\u52A0\u306E\u30C1\u30A7\u30C3\u30AF\u3092\u5B9F\u884C\u3059\u308B\n -Xshare:off \u5171\u6709\u30AF\u30E9\u30B9\u306E\u30C7\u30FC\u30BF\u3092\u4F7F\u7528\u3057\u3088\u3046\u3068\u3057\u306A\u3044\n -Xshare:auto \u53EF\u80FD\u3067\u3042\u308C\u3070\u5171\u6709\u30AF\u30E9\u30B9\u306E\u30C7\u30FC\u30BF\u3092\u4F7F\u7528\u3059\u308B(\u30C7\u30D5\u30A9\u30EB\u30C8)\n -Xshare:on \u5171\u6709\u30AF\u30E9\u30B9\u30FB\u30C7\u30FC\u30BF\u306E\u4F7F\u7528\u3092\u5FC5\u9808\u306B\u3057\u3001\u3067\u304D\u306A\u3051\u308C\u3070\u5931\u6557\u3059\u308B\u3002\n -XshowSettings \u3059\u3079\u3066\u306E\u8A2D\u5B9A\u3092\u8868\u793A\u3057\u3066\u7D9A\u884C\u3059\u308B\n -XshowSettings:all\n \u3059\u3079\u3066\u306E\u8A2D\u5B9A\u3092\u8868\u793A\u3057\u3066\u7D9A\u884C\u3059\u308B\n -XshowSettings:vm \u3059\u3079\u3066\u306EVM\u95A2\u9023\u306E\u8A2D\u5B9A\u3092\u8868\u793A\u3057\u3066\u7D9A\u884C\u3059\u308B\n -XshowSettings:properties\n \u3059\u3079\u3066\u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u8A2D\u5B9A\u3092\u8868\u793A\u3057\u3066\u7D9A\u884C\u3059\u308B\n -XshowSettings:locale\n \
-\u3059\u3079\u3066\u306E\u30ED\u30B1\u30FC\u30EB\u95A2\u9023\u306E\u8A2D\u5B9A\u3092\u8868\u793A\u3057\u3066\u7D9A\u884C\u3059\u308B\n\n-X\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\u975E\u6A19\u6E96\u306A\u306E\u3067\u3001\u4E88\u544A\u306A\u304F\u5909\u66F4\u3055\u308C\u308B\u5834\u5408\u304C\u3042\u308A\u307E\u3059\u3002\n
+java.launcher.X.usage=\ -Xmixed \u6DF7\u5408\u30E2\u30FC\u30C9\u306E\u5B9F\u884C(\u30C7\u30D5\u30A9\u30EB\u30C8)\n -Xint \u30A4\u30F3\u30BF\u30D7\u30EA\u30BF\u30FB\u30E2\u30FC\u30C9\u306E\u5B9F\u884C\u306E\u307F\n -Xbootclasspath:<{0}\u3067\u533A\u5207\u3089\u308C\u305F\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u304A\u3088\u3073zip/jar\u30D5\u30A1\u30A4\u30EB>\n \u30D6\u30FC\u30C8\u30B9\u30C8\u30E9\u30C3\u30D7\u306E\u30AF\u30E9\u30B9\u3068\u30EA\u30BD\u30FC\u30B9\u306E\u691C\u7D22\u30D1\u30B9\u3092\u8A2D\u5B9A\u3059\u308B\n -Xbootclasspath/a:<{0}\u3067\u533A\u5207\u3089\u308C\u305F\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u304A\u3088\u3073zip/jar\u30D5\u30A1\u30A4\u30EB>\n \u30D6\u30FC\u30C8\u30B9\u30C8\u30E9\u30C3\u30D7\u30FB\u30AF\u30E9\u30B9\u30FB\u30D1\u30B9\u306E\u6700\u5F8C\u306B\u8FFD\u52A0\u3059\u308B\n -Xbootclasspath/p:<{0}\u3067\u533A\u5207\u3089\u308C\u305F\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u304A\u3088\u3073zip/jar\u30D5\u30A1\u30A4\u30EB>\n \u30D6\u30FC\u30C8\u30B9\u30C8\u30E9\u30C3\u30D7\u30FB\u30AF\u30E9\u30B9\u30FB\u30D1\u30B9\u306E\u524D\u306B\u4ED8\u52A0\u3059\u308B\n -Xdiag \u8FFD\u52A0\u306E\u8A3A\u65AD\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u8868\u793A\u3059\u308B\n -Xnoclassgc \u30AF\u30E9\u30B9\u306E\u30AC\u30D9\u30FC\u30B8\u30FB\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u3092\u7121\u52B9\u306B\u3059\u308B\n -Xincgc \u5897\u5206\u30AC\u30D9\u30FC\u30B8\u30FB\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u3092\u6709\u52B9\u306B\u3059\u308B\n -Xloggc:<file> \u30BF\u30A4\u30E0\u30B9\u30BF\u30F3\u30D7\u304C\u4ED8\u3044\u305F\u30D5\u30A1\u30A4\u30EB\u306BGC\u30B9\u30C6\u30FC\u30BF\u30B9\u306E\u30ED\u30B0\u3092\u8A18\u9332\u3059\u308B\n -Xbatch \u30D0\u30C3\u30AF\u30B0\u30E9\u30A6\u30F3\u30C9\u306E\u30B3\u30F3\u30D1\u30A4\u30EB\u3092\u7121\u52B9\u306B\u3059\u308B\n -Xms<size> Java\u306E\u521D\u671F\u30D2\u30FC\u30D7\u30FB\u30B5\u30A4\u30BA\u3092\u8A2D\u5B9A\u3059\u308B\n -Xmx<size> Java\u306E\u6700\u5927\u30D2\u30FC\u30D7\u30FB\u30B5\u30A4\u30BA\u3092\u8A2D\u5B9A\u3059\u308B\n -Xss<size> Java\u306E\u30B9\u30EC\u30C3\u30C9\u30FB\u30B9\u30BF\u30C3\u30AF\u30FB\u30B5\u30A4\u30BA\u3092\u8A2D\u5B9A\u3059\u308B\n -Xprof CPU\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB\u30FB\u30C7\u30FC\u30BF\u3092\u51FA\u529B\u3059\u308B\n -Xfuture \u5C06\u6765\u306E\u30C7\u30D5\u30A9\u30EB\u30C8\u3092\u898B\u8D8A\u3057\u3066\u3001\u6700\u3082\u53B3\u5BC6\u306A\u30C1\u30A7\u30C3\u30AF\u3092\u6709\u52B9\u306B\u3059\u308B\n -Xrs Java/VM\u306B\u3088\u308BOS\u30B7\u30B0\u30CA\u30EB\u306E\u4F7F\u7528\u3092\u524A\u6E1B\u3059\u308B(\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u53C2\u7167)\n -Xcheck:jni JNI\u95A2\u6570\u306B\u5BFE\u3059\u308B\u8FFD\u52A0\u306E\u30C1\u30A7\u30C3\u30AF\u3092\u5B9F\u884C\u3059\u308B\n -Xshare:off \u5171\u6709\u30AF\u30E9\u30B9\u306E\u30C7\u30FC\u30BF\u3092\u4F7F\u7528\u3057\u3088\u3046\u3068\u3057\u306A\u3044\n -Xshare:auto \u53EF\u80FD\u3067\u3042\u308C\u3070\u5171\u6709\u30AF\u30E9\u30B9\u306E\u30C7\u30FC\u30BF\u3092\u4F7F\u7528\u3059\u308B(\u30C7\u30D5\u30A9\u30EB\u30C8)\n -Xshare:on \u5171\u6709\u30AF\u30E9\u30B9\u30FB\u30C7\u30FC\u30BF\u306E\u4F7F\u7528\u3092\u5FC5\u9808\u306B\u3057\u3001\u3067\u304D\u306A\u3051\u308C\u3070\u5931\u6557\u3059\u308B\u3002\n -XshowSettings \u3059\u3079\u3066\u306E\u8A2D\u5B9A\u3092\u8868\u793A\u3057\u3066\u7D9A\u884C\u3059\u308B\n -XshowSettings:all\n \u3059\u3079\u3066\u306E\u8A2D\u5B9A\u3092\u8868\u793A\u3057\u3066\u7D9A\u884C\u3059\u308B\n -XshowSettings:vm \u3059\u3079\u3066\u306EVM\u95A2\u9023\u306E\u8A2D\u5B9A\u3092\u8868\u793A\u3057\u3066\u7D9A\u884C\u3059\u308B\n -XshowSettings:properties\n \
+\u3059\u3079\u3066\u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u8A2D\u5B9A\u3092\u8868\u793A\u3057\u3066\u7D9A\u884C\u3059\u308B\n -XshowSettings:locale\n \u3059\u3079\u3066\u306E\u30ED\u30B1\u30FC\u30EB\u95A2\u9023\u306E\u8A2D\u5B9A\u3092\u8868\u793A\u3057\u3066\u7D9A\u884C\u3059\u308B\n\n-X\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\u975E\u6A19\u6E96\u306A\u306E\u3067\u3001\u4E88\u544A\u306A\u304F\u5909\u66F4\u3055\u308C\u308B\u5834\u5408\u304C\u3042\u308A\u307E\u3059\u3002\n
# Translators please note do not translate the options themselves
java.launcher.X.macosx.usage=\n\u6B21\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u306FMac OS X\u56FA\u6709\u3067\u3059\u3002\n -XstartOnFirstThread\n main()\u30E1\u30BD\u30C3\u30C9\u3092\u6700\u521D(AppKit)\u306E\u30B9\u30EC\u30C3\u30C9\u3067\u5B9F\u884C\u3059\u308B\n -Xdock:name=<application name>"\n Dock\u306B\u8868\u793A\u3055\u308C\u308B\u30C7\u30D5\u30A9\u30EB\u30C8\u30FB\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u540D\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B\n -Xdock:icon=<path to icon file>\n Dock\u306B\u8868\u793A\u3055\u308C\u308B\u30C7\u30D5\u30A9\u30EB\u30C8\u30FB\u30A2\u30A4\u30B3\u30F3\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B\n\n
@@ -51,7 +51,5 @@
java.launcher.jar.error1=\u30A8\u30E9\u30FC: \u30D5\u30A1\u30A4\u30EB{0}\u3092\u958B\u3053\u3046\u3068\u3057\u3066\u3044\u308B\u3068\u304D\u306B\u3001\u4E88\u671F\u3057\u306A\u3044\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F
java.launcher.jar.error2={0}\u306B\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093
java.launcher.jar.error3={0}\u306B\u30E1\u30A4\u30F3\u30FB\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u5C5E\u6027\u304C\u3042\u308A\u307E\u305B\u3093
-java.launcher.jar.error4={0}\u306B\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB\u30FB\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u5C5E\u6027\u304C\u3042\u308A\u307E\u305B\u3093
-java.launcher.jar.error5={1}\u306B\u5FC5\u8981\u306A\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB{0}\u306F\u3053\u306E\u30E9\u30F3\u30BF\u30A4\u30E0\u3067\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093
java.launcher.init.error=\u521D\u671F\u5316\u30A8\u30E9\u30FC
java.launcher.javafx.error1=\u30A8\u30E9\u30FC: JavaFX launchApplication\u30E1\u30BD\u30C3\u30C9\u306B\u8AA4\u3063\u305F\u30B7\u30B0\u30CD\u30C1\u30E3\u304C\u3042\u308A\u3001\nstatic\u3092\u5BA3\u8A00\u3057\u3066void\u578B\u306E\u5024\u3092\u8FD4\u3059\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059
--- a/jdk/src/share/classes/sun/launcher/resources/launcher_ko.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/launcher/resources/launcher_ko.properties Thu Oct 10 13:41:08 2013 -0700
@@ -34,10 +34,11 @@
java.launcher.ergo.message2 =\ \uC11C\uBC84\uAE09 \uC2DC\uC2A4\uD15C\uC5D0\uC11C \uC2E4\uD589 \uC911\uC774\uAE30 \uB54C\uBB38\uC785\uB2C8\uB2E4.\n
# Translators please note do not translate the options themselves
-java.launcher.opt.footer =\ -cp <class search path of directories and zip/jar files>\\n -classpath <class search path of directories and zip/jar files>\\n \uD074\uB798\uC2A4 \uD30C\uC77C\uC744 \uAC80\uC0C9\uD560 {0}(\uC73C)\uB85C \uAD6C\uBD84\uB41C \uB514\uB809\uD1A0\uB9AC,\\n JAR \uC544\uCE74\uC774\uBE0C \uBC0F ZIP \uC544\uCE74\uC774\uBE0C \uBAA9\uB85D\uC785\uB2C8\uB2E4.\\n -D<name>=<value>\\n \uC2DC\uC2A4\uD15C \uC18D\uC131\uC744 \uC124\uC815\uD569\uB2C8\uB2E4.\\n -verbose:[class|gc|jni]\\n \uC0C1\uC138 \uC815\uBCF4 \uCD9C\uB825\uC744 \uC0AC\uC6A9\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\\n -version \uC81C\uD488 \uBC84\uC804\uC744 \uC778\uC1C4\uD55C \uD6C4 \uC885\uB8CC\uD569\uB2C8\uB2E4.\\n -version:<value>\\n \uC2E4\uD589\uD560 \uBC84\uC804\uC744 \uC9C0\uC815\uD574\uC57C \uD569\uB2C8\uB2E4.\\n -showversion \uC81C\uD488 \uBC84\uC804\uC744 \uC778\uC1C4\uD55C \uD6C4 \uACC4\uC18D\uD569\uB2C8\uB2E4.\\n -jre-restrict-search | -no-jre-restrict-search\\n \uBC84\uC804 \uAC80\uC0C9\uC5D0\uC11C \uC0AC\uC6A9\uC790 \uC804\uC6A9 JRE\uB97C \uD3EC\uD568/\uC81C\uC678\uD569\uB2C8\uB2E4.\\n -? -help \uC774 \uB3C4\uC6C0\uB9D0 \uBA54\uC2DC\uC9C0\uB97C \uC778\uC1C4\uD569\uB2C8\uB2E4.\\n -X \uBE44\uD45C\uC900 \uC635\uC158\uC5D0 \uB300\uD55C \uB3C4\uC6C0\uB9D0\uC744 \uC778\uC1C4\uD569\uB2C8\uB2E4.\\n -ea[:<packagename>...|:<classname>]\\n -enableassertions[:<packagename>...|:<classname>]\\n \uC138\uBD84\uC131\uC774 \uC9C0\uC815\uB41C \uAC80\uC99D\uC744 \uC0AC\uC6A9\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\\n -da[:<packagename>...|:<classname>]\\n -disableassertions[:<packagename>...|:<classname>]\\n \uC138\uBD84\uC131\uC774 \uC9C0\uC815\uB41C \uAC80\uC99D\uC744 \uC0AC\uC6A9 \uC548\uD568\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\\n -esa | -enablesystemassertions\\n \uC2DC\uC2A4\uD15C \uAC80\uC99D\uC744 \uC0AC\uC6A9\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\\n -dsa | -disablesystemassertions\\n \uC2DC\uC2A4\uD15C \uAC80\uC99D\uC744 \uC0AC\uC6A9 \uC548\uD568\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\\n -agentlib:<libname>[=<options>]\\n <libname> \uACE0\uC720 \uC5D0\uC774\uC804\uD2B8 \uB77C\uC774\uBE0C\uB7EC\uB9AC\uB97C \uB85C\uB4DC\uD569\uB2C8\uB2E4(\uC608: -agentlib:hprof).\\n -agentlib:jdwp=help \uBC0F -agentlib:hprof=help\uB3C4 \uCC38\uC870\uD558\uC2ED\uC2DC\uC624.\\n -agentpath:<pathname>[=<options>]\\n \uC804\uCCB4 \uACBD\uB85C\uBA85\uC744 \uC0AC\uC6A9\uD558\uC5EC \uACE0\uC720 \uC5D0\uC774\uC804\uD2B8 \uB77C\uC774\uBE0C\uB7EC\uB9AC\uB97C \uB85C\uB4DC\uD569\uB2C8\uB2E4.\\n -javaagent:<jarpath>[=<options>]\\n Java \uD504\uB85C\uADF8\uB798\uBC0D \uC5B8\uC5B4 \uC5D0\uC774\uC804\uD2B8\uB97C \uB85C\uB4DC\uD569\uB2C8\uB2E4. java.lang.instrument\uB97C \uCC38\uC870\uD558\uC2ED\uC2DC\uC624.\\n -splash:<imagepath>\\n \uC774\uBBF8\uC9C0\uAC00 \uC9C0\uC815\uB41C \uC2A4\uD50C\uB798\uC2DC \uD654\uBA74\uC744 \uD45C\uC2DC\uD569\uB2C8\uB2E4.\\n\uC790\uC138\uD55C \uB0B4\uC6A9\uC740 http://www.oracle.com/technetwork/java/javase/documentation/index.html\uC744 \uCC38\uC870\uD558\uC2ED\uC2DC\uC624.
+java.launcher.opt.footer =\ -cp <\uB514\uB809\uD1A0\uB9AC \uBC0F zip/jar \uD30C\uC77C\uC758 \uD074\uB798\uC2A4 \uAC80\uC0C9 \uACBD\uB85C>\n -classpath <\uB514\uB809\uD1A0\uB9AC \uBC0F zip/jar \uD30C\uC77C\uC758 \uD074\uB798\uC2A4 \uAC80\uC0C9 \uACBD\uB85C>\n \uD074\uB798\uC2A4 \uD30C\uC77C\uC744 \uAC80\uC0C9\uD560 {0}(\uC73C)\uB85C \uAD6C\uBD84\uB41C \uB514\uB809\uD1A0\uB9AC,\n JAR \uC544\uCE74\uC774\uBE0C \uBC0F ZIP \uC544\uCE74\uC774\uBE0C \uBAA9\uB85D\uC785\uB2C8\uB2E4.\n -D<name>=<value>\n \uC2DC\uC2A4\uD15C \uC18D\uC131\uC744 \uC124\uC815\uD569\uB2C8\uB2E4.\n -verbose:[class|gc|jni]\n \uC0C1\uC138 \uC815\uBCF4 \uCD9C\uB825\uC744 \uC0AC\uC6A9\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\n -version \uC81C\uD488 \uBC84\uC804\uC744 \uC778\uC1C4\uD55C \uD6C4 \uC885\uB8CC\uD569\uB2C8\uB2E4.\n -version:<value>\n \uC2E4\uD589\uD560 \uBC84\uC804\uC744 \uC9C0\uC815\uD574\uC57C \uD569\uB2C8\uB2E4.\n -showversion \uC81C\uD488 \uBC84\uC804\uC744 \uC778\uC1C4\uD55C \uD6C4 \uACC4\uC18D\uD569\uB2C8\uB2E4.\n -jre-restrict-search | -no-jre-restrict-search\n \uBC84\uC804 \uAC80\uC0C9\uC5D0\uC11C \uC0AC\uC6A9\uC790 \uC804\uC6A9 JRE\uB97C \uD3EC\uD568/\uC81C\uC678\uD569\uB2C8\uB2E4.\n -? -help \uC774 \uB3C4\uC6C0\uB9D0 \uBA54\uC2DC\uC9C0\uB97C \uC778\uC1C4\uD569\uB2C8\uB2E4.\n -X \uBE44\uD45C\uC900 \uC635\uC158\uC5D0 \uB300\uD55C \uB3C4\uC6C0\uB9D0\uC744 \uC778\uC1C4\uD569\uB2C8\uB2E4.\n -ea[:<packagename>...|:<classname>]\n -enableassertions[:<packagename>...|:<classname>]\n \uC138\uBD84\uC131\uC774 \uC9C0\uC815\uB41C \uAC80\uC99D\uC744 \uC0AC\uC6A9\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\n -da[:<packagename>...|:<classname>]\n -disableassertions[:<packagename>...|:<classname>]\n \uC138\uBD84\uC131\uC774 \uC9C0\uC815\uB41C \uAC80\uC99D\uC744 \uC0AC\uC6A9 \uC548\uD568\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\n -esa | -enablesystemassertions\n \uC2DC\uC2A4\uD15C \uAC80\uC99D\uC744 \uC0AC\uC6A9\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\n -dsa | -disablesystemassertions\n \uC2DC\uC2A4\uD15C \uAC80\uC99D\uC744 \uC0AC\uC6A9 \uC548\uD568\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\n -agentlib:<libname>[=<options>]\n <libname> \uACE0\uC720 \uC5D0\uC774\uC804\uD2B8 \uB77C\uC774\uBE0C\uB7EC\uB9AC\uB97C \uB85C\uB4DC\uD569\uB2C8\uB2E4(\uC608: -agentlib:hprof).\n -agentlib:jdwp=help \uBC0F -agentlib:hprof=help\uB3C4 \uCC38\uC870\uD558\uC2ED\uC2DC\uC624.\n -agentpath:<pathname>[=<options>]\n \uC804\uCCB4 \uACBD\uB85C\uBA85\uC744 \uC0AC\uC6A9\uD558\uC5EC \uACE0\uC720 \uC5D0\uC774\uC804\uD2B8 \uB77C\uC774\uBE0C\uB7EC\uB9AC\uB97C \uB85C\uB4DC\uD569\uB2C8\uB2E4.\n -javaagent:<jarpath>[=<options>]\n Java \uD504\uB85C\uADF8\uB798\uBC0D \uC5B8\uC5B4 \uC5D0\uC774\uC804\uD2B8\uB97C \uB85C\uB4DC\uD569\uB2C8\uB2E4. java.lang.instrument\uB97C \uCC38\uC870\uD558\uC2ED\uC2DC\uC624.\n -splash:<imagepath>\n \uC774\uBBF8\uC9C0\uAC00 \uC9C0\uC815\uB41C \uC2A4\uD50C\uB798\uC2DC \uD654\uBA74\uC744 \uD45C\uC2DC\uD569\uB2C8\uB2E4.\n\uC790\uC138\uD55C \uB0B4\uC6A9\uC740 http://www.oracle.com/technetwork/java/javase/documentation/index.html\uC744 \uCC38\uC870\uD558\uC2ED\uC2DC\uC624.
# Translators please note do not translate the options themselves
-java.launcher.X.usage=\ -Xmixed \uD63C\uD569 \uBAA8\uB4DC\uB97C \uC2E4\uD589\uD569\uB2C8\uB2E4(\uAE30\uBCF8\uAC12).\n -Xint \uD574\uC11D\uB41C \uBAA8\uB4DC\uB9CC \uC2E4\uD589\uD569\uB2C8\uB2E4.\n -Xbootclasspath:<directories and zip/jar files separated by {0}>\n \uBD80\uD2B8\uC2A4\uD2B8\uB7A9 \uD074\uB798\uC2A4 \uBC0F \uB9AC\uC18C\uC2A4\uC5D0 \uB300\uD55C \uAC80\uC0C9 \uACBD\uB85C\uB97C \uC124\uC815\uD569\uB2C8\uB2E4.\n -Xbootclasspath/a:<directories and zip/jar files separated by {0}>\n \uBD80\uD2B8\uC2A4\uD2B8\uB7A9 \uD074\uB798\uC2A4 \uACBD\uB85C \uB05D\uC5D0 \uCD94\uAC00\uD569\uB2C8\uB2E4.\n -Xbootclasspath/p:<directories and zip/jar files separated by {0}>\n \uBD80\uD2B8\uC2A4\uD2B8\uB7A9 \uD074\uB798\uC2A4 \uACBD\uB85C \uC55E\uC5D0 \uCD94\uAC00\uD569\uB2C8\uB2E4.\n -Xdiag \uCD94\uAC00 \uC9C4\uB2E8 \uBA54\uC2DC\uC9C0\uB97C \uD45C\uC2DC\uD569\uB2C8\uB2E4.\n -Xnoclassgc \uD074\uB798\uC2A4\uC758 \uBD88\uD544\uC694\uD55C \uC815\uBCF4 \uBAA8\uC74C\uC744 \uC0AC\uC6A9 \uC548\uD568\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\n -Xincgc \uC99D\uBD84\uC801\uC778 \uBD88\uD544\uC694\uD55C \uC815\uBCF4 \uBAA8\uC74C\uC744 \uC0AC\uC6A9\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\n -Xloggc:<file> \uC2DC\uAC04 \uAE30\uB85D\uACFC \uD568\uAED8 \uD30C\uC77C\uC5D0 GC \uC0C1\uD0DC\uB97C \uAE30\uB85D\uD569\uB2C8\uB2E4.\n -Xbatch \uBC31\uADF8\uB77C\uC6B4\uB4DC \uCEF4\uD30C\uC77C\uC744 \uC0AC\uC6A9 \uC548\uD568\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\n -Xms<size> \uCD08\uAE30 Java \uD799 \uD06C\uAE30\uB97C \uC124\uC815\uD569\uB2C8\uB2E4.\n -Xmx<size> \uCD5C\uB300 Java \uD799 \uD06C\uAE30\uB97C \uC124\uC815\uD569\uB2C8\uB2E4.\n -Xss<size> Java \uC2A4\uB808\uB4DC \uC2A4\uD0DD \uD06C\uAE30\uB97C \uC124\uC815\uD569\uB2C8\uB2E4.\n -Xprof CPU \uD504\uB85C\uD30C\uC77C \uC791\uC131 \uB370\uC774\uD130\uB97C \uCD9C\uB825\uD569\uB2C8\uB2E4.\n -Xfuture \uBBF8\uB798 \uAE30\uBCF8\uAC12\uC744 \uC608\uCE21\uD558\uC5EC \uAC00\uC7A5 \uC5C4\uACA9\uD55C \uAC80\uC0AC\uB97C \uC0AC\uC6A9\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\n -Xrs Java/VM\uC5D0 \uC758\uD55C OS \uC2E0\uD638 \uC0AC\uC6A9\uC744 \uC904\uC785\uB2C8\uB2E4(\uC124\uBA85\uC11C \uCC38\uC870).\n -Xcheck:jni JNI \uD568\uC218\uC5D0 \uB300\uD55C \uCD94\uAC00 \uAC80\uC0AC\uB97C \uC218\uD589\uD569\uB2C8\uB2E4.\n -Xshare:off \uACF5\uC720 \uD074\uB798\uC2A4 \uB370\uC774\uD130 \uC0AC\uC6A9\uC744 \uC2DC\uB3C4\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\n -Xshare:auto \uAC00\uB2A5\uD55C \uACBD\uC6B0 \uACF5\uC720 \uD074\uB798\uC2A4 \uB370\uC774\uD130\uB97C \uC0AC\uC6A9\uD569\uB2C8\uB2E4(\uAE30\uBCF8\uAC12).\n -Xshare:on \uACF5\uC720 \uD074\uB798\uC2A4 \uB370\uC774\uD130\uB97C \uC0AC\uC6A9\uD574\uC57C \uD569\uB2C8\uB2E4. \uADF8\uB807\uC9C0 \uC54A\uC744 \uACBD\uC6B0 \uC2E4\uD328\uD569\uB2C8\uB2E4.\n -XshowSettings \uBAA8\uB4E0 \uC124\uC815\uC744 \uD45C\uC2DC\uD55C \uD6C4 \uACC4\uC18D\uD569\uB2C8\uB2E4.\n -XshowSettings:all\n \uBAA8\uB4E0 \uC124\uC815\uC744 \uD45C\uC2DC\uD55C \uD6C4 \uACC4\uC18D\uD569\uB2C8\uB2E4.\n -XshowSettings:vm \uBAA8\uB4E0 VM \uAD00\uB828 \uC124\uC815\uC744 \uD45C\uC2DC\uD55C \uD6C4 \uACC4\uC18D\uD569\uB2C8\uB2E4.\n -XshowSettings:properties\n \uBAA8\uB4E0 \uC18D\uC131 \uC124\uC815\uC744 \uD45C\uC2DC\uD55C \uD6C4 \uACC4\uC18D\uD569\uB2C8\uB2E4.\n -XshowSettings:locale\n \uBAA8\uB4E0 \uB85C\uCF00\uC77C \uAD00\uB828 \uC124\uC815\uC744 \uD45C\uC2DC\uD55C \uD6C4 \uACC4\uC18D\uD569\uB2C8\uB2E4.\n\n-X \uC635\uC158\uC740 \uBE44\uD45C\uC900 \uC635\uC158\uC774\uBBC0\uB85C \uD1B5\uC9C0 \uC5C6\uC774 \uBCC0\uACBD\uB420 \uC218 \uC788\uC2B5\uB2C8\uB2E4.\n
+java.launcher.X.usage=\ -Xmixed \uD63C\uD569 \uBAA8\uB4DC\uB97C \uC2E4\uD589\uD569\uB2C8\uB2E4(\uAE30\uBCF8\uAC12).\n -Xint \uD574\uC11D\uB41C \uBAA8\uB4DC\uB9CC \uC2E4\uD589\uD569\uB2C8\uB2E4.\n -Xbootclasspath:<{0}(\uC73C)\uB85C \uAD6C\uBD84\uB41C \uB514\uB809\uD1A0\uB9AC \uBC0F zip/jar \uD30C\uC77C>\n \uBD80\uD2B8\uC2A4\uD2B8\uB7A9 \uD074\uB798\uC2A4 \uBC0F \uB9AC\uC18C\uC2A4\uC5D0 \uB300\uD55C \uAC80\uC0C9 \uACBD\uB85C\uB97C \uC124\uC815\uD569\uB2C8\uB2E4.\n -Xbootclasspath/a:<{0}(\uC73C)\uB85C \uAD6C\uBD84\uB41C \uB514\uB809\uD1A0\uB9AC \uBC0F zip/jar \uD30C\uC77C>\n \uBD80\uD2B8\uC2A4\uD2B8\uB7A9 \uD074\uB798\uC2A4 \uACBD\uB85C \uB05D\uC5D0 \uCD94\uAC00\uD569\uB2C8\uB2E4.\n -Xbootclasspath/p:<{0}(\uC73C)\uB85C \uAD6C\uBD84\uB41C \uB514\uB809\uD1A0\uB9AC \uBC0F zip/jar \uD30C\uC77C>\n \uBD80\uD2B8\uC2A4\uD2B8\uB7A9 \uD074\uB798\uC2A4 \uACBD\uB85C \uC55E\uC5D0 \uCD94\uAC00\uD569\uB2C8\uB2E4.\n -Xdiag \uCD94\uAC00 \uC9C4\uB2E8 \uBA54\uC2DC\uC9C0\uB97C \uD45C\uC2DC\uD569\uB2C8\uB2E4.\n -Xnoclassgc \uD074\uB798\uC2A4\uC758 \uBD88\uD544\uC694\uD55C \uC815\uBCF4 \uBAA8\uC74C\uC744 \uC0AC\uC6A9 \uC548\uD568\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\n -Xincgc \uC99D\uBD84\uC801\uC778 \uBD88\uD544\uC694\uD55C \uC815\uBCF4 \uBAA8\uC74C\uC744 \uC0AC\uC6A9\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\n -Xloggc:<file> \uC2DC\uAC04 \uAE30\uB85D\uACFC \uD568\uAED8 \uD30C\uC77C\uC5D0 GC \uC0C1\uD0DC\uB97C \uAE30\uB85D\uD569\uB2C8\uB2E4.\n -Xbatch \uBC31\uADF8\uB77C\uC6B4\uB4DC \uCEF4\uD30C\uC77C\uC744 \uC0AC\uC6A9 \uC548\uD568\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\n -Xms<size> \uCD08\uAE30 Java \uD799 \uD06C\uAE30\uB97C \uC124\uC815\uD569\uB2C8\uB2E4.\n -Xmx<size> \uCD5C\uB300 Java \uD799 \uD06C\uAE30\uB97C \uC124\uC815\uD569\uB2C8\uB2E4.\n -Xss<size> Java \uC2A4\uB808\uB4DC \uC2A4\uD0DD \uD06C\uAE30\uB97C \uC124\uC815\uD569\uB2C8\uB2E4.\n -Xprof CPU \uD504\uB85C\uD30C\uC77C \uC791\uC131 \uB370\uC774\uD130\uB97C \uCD9C\uB825\uD569\uB2C8\uB2E4.\n -Xfuture \uBBF8\uB798 \uAE30\uBCF8\uAC12\uC744 \uC608\uCE21\uD558\uC5EC \uAC00\uC7A5 \uC5C4\uACA9\uD55C \uAC80\uC0AC\uB97C \uC0AC\uC6A9\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\n -Xrs Java/VM\uC5D0 \uC758\uD55C OS \uC2E0\uD638 \uC0AC\uC6A9\uC744 \uC904\uC785\uB2C8\uB2E4(\uC124\uBA85\uC11C \uCC38\uC870).\n -Xcheck:jni JNI \uD568\uC218\uC5D0 \uB300\uD55C \uCD94\uAC00 \uAC80\uC0AC\uB97C \uC218\uD589\uD569\uB2C8\uB2E4.\n -Xshare:off \uACF5\uC720 \uD074\uB798\uC2A4 \uB370\uC774\uD130 \uC0AC\uC6A9\uC744 \uC2DC\uB3C4\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\n -Xshare:auto \uAC00\uB2A5\uD55C \uACBD\uC6B0 \uACF5\uC720 \uD074\uB798\uC2A4 \uB370\uC774\uD130\uB97C \uC0AC\uC6A9\uD569\uB2C8\uB2E4(\uAE30\uBCF8\uAC12).\n -Xshare:on \uACF5\uC720 \uD074\uB798\uC2A4 \uB370\uC774\uD130\uB97C \uC0AC\uC6A9\uD574\uC57C \uD569\uB2C8\uB2E4. \uADF8\uB807\uC9C0 \uC54A\uC744 \uACBD\uC6B0 \uC2E4\uD328\uD569\uB2C8\uB2E4.\n -XshowSettings \uBAA8\uB4E0 \uC124\uC815\uC744 \uD45C\uC2DC\uD55C \uD6C4 \uACC4\uC18D\uD569\uB2C8\uB2E4.\n -XshowSettings:all\n \uBAA8\uB4E0 \uC124\uC815\uC744 \uD45C\uC2DC\uD55C \uD6C4 \uACC4\uC18D\uD569\uB2C8\uB2E4.\n -XshowSettings:vm \uBAA8\uB4E0 VM \uAD00\uB828 \uC124\uC815\uC744 \uD45C\uC2DC\uD55C \uD6C4 \uACC4\uC18D\uD569\uB2C8\uB2E4.\n -XshowSettings:properties\n \uBAA8\uB4E0 \uC18D\uC131 \uC124\uC815\uC744 \uD45C\uC2DC\uD55C \uD6C4 \uACC4\uC18D\uD569\uB2C8\uB2E4.\n -XshowSettings:locale\n \uBAA8\uB4E0 \uB85C\uCF00\uC77C \uAD00\uB828 \uC124\uC815\uC744 \uD45C\uC2DC\uD55C \uD6C4 \uACC4\uC18D\uD569\uB2C8\uB2E4.\n\n-X \uC635\uC158\uC740 \uBE44\uD45C\uC900 \uC635\uC158\uC774\uBBC0\uB85C \uD1B5\uC9C0 \uC5C6\uC774 \uBCC0\uACBD\uB420 \uC218 \
+\uC788\uC2B5\uB2C8\uB2E4.\n
# Translators please note do not translate the options themselves
java.launcher.X.macosx.usage=\n\uB2E4\uC74C\uC740 Mac OS X\uC5D0 \uD2B9\uC815\uB41C \uC635\uC158\uC785\uB2C8\uB2E4.\n -XstartOnFirstThread\n \uCCAB\uBC88\uC9F8 (AppKit) \uC2A4\uB808\uB4DC\uC5D0 main() \uBA54\uC18C\uB4DC\uB97C \uC2E4\uD589\uD569\uB2C8\uB2E4.\n -Xdock:name=<application name>"\n \uACE0\uC815\uC73C\uB85C \uD45C\uC2DC\uB41C \uAE30\uBCF8 \uC751\uC6A9 \uD504\uB85C\uADF8\uB7A8 \uC774\uB984\uC744 \uBB34\uD6A8\uD654\uD569\uB2C8\uB2E4.\n -Xdock:icon=<path to icon file>\n \uACE0\uC815\uC73C\uB85C \uD45C\uC2DC\uB41C \uAE30\uBCF8 \uC544\uC774\uCF58\uC744 \uBB34\uD6A8\uD654\uD569\uB2C8\uB2E4.\n\n
@@ -50,7 +51,5 @@
java.launcher.jar.error1=\uC624\uB958: {0} \uD30C\uC77C\uC744 \uC5F4\uB824\uACE0 \uC2DC\uB3C4\uD558\uB294 \uC911 \uC608\uC0C1\uCE58 \uC54A\uC740 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.
java.launcher.jar.error2={0}\uC5D0\uC11C Manifest\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
java.launcher.jar.error3={0}\uC5D0 \uAE30\uBCF8 Manifest \uC18D\uC131\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.
-java.launcher.jar.error4={0}\uC5D0 Profile manifest \uC18D\uC131\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.
-java.launcher.jar.error5={1}\uC5D0 \uD544\uC694\uD55C {0} \uD504\uB85C\uD30C\uC77C\uC740 \uC774 \uB7F0\uD0C0\uC784\uC5D0\uC11C \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
java.launcher.init.error=\uCD08\uAE30\uD654 \uC624\uB958
java.launcher.javafx.error1=\uC624\uB958: JavaFX launchApplication \uBA54\uC18C\uB4DC\uC5D0 \uC798\uBABB\uB41C \uC11C\uBA85\uC774 \uC788\uC2B5\uB2C8\uB2E4.\\n\uB530\uB77C\uC11C static\uC73C\uB85C \uC120\uC5B8\uD558\uACE0 void \uC720\uD615\uC758 \uAC12\uC744 \uBC18\uD658\uD574\uC57C \uD569\uB2C8\uB2E4.
--- a/jdk/src/share/classes/sun/launcher/resources/launcher_pt_BR.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/launcher/resources/launcher_pt_BR.properties Thu Oct 10 13:41:08 2013 -0700
@@ -34,7 +34,7 @@
java.launcher.ergo.message2 =\ porque a execu\u00E7\u00E3o est\u00E1 sendo feita em uma m\u00E1quina de classe de servidor.\n
# Translators please note do not translate the options themselves
-java.launcher.opt.footer =\ -cp <caminho de pesquisa da classe dos diret\u00F3rios e arquivos zip/jar>\n -classpath <caminho de pesquisa da classe dos diret\u00F3rios e arquivos zip/jar>\n Uma lista separada por {0} de diret\u00F3rios, archives JAR\n e archives ZIP nos quais ser\u00E3o procurados os arquivos de classe.\n -D<nome>=<valor>\n define uma propriedade do sistema\n -verbose[:classe|gc|jni]\n ativa a sa\u00EDda detalhada\n -version imprime a vers\u00E3o do produto e sai do programa\n -version:<valor>\n requer a execu\u00E7\u00E3o da vers\u00E3o especificada\n -showversion imprime a vers\u00E3o do produto e continua\n -jre-restrict-search | -no-jre-restrict-search\n inclui/exclui JREs privados do usu\u00E1rio na pesquisa de vers\u00E3o\n -? -help imprime esta mensagem de ajuda\n -X imprime a ajuda sobre op\u00E7\u00F5es n\u00E3o padronizadas\n -ea[:<nome do pacote>...|:<nome da classe>]\n -enableassertions[:<nome do pacote>...|:<nome da classe>]\n ativa asser\u00E7\u00F5es com granularidade especificada\n -da[:<nome do pacote>...|:<nome da classe>]\n -disableassertions[:<nome do pacote>...|:<nome da classe>]\n desativa asser\u00E7\u00F5es com granularidade especificada\n -esa | -enablesystemassertions\n ativa asser\u00E7\u00F5es do sistema\n -dsa | -disablesystemassertions\n desativa asser\u00E7\u00F5es do sistema\n -agentlib:<nome da biblioteca>[=<op\u00E7\u00F5es>]\n carrega a biblioteca de agentes nativa <nome da biblioteca>, por exemplo: -agentlib:hprof\n consulte tamb\u00E9m: -agentlib:jdwp=help e -agentlib:hprof=help\n -agentpath:<nome do caminho>[=<op\u00E7\u00F5es>]\n carrega a biblioteca de agentes nativa com base no nome do caminho completo\n -javaagent:<caminho do arquivo jar>[=<op\u00E7\u00F5es>]\n carrega o agente da linguagem de programa\u00E7\u00E3o Java; consulte java.lang.instrument\n -splash:<caminho da imagem>\n mostra a tela de abertura com a imagem especificada\nConsulte http://www.oracle.com/technetwork/java/javase/documentation/index.html para obter mais detalhes.
+java.launcher.opt.footer =\ -cp <caminho de pesquisa da classe dos diret\u00F3rios e arquivos zip/jar>\n -classpath <caminho de pesquisa da classe dos diret\u00F3rios e arquivos zip/jar>\n Uma lista separada por {0} de diret\u00F3rios, archives JAR\n e archives ZIP nos quais ser\u00E3o procurados os arquivos de classe.\n -D<nome>=<valor>\n define uma propriedade do sistema\n -verbose:[classe|gc|jni]\n ativa a sa\u00EDda detalhada\n -version imprime a vers\u00E3o do produto e sai do programa\n -version:<valor>\n requer a execu\u00E7\u00E3o da vers\u00E3o especificada\n -showversion imprime a vers\u00E3o do produto e continua\n -jre-restrict-search | -no-jre-restrict-search\n inclui/exclui JREs privados do usu\u00E1rio na pesquisa de vers\u00E3o\n -? -help imprime esta mensagem de ajuda\n -X imprime a ajuda sobre op\u00E7\u00F5es n\u00E3o padronizadas\n -ea[:<nome do pacote>...|:<nome da classe>]\n -enableassertions[:<nome do pacote>...|:<nome da classe>]\n ativa asser\u00E7\u00F5es com granularidade especificada\n -da[:<nome do pacote>...|:<nome da classe>]\n -disableassertions[:<nome do pacote>...|:<nome da classe>]\n desativa asser\u00E7\u00F5es com granularidade especificada\n -esa | -enablesystemassertions\n ativa asser\u00E7\u00F5es do sistema\n -dsa | -disablesystemassertions\n desativa asser\u00E7\u00F5es do sistema\n -agentlib:<nome da biblioteca>[=<op\u00E7\u00F5es>]\n carrega a biblioteca de agentes nativa <nome da biblioteca>, por exemplo: -agentlib:hprof\n consulte tamb\u00E9m: -agentlib:jdwp=help e -agentlib:hprof=help\n -agentpath:<nome do caminho>[=<op\u00E7\u00F5es>]\n carrega a biblioteca de agentes nativa com base no nome do caminho completo\n -javaagent:<caminho do arquivo jar>[=<op\u00E7\u00F5es>]\n carrega o agente da linguagem de programa\u00E7\u00E3o Java; consulte java.lang.instrument\n -splash:<caminho da imagem>\n mostra a tela de abertura com a imagem especificada\nConsulte http://www.oracle.com/technetwork/java/javase/documentation/index.html para obter mais detalhes.
# Translators please note do not translate the options themselves
java.launcher.X.usage=\ -Xmixed execu\u00E7\u00E3o no modo misto (default)\n -Xint execu\u00E7\u00E3o somente no modo interpretado\n -Xbootclasspath:<diret\u00F3rios e arquivos zip/jar separados por {0}>\n define o caminho de pesquisa para classes e recursos de inicializa\u00E7\u00E3o\n -Xbootclasspath/a:<diret\u00F3rios e arquivos zip/jar separados por {0}>\n anexa no final do caminho da classe de inicializa\u00E7\u00E3o\n -Xbootclasspath/p:<diret\u00F3rios e arquivos zip/jar separados por {0}>\n anexa no in\u00EDcio do caminho da classe de inicializa\u00E7\u00E3o\n -Xdiag mostra mensagens de diagn\u00F3stico adicionais\n -Xnoclassgc desativa a coleta de lixo da classe\n -Xincgc ativa a coleta de lixo incremental\n -Xloggc:<arquivo> registra o status do GC status em um arquivo com marca\u00E7\u00F5es de data e hor\u00E1rio\n -Xbatch desativa a compila\u00E7\u00E3o em segundo plano\n -Xms<tamanho> define o tamanho inicial do heap Java\n -Xmx<tamanho> define o tamanho m\u00E1ximo do heap Java\n -Xss<tamanho> define o tamanho da pilha de threads java\n -Xprof produz dados de perfil da cpu\n -Xfuture ativa verifica\u00E7\u00F5es de n\u00EDvel m\u00E1ximo de exig\u00EAncia, prevendo o valor default futuro\n -Xrs reduz o uso de sinais do SO pelo(a) Java/VM (consulte a documenta\u00E7\u00E3o)\n -Xcheck:jni executa verifica\u00E7\u00F5es adicionais de fun\u00E7\u00F5es da JNI\n -Xshare:off n\u00E3o tenta usar dados da classe compartilhada\n -Xshare:auto se poss\u00EDvel, usa dados da classe compartilhada (default)\n -Xshare:on requer o uso de dados da classe compartilhada, caso contr\u00E1rio haver\u00E1 falha.\n -XshowSettings mostra todas as defini\u00E7\u00F5es e continua\n -XshowSettings:all\n mostra todas as defini\u00E7\u00F5es e continua\n -XshowSettings:vm mostra todas as defini\u00E7\u00F5es relacionadas \u00E0 vm e continua\n -XshowSettings:properties\n mostra todas as defini\u00E7\u00F5es da propriedade e continua\n -XshowSettings:locale\n mostra todas as defini\u00E7\u00F5es relativas \u00E0s configura\u00E7\u00F5es regionais e continua\n\nAs -X options n\u00E3o s\u00E3o padronizadas e est\u00E3o sujeitas a altera\u00E7\u00F5es sem aviso.\n
@@ -50,7 +50,5 @@
java.launcher.jar.error1=Erro: ocorreu um erro inesperado ao tentar abrir o arquivo {0}
java.launcher.jar.error2=manifesto n\u00E3o encontrado em {0}
java.launcher.jar.error3=nenhum atributo de manifesto principal em {0}
-java.launcher.jar.error4=nenhum atributo de manifesto de Perfil em {0}
-java.launcher.jar.error5=O perfil {0} exigido por {1} n\u00E3o \u00E9 suportado por este runtime
java.launcher.init.error=erro de inicializa\u00E7\u00E3o
java.launcher.javafx.error1=Erro: O m\u00E9todo launchApplication do JavaFX tem a assinatura errada. Ele\\ndeve ser declarado como est\u00E1tico e retornar um valor do tipo void
--- a/jdk/src/share/classes/sun/launcher/resources/launcher_sv.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/launcher/resources/launcher_sv.properties Thu Oct 10 13:41:08 2013 -0700
@@ -50,7 +50,5 @@
java.launcher.jar.error1=Fel: Ett ov\u00E4ntat fel intr\u00E4ffade n\u00E4r filen {0} skulle \u00F6ppnas
java.launcher.jar.error2=manifest finns inte i {0}
java.launcher.jar.error3=inget huvudmanifestattribut i {0}
-java.launcher.jar.error4=inget profilmanifestattribut i {0}
-java.launcher.jar.error5=Profil {0} som kr\u00E4vs av {1} kan inte anv\u00E4ndas av den h\u00E4r k\u00F6rningen
java.launcher.init.error=initieringsfel
java.launcher.javafx.error1=Fel: JavaFX launchApplication-metoden har fel signatur, den \nm\u00E5ste ha deklarerats som statisk och returnera ett v\u00E4rde av typen void
--- a/jdk/src/share/classes/sun/launcher/resources/launcher_zh_CN.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/launcher/resources/launcher_zh_CN.properties Thu Oct 10 13:41:08 2013 -0700
@@ -50,7 +50,5 @@
java.launcher.jar.error1=\u9519\u8BEF: \u5C1D\u8BD5\u6253\u5F00\u6587\u4EF6{0}\u65F6\u51FA\u73B0\u610F\u5916\u9519\u8BEF
java.launcher.jar.error2=\u5728{0}\u4E2D\u627E\u4E0D\u5230\u6E05\u5355
java.launcher.jar.error3={0}\u4E2D\u6CA1\u6709\u4E3B\u6E05\u5355\u5C5E\u6027
-java.launcher.jar.error4={0}\u4E2D\u6CA1\u6709\u914D\u7F6E\u6587\u4EF6\u6E05\u5355\u5C5E\u6027
-java.launcher.jar.error5=\u6B64\u8FD0\u884C\u65F6\u4E0D\u652F\u6301{1}\u6240\u9700\u7684\u914D\u7F6E\u6587\u4EF6{0}
java.launcher.init.error=\u521D\u59CB\u5316\u9519\u8BEF
java.launcher.javafx.error1=\u9519\u8BEF: JavaFX launchApplication \u65B9\u6CD5\u5177\u6709\u9519\u8BEF\u7684\u7B7E\u540D, \u5FC5\u987B\n\u5C06\u65B9\u6CD5\u58F0\u660E\u4E3A\u9759\u6001\u65B9\u6CD5\u5E76\u8FD4\u56DE\u7A7A\u7C7B\u578B\u7684\u503C
--- a/jdk/src/share/classes/sun/launcher/resources/launcher_zh_TW.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/launcher/resources/launcher_zh_TW.properties Thu Oct 10 13:41:08 2013 -0700
@@ -50,7 +50,5 @@
java.launcher.jar.error1=\u932F\u8AA4: \u5617\u8A66\u958B\u555F\u6A94\u6848 {0} \u6642\u767C\u751F\u672A\u9810\u671F\u7684\u932F\u8AA4
java.launcher.jar.error2=\u5728 {0} \u4E2D\u627E\u4E0D\u5230\u8CC7\u8A0A\u6E05\u55AE
java.launcher.jar.error3={0} \u4E2D\u6C92\u6709\u4E3B\u8981\u8CC7\u8A0A\u6E05\u55AE\u5C6C\u6027
-java.launcher.jar.error4={0} \u4E2D\u6C92\u6709 Profile \u8CC7\u8A0A\u6E05\u55AE\u5C6C\u6027
-java.launcher.jar.error5=\u6B64\u7A0B\u5F0F\u5BE6\u969B\u57F7\u884C\u4E0D\u652F\u63F4 {1} \u6240\u9700\u7684\u8A2D\u5B9A\u6A94 {0}
java.launcher.init.error=\u521D\u59CB\u5316\u932F\u8AA4
java.launcher.javafx.error1=\u932F\u8AA4: JavaFX launchApplication \u65B9\u6CD5\u7684\u7C3D\u7AE0\u932F\u8AA4\uFF0C\u5B83\n\u5FC5\u9808\u5BA3\u544A\u70BA\u975C\u614B\u4E26\u50B3\u56DE void \u985E\u578B\u7684\u503C
--- a/jdk/src/share/classes/sun/print/resources/serviceui_de.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/print/resources/serviceui_de.properties Thu Oct 10 13:41:08 2013 -0700
@@ -17,8 +17,8 @@
button.properties=E&igenschaften...
#
checkbox.collate=&Sortieren
-checkbox.jobsheets=&Bannerseite
-checkbox.printtofile=Ausgabe in &Datei
+checkbox.jobsheets=Banner&seite
+checkbox.printtofile=Aus&gabe in Datei
#
dialog.printtitle=Drucken
dialog.pstitle=Seite einrichten
@@ -29,7 +29,7 @@
dialog.writeerror=Schreiben in Datei nicht m\u00F6glich:
#
label.info=Info:
-label.jobname=&Job-Name:
+label.jobname=&Jobname:
label.numcopies=Anzahl &Kopien:
label.priority=P&riorit\u00E4t:
label.psname=&Name:
@@ -42,21 +42,21 @@
label.millimetres=(mm)
label.inches=(Zoll)
label.topmargin=&oben
-label.bottommargin=&unten
+label.bottommargin=u&nten
label.leftmargin=&links
-label.rightmargin=&rechts
+label.rightmargin=re&chts
#
radiobutton.color=&Farbe
radiobutton.draftq=Ent&wurf
-radiobutton.duplex=&Duplex
+radiobutton.duplex=Du&plex
radiobutton.highq=&Hoch
-radiobutton.landscape=&Querformat
+radiobutton.landscape=Querforma&t
radiobutton.monochrome=&Monochrom
radiobutton.normalq=&Normal
-radiobutton.oneside=&Einseitig
+radiobutton.oneside=E&inseitig
radiobutton.portrait=Hochfor&mat
radiobutton.rangeall=A&lle
-radiobutton.rangepages=S&eiten
+radiobutton.rangepages=Sei&ten
radiobutton.revlandscape=Umgekehrtes Q&uerformat
radiobutton.revportrait=Umgekehrtes &Hochformat
radiobutton.tumble=&Kalenderdruck
--- a/jdk/src/share/classes/sun/print/resources/serviceui_es.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/print/resources/serviceui_es.properties Thu Oct 10 13:41:08 2013 -0700
@@ -36,29 +36,29 @@
label.pstype=Tipo:
label.rangeto=A
label.size=Tama&\u00F1o:
-label.source=Ori&gen:
+label.source=Orig&en:
label.status=Estado:
label.username=&Usuario:
label.millimetres=(mm)
label.inches=(pulg.)
-label.topmargin=&superior
+label.topmargin=s&uperior
label.bottommargin=in&ferior
label.leftmargin=iz&quierdo
label.rightmargin=d&erecho
#
radiobutton.color=&Color
-radiobutton.draftq=Bo&rrador
+radiobutton.draftq=B&orrador
radiobutton.duplex=&D\u00FAplex
-radiobutton.highq=&Alta
+radiobutton.highq=Al&ta
radiobutton.landscape=Hori&zontal
radiobutton.monochrome=&Monocromo
radiobutton.normalq=&Normal
radiobutton.oneside=Una Ca&ra
radiobutton.portrait=&Vertical
radiobutton.rangeall=&Todo
-radiobutton.rangepages=P\u00E1&ginas
+radiobutton.rangepages=P\u00E1gina&s
radiobutton.revlandscape=&Horizontal Inverso
-radiobutton.revportrait=Vertical Inver&so
+radiobutton.revportrait=Vertical I&nverso
radiobutton.tumble=Cam&bio de Cara
# The vkMnemonics correspond with the constants defined in KeyEvent, eg
# 65 = KeyEvent.VK_A
--- a/jdk/src/share/classes/sun/print/resources/serviceui_fr.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/print/resources/serviceui_fr.properties Thu Oct 10 13:41:08 2013 -0700
@@ -29,7 +29,7 @@
dialog.writeerror=Impossible d'\u00E9crire dans le fichier :
#
label.info=Infos :
-label.jobname=Nom du &travail :
+label.jobname=Nom du tra&vail :
label.numcopies=Nombre de c&opies :
label.priority=P&riorit\u00E9 :
label.psname=&Nom :
@@ -38,22 +38,22 @@
label.size=Tai&lle :
label.source=Sour&ce :
label.status=Statut :
-label.username=Nom &utilisateur :
+label.username=Nom ut&ilisateur :
label.millimetres=(mm)
label.inches=(po)
label.topmargin=&haut
label.bottommargin=&bas
-label.leftmargin=&gauche
+label.leftmargin=gauc&he
label.rightmargin=&droite
#
-radiobutton.color=Coule&ur
+radiobutton.color=Coul&eur
radiobutton.draftq=Broui&llon
radiobutton.duplex=&Duplex
radiobutton.highq=Ma&x.
-radiobutton.landscape=Pay&sage
-radiobutton.monochrome=&Monochrome
+radiobutton.landscape=Pa&ysage
+radiobutton.monochrome=Monoc&hrome
radiobutton.normalq=&Normal
-radiobutton.oneside=&Un c\u00F4t\u00E9
+radiobutton.oneside=Un &c\u00F4t\u00E9
radiobutton.portrait=&Portrait
radiobutton.rangeall=&Tout
radiobutton.rangepages=Pag&es
@@ -64,7 +64,7 @@
# 65 = KeyEvent.VK_A
tab.appearance=&Apparence
tab.general=&G\u00E9n\u00E9ral
-tab.pagesetup=Mi&se en page
+tab.pagesetup=&Mise en page
#
error.pagerange=Plage de pages non valide. Sp\u00E9cifiez les valeurs de nouveau (ex. : 1-3,5,7-10)
error.destination=Nom de fichier non valide ; recommencez
--- a/jdk/src/share/classes/sun/print/resources/serviceui_it.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/print/resources/serviceui_it.properties Thu Oct 10 13:41:08 2013 -0700
@@ -47,8 +47,8 @@
label.rightmargin=&destro
#
radiobutton.color=&Colore
-radiobutton.draftq=&Bozza
-radiobutton.duplex=F&ronte retro
+radiobutton.draftq=Bo&zza
+radiobutton.duplex=&Fronte retro
radiobutton.highq=A<a
radiobutton.landscape=Orizzonta&le
radiobutton.monochrome=Monocrom&atico
@@ -62,7 +62,7 @@
radiobutton.tumble=La&to corto
# The vkMnemonics correspond with the constants defined in KeyEvent, eg
# 65 = KeyEvent.VK_A
-tab.appearance=&Aspetto
+tab.appearance=As&petto
tab.general=&Generale
tab.pagesetup=Impo&sta pagina
#
--- a/jdk/src/share/classes/sun/print/resources/serviceui_pt_BR.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/print/resources/serviceui_pt_BR.properties Thu Oct 10 13:41:08 2013 -0700
@@ -31,7 +31,7 @@
label.info=Informa\u00E7\u00F5es:
label.jobname=Nome do &Job:
label.numcopies=N\u00FAmer&o de c\u00F3pias:
-label.priority=P&rioridade:
+label.priority=Pri&oridade:
label.psname=&Nome:
label.pstype=Tipo:
label.rangeto=At\u00E9
@@ -44,27 +44,27 @@
label.topmargin=&superior
label.bottommargin=&inferior
label.leftmargin=es&querda:
-label.rightmargin=di&reita
+label.rightmargin=&direita
#
-radiobutton.color=C&or
-radiobutton.draftq=&Rascunho
-radiobutton.duplex=&Duplex
-radiobutton.highq=&Alta
+radiobutton.color=&Cor
+radiobutton.draftq=Rascun&ho
+radiobutton.duplex=Duple&x
+radiobutton.highq=A<a
radiobutton.landscape=&Paisagem
radiobutton.monochrome=&Monocrom\u00E1tico
radiobutton.normalq=&Normal
-radiobutton.oneside=Um Lad&o
-radiobutton.portrait=&Retrato
+radiobutton.oneside=Um La&do
+radiobutton.portrait=Re&trato
radiobutton.rangeall=T&udo
radiobutton.rangepages=&P\u00E1ginas
radiobutton.revlandscape=Paisagem I&nvertida
-radiobutton.revportrait=Retrato &Invertido
+radiobutton.revportrait=Retrato In&vertido
radiobutton.tumble=&Virar
# The vkMnemonics correspond with the constants defined in KeyEvent, eg
# 65 = KeyEvent.VK_A
-tab.appearance=&Apar\u00EAncia
+tab.appearance=Apa&r\u00EAncia
tab.general=&Geral
-tab.pagesetup=Configura\u00E7\u00E3o de &P\u00E1gina
+tab.pagesetup=Con&figura\u00E7\u00E3o da P\u00E1gina
#
error.pagerange=Faixa de p\u00E1ginas inv\u00E1lida; insira novamente os valores (por exemplo, 1-3,5,7-10)
error.destination=Nome de arquivo inv\u00E1lido; tente novamente
--- a/jdk/src/share/classes/sun/print/resources/serviceui_sv.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/print/resources/serviceui_sv.properties Thu Oct 10 13:41:08 2013 -0700
@@ -17,7 +17,7 @@
button.properties=&Egenskaper...
#
checkbox.collate=&Sortera
-checkbox.jobsheets=&F\u00F6rs\u00E4ttsblad
+checkbox.jobsheets=F&\u00F6rs\u00E4ttsblad
checkbox.printtofile=Skriv ut till &fil
#
dialog.printtitle=Skriv ut
@@ -30,13 +30,13 @@
#
label.info=Information:
label.jobname=&Utskrift:
-label.numcopies=Antal &exemplar:
+label.numcopies=Antal e&xemplar:
label.priority=P&rioritet:
label.psname=&Namn:
label.pstype=Typ:
label.rangeto=Till
label.size=Stor&lek:
-label.source=K\u00E4l&la:
+label.source=&K\u00E4lla:
label.status=Status:
label.username=A&nv\u00E4ndarnamn:
label.millimetres=(mm)
@@ -50,7 +50,7 @@
radiobutton.draftq=Utka&st
radiobutton.duplex=&Dubbelsidig
radiobutton.highq=&H\u00F6g
-radiobutton.landscape=&Liggande
+radiobutton.landscape=Liggan&de
radiobutton.monochrome=&Monokrom
radiobutton.normalq=&Normal
radiobutton.oneside=&Ensidig
@@ -62,9 +62,9 @@
radiobutton.tumble=&V\u00E4nd
# The vkMnemonics correspond with the constants defined in KeyEvent, eg
# 65 = KeyEvent.VK_A
-tab.appearance=&Format
+tab.appearance=Fo&rmat
tab.general=&Allm\u00E4nt
-tab.pagesetup=Utskrifts&format
+tab.pagesetup=&Utskriftsformat
#
error.pagerange=Ogiltigt sidintervall. Skriv in v\u00E4rdena igen (t ex 1-3,5,7-10)
error.destination=Ogiltigt filnamn. F\u00F6rs\u00F6k igen.
--- a/jdk/src/share/classes/sun/rmi/registry/resources/rmiregistry_de.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/rmi/registry/resources/rmiregistry_de.properties Thu Oct 10 13:41:08 2013 -0700
@@ -24,5 +24,5 @@
# questions.
#
-rmiregistry.usage=Verwendung: {0} <Optionen> <Port>\n\nwobei die <Optionen> Folgendes beinhalten:\n -J <Laufzeitkennzeichen> Argument an den Java-Interpreter \u00FCbergeben
+rmiregistry.usage=Verwendung: {0} <Optionen> <Port>\n\nwobei die <Optionen> Folgendes beinhalten:\n -J<Laufzeitkennzeichen> Argument an den Java-Interpreter \u00FCbergeben
rmiregistry.port.badnumber=Portargument {0} ist keine Zahl.
--- a/jdk/src/share/classes/sun/rmi/server/resources/rmid_ko.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/rmi/server/resources/rmid_ko.properties Thu Oct 10 13:41:08 2013 -0700
@@ -87,7 +87,7 @@
rmid.restart.service.warning=\nrmid: (\uACBD\uACE0) \uC11C\uBE44\uC2A4 \uC7AC\uC2DC\uC791\uC73C\uB85C \uC778\uD574 \uBC1C\uC0DD\uD55C \uC624\uB958:
# "rmid" should not be translated
-rmid.log.update.warning=\nrmid: (\uACBD\uACE0) \uB85C\uADF8 \uAC31\uC2E0\uC73C\uB85C \uC778\uD574 \uBC1C\uC0DD\uD55C \uC624\uB958:
+rmid.log.update.warning=\nrmid: (\uACBD\uACE0) \uB85C\uADF8 \uC5C5\uB370\uC774\uD2B8\uB85C \uC778\uD574 \uBC1C\uC0DD\uD55C \uC624\uB958:
# "rmid" should not be translated
rmid.log.snapshot.warning=\nrmid: (\uC2EC\uAC01) \uB85C\uADF8 \uC2A4\uB0C5\uC0F7\uC73C\uB85C \uC778\uD574 \uBC1C\uC0DD\uD55C \uC624\uB958:
--- a/jdk/src/share/classes/sun/security/krb5/Config.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/security/krb5/Config.java Thu Oct 10 13:41:08 2013 -0700
@@ -225,19 +225,19 @@
* and has no sub-key at all (given "forwardable" is defined, otherwise,
* this method has no knowledge if it's a value name or a section name),
*/
- @SuppressWarnings("unchecked")
public String get(String... keys) {
- Vector<String> v = get0(keys);
+ Vector<String> v = getString0(keys);
if (v == null) return null;
return v.lastElement();
}
/**
* Gets all values for the specified keys.
- * @see #get(java.lang.String[])
+ * @throws IllegalArgumentException if any of the keys is illegal
+ * (See {@link #get})
*/
public String getAll(String... keys) {
- Vector<String> v = get0(keys);
+ Vector<String> v = getString0(keys);
if (v == null) return null;
StringBuilder sb = new StringBuilder();
boolean first = true;
@@ -252,17 +252,37 @@
return sb.toString();
}
- // Internal method. Returns the vector of strings for keys.
+ /**
+ * Returns true if keys exists, can be either final string(s) or sub-stanza
+ * @throws IllegalArgumentException if any of the keys is illegal
+ * (See {@link #get})
+ */
+ public boolean exists(String... keys) {
+ return get0(keys) != null;
+ }
+
+ // Returns final string value(s) for given keys.
+ @SuppressWarnings("unchecked")
+ private Vector<String> getString0(String... keys) {
+ try {
+ return (Vector<String>)get0(keys);
+ } catch (ClassCastException cce) {
+ throw new IllegalArgumentException(cce);
+ }
+ }
+
+ // Internal method. Returns the value for keys, which can be a sub-stanza
+ // or final string value(s).
// The only method (except for toString) that reads stanzaTable directly.
@SuppressWarnings("unchecked")
- private Vector<String> get0(String... keys) {
+ private Object get0(String... keys) {
Object current = stanzaTable;
try {
for (String key: keys) {
current = ((Hashtable<String,Object>)current).get(key);
if (current == null) return null;
}
- return (Vector<String>)current;
+ return current;
} catch (ClassCastException cce) {
throw new IllegalArgumentException(cce);
}
--- a/jdk/src/share/classes/sun/security/krb5/Realm.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/security/krb5/Realm.java Thu Oct 10 13:41:08 2013 -0700
@@ -34,10 +34,8 @@
import sun.security.krb5.internal.Krb5;
import sun.security.util.*;
import java.io.IOException;
-import java.util.StringTokenizer;
-import java.util.Vector;
-import java.util.Stack;
-import java.util.EmptyStackException;
+import java.util.*;
+
import sun.security.krb5.internal.util.KerberosString;
/**
@@ -50,7 +48,6 @@
*/
public class Realm implements Cloneable {
private final String realm; // not null nor empty
- private static boolean DEBUG = Krb5.DEBUG;
public Realm(String name) throws RealmException {
realm = parseRealm(name);
@@ -233,90 +230,53 @@
}
}
- /*
- * First leg of realms parsing. Used by getRealmsList.
- */
- private static String[] doInitialParse(String cRealm, String sRealm)
- throws KrbException {
- if (cRealm == null || sRealm == null){
- throw new KrbException(Krb5.API_INVALID_ARG);
- }
- if (DEBUG) {
- System.out.println(">>> Realm doInitialParse: cRealm=["
- + cRealm + "], sRealm=[" +sRealm + "]");
- }
- if (cRealm.equals(sRealm)) {
- String[] retList = null;
- retList = new String[1];
- retList[0] = new String(cRealm);
-
- if (DEBUG) {
- System.out.println(">>> Realm doInitialParse: "
- + retList[0]);
- }
- return retList;
- }
- return null;
- }
-
/**
* Returns an array of realms that may be traversed to obtain
* a TGT from the initiating realm cRealm to the target realm
* sRealm.
* <br>
- * There may be an arbitrary number of intermediate realms
- * between cRealm and sRealm. The realms may be organized
- * organized hierarchically, or the paths between them may be
- * specified in the [capaths] stanza of the caller's
- * Kerberos configuration file. The configuration file is consulted
- * first. Then a hirarchical organization is assumed if no realms
- * are found in the configuration file.
+ * This method would read [capaths] to create a path, or generate a
+ * hierarchical path if [capaths] does not contain a sub-stanza for cRealm
+ * or the sub-stanza does not contain a tag for sRealm.
* <br>
- * The returned list, if not null, contains cRealm as the first
- * entry. sRealm is not included unless it is mistakenly listed
- * in the configuration file as an intermediary realm.
+ * The returned list would never be null, and it always contains
+ * cRealm as the head entry. sRealm is not included as the tail.
*
- * @param cRealm the initiating realm
- * @param sRealm the target realm
- * @returns array of realms
- * @thows KrbException
+ * @param cRealm the initiating realm, not null
+ * @param sRealm the target realm, not null, not equals to cRealm
+ * @returns array of realms including at least cRealm as the first
+ * element
*/
- public static String[] getRealmsList(String cRealm, String sRealm)
- throws KrbException {
- String[] retList = doInitialParse(cRealm, sRealm);
- if (retList != null && retList.length != 0) {
- return retList;
- }
- /*
- * Try [capaths].
- */
- retList = parseCapaths(cRealm, sRealm);
- if (retList != null && retList.length != 0) {
- return retList;
- }
- /*
- * Now assume the realms are organized hierarchically.
- */
- retList = parseHierarchy(cRealm, sRealm);
- return retList;
+ public static String[] getRealmsList(String cRealm, String sRealm) {
+ try {
+ // Try [capaths]
+ return parseCapaths(cRealm, sRealm);
+ } catch (KrbException ke) {
+ // Now assume the realms are organized hierarchically.
+ return parseHierarchy(cRealm, sRealm);
}
+ }
/**
- * Parses the [capaths] stanza of the configuration file
- * for a list of realms to traverse
- * to obtain credentials from the initiating realm cRealm to
- * the target realm sRealm.
- * @param cRealm the initiating realm
- * @param sRealm the target realm
- * @returns array of realms
- * @ throws KrbException
- */
-
- /*
- * parseCapaths works for a capaths organized such that
- * for a given client realm C there is a tag C that
- * contains subtags Ci ... Cn that completely define intermediate
- * realms from C to target T. For example:
+ * Parses the [capaths] stanza of the configuration file for a
+ * list of realms to traverse to obtain credentials from the
+ * initiating realm cRealm to the target realm sRealm.
+ *
+ * For a given client realm C there is a tag C in [capaths] whose
+ * subtag S has a value which is a (possibly partial) path from C
+ * to S. When the path is partial, it contains only the tail of the
+ * full path. Values of other subtags will be used to build the full
+ * path. The value "." means a direct path from C to S. If realm S
+ * does not appear as a subtag, there is no path defined here.
+ *
+ * The implementation ignores all values which equals to C or S, or
+ * a "." in multiple values, or any duplicated realm names.
+ *
+ * When a path value has more than two realms, they can be specified
+ * with multiple key-value pairs each having a single value, but the
+ * order must not change.
+ *
+ * For example:
*
* [capaths]
* TIVOLI.COM = {
@@ -325,357 +285,130 @@
* LDAPCENTRAL.NET = .
* }
*
- * The tag TIVOLI.COM contains subtags IBM.COM, IBM_LDAPCENTRAL.COM
- * and LDAPCENTRAL.NET that completely define the path from TIVOLI.COM
- * to IBM.COM (TIVOLI.COM->LADAPCENTRAL.NET->IBM_LDAPCENTRAL.COM->IBM
- * or TIVOLI.COM->MOONLITE.ORG->IBM.COM).
+ * TIVOLI.COM has a direct path to LDAPCENTRAL.NET, which has a direct
+ * path to IBM_LDAPCENTRAL.COM. It also has a partial path to IBM.COM
+ * being "IBM_LDAPCENTRAL.COM MOONLITE.ORG". Merging these info together,
+ * a full path from TIVOLI.COM to IBM.COM will be
+ *
+ * TIVOLI.COM -> LDAPCENTRAL.NET -> IBM_LDAPCENTRAL.COM
+ * -> IBM_LDAPCENTRAL.COM -> MOONLITE.ORG
+ *
+ * Please note the sRealm IBM.COM does not appear in the path.
*
- * A direct path is assumed for an intermediary whose entry is not
- * "closed" by a "." In the above example, TIVOLI.COM is assumed
- * to have a direct path to MOONLITE.ORG and MOONLITE.COM
- * in turn to IBM.COM.
+ * @param cRealm the initiating realm
+ * @param sRealm the target realm, not the same as cRealm
+ * @returns array of realms including at least cRealm as the first
+ * element
+ * @throws KrbException if the config does not contain a sub-stanza
+ * for cRealm in [capaths] or the sub-stanza does not contain
+ * sRealm as a tag
*/
-
- private static String[] parseCapaths(String cRealm, String sRealm) throws KrbException {
- String[] retList = null;
+ private static String[] parseCapaths(String cRealm, String sRealm)
+ throws KrbException {
- Config cfg = null;
- try {
- cfg = Config.getInstance();
- } catch (Exception exc) {
- if (DEBUG) {
- System.out.println ("Configuration information can not be " +
- "obtained " + exc.getMessage());
- }
- return null;
- }
+ // This line could throw a KrbException
+ Config cfg = Config.getInstance();
- String intermediaries = cfg.getAll("capaths", cRealm, sRealm);
-
- if (intermediaries == null) {
- if (DEBUG) {
- System.out.println(">>> Realm parseCapaths: no cfg entry");
- }
- return null;
+ if (!cfg.exists("capaths", cRealm, sRealm)) {
+ throw new KrbException("No conf");
}
- String tempTarget = null, tempRealm = null;
- Stack<String> iStack = new Stack<>();
-
- /*
- * The half-established reversed-path, starting from the final target
- * (sRealm), each item can be connected to by the next one.
- * Might contains wrong item, if found, a bad track is performed
- */
- Vector<String> tempList = new Vector<>(8, 8);
- tempList.add(sRealm);
-
- int count = 0; // For debug only
- tempTarget = sRealm;
-
- out: do {
- if (DEBUG) {
- count++;
- System.out.println(">>> Realm parseCapaths: loop " +
- count + ": target=" + tempTarget);
- }
-
- if (intermediaries != null &&
- !intermediaries.equals(".") &&
- !intermediaries.equals(cRealm)) {
- if (DEBUG) {
- System.out.println(">>> Realm parseCapaths: loop " +
- count + ": intermediaries=[" +
- intermediaries + "]");
- }
+ LinkedList<String> path = new LinkedList<>();
- /*
- * We have one or more space-separated intermediary realms.
- * Stack them. A null is always added between intermedies of
- * different targets. When this null is popped, it means none
- * of the intermedies for this target is useful (because of
- * infinite loop), the target is then removed from the partial
- * tempList, and the next possible intermediary is tried.
- */
- iStack.push(null);
- String[] ints = intermediaries.split("\\s+");
- for (int i = ints.length-1; i>=0; i--)
- {
- tempRealm = ints[i];
- if (tempRealm.equals(PrincipalName.REALM_COMPONENT_SEPARATOR_STR)) {
- break out;
- }
- if (!tempList.contains(tempRealm)) {
- iStack.push(tempRealm);
- if (DEBUG) {
- System.out.println(">>> Realm parseCapaths: loop " +
- count +
- ": pushed realm on to stack: " +
- tempRealm);
- }
- } else if (DEBUG) {
- System.out.println(">>> Realm parseCapaths: loop " +
- count +
- ": ignoring realm: [" +
- tempRealm + "]");
- }
- }
- } else {
- if (DEBUG) {
- System.out.println(">>> Realm parseCapaths: loop " +
- count +
- ": no intermediaries");
- }
+ String head = sRealm;
+ while (true) {
+ String value = cfg.getAll("capaths", cRealm, head);
+ if (value == null) {
break;
}
-
- /*
- * Get next intermediary realm from the stack
- */
-
- try {
- while ((tempTarget = iStack.pop()) == null) {
- tempList.removeElementAt(tempList.size()-1);
- if (DEBUG) {
- System.out.println(">>> Realm parseCapaths: backtrack, remove tail");
- }
+ String[] more = value.split("\\s+");
+ boolean changed = false;
+ for (int i=more.length-1; i>=0; i--) {
+ if (path.contains(more[i])
+ || more[i].equals(".")
+ || more[i].equals(cRealm)
+ || more[i].equals(sRealm)
+ || more[i].equals(head)) {
+ // Ignore invalid values
+ continue;
}
- } catch (EmptyStackException exc) {
- tempTarget = null;
- }
-
- if (tempTarget == null) {
- /*
- * No more intermediaries. We're done.
- */
- break;
+ changed = true;
+ path.addFirst(more[i]);
}
-
- tempList.add(tempTarget);
-
- if (DEBUG) {
- System.out.println(">>> Realm parseCapaths: loop " + count +
- ": added intermediary to list: " +
- tempTarget);
- }
-
- intermediaries = cfg.getAll("capaths", cRealm, tempTarget);
-
- } while (true);
-
- if (tempList.isEmpty()) {
- return null;
+ if (!changed) break;
+ head = path.getFirst();
}
-
- // From (SREALM, T1, T2) to (CREALM, T2, T1)
- retList = new String[tempList.size()];
- retList[0] = cRealm;
- for (int i=1; i<tempList.size(); i++) {
- retList[i] = tempList.elementAt(tempList.size()-i);
- }
-
- if (DEBUG && retList != null) {
- for (int i = 0; i < retList.length; i++) {
- System.out.println(">>> Realm parseCapaths [" + i +
- "]=" + retList[i]);
- }
- }
-
- return retList;
- }
+ path.addFirst(cRealm);
+ return path.toArray(new String[path.size()]);
+ }
/**
* Build a list of realm that can be traversed
* to obtain credentials from the initiating realm cRealm
* for a service in the target realm sRealm.
* @param cRealm the initiating realm
- * @param sRealm the target realm
- * @returns array of realms
- * @throws KrbException
+ * @param sRealm the target realm, not the same as cRealm
+ * @returns array of realms including cRealm as the first element
*/
- private static String[] parseHierarchy(String cRealm, String sRealm)
- throws KrbException
- {
- String[] retList = null;
-
- // Parse the components and determine common part, if any.
-
- String[] cComponents = null;
- String[] sComponents = null;
-
- StringTokenizer strTok =
- new StringTokenizer(cRealm,
- PrincipalName.REALM_COMPONENT_SEPARATOR_STR);
-
- // Parse cRealm
+ private static String[] parseHierarchy(String cRealm, String sRealm) {
- int cCount = strTok.countTokens();
- cComponents = new String[cCount];
-
- for (cCount = 0; strTok.hasMoreTokens(); cCount++) {
- cComponents[cCount] = strTok.nextToken();
- }
-
- if (DEBUG) {
- System.out.println(">>> Realm parseHierarchy: cRealm has " +
- cCount + " components:");
- int j = 0;
- while (j < cCount) {
- System.out.println(">>> Realm parseHierarchy: " +
- "cComponents["+j+"]=" + cComponents[j++]);
- }
- }
-
- // Parse sRealm
-
- strTok = new StringTokenizer(sRealm,
- PrincipalName.REALM_COMPONENT_SEPARATOR_STR);
+ String[] cComponents = cRealm.split("\\.");
+ String[] sComponents = sRealm.split("\\.");
- int sCount = strTok.countTokens();
- sComponents = new String[sCount];
-
- for (sCount = 0; strTok.hasMoreTokens(); sCount++) {
- sComponents[sCount] = strTok.nextToken();
- }
-
- if (DEBUG) {
- System.out.println(">>> Realm parseHierarchy: sRealm has " +
- sCount + " components:");
- int j = 0;
- while (j < sCount) {
- System.out.println(">>> Realm parseHierarchy: sComponents["+j+
- "]=" + sComponents[j++]);
- }
- }
-
- // Determine common components, if any.
-
- int commonComponents = 0;
+ int cPos = cComponents.length;
+ int sPos = sComponents.length;
- //while (sCount > 0 && cCount > 0 &&
- // sComponents[--sCount].equals(cComponents[--cCount]))
-
- for (sCount--, cCount--; sCount >=0 && cCount >= 0 &&
- sComponents[sCount].equals(cComponents[cCount]);
- sCount--, cCount--) {
- commonComponents++;
- }
-
- int cCommonStart = -1;
- int sCommonStart = -1;
-
- int links = 0;
-
- if (commonComponents > 0) {
- sCommonStart = sCount+1;
- cCommonStart = cCount+1;
-
- // components from common to ancestors
- links += sCommonStart;
- links += cCommonStart;
- } else {
- links++;
+ boolean hasCommon = false;
+ for (sPos--, cPos--; sPos >=0 && cPos >= 0 &&
+ sComponents[sPos].equals(cComponents[cPos]);
+ sPos--, cPos--) {
+ hasCommon = true;
}
- if (DEBUG) {
- if (commonComponents > 0) {
- System.out.println(">>> Realm parseHierarchy: " +
- commonComponents + " common component" +
- (commonComponents > 1 ? "s" : " "));
+ // For those with common components:
+ // length pos
+ // SITES1.SALES.EXAMPLE.COM 4 1
+ // EVERYWHERE.EXAMPLE.COM 3 0
- System.out.println(">>> Realm parseHierarchy: common part "
- +
- "in cRealm (starts at index " +
- cCommonStart + ")");
- System.out.println(">>> Realm parseHierarchy: common part in sRealm (starts at index " +
- sCommonStart + ")");
-
+ // For those without common components:
+ // length pos
+ // DEVEL.EXAMPLE.COM 3 2
+ // PROD.EXAMPLE.ORG 3 2
- String commonPart = substring(cRealm, cCommonStart);
- System.out.println(">>> Realm parseHierarchy: common part in cRealm=" +
- commonPart);
+ LinkedList<String> path = new LinkedList<>();
- commonPart = substring(sRealm, sCommonStart);
- System.out.println(">>> Realm parseHierarchy: common part in sRealm=" +
- commonPart);
-
- } else
- System.out.println(">>> Realm parseHierarchy: no common part");
+ // Un-common ones for client side
+ for (int i=0; i<=cPos; i++) {
+ path.addLast(subStringFrom(cComponents, i));
}
- if (DEBUG) {
- System.out.println(">>> Realm parseHierarchy: total links=" + links);
- }
-
- retList = new String[links];
-
- retList[0] = new String(cRealm);
-
- if (DEBUG) {
- System.out.println(">>> Realm parseHierarchy A: retList[0]=" +
- retList[0]);
+ // Common one
+ if (hasCommon) {
+ path.addLast(subStringFrom(cComponents, cPos+1));
}
- // For an initiator realm A.B.C.D.COM,
- // build a list krbtgt/B.C.D.COM@A.B.C.D.COM up to the common part,
- // ie the issuer realm is the immediate descendant
- // of the target realm.
-
- String cTemp = null, sTemp = null;
- int i;
- for (i = 1, cCount = 0; i < links && cCount < cCommonStart; cCount++) {
- sTemp = substring(cRealm, cCount+1);
- //cTemp = substring(cRealm, cCount);
- retList[i++] = new String(sTemp);
-
- if (DEBUG) {
- System.out.println(">>> Realm parseHierarchy B: retList[" +
- (i-1) +"]="+retList[i-1]);
- }
+ // Un-common ones for server side
+ for (int i=sPos; i>=0; i--) {
+ path.addLast(subStringFrom(sComponents, i));
}
+ // Remove sRealm from path. Note that it might be added at last loop
+ // or as a common component, if sRealm is a parent of cRealm
+ path.removeLast();
- for (sCount = sCommonStart; i < links && sCount - 1 > 0; sCount--) {
- sTemp = substring(sRealm, sCount-1);
- //cTemp = substring(sRealm, sCount);
- retList[i++] = new String(sTemp);
- if (DEBUG) {
- System.out.println(">>> Realm parseHierarchy D: retList[" +
- (i-1) +"]="+retList[i-1]);
- }
- }
-
- return retList;
+ return path.toArray(new String[path.size()]);
}
- private static String substring(String realm, int componentIndex)
- {
- int i = 0 , j = 0, len = realm.length();
-
- while(i < len && j != componentIndex) {
- if (realm.charAt(i++) != PrincipalName.REALM_COMPONENT_SEPARATOR)
- continue;
- j++;
+ /**
+ * Creates a realm name using components from the given postion.
+ * For example, subStringFrom({"A", "B", "C"}, 1) is "B.C".
+ */
+ private static String subStringFrom(String[] components, int from) {
+ StringBuilder sb = new StringBuilder();
+ for (int i=from; i<components.length; i++) {
+ if (sb.length() != 0) sb.append('.');
+ sb.append(components[i]);
}
-
- return realm.substring(i);
- }
-
- static int getRandIndex(int arraySize) {
- return (int)(Math.random() * 16384.0) % arraySize;
+ return sb.toString();
}
-
- static void printNames(String[] names) {
- if (names == null || names.length == 0)
- return;
-
- int len = names.length;
- int i = 0;
- System.out.println("List length = " + len);
- while (i < names.length) {
- System.out.println("["+ i +"]=" + names[i]);
- i++;
- }
- }
-
}
--- a/jdk/src/share/classes/sun/security/krb5/internal/CredentialsUtil.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/security/krb5/internal/CredentialsUtil.java Thu Oct 10 13:41:08 2013 -0700
@@ -160,7 +160,7 @@
/**
* Gets a TGT to another realm
* @param localRealm this realm
- * @param serviceRealm the other realm
+ * @param serviceRealm the other realm, cannot equals to localRealm
* @param ccreds TGT in this realm
* @param okAsDelegate an [out] argument to receive the okAsDelegate
* property. True only if all realms allow delegation.
@@ -174,14 +174,6 @@
// Get a list of realms to traverse
String[] realms = Realm.getRealmsList(localRealm, serviceRealm);
- if (realms == null || realms.length == 0) {
- if (DEBUG) {
- System.out.println(
- ">>> Credentials acquireServiceCreds: no realms list");
- }
- return null;
- }
-
int i = 0, k = 0;
Credentials cTgt = null, newTgt = null, theTgt = null;
PrincipalName tempService = null;
@@ -206,16 +198,14 @@
if (newTgt == null) {
if (DEBUG) {
System.out.println(">>> Credentials acquireServiceCreds: "
- + "no tgt; searching backwards");
+ + "no tgt; searching thru capath");
}
/*
- * No tgt found. Try to get one for a
- * realm as close to the target as possible.
- * That means traversing the realms list backwards.
+ * No tgt found. Let's go thru the realms list one by one.
*/
- for (newTgt = null, k = realms.length - 1;
- newTgt == null && k > i; k--) {
+ for (newTgt = null, k = i+1;
+ newTgt == null && k < realms.length; k++) {
tempService = PrincipalName.tgsService(realms[k], realms[i]);
if (DEBUG) {
System.out.println(
--- a/jdk/src/share/classes/sun/security/tools/jarsigner/Resources_ja.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/security/tools/jarsigner/Resources_ja.java Thu Oct 10 13:41:08 2013 -0700
@@ -57,49 +57,51 @@
{".jarsigner.verify.options.jar.file.alias.",
" jarsigner -verify [options] jar-file [alias...]"},
{".keystore.url.keystore.location",
- "[-keystore <url>] \u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u4F4D\u7F6E"},
+ "[-keystore <url>] \u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u4F4D\u7F6E"},
{".storepass.password.password.for.keystore.integrity",
- "[-storepass <password>] \u30AD\u30FC\u30B9\u30C8\u30A2\u6574\u5408\u6027\u306E\u305F\u3081\u306E\u30D1\u30B9\u30EF\u30FC\u30C9"},
+ "[-storepass <password>] \u30AD\u30FC\u30B9\u30C8\u30A2\u6574\u5408\u6027\u306E\u305F\u3081\u306E\u30D1\u30B9\u30EF\u30FC\u30C9"},
{".storetype.type.keystore.type",
- "[-storetype <type>] \u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u578B"},
+ "[-storetype <type>] \u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u578B"},
{".keypass.password.password.for.private.key.if.different.",
- "[-keypass <password>] \u79D8\u5BC6\u9375\u306E\u30D1\u30B9\u30EF\u30FC\u30C9(\u7570\u306A\u308B\u5834\u5408)"},
+ "[-keypass <password>] \u79D8\u5BC6\u9375\u306E\u30D1\u30B9\u30EF\u30FC\u30C9(\u7570\u306A\u308B\u5834\u5408)"},
{".certchain.file.name.of.alternative.certchain.file",
"[-certchain <file>] \u4EE3\u66FF\u8A3C\u660E\u66F8\u30C1\u30A7\u30FC\u30F3\u30FB\u30D5\u30A1\u30A4\u30EB\u306E\u540D\u524D"},
{".sigfile.file.name.of.SF.DSA.file",
- "[-sigfile <file>] .SF/.DSA\u30D5\u30A1\u30A4\u30EB\u306E\u540D\u524D"},
+ "[-sigfile <file>] .SF/.DSA\u30D5\u30A1\u30A4\u30EB\u306E\u540D\u524D"},
{".signedjar.file.name.of.signed.JAR.file",
- "[-signedjar <file>] \u7F72\u540D\u4ED8\u304DJAR\u30D5\u30A1\u30A4\u30EB\u306E\u540D\u524D"},
+ "[-signedjar <file>] \u7F72\u540D\u4ED8\u304DJAR\u30D5\u30A1\u30A4\u30EB\u306E\u540D\u524D"},
{".digestalg.algorithm.name.of.digest.algorithm",
- "[-digestalg <algorithm>] \u30C0\u30A4\u30B8\u30A7\u30B9\u30C8\u30FB\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u306E\u540D\u524D"},
+ "[-digestalg <algorithm>] \u30C0\u30A4\u30B8\u30A7\u30B9\u30C8\u30FB\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u306E\u540D\u524D"},
{".sigalg.algorithm.name.of.signature.algorithm",
- "[-sigalg <algorithm>] \u30B7\u30B0\u30CD\u30C1\u30E3\u30FB\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u306E\u540D\u524D"},
+ "[-sigalg <algorithm>] \u30B7\u30B0\u30CD\u30C1\u30E3\u30FB\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u306E\u540D\u524D"},
{".verify.verify.a.signed.JAR.file",
- "[-verify] \u7F72\u540D\u4ED8\u304DJAR\u30D5\u30A1\u30A4\u30EB\u306E\u691C\u8A3C"},
+ "[-verify] \u7F72\u540D\u4ED8\u304DJAR\u30D5\u30A1\u30A4\u30EB\u306E\u691C\u8A3C"},
{".verbose.suboptions.verbose.output.when.signing.verifying.",
"[-verbose[:suboptions]] \u7F72\u540D/\u691C\u8A3C\u6642\u306E\u8A73\u7D30\u51FA\u529B\u3002"},
{".suboptions.can.be.all.grouped.or.summary",
" \u30B5\u30D6\u30AA\u30D7\u30B7\u30E7\u30F3\u3068\u3057\u3066\u3001\u3059\u3079\u3066\u3001\u30B0\u30EB\u30FC\u30D7\u307E\u305F\u306F\u30B5\u30DE\u30EA\u30FC\u3092\u4F7F\u7528\u3067\u304D\u307E\u3059"},
{".certs.display.certificates.when.verbose.and.verifying",
- "[-certs] \u8A73\u7D30\u51FA\u529B\u304A\u3088\u3073\u691C\u8A3C\u6642\u306B\u8A3C\u660E\u66F8\u3092\u8868\u793A"},
+ "[-certs] \u8A73\u7D30\u51FA\u529B\u304A\u3088\u3073\u691C\u8A3C\u6642\u306B\u8A3C\u660E\u66F8\u3092\u8868\u793A"},
{".tsa.url.location.of.the.Timestamping.Authority",
- "[-tsa <url>] \u30BF\u30A4\u30E0\u30B9\u30BF\u30F3\u30D7\u5C40\u306E\u5834\u6240"},
+ "[-tsa <url>] \u30BF\u30A4\u30E0\u30B9\u30BF\u30F3\u30D7\u5C40\u306E\u5834\u6240"},
{".tsacert.alias.public.key.certificate.for.Timestamping.Authority",
- "[-tsacert <alias>] \u30BF\u30A4\u30E0\u30B9\u30BF\u30F3\u30D7\u5C40\u306E\u516C\u958B\u9375\u8A3C\u660E\u66F8"},
+ "[-tsacert <alias>] \u30BF\u30A4\u30E0\u30B9\u30BF\u30F3\u30D7\u5C40\u306E\u516C\u958B\u9375\u8A3C\u660E\u66F8"},
+ {".tsapolicyid.tsapolicyid.for.Timestamping.Authority",
+ "[-tsapolicyid <oid>] \u30BF\u30A4\u30E0\u30B9\u30BF\u30F3\u30D7\u5C40\u306ETSAPolicyID"},
{".altsigner.class.class.name.of.an.alternative.signing.mechanism",
- "[-altsigner <class>] \u4EE3\u66FF\u7F72\u540D\u30E1\u30AB\u30CB\u30BA\u30E0\u306E\u30AF\u30E9\u30B9\u540D"},
+ "[-altsigner <class>] \u4EE3\u66FF\u7F72\u540D\u30E1\u30AB\u30CB\u30BA\u30E0\u306E\u30AF\u30E9\u30B9\u540D"},
{".altsignerpath.pathlist.location.of.an.alternative.signing.mechanism",
- "[-altsignerpath <pathlist>]\u4EE3\u66FF\u7F72\u540D\u30E1\u30AB\u30CB\u30BA\u30E0\u306E\u4F4D\u7F6E"},
+ "[-altsignerpath <pathlist>] \u4EE3\u66FF\u7F72\u540D\u30E1\u30AB\u30CB\u30BA\u30E0\u306E\u5834\u6240"},
{".internalsf.include.the.SF.file.inside.the.signature.block",
- "[-internalsf] \u30B7\u30B0\u30CD\u30C1\u30E3\u30FB\u30D6\u30ED\u30C3\u30AF\u306B.SF\u30D5\u30A1\u30A4\u30EB\u3092\u542B\u3081\u308B"},
+ "[-internalsf] \u30B7\u30B0\u30CD\u30C1\u30E3\u30FB\u30D6\u30ED\u30C3\u30AF\u306B.SF\u30D5\u30A1\u30A4\u30EB\u3092\u542B\u3081\u308B"},
{".sectionsonly.don.t.compute.hash.of.entire.manifest",
- "[-sectionsonly] \u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u5168\u4F53\u306E\u30CF\u30C3\u30B7\u30E5\u306F\u8A08\u7B97\u3057\u306A\u3044"},
+ "[-sectionsonly] \u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u5168\u4F53\u306E\u30CF\u30C3\u30B7\u30E5\u306F\u8A08\u7B97\u3057\u306A\u3044"},
{".protected.keystore.has.protected.authentication.path",
- "[-protected] \u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u306F\u4FDD\u8B77\u3055\u308C\u305F\u8A8D\u8A3C\u30D1\u30B9\u304C\u3042\u308B"},
+ "[-protected] \u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u306F\u4FDD\u8B77\u3055\u308C\u305F\u8A8D\u8A3C\u30D1\u30B9\u304C\u3042\u308B"},
{".providerName.name.provider.name",
- "[-providerName <name>] \u30D7\u30ED\u30D0\u30A4\u30C0\u540D"},
+ "[-providerName <name>] \u30D7\u30ED\u30D0\u30A4\u30C0\u540D"},
{".providerClass.class.name.of.cryptographic.service.provider.s",
- "[-providerClass <class> \u6697\u53F7\u5316\u30B5\u30FC\u30D3\u30B9\u30FB\u30D7\u30ED\u30D0\u30A4\u30C0\u306E\u540D\u524D"},
+ "[-providerClass <class> \u6697\u53F7\u5316\u30B5\u30FC\u30D3\u30B9\u30FB\u30D7\u30ED\u30D0\u30A4\u30C0\u306E\u540D\u524D"},
{".providerArg.arg.master.class.file.and.constructor.argument",
" [-providerArg <arg>]] ... \u30DE\u30B9\u30BF\u30FC\u30FB\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u3068\u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30BF\u306E\u5F15\u6570"},
{".strict.treat.warnings.as.errors",
--- a/jdk/src/share/classes/sun/security/tools/jarsigner/Resources_zh_CN.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/security/tools/jarsigner/Resources_zh_CN.java Thu Oct 10 13:41:08 2013 -0700
@@ -71,9 +71,9 @@
{".signedjar.file.name.of.signed.JAR.file",
"[-signedjar <\u6587\u4EF6>] \u5DF2\u7B7E\u540D\u7684 JAR \u6587\u4EF6\u7684\u540D\u79F0"},
{".digestalg.algorithm.name.of.digest.algorithm",
- "[-digestalg <\u7B97\u6CD5>] \u6458\u8981\u7B97\u6CD5\u7684\u540D\u79F0"},
+ "[-digestalg <\u7B97\u6CD5>] \u6458\u8981\u7B97\u6CD5\u7684\u540D\u79F0"},
{".sigalg.algorithm.name.of.signature.algorithm",
- "[-sigalg <\u7B97\u6CD5>] \u7B7E\u540D\u7B97\u6CD5\u7684\u540D\u79F0"},
+ "[-sigalg <\u7B97\u6CD5>] \u7B7E\u540D\u7B97\u6CD5\u7684\u540D\u79F0"},
{".verify.verify.a.signed.JAR.file",
"[-verify] \u9A8C\u8BC1\u5DF2\u7B7E\u540D\u7684 JAR \u6587\u4EF6"},
{".verbose.suboptions.verbose.output.when.signing.verifying.",
@@ -86,6 +86,8 @@
"[-tsa <url>] \u65F6\u95F4\u6233\u9881\u53D1\u673A\u6784\u7684\u4F4D\u7F6E"},
{".tsacert.alias.public.key.certificate.for.Timestamping.Authority",
"[-tsacert <\u522B\u540D>] \u65F6\u95F4\u6233\u9881\u53D1\u673A\u6784\u7684\u516C\u5171\u5BC6\u94A5\u8BC1\u4E66"},
+ {".tsapolicyid.tsapolicyid.for.Timestamping.Authority",
+ "[-tsapolicyid <oid>] \u65F6\u95F4\u6233\u9881\u53D1\u673A\u6784\u7684 TSAPolicyID"},
{".altsigner.class.class.name.of.an.alternative.signing.mechanism",
"[-altsigner <\u7C7B>] \u66FF\u4EE3\u7684\u7B7E\u540D\u673A\u5236\u7684\u7C7B\u540D"},
{".altsignerpath.pathlist.location.of.an.alternative.signing.mechanism",
@@ -132,7 +134,7 @@
{".Signature.related.entries.","(\u4E0E\u7B7E\u540D\u76F8\u5173\u7684\u6761\u76EE)"},
{".Unsigned.entries.", "(\u672A\u7B7E\u540D\u6761\u76EE)"},
{"jar.is.unsigned.signatures.missing.or.not.parsable.",
- "jar \u672A\u7B7E\u540D\u3002(\u7F3A\u5C11\u7B7E\u540D\u6216\u65E0\u6CD5\u5BF9\u7B7E\u540D\u8FDB\u884C\u8BED\u6CD5\u5206\u6790)"},
+ "jar \u672A\u7B7E\u540D\u3002(\u7F3A\u5C11\u7B7E\u540D\u6216\u65E0\u6CD5\u89E3\u6790\u7B7E\u540D)"},
{"jar.verified.", "jar \u5DF2\u9A8C\u8BC1\u3002"},
{"jarsigner.", "jarsigner: "},
{"signature.filename.must.consist.of.the.following.characters.A.Z.0.9.or.",
--- a/jdk/src/share/classes/sun/security/tools/keytool/Resources_de.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/security/tools/keytool/Resources_de.java Thu Oct 10 13:41:08 2013 -0700
@@ -40,8 +40,7 @@
"*******************************************\n\n"},
// keytool: Help part
-// "Option" should be translated.
- {".OPTION.", " [Option]..."},
+ {".OPTION.", " [OPTION]..."},
{"Options.", "Optionen:"},
{"Use.keytool.help.for.all.available.commands",
"\"keytool -help\" f\u00FCr alle verf\u00FCgbaren Befehle verwenden"},
@@ -61,7 +60,6 @@
"Exportiert ein Zertifikat"}, //-exportcert
{"Generates.a.key.pair",
"Generiert ein Schl\u00FCsselpaar"}, //-genkeypair
-// translation of "secret" key should be different to "private" key.
{"Generates.a.secret.key",
"Generiert einen Secret Key"}, //-genseckey
{"Generates.certificate.from.a.certificate.request",
@@ -244,8 +242,10 @@
{"Certification.request.stored.in.file.filename.",
"Zertifizierungsanforderung in Datei <{0}> gespeichert"},
{"Submit.this.to.your.CA", "Leiten Sie dies an die CA weiter"},
- {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified",
- "Wenn kein Alias angegeben ist, d\u00FCrfen destalias, srckeypass und destkeypass nicht angegeben werden"},
+ {"if.alias.not.specified.destalias.and.srckeypass.must.not.be.specified",
+ "Wenn kein Alias angegeben ist, d\u00FCrfen destalias und srckeypass nicht angegeben werden"},
+ {"The.destination.pkcs12.keystore.has.different.storepass.and.keypass.Please.retry.with.destkeypass.specified.",
+ "Der Ziel-Keystore pkcs12 hat unterschiedliche Kennw\u00F6rter f\u00FCr storepass und keypass. Wiederholen Sie den Vorgang, indem Sie -destkeypass angeben."},
{"Certificate.stored.in.file.filename.",
"Zertifikat in Datei <{0}> gespeichert"},
{"Certificate.reply.was.installed.in.keystore",
@@ -324,7 +324,7 @@
{"Do.you.still.want.to.add.it.to.your.own.keystore.no.",
"M\u00F6chten Sie es trotzdem zu Ihrem eigenen Keystore hinzuf\u00FCgen? [Nein]: "},
{"Trust.this.certificate.no.", "Diesem Zertifikat vertrauen? [Nein]: "},
- {"YES", "Ja"},
+ {"YES", "JA"},
{"New.prompt.", "Neues {0}: "},
{"Passwords.must.differ", "Kennw\u00F6rter m\u00FCssen sich unterscheiden"},
{"Re.enter.new.prompt.", "Neues {0} erneut eingeben: "},
@@ -361,7 +361,7 @@
"Alias <{0}> verweist auf einen Eintragstyp, der kein Private Key-Eintrag ist. Der Befehl -keyclone unterst\u00FCtzt nur das Clonen von Private Key-Eintr\u00E4gen"},
{".WARNING.WARNING.WARNING.",
- "***************** Warnung Warnung Warnung *****************"},
+ "***************** WARNING WARNING WARNING *****************"},
{"Signer.d.", "Signaturgeber #%d:"},
{"Timestamp.", "Zeitstempel:"},
{"Signature.", "Signatur:"},
@@ -386,7 +386,7 @@
"Zertifikat der obersten Ebene in Antwort:\n"},
{".is.not.trusted.", "... ist nicht vertrauensw\u00FCrdig. "},
{"Install.reply.anyway.no.", "Antwort trotzdem installieren? [Nein]: "},
- {"NO", "Nein"},
+ {"NO", "NEIN"},
{"Public.keys.in.reply.and.keystore.don.t.match",
"Public Keys in Antwort und Keystore stimmen nicht \u00FCberein"},
{"Certificate.reply.and.certificate.in.keystore.are.identical",
@@ -400,6 +400,10 @@
{"Please.provide.keysize.for.secret.key.generation",
"Geben Sie -keysize zum Erstellen eines Secret Keys an"},
+ {"verified.by.s.in.s", "Gepr\u00FCft von %s in %s"},
+ {"warning.not.verified.make.sure.keystore.is.correct",
+ "WARNUNG: Nicht gepr\u00FCft. Stellen Sie sicher, dass -keystore korrekt ist."},
+
{"Extensions.", "Erweiterungen: "},
{".Empty.value.", "(Leerer Wert)"},
{"Extension.Request.", "Erweiterungsanforderung:"},
--- a/jdk/src/share/classes/sun/security/tools/keytool/Resources_es.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/security/tools/keytool/Resources_es.java Thu Oct 10 13:41:08 2013 -0700
@@ -40,8 +40,7 @@
"*******************************************\n\n"},
// keytool: Help part
-// "Option" should be translated.
- {".OPTION.", " [Opci\u00F3n]..."},
+ {".OPTION.", " [OPTION]..."},
{"Options.", "Opciones:"},
{"Use.keytool.help.for.all.available.commands",
"Utilice\"keytool -help\" para todos los comandos disponibles"},
@@ -61,7 +60,6 @@
"Exporta el certificado"}, //-exportcert
{"Generates.a.key.pair",
"Genera un par de claves"}, //-genkeypair
-// translation of "secret" key should be different to "private" key.
{"Generates.a.secret.key",
"Genera un clave secreta"}, //-genseckey
{"Generates.certificate.from.a.certificate.request",
@@ -244,8 +242,10 @@
{"Certification.request.stored.in.file.filename.",
"Solicitud de certificaci\u00F3n almacenada en el archivo <{0}>"},
{"Submit.this.to.your.CA", "Enviar a la CA"},
- {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified",
- "si no se especifica el alias, no se puede especificar destalias, srckeypass ni destkeypass"},
+ {"if.alias.not.specified.destalias.and.srckeypass.must.not.be.specified",
+ "si no se especifica el alias, no se debe especificar destalias ni srckeypass"},
+ {"The.destination.pkcs12.keystore.has.different.storepass.and.keypass.Please.retry.with.destkeypass.specified.",
+ "El almac\u00E9n de claves pkcs12 de destino tiene storepass y keypass diferentes. Vuelva a intentarlo con -destkeypass especificado."},
{"Certificate.stored.in.file.filename.",
"Certificado almacenado en el archivo <{0}>"},
{"Certificate.reply.was.installed.in.keystore",
@@ -324,7 +324,7 @@
{"Do.you.still.want.to.add.it.to.your.own.keystore.no.",
"\u00BFA\u00FAn desea agregarlo a su propio almac\u00E9n de claves? [no]: "},
{"Trust.this.certificate.no.", "\u00BFConfiar en este certificado? [no]: "},
- {"YES", "S\u00ED"},
+ {"YES", "S\u00CD"},
{"New.prompt.", "Nuevo {0}: "},
{"Passwords.must.differ", "Las contrase\u00F1as deben ser distintas"},
{"Re.enter.new.prompt.", "Vuelva a escribir el nuevo {0}: "},
@@ -361,7 +361,7 @@
"El alias <{0}> hace referencia a un tipo de entrada que no es una clave privada. El comando -keyclone s\u00F3lo permite la clonaci\u00F3n de entradas de claves privadas"},
{".WARNING.WARNING.WARNING.",
- "***************** Advertencia Advertencia Advertencia *****************"},
+ "***************** WARNING WARNING WARNING *****************"},
{"Signer.d.", "#%d de Firmante:"},
{"Timestamp.", "Registro de Hora:"},
{"Signature.", "Firma:"},
@@ -386,7 +386,7 @@
"Certificado de nivel superior en la respuesta:\n"},
{".is.not.trusted.", "... no es de confianza. "},
{"Install.reply.anyway.no.", "\u00BFInstalar respuesta de todos modos? [no]: "},
- {"NO", "No"},
+ {"NO", "NO"},
{"Public.keys.in.reply.and.keystore.don.t.match",
"Las claves p\u00FAblicas en la respuesta y en el almac\u00E9n de claves no coinciden"},
{"Certificate.reply.and.certificate.in.keystore.are.identical",
@@ -400,6 +400,10 @@
{"Please.provide.keysize.for.secret.key.generation",
"Proporcione el valor de -keysize para la generaci\u00F3n de claves secretas"},
+ {"verified.by.s.in.s", "Verificado por %s en %s"},
+ {"warning.not.verified.make.sure.keystore.is.correct",
+ "ADVERTENCIA: no se ha verificado. Aseg\u00FArese de que el valor de -keystore es correcto."},
+
{"Extensions.", "Extensiones: "},
{".Empty.value.", "(Valor vac\u00EDo)"},
{"Extension.Request.", "Solicitud de Extensi\u00F3n:"},
--- a/jdk/src/share/classes/sun/security/tools/keytool/Resources_fr.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/security/tools/keytool/Resources_fr.java Thu Oct 10 13:41:08 2013 -0700
@@ -40,8 +40,7 @@
"*******************************************\n\n"},
// keytool: Help part
-// "Option" should be translated.
- {".OPTION.", " [Option]..."},
+ {".OPTION.", " [OPTION]..."},
{"Options.", "Options :"},
{"Use.keytool.help.for.all.available.commands",
"Utiliser \"keytool -help\" pour toutes les commandes disponibles"},
@@ -61,7 +60,6 @@
"Exporte le certificat"}, //-exportcert
{"Generates.a.key.pair",
"G\u00E9n\u00E8re une paire de cl\u00E9s"}, //-genkeypair
-// translation of "secret" key should be different to "private" key.
{"Generates.a.secret.key",
"G\u00E9n\u00E8re une cl\u00E9 secr\u00E8te"}, //-genseckey
{"Generates.certificate.from.a.certificate.request",
@@ -244,8 +242,10 @@
{"Certification.request.stored.in.file.filename.",
"Demande de certification stock\u00E9e dans le fichier <{0}>"},
{"Submit.this.to.your.CA", "Soumettre \u00E0 votre CA"},
- {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified",
- "si l'alias n'est pas sp\u00E9cifi\u00E9, destalias, srckeypass et destkeypass ne doivent pas \u00EAtre sp\u00E9cifi\u00E9s"},
+ {"if.alias.not.specified.destalias.and.srckeypass.must.not.be.specified",
+ "si l'alias n'est pas sp\u00E9cifi\u00E9, destalias et srckeypass ne doivent pas \u00EAtre sp\u00E9cifi\u00E9s"},
+ {"The.destination.pkcs12.keystore.has.different.storepass.and.keypass.Please.retry.with.destkeypass.specified.",
+ "Le fichier de cl\u00E9s pkcs12 de destination contient un mot de passe de fichier de cl\u00E9s et un mot de passe de cl\u00E9 diff\u00E9rents. R\u00E9essayez en sp\u00E9cifiant -destkeypass."},
{"Certificate.stored.in.file.filename.",
"Certificat stock\u00E9 dans le fichier <{0}>"},
{"Certificate.reply.was.installed.in.keystore",
@@ -324,7 +324,7 @@
{"Do.you.still.want.to.add.it.to.your.own.keystore.no.",
"Voulez-vous toujours l'ajouter \u00E0 votre fichier de cl\u00E9s ? [non] : "},
{"Trust.this.certificate.no.", "Faire confiance \u00E0 ce certificat ? [non] : "},
- {"YES", "Oui"},
+ {"YES", "OUI"},
{"New.prompt.", "Nouveau {0} : "},
{"Passwords.must.differ", "Les mots de passe doivent diff\u00E9rer"},
{"Re.enter.new.prompt.", "Indiquez encore le nouveau {0} : "},
@@ -361,7 +361,7 @@
"L''entr\u00E9e \u00E0 laquelle l''alias <{0}> fait r\u00E9f\u00E9rence n''est pas une entr\u00E9e de type cl\u00E9 priv\u00E9e. La commande -keyclone prend uniquement en charge le clonage des cl\u00E9s priv\u00E9es"},
{".WARNING.WARNING.WARNING.",
- "***************** Avertissement Avertissement Avertissement *****************"},
+ "***************** WARNING WARNING WARNING *****************"},
{"Signer.d.", "Signataire n\u00B0%d :"},
{"Timestamp.", "Horodatage :"},
{"Signature.", "Signature :"},
@@ -386,7 +386,7 @@
"Certificat de niveau sup\u00E9rieur dans la r\u00E9ponse :\n"},
{".is.not.trusted.", "... non s\u00E9curis\u00E9. "},
{"Install.reply.anyway.no.", "Installer la r\u00E9ponse quand m\u00EAme ? [non] : "},
- {"NO", "Non"},
+ {"NO", "NON"},
{"Public.keys.in.reply.and.keystore.don.t.match",
"Les cl\u00E9s publiques de la r\u00E9ponse et du fichier de cl\u00E9s ne concordent pas"},
{"Certificate.reply.and.certificate.in.keystore.are.identical",
@@ -400,6 +400,10 @@
{"Please.provide.keysize.for.secret.key.generation",
"Indiquez -keysize pour la g\u00E9n\u00E9ration de la cl\u00E9 secr\u00E8te"},
+ {"verified.by.s.in.s", "V\u00E9rifi\u00E9 par %s dans %s"},
+ {"warning.not.verified.make.sure.keystore.is.correct",
+ "AVERTISSEMENT : non v\u00E9rifi\u00E9. Assurez-vous que -keystore est correct."},
+
{"Extensions.", "Extensions\u00A0: "},
{".Empty.value.", "(Valeur vide)"},
{"Extension.Request.", "Demande d'extension :"},
--- a/jdk/src/share/classes/sun/security/tools/keytool/Resources_it.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/security/tools/keytool/Resources_it.java Thu Oct 10 13:41:08 2013 -0700
@@ -40,8 +40,7 @@
"*******************************************\n\n"},
// keytool: Help part
-// "Option" should be translated.
- {".OPTION.", " [Opzione]..."},
+ {".OPTION.", " [OPTION]..."},
{"Options.", "Opzioni:"},
{"Use.keytool.help.for.all.available.commands",
"Utilizzare \"keytool -help\" per visualizzare tutti i comandi disponibili"},
@@ -61,7 +60,6 @@
"Esporta il certificato"}, //-exportcert
{"Generates.a.key.pair",
"Genera una coppia di chiavi"}, //-genkeypair
-// translation of "secret" key should be different to "private" key.
{"Generates.a.secret.key",
"Genera una chiave segreta"}, //-genseckey
{"Generates.certificate.from.a.certificate.request",
@@ -244,8 +242,10 @@
{"Certification.request.stored.in.file.filename.",
"La richiesta di certificazione \u00E8 memorizzata nel file <{0}>"},
{"Submit.this.to.your.CA", "Sottomettere alla propria CA"},
- {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified",
- "Se l'alias non \u00E8 specificato, destalias, srckeypass e destkeypass non dovranno essere specificati"},
+ {"if.alias.not.specified.destalias.and.srckeypass.must.not.be.specified",
+ "Se l'alias non \u00E8 specificato, destalias e srckeypass non dovranno essere specificati"},
+ {"The.destination.pkcs12.keystore.has.different.storepass.and.keypass.Please.retry.with.destkeypass.specified.",
+ "Keystore pkcs12 di destinazione con storepass e keypass differenti. Riprovare con -destkeypass specificato."},
{"Certificate.stored.in.file.filename.",
"Il certificato \u00E8 memorizzato nel file <{0}>"},
{"Certificate.reply.was.installed.in.keystore",
@@ -361,7 +361,7 @@
"L''alias <{0}> fa riferimento a un tipo di voce che non \u00E8 una voce di chiave privata. Il comando -keyclone supporta solo la copia delle voci di chiave private."},
{".WARNING.WARNING.WARNING.",
- "***************** Avvertenza Avvertenza Avvertenza *****************"},
+ "***************** WARNING WARNING WARNING *****************"},
{"Signer.d.", "Firmatario #%d:"},
{"Timestamp.", "Indicatore orario:"},
{"Signature.", "Firma:"},
@@ -386,7 +386,7 @@
"Certificato di primo livello nella risposta:\n"},
{".is.not.trusted.", "...non \u00E8 considerato sicuro. "},
{"Install.reply.anyway.no.", "Installare la risposta? [no]: "},
- {"NO", "No"},
+ {"NO", "NO"},
{"Public.keys.in.reply.and.keystore.don.t.match",
"Le chiavi pubbliche nella risposta e nel keystore non corrispondono"},
{"Certificate.reply.and.certificate.in.keystore.are.identical",
@@ -400,6 +400,10 @@
{"Please.provide.keysize.for.secret.key.generation",
"Specificare il valore -keysize per la generazione della chiave segreta"},
+ {"verified.by.s.in.s", "Verificato da %s in %s"},
+ {"warning.not.verified.make.sure.keystore.is.correct",
+ "AVVERTENZA: non verificato. Assicurarsi che -keystore sia corretto."},
+
{"Extensions.", "Estensioni: "},
{".Empty.value.", "(valore vuoto)"},
{"Extension.Request.", "Richiesta di estensione:"},
--- a/jdk/src/share/classes/sun/security/tools/keytool/Resources_ja.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/security/tools/keytool/Resources_ja.java Thu Oct 10 13:41:08 2013 -0700
@@ -40,8 +40,7 @@
"*******************************************\n\n"},
// keytool: Help part
-// "Option" should be translated.
- {".OPTION.", " [\u30AA\u30D7\u30B7\u30E7\u30F3]..."},
+ {".OPTION.", " [OPTION]..."},
{"Options.", "\u30AA\u30D7\u30B7\u30E7\u30F3:"},
{"Use.keytool.help.for.all.available.commands",
"\u4F7F\u7528\u53EF\u80FD\u306A\u3059\u3079\u3066\u306E\u30B3\u30DE\u30F3\u30C9\u306B\u3064\u3044\u3066\u306F\"keytool -help\"\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044"},
@@ -61,7 +60,6 @@
"\u8A3C\u660E\u66F8\u3092\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u3057\u307E\u3059"}, //-exportcert
{"Generates.a.key.pair",
"\u9375\u30DA\u30A2\u3092\u751F\u6210\u3057\u307E\u3059"}, //-genkeypair
-// translation of "secret" key should be different to "private" key.
{"Generates.a.secret.key",
"\u79D8\u5BC6\u9375\u3092\u751F\u6210\u3057\u307E\u3059"}, //-genseckey
{"Generates.certificate.from.a.certificate.request",
@@ -244,8 +242,10 @@
{"Certification.request.stored.in.file.filename.",
"\u8A3C\u660E\u66F8\u30EA\u30AF\u30A8\u30B9\u30C8\u304C\u30D5\u30A1\u30A4\u30EB<{0}>\u306B\u4FDD\u5B58\u3055\u308C\u307E\u3057\u305F"},
{"Submit.this.to.your.CA", "\u3053\u308C\u3092CA\u306B\u63D0\u51FA\u3057\u3066\u304F\u3060\u3055\u3044"},
- {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified",
- "\u5225\u540D\u3092\u6307\u5B9A\u3057\u306A\u3044\u5834\u5408\u3001\u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u5225\u540D\u3001\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u304A\u3088\u3073\u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093"},
+ {"if.alias.not.specified.destalias.and.srckeypass.must.not.be.specified",
+ "\u5225\u540D\u3092\u6307\u5B9A\u3057\u306A\u3044\u5834\u5408\u3001\u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u5225\u540D\u304A\u3088\u3073\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093"},
+ {"The.destination.pkcs12.keystore.has.different.storepass.and.keypass.Please.retry.with.destkeypass.specified.",
+ "\u51FA\u529B\u5148pkcs12\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u3001\u7570\u306A\u308Bstorepass\u304A\u3088\u3073keypass\u304C\u3042\u308A\u307E\u3059\u3002-destkeypass\u3092\u6307\u5B9A\u3057\u3066\u518D\u8A66\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002"},
{"Certificate.stored.in.file.filename.",
"\u8A3C\u660E\u66F8\u304C\u30D5\u30A1\u30A4\u30EB<{0}>\u306B\u4FDD\u5B58\u3055\u308C\u307E\u3057\u305F"},
{"Certificate.reply.was.installed.in.keystore",
@@ -361,7 +361,7 @@
"\u5225\u540D<{0}>\u304C\u53C2\u7167\u3057\u3066\u3044\u308B\u30A8\u30F3\u30C8\u30EA\u30FB\u30BF\u30A4\u30D7\u306F\u79D8\u5BC6\u9375\u30A8\u30F3\u30C8\u30EA\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002-keyclone\u30B3\u30DE\u30F3\u30C9\u306F\u79D8\u5BC6\u9375\u30A8\u30F3\u30C8\u30EA\u306E\u30AF\u30ED\u30FC\u30F3\u4F5C\u6210\u306E\u307F\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u307E\u3059"},
{".WARNING.WARNING.WARNING.",
- "*****************\u8B66\u544A \u8B66\u544A \u8B66\u544A*****************"},
+ "***************** WARNING WARNING WARNING *****************"},
{"Signer.d.", "\u7F72\u540D\u8005\u756A\u53F7%d:"},
{"Timestamp.", "\u30BF\u30A4\u30E0\u30B9\u30BF\u30F3\u30D7:"},
{"Signature.", "\u7F72\u540D:"},
@@ -400,6 +400,10 @@
{"Please.provide.keysize.for.secret.key.generation",
"\u79D8\u5BC6\u9375\u306E\u751F\u6210\u6642\u306B\u306F -keysize\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044"},
+ {"verified.by.s.in.s", "%s(%s\u5185)\u306B\u3088\u308A\u691C\u8A3C\u3055\u308C\u307E\u3057\u305F"},
+ {"warning.not.verified.make.sure.keystore.is.correct",
+ "\u8B66\u544A: \u691C\u8A3C\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002-keystore\u304C\u6B63\u3057\u3044\u3053\u3068\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002"},
+
{"Extensions.", "\u62E1\u5F35: "},
{".Empty.value.", "(\u7A7A\u306E\u5024)"},
{"Extension.Request.", "\u62E1\u5F35\u30EA\u30AF\u30A8\u30B9\u30C8:"},
--- a/jdk/src/share/classes/sun/security/tools/keytool/Resources_ko.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/security/tools/keytool/Resources_ko.java Thu Oct 10 13:41:08 2013 -0700
@@ -40,8 +40,7 @@
"*******************************************\n\n"},
// keytool: Help part
-// "Option" should be translated.
- {".OPTION.", " [\uC635\uC158]..."},
+ {".OPTION.", " [OPTION]..."},
{"Options.", "\uC635\uC158:"},
{"Use.keytool.help.for.all.available.commands",
"\uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uBAA8\uB4E0 \uBA85\uB839\uC5D0 \"keytool -help\" \uC0AC\uC6A9"},
@@ -61,7 +60,6 @@
"\uC778\uC99D\uC11C\uB97C \uC775\uC2A4\uD3EC\uD2B8\uD569\uB2C8\uB2E4."}, //-exportcert
{"Generates.a.key.pair",
"\uD0A4 \uC30D\uC744 \uC0DD\uC131\uD569\uB2C8\uB2E4."}, //-genkeypair
-// translation of "secret" key should be different to "private" key.
{"Generates.a.secret.key",
"\uBCF4\uC548 \uD0A4\uB97C \uC0DD\uC131\uD569\uB2C8\uB2E4."}, //-genseckey
{"Generates.certificate.from.a.certificate.request",
@@ -174,7 +172,7 @@
"\uCCA0\uD68C\uD560 \uC778\uC99D\uC11C\uC758 \uC77C\uB828 ID"}, //-id
// keytool: Running part
{"keytool.error.", "keytool \uC624\uB958: "},
- {"Illegal.option.", "\uC798\uBABB\uB41C \uC635\uC158: "},
+ {"Illegal.option.", "\uC798\uBABB\uB41C \uC635\uC158: "},
{"Illegal.value.", "\uC798\uBABB\uB41C \uAC12: "},
{"Unknown.password.type.", "\uC54C \uC218 \uC5C6\uB294 \uBE44\uBC00\uBC88\uD638 \uC720\uD615: "},
{"Cannot.find.environment.variable.",
@@ -244,8 +242,10 @@
{"Certification.request.stored.in.file.filename.",
"\uC778\uC99D \uC694\uCCAD\uC774 <{0}> \uD30C\uC77C\uC5D0 \uC800\uC7A5\uB418\uC5C8\uC2B5\uB2C8\uB2E4."},
{"Submit.this.to.your.CA", "CA\uC5D0\uAC8C \uC81C\uCD9C\uD558\uC2ED\uC2DC\uC624."},
- {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified",
- "\uBCC4\uCE6D\uC744 \uC9C0\uC815\uD558\uC9C0 \uC54A\uC740 \uACBD\uC6B0 destalias, srckeypass \uBC0F destkeypass\uB97C \uC9C0\uC815\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4."},
+ {"if.alias.not.specified.destalias.and.srckeypass.must.not.be.specified",
+ "\uBCC4\uCE6D\uC744 \uC9C0\uC815\uD558\uC9C0 \uC54A\uC740 \uACBD\uC6B0 destalias \uBC0F srckeypass\uB97C \uC9C0\uC815\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4."},
+ {"The.destination.pkcs12.keystore.has.different.storepass.and.keypass.Please.retry.with.destkeypass.specified.",
+ "\uB300\uC0C1 pkcs12 \uD0A4 \uC800\uC7A5\uC18C\uC5D0 \uB2E4\uB978 storepass \uBC0F keypass\uAC00 \uC788\uC2B5\uB2C8\uB2E4. \uC9C0\uC815\uB41C -destkeypass\uB85C \uC7AC\uC2DC\uB3C4\uD558\uC2ED\uC2DC\uC624."},
{"Certificate.stored.in.file.filename.",
"\uC778\uC99D\uC11C\uAC00 <{0}> \uD30C\uC77C\uC5D0 \uC800\uC7A5\uB418\uC5C8\uC2B5\uB2C8\uB2E4."},
{"Certificate.reply.was.installed.in.keystore",
@@ -361,7 +361,7 @@
"<{0}> \uBCC4\uCE6D\uC740 \uC804\uC6A9 \uD0A4 \uD56D\uBAA9\uC774 \uC544\uB2CC \uD56D\uBAA9 \uC720\uD615\uC744 \uCC38\uC870\uD569\uB2C8\uB2E4. -keyclone \uBA85\uB839\uC740 \uC804\uC6A9 \uD0A4 \uD56D\uBAA9\uC758 \uBCF5\uC81C\uB9CC \uC9C0\uC6D0\uD569\uB2C8\uB2E4."},
{".WARNING.WARNING.WARNING.",
- "***************** \uACBD\uACE0 \uACBD\uACE0 \uACBD\uACE0 *****************"},
+ "***************** WARNING WARNING WARNING *****************"},
{"Signer.d.", "\uC11C\uBA85\uC790 #%d:"},
{"Timestamp.", "\uC2DC\uAC04 \uAE30\uB85D:"},
{"Signature.", "\uC11C\uBA85:"},
@@ -400,6 +400,10 @@
{"Please.provide.keysize.for.secret.key.generation",
"\uBCF4\uC548 \uD0A4\uB97C \uC0DD\uC131\uD558\uB824\uBA74 -keysize\uB97C \uC81C\uACF5\uD558\uC2ED\uC2DC\uC624."},
+ {"verified.by.s.in.s", "%s(%s)\uC5D0 \uC758\uD574 \uD655\uC778\uB428"},
+ {"warning.not.verified.make.sure.keystore.is.correct",
+ "\uACBD\uACE0: \uD655\uC778\uB418\uC9C0 \uC54A\uC74C. -keystore\uAC00 \uC62C\uBC14\uB978\uC9C0 \uD655\uC778\uD558\uC2ED\uC2DC\uC624."},
+
{"Extensions.", "\uD655\uC7A5: "},
{".Empty.value.", "(\uBE44\uC5B4 \uC788\uB294 \uAC12)"},
{"Extension.Request.", "\uD655\uC7A5 \uC694\uCCAD:"},
--- a/jdk/src/share/classes/sun/security/tools/keytool/Resources_pt_BR.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/security/tools/keytool/Resources_pt_BR.java Thu Oct 10 13:41:08 2013 -0700
@@ -40,8 +40,7 @@
"*******************************************\n\n"},
// keytool: Help part
-// "Option" should be translated.
- {".OPTION.", " [Op\u00E7\u00E3o]..."},
+ {".OPTION.", " [OPTION]..."},
{"Options.", "Op\u00E7\u00F5es:"},
{"Use.keytool.help.for.all.available.commands",
"Use \"keytool -help\" para todos os comandos dispon\u00EDveis"},
@@ -61,9 +60,8 @@
"Exporta o certificado"}, //-exportcert
{"Generates.a.key.pair",
"Gera um par de chaves"}, //-genkeypair
-// translation of "secret" key should be different to "private" key.
{"Generates.a.secret.key",
- "Gera uma chave Secreta"}, //-genseckey
+ "Gera uma chave secreta"}, //-genseckey
{"Generates.certificate.from.a.certificate.request",
"Gera um certificado de uma solicita\u00E7\u00E3o de certificado"}, //-gencert
{"Generates.CRL", "Gera CRL"}, //-gencrl
@@ -244,8 +242,10 @@
{"Certification.request.stored.in.file.filename.",
"Solicita\u00E7\u00E3o de certificado armazenada no arquivo <{0}>"},
{"Submit.this.to.your.CA", "Submeter \u00E0 CA"},
- {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified",
- "se o alias n\u00E3o estiver especificado, destalias, srckeypass e destkeypass n\u00E3o dever\u00E3o ser especificados"},
+ {"if.alias.not.specified.destalias.and.srckeypass.must.not.be.specified",
+ "se o alias n\u00E3o estiver especificado, destalias e srckeypass n\u00E3o dever\u00E3o ser especificados"},
+ {"The.destination.pkcs12.keystore.has.different.storepass.and.keypass.Please.retry.with.destkeypass.specified.",
+ "O armazenamento de chaves pkcs12 de destino tem storepass e keypass diferentes. Tente novamente especificando -destkeypass."},
{"Certificate.stored.in.file.filename.",
"Certificado armazenado no arquivo <{0}>"},
{"Certificate.reply.was.installed.in.keystore",
@@ -298,14 +298,14 @@
{"Entry.type.type.", "Tipo de entrada: {0}"},
{"Certificate.chain.length.", "Comprimento da cadeia de certificados: "},
{"Certificate.i.1.", "Certificado[{0,number,integer}]:"},
- {"Certificate.fingerprint.SHA1.", "Fingerprint (MD5) do certificado: "},
+ {"Certificate.fingerprint.SHA1.", "Fingerprint (SHA1) do certificado: "},
{"Keystore.type.", "Tipo de \u00E1rea de armazenamento de chaves: "},
{"Keystore.provider.", "Fornecedor da \u00E1rea de armazenamento de chaves: "},
{"Your.keystore.contains.keyStore.size.entry",
"Sua \u00E1rea de armazenamento de chaves cont\u00E9m {0,number,integer} entrada"},
{"Your.keystore.contains.keyStore.size.entries",
"Sua \u00E1rea de armazenamento de chaves cont\u00E9m {0,number,integer} entradas"},
- {"Failed.to.parse.input", "Falha durante o parse da entrada"},
+ {"Failed.to.parse.input", "Falha durante o parsing da entrada"},
{"Empty.input", "Entrada vazia"},
{"Not.X.509.certificate", "N\u00E3o \u00E9 um certificado X.509"},
{"alias.has.no.public.key", "{0} n\u00E3o tem chave p\u00FAblica"},
@@ -324,7 +324,7 @@
{"Do.you.still.want.to.add.it.to.your.own.keystore.no.",
"Ainda deseja adicion\u00E1-lo \u00E0 sua \u00E1rea de armazenamento de chaves? [n\u00E3o]: "},
{"Trust.this.certificate.no.", "Confiar neste certificado? [n\u00E3o]: "},
- {"YES", "Sim"},
+ {"YES", "SIM"},
{"New.prompt.", "Nova {0}: "},
{"Passwords.must.differ", "As senhas devem ser diferentes"},
{"Re.enter.new.prompt.", "Informe novamente a nova {0}: "},
@@ -361,7 +361,7 @@
"O alias <{0}> faz refer\u00EAncia a um tipo de entrada que n\u00E3o \u00E9 uma entrada de chave privada. O comando -keyclone oferece suporte somente \u00E0 clonagem de entradas de chave privada"},
{".WARNING.WARNING.WARNING.",
- "***************** Advert\u00EAncia Advert\u00EAncia Advert\u00EAncia *****************"},
+ "***************** WARNING WARNING WARNING *****************"},
{"Signer.d.", "Signat\u00E1rio #%d:"},
{"Timestamp.", "Timestamp:"},
{"Signature.", "Assinatura:"},
@@ -386,7 +386,7 @@
"Certificado de n\u00EDvel superior na resposta:\n"},
{".is.not.trusted.", "... n\u00E3o \u00E9 confi\u00E1vel. "},
{"Install.reply.anyway.no.", "Instalar resposta assim mesmo? [n\u00E3o]: "},
- {"NO", "N\u00E3o"},
+ {"NO", "N\u00C3O"},
{"Public.keys.in.reply.and.keystore.don.t.match",
"As chaves p\u00FAblicas da resposta e da \u00E1rea de armazenamento de chaves n\u00E3o correspondem"},
{"Certificate.reply.and.certificate.in.keystore.are.identical",
@@ -400,6 +400,10 @@
{"Please.provide.keysize.for.secret.key.generation",
"Forne\u00E7a o -keysize para a gera\u00E7\u00E3o da chave secreta"},
+ {"verified.by.s.in.s", "Verificado por %s em %s"},
+ {"warning.not.verified.make.sure.keystore.is.correct",
+ "ADVERT\u00CANCIA: n\u00E3o verificado. Certifique-se que -keystore esteja correto."},
+
{"Extensions.", "Extens\u00F5es: "},
{".Empty.value.", "(Valor vazio)"},
{"Extension.Request.", "Solicita\u00E7\u00E3o de Extens\u00E3o:"},
--- a/jdk/src/share/classes/sun/security/tools/keytool/Resources_sv.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/security/tools/keytool/Resources_sv.java Thu Oct 10 13:41:08 2013 -0700
@@ -40,8 +40,7 @@
"*******************************************\n\n"},
// keytool: Help part
-// "Option" should be translated.
- {".OPTION.", " [Alternativ]..."},
+ {".OPTION.", " [OPTION]..."},
{"Options.", "Alternativ:"},
{"Use.keytool.help.for.all.available.commands",
"L\u00E4s \"Hj\u00E4lp - Nyckelverktyg\" f\u00F6r alla tillg\u00E4ngliga kommandon"},
@@ -61,7 +60,6 @@
"Exporterar certifikat"}, //-exportcert
{"Generates.a.key.pair",
"Genererar nyckelpar"}, //-genkeypair
-// translation of "secret" key should be different to "private" key.
{"Generates.a.secret.key",
"Genererar hemlig nyckel"}, //-genseckey
{"Generates.certificate.from.a.certificate.request",
@@ -178,7 +176,7 @@
{"Illegal.value.", "Otill\u00E5tet v\u00E4rde: "},
{"Unknown.password.type.", "Ok\u00E4nd l\u00F6senordstyp: "},
{"Cannot.find.environment.variable.",
- "Kan inte hitta milj\u00F6variabel: "},
+ "Hittar inte milj\u00F6variabel: "},
{"Cannot.find.file.", "Hittar inte fil: "},
{"Command.option.flag.needs.an.argument.", "Kommandoalternativet {0} beh\u00F6ver ett argument."},
{"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.",
@@ -244,8 +242,10 @@
{"Certification.request.stored.in.file.filename.",
"Certifikatbeg\u00E4ran har lagrats i filen <{0}>"},
{"Submit.this.to.your.CA", "Skicka detta till certifikatutf\u00E4rdaren"},
- {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified",
- "om n\u00E5got alias inte anges f\u00E5r destalias, srckeypass och destkeypass inte anges"},
+ {"if.alias.not.specified.destalias.and.srckeypass.must.not.be.specified",
+ "om alias inte angivits ska inte heller destalias och srckeypass anges"},
+ {"The.destination.pkcs12.keystore.has.different.storepass.and.keypass.Please.retry.with.destkeypass.specified.",
+ "Destinationsnyckellagret pkcs12 har olika storepass och keypass. F\u00F6rs\u00F6k igen med -destkeypass angivet."},
{"Certificate.stored.in.file.filename.",
"Certifikatet har lagrats i filen <{0}>"},
{"Certificate.reply.was.installed.in.keystore",
@@ -324,7 +324,7 @@
{"Do.you.still.want.to.add.it.to.your.own.keystore.no.",
"Vill du fortfarande l\u00E4gga till det i ditt eget nyckellagret? [nej]: "},
{"Trust.this.certificate.no.", "Litar du p\u00E5 det h\u00E4r certifikatet? [nej]: "},
- {"YES", "Ja"},
+ {"YES", "JA"},
{"New.prompt.", "Nytt {0}: "},
{"Passwords.must.differ", "L\u00F6senorden m\u00E5ste vara olika"},
{"Re.enter.new.prompt.", "Ange nytt {0} igen: "},
@@ -361,7 +361,7 @@
"Aliaset <{0}> refererar till en posttyp som inte \u00E4r n\u00E5gon privat nyckelpost. Kommandot -keyclone har endast st\u00F6d f\u00F6r kloning av privata nyckelposter"},
{".WARNING.WARNING.WARNING.",
- "***************** Varning Varning Varning *****************"},
+ "***************** WARNING WARNING WARNING *****************"},
{"Signer.d.", "Signerare #%d:"},
{"Timestamp.", "Tidsst\u00E4mpel:"},
{"Signature.", "Underskrift:"},
@@ -386,7 +386,7 @@
"Toppniv\u00E5certifikatet i svaret:\n"},
{".is.not.trusted.", "... \u00E4r inte betrott. "},
{"Install.reply.anyway.no.", "Vill du installera svaret \u00E4nd\u00E5? [nej]: "},
- {"NO", "Nej"},
+ {"NO", "NEJ"},
{"Public.keys.in.reply.and.keystore.don.t.match",
"De offentliga nycklarna i svaret och nyckellagret matchar inte varandra"},
{"Certificate.reply.and.certificate.in.keystore.are.identical",
@@ -400,6 +400,10 @@
{"Please.provide.keysize.for.secret.key.generation",
"Ange -keysize f\u00F6r att skapa hemlig nyckel"},
+ {"verified.by.s.in.s", "Verifierad av %s i %s"},
+ {"warning.not.verified.make.sure.keystore.is.correct",
+ "VARNING: ej verifierad. Se till att -nyckellager \u00E4r korrekt."},
+
{"Extensions.", "Till\u00E4gg: "},
{".Empty.value.", "(Tomt v\u00E4rde)"},
{"Extension.Request.", "Till\u00E4ggsbeg\u00E4ran:"},
--- a/jdk/src/share/classes/sun/security/tools/keytool/Resources_zh_CN.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/security/tools/keytool/Resources_zh_CN.java Thu Oct 10 13:41:08 2013 -0700
@@ -40,8 +40,7 @@
"*******************************************\n\n"},
// keytool: Help part
-// "Option" should be translated.
- {".OPTION.", " [\u9009\u9879]..."},
+ {".OPTION.", " [OPTION]..."},
{"Options.", "\u9009\u9879:"},
{"Use.keytool.help.for.all.available.commands",
"\u4F7F\u7528 \"keytool -help\" \u83B7\u53D6\u6240\u6709\u53EF\u7528\u547D\u4EE4"},
@@ -61,9 +60,8 @@
"\u5BFC\u51FA\u8BC1\u4E66"}, //-exportcert
{"Generates.a.key.pair",
"\u751F\u6210\u5BC6\u94A5\u5BF9"}, //-genkeypair
-// translation of "secret" key should be different to "private" key.
{"Generates.a.secret.key",
- "\u751F\u6210\u5BF9\u79F0\u5BC6\u94A5"}, //-genseckey
+ "\u751F\u6210\u5BC6\u94A5"}, //-genseckey
{"Generates.certificate.from.a.certificate.request",
"\u6839\u636E\u8BC1\u4E66\u8BF7\u6C42\u751F\u6210\u8BC1\u4E66"}, //-gencert
{"Generates.CRL", "\u751F\u6210 CRL"}, //-gencrl
@@ -182,7 +180,7 @@
{"Cannot.find.file.", "\u627E\u4E0D\u5230\u6587\u4EF6: "},
{"Command.option.flag.needs.an.argument.", "\u547D\u4EE4\u9009\u9879{0}\u9700\u8981\u4E00\u4E2A\u53C2\u6570\u3002"},
{"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.",
- "\u8B66\u544A: PKCS12 KeyStore \u4E0D\u652F\u6301\u5176\u4ED6\u5B58\u50A8\u548C\u5BC6\u94A5\u53E3\u4EE4\u3002\u6B63\u5728\u5FFD\u7565\u7528\u6237\u6307\u5B9A\u7684{0}\u503C\u3002"},
+ "\u8B66\u544A: PKCS12 \u5BC6\u94A5\u5E93\u4E0D\u652F\u6301\u5176\u4ED6\u5B58\u50A8\u548C\u5BC6\u94A5\u53E3\u4EE4\u3002\u6B63\u5728\u5FFD\u7565\u7528\u6237\u6307\u5B9A\u7684{0}\u503C\u3002"},
{".keystore.must.be.NONE.if.storetype.is.{0}",
"\u5982\u679C -storetype \u4E3A {0}, \u5219 -keystore \u5FC5\u987B\u4E3A NONE"},
{"Too.many.retries.program.terminated",
@@ -203,13 +201,13 @@
"\u5982\u679C\u6E90\u5BC6\u94A5\u5E93\u672A\u53D7\u53E3\u4EE4\u4FDD\u62A4, \u5219\u4E0D\u80FD\u6307\u5B9A -srcstorepass \u548C -srckeypass"},
{"Illegal.startdate.value", "\u975E\u6CD5\u5F00\u59CB\u65E5\u671F\u503C"},
{"Validity.must.be.greater.than.zero",
- "\u6709\u6548\u671F\u5FC5\u987B\u5927\u4E8E\u96F6"},
+ "\u6709\u6548\u6027\u5FC5\u987B\u5927\u4E8E\u96F6"},
{"provName.not.a.provider", "{0}\u4E0D\u662F\u63D0\u4F9B\u65B9"},
{"Usage.error.no.command.provided", "\u7528\u6CD5\u9519\u8BEF: \u6CA1\u6709\u63D0\u4F9B\u547D\u4EE4"},
{"Source.keystore.file.exists.but.is.empty.", "\u6E90\u5BC6\u94A5\u5E93\u6587\u4EF6\u5B58\u5728, \u4F46\u4E3A\u7A7A: "},
{"Please.specify.srckeystore", "\u8BF7\u6307\u5B9A -srckeystore"},
{"Must.not.specify.both.v.and.rfc.with.list.command",
- "'list' \u547D\u4EE4\u4E0D\u80FD\u540C\u65F6\u6307\u5B9A -v \u53CA -rfc"},
+ "\u4E0D\u80FD\u4F7F\u7528 'list' \u547D\u4EE4\u6765\u6307\u5B9A -v \u53CA -rfc"},
{"Key.password.must.be.at.least.6.characters",
"\u5BC6\u94A5\u53E3\u4EE4\u81F3\u5C11\u5FC5\u987B\u4E3A 6 \u4E2A\u5B57\u7B26"},
{"New.password.must.be.at.least.6.characters",
@@ -239,13 +237,15 @@
{"Warning.Overwriting.existing.alias.alias.in.destination.keystore",
"\u8B66\u544A: \u6B63\u5728\u8986\u76D6\u76EE\u6807\u5BC6\u94A5\u5E93\u4E2D\u7684\u73B0\u6709\u522B\u540D {0}"},
{"Existing.entry.alias.alias.exists.overwrite.no.",
- "\u5B58\u5728\u73B0\u6709\u6761\u76EE\u522B\u540D {0}, \u662F\u5426\u8986\u76D6? [no]: "},
+ "\u5B58\u5728\u73B0\u6709\u6761\u76EE\u522B\u540D {0}, \u662F\u5426\u8986\u76D6? [\u5426]: "},
{"Too.many.failures.try.later", "\u6545\u969C\u592A\u591A - \u8BF7\u7A0D\u540E\u518D\u8BD5"},
{"Certification.request.stored.in.file.filename.",
"\u5B58\u50A8\u5728\u6587\u4EF6 <{0}> \u4E2D\u7684\u8BA4\u8BC1\u8BF7\u6C42"},
{"Submit.this.to.your.CA", "\u5C06\u6B64\u63D0\u4EA4\u7ED9\u60A8\u7684 CA"},
- {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified",
- "\u5982\u679C\u6CA1\u6709\u6307\u5B9A\u522B\u540D, \u5219\u4E0D\u80FD\u6307\u5B9A\u76EE\u6807\u522B\u540D, \u6E90\u5BC6\u94A5\u5E93\u53E3\u4EE4\u548C\u76EE\u6807\u5BC6\u94A5\u5E93\u53E3\u4EE4"},
+ {"if.alias.not.specified.destalias.and.srckeypass.must.not.be.specified",
+ "\u5982\u679C\u6CA1\u6709\u6307\u5B9A\u522B\u540D, \u5219\u4E0D\u80FD\u6307\u5B9A\u76EE\u6807\u522B\u540D\u548C\u6E90\u5BC6\u94A5\u5E93\u53E3\u4EE4"},
+ {"The.destination.pkcs12.keystore.has.different.storepass.and.keypass.Please.retry.with.destkeypass.specified.",
+ "\u76EE\u6807 pkcs12 \u5BC6\u94A5\u5E93\u5177\u6709\u4E0D\u540C\u7684 storepass \u548C keypass\u3002\u8BF7\u5728\u6307\u5B9A\u4E86 -destkeypass \u65F6\u91CD\u8BD5\u3002"},
{"Certificate.stored.in.file.filename.",
"\u5B58\u50A8\u5728\u6587\u4EF6 <{0}> \u4E2D\u7684\u8BC1\u4E66"},
{"Certificate.reply.was.installed.in.keystore",
@@ -305,7 +305,7 @@
"\u60A8\u7684\u5BC6\u94A5\u5E93\u5305\u542B {0,number,integer} \u4E2A\u6761\u76EE"},
{"Your.keystore.contains.keyStore.size.entries",
"\u60A8\u7684\u5BC6\u94A5\u5E93\u5305\u542B {0,number,integer} \u4E2A\u6761\u76EE"},
- {"Failed.to.parse.input", "\u65E0\u6CD5\u5BF9\u8F93\u5165\u8FDB\u884C\u8BED\u6CD5\u5206\u6790"},
+ {"Failed.to.parse.input", "\u65E0\u6CD5\u89E3\u6790\u8F93\u5165"},
{"Empty.input", "\u7A7A\u8F93\u5165"},
{"Not.X.509.certificate", "\u975E X.509 \u8BC1\u4E66"},
{"alias.has.no.public.key", "{0}\u6CA1\u6709\u516C\u5171\u5BC6\u94A5"},
@@ -318,13 +318,13 @@
{"Certificate.already.exists.in.keystore.under.alias.trustalias.",
"\u5728\u522B\u540D <{0}> \u4E4B\u4E0B, \u8BC1\u4E66\u5DF2\u7ECF\u5B58\u5728\u4E8E\u5BC6\u94A5\u5E93\u4E2D"},
{"Do.you.still.want.to.add.it.no.",
- "\u662F\u5426\u4ECD\u8981\u6DFB\u52A0? [no]: "},
+ "\u662F\u5426\u4ECD\u8981\u6DFB\u52A0? [\u5426]: "},
{"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.",
"\u5728\u522B\u540D <{0}> \u4E4B\u4E0B, \u8BC1\u4E66\u5DF2\u7ECF\u5B58\u5728\u4E8E\u7CFB\u7EDF\u8303\u56F4\u7684 CA \u5BC6\u94A5\u5E93\u4E2D"},
{"Do.you.still.want.to.add.it.to.your.own.keystore.no.",
- "\u662F\u5426\u4ECD\u8981\u5C06\u5B83\u6DFB\u52A0\u5230\u81EA\u5DF1\u7684\u5BC6\u94A5\u5E93? [no]: "},
- {"Trust.this.certificate.no.", "\u662F\u5426\u4FE1\u4EFB\u6B64\u8BC1\u4E66? [no]: "},
- {"YES", "\u662F"},
+ "\u662F\u5426\u4ECD\u8981\u5C06\u5B83\u6DFB\u52A0\u5230\u81EA\u5DF1\u7684\u5BC6\u94A5\u5E93? [\u5426]: "},
+ {"Trust.this.certificate.no.", "\u662F\u5426\u4FE1\u4EFB\u6B64\u8BC1\u4E66? [\u5426]: "},
+ {"YES", "YES"},
{"New.prompt.", "\u65B0{0}: "},
{"Passwords.must.differ", "\u53E3\u4EE4\u4E0D\u80FD\u76F8\u540C"},
{"Re.enter.new.prompt.", "\u91CD\u65B0\u8F93\u5165\u65B0{0}: "},
@@ -332,7 +332,7 @@
{"They.don.t.match.Try.again", "\u5B83\u4EEC\u4E0D\u5339\u914D\u3002\u8BF7\u91CD\u8BD5"},
{"Enter.prompt.alias.name.", "\u8F93\u5165{0}\u522B\u540D: "},
{"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.",
- "\u8F93\u5165\u65B0\u7684\u522B\u540D\t(\u6309\u56DE\u8F66\u4EE5\u53D6\u6D88\u5BF9\u6B64\u6761\u76EE\u7684\u5BFC\u5165): "},
+ "\u5BFC\u5165\u65B0\u7684\u522B\u540D\t(\u6309\u56DE\u8F66\u4EE5\u53D6\u6D88\u5BF9\u6B64\u6761\u76EE\u7684\u5BFC\u5165): "},
{"Enter.alias.name.", "\u8F93\u5165\u522B\u540D: "},
{".RETURN.if.same.as.for.otherAlias.",
"\t(\u5982\u679C\u548C <{0}> \u76F8\u540C, \u5219\u6309\u56DE\u8F66)"},
@@ -361,7 +361,7 @@
"\u522B\u540D <{0}> \u5F15\u7528\u4E86\u4E0D\u5C5E\u4E8E\u79C1\u6709\u5BC6\u94A5\u6761\u76EE\u7684\u6761\u76EE\u7C7B\u578B\u3002-keyclone \u547D\u4EE4\u4EC5\u652F\u6301\u5BF9\u79C1\u6709\u5BC6\u94A5\u6761\u76EE\u7684\u514B\u9686"},
{".WARNING.WARNING.WARNING.",
- "***************** \u8B66\u544A \u8B66\u544A \u8B66\u544A *****************"},
+ "***************** WARNING WARNING WARNING *****************"},
{"Signer.d.", "\u7B7E\u540D\u8005 #%d:"},
{"Timestamp.", "\u65F6\u95F4\u6233:"},
{"Signature.", "\u7B7E\u540D:"},
@@ -385,8 +385,8 @@
{"Top.level.certificate.in.reply.",
"\u56DE\u590D\u4E2D\u7684\u9876\u7EA7\u8BC1\u4E66:\n"},
{".is.not.trusted.", "... \u662F\u4E0D\u53EF\u4FE1\u7684\u3002"},
- {"Install.reply.anyway.no.", "\u662F\u5426\u4ECD\u8981\u5B89\u88C5\u56DE\u590D? [no]: "},
- {"NO", "\u5426"},
+ {"Install.reply.anyway.no.", "\u662F\u5426\u4ECD\u8981\u5B89\u88C5\u56DE\u590D? [\u5426]: "},
+ {"NO", "NO"},
{"Public.keys.in.reply.and.keystore.don.t.match",
"\u56DE\u590D\u4E2D\u7684\u516C\u5171\u5BC6\u94A5\u4E0E\u5BC6\u94A5\u5E93\u4E0D\u5339\u914D"},
{"Certificate.reply.and.certificate.in.keystore.are.identical",
@@ -398,7 +398,11 @@
{"Secret.key.not.generated.alias.alias.already.exists",
"\u6CA1\u6709\u751F\u6210\u5BC6\u94A5, \u522B\u540D <{0}> \u5DF2\u7ECF\u5B58\u5728"},
{"Please.provide.keysize.for.secret.key.generation",
- "\u8BF7\u63D0\u4F9B -keysize \u4EE5\u751F\u6210\u5BF9\u79F0\u5BC6\u94A5"},
+ "\u8BF7\u63D0\u4F9B -keysize \u4EE5\u751F\u6210\u5BC6\u94A5"},
+
+ {"verified.by.s.in.s", "\u7531 %s \u9A8C\u8BC1(\u5728 %s \u4E2D)"},
+ {"warning.not.verified.make.sure.keystore.is.correct",
+ "\u8B66\u544A: \u672A\u9A8C\u8BC1\u3002\u8BF7\u786E\u4FDD\u5BC6\u94A5\u5E93\u662F\u6B63\u786E\u7684\u3002"},
{"Extensions.", "\u6269\u5C55: "},
{".Empty.value.", "(\u7A7A\u503C)"},
--- a/jdk/src/share/classes/sun/security/tools/keytool/Resources_zh_TW.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/security/tools/keytool/Resources_zh_TW.java Thu Oct 10 13:41:08 2013 -0700
@@ -40,8 +40,7 @@
"*******************************************\n\n"},
// keytool: Help part
-// "Option" should be translated.
- {".OPTION.", " [\u9078\u9805]..."},
+ {".OPTION.", " [OPTION]..."},
{"Options.", "\u9078\u9805:"},
{"Use.keytool.help.for.all.available.commands",
"\u4F7F\u7528 \"keytool -help\" \u53D6\u5F97\u6240\u6709\u53EF\u7528\u7684\u547D\u4EE4"},
@@ -61,7 +60,6 @@
"\u532F\u51FA\u6191\u8B49"}, //-exportcert
{"Generates.a.key.pair",
"\u7522\u751F\u91D1\u9470\u7D44"}, //-genkeypair
-// translation of "secret" key should be different to "private" key.
{"Generates.a.secret.key",
"\u7522\u751F\u79D8\u5BC6\u91D1\u9470"}, //-genseckey
{"Generates.certificate.from.a.certificate.request",
@@ -244,8 +242,10 @@
{"Certification.request.stored.in.file.filename.",
"\u8A8D\u8B49\u8981\u6C42\u5132\u5B58\u5728\u6A94\u6848 <{0}>"},
{"Submit.this.to.your.CA", "\u5C07\u6B64\u9001\u51FA\u81F3\u60A8\u7684 CA"},
- {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified",
- "\u5982\u679C\u672A\u6307\u5B9A\u5225\u540D\uFF0C\u5247\u4E0D\u80FD\u6307\u5B9A destalias\u3001srckeypass \u53CA destkeypass"},
+ {"if.alias.not.specified.destalias.and.srckeypass.must.not.be.specified",
+ "\u5982\u679C\u672A\u6307\u5B9A\u5225\u540D\uFF0C\u5247\u4E0D\u80FD\u6307\u5B9A destalias \u548C srckeypass"},
+ {"The.destination.pkcs12.keystore.has.different.storepass.and.keypass.Please.retry.with.destkeypass.specified.",
+ "\u76EE\u7684\u5730 pkcs12 \u91D1\u9470\u5132\u5B58\u5EAB\u7684 storepass \u548C keypass \u4E0D\u540C\u3002\u8ACB\u91CD\u65B0\u4EE5 -destkeypass \u6307\u5B9A\u3002"},
{"Certificate.stored.in.file.filename.",
"\u6191\u8B49\u5132\u5B58\u5728\u6A94\u6848 <{0}>"},
{"Certificate.reply.was.installed.in.keystore",
@@ -361,7 +361,7 @@
"\u5225\u540D <{0}> \u6240\u53C3\u7167\u7684\u9805\u76EE\u4E0D\u662F\u79C1\u5BC6\u91D1\u9470\u985E\u578B\u3002-keyclone \u547D\u4EE4\u50C5\u652F\u63F4\u79C1\u5BC6\u91D1\u9470\u9805\u76EE\u7684\u8907\u88FD"},
{".WARNING.WARNING.WARNING.",
- "***************** \u8B66\u544A \u8B66\u544A \u8B66\u544A *****************"},
+ "***************** WARNING WARNING WARNING *****************"},
{"Signer.d.", "\u7C3D\u7F72\u8005 #%d:"},
{"Timestamp.", "\u6642\u6233:"},
{"Signature.", "\u7C3D\u7AE0:"},
@@ -383,7 +383,7 @@
{"Certificate.chain.in.reply.does.not.verify.",
"\u56DE\u8986\u6642\u7684\u6191\u8B49\u93C8\u672A\u9A57\u8B49: "},
{"Top.level.certificate.in.reply.",
- "\u56DE\u8986\u6642\u7684\u6700\u9AD8\u7D1A\u6191\u8B49:\\n"},
+ "\u56DE\u8986\u6642\u7684\u6700\u9AD8\u7D1A\u6191\u8B49:\n"},
{".is.not.trusted.", "... \u662F\u4E0D\u88AB\u4FE1\u4EFB\u7684\u3002"},
{"Install.reply.anyway.no.", "\u9084\u662F\u8981\u5B89\u88DD\u56DE\u8986\uFF1F [\u5426]: "},
{"NO", "\u5426"},
@@ -400,6 +400,10 @@
{"Please.provide.keysize.for.secret.key.generation",
"\u8ACB\u63D0\u4F9B -keysize \u4EE5\u7522\u751F\u79D8\u5BC6\u91D1\u9470"},
+ {"verified.by.s.in.s", "\u7531 %s \u9A57\u8B49 (\u5728 %s \u4E2D)"},
+ {"warning.not.verified.make.sure.keystore.is.correct",
+ "\u8B66\u544A: \u672A\u9A57\u8B49\u3002\u8ACB\u78BA\u5B9A -keystore \u6B63\u78BA\u3002"},
+
{"Extensions.", "\u64F4\u5145\u5957\u4EF6: "},
{".Empty.value.", "(\u7A7A\u767D\u503C)"},
{"Extension.Request.", "\u64F4\u5145\u5957\u4EF6\u8981\u6C42:"},
--- a/jdk/src/share/classes/sun/security/tools/policytool/Resources_de.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/security/tools/policytool/Resources_de.java Thu Oct 10 13:41:08 2013 -0700
@@ -57,7 +57,7 @@
{"Retain", "Beibehalten"},
{"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes",
- "Warnung: M\u00F6glicherweise enth\u00E4lt der Dateiname Escape-Zeichen mit Backslash. Es ist nicht notwendig, Backslash-Zeichen zu escapen (das Tool f\u00FChrt dies automatisch beim Schreiben des Policy-Contents in den persistenten Speicher aus).\n\nKlicken Sie auf \"Beibehalten\", um den eingegebenen Namen beizubehalten oder auf \"Bearbeiten\", um den Namen zu bearbeiten."},
+ "Warnung: M\u00F6glicherweise enth\u00E4lt der Dateiname Escapezeichen mit Backslash. Es ist nicht notwendig, Backslash-Zeichen zu escapen (das Tool f\u00FChrt dies automatisch beim Schreiben des Policy-Contents in den persistenten Speicher aus).\n\nKlicken Sie auf \"Beibehalten\", um den eingegebenen Namen beizubehalten oder auf \"Bearbeiten\", um den Namen zu bearbeiten."},
{"Add.Public.Key.Alias", "Public Key-Alias hinzuf\u00FCgen"},
{"Remove.Public.Key.Alias", "Public Key-Alias entfernen"},
@@ -134,6 +134,9 @@
{"policy.type", "Policy-Typ"},
{"property.name", "Eigenschaftsname"},
{"provider.name", "Providername"},
+ {"url", "URL"},
+ {"method.list", "Methodenliste"},
+ {"request.headers.list", "Headerliste anfordern"},
{"Principal.List", "Principal-Liste"},
{"Permission.List", "Berechtigungsliste"},
{"Code.Base", "Codebase"},
--- a/jdk/src/share/classes/sun/security/tools/policytool/Resources_es.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/security/tools/policytool/Resources_es.java Thu Oct 10 13:41:08 2013 -0700
@@ -134,6 +134,9 @@
{"policy.type", "tipo de pol\u00EDtica"},
{"property.name", "nombre de la propiedad"},
{"provider.name", "nombre del proveedor"},
+ {"url", "url"},
+ {"method.list", "lista de m\u00E9todos"},
+ {"request.headers.list", "lista de cabeceras de solicitudes"},
{"Principal.List", "Lista de Principales"},
{"Permission.List", "Lista de Permisos"},
{"Code.Base", "Base de C\u00F3digo"},
--- a/jdk/src/share/classes/sun/security/tools/policytool/Resources_fr.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/security/tools/policytool/Resources_fr.java Thu Oct 10 13:41:08 2013 -0700
@@ -134,6 +134,9 @@
{"policy.type", "type de r\u00E8gle"},
{"property.name", "nom de propri\u00E9t\u00E9"},
{"provider.name", "nom du fournisseur"},
+ {"url", "url"},
+ {"method.list", "liste des m\u00E9thodes"},
+ {"request.headers.list", "liste des en-t\u00EAtes de demande"},
{"Principal.List", "Liste de principaux"},
{"Permission.List", "Liste de droits"},
{"Code.Base", "Base de code"},
--- a/jdk/src/share/classes/sun/security/tools/policytool/Resources_it.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/security/tools/policytool/Resources_it.java Thu Oct 10 13:41:08 2013 -0700
@@ -41,7 +41,7 @@
"Avvertenza: argomento o argomenti non validi per il costruttore {0}"},
{"Illegal.Principal.Type.type", "Tipo principal non valido: {0}"},
{"Illegal.option.option", "Opzione non valida: {0}"},
- {"Usage.policytool.options.", "Utilizzo: policytool [opzioni]"},
+ {"Usage.policytool.options.", "Uso: policytool [opzioni]"},
{".file.file.policy.file.location",
" [-file <file>] posizione del file dei criteri"},
{"New", "Nuovo"},
@@ -134,6 +134,9 @@
{"policy.type", "tipo di criteri"},
{"property.name", "nome propriet\u00E0"},
{"provider.name", "nome provider"},
+ {"url", "url"},
+ {"method.list", "lista metodi"},
+ {"request.headers.list", "lista intestazioni di richiesta"},
{"Principal.List", "Lista principal"},
{"Permission.List", "Lista autorizzazioni"},
{"Code.Base", "Codebase"},
--- a/jdk/src/share/classes/sun/security/tools/policytool/Resources_ja.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/security/tools/policytool/Resources_ja.java Thu Oct 10 13:41:08 2013 -0700
@@ -134,6 +134,9 @@
{"policy.type", "\u30DD\u30EA\u30B7\u30FC\u30FB\u30BF\u30A4\u30D7"},
{"property.name", "\u30D7\u30ED\u30D1\u30C6\u30A3\u540D"},
{"provider.name", "\u30D7\u30ED\u30D0\u30A4\u30C0\u540D"},
+ {"url", "URL"},
+ {"method.list", "\u30E1\u30BD\u30C3\u30C9\u30FB\u30EA\u30B9\u30C8"},
+ {"request.headers.list", "\u30EA\u30AF\u30A8\u30B9\u30C8\u30FB\u30D8\u30C3\u30C0\u30FC\u30FB\u30EA\u30B9\u30C8"},
{"Principal.List", "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u306E\u30EA\u30B9\u30C8"},
{"Permission.List", "\u30A2\u30AF\u30BB\u30B9\u6A29\u306E\u30EA\u30B9\u30C8"},
{"Code.Base", "\u30B3\u30FC\u30C9\u30FB\u30D9\u30FC\u30B9"},
--- a/jdk/src/share/classes/sun/security/tools/policytool/Resources_ko.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/security/tools/policytool/Resources_ko.java Thu Oct 10 13:41:08 2013 -0700
@@ -134,6 +134,9 @@
{"policy.type", "\uC815\uCC45 \uC720\uD615"},
{"property.name", "\uC18D\uC131 \uC774\uB984"},
{"provider.name", "\uC81C\uACF5\uC790 \uC774\uB984"},
+ {"url", "URL"},
+ {"method.list", "\uBA54\uC18C\uB4DC \uBAA9\uB85D"},
+ {"request.headers.list", "\uC694\uCCAD \uD5E4\uB354 \uBAA9\uB85D"},
{"Principal.List", "\uC8FC\uCCB4 \uBAA9\uB85D"},
{"Permission.List", "\uAD8C\uD55C \uBAA9\uB85D"},
{"Code.Base", "\uCF54\uB4DC \uBCA0\uC774\uC2A4"},
--- a/jdk/src/share/classes/sun/security/tools/policytool/Resources_pt_BR.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/security/tools/policytool/Resources_pt_BR.java Thu Oct 10 13:41:08 2013 -0700
@@ -134,6 +134,9 @@
{"policy.type", "tipo de pol\u00EDtica"},
{"property.name", "nome da propriedade"},
{"provider.name", "nome do fornecedor"},
+ {"url", "url"},
+ {"method.list", "lista de m\u00E9todos"},
+ {"request.headers.list", "solicitar lista de cabe\u00E7alhos"},
{"Principal.List", "Lista de Principais"},
{"Permission.List", "Lista de Permiss\u00F5es"},
{"Code.Base", "Base de C\u00F3digo"},
--- a/jdk/src/share/classes/sun/security/tools/policytool/Resources_sv.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/security/tools/policytool/Resources_sv.java Thu Oct 10 13:41:08 2013 -0700
@@ -134,6 +134,9 @@
{"policy.type", "policytyp"},
{"property.name", "egenskapsnamn"},
{"provider.name", "leverant\u00F6rsnamn"},
+ {"url", "url"},
+ {"method.list", "metodlista"},
+ {"request.headers.list", "beg\u00E4ranrubriklista"},
{"Principal.List", "Lista \u00F6ver identitetshavare"},
{"Permission.List", "Beh\u00F6righetslista"},
{"Code.Base", "Kodbas"},
--- a/jdk/src/share/classes/sun/security/tools/policytool/Resources_zh_CN.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/security/tools/policytool/Resources_zh_CN.java Thu Oct 10 13:41:08 2013 -0700
@@ -35,7 +35,7 @@
private static final Object[][] contents = {
{"NEWLINE", "\n"},
{"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.",
- "\u8B66\u544A: \u522B\u540D {0} \u7684\u516C\u5171\u5BC6\u94A5\u4E0D\u5B58\u5728\u3002\u8BF7\u786E\u4FDD\u5DF2\u6B63\u786E\u914D\u7F6E KeyStore\u3002"},
+ "\u8B66\u544A: \u522B\u540D {0} \u7684\u516C\u5171\u5BC6\u94A5\u4E0D\u5B58\u5728\u3002\u8BF7\u786E\u4FDD\u5DF2\u6B63\u786E\u914D\u7F6E\u5BC6\u94A5\u5E93\u3002"},
{"Warning.Class.not.found.class", "\u8B66\u544A: \u627E\u4E0D\u5230\u7C7B: {0}"},
{"Warning.Invalid.argument.s.for.constructor.arg",
"\u8B66\u544A: \u6784\u9020\u5668\u7684\u53C2\u6570\u65E0\u6548: {0}"},
@@ -62,7 +62,7 @@
{"Add.Public.Key.Alias", "\u6DFB\u52A0\u516C\u5171\u5BC6\u94A5\u522B\u540D"},
{"Remove.Public.Key.Alias", "\u5220\u9664\u516C\u5171\u5BC6\u94A5\u522B\u540D"},
{"File", "\u6587\u4EF6"},
- {"KeyStore", "KeyStore"},
+ {"KeyStore", "\u5BC6\u94A5\u5E93"},
{"Policy.File.", "\u7B56\u7565\u6587\u4EF6:"},
{"Could.not.open.policy.file.policyFile.e.toString.",
"\u65E0\u6CD5\u6253\u5F00\u7B56\u7565\u6587\u4EF6: {0}: {1}"},
@@ -94,10 +94,10 @@
{".Edit.Permission", " \u7F16\u8F91\u6743\u9650"},
{"Remove.Permission", "\u5220\u9664\u6743\u9650"},
{"Done", "\u5B8C\u6210"},
- {"KeyStore.URL.", "KeyStore URL:"},
- {"KeyStore.Type.", "KeyStore \u7C7B\u578B:"},
- {"KeyStore.Provider.", "KeyStore \u63D0\u4F9B\u65B9:"},
- {"KeyStore.Password.URL.", "KeyStore \u53E3\u4EE4 URL:"},
+ {"KeyStore.URL.", "\u5BC6\u94A5\u5E93 URL:"},
+ {"KeyStore.Type.", "\u5BC6\u94A5\u5E93\u7C7B\u578B:"},
+ {"KeyStore.Provider.", "\u5BC6\u94A5\u5E93\u63D0\u4F9B\u65B9:"},
+ {"KeyStore.Password.URL.", "\u5BC6\u94A5\u5E93\u53E3\u4EE4 URL:"},
{"Principals", "\u4E3B\u7528\u6237"},
{".Edit.Principal.", " \u7F16\u8F91\u4E3B\u7528\u6237:"},
{".Add.New.Principal.", " \u6DFB\u52A0\u65B0\u4E3B\u7528\u6237:"},
@@ -123,7 +123,7 @@
{"Save.Changes", "\u4FDD\u5B58\u66F4\u6539"},
{"No.Policy.Entry.selected", "\u6CA1\u6709\u9009\u62E9\u7B56\u7565\u6761\u76EE"},
{"Unable.to.open.KeyStore.ex.toString.",
- "\u65E0\u6CD5\u6253\u5F00 KeyStore: {0}"},
+ "\u65E0\u6CD5\u6253\u5F00\u5BC6\u94A5\u5E93: {0}"},
{"No.principal.selected", "\u672A\u9009\u62E9\u4E3B\u7528\u6237"},
{"No.permission.selected", "\u6CA1\u6709\u9009\u62E9\u6743\u9650"},
{"name", "\u540D\u79F0"},
@@ -134,11 +134,14 @@
{"policy.type", "\u7B56\u7565\u7C7B\u578B"},
{"property.name", "\u5C5E\u6027\u540D\u79F0"},
{"provider.name", "\u63D0\u4F9B\u65B9\u540D\u79F0"},
+ {"url", "URL"},
+ {"method.list", "\u65B9\u6CD5\u5217\u8868"},
+ {"request.headers.list", "\u8BF7\u6C42\u6807\u5934\u5217\u8868"},
{"Principal.List", "\u4E3B\u7528\u6237\u5217\u8868"},
{"Permission.List", "\u6743\u9650\u5217\u8868"},
{"Code.Base", "\u4EE3\u7801\u5E93"},
- {"KeyStore.U.R.L.", "KeyStore URL:"},
- {"KeyStore.Password.U.R.L.", "KeyStore \u53E3\u4EE4 URL:"}
+ {"KeyStore.U.R.L.", "\u5BC6\u94A5\u5E93 URL:"},
+ {"KeyStore.Password.U.R.L.", "\u5BC6\u94A5\u5E93\u53E3\u4EE4 URL:"}
};
--- a/jdk/src/share/classes/sun/security/tools/policytool/Resources_zh_TW.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/security/tools/policytool/Resources_zh_TW.java Thu Oct 10 13:41:08 2013 -0700
@@ -134,6 +134,9 @@
{"policy.type", "\u539F\u5247\u985E\u578B"},
{"property.name", "\u5C6C\u6027\u540D\u7A31"},
{"provider.name", "\u63D0\u4F9B\u8005\u540D\u7A31"},
+ {"url", "URL"},
+ {"method.list", "\u65B9\u6CD5\u6E05\u55AE"},
+ {"request.headers.list", "\u8981\u6C42\u6A19\u982D\u6E05\u55AE"},
{"Principal.List", "Principal \u6E05\u55AE"},
{"Permission.List", "\u6B0A\u9650\u6E05\u55AE"},
{"Code.Base", "\u4EE3\u78BC\u57FA\u6E96"},
--- a/jdk/src/share/classes/sun/security/util/Resources_fr.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/security/util/Resources_fr.java Thu Oct 10 13:41:08 2013 -0700
@@ -65,12 +65,12 @@
{"invalid.null.Class.provided", "classe NULL fournie non valide"},
{"Subject.", "Objet :\n"},
{".Principal.", "\tPrincipal : "},
- {".Public.Credential.", "\tInformations d'identification et de connexion publiques : "},
+ {".Public.Credential.", "\tInformations d'identification publiques : "},
{".Private.Credentials.inaccessible.",
- "\tInformations d'identification et de connexion priv\u00E9es inaccessibles\n"},
- {".Private.Credential.", "\tInformations d'identification et de connexion priv\u00E9es : "},
+ "\tInformations d'identification priv\u00E9es inaccessibles\n"},
+ {".Private.Credential.", "\tInformations d'identification priv\u00E9es : "},
{".Private.Credential.inaccessible.",
- "\tInformations d'identification et de connexion priv\u00E9es inaccessibles\n"},
+ "\tInformations d'identification priv\u00E9es inaccessibles\n"},
{"Subject.is.read.only", "Sujet en lecture seule"},
{"attempting.to.add.an.object.which.is.not.an.instance.of.java.security.Principal.to.a.Subject.s.Principal.Set",
"tentative d'ajout d'un objet qui n'est pas une instance de java.security.Principal dans un ensemble de principaux du sujet"},
--- a/jdk/src/share/classes/sun/security/util/UntrustedCertificates.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/security/util/UntrustedCertificates.java Thu Oct 10 13:41:08 2013 -0700
@@ -24,13 +24,15 @@
*/
package sun.security.util;
-import java.io.IOException;
-import java.io.ByteArrayInputStream;
+import java.io.*;
+import java.security.AccessController;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.security.PrivilegedAction;
import java.security.cert.X509Certificate;
-import java.security.cert.CertificateFactory;
import java.security.cert.CertificateException;
-import java.util.Set;
-import java.util.HashSet;
+import java.util.*;
+import sun.security.x509.X509CertImpl;
/**
* A utility class to check if a certificate is untrusted. This is an internal
@@ -42,8 +44,50 @@
*/
public final class UntrustedCertificates {
- private final static Set<X509Certificate> untrustedCerts = new HashSet<>();
+ private static final Debug debug = Debug.getInstance("certpath");
+ private static final String ALGORITHM_KEY = "Algorithm";
+
+ private static final Properties props = new Properties();
+ private static final String algorithm;
+ static {
+ AccessController.doPrivileged(new PrivilegedAction<Void>() {
+ @Override
+ public Void run() {
+ File f = new File(System.getProperty("java.home"),
+ "lib/security/blacklisted.certs");
+ try (FileInputStream fin = new FileInputStream(f)) {
+ props.load(fin);
+ // It's said that the fingerprint could contain colons
+ for (Map.Entry<Object,Object> e: props.entrySet()) {
+ e.setValue(stripColons(e.getValue()));
+ }
+ } catch (IOException fnfe) {
+ if (debug != null) {
+ debug.println("Error parsing blacklisted.certs");
+ }
+ }
+ return null;
+ }
+ });
+ algorithm = props.getProperty(ALGORITHM_KEY);
+ }
+
+ private static String stripColons(Object input) {
+ String s = (String)input;
+ char[] letters = s.toCharArray();
+ int pos = 0;
+ for (int i = 0; i < letters.length; i++) {
+ if (letters[i] != ':') {
+ if (i != pos) {
+ letters[pos] = letters[i];
+ }
+ pos++;
+ }
+ }
+ if (pos == letters.length) return s;
+ else return new String(letters, 0, pos);
+ }
/**
* Checks if a certificate is untrusted.
*
@@ -51,844 +95,21 @@
* @return true if the certificate is untrusted.
*/
public static boolean isUntrusted(X509Certificate cert) {
- return untrustedCerts.contains(cert);
- }
-
- private static void add(String alias, String pemCert) {
- // generate certificate from PEM certificate
- try (ByteArrayInputStream is =
- new ByteArrayInputStream(pemCert.getBytes())) {
- CertificateFactory cf = CertificateFactory.getInstance("X.509");
- X509Certificate cert = (X509Certificate)cf.generateCertificate(is);
-
- if (!untrustedCerts.add(cert)) {
- throw new RuntimeException("Duplicate untrusted certificate: " +
- cert.getSubjectX500Principal());
+ if (algorithm == null) {
+ return false;
+ }
+ String key;
+ if (cert instanceof X509CertImpl) {
+ key = ((X509CertImpl)cert).getFingerprint(algorithm);
+ } else {
+ try {
+ key = new X509CertImpl(cert.getEncoded()).getFingerprint(algorithm);
+ } catch (CertificateException cee) {
+ return false;
}
- } catch (CertificateException | IOException e) {
- throw new RuntimeException(
- "Incorrect untrusted certificate: " + alias, e);
}
+ return props.containsKey(key);
}
- static {
- // -----------------------------------------------------------------
- // Compromised CAs of Digicert Malaysia
- //
- // Reported by Digicert in its announcement on November 05, 2011.
- //
-
- // Digicert Malaysia intermediate, cross-signed by CyberTrust
- //
- // Subject: CN=Digisign Server ID (Enrich),
- // OU=457608-K,
- // O=Digicert Sdn. Bhd.,
- // C=MY
- // Issuer: CN=GTE CyberTrust Global Root,
- // OU=GTE CyberTrust Solutions, Inc.,
- // O=GTE Corporation,
- // C=US
- // Serial: 120001705 (07:27:14:a9)
- add("digicert-server-cross-to-cybertrust-4C0E636A",
- "-----BEGIN CERTIFICATE-----\n" +
- "MIIDyzCCAzSgAwIBAgIEBycUqTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV\n" +
- "UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU\n" +
- "cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds\n" +
- "b2JhbCBSb290MB4XDTA3MDcxNzE1MTc0OFoXDTEyMDcxNzE1MTY1NFowYzELMAkG\n" +
- "A1UEBhMCTVkxGzAZBgNVBAoTEkRpZ2ljZXJ0IFNkbi4gQmhkLjERMA8GA1UECxMI\n" +
- "NDU3NjA4LUsxJDAiBgNVBAMTG0RpZ2lzaWduIFNlcnZlciBJRCAoRW5yaWNoKTCB\n" +
- "nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEArahkS02Hx4RZufuQRqCmicDx/tXa\n" +
- "VII3DZkrRSYK6Fawf8qo9I5HhAGCKeOzarWR8/uVhbxyqGToCkCcxfRxrnt7agfq\n" +
- "kBRPjYmvlKuyBtQCanuYH1m5Os1U+iDfsioK6bjdaZDAKdNO0JftZszFGUkGf/pe\n" +
- "LHx7hRsyQt97lSUCAwEAAaOCAXgwggF0MBIGA1UdEwEB/wQIMAYBAf8CAQAwXAYD\n" +
- "VR0gBFUwUzBIBgkrBgEEAbE+AQAwOzA5BggrBgEFBQcCARYtaHR0cDovL2N5YmVy\n" +
- "dHJ1c3Qub21uaXJvb3QuY29tL3JlcG9zaXRvcnkuY2ZtMAcGBWCDSgEBMA4GA1Ud\n" +
- "DwEB/wQEAwIB5jCBiQYDVR0jBIGBMH+heaR3MHUxCzAJBgNVBAYTAlVTMRgwFgYD\n" +
- "VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv\n" +
- "bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv\n" +
- "b3SCAgGlMEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly93d3cucHVibGljLXRydXN0\n" +
- "LmNvbS9jZ2ktYmluL0NSTC8yMDE4L2NkcC5jcmwwHQYDVR0OBBYEFMYWk04WF+wW\n" +
- "royUdvOGbcV0boR3MA0GCSqGSIb3DQEBBQUAA4GBAHYAe6Z4K2Ydjl42xqSOBfIj\n" +
- "knyTZ9P0wAp9iy3Z6tVvGvPhSilaIoRNUC9LDPL/hcJ7VdREgr5trGeOvLQfkpxR\n" +
- "gBoU9m6rYYgLrRx/90tQUdZlG6ZHcRVesHHzNRTyN71jyNXwk1o0X9g96F33xR7A\n" +
- "5c8fhiSpPAdmzcHSNmNZ\n" +
- "-----END CERTIFICATE-----");
-
- // Digicert Malaysia intermediate, cross-signed by Entrust
- //
- // Subject: CN=Digisign Server ID - (Enrich),
- // OU=457608-K,
- // O=Digicert Sdn. Bhd.,
- // C=MY
- // Issuer: CN=Entrust.net Certification Authority (2048)
- // OU=(c) 1999 Entrust.net Limited,
- // OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.),
- // O=Entrust.net
- // Serial: 1184644297 (4c:0e:63:6a)
- add("digicert-server-cross-to-entrust-ca-4C0E636A",
- "-----BEGIN CERTIFICATE-----\n" +
- "MIIEzjCCA7agAwIBAgIETA5jajANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML\n" +
- "RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp\n" +
- "bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5\n" +
- "IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp\n" +
- "ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw0xMDA3MTYxNzIzMzdaFw0xNTA3\n" +
- "MTYxNzUzMzdaMGUxCzAJBgNVBAYTAk1ZMRswGQYDVQQKExJEaWdpY2VydCBTZG4u\n" +
- "IEJoZC4xETAPBgNVBAsTCDQ1NzYwOC1LMSYwJAYDVQQDEx1EaWdpc2lnbiBTZXJ2\n" +
- "ZXIgSUQgLSAoRW5yaWNoKTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB\n" +
- "AMWJ5PQNBkCSWccaszXRDkwqM/n4r8qef+65p21g9FTob9Wb8xtjMQRoctE0Foy0\n" +
- "FyyX3nPF2JAVoBor9cuzSIZE8B2ITM5BQhrv9Qze/kDaOSD3BlU6ap1GwdJvpbLI\n" +
- "Vz4po5zg6YV3ZuiYpyR+vsBZIOVEb7ZX2L7OwmV3WMZhQdF0BMh/SULFcqlyFu6M\n" +
- "3RJdtErU0a9Qt9iqdXZorT5dqjBtYairEFs+E78z4K9EnTgiW+9ML6ZxJhUmyiiM\n" +
- "2fqOjqmiFDXimySItPR/hZ2DTwehthSQNsQ0HI0mYW0Tb3i+6I8nx0uElqOGaAwj\n" +
- "vgvsjJQAqQSKE5D334VsDLECAwEAAaOCATQwggEwMA4GA1UdDwEB/wQEAwIBBjAS\n" +
- "BgNVHRMBAf8ECDAGAQH/AgEAMCcGA1UdJQQgMB4GCCsGAQUFBwMBBggrBgEFBQcD\n" +
- "AgYIKwYBBQUHAwQwMwYIKwYBBQUHAQEEJzAlMCMGCCsGAQUFBzABhhdodHRwOi8v\n" +
- "b2NzcC5lbnRydXN0Lm5ldDBEBgNVHSAEPTA7MDkGBWCDSgEBMDAwLgYIKwYBBQUH\n" +
- "AgEWImh0dHA6Ly93d3cuZGlnaWNlcnQuY29tLm15L2Nwcy5odG0wMgYDVR0fBCsw\n" +
- "KTAnoCWgI4YhaHR0cDovL2NybC5lbnRydXN0Lm5ldC8yMDQ4Y2EuY3JsMBEGA1Ud\n" +
- "DgQKBAhMTswlKAMpgTAfBgNVHSMEGDAWgBRV5IHREYC+2Im5CKMx+aEkCRa5cDAN\n" +
- "BgkqhkiG9w0BAQUFAAOCAQEAl0zvSjpJrHL8MCBrtClbp8WVBJD5MtXChWreA6E3\n" +
- "+YkAsFqsVX7bQzX/yQH4Ub7MJsrIaqTEVD4mHucMo82XZ5TdpkLrXM2POXlrM3kh\n" +
- "Bnn6gkQVmczBtznTRmJ8snDrb84gqj4Zt+l0gpy0pUtNYQA35IfS8hQ6ZHy4qXth\n" +
- "4JMi59WfPkfmNnagU9gAAzoPtTP+lsrT0oI6Lt3XSOHkp2nMHOmZSufKcEXXCwcO\n" +
- "mnUb0C+Sb/akB8O9HEumhLZ9qJqp0qcp8QtXaR6XVybsK0Os1EWDBQDp4/BGQAf6\n" +
- "6rFRc5Mcpd1TETfIKqcVJx20qsx/qjEw/LhFn0gJ7RDixQ==\n" +
- "-----END CERTIFICATE-----");
-
-
- // -----------------------------------------------------------------
- //
- // No longer used certificates
- //
-
- // Subject: CN=Java Media APIs,
- // OU=Java Signed Extensions,
- // OU=Corporate Object Signing,
- // O=Sun Microsystems Inc
- // Issuer: CN=Object Signing CA,
- // OU=Class 2 OnSite Subscriber CA,
- // OU=VeriSign Trust Network,
- // O=Sun Microsystems Inc
- // Serial: 6a:8b:99:91:37:59:4f:89:53:e2:97:18:9f:19:1e:4e
- add("java-media-pretrusted-9F191E4E",
- "-----BEGIN CERTIFICATE-----\n" +
- "MIIFdzCCBF+gAwIBAgIQaouZkTdZT4lT4pcYnxkeTjANBgkqhkiG9w0BAQUFADCB\n" +
- "gzEdMBsGA1UEChMUU3VuIE1pY3Jvc3lzdGVtcyBJbmMxHzAdBgNVBAsTFlZlcmlT\n" +
- "aWduIFRydXN0IE5ldHdvcmsxJTAjBgNVBAsTHENsYXNzIDIgT25TaXRlIFN1YnNj\n" +
- "cmliZXIgQ0ExGjAYBgNVBAMTEU9iamVjdCBTaWduaW5nIENBMB4XDTA5MDUxMjAw\n" +
- "MDAwMFoXDTEyMDUxMTIzNTk1OVowfTEdMBsGA1UEChQUU3VuIE1pY3Jvc3lzdGVt\n" +
- "cyBJbmMxITAfBgNVBAsUGENvcnBvcmF0ZSBPYmplY3QgU2lnbmluZzEfMB0GA1UE\n" +
- "CxQWSmF2YSBTaWduZWQgRXh0ZW5zaW9uczEYMBYGA1UEAxQPSmF2YSBNZWRpYSBB\n" +
- "UElzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl5blzoKTVE8y4Hpz\n" +
- "q6E15RZz1bF5HnYEyYqgHkZXnAKedmYCoMzm1XK8s+gQWShLEvGEAvs5yqarx9gE\n" +
- "nnC21N28aEZgIJMa2/arKxCUkS4pxdGPYGexL9UzSRkUpoBShCZKEGdmX7gfJE2K\n" +
- "/sd9MFvGV5/yZtWXrADzvm0Kd/9mg1KRv1gfrZIq0TJbupoXPYYqb73AkI9eT2ZD\n" +
- "q9MdwD4E5+oojsDFXt8GU/D00fUhtXpYwuplU7D667WHYdJhIah0ST6JywyqcLXG\n" +
- "XSuFTXOgITT2idSHluZVmx3dqJ72u9kPkO4JdJTMDfaK8zgNLaRkiU8Qcj+qhLYH\n" +
- "ytaqcwIDAQABo4IB6jCCAeYwCQYDVR0TBAIwADAOBgNVHQ8BAf8EBAMCB4AwfwYD\n" +
- "VR0fBHgwdjB0oHKgcIZuaHR0cDovL29uc2l0ZWNybC52ZXJpc2lnbi5jb20vU3Vu\n" +
- "TWljcm9zeXN0ZW1zSW5jQ29ycG9yYXRlT2JqZWN0U2lnbmluZ0phdmFTaWduZWRF\n" +
- "eHRlbnNpb25zQ2xhc3NCL0xhdGVzdENSTC5jcmwwHwYDVR0jBBgwFoAUs0crgn5T\n" +
- "tHPKuLsZt76BTQeVx+0wHQYDVR0OBBYEFKS32mVx0gNWTeS4ProHEaeSpvvIMDsG\n" +
- "CCsGAQUFBwEBBC8wLTArBggrBgEFBQcwAYYfaHR0cDovL29uc2l0ZS1vY3NwLnZl\n" +
- "cmlzaWduLmNvbTCBtQYDVR0gBIGtMIGqMDkGC2CGSAGG+EUBBxcCMCowKAYIKwYB\n" +
- "BQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEwbQYLYIZIAYb3AIN9\n" +
- "nD8wXjAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuc3VuLmNvbS9wa2kvY3BzMDMG\n" +
- "CCsGAQUFBwICMCcaJVZhbGlkYXRlZCBGb3IgU3VuIEJ1c2luZXNzIE9wZXJhdGlv\n" +
- "bnMwEwYDVR0lBAwwCgYIKwYBBQUHAwMwDQYJKoZIhvcNAQEFBQADggEBAAe6BO4W\n" +
- "3TSNWfezyelJs6kE3HfulT6Bdyz4UUoh9ykXcV8nRwT+kh25I5MdyG2GfkJoADPR\n" +
- "VhC5DYo13UFpIsTNVjq+hGYe2hML93bN7ad9SxCCyjHUo3yMz2qgBbHZI3VA9ZHA\n" +
- "aWM4Tx0saMwbcnVvlbuGh+PXvStfypJqYT6lzcdFfjNVX4FI/QQNGhBswMY51tC8\n" +
- "GTBCL2qhJon0gSCU4zaawDOf7+XxJWirLamYL1Aal1/h2z2sFrvA/1ftxtU3kZ6I\n" +
- "7De8DyoHeZg7pYGdrj7g+lPhCga/WvEhN152I+aP08YbFcJHYmK05ngl/Ye4c6Bd\n" +
- "cdrdfbw6QzEUIYY=\n" +
- "-----END CERTIFICATE-----");
-
- // Subject: CN=JavaFX 1.0 Runtime,
- // OU=Java Signed Extensions,
- // OU=Corporate Object Signing,
- // O=Sun Microsystems Inc
- // Issuer: CN=Object Signing CA,
- // OU=Class 2 OnSite Subscriber CA,
- // OU=VeriSign Trust Network,
- // O=Sun Microsystems Inc
- // Serial: 55:c0:e6:44:59:59:79:9e:d9:26:f1:b0:4a:1e:f0:27
- add("java-fx10-pretrusted-4A1EF027",
- "-----BEGIN CERTIFICATE-----\n" +
- "MIIFezCCBGOgAwIBAgIQVcDmRFlZeZ7ZJvGwSh7wJzANBgkqhkiG9w0BAQUFADCB\n" +
- "gzEdMBsGA1UEChMUU3VuIE1pY3Jvc3lzdGVtcyBJbmMxHzAdBgNVBAsTFlZlcmlT\n" +
- "aWduIFRydXN0IE5ldHdvcmsxJTAjBgNVBAsTHENsYXNzIDIgT25TaXRlIFN1YnNj\n" +
- "cmliZXIgQ0ExGjAYBgNVBAMTEU9iamVjdCBTaWduaW5nIENBMB4XDTA4MTAwOTAw\n" +
- "MDAwMFoXDTExMTAwOTIzNTk1OVowgYAxHTAbBgNVBAoUFFN1biBNaWNyb3N5c3Rl\n" +
- "bXMgSW5jMSEwHwYDVQQLFBhDb3Jwb3JhdGUgT2JqZWN0IFNpZ25pbmcxHzAdBgNV\n" +
- "BAsUFkphdmEgU2lnbmVkIEV4dGVuc2lvbnMxGzAZBgNVBAMUEkphdmFGWCAxLjAg\n" +
- "UnVudGltZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM+WDc6+bu+4\n" +
- "tmAcS/lBtUc02WOt9QZpVsXg9cG2pu/8bUtmDELa8iiYBVFpIs8DU58HLrGQtCUY\n" +
- "SIAGOVPsOJoN29UKCDWfY9j5JeVhfhMGqk9DwrWhzgsjy4cpZ1pIp+k/fJ8zT8Ul\n" +
- "aYLpow1vg3UNddsmwz02tN7cOrMw9WYIG4CRYnY1OrtJSfe2pYzheC4zyvR+aiVl\n" +
- "nang2OtqikSQsNFOFHsLOJFxngy9LrO8evDSu25VTKI6zlWU6/bMeqtztJPN0VOn\n" +
- "NyUrJZvkxZ207Jg0T693BGSxNC1n+ihztXogql8950M/pEuUbDjylv5FFvlp6DSB\n" +
- "dDT2MkutmyMCAwEAAaOCAeowggHmMAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgeA\n" +
- "MH8GA1UdHwR4MHYwdKByoHCGbmh0dHA6Ly9vbnNpdGVjcmwudmVyaXNpZ24uY29t\n" +
- "L1N1bk1pY3Jvc3lzdGVtc0luY0NvcnBvcmF0ZU9iamVjdFNpZ25pbmdKYXZhU2ln\n" +
- "bmVkRXh0ZW5zaW9uc0NsYXNzQi9MYXRlc3RDUkwuY3JsMB8GA1UdIwQYMBaAFLNH\n" +
- "K4J+U7Rzyri7Gbe+gU0HlcftMB0GA1UdDgQWBBTjgufVi3XJ3gx1ewsA6Rr7BR4Z\n" +
- "zjA7BggrBgEFBQcBAQQvMC0wKwYIKwYBBQUHMAGGH2h0dHA6Ly9vbnNpdGUtb2Nz\n" +
- "cC52ZXJpc2lnbi5jb20wgbUGA1UdIASBrTCBqjA5BgtghkgBhvhFAQcXAjAqMCgG\n" +
- "CCsGAQUFBwIBFhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhMG0GC2CGSAGG\n" +
- "9wCDfZw/MF4wJwYIKwYBBQUHAgEWG2h0dHBzOi8vd3d3LnN1bi5jb20vcGtpL2Nw\n" +
- "czAzBggrBgEFBQcCAjAnGiVWYWxpZGF0ZWQgRm9yIFN1biBCdXNpbmVzcyBPcGVy\n" +
- "YXRpb25zMBMGA1UdJQQMMAoGCCsGAQUFBwMDMA0GCSqGSIb3DQEBBQUAA4IBAQAB\n" +
- "YVJTTVe7rzyTO4jc3zajErOT/COkdQTfNo0eIX1QbNynFieJvwY/jRzUZwjktIFR\n" +
- "2p4JtbpHGAtKtjOAOTieQ8xdDOoC1djzpE7/AbMvuvlTavtUKT+F7tPdhfXgWXJV\n" +
- "6Wbt8jryKyk3zZGiEhauIwZUkfjRkEtffEmZWLUd8c8rURJjfC/XHH2oyurscoxc\n" +
- "CjX29c9ynxSiS/VvQp1an0HvErGh69N48wj7cj8mtZ1yHzd2XCzSSR1OfTPfk0Pt\n" +
- "yg51p7yJaFiH21PTZegEL6zyVNOYBTKwwIi2OzpwYalD3uvK6e3OKDrfFCOxu17u\n" +
- "4PveESbrdyrmvLe7IVez\n" +
- "-----END CERTIFICATE-----");
-
- // Subject: CN=JavaFX Runtime,
- // OU=Java Signed Extensions,
- // OU=Corporate Object Signing,
- // O=Sun Microsystems Inc
- // Issuer: CN=Object Signing CA,
- // OU=Class 2 OnSite Subscriber CA,
- // OU=VeriSign Trust Network,
- // O=Sun Microsystems Inc
- // Serial: 47:f4:55:f1:da:4a:5e:f9:e3:f7:a8:03:62:17:c0:ff
- add("javafx-runtime-pretrusted-6217C0FF",
- "-----BEGIN CERTIFICATE-----\n" +
- "MIIFdjCCBF6gAwIBAgIQR/RV8dpKXvnj96gDYhfA/zANBgkqhkiG9w0BAQUFADCB\n" +
- "gzEdMBsGA1UEChMUU3VuIE1pY3Jvc3lzdGVtcyBJbmMxHzAdBgNVBAsTFlZlcmlT\n" +
- "aWduIFRydXN0IE5ldHdvcmsxJTAjBgNVBAsTHENsYXNzIDIgT25TaXRlIFN1YnNj\n" +
- "cmliZXIgQ0ExGjAYBgNVBAMTEU9iamVjdCBTaWduaW5nIENBMB4XDTA5MDEyOTAw\n" +
- "MDAwMFoXDTEyMDEyOTIzNTk1OVowfDEdMBsGA1UEChQUU3VuIE1pY3Jvc3lzdGVt\n" +
- "cyBJbmMxITAfBgNVBAsUGENvcnBvcmF0ZSBPYmplY3QgU2lnbmluZzEfMB0GA1UE\n" +
- "CxQWSmF2YSBTaWduZWQgRXh0ZW5zaW9uczEXMBUGA1UEAxQOSmF2YUZYIFJ1bnRp\n" +
- "bWUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCIzd0fAk8mI9ONc6RJ\n" +
- "aGieioK2FLdXEwj8zL3vdGDVmBwyR1zwYkaOIFFgF9IW/8qc4iAYA5sGUY+0g8q3\n" +
- "5DuYAxfTzBB5KdaYvbuq6GGnoHIWmTirXY+1friFp8lyXSvtuEaGB1VHaBoZchEg\n" +
- "k+UgeVDA43dHwcT1Ov3DePczJRUes8T/QHzLX+BxUDG43vjyncCEO/AjqLZxXEz2\n" +
- "xrNbKLcH3lGMJK7hdbfssUfF5BjC38Hn71HauYlA43b2no+2y0Sjulwzez2YPbDC\n" +
- "0GLR3TnKtA8dqOrnl5t3DniDbfOBNtBE3VOydJO0XW57Ng1HRXD023nm9ECPY2xp\n" +
- "0N/pAgMBAAGjggHqMIIB5jAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIHgDB/BgNV\n" +
- "HR8EeDB2MHSgcqBwhm5odHRwOi8vb25zaXRlY3JsLnZlcmlzaWduLmNvbS9TdW5N\n" +
- "aWNyb3N5c3RlbXNJbmNDb3Jwb3JhdGVPYmplY3RTaWduaW5nSmF2YVNpZ25lZEV4\n" +
- "dGVuc2lvbnNDbGFzc0IvTGF0ZXN0Q1JMLmNybDAfBgNVHSMEGDAWgBSzRyuCflO0\n" +
- "c8q4uxm3voFNB5XH7TAdBgNVHQ4EFgQUvOdd0cKPj+Yik/iOBwTdphh5A+gwOwYI\n" +
- "KwYBBQUHAQEELzAtMCsGCCsGAQUFBzABhh9odHRwOi8vb25zaXRlLW9jc3AudmVy\n" +
- "aXNpZ24uY29tMIG1BgNVHSAEga0wgaowOQYLYIZIAYb4RQEHFwIwKjAoBggrBgEF\n" +
- "BQcCARYcaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYTBtBgtghkgBhvcAg32c\n" +
- "PzBeMCcGCCsGAQUFBwIBFhtodHRwczovL3d3dy5zdW4uY29tL3BraS9jcHMwMwYI\n" +
- "KwYBBQUHAgIwJxolVmFsaWRhdGVkIEZvciBTdW4gQnVzaW5lc3MgT3BlcmF0aW9u\n" +
- "czATBgNVHSUEDDAKBggrBgEFBQcDAzANBgkqhkiG9w0BAQUFAAOCAQEAbGcf2NjL\n" +
- "AI93HG6ny2BbepaZA1a8xa/R6uUc7xV+Qw6MgLwFD4Q4i6LWUztQDvg9l68MM2/i\n" +
- "Y9LEi1KM4lcNbK5+D+t9x98wXBiuojXhVdp5ZmC03EyEBbriopdBsmXVLDSu/Y3+\n" +
- "zowOO5xwpMK3dbgsSDs2Vt0UosD3FTcRaD3GNfOhXMp+o1grHNiXF9YgkmdQbPPZ\n" +
- "DQ2KBhFPCRJXBGvyKOqno/DTg0sQ3crGH/C4/4t7mnQXWldZotmJUZ0ONc9oD+Q1\n" +
- "JAaguUKqIwn9yZ093ie+JWHbYNid9IIIPXYgtRxmf9a376WBhqhu56uJftBJ7x9g\n" +
- "eQ7Lot6CSWCiFw==\n" +
- "-----END CERTIFICATE-----");
-
- //
- // Compromised Solaris INTERNAL DEVELOPMENT USE ONLY certificate
- //
-
- // Subject: CN=Solaris INTERNAL DEVELOPMENT USE ONLY,
- // OU=Solaris Cryptographic Framework,
- // OU=Corporate Object Signing,
- // O=Sun Microsystems Inc
- // Issuer: CN=Object Signing CA,
- // OU=Class 2 OnSite Subscriber CA,
- // OU=VeriSign Trust Network,
- // O=Sun Microsystems Inc
- // Serial: 77:29:77:52:6a:19:7b:9a:a6:a2:c7:99:a0:e1:cd:8c
- add("solaris-internal-dev-A0E1CD8C",
- "-----BEGIN CERTIFICATE-----\n" +
- "MIIFHjCCBAagAwIBAgIQdyl3UmoZe5qmoseZoOHNjDANBgkqhkiG9w0BAQUFADCB\n" +
- "gzEdMBsGA1UEChMUU3VuIE1pY3Jvc3lzdGVtcyBJbmMxHzAdBgNVBAsTFlZlcmlT\n" +
- "aWduIFRydXN0IE5ldHdvcmsxJTAjBgNVBAsTHENsYXNzIDIgT25TaXRlIFN1YnNj\n" +
- "cmliZXIgQ0ExGjAYBgNVBAMTEU9iamVjdCBTaWduaW5nIENBMB4XDTA3MDEwNDAw\n" +
- "MDAwMFoXDTEwMDEwMzIzNTk1OVowgZwxHTAbBgNVBAoUFFN1biBNaWNyb3N5c3Rl\n" +
- "bXMgSW5jMSEwHwYDVQQLFBhDb3Jwb3JhdGUgT2JqZWN0IFNpZ25pbmcxKDAmBgNV\n" +
- "BAsUH1NvbGFyaXMgQ3J5cHRvZ3JhcGhpYyBGcmFtZXdvcmsxLjAsBgNVBAMUJVNv\n" +
- "bGFyaXMgSU5URVJOQUwgREVWRUxPUE1FTlQgVVNFIE9OTFkwgZ8wDQYJKoZIhvcN\n" +
- "AQEBBQADgY0AMIGJAoGBALbNU4hf3mD5ArDI9pjgioAyvV3bjMPRQdCZniIeGJBp\n" +
- "odFlSEH+Mh64W1DsY8coeZ7FvvGJkx9IpTMJW9k8w1oJK9UNqHyAQfaYjQyXi3xQ\n" +
- "LJp62EvYdGfDlwOZejEcR/MbzZG+GOPMMvQj5+xyFDvLXNGfQNTnxw2qnBgCJXjj\n" +
- "AgMBAAGjggH1MIIB8TAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIHgDCBiQYDVR0f\n" +
- "BIGBMH8wfaB7oHmGd2h0dHA6Ly9vbnNpdGVjcmwudmVyaXNpZ24uY29tL1N1bk1p\n" +
- "Y3Jvc3lzdGVtc0luY0NvcnBvcmF0ZU9iamVjdFNpZ25pbmdTb2xhcmlzQ3J5cHRv\n" +
- "Z3JhcGhpY0ZyYW1ld29ya0NsYXNzQi9MYXRlc3RDUkwuY3JsMB8GA1UdIwQYMBaA\n" +
- "FLNHK4J+U7Rzyri7Gbe+gU0HlcftMB0GA1UdDgQWBBRpfiGYkehTnsIzuN2H6AFb\n" +
- "VCZG8jA7BggrBgEFBQcBAQQvMC0wKwYIKwYBBQUHMAGGH2h0dHA6Ly9vbnNpdGUt\n" +
- "b2NzcC52ZXJpc2lnbi5jb20wgbUGA1UdIASBrTCBqjA5BgtghkgBhvhFAQcXAjAq\n" +
- "MCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhMG0GC2CG\n" +
- "SAGG9wCDfZw/MF4wJwYIKwYBBQUHAgEWG2h0dHBzOi8vd3d3LnN1bi5jb20vcGtp\n" +
- "L2NwczAzBggrBgEFBQcCAjAnFiVWYWxpZGF0ZWQgRm9yIFN1biBCdXNpbmVzcyBP\n" +
- "cGVyYXRpb25zMBMGA1UdJQQMMAoGCCsGAQUFBwMDMA0GCSqGSIb3DQEBBQUAA4IB\n" +
- "AQCG5soy3LFHTFbA8/5SzDRhQoJkHUnOP0t3b6nvX6vZYRp649fje7TQOPRm1pFd\n" +
- "CZ17J+tggdZwgzTqY4aYpJ00jZaK6pV37q/vgFC/ia6jDs8Q+ly9cEcadBZ5loYg\n" +
- "cmxp9p57W2MNWx8VA8oFdNtKfF0jUNXbLNtvwGHmgR6YcwLrGN1b6/9Lt9bO3ODl\n" +
- "FO+ZDwkfQz5ClUVrTx2dGBvKRYFqSG5S8JAfsgYhPvcacUQkA7ExyKvfRXLWVrce\n" +
- "ZiPpcElbx+819H2sAPvVvparVeAruZGMAtejHZp9NFoowKen5drJp9VxePS4eM49\n" +
- "3DepB6lKRrNRw66LNQol4ZBz\n" +
- "-----END CERTIFICATE-----");
-
-
- // -----------------------------------------------------------------
- // Compromised CAs of DigiNotar
- //
- // Reported by Fox-IT in its interim report on September 5, 2011,
- // "DigiNotar Certificate Authority breach 'Operation Black Tulip'".
- //
-
- //
- // Compromised DigiNotar Cyber CA
- //
-
- // DigiNotar intermediate, cross-signed by CyberTrust
- //
- // Subject: EMAILADDRESS=info@diginotar.nl, CN=DigiNotar Cyber CA,
- // O=DigiNotar, C=NL
- // Issuer: CN=GTE CyberTrust Global Root,
- // OU=GTE CyberTrust Solutions, Inc.,
- // O=GTE Corporation,
- // C=US
- // Serial: 120000525 (07:27:10:0D)
- add("info-at-diginotar-cyber-ca-cross-to-gte-cybertrust-0727100D",
- "-----BEGIN CERTIFICATE-----\n" +
- "MIIFWjCCBMOgAwIBAgIEBycQDTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV\n" +
- "UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU\n" +
- "cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds\n" +
- "b2JhbCBSb290MB4XDTA2MTAwNDEwNTQxMVoXDTExMTAwNDEwNTMxMVowYDELMAkG\n" +
- "A1UEBhMCTkwxEjAQBgNVBAoTCURpZ2lOb3RhcjEbMBkGA1UEAxMSRGlnaU5vdGFy\n" +
- "IEN5YmVyIENBMSAwHgYJKoZIhvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCCAiIw\n" +
- "DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANLOFQotqF6EZ639vu9Gx8i5z3P8\n" +
- "9DS5+SxD52ATPXrjss87Z2yQrcC5P4RS8DVC3HTcKDu9UrSnrHJFF8bwieu0qiXy\n" +
- "XUte0dmHutZ9fPXOMp8QM8WxSrtekTHC0OlBwpFkfglBO9uLCDdqqspS3rU5HsCI\n" +
- "A6U/i5kTYUO1m4Kz7iBvz6FEouova0CfjytXraFTwoUiaZ2gP1HfC0GRDaXhqKpc\n" +
- "SQhdvd5wQbEPyWNr0380dAIvNFp4dRxoeoFnivPaQPBgY/SSINcDpj2jHmfEhBtB\n" +
- "pcmM5r3qSLYFFgizNxJa92E89zhvLpfgb1Y4VNMota0Ubi5LZLUnZbd1JQm2Bz2V\n" +
- "VgIKgmCyc0XgMyZRdJq51FAc9k1bW1JSE1qmf6cO4ehBVGeYjIfVydNsy9NUkgYJ\n" +
- "NEH3gW8/nsl8dVWw58Gzd+jDxAA1lUBwEEoF3iW7n1mlZLxHYL9g43aLE1Xd4XR6\n" +
- "uc8kpmp/3mQiRFhogmoQ+T3lPhu5vfwi9GAEibtVbShV+t6OjRshFNc3izR7Tfay\n" +
- "shDPM7F9HGKZSMsrbHaWVb8ZDR0fu2WqG46ZtcYokOWCLXhQIJr9eS8kf/CJKWn0\n" +
- "fc1zvrPtTsHR7VJej/e4142HrbLZG1ES/1az4a80fVykeIgQnp0DxqWqoiRR90kU\n" +
- "xbHuWUOV36toKDA/AgMBAAGjggGGMIIBgjASBgNVHRMBAf8ECDAGAQH/AgEBMFMG\n" +
- "A1UdIARMMEowSAYJKwYBBAGxPgEAMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93d3cu\n" +
- "cHVibGljLXRydXN0LmNvbS9DUFMvT21uaVJvb3QuaHRtbDAOBgNVHQ8BAf8EBAMC\n" +
- "AQYwgaAGA1UdIwSBmDCBlYAUpgwdn2H/Bxe1vzhG20Mw1Y6wUgaheaR3MHUxCzAJ\n" +
- "BgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdU\n" +
- "RSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVy\n" +
- "VHJ1c3QgR2xvYmFsIFJvb3SCAgGlMEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly93\n" +
- "d3cucHVibGljLXRydXN0LmNvbS9jZ2ktYmluL0NSTC8yMDE4L2NkcC5jcmwwHQYD\n" +
- "VR0OBBYEFKv5aN/PSjfXe0WMX3LeQETDZbvCMA0GCSqGSIb3DQEBBQUAA4GBAI9o\n" +
- "a6VbB7pEZg4cqFwwezPkCiYE/O+eGjjWLqEf0JlHwnVkJP2eOyh2uSYoYZEMbSz4\n" +
- "BJ98UAHV42mv7xXSRZskCSpmBU8lgcpdvqrBWSeuM46C9990sFWzjvjnN8huqlZE\n" +
- "9r1TgSOWPbT6MopTZkQloiXGpjwljPDgKAYityZB\n" +
- "-----END CERTIFICATE-----");
-
- // DigiNotar intermediate, cross-signed by CyberTrust
- //
- // Subject: CN=DigiNotar Cyber CA, O=DigiNotar, C=NL
- // Issuer: CN=GTE CyberTrust Global Root,
- // OU=GTE CyberTrust Solutions, Inc.,
- // O=GTE Corporation,
- // C=US
- // Serial: 120000505 (07:27:0F:F9)
- add("diginotar-cyber-ca-cross-to-gte-cybertrust-07270FF9",
- "-----BEGIN CERTIFICATE-----\n" +
- "MIIFODCCBKGgAwIBAgIEBycP+TANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV\n" +
- "UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU\n" +
- "cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds\n" +
- "b2JhbCBSb290MB4XDTA2MDkyMDA5NDUzMloXDTEzMDkyMDA5NDQwNlowPjELMAkG\n" +
- "A1UEBhMCTkwxEjAQBgNVBAoTCURpZ2lOb3RhcjEbMBkGA1UEAxMSRGlnaU5vdGFy\n" +
- "IEN5YmVyIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0s4VCi2o\n" +
- "XoRnrf2+70bHyLnPc/z0NLn5LEPnYBM9euOyzztnbJCtwLk/hFLwNULcdNwoO71S\n" +
- "tKesckUXxvCJ67SqJfJdS17R2Ye61n189c4ynxAzxbFKu16RMcLQ6UHCkWR+CUE7\n" +
- "24sIN2qqylLetTkewIgDpT+LmRNhQ7WbgrPuIG/PoUSi6i9rQJ+PK1etoVPChSJp\n" +
- "naA/Ud8LQZENpeGoqlxJCF293nBBsQ/JY2vTfzR0Ai80Wnh1HGh6gWeK89pA8GBj\n" +
- "9JIg1wOmPaMeZ8SEG0GlyYzmvepItgUWCLM3Elr3YTz3OG8ul+BvVjhU0yi1rRRu\n" +
- "LktktSdlt3UlCbYHPZVWAgqCYLJzReAzJlF0mrnUUBz2TVtbUlITWqZ/pw7h6EFU\n" +
- "Z5iMh9XJ02zL01SSBgk0QfeBbz+eyXx1VbDnwbN36MPEADWVQHAQSgXeJbufWaVk\n" +
- "vEdgv2DjdosTVd3hdHq5zySman/eZCJEWGiCahD5PeU+G7m9/CL0YASJu1VtKFX6\n" +
- "3o6NGyEU1zeLNHtN9rKyEM8zsX0cYplIyytsdpZVvxkNHR+7Zaobjpm1xiiQ5YIt\n" +
- "eFAgmv15LyR/8IkpafR9zXO+s+1OwdHtUl6P97jXjYetstkbURL/VrPhrzR9XKR4\n" +
- "iBCenQPGpaqiJFH3SRTFse5ZQ5Xfq2goMD8CAwEAAaOCAYYwggGCMBIGA1UdEwEB\n" +
- "/wQIMAYBAf8CAQEwUwYDVR0gBEwwSjBIBgkrBgEEAbE+AQAwOzA5BggrBgEFBQcC\n" +
- "ARYtaHR0cDovL3d3dy5wdWJsaWMtdHJ1c3QuY29tL0NQUy9PbW5pUm9vdC5odG1s\n" +
- "MA4GA1UdDwEB/wQEAwIBBjCBoAYDVR0jBIGYMIGVgBSmDB2fYf8HF7W/OEbbQzDV\n" +
- "jrBSBqF5pHcwdTELMAkGA1UEBhMCVVMxGDAWBgNVBAoTD0dURSBDb3Jwb3JhdGlv\n" +
- "bjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1c3QgU29sdXRpb25zLCBJbmMuMSMwIQYD\n" +
- "VQQDExpHVEUgQ3liZXJUcnVzdCBHbG9iYWwgUm9vdIICAaUwRQYDVR0fBD4wPDA6\n" +
- "oDigNoY0aHR0cDovL3d3dy5wdWJsaWMtdHJ1c3QuY29tL2NnaS1iaW4vQ1JMLzIw\n" +
- "MTgvY2RwLmNybDAdBgNVHQ4EFgQUq/lo389KN9d7RYxfct5ARMNlu8IwDQYJKoZI\n" +
- "hvcNAQEFBQADgYEACcpiD427SuDUejUrBi3RKGG2rAH7g0m8rtQvLYauGYOl1h0T\n" +
- "4he+/jJ06XoUOMqUXvcpAWlxG5Ea/aO7qh3Ke+IW/aGjDvMMX7LhIDGUK16Sdu36\n" +
- "6bUjpr8KOwOpb1JgVM1f6bcvfKIn/UGDdbYN+3gm87FF6TKVKho1IZXFonU=\n" +
- "-----END CERTIFICATE-----");
-
- // DigiNotar intermediate, cross-signed by CyberTrust
- //
- // Subject: CN=DigiNotar Cyber CA, O=DigiNotar, C=NL
- // Issuer: CN=GTE CyberTrust Global Root,
- // OU=GTE CyberTrust Solutions, Inc.,
- // O=GTE Corporation,
- // C=US
- // Serial: 120000515 (07:27:10:03)
- add("diginotar-cyber-ca-cross-to-gte-cybertrust-07271003",
- "-----BEGIN CERTIFICATE-----\n" +
- "MIIFODCCBKGgAwIBAgIEBycQAzANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV\n" +
- "UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU\n" +
- "cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds\n" +
- "b2JhbCBSb290MB4XDTA2MDkyNzEwNTMzMloXDTExMDkyNzEwNTIzMFowPjELMAkG\n" +
- "A1UEBhMCTkwxEjAQBgNVBAoTCURpZ2lOb3RhcjEbMBkGA1UEAxMSRGlnaU5vdGFy\n" +
- "IEN5YmVyIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0s4VCi2o\n" +
- "XoRnrf2+70bHyLnPc/z0NLn5LEPnYBM9euOyzztnbJCtwLk/hFLwNULcdNwoO71S\n" +
- "tKesckUXxvCJ67SqJfJdS17R2Ye61n189c4ynxAzxbFKu16RMcLQ6UHCkWR+CUE7\n" +
- "24sIN2qqylLetTkewIgDpT+LmRNhQ7WbgrPuIG/PoUSi6i9rQJ+PK1etoVPChSJp\n" +
- "naA/Ud8LQZENpeGoqlxJCF293nBBsQ/JY2vTfzR0Ai80Wnh1HGh6gWeK89pA8GBj\n" +
- "9JIg1wOmPaMeZ8SEG0GlyYzmvepItgUWCLM3Elr3YTz3OG8ul+BvVjhU0yi1rRRu\n" +
- "LktktSdlt3UlCbYHPZVWAgqCYLJzReAzJlF0mrnUUBz2TVtbUlITWqZ/pw7h6EFU\n" +
- "Z5iMh9XJ02zL01SSBgk0QfeBbz+eyXx1VbDnwbN36MPEADWVQHAQSgXeJbufWaVk\n" +
- "vEdgv2DjdosTVd3hdHq5zySman/eZCJEWGiCahD5PeU+G7m9/CL0YASJu1VtKFX6\n" +
- "3o6NGyEU1zeLNHtN9rKyEM8zsX0cYplIyytsdpZVvxkNHR+7Zaobjpm1xiiQ5YIt\n" +
- "eFAgmv15LyR/8IkpafR9zXO+s+1OwdHtUl6P97jXjYetstkbURL/VrPhrzR9XKR4\n" +
- "iBCenQPGpaqiJFH3SRTFse5ZQ5Xfq2goMD8CAwEAAaOCAYYwggGCMBIGA1UdEwEB\n" +
- "/wQIMAYBAf8CAQEwUwYDVR0gBEwwSjBIBgkrBgEEAbE+AQAwOzA5BggrBgEFBQcC\n" +
- "ARYtaHR0cDovL3d3dy5wdWJsaWMtdHJ1c3QuY29tL0NQUy9PbW5pUm9vdC5odG1s\n" +
- "MA4GA1UdDwEB/wQEAwIBBjCBoAYDVR0jBIGYMIGVgBSmDB2fYf8HF7W/OEbbQzDV\n" +
- "jrBSBqF5pHcwdTELMAkGA1UEBhMCVVMxGDAWBgNVBAoTD0dURSBDb3Jwb3JhdGlv\n" +
- "bjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1c3QgU29sdXRpb25zLCBJbmMuMSMwIQYD\n" +
- "VQQDExpHVEUgQ3liZXJUcnVzdCBHbG9iYWwgUm9vdIICAaUwRQYDVR0fBD4wPDA6\n" +
- "oDigNoY0aHR0cDovL3d3dy5wdWJsaWMtdHJ1c3QuY29tL2NnaS1iaW4vQ1JMLzIw\n" +
- "MTgvY2RwLmNybDAdBgNVHQ4EFgQUq/lo389KN9d7RYxfct5ARMNlu8IwDQYJKoZI\n" +
- "hvcNAQEFBQADgYEAWcyGZhizJlRP1jjNupZey+yZG6oMDW4Z11boriMHbYPCndBE\n" +
- "bVh07zmPbZsihOw9w/vm5KbVX5CgxUv4Rhzh/20Faixf3P3bpWg0qgzHVVusNVR/\n" +
- "P50aKkpdK3hp+QLl56e+lWOddSAINIpmcuyDI1hyuzB+GJEASm9tNU/6rs8=\n" +
- "-----END CERTIFICATE-----");
-
- //
- // Compromised DigiNotar Root CA
- //
-
- // DigiNotar intermediate, cross-signed by Entrust
- //
- // Subject: EMAILADDRESS=info@diginotar.nl,
- // CN=DigiNotar Root CA,
- // O=DigiNotar, C=NL
- // Issuer: CN=Entrust.net Secure Server Certification Authority
- // OU=(c) 1999 Entrust.net Limited,
- // OU=www.entrust.net/CPS incorp. by ref. (limits liab.),
- // O=Entrust.net,
- // C=US,
- // Serial: 1184644297 (46:9C:3C:C9)
- add("info-at-diginotar-root-ca-cross-to-entrust-secure-server-469C3CC9",
- "-----BEGIN CERTIFICATE-----\n" +
- "MIIFSDCCBLGgAwIBAgIERpw8yTANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC\n" +
- "VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u\n" +
- "ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc\n" +
- "KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u\n" +
- "ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNzA0\n" +
- "MjYwNTAwMDBaFw0xMzA4MTQyMDEyMzZaMF8xCzAJBgNVBAYTAk5MMRIwEAYDVQQK\n" +
- "EwlEaWdpTm90YXIxGjAYBgNVBAMTEURpZ2lOb3RhciBSb290IENBMSAwHgYJKoZI\n" +
- "hvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCCAiIwDQYJKoZIhvcNAQEBBQADggIP\n" +
- "ADCCAgoCggIBAKywWMEAvdghCAsrmv5uVjAFnxt3kBBBXMMNhxF3joHxynzpjGrt\n" +
- "OHQ1u9rf+bvACTe0lnOBfTMamDn3k2+Vfz25sXWHulFI6ItwPpUExdi2wxbZiLCx\n" +
- "hx1w2oa0DxSLes8Q0XQ2ohJ7d4ZKeeZ73wIRaKVOhq40WJskE3hWIiUeAYtLUXH7\n" +
- "gsxZlmmIWmhTxbkNAjfLS7xmSpB+KgsFB+0WX1WQddhGyRuD4gi+8SPMmR3WKg+D\n" +
- "IBVYJ4Iu+uIiwkmxuQGBap1tnUB3aHZOISpthECFTnaZfILz87cCWdQmARuO361T\n" +
- "BtGuGN3isjrL14g4jqxbKbkZ05j5GAPPSIKGZgsbaQ/J6ziIeiYaBUyS1yTUlvKs\n" +
- "Ui2jR9VS9j/+zoQGcKaqPqLytlY0GFei5IFt58rwatPHkWsCg0F8Fe9rmmRe49A8\n" +
- "5bHre12G+8vmd0nNo2Xc97mcuOQLX5PPzDAaMhzOHGOVpfnq4XSLnukrqTB7oBgf\n" +
- "DhgL5Vup09FsHgdnj5FLqYq80maqkwGIspH6MVzVpsFSCAnNCmOi0yKm6KHZOQaX\n" +
- "9W6NApCMFHs/gM0bnLrEWHIjr7ZWn8Z6QjMpBz+CyeYfBQ3NTCg2i9PIPhzGiO9e\n" +
- "7olk6R3r2ol+MqZp0d3MiJ/R0MlmIdwGZ8WUepptYkx9zOBkgLKeR46jAgMBAAGj\n" +
- "ggEmMIIBIjASBgNVHRMBAf8ECDAGAQH/AgEBMCcGA1UdJQQgMB4GCCsGAQUFBwMB\n" +
- "BggrBgEFBQcDAgYIKwYBBQUHAwQwEQYDVR0gBAowCDAGBgRVHSAAMDMGCCsGAQUF\n" +
- "BwEBBCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMwYD\n" +
- "VR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5lbnRydXN0Lm5ldC9zZXJ2ZXIxLmNy\n" +
- "bDAdBgNVHQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wCwYDVR0PBAQDAgEGMB8G\n" +
- "A1UdIwQYMBaAFPAXYhNVPbP/CgBr+1CEl/PtYtAaMBkGCSqGSIb2fQdBAAQMMAob\n" +
- "BFY3LjEDAgCBMA0GCSqGSIb3DQEBBQUAA4GBAI979rBep8tu3TeLunapgsZ0jtXp\n" +
- "GDFjKWSk87dj1jCyYi+q/GyDyZ6ZQZNRP0sF+6twscq05lClWNy3TROMp7QeuoLO\n" +
- "G7Utw3OJaswUtp4YglANMRTHEe3g9ltifUXRH5tSuy7u6yi4LD4WTm5ULP6r/g6l\n" +
- "0CnjXYb0+b1Fmz6U\n" +
- "-----END CERTIFICATE-----");
-
- // DigiNotar intermediate, cross-signed by Entrust
- //
- // Subject: EMAILADDRESS=info@diginotar.nl,
- // CN=DigiNotar Root CA,
- // O=DigiNotar, C=NL
- // Issuer: CN=Entrust.net Secure Server Certification Authority
- // OU=(c) 1999 Entrust.net Limited,
- // OU=www.entrust.net/CPS incorp. by ref. (limits liab.),
- // O=Entrust.net,
- // C=US,
- // Serial: 1184640175 (46:9C:2C:AF)
- add("info-at-diginotar-root-ca-cross-to-entrust-secure-server-469C2CAF",
- "-----BEGIN CERTIFICATE-----\n" +
- "MIIFSDCCBLGgAwIBAgIERpwsrzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC\n" +
- "VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u\n" +
- "ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc\n" +
- "KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u\n" +
- "ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNzA3\n" +
- "MjYxNTU3MzlaFw0xMzA4MjYxNjI3MzlaMF8xCzAJBgNVBAYTAk5MMRIwEAYDVQQK\n" +
- "EwlEaWdpTm90YXIxGjAYBgNVBAMTEURpZ2lOb3RhciBSb290IENBMSAwHgYJKoZI\n" +
- "hvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCCAiIwDQYJKoZIhvcNAQEBBQADggIP\n" +
- "ADCCAgoCggIBAKywWMEAvdghCAsrmv5uVjAFnxt3kBBBXMMNhxF3joHxynzpjGrt\n" +
- "OHQ1u9rf+bvACTe0lnOBfTMamDn3k2+Vfz25sXWHulFI6ItwPpUExdi2wxbZiLCx\n" +
- "hx1w2oa0DxSLes8Q0XQ2ohJ7d4ZKeeZ73wIRaKVOhq40WJskE3hWIiUeAYtLUXH7\n" +
- "gsxZlmmIWmhTxbkNAjfLS7xmSpB+KgsFB+0WX1WQddhGyRuD4gi+8SPMmR3WKg+D\n" +
- "IBVYJ4Iu+uIiwkmxuQGBap1tnUB3aHZOISpthECFTnaZfILz87cCWdQmARuO361T\n" +
- "BtGuGN3isjrL14g4jqxbKbkZ05j5GAPPSIKGZgsbaQ/J6ziIeiYaBUyS1yTUlvKs\n" +
- "Ui2jR9VS9j/+zoQGcKaqPqLytlY0GFei5IFt58rwatPHkWsCg0F8Fe9rmmRe49A8\n" +
- "5bHre12G+8vmd0nNo2Xc97mcuOQLX5PPzDAaMhzOHGOVpfnq4XSLnukrqTB7oBgf\n" +
- "DhgL5Vup09FsHgdnj5FLqYq80maqkwGIspH6MVzVpsFSCAnNCmOi0yKm6KHZOQaX\n" +
- "9W6NApCMFHs/gM0bnLrEWHIjr7ZWn8Z6QjMpBz+CyeYfBQ3NTCg2i9PIPhzGiO9e\n" +
- "7olk6R3r2ol+MqZp0d3MiJ/R0MlmIdwGZ8WUepptYkx9zOBkgLKeR46jAgMBAAGj\n" +
- "ggEmMIIBIjASBgNVHRMBAf8ECDAGAQH/AgEBMCcGA1UdJQQgMB4GCCsGAQUFBwMB\n" +
- "BggrBgEFBQcDAgYIKwYBBQUHAwQwEQYDVR0gBAowCDAGBgRVHSAAMDMGCCsGAQUF\n" +
- "BwEBBCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMwYD\n" +
- "VR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5lbnRydXN0Lm5ldC9zZXJ2ZXIxLmNy\n" +
- "bDAdBgNVHQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wCwYDVR0PBAQDAgEGMB8G\n" +
- "A1UdIwQYMBaAFPAXYhNVPbP/CgBr+1CEl/PtYtAaMBkGCSqGSIb2fQdBAAQMMAob\n" +
- "BFY3LjEDAgCBMA0GCSqGSIb3DQEBBQUAA4GBAEa6RcDNcEIGUlkDJUY/pWTds4zh\n" +
- "xbVkp3wSmpwPFhx5fxTyF4HD2L60jl3aqjTB7gPpsL2Pk5QZlNsi3t4UkCV70UOd\n" +
- "ueJRN3o/LOtk4+bjXY2lC0qTHbN80VMLqPjmaf9ghSA9hwhskdtMgRsgfd90q5QP\n" +
- "ZFdYf+hthc3m6IcJ\n" +
- "-----END CERTIFICATE-----");
-
- //
- // Compromised DigiNotar PKIoverheid CA Organisatie - G2
- //
-
- // DigiNotar intermediate, cross-signed by the Dutch government
- //
- // Subject: CN=DigiNotar PKIoverheid CA Organisatie - G2,
- // O=DigiNotar B.V.,
- // C=NL
- // Issuer: CN=Staat der Nederlanden Organisatie CA - G2,
- // O=Staat der Nederlanden,
- // C=NL
- // Serial: 20001983 (01:31:34:bf)
- add("diginotar-pkioverheid-organisatie-cross-to-nederlanden-013134BF",
- "-----BEGIN CERTIFICATE-----\n" +
- "MIIGnDCCBISgAwIBAgIEATE0vzANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQGEwJO\n" +
- "TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMTIwMAYDVQQDDClTdGFh\n" +
- "dCBkZXIgTmVkZXJsYW5kZW4gT3JnYW5pc2F0aWUgQ0EgLSBHMjAeFw0xMDA1MTIw\n" +
- "ODUxMzhaFw0yMDAzMjMwOTUwMDRaMFoxCzAJBgNVBAYTAk5MMRcwFQYDVQQKDA5E\n" +
- "aWdpTm90YXIgQi5WLjEyMDAGA1UEAwwpRGlnaU5vdGFyIFBLSW92ZXJoZWlkIENB\n" +
- "IE9yZ2FuaXNhdGllIC0gRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC\n" +
- "AQCxExkPJ+Zs1FWGS9DsiYpFkXisR71HK+T8RetPtCZzWzfTw3/2497Xo/gtaMUI\n" +
- "PkuU1uSHJTZrhLUYdPMoWHMvm2rPvAQe9t7dr/xLqvXbZmIlASWC3vKXWhBu3V2p\n" +
- "IrEEqSNzOvhxrR3PhETrR9Gvbch8KKvH8jd6dF9fxQIUiqNa4xtsAeNdjtlo1vQJ\n" +
- "GzLckbUs9SDrjANtJkm4k8SFXdjSm69WaswFM8ygQp40VUSca6DUEtArVM23iQ3l\n" +
- "9uvo+4UBM096a/GdcjOWDveyhKWlJ8Qn8VFzKXe6Z27+TNy04qGhgS85SY1DOBPO\n" +
- "0KVcwoc6AGdlQiPxNlkKHaNRyLyjlCox3+M88p0aPASw77EKMBNzttfzo0wBdRSF\n" +
- "eMDXijlYhVD6LubFvs+LP6+PNtQlCS3SD6xyk/K/i9RQs/kVUJuZ9RTZ+4uRozIm\n" +
- "JqD43ztggYaDeVsr6xM9KTrBbd29no6H1kquNJcF7hSm9tw4fkrpJFQHPZdoN0Zr\n" +
- "DceoIa8TVOQJavFNRgrJXfubT73e+7dUy7g4nKc5+2otwHuNq6WnV+xKkoozxeEg\n" +
- "XHPYkJIrgNUPhhhpfDlPhIa890xb89W0yqDC8DciynlSH1PmqvOQsDvd8ij9rOvF\n" +
- "BiSgydQvD1j9tZ7sD8+yWdCiBHo4aq5y+73wJWKUCacFCwIDAQABo4IBYTCCAV0w\n" +
- "SAYDVR0gBEEwPzA9BgRVHSAAMDUwMwYIKwYBBQUHAgEWJ2h0dHA6Ly93d3cuZGln\n" +
- "aW5vdGFyLm5sL2Nwcy9wa2lvdmVyaGVpZDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud\n" +
- "DwEB/wQEAwIBBjCBhQYDVR0jBH4wfIAUORCLSZJc22ESIM1JnRqO2pxnQLmhXqRc\n" +
- "MFoxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4x\n" +
- "KzApBgNVBAMMIlN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENBIC0gRzKCBACY\n" +
- "lvQwSQYDVR0fBEIwQDA+oDygOoY4aHR0cDovL2NybC5wa2lvdmVyaGVpZC5ubC9E\n" +
- "b21PcmdhbmlzYXRpZUxhdGVzdENSTC1HMi5jcmwwHQYDVR0OBBYEFLxdlDvZq3sD\n" +
- "JXNhwtst7vyrj2WhMA0GCSqGSIb3DQEBCwUAA4ICAQCP/C1Mt9kt1R+978v0t2gX\n" +
- "dZ1O1ffdnPEqJu2forYcA9VTs+wIzzTi48P0tRYvyMO+19NzqwA2+RpKftZj6V5G\n" +
- "uqW2jhW3oyrYQx3vXcgfgYWzi/f/PPTZ9EYIP5y8HaDZqEzNJVJOCrEg9x/pQ9lU\n" +
- "RoETmsBedGwqmDLq/He7DaWiMZgifnx859qkrey3LhoZcfhIUNpDjyyE3cFAJ+O1\n" +
- "8BVOltT4XOOGKUYr1zsH6zh/yIZXl9PvKjPEF1DVZGlrK2tFXl0vF8paTs/D1zk8\n" +
- "9TufRrmb5w5Jl53W1eMbD+qPAU6aE5RZCgIHSEsaYKt/T+0L2FUNaG9VnGllFULs\n" +
- "wNzdbKzDFs4LHVabpMTE0i7gD+JEJytQaaTcYuiKISlCbMwAOpZ2m+9AwKRed4Qy\n" +
- "bCYqOWauXeO5ubIsaB8empADOfCqs6TMSYsYNOk3yXspx4R8b0QVL+xhWQTJRcui\n" +
- "1lKifH8pktZKxYtCqNT+6tjHhyMY5J16fXNAUpigrm7jBT8FD+Clxm1N7YM3iJzH\n" +
- "89xCmmq21yFJNnfy7xhPxXDZnunetyuL9Lx+KN8NQMmFXK6dxTH/0FwOtah+8Okv\n" +
- "uq+IruW10Vilr5xxpykBkINpN4IFuvwJwQhujHg7wzMCgD9EhQgd31VWCK0shS1d\n" +
- "sQPhrqp0xaTzTro3mHuCuQ==\n" +
- "-----END CERTIFICATE-----");
-
- //
- // Compromised DigiNotar PKIoverheid CA Overheid en Bedrijven
- //
-
- // DigiNotar intermediate, cross-signed by the Dutch government
- //
- // Subject: CN=DigiNotar PKIoverheid CA Overheid en Bedrijven,
- // O=DigiNotar B.V.,
- // C=NL
- // Issuer: CN=Staat der Nederlanden Overheid CA
- // O=Staat der Nederlanden,
- // C=NL
- // Serial: 20015536 (01:31:69:b0)
- add("diginotar-pkioverheid-overheid-enb-cross-to-nederlanden-013169B0",
- "-----BEGIN CERTIFICATE-----\n" +
- "MIIEiDCCA3CgAwIBAgIEATFpsDANBgkqhkiG9w0BAQUFADBZMQswCQYDVQQGEwJO\n" +
- "TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSowKAYDVQQDEyFTdGFh\n" +
- "dCBkZXIgTmVkZXJsYW5kZW4gT3ZlcmhlaWQgQ0EwHhcNMDcwNzA1MDg0MjA3WhcN\n" +
- "MTUwNzI3MDgzOTQ2WjBfMQswCQYDVQQGEwJOTDEXMBUGA1UEChMORGlnaU5vdGFy\n" +
- "IEIuVi4xNzA1BgNVBAMTLkRpZ2lOb3RhciBQS0lvdmVyaGVpZCBDQSBPdmVyaGVp\n" +
- "ZCBlbiBCZWRyaWp2ZW4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDc\n" +
- "vdKnTmoKuzuiheF/AK2+tDBomAfNoHrElM9x+Yo35FPrV3bMi+Zs/u6HVcg+uwQ5\n" +
- "AKeAeKxbT370vbhUuHE7BzFJOZNUfCA7eSuPu2GQfbGs5h+QLp1FAalkLU3DL7nn\n" +
- "UNVOKlyrdnY3Rtd57EKZ96LspIlw3Dgrh6aqJOadkiQbvvb91C8ZF3rmMgeUVAVT\n" +
- "Q+lsvK9Hy7zL/b07RBKB8WtLu+20z6slTxjSzAL8o0+1QjPLWc0J3NNQ/aB2jKx+\n" +
- "ZopC9q0ckvO2+xRG603XLzDgbe5bNr5EdLcgBVeFTegAGaL2DOauocBC36esgl3H\n" +
- "aLcY5olLmmv6znn58yynAgMBAAGjggFQMIIBTDBIBgNVHSAEQTA/MD0GBFUdIAAw\n" +
- "NTAzBggrBgEFBQcCARYnaHR0cDovL3d3dy5kaWdpbm90YXIubmwvY3BzL3BraW92\n" +
- "ZXJoZWlkMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMIGABgNVHSME\n" +
- "eTB3gBQLhtYPd6NosftkCcOIblwEHFfpPaFZpFcwVTELMAkGA1UEBhMCTkwxHjAc\n" +
- "BgNVBAoTFVN0YWF0IGRlciBOZWRlcmxhbmRlbjEmMCQGA1UEAxMdU3RhYXQgZGVy\n" +
- "IE5lZGVybGFuZGVuIFJvb3QgQ0GCBACYmnkwPQYDVR0fBDYwNDAyoDCgLoYsaHR0\n" +
- "cDovL2NybC5wa2lvdmVyaGVpZC5ubC9Eb21PdkxhdGVzdENSTC5jcmwwHQYDVR0O\n" +
- "BBYEFEwIyY128ZjHPt881y91DbF2eZfMMA0GCSqGSIb3DQEBBQUAA4IBAQAMlIca\n" +
- "v03jheLu19hjeQ5Q38aEW9K72fUxCho1l3TfFPoqDz7toOMI9tVOW6+mriXiRWsi\n" +
- "D7dUKH6S3o0UbNEc5W50BJy37zRERd/Jgx0ZH8Apad+J1T/CsFNt5U4X5HNhIxMm\n" +
- "cUP9TFnLw98iqiEr2b+VERqKpOKrp11Lbyn1UtHk0hWxi/7wA8+nfemZhzizDXMU\n" +
- "5HIs4c71rQZIZPrTKbmi2Lv01QulQERDjqC/zlqlUkxk0xcxYczopIro5Ij76eUv\n" +
- "BjMzm5RmZrGrUDqhCYF0U1onuabSJc/Tw6f/ltAv6uAejVLpGBwgCkegllYOQJBR\n" +
- "RKwa/fHuhR/3Qlpl\n" +
- "-----END CERTIFICATE-----");
-
- //
- // Compromised DigiNotar PKIoverheid CA Overheid
- //
-
- // DigiNotar intermediate, cross-signed by the Dutch government
- //
- // Subject: CN=DigiNotar PKIoverheid CA Overheid
- // O=DigiNotar B.V.,
- // C=NL
- // Issuer: CN=Staat der Nederlanden Overheid CA
- // O=Staat der Nederlanden,
- // C=NL
- // Serial: 20006006 (01:31:44:76)
- add("diginotar-pkioverheid-overheid-cross-to-nederlanden-01314476",
- "-----BEGIN CERTIFICATE-----\n" +
- "MIIEezCCA2OgAwIBAgIEATFEdjANBgkqhkiG9w0BAQUFADBZMQswCQYDVQQGEwJO\n" +
- "TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSowKAYDVQQDEyFTdGFh\n" +
- "dCBkZXIgTmVkZXJsYW5kZW4gT3ZlcmhlaWQgQ0EwHhcNMDQwNjI0MDgxOTMyWhcN\n" +
- "MTAwNjIzMDgxNzM2WjBSMQswCQYDVQQGEwJOTDEXMBUGA1UEChMORGlnaU5vdGFy\n" +
- "IEIuVi4xKjAoBgNVBAMTIURpZ2lOb3RhciBQS0lvdmVyaGVpZCBDQSBPdmVyaGVp\n" +
- "ZDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANSlrubta5tlOjVCi/gb\n" +
- "yLCvRqfBjxG8H594VcKHu0WAYc99SPZF9cycj5mw2GyfQvy/WIrGrL4iyNq1gSqR\n" +
- "0QA/mTXKZIaPqzpDhdm+VvrKkmjrbZfaQxgMSs3ChtBsjcP9Lc0X1zXZ4Q8nBe3k\n" +
- "BTp+zehINfmbjoEgXLxsMR5RQ6GxzKjuC04PQpbJQgTIakglKaqYcDDZbEscWgPV\n" +
- "Hgj/2aoHlj6leW/ThHZ+O41jUguEmBLZA3mu3HrCfrHntb5dPt0ihzSx7GtD/SaX\n" +
- "5HBLxnP189YuqMk5iRA95CtiSdKauvon/xRKRLNgG6XAz0ctSoY7xLDdiBVU5kJd\n" +
- "FScCAwEAAaOCAVAwggFMMEgGA1UdIARBMD8wPQYEVR0gADA1MDMGCCsGAQUFBwIB\n" +
- "FidodHRwOi8vd3d3LmRpZ2lub3Rhci5ubC9jcHMvcGtpb3ZlcmhlaWQwDwYDVR0T\n" +
- "AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgYAGA1UdIwR5MHeAFAuG1g93o2ix\n" +
- "+2QJw4huXAQcV+k9oVmkVzBVMQswCQYDVQQGEwJOTDEeMBwGA1UEChMVU3RhYXQg\n" +
- "ZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g\n" +
- "Um9vdCBDQYIEAJiaeTA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnBraW92\n" +
- "ZXJoZWlkLm5sL0RvbU92TGF0ZXN0Q1JMLmNybDAdBgNVHQ4EFgQUvRaYQh2+kdE9\n" +
- "wpcl4CjXWOC1f+IwDQYJKoZIhvcNAQEFBQADggEBAGhQsCWLiaN2EOhPAW+JQP6o\n" +
- "XBOrLv5w6joahzBFVn1BiefzmlMKjibqKYxURRvMAsMkh82/MfL8V0w6ugxl81lu\n" +
- "i42dcxl9cKSVXKMw4bbBzJ2VQI5HTIABwefeNuy/eX6idVwYdt3ajAH7fUA8Q9Cq\n" +
- "vr6H8B+8mwoEqTVTEVlCSsC/EXsokYEUr06PPzRudKjDmijgj7zFaIioZNc8hk7g\n" +
- "ufEgrs/tmcNGylrwRHgCXjCRBt2NHlZ08l7A1AGU8HcHlSbG9Un/2q9kVHUkps0D\n" +
- "gtUaEK+x6jpAu/R8Ojezu/+ZEcwwjI/KOhG+84+ejFmtyEkrUdsAdEdLf/2dKsw=\n" +
- "-----END CERTIFICATE-----");
-
- //
- // Compromised DigiNotar Services 1024 CA
- //
-
- // DigiNotar intermediate, cross-signed by the Entrust
- //
- // Subject: EMAILADDRESS=info@diginotar.nl,
- // CN=DigiNotar Services 1024 CA
- // O=DigiNotar, C=NL
- // Issuer: CN=Entrust.net Secure Server Certification Authority,
- // OU=(c) 1999 Entrust.net Limited,
- // OU=www.entrust.net/CPS incorp. by ref. (limits liab.),
- // O=Entrust.net,
- // C=US
- // Serial: 1184640176 (46:9c:2c:b0)
- add("diginotar-services-1024-ca-cross-to-entrust-469C2CB0",
- "-----BEGIN CERTIFICATE-----\n" +
- "MIIDzTCCAzagAwIBAgIERpwssDANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC\n" +
- "VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u\n" +
- "ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc\n" +
- "KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u\n" +
- "ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNzA3\n" +
- "MjYxNTU5MDBaFw0xMzA4MjYxNjI5MDBaMGgxCzAJBgNVBAYTAk5MMRIwEAYDVQQK\n" +
- "EwlEaWdpTm90YXIxIzAhBgNVBAMTGkRpZ2lOb3RhciBTZXJ2aWNlcyAxMDI0IENB\n" +
- "MSAwHgYJKoZIhvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCBnzANBgkqhkiG9w0B\n" +
- "AQEFAAOBjQAwgYkCgYEA2ptNXTz50eKLxsYIIMXZHkjsZlhneWIrQWP0iY1o2q+4\n" +
- "lDaLGSSkoJPSmQ+yrS01Tc0vauH5mxkrvAQafi09UmTN8T5nD4ku6PJPrqYIoYX+\n" +
- "oakJ5sarPkP8r3oDkdqmOaZh7phPGKjTs69mgumfvN1y+QYEvRLZGCTnq5NTi1kC\n" +
- "AwEAAaOCASYwggEiMBIGA1UdEwEB/wQIMAYBAf8CAQAwJwYDVR0lBCAwHgYIKwYB\n" +
- "BQUHAwEGCCsGAQUFBwMCBggrBgEFBQcDBDARBgNVHSAECjAIMAYGBFUdIAAwMwYI\n" +
- "KwYBBQUHAQEEJzAlMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5lbnRydXN0Lm5l\n" +
- "dDAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8vY3JsLmVudHJ1c3QubmV0L3NlcnZl\n" +
- "cjEuY3JsMB0GA1UdDgQWBBT+3JRJDG/vXH/G8RKZTxZJrfuCZTALBgNVHQ8EBAMC\n" +
- "AQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0BowGQYJKoZIhvZ9B0EA\n" +
- "BAwwChsEVjcuMQMCAIEwDQYJKoZIhvcNAQEFBQADgYEAY3RqN6k/lpxmyFisCcnv\n" +
- "9WWUf6MCxDgxvV0jh+zUVrLJsm7kBQb87PX6iHBZ1O7m3bV6oKNgLwIMq94SXa/w\n" +
- "NUuqikeRGvWFLELHHe+VQ7NeuJWTpdrFKKqtci0xrZlrbP+MISevrZqRK8fdWMNu\n" +
- "B8WfedLHjFW/TMcnXlEWKz4=\n" +
- "-----END CERTIFICATE-----");
-
- //
- // Revoked DigiCert code signing certificates used to sign malware
- //
-
- // Subject: CN=Buster Paper Comercial Ltda,
- // O=Buster Paper Comercial Ltda,
- // L=S?o Jos? Dos Campos,
- // ST=S?o Paulo,
- // C=BR
- // Issuer: CN=DigiCert Assured ID Code Signing CA-1,
- // OU=www.digicert.com,
- // O=DigiCert Inc,
- // C=US
- // Serial: 07:b4:4c:db:ff:fb:78:de:05:f4:26:16:72:a6:73:12
- add("buster-paper-comercial-ltda-72A67312",
- "-----BEGIN CERTIFICATE-----\n" +
- "MIIGwzCCBaugAwIBAgIQB7RM2//7eN4F9CYWcqZzEjANBgkqhkiG9w0BAQUFADBv\n" +
- "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n" +
- "d3cuZGlnaWNlcnQuY29tMS4wLAYDVQQDEyVEaWdpQ2VydCBBc3N1cmVkIElEIENv\n" +
- "ZGUgU2lnbmluZyBDQS0xMB4XDTEzMDExNzAwMDAwMFoXDTE0MDEyMjEyMDAwMFow\n" +
- "gY4xCzAJBgNVBAYTAkJSMRMwEQYDVQQIDApTw6NvIFBhdWxvMR4wHAYDVQQHDBVT\n" +
- "w6NvIEpvc8OpIERvcyBDYW1wb3MxJDAiBgNVBAoTG0J1c3RlciBQYXBlciBDb21l\n" +
- "cmNpYWwgTHRkYTEkMCIGA1UEAxMbQnVzdGVyIFBhcGVyIENvbWVyY2lhbCBMdGRh\n" +
- "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzO0l6jWIpEfO2oUpVHpL\n" +
- "HETj5lzivNb0S9jKHgGJax917czh81PnGTxwxFXd6gLJuy/XFHvmiSi8g8jzlymn\n" +
- "2Ji5zQ3CPaz7nomJokSUDlMVJ2qYWtctw4jrdjuI4qtn+koXXUFkWjkf8h8251I4\n" +
- "tUs7S49HE2Go5owCYP3byajj7fsFAYR/Xb7TdVtndkZsUB/YgOjHovyACjouaNCi\n" +
- "mDiRyQ6zLLjZGiyeD65Yiseuhp5b8/BL5h1p7w76QYMYMVQNAdtDKut2R8MBpuWf\n" +
- "Ny7Eoi0x/gm1p9X5Rcl5aN7K0G4UtTAJKbkuUfXddsyFoM0Nx8uo8SgNQ8Y/X5Jx\n" +
- "BwIDAQABo4IDOTCCAzUwHwYDVR0jBBgwFoAUe2jOKarAF75JeuHlP9an90WPNTIw\n" +
- "HQYDVR0OBBYEFFLZ3n5nt/Eer7n1bvtOqMb1qKO5MA4GA1UdDwEB/wQEAwIHgDAT\n" +
- "BgNVHSUEDDAKBggrBgEFBQcDAzBzBgNVHR8EbDBqMDOgMaAvhi1odHRwOi8vY3Js\n" +
- "My5kaWdpY2VydC5jb20vYXNzdXJlZC1jcy0yMDExYS5jcmwwM6AxoC+GLWh0dHA6\n" +
- "Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9hc3N1cmVkLWNzLTIwMTFhLmNybDCCAcQGA1Ud\n" +
- "IASCAbswggG3MIIBswYJYIZIAYb9bAMBMIIBpDA6BggrBgEFBQcCARYuaHR0cDov\n" +
- "L3d3dy5kaWdpY2VydC5jb20vc3NsLWNwcy1yZXBvc2l0b3J5Lmh0bTCCAWQGCCsG\n" +
- "AQUFBwICMIIBVh6CAVIAQQBuAHkAIAB1AHMAZQAgAG8AZgAgAHQAaABpAHMAIABD\n" +
- "AGUAcgB0AGkAZgBpAGMAYQB0AGUAIABjAG8AbgBzAHQAaQB0AHUAdABlAHMAIABh\n" +
- "AGMAYwBlAHAAdABhAG4AYwBlACAAbwBmACAAdABoAGUAIABEAGkAZwBpAEMAZQBy\n" +
- "AHQAIABDAFAALwBDAFAAUwAgAGEAbgBkACAAdABoAGUAIABSAGUAbAB5AGkAbgBn\n" +
- "ACAAUABhAHIAdAB5ACAAQQBnAHIAZQBlAG0AZQBuAHQAIAB3AGgAaQBjAGgAIABs\n" +
- "AGkAbQBpAHQAIABsAGkAYQBiAGkAbABpAHQAeQAgAGEAbgBkACAAYQByAGUAIABp\n" +
- "AG4AYwBvAHIAcABvAHIAYQB0AGUAZAAgAGgAZQByAGUAaQBuACAAYgB5ACAAcgBl\n" +
- "AGYAZQByAGUAbgBjAGUALjCBggYIKwYBBQUHAQEEdjB0MCQGCCsGAQUFBzABhhho\n" +
- "dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wTAYIKwYBBQUHMAKGQGh0dHA6Ly9jYWNl\n" +
- "cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRENvZGVTaWduaW5nQ0Et\n" +
- "MS5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQUFAAOCAQEAPTTQvpOIikXI\n" +
- "hTLnNbajaFRR5GhQpTzUNgBfF9VYSlNw/wMjpGsrh5RxaJCip52jbehmTgjMRhft\n" +
- "jRYyml44PAVsCcR9uEoDpCZYpI1fHI1R+F8jd1C9rqprbSwwOG4xlg4SmvTHYs6e\n" +
- "gBItQ/1p9XY+Sf4Wv1qOuOFL1qvV/5VyR2zdlOQCmKCeMgxt6a/tHLBDiAA67D44\n" +
- "/vfdoNJl0CU2It0PO60jdCPFNWIRcxL+OSDqAoePeUC7xQ+JsTEIxuUE8+d6w6fc\n" +
- "BV2mYb1flh22t46GLjh4gyo7xw3aL6L0L0jzlTT6IcEw6NIbaPbIKj/npQnHobYj\n" +
- "XMuKLxbh7g==\n" +
- "-----END CERTIFICATE-----");
-
- // Subject: CN=BUSTER ASSISTENCIA TECNICA ELETRONICA LTDA - ME,
- // O=BUSTER ASSISTENCIA TECNICA ELETRONICA LTDA - ME,
- // L=S?o Paulo,
- // ST=S?o Paulo,
- // C=BR
- // Issuer: CN=DigiCert Assured ID Code Signing CA-1,
- // OU=www.digicert.com,
- // O=DigiCert Inc,
- // C=US
- // Serial: 0a:38:9b:95:ee:73:6d:d1:3b:c0:ed:74:3f:d7:4d:2f
- add("buster-assistencia-tecnica-electronica-ltda-3FD74D2F",
- "-----BEGIN CERTIFICATE-----\n" +
- "MIIG4DCCBcigAwIBAgIQCjible5zbdE7wO10P9dNLzANBgkqhkiG9w0BAQUFADBv\n" +
- "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n" +
- "d3cuZGlnaWNlcnQuY29tMS4wLAYDVQQDEyVEaWdpQ2VydCBBc3N1cmVkIElEIENv\n" +
- "ZGUgU2lnbmluZyBDQS0xMB4XDTEyMTEwOTAwMDAwMFoXDTEzMTExNDEyMDAwMFow\n" +
- "gasxCzAJBgNVBAYTAkJSMRMwEQYDVQQIDApTw6NvIFBhdWxvMRMwEQYDVQQHDApT\n" +
- "w6NvIFBhdWxvMTgwNgYDVQQKEy9CVVNURVIgQVNTSVNURU5DSUEgVEVDTklDQSBF\n" +
- "TEVUUk9OSUNBIExUREEgLSBNRTE4MDYGA1UEAxMvQlVTVEVSIEFTU0lTVEVOQ0lB\n" +
- "IFRFQ05JQ0EgRUxFVFJPTklDQSBMVERBIC0gTUUwggEiMA0GCSqGSIb3DQEBAQUA\n" +
- "A4IBDwAwggEKAoIBAQDAqNeEs5/B2CTXGjTOkUIdu6jV6qulOZwdw4sefHWYj1UR\n" +
- "4z6zPk9kjpUgbnb402RFq88QtfInwddZ/wXn9OxMtDd/3TnC7HrhNS7ga79ZFL2V\n" +
- "JnmzKHum2Yvh0q82QEJ9tHBR2X9VdKpUIH08Zs3k6cWWM1H0YX0cxA/HohhesQJW\n" +
- "kwJ3urOIJiH/HeByDk8a1NS8safcCxk5vxvW4WvCg43iT09LeHY5Aa8abKw8lqVb\n" +
- "0tD5ZSIjdmdj3TT1U37iAHLLRM2DXbxfdbhouUX1c5U1ZHAMA67HwjKiseOiDaHj\n" +
- "NUGbC37C+cgbc9VVM/cURD8WvS0Kj6fQv7F2QtJDAgMBAAGjggM5MIIDNTAfBgNV\n" +
- "HSMEGDAWgBR7aM4pqsAXvkl64eU/1qf3RY81MjAdBgNVHQ4EFgQU88EXKAyDsh30\n" +
- "o9+Gu9a4xUy+FSMwDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMD\n" +
- "MHMGA1UdHwRsMGowM6AxoC+GLWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9hc3N1\n" +
- "cmVkLWNzLTIwMTFhLmNybDAzoDGgL4YtaHR0cDovL2NybDQuZGlnaWNlcnQuY29t\n" +
- "L2Fzc3VyZWQtY3MtMjAxMWEuY3JsMIIBxAYDVR0gBIIBuzCCAbcwggGzBglghkgB\n" +
- "hv1sAwEwggGkMDoGCCsGAQUFBwIBFi5odHRwOi8vd3d3LmRpZ2ljZXJ0LmNvbS9z\n" +
- "c2wtY3BzLXJlcG9zaXRvcnkuaHRtMIIBZAYIKwYBBQUHAgIwggFWHoIBUgBBAG4A\n" +
- "eQAgAHUAcwBlACAAbwBmACAAdABoAGkAcwAgAEMAZQByAHQAaQBmAGkAYwBhAHQA\n" +
- "ZQAgAGMAbwBuAHMAdABpAHQAdQB0AGUAcwAgAGEAYwBjAGUAcAB0AGEAbgBjAGUA\n" +
- "IABvAGYAIAB0AGgAZQAgAEQAaQBnAGkAQwBlAHIAdAAgAEMAUAAvAEMAUABTACAA\n" +
- "YQBuAGQAIAB0AGgAZQAgAFIAZQBsAHkAaQBuAGcAIABQAGEAcgB0AHkAIABBAGcA\n" +
- "cgBlAGUAbQBlAG4AdAAgAHcAaABpAGMAaAAgAGwAaQBtAGkAdAAgAGwAaQBhAGIA\n" +
- "aQBsAGkAdAB5ACAAYQBuAGQAIABhAHIAZQAgAGkAbgBjAG8AcgBwAG8AcgBhAHQA\n" +
- "ZQBkACAAaABlAHIAZQBpAG4AIABiAHkAIAByAGUAZgBlAHIAZQBuAGMAZQAuMIGC\n" +
- "BggrBgEFBQcBAQR2MHQwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0\n" +
- "LmNvbTBMBggrBgEFBQcwAoZAaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0Rp\n" +
- "Z2lDZXJ0QXNzdXJlZElEQ29kZVNpZ25pbmdDQS0xLmNydDAMBgNVHRMBAf8EAjAA\n" +
- "MA0GCSqGSIb3DQEBBQUAA4IBAQAei1QmiXepje8OIfo/WonD4MIXgpPr2dfRaquQ\n" +
- "A8q63OpTRSveyqdQDCSPpDRF/nvO1Y30yksZvIH1tNBsW5LBdxAKN3lFdBlqBwtE\n" +
- "Q3jHc0KVVYRJ0FBaGE/PJHmRajscdAhYIcMPhTga0u0tDK+wOHEq3993dfl6yHjA\n" +
- "XHU2iW5pnk75ZoE39zALD5eKXT8ZXrET5c3XUFJKWA+XuGmdmyzqo0Au49PanBv9\n" +
- "UlZnabYfqoMArqMS0tGSX4cGgi9/2E+pHG9BX4sFW+ZDumroOA2pxyMWEKjxePEL\n" +
- "zCOfhbsRWdMLYepauaNZOIMZXmFwcrIl0TGMkTAtATz+XmZc\n" +
- "-----END CERTIFICATE-----");
-
- //
- // Revoked code signing certificate w/ a stolen key issued by GoDaddy
- // used to sign malware
- //
-
- // Subject: CN=CLEARESULT CONSULTING INC., OU=Corporate IT,
- // O=CLEARESULT CONSULTING INC., L=Austin, ST=TX, C=US
- // Issuer: SERIALNUMBER=07969287,
- // CN=Go Daddy Secure Certification Authority,
- // OU=http://certificates.godaddy.com/repository,
- // O="GoDaddy.com, Inc.",
- // L=Scottsdale,
- // ST=Arizona,
- // C=US
- // Serial: 2b:73:43:2a:a8:4f:44
- add("clearesult-consulting-inc-2AA84F44",
- "-----BEGIN CERTIFICATE-----\n" +
- "MIIFYjCCBEqgAwIBAgIHK3NDKqhPRDANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE\n" +
- "BhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAY\n" +
- "BgNVBAoTEUdvRGFkZHkuY29tLCBJbmMuMTMwMQYDVQQLEypodHRwOi8vY2VydGlm\n" +
- "aWNhdGVzLmdvZGFkZHkuY29tL3JlcG9zaXRvcnkxMDAuBgNVBAMTJ0dvIERhZGR5\n" +
- "IFNlY3VyZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTERMA8GA1UEBRMIMDc5Njky\n" +
- "ODcwHhcNMTIwMjE1MjEwOTA2WhcNMTQwMjE1MjEwOTA2WjCBjDELMAkGA1UEBgwC\n" +
- "VVMxCzAJBgNVBAgMAlRYMQ8wDQYDVQQHDAZBdXN0aW4xIzAhBgNVBAoMGkNMRUFS\n" +
- "RVNVTFQgQ09OU1VMVElORyBJTkMuMRUwEwYDVQQLDAxDb3Jwb3JhdGUgSVQxIzAh\n" +
- "BgNVBAMMGkNMRUFSRVNVTFQgQ09OU1VMVElORyBJTkMuMIIBIjANBgkqhkiG9w0B\n" +
- "AQEFAAOCAQ8AMIIBCgKCAQEAtIOjCKeAicull+7ZIzt0/4ya3IeXUFlfypqKMLkU\n" +
- "IbKjn0P5uMj6VE3rlbZr44RCegxvdnR6umBh1c0ZXoN3o+yc0JKcKcLiApmJJ277\n" +
- "p7IbLwYDhBXRQNoIJm187IOMRPIxsKN4hL91txn9jGBmW+9zKlJlNhR5R7vjwU2E\n" +
- "jrH/6oqsc9EM2yYpfjlNv6+3jSwAYZCkSWr+27PQOV+YHKmIxtJjX0upFz5FdIrV\n" +
- "9CCX+L2Kji1THOkSgG4QTbYxmEcHqGViWz8hXLeNXjcbEsPuIiAu3hknxRHfUTE/\n" +
- "U0Lh0Ug1e3LrJu+WnxM2SmUY4krsZ22c0yWUW9hzWITIjQIDAQABo4IBhzCCAYMw\n" +
- "DwYDVR0TAQH/BAUwAwEBADATBgNVHSUEDDAKBggrBgEFBQcDAzAOBgNVHQ8BAf8E\n" +
- "BAMCB4AwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5nb2RhZGR5LmNvbS9n\n" +
- "ZHM1LTE2LmNybDBTBgNVHSAETDBKMEgGC2CGSAGG/W0BBxcCMDkwNwYIKwYBBQUH\n" +
- "AgEWK2h0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5jb20vcmVwb3NpdG9yeS8w\n" +
- "gYAGCCsGAQUFBwEBBHQwcjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZ29kYWRk\n" +
- "eS5jb20vMEoGCCsGAQUFBzAChj5odHRwOi8vY2VydGlmaWNhdGVzLmdvZGFkZHku\n" +
- "Y29tL3JlcG9zaXRvcnkvZ2RfaW50ZXJtZWRpYXRlLmNydDAfBgNVHSMEGDAWgBT9\n" +
- "rGEyk2xF1uLuhV+auud2mWjM5zAdBgNVHQ4EFgQUDtdeKqeN2QkcbEp1HovFieNB\n" +
- "XiowDQYJKoZIhvcNAQEFBQADggEBAD74Agw5tvi2aBl4/f/s7/VE/BClzDsKMb9K\n" +
- "v9qpeC45ZA/jelxV11HKbQnVF194gDb7D2H9OsAsRUy8HVKbXEcc/8dKvwOqb+BC\n" +
- "2i/EmfjLgmCfezNFtLq8xcPxF3zIRc44vPrK0z4YZsaHdH+yTEJ51p5EMdTqaLaP\n" +
- "4n5m8LX3RfqlQB9dYFe6dUoYZjKm9d/pIRww3VqfOzjl42Edi1w6dWmBVMx1NZuR\n" +
- "DBabJH1vJ9Gd+KwxMCmBZ6pQPl28JDimhJhI2LNqU349uADQVV0HJosddN/ARyyI\n" +
- "LSIQO7BnNVKVG9Iujf33bvPNeg0qNz5qw+rKKq97Pqeum+L5oKU=\n" +
- "-----END CERTIFICATE-----");
- }
+ private UntrustedCertificates() {}
}
--- a/jdk/src/share/classes/sun/security/x509/X509CertImpl.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/security/x509/X509CertImpl.java Thu Oct 10 13:41:08 2013 -0700
@@ -37,6 +37,7 @@
import java.security.cert.*;
import java.security.cert.Certificate;
import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
import javax.security.auth.x500.X500Principal;
@@ -1913,4 +1914,45 @@
}
return false;
}
+
+ private ConcurrentHashMap<String,String> fingerprints =
+ new ConcurrentHashMap<>(2);
+
+ public String getFingerprint(String algorithm) {
+ return fingerprints.computeIfAbsent(algorithm,
+ x -> getCertificateFingerPrint(x));
+ }
+
+ /**
+ * Gets the requested finger print of the certificate. The result
+ * only contains 0-9 and A-F. No small case, no colon.
+ */
+ private String getCertificateFingerPrint(String mdAlg) {
+ String fingerPrint = "";
+ try {
+ byte[] encCertInfo = getEncoded();
+ MessageDigest md = MessageDigest.getInstance(mdAlg);
+ byte[] digest = md.digest(encCertInfo);
+ StringBuffer buf = new StringBuffer();
+ for (int i = 0; i < digest.length; i++) {
+ byte2hex(digest[i], buf);
+ }
+ fingerPrint = buf.toString();
+ } catch (NoSuchAlgorithmException | CertificateEncodingException e) {
+ // ignored
+ }
+ return fingerPrint;
+ }
+
+ /**
+ * Converts a byte to hex digit and writes to the supplied buffer
+ */
+ private static void byte2hex(byte b, StringBuffer buf) {
+ char[] hexChars = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
+ '9', 'A', 'B', 'C', 'D', 'E', 'F' };
+ int high = ((b & 0xf0) >> 4);
+ int low = (b & 0x0f);
+ buf.append(hexChars[high]);
+ buf.append(hexChars[low]);
+ }
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/sun/swing/AbstractFilterComboBoxModel.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. 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.swing;
+
+import javax.swing.AbstractListModel;
+import javax.swing.ComboBoxModel;
+import javax.swing.JFileChooser;
+import javax.swing.filechooser.FileFilter;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+
+/**
+ * Data model for a type-face selection combo-box.
+ */
+public abstract class AbstractFilterComboBoxModel
+ extends AbstractListModel<FileFilter>
+ implements ComboBoxModel<FileFilter>, PropertyChangeListener {
+
+ protected FileFilter[] filters;
+
+ protected AbstractFilterComboBoxModel() {
+ this.filters = getFileChooser().getChoosableFileFilters();
+ }
+
+ protected abstract JFileChooser getFileChooser();
+
+ @Override
+ public void propertyChange(PropertyChangeEvent event) {
+ String property = event.getPropertyName();
+ if (property == JFileChooser.CHOOSABLE_FILE_FILTER_CHANGED_PROPERTY) {
+ this.filters = (FileFilter[]) event.getNewValue();
+ fireContentsChanged(this, -1, -1);
+ } else if (property == JFileChooser.FILE_FILTER_CHANGED_PROPERTY) {
+ fireContentsChanged(this, -1, -1);
+ }
+ }
+
+ @Override
+ public void setSelectedItem(Object filter) {
+ if (filter != null) {
+ getFileChooser().setFileFilter((FileFilter) filter);
+ fireContentsChanged(this, -1, -1);
+ }
+ }
+
+ @Override
+ public Object getSelectedItem() {
+ // Ensure that the current filter is in the list.
+ // NOTE: we should not have to do this, since JFileChooser adds
+ // the filter to the choosable filters list when the filter
+ // is set. Lets be paranoid just in case someone overrides
+ // setFileFilter in JFileChooser.
+ FileFilter currentFilter = getFileChooser().getFileFilter();
+ if (currentFilter != null) {
+ for (FileFilter filter : this.filters) {
+ if (filter == currentFilter) {
+ return currentFilter;
+ }
+ }
+ getFileChooser().addChoosableFileFilter(currentFilter);
+ }
+ return currentFilter;
+ }
+
+ @Override
+ public int getSize() {
+ return (this.filters != null)
+ ? filters.length
+ : 0;
+ }
+
+ @Override
+ public FileFilter getElementAt(int index) {
+ if (index >= getSize()) {
+ // This shouldn't happen. Try to recover gracefully.
+ return getFileChooser().getFileFilter();
+ }
+ return (this.filters != null)
+ ? filters[index]
+ : null;
+ }
+}
--- a/jdk/src/share/classes/sun/swing/FilePane.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/swing/FilePane.java Thu Oct 10 13:41:08 2013 -0700
@@ -1980,18 +1980,18 @@
}
if (f instanceof ShellFolder) {
- return ((ShellFolder) f).isFileSystem();
+ return f.canWrite();
} else {
if (usesShellFolder(getFileChooser())) {
try {
- return ShellFolder.getShellFolder(f).isFileSystem();
+ return ShellFolder.getShellFolder(f).canWrite();
} catch (FileNotFoundException ex) {
// File doesn't exist
return false;
}
} else {
// Ordinary file
- return true;
+ return f.canWrite();
}
}
}
--- a/jdk/src/share/classes/sun/swing/JLightweightFrame.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/swing/JLightweightFrame.java Thu Oct 10 13:41:08 2013 -0700
@@ -33,8 +33,9 @@
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
+import java.awt.MouseInfo;
+import java.awt.Point;
import java.awt.Rectangle;
-import java.awt.event.ComponentListener;
import java.awt.event.ContainerEvent;
import java.awt.event.ContainerListener;
import java.awt.image.BufferedImage;
@@ -48,6 +49,7 @@
import javax.swing.JRootPane;
import javax.swing.LayoutFocusTraversalPolicy;
import javax.swing.RootPaneContainer;
+import javax.swing.SwingUtilities;
import sun.awt.LightweightFrame;
import sun.security.action.GetPropertyAction;
@@ -88,6 +90,15 @@
private PropertyChangeListener layoutSizeListener;
+ static {
+ SwingAccessor.setJLightweightFrameAccessor(new SwingAccessor.JLightweightFrameAccessor() {
+ @Override
+ public void updateCursor(JLightweightFrame frame) {
+ frame.updateClientCursor();
+ }
+ });
+ }
+
/**
* Constructs a new, initially invisible {@code JLightweightFrame}
* instance.
@@ -95,7 +106,7 @@
public JLightweightFrame() {
super();
copyBufferEnabled = "true".equals(AccessController.
- doPrivileged(new GetPropertyAction("jlf.copyBufferEnabled", "true")));
+ doPrivileged(new GetPropertyAction("swing.jlf.copyBufferEnabled", "true")));
add(rootPane, BorderLayout.CENTER);
setFocusTraversalPolicy(new LayoutFocusTraversalPolicy());
@@ -239,6 +250,11 @@
};
contentPane.setLayout(new BorderLayout());
contentPane.add(component);
+ if ("true".equals(AccessController.
+ doPrivileged(new GetPropertyAction("swing.jlf.contentPaneTransparent", "false"))))
+ {
+ contentPane.setOpaque(false);
+ }
setContentPane(contentPane);
contentPane.addContainerListener(new ContainerListener() {
@@ -358,4 +374,21 @@
public Component getGlassPane() {
return getRootPane().getGlassPane();
}
+
+
+ /*
+ * Notifies client toolkit that it should change a cursor.
+ *
+ * Called from the peer via SwingAccessor, because the
+ * Component.updateCursorImmediately method is final
+ * and could not be overridden.
+ */
+ private void updateClientCursor() {
+ Point p = MouseInfo.getPointerInfo().getLocation();
+ SwingUtilities.convertPointFromScreen(p, this);
+ Component target = SwingUtilities.getDeepestComponentAt(this, p.x, p.y);
+ if (target != null) {
+ content.setCursor(target.getCursor());
+ }
+ }
}
--- a/jdk/src/share/classes/sun/swing/LightweightContent.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/swing/LightweightContent.java Thu Oct 10 13:41:08 2013 -0700
@@ -26,6 +26,7 @@
package sun.swing;
import javax.swing.JComponent;
+import java.awt.Cursor;
/**
* The interface by means of which the {@link JLightweightFrame} class
@@ -179,4 +180,11 @@
* application that the content minimum size has changed.
*/
public void minimumSizeChanged(int width, int height);
+
+ /**
+ * {@code JLightweightFrame} calls this method to notify the client
+ * application that in needs to set a cursor
+ * @param cursor a cursor to set
+ */
+ default public void setCursor(Cursor cursor) { }
}
--- a/jdk/src/share/classes/sun/swing/SwingAccessor.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/swing/SwingAccessor.java Thu Oct 10 13:41:08 2013 -0700
@@ -72,6 +72,16 @@
}
/**
+ * An accessor for the JLightweightFrame class.
+ */
+ public interface JLightweightFrameAccessor {
+ /**
+ * Notifies the JLightweight frame that it needs to update a cursor
+ */
+ void updateCursor(JLightweightFrame frame);
+ }
+
+ /**
* The javax.swing.text.JTextComponent class accessor object.
*/
private static JTextComponentAccessor jtextComponentAccessor;
@@ -93,4 +103,23 @@
return jtextComponentAccessor;
}
+
+ /**
+ * The JLightweightFrame class accessor object
+ */
+ private static JLightweightFrameAccessor jLightweightFrameAccessor;
+
+ /**
+ * Set an accessor object for the JLightweightFrame class.
+ */
+ public static void setJLightweightFrameAccessor(JLightweightFrameAccessor accessor) {
+ jLightweightFrameAccessor = accessor;
+ }
+
+ /**
+ * Retrieve the accessor object for the JLightweightFrame class
+ */
+ public static JLightweightFrameAccessor getJLightweightFrameAccessor() {
+ return jLightweightFrameAccessor;
+ }
}
--- a/jdk/src/share/classes/sun/swing/SwingUtilities2.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/swing/SwingUtilities2.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 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
@@ -33,6 +33,7 @@
import java.awt.font.*;
import java.awt.geom.*;
import java.awt.print.PrinterGraphics;
+import java.text.CharacterIterator;
import java.text.AttributedCharacterIterator;
import java.text.AttributedString;
@@ -504,22 +505,25 @@
* it to fit in the screen width. This distributes the spacing
* more evenly than directly laying out to the screen advances.
*/
- float screenWidth = (float)
- g2d.getFont().getStringBounds(text, DEFAULT_FRC).getWidth();
- TextLayout layout = createTextLayout(c, text, g2d.getFont(),
- g2d.getFontRenderContext());
+ String trimmedText = trimTrailingSpaces(text);
+ if (!trimmedText.isEmpty()) {
+ float screenWidth = (float) g2d.getFont().getStringBounds
+ (trimmedText, DEFAULT_FRC).getWidth();
+ TextLayout layout = createTextLayout(c, text, g2d.getFont(),
+ g2d.getFontRenderContext());
- layout = layout.getJustifiedLayout(screenWidth);
- /* Use alternate print color if specified */
- Color col = g2d.getColor();
- if (col instanceof PrintColorUIResource) {
- g2d.setColor(((PrintColorUIResource)col).getPrintColor());
+ layout = layout.getJustifiedLayout(screenWidth);
+ /* Use alternate print color if specified */
+ Color col = g2d.getColor();
+ if (col instanceof PrintColorUIResource) {
+ g2d.setColor(((PrintColorUIResource)col).getPrintColor());
+ }
+
+ layout.draw(g2d, x, y);
+
+ g2d.setColor(col);
}
- layout.draw(g2d, x, y);
-
- g2d.setColor(col);
-
return;
}
}
@@ -789,25 +793,27 @@
if (frc != null &&
!isFontRenderContextPrintCompatible
(deviceFontRenderContext, frc)) {
- TextLayout layout =
- createTextLayout(c, new String(data, offset, length),
- g2d.getFont(),
- deviceFontRenderContext);
- float screenWidth = (float)g2d.getFont().
- getStringBounds(data, offset, offset + length, frc).
- getWidth();
- layout = layout.getJustifiedLayout(screenWidth);
+
+ String text = new String(data, offset, length);
+ TextLayout layout = new TextLayout(text, g2d.getFont(),
+ deviceFontRenderContext);
+ String trimmedText = trimTrailingSpaces(text);
+ if (!trimmedText.isEmpty()) {
+ float screenWidth = (float)g2d.getFont().
+ getStringBounds(trimmedText, frc).getWidth();
+ layout = layout.getJustifiedLayout(screenWidth);
- /* Use alternate print color if specified */
- Color col = g2d.getColor();
- if (col instanceof PrintColorUIResource) {
- g2d.setColor(((PrintColorUIResource)col).getPrintColor());
+ /* Use alternate print color if specified */
+ Color col = g2d.getColor();
+ if (col instanceof PrintColorUIResource) {
+ g2d.setColor(((PrintColorUIResource)col).getPrintColor());
+ }
+
+ layout.draw(g2d,x,y);
+
+ g2d.setColor(col);
}
- layout.draw(g2d,x,y);
-
- g2d.setColor(col);
-
return nextX;
}
}
@@ -888,14 +894,23 @@
} else {
frc = g2d.getFontRenderContext();
}
- TextLayout layout = new TextLayout(iterator, frc);
+ TextLayout layout;
if (isPrinting) {
FontRenderContext deviceFRC = g2d.getFontRenderContext();
if (!isFontRenderContextPrintCompatible(frc, deviceFRC)) {
- float screenWidth = layout.getAdvance();
layout = new TextLayout(iterator, deviceFRC);
- layout = layout.getJustifiedLayout(screenWidth);
+ AttributedCharacterIterator trimmedIt =
+ getTrimmedTrailingSpacesIterator(iterator);
+ if (trimmedIt != null) {
+ float screenWidth = new TextLayout(trimmedIt, frc).
+ getAdvance();
+ layout = layout.getJustifiedLayout(screenWidth);
+ }
+ } else {
+ layout = new TextLayout(iterator, frc);
}
+ } else {
+ layout = new TextLayout(iterator, frc);
}
layout.draw(g2d, x, y);
retVal = layout.getAdvance();
@@ -1047,6 +1062,39 @@
return (g instanceof PrinterGraphics || g instanceof PrintGraphics);
}
+ private static String trimTrailingSpaces(String s) {
+ int i = s.length() - 1;
+ while(i >= 0 && Character.isWhitespace(s.charAt(i))) {
+ i--;
+ }
+ return s.substring(0, i + 1);
+ }
+
+ private static AttributedCharacterIterator getTrimmedTrailingSpacesIterator
+ (AttributedCharacterIterator iterator) {
+ int curIdx = iterator.getIndex();
+
+ char c = iterator.last();
+ while(c != CharacterIterator.DONE && Character.isWhitespace(c)) {
+ c = iterator.previous();
+ }
+
+ if (c != CharacterIterator.DONE) {
+ int endIdx = iterator.getIndex();
+
+ if (endIdx == iterator.getEndIndex() - 1) {
+ iterator.setIndex(curIdx);
+ return iterator;
+ } else {
+ AttributedString trimmedText = new AttributedString(iterator,
+ iterator.getBeginIndex(), endIdx + 1);
+ return trimmedText.getIterator();
+ }
+ } else {
+ return null;
+ }
+ }
+
/**
* Determines whether the SelectedTextColor should be used for painting text
* foreground for the specified highlight.
--- a/jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java Thu Oct 10 13:41:08 2013 -0700
@@ -923,70 +923,9 @@
/**
* Data model for a type-face selection combo-box.
*/
- protected class FilterComboBoxModel extends AbstractListModel<FileFilter> implements ComboBoxModel<FileFilter>,
- PropertyChangeListener {
- protected FileFilter[] filters;
- protected FilterComboBoxModel() {
- super();
- filters = getFileChooser().getChoosableFileFilters();
- }
-
- public void propertyChange(PropertyChangeEvent e) {
- String prop = e.getPropertyName();
- if(prop == JFileChooser.CHOOSABLE_FILE_FILTER_CHANGED_PROPERTY) {
- filters = (FileFilter[]) e.getNewValue();
- fireContentsChanged(this, -1, -1);
- } else if (prop == JFileChooser.FILE_FILTER_CHANGED_PROPERTY) {
- fireContentsChanged(this, -1, -1);
- }
- }
-
- public void setSelectedItem(Object filter) {
- if(filter != null) {
- getFileChooser().setFileFilter((FileFilter) filter);
- fireContentsChanged(this, -1, -1);
- }
- }
-
- public Object getSelectedItem() {
- // Ensure that the current filter is in the list.
- // NOTE: we shouldnt' have to do this, since JFileChooser adds
- // the filter to the choosable filters list when the filter
- // is set. Lets be paranoid just in case someone overrides
- // setFileFilter in JFileChooser.
- FileFilter currentFilter = getFileChooser().getFileFilter();
- boolean found = false;
- if(currentFilter != null) {
- for (FileFilter filter : filters) {
- if (filter == currentFilter) {
- found = true;
- }
- }
- if(found == false) {
- getFileChooser().addChoosableFileFilter(currentFilter);
- }
- }
- return getFileChooser().getFileFilter();
- }
-
- public int getSize() {
- if(filters != null) {
- return filters.length;
- } else {
- return 0;
- }
- }
-
- public FileFilter getElementAt(int index) {
- if(index > getSize() - 1) {
- // This shouldn't happen. Try to recover gracefully.
- return getFileChooser().getFileFilter();
- }
- if(filters != null) {
- return filters[index];
- } else {
- return null;
- }
+ protected class FilterComboBoxModel extends AbstractFilterComboBoxModel {
+ protected JFileChooser getFileChooser() {
+ return SynthFileChooserUIImpl.this.getFileChooser();
}
}
--- a/jdk/src/share/classes/sun/tools/jar/resources/jar_de.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/tools/jar/resources/jar_de.properties Thu Oct 10 13:41:08 2013 -0700
@@ -29,7 +29,6 @@
error.bad.cflag=Kennzeichen "c" erfordert Angabe von Manifest oder Eingabedateien.
error.bad.uflag=Kennzeichen "u" erfordert Angabe von Manifest, Kennzeichen "e" oder Eingabedateien.
error.bad.eflag=Kennzeichen "e" und Manifest mit dem Attribut "Main-Class" k\u00F6nnen nicht zusammen angegeben\nwerden.
-error.bad.pvalue=ung\u00FCltiger Wert f\u00FCr Attribut "Profil": {0}
error.nosuch.fileordir={0}: Datei oder Verzeichnis nicht vorhanden
error.write.file=Fehler beim Schreiben in vorhandener JAR-Datei
error.create.dir={0}: Verzeichnis konnte nicht erstellt werden
@@ -42,7 +41,7 @@
out.stored=(0 % gespeichert)
out.create=\ erstellt: {0}
out.extracted=extrahiert: {0}
-out.inflated=\ \\vergr\u00F6\u00DFert: {0}
+out.inflated=\ vergr\u00F6\u00DFert: {0}
out.size=(ein = {0}) (aus = {1})
-usage=Verwendung: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] Dateien...\nOptionen:\n -c Neues Archiv erstellen\n -t Inhaltsverzeichnis f\u00FCr Archiv auflisten\n -x Genannte (oder alle) Dateien aus Archiv extrahieren\n -u Vorhandenes Archiv aktualisieren\n -v Verbose-Ausgabe f\u00FCr Standardausgabe generieren\n -f Namen der Archivdatei angeben\n -m Manifestinformationen von angegebener Manifestdatei einschlie\u00DFen\n -e Anwendungseinstiegspunkt f\u00FCr die \n in einer ausf\u00FChrbaren JAR-Datei geb\u00FCndelte Standalone-Anwendung angeben\n -p Profilnamen angeben\n -0 Nur speichern (keine ZIP-Komprimierung)\n -M Keine Manifest-Datei f\u00FCr die Eintr\u00E4ge erstellen\n -i Indexinformationen f\u00FCr angegebene JAR-Dateien erstellen\n -C zum angegebenen Verzeichnis wechseln und folgende Datei einschlie\u00DFen\nFalls eine Datei ein Verzeichnis ist, wird dieses rekursiv verarbeitet.\nDer Name der Manifestdatei, der Name der Archivdatei und der Name des Einstiegspunkts werden\nin derselben Reihenfolge wie die Kennzeichen "m", "f" und "e" angegeben.\n\nBeispiel 1: Archivieren Sie zwei Klassendateien in ein Archiv mit dem Namen "classes.jar": \n jar cvf classes.jar Foo.class Bar.class \nBeispiel 2: Verwenden Sie die vorhandenen Manifestdatei "mymanifest", und archivieren Sie\n alle Dateien im Verzeichnis foo/ in "classes.jar": \n jar cvfm classes.jar mymanifest -C foo/ .\n
+usage=Verwendung: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] Dateien...\nOptionen:\n -c Neues Archiv erstellen\n -t Inhaltsverzeichnis f\u00FCr Archiv auflisten\n -x Genannte (oder alle) Dateien aus Archiv extrahieren\n -u Vorhandenes Archiv aktualisieren\n -v Verbose-Ausgabe f\u00FCr Standardausgabe generieren\n -f Namen der Archivdatei angeben\n -m Manifest-Informationen von angegebener Manifest-Datei einschlie\u00DFen\n -e Anwendungs-Einstiegspunkt f\u00FCr die \n in einer ausf\u00FChrbaren JAR-Datei geb\u00FCndelte Standalone-Anwendung angeben\n -0 Nur speichern (keine ZIP-Komprimierung)\n -M Keine Manifest-Datei f\u00FCr die Eintr\u00E4ge erstellen\n -i Indexinformationen f\u00FCr angegebenen JAR-Dateien erstellen\n -C zum angegebenen Verzeichnis wechseln und folgende Datei einschlie\u00DFen\nFalls eine Datei ein Verzeichnis ist, wird dieses rekursiv verarbeitet.\nDer Name der Manifest-Datei, der Name der Archivdatei und der Name des Einstiegspunkts werden\nin derselben Reihenfolge wie die Kennzeichen "m", "f" und "e" angegeben.\n\nBeispiel 1: Archivieren Sie zwei Klassendateien in ein Archiv mit Namen "classes.jar": \n jar cvf classes.jar Foo.class Bar.class \nBeispiel 2: Verwenden Sie die vorhandenen Manifest-Datei "mymanifest", und archivieren Sie\n alle Dateien im Verzeichnis foo/ in "classes.jar": \n jar cvfm classes.jar mymanifest -C foo/ .\n
--- a/jdk/src/share/classes/sun/tools/jar/resources/jar_es.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/tools/jar/resources/jar_es.properties Thu Oct 10 13:41:08 2013 -0700
@@ -29,7 +29,6 @@
error.bad.cflag=El indicador 'c' necesita la especificaci\u00F3n de archivos de manifiesto o de entrada.
error.bad.uflag=El indicador 'u' necesita la especificaci\u00F3n de archivos de manifiesto, de entrada o indicador 'e'.
error.bad.eflag=El indicador 'e' y el manifiesto con el atributo 'Main-Class' no pueden especificarse \na la vez.
-error.bad.pvalue=valor err\u00F3neo para el atributo ''Profile'': {0}
error.nosuch.fileordir={0} : no existe tal archivo o directorio
error.write.file=Error al escribir un archivo jar existente
error.create.dir={0} : no se ha podido crear el directorio
@@ -42,7 +41,7 @@
out.stored=(almacenado 0%)
out.create=\ creado: {0}
out.extracted=extra\u00EDdo: {0}
-out.inflated=\ \\inflado: {0}
+out.inflated=\ inflado: {0}
out.size=(entrada = {0}) (salida = {1})
-usage=Sintaxis: archivos jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] ...\nOpciones:\n -c crear nuevo archivo\n -t mostrar la tabla de contenido del archivo\n -x extraer los archivos mencionados (o todos) del archivo\n -u actualizar archivo existente\n -v generar salida detallada de los datos de salida est\u00E1ndar\n -f especificar nombre de archivo de almacenamiento\n -m incluir informaci\u00F3n de manifiesto del archivo de manifiesto especificado\n -e especificar punto de entrada de la aplicaci\u00F3n para la aplicaci\u00F3n aut\u00F3noma \n que se incluye dentro de un archivo jar ejecutable\n -p especificar nombre de perfil\n -0 solo almacenar; no utilizar compresi\u00F3n ZIP\n -M no crear un archivo de manifiesto para las entradas\n -i generar informaci\u00F3n de \u00EDndice para los archivos jar especificados\n -C cambiar al directorio especificado e incluir el archivo siguiente\nSi alg\u00FAn archivo es un directorio, se procesar\u00E1 de forma recurrente.\nEl nombre del archivo de manifiesto, el nombre del archivo de almacenamiento y el nombre del punto de entrada se\nespecifican en el mismo orden que los indicadores 'm', 'f' y 'e'.\n\nEjemplo 1: para archivar archivos de dos clases en un archivo llamado classes.jar: \n jar cvf classes.jar Foo.class Bar.class \nEjemplo 2: utilice un archivo de manifiesto existente 'mymanifest' y archive todos los\narchivos del directorio foo/ en'classes.jar': \n jar cvfm classes.jar mymanifest -C foo/ .\n
+usage=Sintaxis: jar {ctxui}[vfm0Me] [archive-jar] [archive-manifiesto] [punto-entrada] [-C dir] archivos...\nOpciones:\n -c crear nuevo archivo\n -t crear la tabla de contenido del archivo\n -x extraer el archive mencionado (o todos) del archivo\n -u actualizar archive existente\n -v generar salida detallada de los datos de salida est\u00E1ndar\n -f especificar nombre de archive de almacenamiento\n -m incluir informaci\u00F3n de manifiesto del archive de manifiesto especificado\n -e especificar punto de entrada de la aplicaci\u00F3n para la aplicaci\u00F3n aut\u00F3noma \n que se incluye dentro de un archive jar ejecutable\n -0 s\u00F3lo almacenar; no utilizar compresi\u00F3n ZIP\n -M no crear un archive de manifiesto para las entradas\n -i generar informaci\u00F3n de \u00EDndice para los archives jar especificados\n -C cambiar al directorio especificado e incluir el archivo siguiente\nSi alg\u00FAn archivo es un directorio, se procesar\u00E1 de forma recurrente.\nEl nombre del archivo de manifiesto, el nombre del archivo de almacenamiento y el nombre del punto de entrada se\nespecifican en el mismo orden que los indicadores 'm', 'f' y 'e'.\n\nEjemplo 1: para archivar archivos de dos clases en un archivo llamado classes.jar: \n jar cvf classes.jar Foo.class Bar.class \nEjemplo 2: utilice un archivo de manifiesto existente 'mymanifest' y archive todos los\n archivos del directorio foo/ en 'classes.jar': \n jar cvfm classes.jar mymanifest -C foo/ .\n
--- a/jdk/src/share/classes/sun/tools/jar/resources/jar_fr.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/tools/jar/resources/jar_fr.properties Thu Oct 10 13:41:08 2013 -0700
@@ -29,7 +29,6 @@
error.bad.cflag=L'indicateur c requiert la sp\u00E9cification d'un fichier manifeste ou d'un fichier d'entr\u00E9e.
error.bad.uflag=L'indicateur u requiert la sp\u00E9cification d'un fichier manifeste, d'un fichier d'entr\u00E9e ou d'un indicateur e.
error.bad.eflag=L'indicateur e et le fichier manifeste portant l'attribut Main-Class ne peuvent pas \u00EAtre sp\u00E9cifi\u00E9s \nensemble.
-error.bad.pvalue=valeur incorrecte pour l''attribut ''Profile'' : {0}
error.nosuch.fileordir={0} : fichier ou r\u00E9pertoire introuvable
error.write.file=Erreur lors de l'\u00E9criture d'un fichier JAR existant
error.create.dir={0} : impossible de cr\u00E9er le r\u00E9pertoire
@@ -42,7 +41,7 @@
out.stored=(stockage : 0 %)
out.create=\ cr\u00E9\u00E9 : {0}
out.extracted=extrait : {0}
-out.inflated=\ \\d\u00E9compress\u00E9 : {0}
+out.inflated=\ d\u00E9compress\u00E9 : {0}
out.size=(entr\u00E9e = {0}) (sortie = {1})
-usage=Syntaxe : jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...\nOptions :\n -c cr\u00E9e une archive\n -t affiche la table des mati\u00E8res de l'archive\n -x extrait les fichiers nomm\u00E9s (ou tous les fichiers) de l'archive\n -u met \u00E0 jour l'archive existante\n -v g\u00E9n\u00E8re une sortie en mode verbose d'une sortie standard\n -f sp\u00E9cifie le nom du fichier d'archive\n -m inclut les informations de manifest \u00E0 partir du fichier manifest sp\u00E9cifi\u00E9\n -e sp\u00E9cifie le point d'entr\u00E9e d'une application en mode autonome \n int\u00E9gr\u00E9e \u00E0 un fichier JAR ex\u00E9cutable\n -p indique le nom de profil\n -0 stockage uniquement, pas de compression ZIP\n -M ne cr\u00E9e pas de fichier manifest pour les entr\u00E9es\n -i g\u00E9n\u00E8re les informations d'index des fichiers JAR sp\u00E9cifi\u00E9s\n -C passe au r\u00E9pertoire sp\u00E9cifi\u00E9 et inclut le fichier suivant\nSi l'un des fichiers est un r\u00E9pertoire, celui-ci est trait\u00E9 r\u00E9cursivement.\nLes noms du fichier manifest, du fichier d'archive et du point d'entr\u00E9e sont\nsp\u00E9cifi\u00E9s dans le m\u00EAme ordre que celui des indicateurs m, f et e.\n\nExemple 1 : pour archiver deux fichiers de classe dans une archive intitul\u00E9e classes.jar : \n jar cvf classes.jar Foo.class Bar.class \nExemple 2 : pour utiliser un fichier manifest existant 'mymanifest', puis archiver tous les\n fichiers du r\u00E9pertoire foo/ dans 'classes.jar' : \n jar cvfm classes.jar mymanifest -C foo/ .\n
+usage=Syntaxe : jar {ctxui}[vfm0Me] [fichier-jar] [fichier-manifeste] [point-entr\u00E9e] [-C r\u00E9p] fichiers...\nOptions :\n -c cr\u00E9e une archive\n -t affiche la table des mati\u00E8res de l'archive\n -x extrait les fichiers nomm\u00E9s (ou tous les fichiers) de l'archive\n -u met \u00E0 jour l'archive existante\n -v g\u00E9n\u00E8re une version d\u00E9taill\u00E9e d'une sortie standard\n -f sp\u00E9cifie le nom du fichier archive\n -m inclut les informations de manifeste \u00E0 partir du fichier de manifeste sp\u00E9cifi\u00E9\n -e sp\u00E9cifie le point d'entr\u00E9e d'une application en mode autonome \n int\u00E9gr\u00E9e \u00E0 un fichier JAR ex\u00E9cutable\n -0 stockage uniquement, pas de compression ZIP\n -M ne cr\u00E9e pas de fichier manifeste pour les entr\u00E9es\n -i g\u00E9n\u00E8re les informations d'index des fichiers JAR sp\u00E9cifi\u00E9s\n -C passe au r\u00E9pertoire sp\u00E9cifi\u00E9 et inclut le fichier suivant\nSi l'un des fichiers est un r\u00E9pertoire, celui-ci est trait\u00E9 r\u00E9cursivement.\nLes noms du fichier manifeste, du fichier archive et du point d'entr\u00E9e sont\nsp\u00E9cifi\u00E9s dans le m\u00EAme ordre que celui des indicateurs m, f et e.\n\nExemple 1 : pour archiver deux fichiers de classe dans une archive intitul\u00E9e classes.jar : \n jar cvf classes.jar Foo.class Bar.class \nExemple 2 : pour utiliser un fichier manifeste existant 'monmanifeste', puis archiver tous les\n fichiers du r\u00E9pertoire foo/ dans 'classes.jar' : \n jar cvfm classes.jar monmanifeste -C foo/ .\n
--- a/jdk/src/share/classes/sun/tools/jar/resources/jar_it.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/tools/jar/resources/jar_it.properties Thu Oct 10 13:41:08 2013 -0700
@@ -29,7 +29,6 @@
error.bad.cflag=Per il flag 'c' \u00E8 necessario specificare file manifest o di input.
error.bad.uflag=Per il flag 'u' \u00E8 necessario specificare il flag 'e' oppure file manifest o di input.
error.bad.eflag=Il flag 'e' e il manifest con l'attributo 'Main-Class' non possono essere specificati\ninsieme.
-error.bad.pvalue=valore non valido per l''attributo ''Profile'': {0}
error.nosuch.fileordir={0} : file o directory inesistente
error.write.file=Errore durante la scrittura del file jar esistente
error.create.dir={0} : impossibile creare la directory
@@ -42,7 +41,7 @@
out.stored=(memorizzato 0%)
out.create=\ creato: {0}
out.extracted=estratto: {0}
-out.inflated=\ \\decompresso: {0}
+out.inflated=\ decompresso: {0}
out.size=(in = {0}) (out = {1})
-usage=Uso: jar {ctxui}[vfm0Me] [jar-file] [file manifest] [punto di accesso] [-C dir] file ...\nOpzioni:\n -c crea un nuovo archivio\n -t visualizza il sommario dell'archivio\n -x estrae i file specificati (o tutti i file) dall'archivio\n -u aggiorna un archivio esistente\n -v genera un output descrittivo dall'output standard\n -f specifica il nome file dell'archivio\n -m include le informazioni manifest dal file manifest specificato\n -e specifica il punto di accesso per l'applicazione standalone \n inclusa in un file JAR eseguibile\n -p specifica il nome del profilo\n -0 esegue solo la memorizzazione; non utilizza la compressione ZIP\n -M non crea un file manifest per le voci\n -i genera le informazioni di indice per i file JAR specificati\n -C passa alla directory specificata e include il file seguente\nSe un file qualsiasi \u00E8 una directory, viene elaborato in modo ricorsivo.\nIl nome del file manifest, del file di archivio e del punto di accesso devono\nessere specificati nello stesso ordine dei flag 'm', 'f' e 'e'.\n\nEsempio 1: archiviazione di due file di classe nell'archivio denominato classes.jar: \n jar cvf classes.jar Foo.class Bar.class \nEsempio 2: uso del file manifest esistente 'mymanifest' e archiviazione di tutti i\n file della directory foo/ in 'classes.jar': \n jar cvfm classes.jar mymanifest -C foo/.\n
+usage=Uso: jar {ctxui}[vfm0Me] [file-jar] [file-manifest] [punto di ingresso] [-C dir] file ...\nOpzioni:\n -c crea un nuovo archivio\n -t visualizza l'indice dell'archivio\n -x estrae i file con nome (o tutti i file) dall'archivio\n -u aggiorna l'archivio esistente\n -v genera output commentato dall'output standard\n -f specifica il nome file dell'archivio\n -m include informazioni manifest dal file manifest specificato\n -e specifica il punto di ingresso per l'applicazione stand-alone \n inclusa nel file jar eseguibile\n -0 solo memorizzazione; senza compressione ZIP\n -M consente di non creare un file manifest per le voci\n -i genera informazioni sull'indice per i file jar specificati\n -C imposta la directory specificata e include il file seguente\nSe un file \u00E8 una directory, verr\u00E0 elaborato in modo ricorsivo.\nIl nome del file manifest, del file di archivio e del punto di ingresso devono\nessere specificati nello stesso ordine dei flag 'm', 'f' ed 'e'.\n\nEsempio 1: archiviazione di due file di classe in un archivio con il nome classes.jar: \n jar cvf classes.jar Foo.class Bar.class \nEsempio 2: utilizzo del file manifest esistente 'mymanifest' e archiviazione di tutti i\n file della directory foo/ in 'classes.jar': \n jar cvfm classes.jar mymanifest -C foo/.\n
--- a/jdk/src/share/classes/sun/tools/jar/resources/jar_ja.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/tools/jar/resources/jar_ja.properties Thu Oct 10 13:41:08 2013 -0700
@@ -29,7 +29,6 @@
error.bad.cflag=\u30D5\u30E9\u30B0'c'\u3067\u306F\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u307E\u305F\u306F\u5165\u529B\u30D5\u30A1\u30A4\u30EB\u306E\u6307\u5B9A\u304C\u5FC5\u8981\u3067\u3059\u3002
error.bad.uflag=\u30D5\u30E9\u30B0'u'\u3067\u306F\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u304B'e'\u30D5\u30E9\u30B0\u3001\u307E\u305F\u306F\u5165\u529B\u30D5\u30A1\u30A4\u30EB\u306E\u6307\u5B9A\u304C\u5FC5\u8981\u3067\u3059\u3002
error.bad.eflag='e'\u30D5\u30E9\u30B0\u3068'Main-Class'\u5C5E\u6027\u3092\u6301\u3064\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u306F\u540C\u6642\u306B\n\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093\u3002
-error.bad.pvalue=''Profile''\u5C5E\u6027\u306E\u5024\u304C\u4E0D\u6B63\u3067\u3059: {0}
error.nosuch.fileordir={0}\u3068\u3044\u3046\u30D5\u30A1\u30A4\u30EB\u307E\u305F\u306F\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306F\u3042\u308A\u307E\u305B\u3093
error.write.file=\u65E2\u5B58jar\u30D5\u30A1\u30A4\u30EB\u306E\u66F8\u8FBC\u307F\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F
error.create.dir=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA{0}\u3092\u4F5C\u6210\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F
@@ -42,7 +41,7 @@
out.stored=(0%\u683C\u7D0D\u3055\u308C\u307E\u3057\u305F)
out.create=\ {0}\u304C\u4F5C\u6210\u3055\u308C\u307E\u3057\u305F
out.extracted={0}\u304C\u62BD\u51FA\u3055\u308C\u307E\u3057\u305F
-out.inflated=\ \\{0}\u304C\u5C55\u958B\u3055\u308C\u307E\u3057\u305F
+out.inflated=\ {0}\u304C\u5C55\u958B\u3055\u308C\u307E\u3057\u305F
out.size=(\u5165={0})(\u51FA={1})
-usage=\u4F7F\u7528\u65B9\u6CD5: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...\n\u30AA\u30D7\u30B7\u30E7\u30F3:\n -c \u30A2\u30FC\u30AB\u30A4\u30D6\u3092\u65B0\u898F\u4F5C\u6210\u3059\u308B\n -t \u30A2\u30FC\u30AB\u30A4\u30D6\u306E\u5185\u5BB9\u3092\u4E00\u89A7\u8868\u793A\u3059\u308B\n -x \u6307\u5B9A\u306E(\u307E\u305F\u306F\u3059\u3079\u3066\u306E)\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30FC\u30AB\u30A4\u30D6\u304B\u3089\u62BD\u51FA\u3059\u308B\n -u \u65E2\u5B58\u30A2\u30FC\u30AB\u30A4\u30D6\u3092\u66F4\u65B0\u3059\u308B\n -v \u6A19\u6E96\u51FA\u529B\u306B\u8A73\u7D30\u306A\u51FA\u529B\u3092\u751F\u6210\u3059\u308B\n -f \u30A2\u30FC\u30AB\u30A4\u30D6\u30FB\u30D5\u30A1\u30A4\u30EB\u540D\u3092\u6307\u5B9A\u3059\u308B\n -m \u6307\u5B9A\u306E\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u30FB\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u60C5\u5831\u3092\u53D6\u308A\u8FBC\u3080\n -e \u5B9F\u884C\u53EF\u80FDjar\u30D5\u30A1\u30A4\u30EB\u306B\u30D0\u30F3\u30C9\u30EB\u3055\u308C\u305F\u30B9\u30BF\u30F3\u30C9\u30A2\u30ED\u30F3\u30FB\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u306E\n \u30A8\u30F3\u30C8\u30EA\u30FB\u30DD\u30A4\u30F3\u30C8\u3092\u6307\u5B9A\u3059\u308B\n -p \u30D7\u30ED\u30D5\u30A1\u30A4\u30EB\u540D\u3092\u6307\u5B9A\u3059\u308B\n -0 \u683C\u7D0D\u306E\u307F\u3002ZIP\u5727\u7E2E\u3092\u4F7F\u7528\u3057\u306A\u3044\n -M \u30A8\u30F3\u30C8\u30EA\u306E\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u4F5C\u6210\u3057\u306A\u3044\n -i \u6307\u5B9A\u306Ejar\u30D5\u30A1\u30A4\u30EB\u306E\u7D22\u5F15\u60C5\u5831\u3092\u751F\u6210\u3059\u308B\n -C \u6307\u5B9A\u306E\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306B\u5909\u66F4\u3057\u3001\u4EE5\u4E0B\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u53D6\u308A\u8FBC\u3080\n\u30D5\u30A1\u30A4\u30EB\u304C\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u5834\u5408\u306F\u518D\u5E30\u7684\u306B\u51E6\u7406\u3055\u308C\u307E\u3059\u3002\n\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u30FB\u30D5\u30A1\u30A4\u30EB\u540D\u3001\u30A2\u30FC\u30AB\u30A4\u30D6\u30FB\u30D5\u30A1\u30A4\u30EB\u540D\u304A\u3088\u3073\u30A8\u30F3\u30C8\u30EA\u30FB\u30DD\u30A4\u30F3\u30C8\u540D\u306F\u3001\n\u30D5\u30E9\u30B0'm'\u3001'f'\u3001'e'\u3068\u540C\u3058\u9806\u5E8F\u3067\u6307\u5B9A\u3057\u307E\u3059\u3002\n\n\u4F8B1: 2\u3064\u306E\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30FC\u30AB\u30A4\u30D6classes.jar\u306B\u4FDD\u5B58\u3059\u308B:\n jar cvf classes.jar Foo.class Bar.class\n\u4F8B2: \u65E2\u5B58\u306E\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u30FB\u30D5\u30A1\u30A4\u30EB'mymanifest'\u3092\u4F7F\u7528\u3057\u3001foo/\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\n \u5168\u30D5\u30A1\u30A4\u30EB\u3092'classes.jar'\u306B\u30A2\u30FC\u30AB\u30A4\u30D6\u3059\u308B:\n jar cvfm classes.jar mymanifest -C foo/ \n
+usage=\u4F7F\u7528\u65B9\u6CD5: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...\n\u30AA\u30D7\u30B7\u30E7\u30F3:\n -c \u30A2\u30FC\u30AB\u30A4\u30D6\u3092\u65B0\u898F\u4F5C\u6210\u3059\u308B\n -t \u30A2\u30FC\u30AB\u30A4\u30D6\u306E\u5185\u5BB9\u3092\u4E00\u89A7\u8868\u793A\u3059\u308B\n -x \u6307\u5B9A\u306E(\u307E\u305F\u306F\u3059\u3079\u3066\u306E)\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30FC\u30AB\u30A4\u30D6\u304B\u3089\u62BD\u51FA\u3059\u308B\n -u \u65E2\u5B58\u30A2\u30FC\u30AB\u30A4\u30D6\u3092\u66F4\u65B0\u3059\u308B\n -v \u6A19\u6E96\u51FA\u529B\u306B\u8A73\u7D30\u306A\u51FA\u529B\u3092\u751F\u6210\u3059\u308B\n -f \u30A2\u30FC\u30AB\u30A4\u30D6\u30FB\u30D5\u30A1\u30A4\u30EB\u540D\u3092\u6307\u5B9A\u3059\u308B\n -m \u6307\u5B9A\u306E\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u30FB\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u60C5\u5831\u3092\u53D6\u308A\u8FBC\u3080\n -e \u5B9F\u884C\u53EF\u80FDjar\u30D5\u30A1\u30A4\u30EB\u306B\u30D0\u30F3\u30C9\u30EB\u3055\u308C\u305F\u30B9\u30BF\u30F3\u30C9\u30A2\u30ED\u30F3\u30FB\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u306E\n \u30A8\u30F3\u30C8\u30EA\u30FB\u30DD\u30A4\u30F3\u30C8\u3092\u6307\u5B9A\u3059\u308B\n -0 \u683C\u7D0D\u306E\u307F\u3002ZIP\u5727\u7E2E\u3092\u4F7F\u7528\u3057\u306A\u3044\n -M \u30A8\u30F3\u30C8\u30EA\u306E\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u4F5C\u6210\u3057\u306A\u3044\n -i \u6307\u5B9A\u306Ejar\u30D5\u30A1\u30A4\u30EB\u306E\u7D22\u5F15\u60C5\u5831\u3092\u751F\u6210\u3059\u308B\n -C \u6307\u5B9A\u306E\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306B\u5909\u66F4\u3057\u3001\u4EE5\u4E0B\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u53D6\u308A\u8FBC\u3080\n\u30D5\u30A1\u30A4\u30EB\u304C\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u5834\u5408\u306F\u518D\u5E30\u7684\u306B\u51E6\u7406\u3055\u308C\u307E\u3059\u3002\n\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u30FB\u30D5\u30A1\u30A4\u30EB\u540D\u3001\u30A2\u30FC\u30AB\u30A4\u30D6\u30FB\u30D5\u30A1\u30A4\u30EB\u540D\u304A\u3088\u3073\u30A8\u30F3\u30C8\u30EA\u30FB\u30DD\u30A4\u30F3\u30C8\u540D\u306F\u3001\n\u30D5\u30E9\u30B0'm'\u3001'f'\u3001'e'\u306E\u6307\u5B9A\u3068\u540C\u3058\u9806\u756A\u3067\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002\n\n\u4F8B1: 2\u3064\u306E\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30FC\u30AB\u30A4\u30D6classes.jar\u306B\u4FDD\u5B58\u3059\u308B:\n jar cvf classes.jar Foo.class Bar.class\n\u4F8B2: \u65E2\u5B58\u306E\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u30FB\u30D5\u30A1\u30A4\u30EB'mymanifest'\u3092\u4F7F\u7528\u3057\u3001foo/\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\n \u5168\u30D5\u30A1\u30A4\u30EB\u3092'classes.jar'\u306B\u30A2\u30FC\u30AB\u30A4\u30D6\u3059\u308B:\n jar cvfm classes.jar mymanifest -C foo/ \n
--- a/jdk/src/share/classes/sun/tools/jar/resources/jar_ko.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/tools/jar/resources/jar_ko.properties Thu Oct 10 13:41:08 2013 -0700
@@ -29,20 +29,19 @@
error.bad.cflag='c' \uD50C\uB798\uADF8\uB97C \uC0AC\uC6A9\uD558\uB824\uBA74 Manifest \uB610\uB294 \uC785\uB825 \uD30C\uC77C\uC744 \uC9C0\uC815\uD574\uC57C \uD569\uB2C8\uB2E4!
error.bad.uflag='u' \uD50C\uB798\uADF8\uB97C \uC0AC\uC6A9\uD558\uB824\uBA74 Manifest, 'e' \uD50C\uB798\uADF8 \uB610\uB294 \uC785\uB825 \uD30C\uC77C\uC744 \uC9C0\uC815\uD574\uC57C \uD569\uB2C8\uB2E4!
error.bad.eflag='e' \uD50C\uB798\uADF8 \uBC0F Manifest\uB97C 'Main-Class' \uC18D\uC131\uACFC \uD568\uAED8 \uC9C0\uC815\uD560 \uC218\n\uC5C6\uC2B5\uB2C8\uB2E4!
-error.bad.pvalue=''Profile'' \uC18D\uC131\uC5D0 \uB300\uD574 \uC798\uBABB\uB41C \uAC12: {0}
error.nosuch.fileordir={0}: \uD574\uB2F9 \uD30C\uC77C \uB610\uB294 \uB514\uB809\uD1A0\uB9AC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.
error.write.file=\uAE30\uC874 jar \uD30C\uC77C\uC5D0 \uC4F0\uB294 \uC911 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.
error.create.dir={0}: \uB514\uB809\uD1A0\uB9AC\uB97C \uC0DD\uC131\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
error.incorrect.length=\uCC98\uB9AC \uC911 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC740 \uAE38\uC774\uAC00 \uBC1C\uACAC\uB428: {0}
out.added.manifest=Manifest\uB97C \uCD94\uAC00\uD568
-out.update.manifest=Manifest\uB97C \uAC31\uC2E0\uD568
+out.update.manifest=Manifest\uB97C \uC5C5\uB370\uC774\uD2B8\uD568
out.ignore.entry={0} \uD56D\uBAA9\uC744 \uBB34\uC2DC\uD558\uB294 \uC911
out.adding=\uCD94\uAC00\uD558\uB294 \uC911: {0}
out.deflated=({0}%\uB97C \uAC10\uC18C\uD568)
out.stored=(0%\uB97C \uC800\uC7A5\uD568)
out.create=\ \uC0DD\uC131\uB428: {0}
out.extracted=\uCD94\uCD9C\uB428: {0}
-out.inflated=\ \\\uC99D\uAC00\uB428: {0}
+out.inflated=\ \uC99D\uAC00\uB428: {0}
out.size=(\uC785\uB825 = {0}) (\uCD9C\uB825 = {1})
-usage=\uC0AC\uC6A9\uBC95: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...\n\uC635\uC158:\n -c \uC0C8 \uC544\uCE74\uC774\uBE0C\uB97C \uC0DD\uC131\uD569\uB2C8\uB2E4.\n -t \uC544\uCE74\uC774\uBE0C\uC5D0 \uB300\uD55C \uBAA9\uCC28\uB97C \uB098\uC5F4\uD569\uB2C8\uB2E4.\n -x \uBA85\uBA85\uB41C(\uB610\uB294 \uBAA8\uB4E0) \uD30C\uC77C\uC744 \uC544\uCE74\uC774\uBE0C\uC5D0\uC11C \uCD94\uCD9C\uD569\uB2C8\uB2E4.\n -u \uAE30\uC874 \uC544\uCE74\uC774\uBE0C\uB97C \uC5C5\uB370\uC774\uD2B8\uD569\uB2C8\uB2E4.\n -v \uD45C\uC900 \uCD9C\uB825\uC5D0 \uC0C1\uC138 \uC815\uBCF4 \uCD9C\uB825\uC744 \uC0DD\uC131\uD569\uB2C8\uB2E4.\n -f \uC544\uCE74\uC774\uBE0C \uD30C\uC77C \uC774\uB984\uC744 \uC9C0\uC815\uD569\uB2C8\uB2E4.\n -m \uC9C0\uC815\uB41C Manifest \uD30C\uC77C\uC758 Manifest \uC815\uBCF4\uB97C \uD3EC\uD568\uD569\uB2C8\uB2E4.\n -e jar \uC2E4\uD589 \uD30C\uC77C\uC5D0 \uBC88\uB4E4\uB85C \uC81C\uACF5\uB41C \uB3C5\uB9BD\uD615 \uC751\uC6A9 \uD504\uB85C\uADF8\uB7A8\uC758 \n \uC751\uC6A9 \uD504\uB85C\uADF8\uB7A8 \uC2DC\uC791 \uC9C0\uC810\uC744 \uC9C0\uC815\uD569\uB2C8\uB2E4.\n -p \uD504\uB85C\uD30C\uC77C \uC774\uB984\uC744 \uC9C0\uC815\uD569\uB2C8\uB2E4.\n -0 \uC800\uC7A5 \uC804\uC6A9: ZIP \uC555\uCD95\uC744 \uC0AC\uC6A9\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\n -M \uD56D\uBAA9\uC5D0 \uB300\uD574 Manifest \uD30C\uC77C\uC744 \uC0DD\uC131\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\n -i \uC9C0\uC815\uB41C jar \uD30C\uC77C\uC5D0 \uB300\uD55C \uC778\uB371\uC2A4 \uC815\uBCF4\uB97C \uC0DD\uC131\uD569\uB2C8\uB2E4.\n -C \uC9C0\uC815\uB41C \uB514\uB809\uD1A0\uB9AC\uB85C \uBCC0\uACBD\uD558\uACE0 \uB2E4\uC74C \uD30C\uC77C\uC744 \uD3EC\uD568\uD569\uB2C8\uB2E4.\n\uD2B9\uC815 \uD30C\uC77C\uC774 \uB514\uB809\uD1A0\uB9AC\uC77C \uACBD\uC6B0 \uC21C\uD658\uC801\uC73C\uB85C \uCC98\uB9AC\uB429\uB2C8\uB2E4.\nManifest \uD30C\uC77C \uC774\uB984, \uC544\uCE74\uC774\uBE0C \uD30C\uC77C \uC774\uB984 \uBC0F \uC2DC\uC791 \uC9C0\uC810 \uC774\uB984\uC740\n'm', 'f' \uBC0F 'e' \uD50C\uB798\uADF8\uC640 \uB3D9\uC77C\uD55C \uC21C\uC11C\uB85C \uC9C0\uC815\uB429\uB2C8\uB2E4.\n\n\uC608 1: classes.jar\uB77C\uB294 \uC544\uCE74\uC774\uBE0C\uC5D0 \uB450 \uD074\uB798\uC2A4 \uD30C\uC77C\uC744 \uC544\uCE74\uC774\uBE0C\uD558\uB294 \uBC29\uBC95: \n jar cvf classes.jar Foo.class Bar.class \n\uC608 2: \uAE30\uC874 Manifest \uD30C\uC77C 'mymanifest'\uB97C \uC0AC\uC6A9\uD558\uC5EC\n foo/ \uB514\uB809\uD1A0\uB9AC\uC758 \uBAA8\uB4E0 \uD30C\uC77C\uC744 'classes.jar'\uB85C \uC544\uCE74\uC774\uBE0C\uD558\uB294 \uBC29\uBC95: \n jar cvfm classes.jar mymanifest -C foo/\n
+usage=\uC0AC\uC6A9\uBC95: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...\n\uC635\uC158:\n -c \uC0C8 \uC544\uCE74\uC774\uBE0C\uB97C \uC0DD\uC131\uD569\uB2C8\uB2E4.\n -t \uC544\uCE74\uC774\uBE0C\uC5D0 \uB300\uD55C \uBAA9\uCC28\uB97C \uB098\uC5F4\uD569\uB2C8\uB2E4.\n -x \uBA85\uBA85\uB41C(\uB610\uB294 \uBAA8\uB4E0) \uD30C\uC77C\uC744 \uC544\uCE74\uC774\uBE0C\uC5D0\uC11C \uCD94\uCD9C\uD569\uB2C8\uB2E4.\n -u \uAE30\uC874 \uC544\uCE74\uC774\uBE0C\uB97C \uC5C5\uB370\uC774\uD2B8\uD569\uB2C8\uB2E4.\n -v \uD45C\uC900 \uCD9C\uB825\uC5D0 \uC0C1\uC138 \uC815\uBCF4 \uCD9C\uB825\uC744 \uC0DD\uC131\uD569\uB2C8\uB2E4.\n -f \uC544\uCE74\uC774\uBE0C \uD30C\uC77C \uC774\uB984\uC744 \uC9C0\uC815\uD569\uB2C8\uB2E4.\n -m \uC9C0\uC815\uB41C Manifest \uD30C\uC77C\uC758 Manifest \uC815\uBCF4\uB97C \uD3EC\uD568\uD569\uB2C8\uB2E4.\n -e jar \uC2E4\uD589 \uD30C\uC77C\uC5D0 \uBC88\uB4E4\uB85C \uC81C\uACF5\uB41C \uB3C5\uB9BD\uD615 \uC751\uC6A9 \uD504\uB85C\uADF8\uB7A8\uC758 \n \uC751\uC6A9 \uD504\uB85C\uADF8\uB7A8 \uC2DC\uC791 \uC9C0\uC810\uC744 \uC9C0\uC815\uD569\uB2C8\uB2E4.\n -0 \uC800\uC7A5 \uC804\uC6A9: ZIP \uC555\uCD95\uC744 \uC0AC\uC6A9\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\n -M \uD56D\uBAA9\uC5D0 \uB300\uD574 Manifest \uD30C\uC77C\uC744 \uC0DD\uC131\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\n -i \uC9C0\uC815\uB41C jar \uD30C\uC77C\uC5D0 \uB300\uD55C \uC778\uB371\uC2A4 \uC815\uBCF4\uB97C \uC0DD\uC131\uD569\uB2C8\uB2E4.\n -C \uC9C0\uC815\uB41C \uB514\uB809\uD1A0\uB9AC\uB85C \uBCC0\uACBD\uD558\uACE0 \uB2E4\uC74C \uD30C\uC77C\uC744 \uD3EC\uD568\uD569\uB2C8\uB2E4.\n\uD2B9\uC815 \uD30C\uC77C\uC774 \uB514\uB809\uD1A0\uB9AC\uC77C \uACBD\uC6B0 \uC21C\uD658\uC801\uC73C\uB85C \uCC98\uB9AC\uB429\uB2C8\uB2E4.\nManifest \uD30C\uC77C \uC774\uB984, \uC544\uCE74\uC774\uBE0C \uD30C\uC77C \uC774\uB984 \uBC0F \uC2DC\uC791 \uC9C0\uC810 \uC774\uB984\uC740\n'm', 'f' \uBC0F 'e' \uD50C\uB798\uADF8\uC640 \uB3D9\uC77C\uD55C \uC21C\uC11C\uB85C \uC9C0\uC815\uB429\uB2C8\uB2E4.\n\n\uC608 1: classes.jar\uB77C\uB294 \uC544\uCE74\uC774\uBE0C\uC5D0 \uB450 \uD074\uB798\uC2A4 \uD30C\uC77C\uC744 \uC544\uCE74\uC774\uBE0C\uD558\uB294 \uBC29\uBC95: \n jar cvf classes.jar Foo.class Bar.class \n\uC608 2: \uAE30\uC874 Manifest \uD30C\uC77C 'mymanifest'\uB97C \uC0AC\uC6A9\uD558\uC5EC\n foo/ \uB514\uB809\uD1A0\uB9AC\uC758 \uBAA8\uB4E0 \uD30C\uC77C\uC744 'classes.jar'\uB85C \uC544\uCE74\uC774\uBE0C\uD558\uB294 \uBC29\uBC95: \n jar cvfm classes.jar mymanifest -C foo/ .\n
--- a/jdk/src/share/classes/sun/tools/jar/resources/jar_pt_BR.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/tools/jar/resources/jar_pt_BR.properties Thu Oct 10 13:41:08 2013 -0700
@@ -29,7 +29,6 @@
error.bad.cflag=flag 'c' requer que os arquivos de manifesto ou entrada sejam especificados!
error.bad.uflag=o flag 'u' requer que arquivos de manifesto, o flag 'e' ou arquivos de entrada sejam especificados!
error.bad.eflag=o flag 'e' e manifesto com o atributo 'Main-Class' n\u00E3o podem ser especificados \njuntos!
-error.bad.pvalue=valor inv\u00E1lido do atributo de ''Perfil'': {0}
error.nosuch.fileordir={0} : n\u00E3o h\u00E1 tal arquivo ou diret\u00F3rio
error.write.file=Erro ao gravar o arquivo jar existente
error.create.dir={0} : n\u00E3o foi poss\u00EDvel criar o diret\u00F3rio
@@ -38,11 +37,11 @@
out.update.manifest=manifesto atualizado
out.ignore.entry=ignorando entrada {0}
out.adding=adicionando: {0}
-out.deflated=(vazio {0}%)
+out.deflated=(compactado {0}%)
out.stored=(armazenado 0%)
out.create=\ criado: {0}
out.extracted=extra\u00EDdo: {0}
-out.inflated=\ \\cheio: {0}
-out.size=(dentro = {0}) (fora= {1})
+out.inflated=\ inflado: {0}
+out.size=(entrada = {0}) (sa\u00EDda= {1})
-usage=Uso: arquivos jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] ...\nOp\u00E7\u00F5es:\n -c cria novo arquivo compactado\n -t lista o sum\u00E1rio do arquivo compactado\n -x extrai arquivos com o nome (ou todos) do arquivo compactado\n -u atualizar o arquivo compactado existente\n -v gera sa\u00EDda detalhada na sa\u00EDda padr\u00E3o\n -f especifica o nome do arquivo do arquivo compactado\n -m inclui as informa\u00E7\u00F5es do manifesto do arquivo de manifesto especificado\n -e especifica o ponto de entrada da aplica\u00E7\u00E3o para aplica\u00E7\u00E3o independente \n empacotado em um arquivo jar execut\u00E1vel\n -p especifca o nome do perfil\n -0 armazena somente; n\u00E3o usa compacta\u00E7\u00E3o ZIP\n -M n\u00E3o cria um arquivo de manifesto para as entradas\n -i gera informa\u00E7\u00F5es de \u00EDndice para os arquivos especificados\n -C altera para o diret\u00F3rio e inclui o arquivo seguinte\nSe nenhum arquivo for um diret\u00F3rio, ent\u00E3o ser\u00E1 processado repetidamente.\nO nome do arquivo de manifesto, o nome do arquivo compactado e o nome do ponto de entrada s\u00E3o\nespecificados na mesma ordem dos flags 'm', 'f' e 'e'.\n\nExemplo 1: para arquivar dois arquivos de classe em um arquivo compactado com o nome classes.jar: \n jar cvf classes.jar Foo.class Bar.class \nExemplo 2: use um arquivo de manifesto existente 'mymanifest' e arquive todos os\n arquivos no diret\u00F3rio foo/ na 'classes.jar': \n jar cvfm classes.jar mymanifest -C foo/ .\n
+usage=Uso: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] arquivos ...\nOp\u00E7\u00F5es:\n -c cria novo arquivo compactado\n -t lista o sum\u00E1rio do arquivo compactado\n -x extrai arquivos com o nome (ou todos) do arquivo compactado\n -u atualizar o arquivo compactado existente\n -v gera sa\u00EDda detalhada na sa\u00EDda padr\u00E3o\n -f especifica o nome do arquivo do arquivo compactado\n -m inclui as informa\u00E7\u00F5es do manifesto do arquivo de manifesto especificado\n -e especifica o ponto de entrada da aplica\u00E7\u00E3o para aplica\u00E7\u00E3o independente \n empacotando em um arquivo jar execut\u00E1vel\n -0 armazena somente; n\u00E3o usa compacta\u00E7\u00E3o ZIP\n -M n\u00E3o cria um arquivo de manifesto para as entradas\n -i gera informa\u00E7\u00F5es de \u00EDndice para os arquivos especificados\n -C altera para o diret\u00F3rio e inclui o arquivo seguinte\nSe nenhum arquivo for um diret\u00F3rio, ent\u00E3o ser\u00E1 processado repetidamente.\nO nome do arquivo de manifesto, o nome do arquivo compactado e o nome do ponto de entrada s\u00E3o\nespecificados na mesma ordem dos flags 'm', 'f' e 'e'.\n\nExemplo 1: para arquivar dois arquivos de classe em um arquivo compactado com o nome classes.jar: \n jar cvf classes.jar Foo.class Bar.class \nExemplo 2: use um arquivo de manifesto existente 'mymanifest' e arquive todos os\n arquivos no diret\u00F3rio foo/ na 'classes.jar': \n jar cvfm classes.jar mymanifest -C foo/ .\n
--- a/jdk/src/share/classes/sun/tools/jar/resources/jar_sv.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/tools/jar/resources/jar_sv.properties Thu Oct 10 13:41:08 2013 -0700
@@ -29,7 +29,6 @@
error.bad.cflag=f\u00F6r c-flaggan m\u00E5ste manifest- eller indatafiler anges.
error.bad.uflag=f\u00F6r u-flaggan m\u00E5ste manifest-, e-flagg- eller indatafiler anges.
error.bad.eflag=e-flaggan och manifest med attributet Main-Class kan inte anges \ntillsammans.
-error.bad.pvalue=felaktigt v\u00E4rde f\u00F6r ''Profile''-attribut: {0}
error.nosuch.fileordir={0} : det finns ingen s\u00E5dan fil eller katalog
error.write.file=Det uppstod ett fel vid skrivning till befintlig jar-fil.
error.create.dir={0} : kunde inte skapa n\u00E5gon katalog
@@ -45,4 +44,4 @@
out.inflated=\ uppackat: {0}
out.size=(in = {0}) (ut = {1})
-usage=Syntax: jar {ctxui}[vfm0Me] [jar-fil] [manifestfil] [startpunkt] [-C katalog] filer ...\nAlternativ:\n -c skapa nytt arkiv\n -t lista inneh\u00E5llsf\u00F6rteckning f\u00F6r arkiv\n -x extrahera namngivna (eller alla) filer fr\u00E5n arkiv\n -u uppdatera befintligt arkiv\n -v generera utf\u00F6rliga utdata vid standardutmatning\n -f ange arkivfilens namn\n -m inkludera manifestinformation fr\u00E5n angivet manifest\n -e ange programstartpunkt f\u00F6r frist\u00E5ende applikation \n som medf\u00F6ljer i en jar-programfil\n -p ange profilnamn\n -0 endast lagra (ingen zip-komprimering)\n -M skapa inte n\u00E5gon manifestfil f\u00F6r posterna\n -i generera indexinformation f\u00F6r de angivna jar-filerna\n -C \u00E4ndra till den angivna katalogen och inkludera f\u00F6ljande fil\nOm en fil \u00E4r en katalog bearbetas den rekursivt.\nNamnen p\u00E5 manifestfilen, arkivfilen och startpunkten anges\ni samma ordning som m-, f- och e-flaggorna.\n\nExempel 1: S\u00E5 h\u00E4r arkiverar du tv\u00E5 klassfiler i ett arkiv med namnet classes.jar: \n jar cvf classes.jar Foo.class Bar.class \nExempel 2: Anv\u00E4nd en befintlig manifestfil (mymanifest) och arkivera alla\n filer fr\u00E5n katalogen foo/ i classes.jar: \n jar cvfm classes.jar mymanifest -C foo/ .\n
+usage=Syntax: jar {ctxui}[vfm0Me] [jar fil] [manifestfil] [startpunkt] [-C-katalog] ...\nAlternativ:\n -c skapa nytt arkiv\n -t lista inneh\u00E5llsf\u00F6rteckning f\u00F6r arkiv\n -x extrahera namngivna (eller alla) filer fr\u00E5n arkiv\n -u uppdatera befintligt arkiv\n -v generera utf\u00F6rliga utdata vid standardutmatning\n -f ange arkivfilens namn\n -m inkludera manifestinformation fr\u00E5n angivet manifest\n -e ange programstartpunkt f\u00F6r frist\u00E5ende applikation \n som medf\u00F6ljer i en jar-programfil\n -0 endast lagra (ingen zip-komprimering)\n -M skapa inte n\u00E5gon manifestfil f\u00F6r posterna\n -i generera indexinformation f\u00F6r de angivna jar-filerna\n -C \u00E4ndra till den angivna katalogen och inkludera f\u00F6ljande fil\nOm en fil \u00E4r en katalog bearbetas den rekursivt.\nNamnen p\u00E5 manifestfilen, arkivfilen och startpunkten anges i samma\nordning som m-, f- och e-flaggorna.\n\nExempel 1: S\u00E5 h\u00E4r arkiverar du tv\u00E5 klassfiler i ett arkiv med namnet classes.jar: \n jar cvf classes.jar Foo.class Bar.class \nExempel 2: Anv\u00E4nd en befintlig manifestfil (mymanifest) och arkivera alla\n filer fr\u00E5n katalogen foo/ i classes.jar: \n jar cvfm classes.jar mymanifest -C foo/ .\n
--- a/jdk/src/share/classes/sun/tools/jar/resources/jar_zh_CN.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/tools/jar/resources/jar_zh_CN.properties Thu Oct 10 13:41:08 2013 -0700
@@ -29,7 +29,6 @@
error.bad.cflag='c' \u6807\u8BB0\u8981\u6C42\u6307\u5B9A\u6E05\u5355\u6216\u8F93\u5165\u6587\u4EF6!
error.bad.uflag='u' \u6807\u8BB0\u8981\u6C42\u6307\u5B9A\u6E05\u5355, 'e' \u6807\u8BB0\u6216\u8F93\u5165\u6587\u4EF6!
error.bad.eflag=\u4E0D\u80FD\u540C\u65F6\u6307\u5B9A 'e' \u6807\u8BB0\u548C\u5177\u6709 'Main-Class' \u5C5E\u6027\u7684\n\u6E05\u5355!
-error.bad.pvalue=''Profile'' \u5C5E\u6027\u7684\u503C\u9519\u8BEF: {0}
error.nosuch.fileordir={0}: \u6CA1\u6709\u8FD9\u4E2A\u6587\u4EF6\u6216\u76EE\u5F55
error.write.file=\u5199\u5165\u73B0\u6709\u7684 jar \u6587\u4EF6\u65F6\u51FA\u9519
error.create.dir={0}: \u65E0\u6CD5\u521B\u5EFA\u76EE\u5F55
@@ -45,4 +44,4 @@
out.inflated=\ \u5DF2\u89E3\u538B: {0}
out.size=(\u8F93\u5165 = {0}) (\u8F93\u51FA = {1})
-usage=\u7528\u6CD5: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...\n\u9009\u9879:\n -c \u521B\u5EFA\u65B0\u6863\u6848\n -t \u5217\u51FA\u6863\u6848\u76EE\u5F55\n -x \u4ECE\u6863\u6848\u4E2D\u63D0\u53D6\u6307\u5B9A\u7684 (\u6216\u6240\u6709) \u6587\u4EF6\n -u \u66F4\u65B0\u73B0\u6709\u6863\u6848\n -v \u5728\u6807\u51C6\u8F93\u51FA\u4E2D\u751F\u6210\u8BE6\u7EC6\u8F93\u51FA\n -f \u6307\u5B9A\u6863\u6848\u6587\u4EF6\u540D\n -m \u5305\u542B\u6307\u5B9A\u6E05\u5355\u6587\u4EF6\u4E2D\u7684\u6E05\u5355\u4FE1\u606F\n -e \u4E3A\u7ED1\u5B9A\u5230\u53EF\u6267\u884C jar \u6587\u4EF6\u7684\u72EC\u7ACB\u5E94\u7528\u7A0B\u5E8F\n \u6307\u5B9A\u5E94\u7528\u7A0B\u5E8F\u5165\u53E3\u70B9\n -p \u6307\u5B9A\u914D\u7F6E\u6587\u4EF6\u540D\u79F0\n -0 \u4EC5\u5B58\u50A8; \u4E0D\u4F7F\u7528\u4EFB\u4F55 ZIP \u538B\u7F29\n -M \u4E0D\u521B\u5EFA\u6761\u76EE\u7684\u6E05\u5355\u6587\u4EF6\n -i \u4E3A\u6307\u5B9A\u7684 jar \u6587\u4EF6\u751F\u6210\u7D22\u5F15\u4FE1\u606F\n -C \u66F4\u6539\u4E3A\u6307\u5B9A\u7684\u76EE\u5F55\u5E76\u5305\u542B\u4EE5\u4E0B\u6587\u4EF6\n\u5982\u679C\u6587\u4EF6\u4E3A\u76EE\u5F55, \u5219\u5BF9\u5176\u8FDB\u884C\u9012\u5F52\u5904\u7406\u3002\n\u6E05\u5355\u6587\u4EF6\u540D, \u6863\u6848\u6587\u4EF6\u540D\u548C\u5165\u53E3\u70B9\u540D\u79F0\u7684\u6307\u5B9A\u987A\u5E8F\n\u4E0E 'm', 'f' \u548C 'e' \u6807\u8BB0\u7684\u6307\u5B9A\u987A\u5E8F\u76F8\u540C\u3002\n\n\u793A\u4F8B 1: \u5C06\u4E24\u4E2A\u7C7B\u6587\u4EF6\u5F52\u6863\u5230\u4E00\u4E2A\u540D\u4E3A classes.jar \u7684\u6863\u6848\u4E2D: \n jar cvf classes.jar Foo.class Bar.class \n\u793A\u4F8B 2: \u4F7F\u7528\u73B0\u6709\u7684\u6E05\u5355\u6587\u4EF6 'mymanifest' \u5E76\n \u5C06 foo/ \u76EE\u5F55\u4E2D\u7684\u6240\u6709\u6587\u4EF6\u5F52\u6863\u5230 'classes.jar' \u4E2D: \n jar cvfm classes.jar mymanifest -C foo/\u3002\n
+usage=\u7528\u6CD5: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...\n\u9009\u9879\u5305\u62EC: \n -c \u521B\u5EFA\u65B0\u7684\u5F52\u6863\u6587\u4EF6\n -t \u5217\u51FA\u5F52\u6863\u76EE\u5F55\n -x \u4ECE\u6863\u6848\u4E2D\u63D0\u53D6\u6307\u5B9A\u7684 (\u6216\u6240\u6709) \u6587\u4EF6\n -u \u66F4\u65B0\u73B0\u6709\u7684\u5F52\u6863\u6587\u4EF6\n -v \u5728\u6807\u51C6\u8F93\u51FA\u4E2D\u751F\u6210\u8BE6\u7EC6\u8F93\u51FA\n -f \u6307\u5B9A\u5F52\u6863\u6587\u4EF6\u540D\n -m \u5305\u542B\u6307\u5B9A\u6E05\u5355\u6587\u4EF6\u4E2D\u7684\u6E05\u5355\u4FE1\u606F\n -e \u4E3A\u6346\u7ED1\u5230\u53EF\u6267\u884C jar \u6587\u4EF6\u7684\u72EC\u7ACB\u5E94\u7528\u7A0B\u5E8F\n \u6307\u5B9A\u5E94\u7528\u7A0B\u5E8F\u5165\u53E3\u70B9\n -0 \u4EC5\u5B58\u50A8; \u4E0D\u4F7F\u7528\u60C5\u51B5\u4EFB\u4F55 ZIP \u538B\u7F29\n -M \u4E0D\u521B\u5EFA\u6761\u76EE\u7684\u6E05\u5355\u6587\u4EF6\n -i \u4E3A\u6307\u5B9A\u7684 jar \u6587\u4EF6\u751F\u6210\u7D22\u5F15\u4FE1\u606F\n -C \u66F4\u6539\u4E3A\u6307\u5B9A\u7684\u76EE\u5F55\u5E76\u5305\u542B\u5176\u4E2D\u7684\u6587\u4EF6\n\u5982\u679C\u6709\u4EFB\u4F55\u76EE\u5F55\u6587\u4EF6, \u5219\u5BF9\u5176\u8FDB\u884C\u9012\u5F52\u5904\u7406\u3002\n\u6E05\u5355\u6587\u4EF6\u540D, \u5F52\u6863\u6587\u4EF6\u540D\u548C\u5165\u53E3\u70B9\u540D\u79F0\u7684\u6307\u5B9A\u987A\u5E8F\n\u4E0E 'm', 'f' \u548C 'e' \u6807\u8BB0\u7684\u6307\u5B9A\u987A\u5E8F\u76F8\u540C\u3002\n\n\u793A\u4F8B 1: \u5C06\u4E24\u4E2A\u7C7B\u6587\u4EF6\u5F52\u6863\u5230\u4E00\u4E2A\u540D\u4E3A classes.jar \u7684\u5F52\u6863\u6587\u4EF6\u4E2D: \n jar cvf classes.jar Foo.class Bar.class \n\u793A\u4F8B 2: \u4F7F\u7528\u73B0\u6709\u7684\u6E05\u5355\u6587\u4EF6 'mymanifest' \u5E76\n \u5C06 foo/ \u76EE\u5F55\u4E2D\u7684\u6240\u6709\u6587\u4EF6\u5F52\u6863\u5230 'classes.jar' \u4E2D: \n jar cvfm classes.jar mymanifest -C foo/\u3002\n
--- a/jdk/src/share/classes/sun/tools/jar/resources/jar_zh_TW.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/tools/jar/resources/jar_zh_TW.properties Thu Oct 10 13:41:08 2013 -0700
@@ -29,7 +29,6 @@
error.bad.cflag='c' \u65D7\u6A19\u8981\u6C42\u6307\u5B9A\u8CC7\u8A0A\u6E05\u55AE\u6216\u8F38\u5165\u6A94\u6848\uFF01
error.bad.uflag='u' \u65D7\u6A19\u8981\u6C42\u6307\u5B9A\u8CC7\u8A0A\u6E05\u55AE\u3001'e' \u65D7\u6A19\u6216\u8F38\u5165\u6A94\u6848\uFF01
error.bad.eflag=\u7121\u6CD5\u540C\u6642\u6307\u5B9A 'e' \u65D7\u6A19\u548C\u5177\u6709 'Main-Class' \u5C6C\u6027\u7684\n\u8CC7\u8A0A\u6E05\u55AE\uFF01
-error.bad.pvalue=''Profile'' \u5C6C\u6027\u503C\u7121\u6548: {0}
error.nosuch.fileordir={0} : \u6C92\u6709\u9019\u985E\u6A94\u6848\u6216\u76EE\u9304
error.write.file=\u5BEB\u5165\u73FE\u6709\u7684 jar \u6A94\u6848\u6642\u767C\u751F\u932F\u8AA4
error.create.dir={0} : \u7121\u6CD5\u5EFA\u7ACB\u76EE\u9304
@@ -42,7 +41,7 @@
out.stored=(\u5132\u5B58 0%)
out.create=\ \u5EFA\u7ACB: {0}
out.extracted=\u64F7\u53D6: {0}
-out.inflated=\ \\\u64F4\u5C55: {0}
+out.inflated=\ \u64F4\u5C55: {0}
out.size=\ (\u8B80={0})(\u5BEB={1})
-usage=\u7528\u6CD5: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...\n\u9078\u9805:\n -c \u5EFA\u7ACB\u65B0\u7684\u5B58\u6A94\n -t \u5217\u51FA\u5B58\u6A94\u7684\u76EE\u9304\n -x \u5F9E\u5B58\u6A94\u4E2D\u64F7\u53D6\u6307\u5B9A\u7684 (\u6216\u6240\u6709) \u6A94\u6848\n -u \u66F4\u65B0\u73FE\u6709\u5B58\u6A94\n -v \u5728\u6A19\u6E96\u8F38\u51FA\u7522\u751F\u8A73\u7D30\u8F38\u51FA\n -f \u6307\u5B9A\u5B58\u6A94\u6A94\u6848\u540D\u7A31\n -m \u5305\u542B\u6307\u5B9A\u4E4B\u8CC7\u8A0A\u6E05\u55AE\u6A94\u6848\u4E2D\u7684\u8CC7\u8A0A\u6E05\u55AE\u8CC7\u8A0A\n -e \u6307\u5B9A\u7368\u7ACB\u61C9\u7528\u7A0B\u5F0F\u7684\u61C9\u7528\u7A0B\u5F0F\u9032\u5165\u9EDE \n \u5DF2\u96A8\u9644\u65BC\u53EF\u57F7\u884C jar \u6A94\u6848\u4E2D\n -p \u6307\u5B9A\u8A2D\u5B9A\u6A94\u540D\u7A31\n -0 \u53EA\u5132\u5B58; \u4E0D\u4F7F\u7528 ZIP \u58D3\u7E2E\u65B9\u5F0F\n -M \u4E0D\u66FF\u9805\u76EE\u5EFA\u7ACB\u8CC7\u8A0A\u6E05\u55AE\u6A94\u6848\n -i \u7522\u751F\u6307\u5B9A\u4E4B jar \u6A94\u6848\u7684\u7D22\u5F15\u8CC7\u8A0A\n -C \u8B8A\u66F4\u81F3\u6307\u5B9A\u7684\u76EE\u9304\u4E26\u5305\u542B\u4E0B\u5217\u6A94\u6848\n\u5982\u679C\u6709\u4EFB\u4F55\u6A94\u6848\u662F\u76EE\u9304\uFF0C\u5247\u6703\u905E\u8FF4\u5730\u8655\u7406\u6A94\u6848\u3002\n\u8CC7\u8A0A\u6E05\u55AE\u6A94\u6848\u540D\u7A31\u3001\u5B58\u6A94\u6A94\u6848\u540D\u7A31\u4EE5\u53CA\u9032\u5165\u9EDE\u540D\u7A31\u7684\n\u6307\u5B9A\u9806\u5E8F\u8207 'm' \u65D7\u6A19\u3001'f' \u65D7\u6A19\u548C 'e' \u65D7\u6A19\u7684\u9806\u5E8F\u76F8\u540C\u3002\n\n\u7BC4\u4F8B 1: \u5C07\u5169\u500B\u985E\u5225\u6A94\u6848\u5B58\u6A94\u81F3\u540D\u70BA classes.jar \u7684\u5B58\u6A94\u4E2D: \n jar cvf classes.jar Foo.class Bar.class \n\u7BC4\u4F8B 2: \u4F7F\u7528\u73FE\u6709\u8CC7\u8A0A\u6E05\u55AE\u6A94\u6848 'mymanifest'\uFF0C\u5C07 foo/ \u76EE\u9304\n \u4E2D\u7684\u6240\u6709\u6A94\u6848\u5B58\u6A94\u81F3 'classes.jar' \u4E2D: \n jar cvfm classes.jar mymanifest -C foo/ \n
+usage=\u7528\u6CD5: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] \u6A94\u6848 ...\n\u9078\u9805:\n -c \u5EFA\u7ACB\u65B0\u7684\u6B78\u6A94\n -t \u5217\u51FA\u6B78\u6A94\u7684\u76EE\u9304\n -x \u5F9E\u6B78\u6A94\u4E2D\u64F7\u53D6\u5DF2\u547D\u540D\u7684 (\u6216\u6240\u6709) \u6A94\u6848\n -u \u66F4\u65B0\u73FE\u6709\u6B78\u6A94\n -v \u5728\u6A19\u6E96\u8F38\u51FA\u4E2D\u7522\u751F\u8A73\u7D30\u8F38\u51FA\n -f \u6307\u5B9A\u6B78\u6A94\u6A94\u6848\u540D\u7A31\n -m \u5305\u542B\u6307\u5B9A\u8CC7\u8A0A\u6E05\u55AE\u4E2D\u7684\u8CC7\u8A0A\u6E05\u55AE\u8CC7\u8A0A\n -e \u70BA\u7368\u7ACB\u61C9\u7528\u7A0B\u5F0F\u6307\u5B9A\u61C9\u7528\u7A0B\u5F0F\u9032\u5165\u9EDE\n \u5DF2\u96A8\u9644\u65BC\u53EF\u57F7\u884C jar \u6A94\u6848\u4E2D\n -0 \u50C5\u5132\u5B58; \u4E0D\u4F7F\u7528 ZIP \u58D3\u7E2E\u65B9\u5F0F\n -M \u4E0D\u70BA\u9805\u76EE\u5EFA\u7ACB\u8CC7\u8A0A\u6E05\u55AE\u6A94\u6848\n -i \u70BA\u6307\u5B9A\u7684 jar \u6A94\u6848\u7522\u751F\u7D22\u5F15\u8CC7\u8A0A\n -C \u8B8A\u66F4\u81F3\u6307\u5B9A\u76EE\u9304\u4E26\u5305\u542B\u5F8C\u9762\u6240\u5217\u7684\u6A94\u6848\n\u5982\u679C\u6709\u4EFB\u4F55\u6A94\u6848\u662F\u76EE\u9304\uFF0C\u5247\u6703\u5C0D\u5176\u9032\u884C\u905E\u8FF4\u8655\u7406\u3002\n\u6E05\u55AE\u6A94\u6848\u540D\u7A31\u3001\u6B78\u6A94\u6A94\u6848\u540D\u7A31\u548C\u9032\u5165\u9EDE\u540D\u7A31\n\u7684\u6307\u5B9A\u9806\u5E8F\u8207\u6307\u5B9A 'm' \u65D7\u6A19\u3001'f' \u65D7\u6A19\u548C 'e' \u65D7\u6A19\u7684\u9806\u5E8F\u76F8\u540C\u3002\n\n\u7BC4\u4F8B 1: \u5C07\u5169\u500B\u985E\u5225\u6A94\u6848\u6B78\u6A94\u81F3\u540D\u70BA classes.jar \u7684\u6B78\u6A94\u4E2D: \n jar cvf classes.jar Foo.class Bar.class\n\u7BC4\u4F8B 2: \u4F7F\u7528\u73FE\u6709\u8CC7\u8A0A\u6E05\u55AE\u6A94\u6848 'mymanifest' \u4E26\u5C07\n foo/ \u76EE\u9304\u4E2D\u7684\u6240\u6709\u6A94\u6848\u6B78\u6A94\u81F3 'classes.jar' \u4E2D: \n jar cvfm classes.jar mymanifest -C foo/ .\n
--- a/jdk/src/share/classes/sun/tools/jconsole/resources/messages_ja.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/tools/jconsole/resources/messages_ja.properties Thu Oct 10 13:41:08 2013 -0700
@@ -113,6 +113,7 @@
IMPACT=\u5F71\u97FF
INFO=\u60C5\u5831
INFO_CAPITALIZED=INFO
+INSECURE=\u4FDD\u8B77\u3055\u308C\u3066\u3044\u306A\u3044\u63A5\u7D9A
INVALID_PLUGIN_PATH=\u8B66\u544A: \u7121\u52B9\u306A\u30D7\u30E9\u30B0\u30A4\u30F3\u30FB\u30D1\u30B9: {0}
INVALID_URL=\u7121\u52B9\u306AURL: {0}
IS=\u6B21\u306B\u4E00\u81F4\u3059\u308B
@@ -135,14 +136,14 @@
MBEANS=MBeans
MBEANS_TAB_CLEAR_NOTIFICATIONS_BUTTON=\u30AF\u30EA\u30A2(&C)
MBEANS_TAB_CLEAR_NOTIFICATIONS_BUTTON_TOOLTIP=\u901A\u77E5\u306E\u30AF\u30EA\u30A2
-MBEANS_TAB_COMPOSITE_NAVIGATION_MULTIPLE=\u30B3\u30F3\u30DD\u30B8\u30C3\u30C8\u30FB\u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3{0}/{1}
-MBEANS_TAB_COMPOSITE_NAVIGATION_SINGLE=\u30B3\u30F3\u30DD\u30B8\u30C3\u30C8\u30FB\u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3
+MBEANS_TAB_COMPOSITE_NAVIGATION_MULTIPLE=\u30B3\u30F3\u30DD\u30B8\u30C3\u30C8\u30FB\u30C7\u30FC\u30BF\u30FB\u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3{0}/{1}
+MBEANS_TAB_COMPOSITE_NAVIGATION_SINGLE=\u30B3\u30F3\u30DD\u30B8\u30C3\u30C8\u30FB\u30C7\u30FC\u30BF\u30FB\u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3
MBEANS_TAB_REFRESH_ATTRIBUTES_BUTTON=\u30EA\u30D5\u30EC\u30C3\u30B7\u30E5(&R)
MBEANS_TAB_REFRESH_ATTRIBUTES_BUTTON_TOOLTIP=\u5C5E\u6027\u306E\u30EA\u30D5\u30EC\u30C3\u30B7\u30E5
MBEANS_TAB_SUBSCRIBE_NOTIFICATIONS_BUTTON=\u30B5\u30D6\u30B9\u30AF\u30E9\u30A4\u30D6(&S)
MBEANS_TAB_SUBSCRIBE_NOTIFICATIONS_BUTTON_TOOLTIP=\u901A\u77E5\u30EA\u30B9\u30CB\u30F3\u30B0\u306E\u958B\u59CB
-MBEANS_TAB_TABULAR_NAVIGATION_MULTIPLE=\u30BF\u30D6\u30FB\u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3{0}/{1}
-MBEANS_TAB_TABULAR_NAVIGATION_SINGLE=\u30BF\u30D6\u30FB\u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3
+MBEANS_TAB_TABULAR_NAVIGATION_MULTIPLE=\u30BF\u30D6\u30FB\u30C7\u30FC\u30BF\u30FB\u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3{0}/{1}
+MBEANS_TAB_TABULAR_NAVIGATION_SINGLE=\u30BF\u30D6\u30FB\u30C7\u30FC\u30BF\u30FB\u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3
MBEANS_TAB_UNSUBSCRIBE_NOTIFICATIONS_BUTTON=\u30B5\u30D6\u30B9\u30AF\u30E9\u30A4\u30D6\u89E3\u9664(&U)
MBEANS_TAB_UNSUBSCRIBE_NOTIFICATIONS_BUTTON_TOOLTIP=\u901A\u77E5\u30EA\u30B9\u30CB\u30F3\u30B0\u306E\u505C\u6B62
MANAGE_HOTSPOT_MBEANS_IN_COLON_=Hotspot MBeans\u306E\u7BA1\u7406:
@@ -196,6 +197,11 @@
PLOTTER_ACCESSIBLE_NAME_NO_DATA=\u30C7\u30FC\u30BF\u304C\u30D7\u30ED\u30C3\u30C8\u3055\u308C\u307E\u305B\u3093\u3002
PLOTTER_SAVE_AS_MENU_ITEM=\u540D\u524D\u3092\u4ED8\u3051\u3066\u30C7\u30FC\u30BF\u3092\u4FDD\u5B58(&A)...
PLOTTER_TIME_RANGE_MENU=\u6642\u9593\u7BC4\u56F2(&T)
+PLUGIN_EXCEPTION_DIALOG_BUTTON_EXIT=\u7D42\u4E86
+PLUGIN_EXCEPTION_DIALOG_BUTTON_IGNORE=\u7121\u8996
+PLUGIN_EXCEPTION_DIALOG_BUTTON_OK=OK
+PLUGIN_EXCEPTION_DIALOG_MESSAGE=%s\u3067\u4E88\u671F\u3057\u306A\u3044\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F:\n\n%s\n\n\u8A73\u7D30\u306F\u3001\u5148\u982D\u306B-debug\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u7121\u8996\u3059\u308B\u3068\u3001\u4F8B\u5916\u306F\u3053\u308C\u4EE5\u4E0A\u8868\u793A\u3055\u308C\u306A\u304F\u306A\u308A\u307E\u3059\u3002
+PLUGIN_EXCEPTION_DIALOG_TITLE=\u30D7\u30E9\u30B0\u30A4\u30F3\u4F8B\u5916
PROBLEM_ADDING_LISTENER=\u30EA\u30B9\u30CA\u30FC\u8FFD\u52A0\u4E2D\u306E\u554F\u984C
PROBLEM_DISPLAYING_MBEAN=MBean\u8868\u793A\u4E2D\u306E\u554F\u984C
PROBLEM_INVOKING=\u547C\u51FA\u3057\u4E2D\u306E\u554F\u984C
@@ -223,6 +229,7 @@
THREADS=\u30B9\u30EC\u30C3\u30C9
THREAD_TAB_THREAD_INFO_ACCESSIBLE_NAME=\u30B9\u30EC\u30C3\u30C9\u60C5\u5831
THREAD_TAB_THREAD_PLOTTER_ACCESSIBLE_NAME=\u30B9\u30EC\u30C3\u30C9\u6570\u306E\u30C1\u30E3\u30FC\u30C8\u3002
+THREAD_TAB_INITIAL_STACK_TRACE_MESSAGE=[\u30B9\u30EC\u30C3\u30C9\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093]
THRESHOLD=\u3057\u304D\u3044\u5024
TILE=\u4E26\u3079\u3066\u8868\u793A(&T)
TIME_RANGE_COLON=\u6642\u9593\u7BC4\u56F2(&T):
@@ -260,6 +267,8 @@
WRITABLE=\u66F8\u8FBC\u307F\u53EF\u80FD
CONNECTION_FAILED1=\u63A5\u7D9A\u306B\u5931\u6557\u3057\u307E\u3057\u305F: \u518D\u8A66\u884C\u3057\u307E\u3059\u304B\u3002
CONNECTION_FAILED2={0}\u3078\u306E\u63A5\u7D9A\u304C\u6210\u529F\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002<br>\u3082\u3046\u4E00\u5EA6\u8A66\u3057\u307E\u3059\u304B\u3002
+CONNECTION_FAILED_SSL1=\u4FDD\u8B77\u3055\u308C\u305F\u63A5\u7D9A\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u4FDD\u8B77\u305B\u305A\u306B\u518D\u8A66\u884C\u3057\u307E\u3059\u304B\u3002
+CONNECTION_FAILED_SSL2=SSL\u3092\u4F7F\u7528\u3057\u3066{0}\u306B\u63A5\u7D9A\u3067\u304D\u307E\u305B\u3093\u3002<br>SSL\u306A\u3057\u3067\u63A5\u7D9A\u3057\u307E\u3059\u304B\u3002<br>(\u30E6\u30FC\u30B6\u30FC\u540D\u304A\u3088\u3073\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u30D7\u30EC\u30FC\u30F3\u30FB\u30C6\u30AD\u30B9\u30C8\u3067\u9001\u4FE1\u3055\u308C\u307E\u3059\u3002)
CONNECTION_LOST1=\u63A5\u7D9A\u304C\u5931\u308F\u308C\u307E\u3057\u305F: \u518D\u63A5\u7D9A\u3057\u307E\u3059\u304B\u3002
CONNECTING_TO1={0}\u306B\u63A5\u7D9A\u4E2D
CONNECTING_TO2={0}\u306B\u73FE\u5728\u63A5\u7D9A\u4E2D\u3067\u3059\u3002<br>\u3053\u308C\u306B\u306F\u6570\u5206\u304B\u304B\u308A\u307E\u3059\u3002
--- a/jdk/src/share/classes/sun/tools/jconsole/resources/messages_zh_CN.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/tools/jconsole/resources/messages_zh_CN.properties Thu Oct 10 13:41:08 2013 -0700
@@ -113,6 +113,7 @@
IMPACT=\u5F71\u54CD
INFO=\u4FE1\u606F
INFO_CAPITALIZED=\u4FE1\u606F
+INSECURE=\u4E0D\u5B89\u5168\u7684\u8FDE\u63A5
INVALID_PLUGIN_PATH=\u8B66\u544A: \u63D2\u4EF6\u8DEF\u5F84\u65E0\u6548: {0}
INVALID_URL=URL \u65E0\u6548: {0}
IS=\u662F
@@ -135,14 +136,14 @@
MBEANS=MBean
MBEANS_TAB_CLEAR_NOTIFICATIONS_BUTTON=\u6E05\u9664(&C)
MBEANS_TAB_CLEAR_NOTIFICATIONS_BUTTON_TOOLTIP=\u6E05\u9664\u901A\u77E5
-MBEANS_TAB_COMPOSITE_NAVIGATION_MULTIPLE=\u7EC4\u5408\u5BFC\u822A{0}/{1}
-MBEANS_TAB_COMPOSITE_NAVIGATION_SINGLE=\u7EC4\u5408\u5BFC\u822A
+MBEANS_TAB_COMPOSITE_NAVIGATION_MULTIPLE=\u7EC4\u5408\u6570\u636E\u5BFC\u822A{0}/{1}
+MBEANS_TAB_COMPOSITE_NAVIGATION_SINGLE=\u7EC4\u5408\u6570\u636E\u5BFC\u822A
MBEANS_TAB_REFRESH_ATTRIBUTES_BUTTON=\u5237\u65B0(&R)
MBEANS_TAB_REFRESH_ATTRIBUTES_BUTTON_TOOLTIP=\u5237\u65B0\u5C5E\u6027
MBEANS_TAB_SUBSCRIBE_NOTIFICATIONS_BUTTON=\u8BA2\u9605(&S)
MBEANS_TAB_SUBSCRIBE_NOTIFICATIONS_BUTTON_TOOLTIP=\u5F00\u59CB\u76D1\u542C\u901A\u77E5
-MBEANS_TAB_TABULAR_NAVIGATION_MULTIPLE=\u8868\u683C\u5F0F\u5BFC\u822A{0}/{1}
-MBEANS_TAB_TABULAR_NAVIGATION_SINGLE=\u8868\u683C\u5F0F\u5BFC\u822A
+MBEANS_TAB_TABULAR_NAVIGATION_MULTIPLE=\u8868\u683C\u5F0F\u6570\u636E\u5BFC\u822A{0}/{1}
+MBEANS_TAB_TABULAR_NAVIGATION_SINGLE=\u8868\u683C\u5F0F\u6570\u636E\u5BFC\u822A
MBEANS_TAB_UNSUBSCRIBE_NOTIFICATIONS_BUTTON=\u53D6\u6D88\u8BA2\u9605(&U)
MBEANS_TAB_UNSUBSCRIBE_NOTIFICATIONS_BUTTON_TOOLTIP=\u505C\u6B62\u76D1\u542C\u901A\u77E5
MANAGE_HOTSPOT_MBEANS_IN_COLON_=\u7BA1\u7406\u4EE5\u4E0B\u4F4D\u7F6E\u7684 HotSpot MBean:
@@ -196,6 +197,11 @@
PLOTTER_ACCESSIBLE_NAME_NO_DATA=\u672A\u7ED8\u5236\u6570\u636E\u3002
PLOTTER_SAVE_AS_MENU_ITEM=\u5C06\u6570\u636E\u53E6\u5B58\u4E3A(&A)...
PLOTTER_TIME_RANGE_MENU=\u65F6\u95F4\u8303\u56F4(&T)
+PLUGIN_EXCEPTION_DIALOG_BUTTON_EXIT=\u9000\u51FA
+PLUGIN_EXCEPTION_DIALOG_BUTTON_IGNORE=\u5FFD\u7565
+PLUGIN_EXCEPTION_DIALOG_BUTTON_OK=\u786E\u5B9A
+PLUGIN_EXCEPTION_DIALOG_MESSAGE=%s \u4E2D\u51FA\u73B0\u610F\u5916\u7684\u5F02\u5E38\u9519\u8BEF:\n\n%s\n\n\u6709\u5173\u8BE6\u7EC6\u4FE1\u606F, \u8BF7\u8FD0\u884C\u4EE5 -debug \u5F00\u5934\u7684\u547D\u4EE4\u83B7\u53D6\u3002\u5982\u679C\u5FFD\u7565, \u5219\u5C06\u9690\u85CF\u540E\u9762\u7684\u5F02\u5E38\u9519\u8BEF\u3002
+PLUGIN_EXCEPTION_DIALOG_TITLE=\u63D2\u4EF6\u5F02\u5E38\u9519\u8BEF
PROBLEM_ADDING_LISTENER=\u6DFB\u52A0\u76D1\u542C\u7A0B\u5E8F\u65F6\u51FA\u73B0\u95EE\u9898
PROBLEM_DISPLAYING_MBEAN=\u663E\u793A MBean \u65F6\u51FA\u73B0\u95EE\u9898
PROBLEM_INVOKING=\u8C03\u7528\u65F6\u51FA\u73B0\u95EE\u9898
@@ -223,6 +229,7 @@
THREADS=\u7EBF\u7A0B
THREAD_TAB_THREAD_INFO_ACCESSIBLE_NAME=\u7EBF\u7A0B\u4FE1\u606F
THREAD_TAB_THREAD_PLOTTER_ACCESSIBLE_NAME=\u8868\u793A\u7EBF\u7A0B\u6570\u7684\u56FE\u8868\u3002
+THREAD_TAB_INITIAL_STACK_TRACE_MESSAGE=[\u672A\u9009\u62E9\u7EBF\u7A0B]
THRESHOLD=\u9608\u503C
TILE=\u5E73\u94FA(&T)
TIME_RANGE_COLON=\u65F6\u95F4\u8303\u56F4(&T):
@@ -260,6 +267,8 @@
WRITABLE=\u53EF\u5199\u5165
CONNECTION_FAILED1=\u8FDE\u63A5\u5931\u8D25: \u662F\u5426\u91CD\u8BD5?
CONNECTION_FAILED2=\u672A\u6210\u529F\u8FDE\u63A5\u5230{0}\u3002<br>\u662F\u5426\u8981\u91CD\u8BD5?
+CONNECTION_FAILED_SSL1=\u5B89\u5168\u8FDE\u63A5\u5931\u8D25\u3002\u662F\u5426\u4EE5\u4E0D\u5B89\u5168\u7684\u65B9\u5F0F\u91CD\u8BD5?
+CONNECTION_FAILED_SSL2=\u65E0\u6CD5\u4F7F\u7528 SSL \u8FDE\u63A5\u5230{0}\u3002<br>\u662F\u5426\u5728\u4E0D\u4F7F\u7528 SSL \u7684\u60C5\u51B5\u4E0B\u8FDB\u884C\u5C1D\u8BD5?<br>(\u7528\u6237\u540D\u548C\u53E3\u4EE4\u5C06\u4EE5\u7EAF\u6587\u672C\u683C\u5F0F\u53D1\u9001\u3002)
CONNECTION_LOST1=\u8FDE\u63A5\u4E22\u5931: \u662F\u5426\u91CD\u65B0\u8FDE\u63A5?
CONNECTING_TO1=\u6B63\u5728\u8FDE\u63A5\u5230{0}
CONNECTING_TO2=\u60A8\u5F53\u524D\u6B63\u5728\u8FDE\u63A5\u5230{0}\u3002<br>\u8FD9\u5C06\u9700\u8981\u51E0\u5206\u949F\u7684\u65F6\u95F4\u3002
--- a/jdk/src/share/classes/sun/tools/jstat/resources/jstat_options Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/classes/sun/tools/jstat/resources/jstat_options Thu Oct 10 13:41:08 2013 -0700
@@ -208,6 +208,22 @@
format "0.0"
}
column {
+ header "^CCSC^" /* Compressed Class Space Capacity - Current */
+ data sun.gc.compressedclassspace.capacity
+ align center
+ width 6
+ scale K
+ format "0.0"
+ }
+ column {
+ header "^CCSU^" /* Compressed Class Space Used */
+ data sun.gc.compressedclassspace.used
+ align center
+ width 6
+ scale K
+ format "0.0"
+ }
+ column {
header "^YGC^" /* Young Generation Collections */
data sun.gc.collector.0.invocations
align right
@@ -354,6 +370,30 @@
format "0.0"
}
column {
+ header "^CCSMN^" /* Compressed Class Space Capacity - Minimum */
+ data sun.gc.compressedclassspace.minCapacity
+ scale K
+ align right
+ width 8
+ format "0.0"
+ }
+ column {
+ header "^CCSMX^" /* Compressed Class Space Capacity - Maximum */
+ data sun.gc.compressedclassspace.maxCapacity
+ scale K
+ align right
+ width 8
+ format "0.0"
+ }
+ column {
+ header "^CCSC^" /* Compressed Class Space Capacity - Current */
+ data sun.gc.compressedclassspace.capacity
+ scale K
+ align right
+ width 8
+ format "0.0"
+ }
+ column {
header "^YGC^" /* Young Generation Collections */
data sun.gc.collector.0.invocations
align right
@@ -412,6 +452,14 @@
format "0.00"
}
column {
+ header "^CCS^" /* Compressed Class Space - Percent Used */
+ data (1-((sun.gc.compressedclassspace.capacity - sun.gc.compressedclassspace.used)/sun.gc.compressedclassspace.capacity)) * 100
+ align right
+ width 6
+ scale raw
+ format "0.00"
+ }
+ column {
header "^YGC^" /* Young Generation Collections */
data sun.gc.collector.0.invocations
align right
@@ -662,6 +710,22 @@
format "0.0"
}
column {
+ header "^CCSC^" /* Compressed Class Space Capacity - Current */
+ data sun.gc.compressedclassspace.capacity
+ width 8
+ align right
+ scale K
+ format "0.0"
+ }
+ column {
+ header "^CCSU^" /* Compressed Class Space Used */
+ data sun.gc.compressedclassspace.used
+ width 8
+ align right
+ scale K
+ format "0.0"
+ }
+ column {
header "^OC^" /* Old Space Capacity - Current */
data sun.gc.generation.1.space.0.capacity
width 11
@@ -802,6 +866,30 @@
format "0.0"
}
column {
+ header "^CCSMN^" /* Compressed Class Space Capacity - Minimum */
+ data sun.gc.compressedclassspace.minCapacity
+ scale K
+ align right
+ width 10
+ format "0.0"
+ }
+ column {
+ header "^CCSMX^" /* Compressed Class Space Capacity - Maximum */
+ data sun.gc.compressedclassspace.maxCapacity
+ scale K
+ align right
+ width 10
+ format "0.0"
+ }
+ column {
+ header "^CCSC^" /* Compressed Class Space Capacity - Current */
+ data sun.gc.compressedclassspace.capacity
+ scale K
+ align right
+ width 10
+ format "0.0"
+ }
+ column {
header "^YGC^" /* Young Generation Collections */
data sun.gc.collector.0.invocations
align right
@@ -876,6 +964,14 @@
format "0.00"
}
column {
+ header "^CCS^" /* Compressed Class Space Space - Percent Used */
+ data (1-((sun.gc.compressedclassspace.capacity - sun.gc.compressedclassspace.used)/sun.gc.compressedclassspace.capacity)) * 100
+ align right
+ width 6
+ scale raw
+ format "0.00"
+ }
+ column {
header "^YGC^" /* Young Generation Collections */
data sun.gc.collector.0.invocations
align right
--- a/jdk/src/share/demo/applets/MoleculeViewer/XYZApp.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/demo/applets/MoleculeViewer/XYZApp.java Thu Oct 10 13:41:08 2013 -0700
@@ -348,7 +348,7 @@
InputStream is = null;
try {
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
- is = new URL(getDocumentBase(), mdname).openStream();
+ is = getClass().getResourceAsStream(mdname);
XYZChemModel m = new XYZChemModel(is);
Atom.setApplet(this);
md = m;
--- a/jdk/src/share/demo/applets/MoleculeViewer/example1.html Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/demo/applets/MoleculeViewer/example1.html Thu Oct 10 13:41:08 2013 -0700
@@ -2,10 +2,10 @@
<head>
<title>MoleculeViewer (example 1)</title>
</head>
- <body>
+ <body>
<h1>MoleculeViewer (example 1)</h1>
<hr>
- <applet code=XYZApp.class width=300 height=300>
+ <applet code=XYZApp.class archive=MoleculeViewer.jar width=300 height=300>
<param name=model value="models/HyaluronicAcid.xyz">
alt="Your browser understands the <APPLET> tag but isn't running the applet, for some reason."
Your browser is completely ignoring the <APPLET> tag!
@@ -13,7 +13,7 @@
<hr>
<a href="XYZApp.java">The source</a>.
</body>
-</html>
+</html>
--- a/jdk/src/share/demo/applets/MoleculeViewer/example2.html Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/demo/applets/MoleculeViewer/example2.html Thu Oct 10 13:41:08 2013 -0700
@@ -2,10 +2,10 @@
<head>
<title>MoleculeViewer (example 2)</title>
</head>
- <body>
+ <body>
<h1>MoleculeViewer (example 2)</h1>
<hr>
- <applet code=XYZApp.class width=300 height=300>
+ <applet code=XYZApp.class archive=MoleculeViewer.jar width=300 height=300>
<param name=model value="models/buckminsterfullerine.xyz">
alt="Your browser understands the <APPLET> tag but isn't running the applet, for some reason."
Your browser is completely ignoring the <APPLET> tag!
@@ -13,4 +13,4 @@
<hr>
<a href="XYZApp.java">The source</a>.
</body>
-</html>
+</html>
--- a/jdk/src/share/demo/applets/MoleculeViewer/example3.html Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/demo/applets/MoleculeViewer/example3.html Thu Oct 10 13:41:08 2013 -0700
@@ -5,25 +5,25 @@
<body>
<h1>MoleculeViewer (example 3)</h1>
<hr>
- <applet code=XYZApp.class width=100 height=100>
+ <applet code=XYZApp.class archive=MoleculeViewer.jar width=100 height=100>
<param name=model value="models/water.xyz">
alt="Your browser understands the <APPLET> tag but isn't running the applet, for some reason."
Your browser is completely ignoring the <APPLET> tag!
</applet>
<p>
- <applet code=XYZApp.class width=100 height=100>
+ <applet code=XYZApp.class archive=MoleculeViewer.jar width=100 height=100>
<param name=model value="models/benzene.xyz">
alt="Your browser understands the <APPLET> tag but isn't running the applet, for some reason."
Your browser is completely ignoring the <APPLET> tag!
</applet>
<p>
- <applet code=XYZApp.class width=100 height=100>
+ <applet code=XYZApp.class archive=MoleculeViewer.jar width=100 height=100>
<param name=model value="models/ethane.xyz">
alt="Your browser understands the <APPLET> tag but isn't running the applet, for some reason."
Your browser is completely ignoring the <APPLET> tag!
</applet>
<p>
- <applet code=XYZApp.class width=100 height=100>
+ <applet code=XYZApp.class archive=MoleculeViewer.jar width=100 height=100>
<param name=model value="models/cyclohexane.xyz">
alt="Your browser understands the <APPLET> tag but isn't running the applet, for some reason."
Your browser is completely ignoring the <APPLET> tag!
@@ -31,5 +31,5 @@
<hr>
<a href="XYZApp.java">The source</a>.
</body>
-</html>
+</html>
--- a/jdk/src/share/demo/applets/WireFrame/ThreeD.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/demo/applets/WireFrame/ThreeD.java Thu Oct 10 13:41:08 2013 -0700
@@ -416,7 +416,7 @@
InputStream is = null;
try {
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
- is = new URL(getDocumentBase(), mdname).openStream();
+ is = getClass().getResourceAsStream(mdname);
Model3D m = new Model3D(is);
md = m;
m.findBB();
--- a/jdk/src/share/demo/applets/WireFrame/example1.html Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/demo/applets/WireFrame/example1.html Thu Oct 10 13:41:08 2013 -0700
@@ -5,7 +5,7 @@
<body>
<h1>3D Model: Cube</h1>
<hr>
- <applet code=ThreeD.class width=100 height=100>
+ <applet code=ThreeD.class archive=WireFrame.jar width=100 height=100>
<param name=model value="models/cube.obj">
alt="Your browser understands the <APPLET> tag but isn't running the applet, for some reason."
Your browser is completely ignoring the <APPLET> tag!
--- a/jdk/src/share/demo/applets/WireFrame/example2.html Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/demo/applets/WireFrame/example2.html Thu Oct 10 13:41:08 2013 -0700
@@ -5,7 +5,7 @@
<body>
<h1>3D Model: Dinosaur</h1>
<hr>
- <applet code=ThreeD.class width=300 height=300>
+ <applet code=ThreeD.class archive=WireFrame.jar width=300 height=300>
<param name=model value="models/dinasaur.obj">
alt="Your browser understands the <APPLET> tag but isn't running the applet, for some reason."
Your browser is completely ignoring the <APPLET> tag!
--- a/jdk/src/share/demo/applets/WireFrame/example3.html Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/demo/applets/WireFrame/example3.html Thu Oct 10 13:41:08 2013 -0700
@@ -5,7 +5,7 @@
<body>
<h1>3D Model: Hughes</h1>
<hr>
- <applet code=ThreeD.class width=300 height=300>
+ <applet code=ThreeD.class archive=WireFrame.jar width=300 height=300>
<param name=model value="models/hughes_500.obj">
alt="Your browser understands the <APPLET> tag but isn't running the applet, for some reason."
Your browser is completely ignoring the <APPLET> tag!
--- a/jdk/src/share/demo/applets/WireFrame/example4.html Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/demo/applets/WireFrame/example4.html Thu Oct 10 13:41:08 2013 -0700
@@ -5,7 +5,7 @@
<body>
<h1>3D Model: knoxS</h1>
<hr>
- <applet code=ThreeD.class width=300 height=300>
+ <applet code=ThreeD.class archive=WireFrame.jar width=300 height=300>
<param name=model value="models/knoxS.obj">
alt="Your browser understands the <APPLET> tag but isn't running the applet, for some reason."
Your browser is completely ignoring the <APPLET> tag!
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/lib/security/BlacklistedCertsConverter.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateEncodingException;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
+import java.util.Collection;
+
+/**
+ * This is the tool to convert blacklisted.certs.pem to blacklisted.certs.
+ * Every time a new blacklisted certs is added, please append the PEM format
+ * to the end of blacklisted.certs.pem (with proper comments) and then use
+ * this tool to generate an updated blacklisted.certs. Make sure to include
+ * changes to both in a changeset.
+ */
+public class BlacklistedCertsConverter {
+ public static void main(String[] args) throws Exception {
+ if (args.length == 0) {
+ System.out.println("Usage: java BlacklistedCertsConverter SHA-256" +
+ " < blacklisted.certs.pem > blacklisted.certs");
+ System.exit(1);
+ }
+ String mdAlg = args[0];
+ CertificateFactory cf = CertificateFactory.getInstance("X.509");
+ Collection<? extends Certificate> certs
+ = cf.generateCertificates(System.in);
+ System.out.println("Algorithm=" + mdAlg);
+ for (Certificate cert: certs) {
+ System.out.println(
+ getCertificateFingerPrint(mdAlg, (X509Certificate)cert));
+ }
+ }
+
+ /**
+ * Converts a byte to hex digit and writes to the supplied buffer
+ */
+ private static void byte2hex(byte b, StringBuffer buf) {
+ char[] hexChars = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
+ '9', 'A', 'B', 'C', 'D', 'E', 'F' };
+ int high = ((b & 0xf0) >> 4);
+ int low = (b & 0x0f);
+ buf.append(hexChars[high]);
+ buf.append(hexChars[low]);
+ }
+
+ /**
+ * Gets the requested finger print of the certificate.
+ */
+ private static String getCertificateFingerPrint(String mdAlg,
+ X509Certificate cert) {
+ String fingerPrint = "";
+ try {
+ byte[] encCertInfo = cert.getEncoded();
+ MessageDigest md = MessageDigest.getInstance(mdAlg);
+ byte[] digest = md.digest(encCertInfo);
+ StringBuffer buf = new StringBuffer();
+ for (int i = 0; i < digest.length; i++) {
+ byte2hex(digest[i], buf);
+ }
+ fingerPrint = buf.toString();
+ } catch (NoSuchAlgorithmException | CertificateEncodingException e) {
+ // ignored
+ }
+ return fingerPrint;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/lib/security/blacklisted.certs Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,19 @@
+Algorithm=SHA-256
+76A45A496031E4DD2D7ED23E8F6FF97DBDEA980BAAC8B0BA94D7EDB551348645
+4CBBF8256BC9888A8007B2F386940A2E394378B0D903CBB3863C5A6394B889CE
+D24566BF315F4E597D6E381C87119FB4198F5E9E2607F5F4AB362EF7E2E7672F
+14E6D2764A4B06701C6CBC376A253775F79C782FBCB6C0EE6F99DE4BA1024ADD
+D3A936E1A7775A45217C8296A1F22AC5631DCDEC45594099E78EEEBBEDCBA967
+5E83124D68D24E8E177E306DF643D5EA99C5A94D6FC34B072F7544A1CABB7C7B
+9ED8F9B0E8E42A1656B8E1DD18F42BA42DC06FE52686173BA2FC70E756F207DC
+FDEDB5BDFCB67411513A61AEE5CB5B5D7C52AF06028EFC996CC1B05B1D6CEA2B
+A686FEE577C88AB664D0787ECDFFF035F4806F3DE418DC9E4D516324FFF02083
+4FEE0163686ECBD65DB968E7494F55D84B25486D438E9DE558D629D28CD4D176
+8A1BD21661C60015065212CC98B1ABB50DFD14C872A208E66BAE890F25C448AF
+B8686723E415534BC0DBD16326F9486F85B0B0799BF6639334E61DAAE67F36CD
+3946901F46B0071E90D78279E82FABABCA177231A704BE72C5B0E8918566EA66
+31C8FD37DB9B56E708B03D1F01848B068C6DA66F36FB5D82C008C6040FA3E133
+450F1B421BB05C8609854884559C323319619E8B06B001EA2DCBB74A23AA3BE2
+FC02FD48DB92D4DCE6F11679D38354CF750CFC7F584A520EB90BDE80E241F2BD
+DF21016B00FC54F9FE3BC8B039911BB216E9162FAD2FD14D990AB96E951B49BE
+F5B6F88F75D391A4B1EB336F9E201239FB6B1377DB8CFA7B84736216E5AFFFD7
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/lib/security/blacklisted.certs.pem Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,721 @@
+// Subject: CN=Digisign Server ID (Enrich),
+// OU=457608-K,
+// O=Digicert Sdn. Bhd.,
+// C=MY
+// Issuer: CN=GTE CyberTrust Global Root,
+// OU=GTE CyberTrust Solutions, Inc.,
+// O=GTE Corporation,
+// C=US
+// Serial: 120001705 (07:27:14:a9)
+-----BEGIN CERTIFICATE-----
+MIIDyzCCAzSgAwIBAgIEBycUqTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV
+UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
+cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
+b2JhbCBSb290MB4XDTA3MDcxNzE1MTc0OFoXDTEyMDcxNzE1MTY1NFowYzELMAkG
+A1UEBhMCTVkxGzAZBgNVBAoTEkRpZ2ljZXJ0IFNkbi4gQmhkLjERMA8GA1UECxMI
+NDU3NjA4LUsxJDAiBgNVBAMTG0RpZ2lzaWduIFNlcnZlciBJRCAoRW5yaWNoKTCB
+nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEArahkS02Hx4RZufuQRqCmicDx/tXa
+VII3DZkrRSYK6Fawf8qo9I5HhAGCKeOzarWR8/uVhbxyqGToCkCcxfRxrnt7agfq
+kBRPjYmvlKuyBtQCanuYH1m5Os1U+iDfsioK6bjdaZDAKdNO0JftZszFGUkGf/pe
+LHx7hRsyQt97lSUCAwEAAaOCAXgwggF0MBIGA1UdEwEB/wQIMAYBAf8CAQAwXAYD
+VR0gBFUwUzBIBgkrBgEEAbE+AQAwOzA5BggrBgEFBQcCARYtaHR0cDovL2N5YmVy
+dHJ1c3Qub21uaXJvb3QuY29tL3JlcG9zaXRvcnkuY2ZtMAcGBWCDSgEBMA4GA1Ud
+DwEB/wQEAwIB5jCBiQYDVR0jBIGBMH+heaR3MHUxCzAJBgNVBAYTAlVTMRgwFgYD
+VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv
+bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv
+b3SCAgGlMEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly93d3cucHVibGljLXRydXN0
+LmNvbS9jZ2ktYmluL0NSTC8yMDE4L2NkcC5jcmwwHQYDVR0OBBYEFMYWk04WF+wW
+royUdvOGbcV0boR3MA0GCSqGSIb3DQEBBQUAA4GBAHYAe6Z4K2Ydjl42xqSOBfIj
+knyTZ9P0wAp9iy3Z6tVvGvPhSilaIoRNUC9LDPL/hcJ7VdREgr5trGeOvLQfkpxR
+gBoU9m6rYYgLrRx/90tQUdZlG6ZHcRVesHHzNRTyN71jyNXwk1o0X9g96F33xR7A
+5c8fhiSpPAdmzcHSNmNZ
+-----END CERTIFICATE-----
+
+// Subject: CN=Digisign Server ID - (Enrich),
+// OU=457608-K,
+// O=Digicert Sdn. Bhd.,
+// C=MY
+// Issuer: CN=Entrust.net Certification Authority (2048)
+// OU=(c) 1999 Entrust.net Limited,
+// OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.),
+// O=Entrust.net
+// Serial: 1184644297 (4c:0e:63:6a)
+-----BEGIN CERTIFICATE-----
+MIIEzjCCA7agAwIBAgIETA5jajANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
+RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
+bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
+IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
+ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw0xMDA3MTYxNzIzMzdaFw0xNTA3
+MTYxNzUzMzdaMGUxCzAJBgNVBAYTAk1ZMRswGQYDVQQKExJEaWdpY2VydCBTZG4u
+IEJoZC4xETAPBgNVBAsTCDQ1NzYwOC1LMSYwJAYDVQQDEx1EaWdpc2lnbiBTZXJ2
+ZXIgSUQgLSAoRW5yaWNoKTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+AMWJ5PQNBkCSWccaszXRDkwqM/n4r8qef+65p21g9FTob9Wb8xtjMQRoctE0Foy0
+FyyX3nPF2JAVoBor9cuzSIZE8B2ITM5BQhrv9Qze/kDaOSD3BlU6ap1GwdJvpbLI
+Vz4po5zg6YV3ZuiYpyR+vsBZIOVEb7ZX2L7OwmV3WMZhQdF0BMh/SULFcqlyFu6M
+3RJdtErU0a9Qt9iqdXZorT5dqjBtYairEFs+E78z4K9EnTgiW+9ML6ZxJhUmyiiM
+2fqOjqmiFDXimySItPR/hZ2DTwehthSQNsQ0HI0mYW0Tb3i+6I8nx0uElqOGaAwj
+vgvsjJQAqQSKE5D334VsDLECAwEAAaOCATQwggEwMA4GA1UdDwEB/wQEAwIBBjAS
+BgNVHRMBAf8ECDAGAQH/AgEAMCcGA1UdJQQgMB4GCCsGAQUFBwMBBggrBgEFBQcD
+AgYIKwYBBQUHAwQwMwYIKwYBBQUHAQEEJzAlMCMGCCsGAQUFBzABhhdodHRwOi8v
+b2NzcC5lbnRydXN0Lm5ldDBEBgNVHSAEPTA7MDkGBWCDSgEBMDAwLgYIKwYBBQUH
+AgEWImh0dHA6Ly93d3cuZGlnaWNlcnQuY29tLm15L2Nwcy5odG0wMgYDVR0fBCsw
+KTAnoCWgI4YhaHR0cDovL2NybC5lbnRydXN0Lm5ldC8yMDQ4Y2EuY3JsMBEGA1Ud
+DgQKBAhMTswlKAMpgTAfBgNVHSMEGDAWgBRV5IHREYC+2Im5CKMx+aEkCRa5cDAN
+BgkqhkiG9w0BAQUFAAOCAQEAl0zvSjpJrHL8MCBrtClbp8WVBJD5MtXChWreA6E3
++YkAsFqsVX7bQzX/yQH4Ub7MJsrIaqTEVD4mHucMo82XZ5TdpkLrXM2POXlrM3kh
+Bnn6gkQVmczBtznTRmJ8snDrb84gqj4Zt+l0gpy0pUtNYQA35IfS8hQ6ZHy4qXth
+4JMi59WfPkfmNnagU9gAAzoPtTP+lsrT0oI6Lt3XSOHkp2nMHOmZSufKcEXXCwcO
+mnUb0C+Sb/akB8O9HEumhLZ9qJqp0qcp8QtXaR6XVybsK0Os1EWDBQDp4/BGQAf6
+6rFRc5Mcpd1TETfIKqcVJx20qsx/qjEw/LhFn0gJ7RDixQ==
+-----END CERTIFICATE-----
+
+// Subject: CN=Java Media APIs,
+// OU=Java Signed Extensions,
+// OU=Corporate Object Signing,
+// O=Sun Microsystems Inc
+// Issuer: CN=Object Signing CA,
+// OU=Class 2 OnSite Subscriber CA,
+// OU=VeriSign Trust Network,
+// O=Sun Microsystems Inc
+// Serial: 6a:8b:99:91:37:59:4f:89:53:e2:97:18:9f:19:1e:4e
+-----BEGIN CERTIFICATE-----
+MIIFdzCCBF+gAwIBAgIQaouZkTdZT4lT4pcYnxkeTjANBgkqhkiG9w0BAQUFADCB
+gzEdMBsGA1UEChMUU3VuIE1pY3Jvc3lzdGVtcyBJbmMxHzAdBgNVBAsTFlZlcmlT
+aWduIFRydXN0IE5ldHdvcmsxJTAjBgNVBAsTHENsYXNzIDIgT25TaXRlIFN1YnNj
+cmliZXIgQ0ExGjAYBgNVBAMTEU9iamVjdCBTaWduaW5nIENBMB4XDTA5MDUxMjAw
+MDAwMFoXDTEyMDUxMTIzNTk1OVowfTEdMBsGA1UEChQUU3VuIE1pY3Jvc3lzdGVt
+cyBJbmMxITAfBgNVBAsUGENvcnBvcmF0ZSBPYmplY3QgU2lnbmluZzEfMB0GA1UE
+CxQWSmF2YSBTaWduZWQgRXh0ZW5zaW9uczEYMBYGA1UEAxQPSmF2YSBNZWRpYSBB
+UElzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl5blzoKTVE8y4Hpz
+q6E15RZz1bF5HnYEyYqgHkZXnAKedmYCoMzm1XK8s+gQWShLEvGEAvs5yqarx9gE
+nnC21N28aEZgIJMa2/arKxCUkS4pxdGPYGexL9UzSRkUpoBShCZKEGdmX7gfJE2K
+/sd9MFvGV5/yZtWXrADzvm0Kd/9mg1KRv1gfrZIq0TJbupoXPYYqb73AkI9eT2ZD
+q9MdwD4E5+oojsDFXt8GU/D00fUhtXpYwuplU7D667WHYdJhIah0ST6JywyqcLXG
+XSuFTXOgITT2idSHluZVmx3dqJ72u9kPkO4JdJTMDfaK8zgNLaRkiU8Qcj+qhLYH
+ytaqcwIDAQABo4IB6jCCAeYwCQYDVR0TBAIwADAOBgNVHQ8BAf8EBAMCB4AwfwYD
+VR0fBHgwdjB0oHKgcIZuaHR0cDovL29uc2l0ZWNybC52ZXJpc2lnbi5jb20vU3Vu
+TWljcm9zeXN0ZW1zSW5jQ29ycG9yYXRlT2JqZWN0U2lnbmluZ0phdmFTaWduZWRF
+eHRlbnNpb25zQ2xhc3NCL0xhdGVzdENSTC5jcmwwHwYDVR0jBBgwFoAUs0crgn5T
+tHPKuLsZt76BTQeVx+0wHQYDVR0OBBYEFKS32mVx0gNWTeS4ProHEaeSpvvIMDsG
+CCsGAQUFBwEBBC8wLTArBggrBgEFBQcwAYYfaHR0cDovL29uc2l0ZS1vY3NwLnZl
+cmlzaWduLmNvbTCBtQYDVR0gBIGtMIGqMDkGC2CGSAGG+EUBBxcCMCowKAYIKwYB
+BQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEwbQYLYIZIAYb3AIN9
+nD8wXjAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuc3VuLmNvbS9wa2kvY3BzMDMG
+CCsGAQUFBwICMCcaJVZhbGlkYXRlZCBGb3IgU3VuIEJ1c2luZXNzIE9wZXJhdGlv
+bnMwEwYDVR0lBAwwCgYIKwYBBQUHAwMwDQYJKoZIhvcNAQEFBQADggEBAAe6BO4W
+3TSNWfezyelJs6kE3HfulT6Bdyz4UUoh9ykXcV8nRwT+kh25I5MdyG2GfkJoADPR
+VhC5DYo13UFpIsTNVjq+hGYe2hML93bN7ad9SxCCyjHUo3yMz2qgBbHZI3VA9ZHA
+aWM4Tx0saMwbcnVvlbuGh+PXvStfypJqYT6lzcdFfjNVX4FI/QQNGhBswMY51tC8
+GTBCL2qhJon0gSCU4zaawDOf7+XxJWirLamYL1Aal1/h2z2sFrvA/1ftxtU3kZ6I
+7De8DyoHeZg7pYGdrj7g+lPhCga/WvEhN152I+aP08YbFcJHYmK05ngl/Ye4c6Bd
+cdrdfbw6QzEUIYY=
+-----END CERTIFICATE-----
+
+// Subject: CN=JavaFX 1.0 Runtime,
+// OU=Java Signed Extensions,
+// OU=Corporate Object Signing,
+// O=Sun Microsystems Inc
+// Issuer: CN=Object Signing CA,
+// OU=Class 2 OnSite Subscriber CA,
+// OU=VeriSign Trust Network,
+// O=Sun Microsystems Inc
+// Serial: 55:c0:e6:44:59:59:79:9e:d9:26:f1:b0:4a:1e:f0:27
+-----BEGIN CERTIFICATE-----
+MIIFezCCBGOgAwIBAgIQVcDmRFlZeZ7ZJvGwSh7wJzANBgkqhkiG9w0BAQUFADCB
+gzEdMBsGA1UEChMUU3VuIE1pY3Jvc3lzdGVtcyBJbmMxHzAdBgNVBAsTFlZlcmlT
+aWduIFRydXN0IE5ldHdvcmsxJTAjBgNVBAsTHENsYXNzIDIgT25TaXRlIFN1YnNj
+cmliZXIgQ0ExGjAYBgNVBAMTEU9iamVjdCBTaWduaW5nIENBMB4XDTA4MTAwOTAw
+MDAwMFoXDTExMTAwOTIzNTk1OVowgYAxHTAbBgNVBAoUFFN1biBNaWNyb3N5c3Rl
+bXMgSW5jMSEwHwYDVQQLFBhDb3Jwb3JhdGUgT2JqZWN0IFNpZ25pbmcxHzAdBgNV
+BAsUFkphdmEgU2lnbmVkIEV4dGVuc2lvbnMxGzAZBgNVBAMUEkphdmFGWCAxLjAg
+UnVudGltZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM+WDc6+bu+4
+tmAcS/lBtUc02WOt9QZpVsXg9cG2pu/8bUtmDELa8iiYBVFpIs8DU58HLrGQtCUY
+SIAGOVPsOJoN29UKCDWfY9j5JeVhfhMGqk9DwrWhzgsjy4cpZ1pIp+k/fJ8zT8Ul
+aYLpow1vg3UNddsmwz02tN7cOrMw9WYIG4CRYnY1OrtJSfe2pYzheC4zyvR+aiVl
+nang2OtqikSQsNFOFHsLOJFxngy9LrO8evDSu25VTKI6zlWU6/bMeqtztJPN0VOn
+NyUrJZvkxZ207Jg0T693BGSxNC1n+ihztXogql8950M/pEuUbDjylv5FFvlp6DSB
+dDT2MkutmyMCAwEAAaOCAeowggHmMAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgeA
+MH8GA1UdHwR4MHYwdKByoHCGbmh0dHA6Ly9vbnNpdGVjcmwudmVyaXNpZ24uY29t
+L1N1bk1pY3Jvc3lzdGVtc0luY0NvcnBvcmF0ZU9iamVjdFNpZ25pbmdKYXZhU2ln
+bmVkRXh0ZW5zaW9uc0NsYXNzQi9MYXRlc3RDUkwuY3JsMB8GA1UdIwQYMBaAFLNH
+K4J+U7Rzyri7Gbe+gU0HlcftMB0GA1UdDgQWBBTjgufVi3XJ3gx1ewsA6Rr7BR4Z
+zjA7BggrBgEFBQcBAQQvMC0wKwYIKwYBBQUHMAGGH2h0dHA6Ly9vbnNpdGUtb2Nz
+cC52ZXJpc2lnbi5jb20wgbUGA1UdIASBrTCBqjA5BgtghkgBhvhFAQcXAjAqMCgG
+CCsGAQUFBwIBFhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhMG0GC2CGSAGG
+9wCDfZw/MF4wJwYIKwYBBQUHAgEWG2h0dHBzOi8vd3d3LnN1bi5jb20vcGtpL2Nw
+czAzBggrBgEFBQcCAjAnGiVWYWxpZGF0ZWQgRm9yIFN1biBCdXNpbmVzcyBPcGVy
+YXRpb25zMBMGA1UdJQQMMAoGCCsGAQUFBwMDMA0GCSqGSIb3DQEBBQUAA4IBAQAB
+YVJTTVe7rzyTO4jc3zajErOT/COkdQTfNo0eIX1QbNynFieJvwY/jRzUZwjktIFR
+2p4JtbpHGAtKtjOAOTieQ8xdDOoC1djzpE7/AbMvuvlTavtUKT+F7tPdhfXgWXJV
+6Wbt8jryKyk3zZGiEhauIwZUkfjRkEtffEmZWLUd8c8rURJjfC/XHH2oyurscoxc
+CjX29c9ynxSiS/VvQp1an0HvErGh69N48wj7cj8mtZ1yHzd2XCzSSR1OfTPfk0Pt
+yg51p7yJaFiH21PTZegEL6zyVNOYBTKwwIi2OzpwYalD3uvK6e3OKDrfFCOxu17u
+4PveESbrdyrmvLe7IVez
+-----END CERTIFICATE-----
+
+// Subject: CN=JavaFX Runtime,
+// OU=Java Signed Extensions,
+// OU=Corporate Object Signing,
+// O=Sun Microsystems Inc
+// Issuer: CN=Object Signing CA,
+// OU=Class 2 OnSite Subscriber CA,
+// OU=VeriSign Trust Network,
+// O=Sun Microsystems Inc
+// Serial: 47:f4:55:f1:da:4a:5e:f9:e3:f7:a8:03:62:17:c0:ff
+-----BEGIN CERTIFICATE-----
+MIIFdjCCBF6gAwIBAgIQR/RV8dpKXvnj96gDYhfA/zANBgkqhkiG9w0BAQUFADCB
+gzEdMBsGA1UEChMUU3VuIE1pY3Jvc3lzdGVtcyBJbmMxHzAdBgNVBAsTFlZlcmlT
+aWduIFRydXN0IE5ldHdvcmsxJTAjBgNVBAsTHENsYXNzIDIgT25TaXRlIFN1YnNj
+cmliZXIgQ0ExGjAYBgNVBAMTEU9iamVjdCBTaWduaW5nIENBMB4XDTA5MDEyOTAw
+MDAwMFoXDTEyMDEyOTIzNTk1OVowfDEdMBsGA1UEChQUU3VuIE1pY3Jvc3lzdGVt
+cyBJbmMxITAfBgNVBAsUGENvcnBvcmF0ZSBPYmplY3QgU2lnbmluZzEfMB0GA1UE
+CxQWSmF2YSBTaWduZWQgRXh0ZW5zaW9uczEXMBUGA1UEAxQOSmF2YUZYIFJ1bnRp
+bWUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCIzd0fAk8mI9ONc6RJ
+aGieioK2FLdXEwj8zL3vdGDVmBwyR1zwYkaOIFFgF9IW/8qc4iAYA5sGUY+0g8q3
+5DuYAxfTzBB5KdaYvbuq6GGnoHIWmTirXY+1friFp8lyXSvtuEaGB1VHaBoZchEg
+k+UgeVDA43dHwcT1Ov3DePczJRUes8T/QHzLX+BxUDG43vjyncCEO/AjqLZxXEz2
+xrNbKLcH3lGMJK7hdbfssUfF5BjC38Hn71HauYlA43b2no+2y0Sjulwzez2YPbDC
+0GLR3TnKtA8dqOrnl5t3DniDbfOBNtBE3VOydJO0XW57Ng1HRXD023nm9ECPY2xp
+0N/pAgMBAAGjggHqMIIB5jAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIHgDB/BgNV
+HR8EeDB2MHSgcqBwhm5odHRwOi8vb25zaXRlY3JsLnZlcmlzaWduLmNvbS9TdW5N
+aWNyb3N5c3RlbXNJbmNDb3Jwb3JhdGVPYmplY3RTaWduaW5nSmF2YVNpZ25lZEV4
+dGVuc2lvbnNDbGFzc0IvTGF0ZXN0Q1JMLmNybDAfBgNVHSMEGDAWgBSzRyuCflO0
+c8q4uxm3voFNB5XH7TAdBgNVHQ4EFgQUvOdd0cKPj+Yik/iOBwTdphh5A+gwOwYI
+KwYBBQUHAQEELzAtMCsGCCsGAQUFBzABhh9odHRwOi8vb25zaXRlLW9jc3AudmVy
+aXNpZ24uY29tMIG1BgNVHSAEga0wgaowOQYLYIZIAYb4RQEHFwIwKjAoBggrBgEF
+BQcCARYcaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYTBtBgtghkgBhvcAg32c
+PzBeMCcGCCsGAQUFBwIBFhtodHRwczovL3d3dy5zdW4uY29tL3BraS9jcHMwMwYI
+KwYBBQUHAgIwJxolVmFsaWRhdGVkIEZvciBTdW4gQnVzaW5lc3MgT3BlcmF0aW9u
+czATBgNVHSUEDDAKBggrBgEFBQcDAzANBgkqhkiG9w0BAQUFAAOCAQEAbGcf2NjL
+AI93HG6ny2BbepaZA1a8xa/R6uUc7xV+Qw6MgLwFD4Q4i6LWUztQDvg9l68MM2/i
+Y9LEi1KM4lcNbK5+D+t9x98wXBiuojXhVdp5ZmC03EyEBbriopdBsmXVLDSu/Y3+
+zowOO5xwpMK3dbgsSDs2Vt0UosD3FTcRaD3GNfOhXMp+o1grHNiXF9YgkmdQbPPZ
+DQ2KBhFPCRJXBGvyKOqno/DTg0sQ3crGH/C4/4t7mnQXWldZotmJUZ0ONc9oD+Q1
+JAaguUKqIwn9yZ093ie+JWHbYNid9IIIPXYgtRxmf9a376WBhqhu56uJftBJ7x9g
+eQ7Lot6CSWCiFw==
+-----END CERTIFICATE-----
+
+// Subject: CN=Solaris INTERNAL DEVELOPMENT USE ONLY,
+// OU=Solaris Cryptographic Framework,
+// OU=Corporate Object Signing,
+// O=Sun Microsystems Inc
+// Issuer: CN=Object Signing CA,
+// OU=Class 2 OnSite Subscriber CA,
+// OU=VeriSign Trust Network,
+// O=Sun Microsystems Inc
+// Serial: 77:29:77:52:6a:19:7b:9a:a6:a2:c7:99:a0:e1:cd:8c
+-----BEGIN CERTIFICATE-----
+MIIFHjCCBAagAwIBAgIQdyl3UmoZe5qmoseZoOHNjDANBgkqhkiG9w0BAQUFADCB
+gzEdMBsGA1UEChMUU3VuIE1pY3Jvc3lzdGVtcyBJbmMxHzAdBgNVBAsTFlZlcmlT
+aWduIFRydXN0IE5ldHdvcmsxJTAjBgNVBAsTHENsYXNzIDIgT25TaXRlIFN1YnNj
+cmliZXIgQ0ExGjAYBgNVBAMTEU9iamVjdCBTaWduaW5nIENBMB4XDTA3MDEwNDAw
+MDAwMFoXDTEwMDEwMzIzNTk1OVowgZwxHTAbBgNVBAoUFFN1biBNaWNyb3N5c3Rl
+bXMgSW5jMSEwHwYDVQQLFBhDb3Jwb3JhdGUgT2JqZWN0IFNpZ25pbmcxKDAmBgNV
+BAsUH1NvbGFyaXMgQ3J5cHRvZ3JhcGhpYyBGcmFtZXdvcmsxLjAsBgNVBAMUJVNv
+bGFyaXMgSU5URVJOQUwgREVWRUxPUE1FTlQgVVNFIE9OTFkwgZ8wDQYJKoZIhvcN
+AQEBBQADgY0AMIGJAoGBALbNU4hf3mD5ArDI9pjgioAyvV3bjMPRQdCZniIeGJBp
+odFlSEH+Mh64W1DsY8coeZ7FvvGJkx9IpTMJW9k8w1oJK9UNqHyAQfaYjQyXi3xQ
+LJp62EvYdGfDlwOZejEcR/MbzZG+GOPMMvQj5+xyFDvLXNGfQNTnxw2qnBgCJXjj
+AgMBAAGjggH1MIIB8TAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIHgDCBiQYDVR0f
+BIGBMH8wfaB7oHmGd2h0dHA6Ly9vbnNpdGVjcmwudmVyaXNpZ24uY29tL1N1bk1p
+Y3Jvc3lzdGVtc0luY0NvcnBvcmF0ZU9iamVjdFNpZ25pbmdTb2xhcmlzQ3J5cHRv
+Z3JhcGhpY0ZyYW1ld29ya0NsYXNzQi9MYXRlc3RDUkwuY3JsMB8GA1UdIwQYMBaA
+FLNHK4J+U7Rzyri7Gbe+gU0HlcftMB0GA1UdDgQWBBRpfiGYkehTnsIzuN2H6AFb
+VCZG8jA7BggrBgEFBQcBAQQvMC0wKwYIKwYBBQUHMAGGH2h0dHA6Ly9vbnNpdGUt
+b2NzcC52ZXJpc2lnbi5jb20wgbUGA1UdIASBrTCBqjA5BgtghkgBhvhFAQcXAjAq
+MCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhMG0GC2CG
+SAGG9wCDfZw/MF4wJwYIKwYBBQUHAgEWG2h0dHBzOi8vd3d3LnN1bi5jb20vcGtp
+L2NwczAzBggrBgEFBQcCAjAnFiVWYWxpZGF0ZWQgRm9yIFN1biBCdXNpbmVzcyBP
+cGVyYXRpb25zMBMGA1UdJQQMMAoGCCsGAQUFBwMDMA0GCSqGSIb3DQEBBQUAA4IB
+AQCG5soy3LFHTFbA8/5SzDRhQoJkHUnOP0t3b6nvX6vZYRp649fje7TQOPRm1pFd
+CZ17J+tggdZwgzTqY4aYpJ00jZaK6pV37q/vgFC/ia6jDs8Q+ly9cEcadBZ5loYg
+cmxp9p57W2MNWx8VA8oFdNtKfF0jUNXbLNtvwGHmgR6YcwLrGN1b6/9Lt9bO3ODl
+FO+ZDwkfQz5ClUVrTx2dGBvKRYFqSG5S8JAfsgYhPvcacUQkA7ExyKvfRXLWVrce
+ZiPpcElbx+819H2sAPvVvparVeAruZGMAtejHZp9NFoowKen5drJp9VxePS4eM49
+3DepB6lKRrNRw66LNQol4ZBz
+-----END CERTIFICATE-----
+
+// Subject: EMAILADDRESS=info@diginotar.nl, CN=DigiNotar Cyber CA,
+// O=DigiNotar, C=NL
+// Issuer: CN=GTE CyberTrust Global Root,
+// OU=GTE CyberTrust Solutions, Inc.,
+// O=GTE Corporation,
+// C=US
+// Serial: 120000525 (07:27:10:0D)
+-----BEGIN CERTIFICATE-----
+MIIFWjCCBMOgAwIBAgIEBycQDTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV
+UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
+cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
+b2JhbCBSb290MB4XDTA2MTAwNDEwNTQxMVoXDTExMTAwNDEwNTMxMVowYDELMAkG
+A1UEBhMCTkwxEjAQBgNVBAoTCURpZ2lOb3RhcjEbMBkGA1UEAxMSRGlnaU5vdGFy
+IEN5YmVyIENBMSAwHgYJKoZIhvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCCAiIw
+DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANLOFQotqF6EZ639vu9Gx8i5z3P8
+9DS5+SxD52ATPXrjss87Z2yQrcC5P4RS8DVC3HTcKDu9UrSnrHJFF8bwieu0qiXy
+XUte0dmHutZ9fPXOMp8QM8WxSrtekTHC0OlBwpFkfglBO9uLCDdqqspS3rU5HsCI
+A6U/i5kTYUO1m4Kz7iBvz6FEouova0CfjytXraFTwoUiaZ2gP1HfC0GRDaXhqKpc
+SQhdvd5wQbEPyWNr0380dAIvNFp4dRxoeoFnivPaQPBgY/SSINcDpj2jHmfEhBtB
+pcmM5r3qSLYFFgizNxJa92E89zhvLpfgb1Y4VNMota0Ubi5LZLUnZbd1JQm2Bz2V
+VgIKgmCyc0XgMyZRdJq51FAc9k1bW1JSE1qmf6cO4ehBVGeYjIfVydNsy9NUkgYJ
+NEH3gW8/nsl8dVWw58Gzd+jDxAA1lUBwEEoF3iW7n1mlZLxHYL9g43aLE1Xd4XR6
+uc8kpmp/3mQiRFhogmoQ+T3lPhu5vfwi9GAEibtVbShV+t6OjRshFNc3izR7Tfay
+shDPM7F9HGKZSMsrbHaWVb8ZDR0fu2WqG46ZtcYokOWCLXhQIJr9eS8kf/CJKWn0
+fc1zvrPtTsHR7VJej/e4142HrbLZG1ES/1az4a80fVykeIgQnp0DxqWqoiRR90kU
+xbHuWUOV36toKDA/AgMBAAGjggGGMIIBgjASBgNVHRMBAf8ECDAGAQH/AgEBMFMG
+A1UdIARMMEowSAYJKwYBBAGxPgEAMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93d3cu
+cHVibGljLXRydXN0LmNvbS9DUFMvT21uaVJvb3QuaHRtbDAOBgNVHQ8BAf8EBAMC
+AQYwgaAGA1UdIwSBmDCBlYAUpgwdn2H/Bxe1vzhG20Mw1Y6wUgaheaR3MHUxCzAJ
+BgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdU
+RSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVy
+VHJ1c3QgR2xvYmFsIFJvb3SCAgGlMEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly93
+d3cucHVibGljLXRydXN0LmNvbS9jZ2ktYmluL0NSTC8yMDE4L2NkcC5jcmwwHQYD
+VR0OBBYEFKv5aN/PSjfXe0WMX3LeQETDZbvCMA0GCSqGSIb3DQEBBQUAA4GBAI9o
+a6VbB7pEZg4cqFwwezPkCiYE/O+eGjjWLqEf0JlHwnVkJP2eOyh2uSYoYZEMbSz4
+BJ98UAHV42mv7xXSRZskCSpmBU8lgcpdvqrBWSeuM46C9990sFWzjvjnN8huqlZE
+9r1TgSOWPbT6MopTZkQloiXGpjwljPDgKAYityZB
+-----END CERTIFICATE-----
+
+// Subject: CN=DigiNotar Cyber CA, O=DigiNotar, C=NL
+// Issuer: CN=GTE CyberTrust Global Root,
+// OU=GTE CyberTrust Solutions, Inc.,
+// O=GTE Corporation,
+// C=US
+// Serial: 120000505 (07:27:0F:F9)
+-----BEGIN CERTIFICATE-----
+MIIFODCCBKGgAwIBAgIEBycP+TANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV
+UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
+cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
+b2JhbCBSb290MB4XDTA2MDkyMDA5NDUzMloXDTEzMDkyMDA5NDQwNlowPjELMAkG
+A1UEBhMCTkwxEjAQBgNVBAoTCURpZ2lOb3RhcjEbMBkGA1UEAxMSRGlnaU5vdGFy
+IEN5YmVyIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0s4VCi2o
+XoRnrf2+70bHyLnPc/z0NLn5LEPnYBM9euOyzztnbJCtwLk/hFLwNULcdNwoO71S
+tKesckUXxvCJ67SqJfJdS17R2Ye61n189c4ynxAzxbFKu16RMcLQ6UHCkWR+CUE7
+24sIN2qqylLetTkewIgDpT+LmRNhQ7WbgrPuIG/PoUSi6i9rQJ+PK1etoVPChSJp
+naA/Ud8LQZENpeGoqlxJCF293nBBsQ/JY2vTfzR0Ai80Wnh1HGh6gWeK89pA8GBj
+9JIg1wOmPaMeZ8SEG0GlyYzmvepItgUWCLM3Elr3YTz3OG8ul+BvVjhU0yi1rRRu
+LktktSdlt3UlCbYHPZVWAgqCYLJzReAzJlF0mrnUUBz2TVtbUlITWqZ/pw7h6EFU
+Z5iMh9XJ02zL01SSBgk0QfeBbz+eyXx1VbDnwbN36MPEADWVQHAQSgXeJbufWaVk
+vEdgv2DjdosTVd3hdHq5zySman/eZCJEWGiCahD5PeU+G7m9/CL0YASJu1VtKFX6
+3o6NGyEU1zeLNHtN9rKyEM8zsX0cYplIyytsdpZVvxkNHR+7Zaobjpm1xiiQ5YIt
+eFAgmv15LyR/8IkpafR9zXO+s+1OwdHtUl6P97jXjYetstkbURL/VrPhrzR9XKR4
+iBCenQPGpaqiJFH3SRTFse5ZQ5Xfq2goMD8CAwEAAaOCAYYwggGCMBIGA1UdEwEB
+/wQIMAYBAf8CAQEwUwYDVR0gBEwwSjBIBgkrBgEEAbE+AQAwOzA5BggrBgEFBQcC
+ARYtaHR0cDovL3d3dy5wdWJsaWMtdHJ1c3QuY29tL0NQUy9PbW5pUm9vdC5odG1s
+MA4GA1UdDwEB/wQEAwIBBjCBoAYDVR0jBIGYMIGVgBSmDB2fYf8HF7W/OEbbQzDV
+jrBSBqF5pHcwdTELMAkGA1UEBhMCVVMxGDAWBgNVBAoTD0dURSBDb3Jwb3JhdGlv
+bjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1c3QgU29sdXRpb25zLCBJbmMuMSMwIQYD
+VQQDExpHVEUgQ3liZXJUcnVzdCBHbG9iYWwgUm9vdIICAaUwRQYDVR0fBD4wPDA6
+oDigNoY0aHR0cDovL3d3dy5wdWJsaWMtdHJ1c3QuY29tL2NnaS1iaW4vQ1JMLzIw
+MTgvY2RwLmNybDAdBgNVHQ4EFgQUq/lo389KN9d7RYxfct5ARMNlu8IwDQYJKoZI
+hvcNAQEFBQADgYEACcpiD427SuDUejUrBi3RKGG2rAH7g0m8rtQvLYauGYOl1h0T
+4he+/jJ06XoUOMqUXvcpAWlxG5Ea/aO7qh3Ke+IW/aGjDvMMX7LhIDGUK16Sdu36
+6bUjpr8KOwOpb1JgVM1f6bcvfKIn/UGDdbYN+3gm87FF6TKVKho1IZXFonU=
+-----END CERTIFICATE-----
+
+// Subject: CN=DigiNotar Cyber CA, O=DigiNotar, C=NL
+// Issuer: CN=GTE CyberTrust Global Root,
+// OU=GTE CyberTrust Solutions, Inc.,
+// O=GTE Corporation,
+// C=US
+// Serial: 120000515 (07:27:10:03)
+-----BEGIN CERTIFICATE-----
+MIIFODCCBKGgAwIBAgIEBycQAzANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV
+UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
+cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
+b2JhbCBSb290MB4XDTA2MDkyNzEwNTMzMloXDTExMDkyNzEwNTIzMFowPjELMAkG
+A1UEBhMCTkwxEjAQBgNVBAoTCURpZ2lOb3RhcjEbMBkGA1UEAxMSRGlnaU5vdGFy
+IEN5YmVyIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0s4VCi2o
+XoRnrf2+70bHyLnPc/z0NLn5LEPnYBM9euOyzztnbJCtwLk/hFLwNULcdNwoO71S
+tKesckUXxvCJ67SqJfJdS17R2Ye61n189c4ynxAzxbFKu16RMcLQ6UHCkWR+CUE7
+24sIN2qqylLetTkewIgDpT+LmRNhQ7WbgrPuIG/PoUSi6i9rQJ+PK1etoVPChSJp
+naA/Ud8LQZENpeGoqlxJCF293nBBsQ/JY2vTfzR0Ai80Wnh1HGh6gWeK89pA8GBj
+9JIg1wOmPaMeZ8SEG0GlyYzmvepItgUWCLM3Elr3YTz3OG8ul+BvVjhU0yi1rRRu
+LktktSdlt3UlCbYHPZVWAgqCYLJzReAzJlF0mrnUUBz2TVtbUlITWqZ/pw7h6EFU
+Z5iMh9XJ02zL01SSBgk0QfeBbz+eyXx1VbDnwbN36MPEADWVQHAQSgXeJbufWaVk
+vEdgv2DjdosTVd3hdHq5zySman/eZCJEWGiCahD5PeU+G7m9/CL0YASJu1VtKFX6
+3o6NGyEU1zeLNHtN9rKyEM8zsX0cYplIyytsdpZVvxkNHR+7Zaobjpm1xiiQ5YIt
+eFAgmv15LyR/8IkpafR9zXO+s+1OwdHtUl6P97jXjYetstkbURL/VrPhrzR9XKR4
+iBCenQPGpaqiJFH3SRTFse5ZQ5Xfq2goMD8CAwEAAaOCAYYwggGCMBIGA1UdEwEB
+/wQIMAYBAf8CAQEwUwYDVR0gBEwwSjBIBgkrBgEEAbE+AQAwOzA5BggrBgEFBQcC
+ARYtaHR0cDovL3d3dy5wdWJsaWMtdHJ1c3QuY29tL0NQUy9PbW5pUm9vdC5odG1s
+MA4GA1UdDwEB/wQEAwIBBjCBoAYDVR0jBIGYMIGVgBSmDB2fYf8HF7W/OEbbQzDV
+jrBSBqF5pHcwdTELMAkGA1UEBhMCVVMxGDAWBgNVBAoTD0dURSBDb3Jwb3JhdGlv
+bjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1c3QgU29sdXRpb25zLCBJbmMuMSMwIQYD
+VQQDExpHVEUgQ3liZXJUcnVzdCBHbG9iYWwgUm9vdIICAaUwRQYDVR0fBD4wPDA6
+oDigNoY0aHR0cDovL3d3dy5wdWJsaWMtdHJ1c3QuY29tL2NnaS1iaW4vQ1JMLzIw
+MTgvY2RwLmNybDAdBgNVHQ4EFgQUq/lo389KN9d7RYxfct5ARMNlu8IwDQYJKoZI
+hvcNAQEFBQADgYEAWcyGZhizJlRP1jjNupZey+yZG6oMDW4Z11boriMHbYPCndBE
+bVh07zmPbZsihOw9w/vm5KbVX5CgxUv4Rhzh/20Faixf3P3bpWg0qgzHVVusNVR/
+P50aKkpdK3hp+QLl56e+lWOddSAINIpmcuyDI1hyuzB+GJEASm9tNU/6rs8=
+-----END CERTIFICATE-----
+
+// Subject: EMAILADDRESS=info@diginotar.nl,
+// CN=DigiNotar Root CA,
+// O=DigiNotar, C=NL
+// Issuer: CN=Entrust.net Secure Server Certification Authority
+// OU=(c) 1999 Entrust.net Limited,
+// OU=www.entrust.net/CPS incorp. by ref. (limits liab.),
+// O=Entrust.net,
+// C=US,
+// Serial: 1184644297 (46:9C:3C:C9)
+-----BEGIN CERTIFICATE-----
+MIIFSDCCBLGgAwIBAgIERpw8yTANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
+VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
+ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
+KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
+ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNzA0
+MjYwNTAwMDBaFw0xMzA4MTQyMDEyMzZaMF8xCzAJBgNVBAYTAk5MMRIwEAYDVQQK
+EwlEaWdpTm90YXIxGjAYBgNVBAMTEURpZ2lOb3RhciBSb290IENBMSAwHgYJKoZI
+hvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCCAiIwDQYJKoZIhvcNAQEBBQADggIP
+ADCCAgoCggIBAKywWMEAvdghCAsrmv5uVjAFnxt3kBBBXMMNhxF3joHxynzpjGrt
+OHQ1u9rf+bvACTe0lnOBfTMamDn3k2+Vfz25sXWHulFI6ItwPpUExdi2wxbZiLCx
+hx1w2oa0DxSLes8Q0XQ2ohJ7d4ZKeeZ73wIRaKVOhq40WJskE3hWIiUeAYtLUXH7
+gsxZlmmIWmhTxbkNAjfLS7xmSpB+KgsFB+0WX1WQddhGyRuD4gi+8SPMmR3WKg+D
+IBVYJ4Iu+uIiwkmxuQGBap1tnUB3aHZOISpthECFTnaZfILz87cCWdQmARuO361T
+BtGuGN3isjrL14g4jqxbKbkZ05j5GAPPSIKGZgsbaQ/J6ziIeiYaBUyS1yTUlvKs
+Ui2jR9VS9j/+zoQGcKaqPqLytlY0GFei5IFt58rwatPHkWsCg0F8Fe9rmmRe49A8
+5bHre12G+8vmd0nNo2Xc97mcuOQLX5PPzDAaMhzOHGOVpfnq4XSLnukrqTB7oBgf
+DhgL5Vup09FsHgdnj5FLqYq80maqkwGIspH6MVzVpsFSCAnNCmOi0yKm6KHZOQaX
+9W6NApCMFHs/gM0bnLrEWHIjr7ZWn8Z6QjMpBz+CyeYfBQ3NTCg2i9PIPhzGiO9e
+7olk6R3r2ol+MqZp0d3MiJ/R0MlmIdwGZ8WUepptYkx9zOBkgLKeR46jAgMBAAGj
+ggEmMIIBIjASBgNVHRMBAf8ECDAGAQH/AgEBMCcGA1UdJQQgMB4GCCsGAQUFBwMB
+BggrBgEFBQcDAgYIKwYBBQUHAwQwEQYDVR0gBAowCDAGBgRVHSAAMDMGCCsGAQUF
+BwEBBCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMwYD
+VR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5lbnRydXN0Lm5ldC9zZXJ2ZXIxLmNy
+bDAdBgNVHQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wCwYDVR0PBAQDAgEGMB8G
+A1UdIwQYMBaAFPAXYhNVPbP/CgBr+1CEl/PtYtAaMBkGCSqGSIb2fQdBAAQMMAob
+BFY3LjEDAgCBMA0GCSqGSIb3DQEBBQUAA4GBAI979rBep8tu3TeLunapgsZ0jtXp
+GDFjKWSk87dj1jCyYi+q/GyDyZ6ZQZNRP0sF+6twscq05lClWNy3TROMp7QeuoLO
+G7Utw3OJaswUtp4YglANMRTHEe3g9ltifUXRH5tSuy7u6yi4LD4WTm5ULP6r/g6l
+0CnjXYb0+b1Fmz6U
+-----END CERTIFICATE-----
+
+// Subject: EMAILADDRESS=info@diginotar.nl,
+// CN=DigiNotar Root CA,
+// O=DigiNotar, C=NL
+// Issuer: CN=Entrust.net Secure Server Certification Authority
+// OU=(c) 1999 Entrust.net Limited,
+// OU=www.entrust.net/CPS incorp. by ref. (limits liab.),
+// O=Entrust.net,
+// C=US,
+// Serial: 1184640175 (46:9C:2C:AF)
+-----BEGIN CERTIFICATE-----
+MIIFSDCCBLGgAwIBAgIERpwsrzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
+VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
+ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
+KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
+ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNzA3
+MjYxNTU3MzlaFw0xMzA4MjYxNjI3MzlaMF8xCzAJBgNVBAYTAk5MMRIwEAYDVQQK
+EwlEaWdpTm90YXIxGjAYBgNVBAMTEURpZ2lOb3RhciBSb290IENBMSAwHgYJKoZI
+hvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCCAiIwDQYJKoZIhvcNAQEBBQADggIP
+ADCCAgoCggIBAKywWMEAvdghCAsrmv5uVjAFnxt3kBBBXMMNhxF3joHxynzpjGrt
+OHQ1u9rf+bvACTe0lnOBfTMamDn3k2+Vfz25sXWHulFI6ItwPpUExdi2wxbZiLCx
+hx1w2oa0DxSLes8Q0XQ2ohJ7d4ZKeeZ73wIRaKVOhq40WJskE3hWIiUeAYtLUXH7
+gsxZlmmIWmhTxbkNAjfLS7xmSpB+KgsFB+0WX1WQddhGyRuD4gi+8SPMmR3WKg+D
+IBVYJ4Iu+uIiwkmxuQGBap1tnUB3aHZOISpthECFTnaZfILz87cCWdQmARuO361T
+BtGuGN3isjrL14g4jqxbKbkZ05j5GAPPSIKGZgsbaQ/J6ziIeiYaBUyS1yTUlvKs
+Ui2jR9VS9j/+zoQGcKaqPqLytlY0GFei5IFt58rwatPHkWsCg0F8Fe9rmmRe49A8
+5bHre12G+8vmd0nNo2Xc97mcuOQLX5PPzDAaMhzOHGOVpfnq4XSLnukrqTB7oBgf
+DhgL5Vup09FsHgdnj5FLqYq80maqkwGIspH6MVzVpsFSCAnNCmOi0yKm6KHZOQaX
+9W6NApCMFHs/gM0bnLrEWHIjr7ZWn8Z6QjMpBz+CyeYfBQ3NTCg2i9PIPhzGiO9e
+7olk6R3r2ol+MqZp0d3MiJ/R0MlmIdwGZ8WUepptYkx9zOBkgLKeR46jAgMBAAGj
+ggEmMIIBIjASBgNVHRMBAf8ECDAGAQH/AgEBMCcGA1UdJQQgMB4GCCsGAQUFBwMB
+BggrBgEFBQcDAgYIKwYBBQUHAwQwEQYDVR0gBAowCDAGBgRVHSAAMDMGCCsGAQUF
+BwEBBCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMwYD
+VR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5lbnRydXN0Lm5ldC9zZXJ2ZXIxLmNy
+bDAdBgNVHQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wCwYDVR0PBAQDAgEGMB8G
+A1UdIwQYMBaAFPAXYhNVPbP/CgBr+1CEl/PtYtAaMBkGCSqGSIb2fQdBAAQMMAob
+BFY3LjEDAgCBMA0GCSqGSIb3DQEBBQUAA4GBAEa6RcDNcEIGUlkDJUY/pWTds4zh
+xbVkp3wSmpwPFhx5fxTyF4HD2L60jl3aqjTB7gPpsL2Pk5QZlNsi3t4UkCV70UOd
+ueJRN3o/LOtk4+bjXY2lC0qTHbN80VMLqPjmaf9ghSA9hwhskdtMgRsgfd90q5QP
+ZFdYf+hthc3m6IcJ
+-----END CERTIFICATE-----
+
+// Subject: CN=DigiNotar PKIoverheid CA Organisatie - G2,
+// O=DigiNotar B.V.,
+// C=NL
+// Issuer: CN=Staat der Nederlanden Organisatie CA - G2,
+// O=Staat der Nederlanden,
+// C=NL
+// Serial: 20001983 (01:31:34:bf)
+-----BEGIN CERTIFICATE-----
+MIIGnDCCBISgAwIBAgIEATE0vzANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQGEwJO
+TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMTIwMAYDVQQDDClTdGFh
+dCBkZXIgTmVkZXJsYW5kZW4gT3JnYW5pc2F0aWUgQ0EgLSBHMjAeFw0xMDA1MTIw
+ODUxMzhaFw0yMDAzMjMwOTUwMDRaMFoxCzAJBgNVBAYTAk5MMRcwFQYDVQQKDA5E
+aWdpTm90YXIgQi5WLjEyMDAGA1UEAwwpRGlnaU5vdGFyIFBLSW92ZXJoZWlkIENB
+IE9yZ2FuaXNhdGllIC0gRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
+AQCxExkPJ+Zs1FWGS9DsiYpFkXisR71HK+T8RetPtCZzWzfTw3/2497Xo/gtaMUI
+PkuU1uSHJTZrhLUYdPMoWHMvm2rPvAQe9t7dr/xLqvXbZmIlASWC3vKXWhBu3V2p
+IrEEqSNzOvhxrR3PhETrR9Gvbch8KKvH8jd6dF9fxQIUiqNa4xtsAeNdjtlo1vQJ
+GzLckbUs9SDrjANtJkm4k8SFXdjSm69WaswFM8ygQp40VUSca6DUEtArVM23iQ3l
+9uvo+4UBM096a/GdcjOWDveyhKWlJ8Qn8VFzKXe6Z27+TNy04qGhgS85SY1DOBPO
+0KVcwoc6AGdlQiPxNlkKHaNRyLyjlCox3+M88p0aPASw77EKMBNzttfzo0wBdRSF
+eMDXijlYhVD6LubFvs+LP6+PNtQlCS3SD6xyk/K/i9RQs/kVUJuZ9RTZ+4uRozIm
+JqD43ztggYaDeVsr6xM9KTrBbd29no6H1kquNJcF7hSm9tw4fkrpJFQHPZdoN0Zr
+DceoIa8TVOQJavFNRgrJXfubT73e+7dUy7g4nKc5+2otwHuNq6WnV+xKkoozxeEg
+XHPYkJIrgNUPhhhpfDlPhIa890xb89W0yqDC8DciynlSH1PmqvOQsDvd8ij9rOvF
+BiSgydQvD1j9tZ7sD8+yWdCiBHo4aq5y+73wJWKUCacFCwIDAQABo4IBYTCCAV0w
+SAYDVR0gBEEwPzA9BgRVHSAAMDUwMwYIKwYBBQUHAgEWJ2h0dHA6Ly93d3cuZGln
+aW5vdGFyLm5sL2Nwcy9wa2lvdmVyaGVpZDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud
+DwEB/wQEAwIBBjCBhQYDVR0jBH4wfIAUORCLSZJc22ESIM1JnRqO2pxnQLmhXqRc
+MFoxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4x
+KzApBgNVBAMMIlN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENBIC0gRzKCBACY
+lvQwSQYDVR0fBEIwQDA+oDygOoY4aHR0cDovL2NybC5wa2lvdmVyaGVpZC5ubC9E
+b21PcmdhbmlzYXRpZUxhdGVzdENSTC1HMi5jcmwwHQYDVR0OBBYEFLxdlDvZq3sD
+JXNhwtst7vyrj2WhMA0GCSqGSIb3DQEBCwUAA4ICAQCP/C1Mt9kt1R+978v0t2gX
+dZ1O1ffdnPEqJu2forYcA9VTs+wIzzTi48P0tRYvyMO+19NzqwA2+RpKftZj6V5G
+uqW2jhW3oyrYQx3vXcgfgYWzi/f/PPTZ9EYIP5y8HaDZqEzNJVJOCrEg9x/pQ9lU
+RoETmsBedGwqmDLq/He7DaWiMZgifnx859qkrey3LhoZcfhIUNpDjyyE3cFAJ+O1
+8BVOltT4XOOGKUYr1zsH6zh/yIZXl9PvKjPEF1DVZGlrK2tFXl0vF8paTs/D1zk8
+9TufRrmb5w5Jl53W1eMbD+qPAU6aE5RZCgIHSEsaYKt/T+0L2FUNaG9VnGllFULs
+wNzdbKzDFs4LHVabpMTE0i7gD+JEJytQaaTcYuiKISlCbMwAOpZ2m+9AwKRed4Qy
+bCYqOWauXeO5ubIsaB8empADOfCqs6TMSYsYNOk3yXspx4R8b0QVL+xhWQTJRcui
+1lKifH8pktZKxYtCqNT+6tjHhyMY5J16fXNAUpigrm7jBT8FD+Clxm1N7YM3iJzH
+89xCmmq21yFJNnfy7xhPxXDZnunetyuL9Lx+KN8NQMmFXK6dxTH/0FwOtah+8Okv
+uq+IruW10Vilr5xxpykBkINpN4IFuvwJwQhujHg7wzMCgD9EhQgd31VWCK0shS1d
+sQPhrqp0xaTzTro3mHuCuQ==
+-----END CERTIFICATE-----
+
+// Subject: CN=DigiNotar PKIoverheid CA Overheid en Bedrijven,
+// O=DigiNotar B.V.,
+// C=NL
+// Issuer: CN=Staat der Nederlanden Overheid CA
+// O=Staat der Nederlanden,
+// C=NL
+// Serial: 20015536 (01:31:69:b0)
+-----BEGIN CERTIFICATE-----
+MIIEiDCCA3CgAwIBAgIEATFpsDANBgkqhkiG9w0BAQUFADBZMQswCQYDVQQGEwJO
+TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSowKAYDVQQDEyFTdGFh
+dCBkZXIgTmVkZXJsYW5kZW4gT3ZlcmhlaWQgQ0EwHhcNMDcwNzA1MDg0MjA3WhcN
+MTUwNzI3MDgzOTQ2WjBfMQswCQYDVQQGEwJOTDEXMBUGA1UEChMORGlnaU5vdGFy
+IEIuVi4xNzA1BgNVBAMTLkRpZ2lOb3RhciBQS0lvdmVyaGVpZCBDQSBPdmVyaGVp
+ZCBlbiBCZWRyaWp2ZW4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDc
+vdKnTmoKuzuiheF/AK2+tDBomAfNoHrElM9x+Yo35FPrV3bMi+Zs/u6HVcg+uwQ5
+AKeAeKxbT370vbhUuHE7BzFJOZNUfCA7eSuPu2GQfbGs5h+QLp1FAalkLU3DL7nn
+UNVOKlyrdnY3Rtd57EKZ96LspIlw3Dgrh6aqJOadkiQbvvb91C8ZF3rmMgeUVAVT
+Q+lsvK9Hy7zL/b07RBKB8WtLu+20z6slTxjSzAL8o0+1QjPLWc0J3NNQ/aB2jKx+
+ZopC9q0ckvO2+xRG603XLzDgbe5bNr5EdLcgBVeFTegAGaL2DOauocBC36esgl3H
+aLcY5olLmmv6znn58yynAgMBAAGjggFQMIIBTDBIBgNVHSAEQTA/MD0GBFUdIAAw
+NTAzBggrBgEFBQcCARYnaHR0cDovL3d3dy5kaWdpbm90YXIubmwvY3BzL3BraW92
+ZXJoZWlkMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMIGABgNVHSME
+eTB3gBQLhtYPd6NosftkCcOIblwEHFfpPaFZpFcwVTELMAkGA1UEBhMCTkwxHjAc
+BgNVBAoTFVN0YWF0IGRlciBOZWRlcmxhbmRlbjEmMCQGA1UEAxMdU3RhYXQgZGVy
+IE5lZGVybGFuZGVuIFJvb3QgQ0GCBACYmnkwPQYDVR0fBDYwNDAyoDCgLoYsaHR0
+cDovL2NybC5wa2lvdmVyaGVpZC5ubC9Eb21PdkxhdGVzdENSTC5jcmwwHQYDVR0O
+BBYEFEwIyY128ZjHPt881y91DbF2eZfMMA0GCSqGSIb3DQEBBQUAA4IBAQAMlIca
+v03jheLu19hjeQ5Q38aEW9K72fUxCho1l3TfFPoqDz7toOMI9tVOW6+mriXiRWsi
+D7dUKH6S3o0UbNEc5W50BJy37zRERd/Jgx0ZH8Apad+J1T/CsFNt5U4X5HNhIxMm
+cUP9TFnLw98iqiEr2b+VERqKpOKrp11Lbyn1UtHk0hWxi/7wA8+nfemZhzizDXMU
+5HIs4c71rQZIZPrTKbmi2Lv01QulQERDjqC/zlqlUkxk0xcxYczopIro5Ij76eUv
+BjMzm5RmZrGrUDqhCYF0U1onuabSJc/Tw6f/ltAv6uAejVLpGBwgCkegllYOQJBR
+RKwa/fHuhR/3Qlpl
+-----END CERTIFICATE-----
+
+// Subject: CN=DigiNotar PKIoverheid CA Overheid
+// O=DigiNotar B.V.,
+// C=NL
+// Issuer: CN=Staat der Nederlanden Overheid CA
+// O=Staat der Nederlanden,
+// C=NL
+// Serial: 20006006 (01:31:44:76)
+-----BEGIN CERTIFICATE-----
+MIIEezCCA2OgAwIBAgIEATFEdjANBgkqhkiG9w0BAQUFADBZMQswCQYDVQQGEwJO
+TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSowKAYDVQQDEyFTdGFh
+dCBkZXIgTmVkZXJsYW5kZW4gT3ZlcmhlaWQgQ0EwHhcNMDQwNjI0MDgxOTMyWhcN
+MTAwNjIzMDgxNzM2WjBSMQswCQYDVQQGEwJOTDEXMBUGA1UEChMORGlnaU5vdGFy
+IEIuVi4xKjAoBgNVBAMTIURpZ2lOb3RhciBQS0lvdmVyaGVpZCBDQSBPdmVyaGVp
+ZDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANSlrubta5tlOjVCi/gb
+yLCvRqfBjxG8H594VcKHu0WAYc99SPZF9cycj5mw2GyfQvy/WIrGrL4iyNq1gSqR
+0QA/mTXKZIaPqzpDhdm+VvrKkmjrbZfaQxgMSs3ChtBsjcP9Lc0X1zXZ4Q8nBe3k
+BTp+zehINfmbjoEgXLxsMR5RQ6GxzKjuC04PQpbJQgTIakglKaqYcDDZbEscWgPV
+Hgj/2aoHlj6leW/ThHZ+O41jUguEmBLZA3mu3HrCfrHntb5dPt0ihzSx7GtD/SaX
+5HBLxnP189YuqMk5iRA95CtiSdKauvon/xRKRLNgG6XAz0ctSoY7xLDdiBVU5kJd
+FScCAwEAAaOCAVAwggFMMEgGA1UdIARBMD8wPQYEVR0gADA1MDMGCCsGAQUFBwIB
+FidodHRwOi8vd3d3LmRpZ2lub3Rhci5ubC9jcHMvcGtpb3ZlcmhlaWQwDwYDVR0T
+AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgYAGA1UdIwR5MHeAFAuG1g93o2ix
++2QJw4huXAQcV+k9oVmkVzBVMQswCQYDVQQGEwJOTDEeMBwGA1UEChMVU3RhYXQg
+ZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g
+Um9vdCBDQYIEAJiaeTA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnBraW92
+ZXJoZWlkLm5sL0RvbU92TGF0ZXN0Q1JMLmNybDAdBgNVHQ4EFgQUvRaYQh2+kdE9
+wpcl4CjXWOC1f+IwDQYJKoZIhvcNAQEFBQADggEBAGhQsCWLiaN2EOhPAW+JQP6o
+XBOrLv5w6joahzBFVn1BiefzmlMKjibqKYxURRvMAsMkh82/MfL8V0w6ugxl81lu
+i42dcxl9cKSVXKMw4bbBzJ2VQI5HTIABwefeNuy/eX6idVwYdt3ajAH7fUA8Q9Cq
+vr6H8B+8mwoEqTVTEVlCSsC/EXsokYEUr06PPzRudKjDmijgj7zFaIioZNc8hk7g
+ufEgrs/tmcNGylrwRHgCXjCRBt2NHlZ08l7A1AGU8HcHlSbG9Un/2q9kVHUkps0D
+gtUaEK+x6jpAu/R8Ojezu/+ZEcwwjI/KOhG+84+ejFmtyEkrUdsAdEdLf/2dKsw=
+-----END CERTIFICATE-----
+
+// Subject: EMAILADDRESS=info@diginotar.nl,
+// CN=DigiNotar Services 1024 CA
+// O=DigiNotar, C=NL
+// Issuer: CN=Entrust.net Secure Server Certification Authority,
+// OU=(c) 1999 Entrust.net Limited,
+// OU=www.entrust.net/CPS incorp. by ref. (limits liab.),
+// O=Entrust.net,
+// C=US
+// Serial: 1184640176 (46:9c:2c:b0)
+-----BEGIN CERTIFICATE-----
+MIIDzTCCAzagAwIBAgIERpwssDANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
+VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
+ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
+KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
+ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNzA3
+MjYxNTU5MDBaFw0xMzA4MjYxNjI5MDBaMGgxCzAJBgNVBAYTAk5MMRIwEAYDVQQK
+EwlEaWdpTm90YXIxIzAhBgNVBAMTGkRpZ2lOb3RhciBTZXJ2aWNlcyAxMDI0IENB
+MSAwHgYJKoZIhvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCBnzANBgkqhkiG9w0B
+AQEFAAOBjQAwgYkCgYEA2ptNXTz50eKLxsYIIMXZHkjsZlhneWIrQWP0iY1o2q+4
+lDaLGSSkoJPSmQ+yrS01Tc0vauH5mxkrvAQafi09UmTN8T5nD4ku6PJPrqYIoYX+
+oakJ5sarPkP8r3oDkdqmOaZh7phPGKjTs69mgumfvN1y+QYEvRLZGCTnq5NTi1kC
+AwEAAaOCASYwggEiMBIGA1UdEwEB/wQIMAYBAf8CAQAwJwYDVR0lBCAwHgYIKwYB
+BQUHAwEGCCsGAQUFBwMCBggrBgEFBQcDBDARBgNVHSAECjAIMAYGBFUdIAAwMwYI
+KwYBBQUHAQEEJzAlMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5lbnRydXN0Lm5l
+dDAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8vY3JsLmVudHJ1c3QubmV0L3NlcnZl
+cjEuY3JsMB0GA1UdDgQWBBT+3JRJDG/vXH/G8RKZTxZJrfuCZTALBgNVHQ8EBAMC
+AQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0BowGQYJKoZIhvZ9B0EA
+BAwwChsEVjcuMQMCAIEwDQYJKoZIhvcNAQEFBQADgYEAY3RqN6k/lpxmyFisCcnv
+9WWUf6MCxDgxvV0jh+zUVrLJsm7kBQb87PX6iHBZ1O7m3bV6oKNgLwIMq94SXa/w
+NUuqikeRGvWFLELHHe+VQ7NeuJWTpdrFKKqtci0xrZlrbP+MISevrZqRK8fdWMNu
+B8WfedLHjFW/TMcnXlEWKz4=
+-----END CERTIFICATE-----
+
+// Subject: CN=Buster Paper Comercial Ltda,
+// O=Buster Paper Comercial Ltda,
+// L=S?o Jos? Dos Campos,
+// ST=S?o Paulo,
+// C=BR
+// Issuer: CN=DigiCert Assured ID Code Signing CA-1,
+// OU=www.digicert.com,
+// O=DigiCert Inc,
+// C=US
+// Serial: 07:b4:4c:db:ff:fb:78:de:05:f4:26:16:72:a6:73:12
+-----BEGIN CERTIFICATE-----
+MIIGwzCCBaugAwIBAgIQB7RM2//7eN4F9CYWcqZzEjANBgkqhkiG9w0BAQUFADBv
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMS4wLAYDVQQDEyVEaWdpQ2VydCBBc3N1cmVkIElEIENv
+ZGUgU2lnbmluZyBDQS0xMB4XDTEzMDExNzAwMDAwMFoXDTE0MDEyMjEyMDAwMFow
+gY4xCzAJBgNVBAYTAkJSMRMwEQYDVQQIDApTw6NvIFBhdWxvMR4wHAYDVQQHDBVT
+w6NvIEpvc8OpIERvcyBDYW1wb3MxJDAiBgNVBAoTG0J1c3RlciBQYXBlciBDb21l
+cmNpYWwgTHRkYTEkMCIGA1UEAxMbQnVzdGVyIFBhcGVyIENvbWVyY2lhbCBMdGRh
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzO0l6jWIpEfO2oUpVHpL
+HETj5lzivNb0S9jKHgGJax917czh81PnGTxwxFXd6gLJuy/XFHvmiSi8g8jzlymn
+2Ji5zQ3CPaz7nomJokSUDlMVJ2qYWtctw4jrdjuI4qtn+koXXUFkWjkf8h8251I4
+tUs7S49HE2Go5owCYP3byajj7fsFAYR/Xb7TdVtndkZsUB/YgOjHovyACjouaNCi
+mDiRyQ6zLLjZGiyeD65Yiseuhp5b8/BL5h1p7w76QYMYMVQNAdtDKut2R8MBpuWf
+Ny7Eoi0x/gm1p9X5Rcl5aN7K0G4UtTAJKbkuUfXddsyFoM0Nx8uo8SgNQ8Y/X5Jx
+BwIDAQABo4IDOTCCAzUwHwYDVR0jBBgwFoAUe2jOKarAF75JeuHlP9an90WPNTIw
+HQYDVR0OBBYEFFLZ3n5nt/Eer7n1bvtOqMb1qKO5MA4GA1UdDwEB/wQEAwIHgDAT
+BgNVHSUEDDAKBggrBgEFBQcDAzBzBgNVHR8EbDBqMDOgMaAvhi1odHRwOi8vY3Js
+My5kaWdpY2VydC5jb20vYXNzdXJlZC1jcy0yMDExYS5jcmwwM6AxoC+GLWh0dHA6
+Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9hc3N1cmVkLWNzLTIwMTFhLmNybDCCAcQGA1Ud
+IASCAbswggG3MIIBswYJYIZIAYb9bAMBMIIBpDA6BggrBgEFBQcCARYuaHR0cDov
+L3d3dy5kaWdpY2VydC5jb20vc3NsLWNwcy1yZXBvc2l0b3J5Lmh0bTCCAWQGCCsG
+AQUFBwICMIIBVh6CAVIAQQBuAHkAIAB1AHMAZQAgAG8AZgAgAHQAaABpAHMAIABD
+AGUAcgB0AGkAZgBpAGMAYQB0AGUAIABjAG8AbgBzAHQAaQB0AHUAdABlAHMAIABh
+AGMAYwBlAHAAdABhAG4AYwBlACAAbwBmACAAdABoAGUAIABEAGkAZwBpAEMAZQBy
+AHQAIABDAFAALwBDAFAAUwAgAGEAbgBkACAAdABoAGUAIABSAGUAbAB5AGkAbgBn
+ACAAUABhAHIAdAB5ACAAQQBnAHIAZQBlAG0AZQBuAHQAIAB3AGgAaQBjAGgAIABs
+AGkAbQBpAHQAIABsAGkAYQBiAGkAbABpAHQAeQAgAGEAbgBkACAAYQByAGUAIABp
+AG4AYwBvAHIAcABvAHIAYQB0AGUAZAAgAGgAZQByAGUAaQBuACAAYgB5ACAAcgBl
+AGYAZQByAGUAbgBjAGUALjCBggYIKwYBBQUHAQEEdjB0MCQGCCsGAQUFBzABhhho
+dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wTAYIKwYBBQUHMAKGQGh0dHA6Ly9jYWNl
+cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRENvZGVTaWduaW5nQ0Et
+MS5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQUFAAOCAQEAPTTQvpOIikXI
+hTLnNbajaFRR5GhQpTzUNgBfF9VYSlNw/wMjpGsrh5RxaJCip52jbehmTgjMRhft
+jRYyml44PAVsCcR9uEoDpCZYpI1fHI1R+F8jd1C9rqprbSwwOG4xlg4SmvTHYs6e
+gBItQ/1p9XY+Sf4Wv1qOuOFL1qvV/5VyR2zdlOQCmKCeMgxt6a/tHLBDiAA67D44
+/vfdoNJl0CU2It0PO60jdCPFNWIRcxL+OSDqAoePeUC7xQ+JsTEIxuUE8+d6w6fc
+BV2mYb1flh22t46GLjh4gyo7xw3aL6L0L0jzlTT6IcEw6NIbaPbIKj/npQnHobYj
+XMuKLxbh7g==
+-----END CERTIFICATE-----
+
+// Subject: CN=BUSTER ASSISTENCIA TECNICA ELETRONICA LTDA - ME,
+// O=BUSTER ASSISTENCIA TECNICA ELETRONICA LTDA - ME,
+// L=S?o Paulo,
+// ST=S?o Paulo,
+// C=BR
+// Issuer: CN=DigiCert Assured ID Code Signing CA-1,
+// OU=www.digicert.com,
+// O=DigiCert Inc,
+// C=US
+// Serial: 0a:38:9b:95:ee:73:6d:d1:3b:c0:ed:74:3f:d7:4d:2f
+-----BEGIN CERTIFICATE-----
+MIIG4DCCBcigAwIBAgIQCjible5zbdE7wO10P9dNLzANBgkqhkiG9w0BAQUFADBv
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMS4wLAYDVQQDEyVEaWdpQ2VydCBBc3N1cmVkIElEIENv
+ZGUgU2lnbmluZyBDQS0xMB4XDTEyMTEwOTAwMDAwMFoXDTEzMTExNDEyMDAwMFow
+gasxCzAJBgNVBAYTAkJSMRMwEQYDVQQIDApTw6NvIFBhdWxvMRMwEQYDVQQHDApT
+w6NvIFBhdWxvMTgwNgYDVQQKEy9CVVNURVIgQVNTSVNURU5DSUEgVEVDTklDQSBF
+TEVUUk9OSUNBIExUREEgLSBNRTE4MDYGA1UEAxMvQlVTVEVSIEFTU0lTVEVOQ0lB
+IFRFQ05JQ0EgRUxFVFJPTklDQSBMVERBIC0gTUUwggEiMA0GCSqGSIb3DQEBAQUA
+A4IBDwAwggEKAoIBAQDAqNeEs5/B2CTXGjTOkUIdu6jV6qulOZwdw4sefHWYj1UR
+4z6zPk9kjpUgbnb402RFq88QtfInwddZ/wXn9OxMtDd/3TnC7HrhNS7ga79ZFL2V
+JnmzKHum2Yvh0q82QEJ9tHBR2X9VdKpUIH08Zs3k6cWWM1H0YX0cxA/HohhesQJW
+kwJ3urOIJiH/HeByDk8a1NS8safcCxk5vxvW4WvCg43iT09LeHY5Aa8abKw8lqVb
+0tD5ZSIjdmdj3TT1U37iAHLLRM2DXbxfdbhouUX1c5U1ZHAMA67HwjKiseOiDaHj
+NUGbC37C+cgbc9VVM/cURD8WvS0Kj6fQv7F2QtJDAgMBAAGjggM5MIIDNTAfBgNV
+HSMEGDAWgBR7aM4pqsAXvkl64eU/1qf3RY81MjAdBgNVHQ4EFgQU88EXKAyDsh30
+o9+Gu9a4xUy+FSMwDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMD
+MHMGA1UdHwRsMGowM6AxoC+GLWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9hc3N1
+cmVkLWNzLTIwMTFhLmNybDAzoDGgL4YtaHR0cDovL2NybDQuZGlnaWNlcnQuY29t
+L2Fzc3VyZWQtY3MtMjAxMWEuY3JsMIIBxAYDVR0gBIIBuzCCAbcwggGzBglghkgB
+hv1sAwEwggGkMDoGCCsGAQUFBwIBFi5odHRwOi8vd3d3LmRpZ2ljZXJ0LmNvbS9z
+c2wtY3BzLXJlcG9zaXRvcnkuaHRtMIIBZAYIKwYBBQUHAgIwggFWHoIBUgBBAG4A
+eQAgAHUAcwBlACAAbwBmACAAdABoAGkAcwAgAEMAZQByAHQAaQBmAGkAYwBhAHQA
+ZQAgAGMAbwBuAHMAdABpAHQAdQB0AGUAcwAgAGEAYwBjAGUAcAB0AGEAbgBjAGUA
+IABvAGYAIAB0AGgAZQAgAEQAaQBnAGkAQwBlAHIAdAAgAEMAUAAvAEMAUABTACAA
+YQBuAGQAIAB0AGgAZQAgAFIAZQBsAHkAaQBuAGcAIABQAGEAcgB0AHkAIABBAGcA
+cgBlAGUAbQBlAG4AdAAgAHcAaABpAGMAaAAgAGwAaQBtAGkAdAAgAGwAaQBhAGIA
+aQBsAGkAdAB5ACAAYQBuAGQAIABhAHIAZQAgAGkAbgBjAG8AcgBwAG8AcgBhAHQA
+ZQBkACAAaABlAHIAZQBpAG4AIABiAHkAIAByAGUAZgBlAHIAZQBuAGMAZQAuMIGC
+BggrBgEFBQcBAQR2MHQwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0
+LmNvbTBMBggrBgEFBQcwAoZAaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0Rp
+Z2lDZXJ0QXNzdXJlZElEQ29kZVNpZ25pbmdDQS0xLmNydDAMBgNVHRMBAf8EAjAA
+MA0GCSqGSIb3DQEBBQUAA4IBAQAei1QmiXepje8OIfo/WonD4MIXgpPr2dfRaquQ
+A8q63OpTRSveyqdQDCSPpDRF/nvO1Y30yksZvIH1tNBsW5LBdxAKN3lFdBlqBwtE
+Q3jHc0KVVYRJ0FBaGE/PJHmRajscdAhYIcMPhTga0u0tDK+wOHEq3993dfl6yHjA
+XHU2iW5pnk75ZoE39zALD5eKXT8ZXrET5c3XUFJKWA+XuGmdmyzqo0Au49PanBv9
+UlZnabYfqoMArqMS0tGSX4cGgi9/2E+pHG9BX4sFW+ZDumroOA2pxyMWEKjxePEL
+zCOfhbsRWdMLYepauaNZOIMZXmFwcrIl0TGMkTAtATz+XmZc
+-----END CERTIFICATE-----
+
+// Subject: CN=CLEARESULT CONSULTING INC., OU=Corporate IT,
+// O=CLEARESULT CONSULTING INC., L=Austin, ST=TX, C=US
+// Issuer: SERIALNUMBER=07969287,
+// CN=Go Daddy Secure Certification Authority,
+// OU=http://certificates.godaddy.com/repository,
+// O="GoDaddy.com, Inc.",
+// L=Scottsdale,
+// ST=Arizona,
+// C=US
+// Serial: 2b:73:43:2a:a8:4f:44
+-----BEGIN CERTIFICATE-----
+MIIFYjCCBEqgAwIBAgIHK3NDKqhPRDANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
+BhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAY
+BgNVBAoTEUdvRGFkZHkuY29tLCBJbmMuMTMwMQYDVQQLEypodHRwOi8vY2VydGlm
+aWNhdGVzLmdvZGFkZHkuY29tL3JlcG9zaXRvcnkxMDAuBgNVBAMTJ0dvIERhZGR5
+IFNlY3VyZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTERMA8GA1UEBRMIMDc5Njky
+ODcwHhcNMTIwMjE1MjEwOTA2WhcNMTQwMjE1MjEwOTA2WjCBjDELMAkGA1UEBgwC
+VVMxCzAJBgNVBAgMAlRYMQ8wDQYDVQQHDAZBdXN0aW4xIzAhBgNVBAoMGkNMRUFS
+RVNVTFQgQ09OU1VMVElORyBJTkMuMRUwEwYDVQQLDAxDb3Jwb3JhdGUgSVQxIzAh
+BgNVBAMMGkNMRUFSRVNVTFQgQ09OU1VMVElORyBJTkMuMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAtIOjCKeAicull+7ZIzt0/4ya3IeXUFlfypqKMLkU
+IbKjn0P5uMj6VE3rlbZr44RCegxvdnR6umBh1c0ZXoN3o+yc0JKcKcLiApmJJ277
+p7IbLwYDhBXRQNoIJm187IOMRPIxsKN4hL91txn9jGBmW+9zKlJlNhR5R7vjwU2E
+jrH/6oqsc9EM2yYpfjlNv6+3jSwAYZCkSWr+27PQOV+YHKmIxtJjX0upFz5FdIrV
+9CCX+L2Kji1THOkSgG4QTbYxmEcHqGViWz8hXLeNXjcbEsPuIiAu3hknxRHfUTE/
+U0Lh0Ug1e3LrJu+WnxM2SmUY4krsZ22c0yWUW9hzWITIjQIDAQABo4IBhzCCAYMw
+DwYDVR0TAQH/BAUwAwEBADATBgNVHSUEDDAKBggrBgEFBQcDAzAOBgNVHQ8BAf8E
+BAMCB4AwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5nb2RhZGR5LmNvbS9n
+ZHM1LTE2LmNybDBTBgNVHSAETDBKMEgGC2CGSAGG/W0BBxcCMDkwNwYIKwYBBQUH
+AgEWK2h0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5jb20vcmVwb3NpdG9yeS8w
+gYAGCCsGAQUFBwEBBHQwcjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZ29kYWRk
+eS5jb20vMEoGCCsGAQUFBzAChj5odHRwOi8vY2VydGlmaWNhdGVzLmdvZGFkZHku
+Y29tL3JlcG9zaXRvcnkvZ2RfaW50ZXJtZWRpYXRlLmNydDAfBgNVHSMEGDAWgBT9
+rGEyk2xF1uLuhV+auud2mWjM5zAdBgNVHQ4EFgQUDtdeKqeN2QkcbEp1HovFieNB
+XiowDQYJKoZIhvcNAQEFBQADggEBAD74Agw5tvi2aBl4/f/s7/VE/BClzDsKMb9K
+v9qpeC45ZA/jelxV11HKbQnVF194gDb7D2H9OsAsRUy8HVKbXEcc/8dKvwOqb+BC
+2i/EmfjLgmCfezNFtLq8xcPxF3zIRc44vPrK0z4YZsaHdH+yTEJ51p5EMdTqaLaP
+4n5m8LX3RfqlQB9dYFe6dUoYZjKm9d/pIRww3VqfOzjl42Edi1w6dWmBVMx1NZuR
+DBabJH1vJ9Gd+KwxMCmBZ6pQPl28JDimhJhI2LNqU349uADQVV0HJosddN/ARyyI
+LSIQO7BnNVKVG9Iujf33bvPNeg0qNz5qw+rKKq97Pqeum+L5oKU=
+-----END CERTIFICATE-----
--- a/jdk/src/share/npt/utf.c Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/share/npt/utf.c Thu Oct 10 13:41:08 2013 -0700
@@ -105,18 +105,24 @@
code = utf16[i];
if ( code >= 0x0001 && code <= 0x007F ) {
+ if ( outputLen + 1 >= outputMaxLen ) {
+ return -1;
+ }
output[outputLen++] = code;
} else if ( code == 0 || ( code >= 0x0080 && code <= 0x07FF ) ) {
+ if ( outputLen + 2 >= outputMaxLen ) {
+ return -1;
+ }
output[outputLen++] = ((code>>6) & 0x1F) | 0xC0;
output[outputLen++] = (code & 0x3F) | 0x80;
} else if ( code >= 0x0800 && code <= 0xFFFF ) {
+ if ( outputLen + 3 >= outputMaxLen ) {
+ return -1;
+ }
output[outputLen++] = ((code>>12) & 0x0F) | 0xE0;
output[outputLen++] = ((code>>6) & 0x3F) | 0x80;
output[outputLen++] = (code & 0x3F) | 0x80;
}
- if ( outputLen > outputMaxLen ) {
- return -1;
- }
}
output[outputLen] = 0;
return outputLen;
@@ -412,12 +418,15 @@
unsigned byte;
byte = bytes[i];
- if ( outputLen >= outputMaxLen ) {
- return -1;
- }
if ( byte <= 0x7f && isprint(byte) && !iscntrl(byte) ) {
+ if ( outputLen + 1 >= outputMaxLen ) {
+ return -1;
+ }
output[outputLen++] = (char)byte;
} else {
+ if ( outputLen + 4 >= outputMaxLen ) {
+ return -1;
+ }
(void)sprintf(output+outputLen,"\\x%02x",byte);
outputLen += 4;
}
--- a/jdk/src/solaris/bin/java_md_solinux.c Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/solaris/bin/java_md_solinux.c Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -59,7 +59,6 @@
*/
#ifdef __solaris__
-# define DUAL_MODE
# ifndef LIBARCH32NAME
# error "The macro LIBARCH32NAME was not defined on the compile line"
# endif
--- a/jdk/src/solaris/classes/sun/awt/X11/XGlobalCursorManager.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/solaris/classes/sun/awt/X11/XGlobalCursorManager.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -145,13 +145,8 @@
}
/*
- * two native methods to call corresponding methods in Container and
- * Component
+ * native method to call corresponding methods in Component
*/
- protected Component findComponentAt(Container con, int x, int y) {
- return con.findComponentAt(x,y);
- }
-
protected Point getLocationOnScreen(Component c) {
return c.getLocationOnScreen();
}
--- a/jdk/src/solaris/classes/sun/awt/X11/XLightweightFramePeer.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/solaris/classes/sun/awt/X11/XLightweightFramePeer.java Thu Oct 10 13:41:08 2013 -0700
@@ -28,6 +28,8 @@
import java.awt.Graphics;
import sun.awt.LightweightFrame;
+import sun.swing.JLightweightFrame;
+import sun.swing.SwingAccessor;
public class XLightweightFramePeer extends XFramePeer {
@@ -62,4 +64,9 @@
getLwTarget().ungrabFocus();
}
}
+
+ @Override
+ public void updateCursorImmediately() {
+ SwingAccessor.getJLightweightFrameAccessor().updateCursor((JLightweightFrame)getLwTarget());
+ }
}
--- a/jdk/src/solaris/classes/sun/awt/X11/XToolkit.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/solaris/classes/sun/awt/X11/XToolkit.java Thu Oct 10 13:41:08 2013 -0700
@@ -2249,6 +2249,8 @@
XConstants.XkbModifierMapMask |
XConstants.XkbVirtualModsMask,
XConstants.XkbUseCoreKbd);
+
+ XlibWrapper.XkbSetDetectableAutoRepeat(getDisplay(), true);
}
}
}
--- a/jdk/src/solaris/classes/sun/awt/X11/XTrayIconPeer.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/solaris/classes/sun/awt/X11/XTrayIconPeer.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -459,7 +459,7 @@
// other class tries to cast source field to Component).
// We already filter DRAG events out (CR 6565779).
e.setSource(xtiPeer.target);
- Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(e);
+ XToolkit.postEvent(XToolkit.targetToAppContext(e.getSource()), e);
}
public void mouseClicked(MouseEvent e) {
if ((e.getClickCount() > 1 || xtiPeer.balloon.isVisible()) &&
--- a/jdk/src/solaris/classes/sun/awt/X11/XWM.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/solaris/classes/sun/awt/X11/XWM.java Thu Oct 10 13:41:08 2013 -0700
@@ -592,7 +592,7 @@
}
static boolean isMutter() {
- return isNetWMName("Mutter");
+ return isNetWMName("Mutter") || isNetWMName("GNOME Shell");
}
static boolean isNonReparentingWM() {
--- a/jdk/src/solaris/classes/sun/awt/X11/XlibWrapper.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/solaris/classes/sun/awt/X11/XlibWrapper.java Thu Oct 10 13:41:08 2013 -0700
@@ -509,6 +509,7 @@
static native long XkbGetUpdatedMap(long display, long which, long xkb);
static native void XkbFreeKeyboard(long xkb, long which, boolean free_all);
static native boolean XkbTranslateKeyCode(long xkb, int keycode, long mods, long mods_rtrn, long keysym_rtrn);
+ static native void XkbSetDetectableAutoRepeat(long display, boolean detectable);
static native void XConvertCase(long keysym,
--- a/jdk/src/solaris/classes/sun/java2d/xr/XRMaskImage.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/solaris/classes/sun/java2d/xr/XRMaskImage.java Thu Oct 10 13:41:08 2013 -0700
@@ -45,6 +45,7 @@
int blitMaskPicture;
int lastMaskWidth = 0;
int lastMaskHeight = 0;
+ int lastEA = -1;
AffineTransform lastMaskTransform;
XRCompositeManager xrMgr;
@@ -82,13 +83,15 @@
lastMaskTransform = maskTX;
}
- if (lastMaskWidth != maskWidth || lastMaskHeight != maskHeight) {
+ int currentEA = xrMgr.getAlphaColor().getAlpha();
+ if (lastMaskWidth != maskWidth || lastMaskHeight != maskHeight || lastEA != currentEA) {
//Only clear mask, if previous mask area is larger than new one, otherwise simple overpaint it
if (lastMaskWidth > maskWidth || lastMaskHeight > maskHeight) {
con.renderRectangle(blitMaskPicture, XRUtils.PictOpClear, XRColor.NO_ALPHA, 0, 0, lastMaskWidth, lastMaskHeight);
}
con.renderRectangle(blitMaskPicture, XRUtils.PictOpSrc, xrMgr.getAlphaColor(), 0, 0, maskWidth, maskHeight);
+ lastEA = currentEA;
}
lastMaskWidth = maskWidth;
--- a/jdk/src/solaris/classes/sun/nio/ch/DevPollArrayWrapper.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/solaris/classes/sun/nio/ch/DevPollArrayWrapper.java Thu Oct 10 13:41:08 2013 -0700
@@ -26,9 +26,11 @@
package sun.nio.ch;
import java.io.IOException;
+import java.security.AccessController;
import java.util.BitSet;
import java.util.Map;
import java.util.HashMap;
+import sun.security.action.GetIntegerAction;
/**
@@ -78,10 +80,11 @@
static final int NUM_POLLFDS = Math.min(OPEN_MAX-1, 8192);
// Initial size of arrays for fd registration changes
- private final int INITIAL_PENDING_UPDATE_SIZE = 64;
+ private static final int INITIAL_PENDING_UPDATE_SIZE = 64;
// maximum size of updatesLow
- private final int MAX_UPDATE_ARRAY_SIZE = Math.min(OPEN_MAX, 64*1024);
+ private static final int MAX_UPDATE_ARRAY_SIZE = AccessController.doPrivileged(
+ new GetIntegerAction("sun.nio.ch.maxUpdateArraySize", Math.min(OPEN_MAX, 64*1024)));
// The pollfd array for results from devpoll driver
private final AllocatedNativeObject pollArray;
--- a/jdk/src/solaris/classes/sun/nio/ch/EPollArrayWrapper.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/solaris/classes/sun/nio/ch/EPollArrayWrapper.java Thu Oct 10 13:41:08 2013 -0700
@@ -26,9 +26,11 @@
package sun.nio.ch;
import java.io.IOException;
+import java.security.AccessController;
import java.util.BitSet;
import java.util.HashMap;
import java.util.Map;
+import sun.security.action.GetIntegerAction;
/**
* Manipulates a native array of epoll_event structs on Linux:
@@ -78,8 +80,8 @@
private static final int INITIAL_PENDING_UPDATE_SIZE = 64;
// maximum size of updatesLow
- private static final int MAX_UPDATE_ARRAY_SIZE = Math.min(OPEN_MAX, 64*1024);
-
+ private static final int MAX_UPDATE_ARRAY_SIZE = AccessController.doPrivileged(
+ new GetIntegerAction("sun.nio.ch.maxUpdateArraySize", Math.min(OPEN_MAX, 64*1024)));
// The fd of the epoll driver
private final int epfd;
@@ -164,6 +166,16 @@
}
/**
+ * Returns {@code true} if updates for the given key (file
+ * descriptor) are killed.
+ */
+ private boolean isEventsHighKilled(Integer key) {
+ assert key >= MAX_UPDATE_ARRAY_SIZE;
+ Byte value = eventsHigh.get(key);
+ return (value != null && value == KILLED);
+ }
+
+ /**
* Sets the pending update events for the given file descriptor. This
* method has no effect if the update events is already set to KILLED,
* unless {@code force} is {@code true}.
@@ -175,7 +187,7 @@
}
} else {
Integer key = Integer.valueOf(fd);
- if ((eventsHigh.get(key) != KILLED) || force) {
+ if (!isEventsHighKilled(key) || force) {
eventsHigh.put(key, Byte.valueOf(events));
}
}
--- a/jdk/src/solaris/classes/sun/nio/ch/EventPortWrapper.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/solaris/classes/sun/nio/ch/EventPortWrapper.java Thu Oct 10 13:41:08 2013 -0700
@@ -25,9 +25,14 @@
package sun.nio.ch;
+import java.io.IOException;
+import java.security.AccessController;
+import java.util.BitSet;
+import java.util.HashMap;
+import java.util.Map;
+
import sun.misc.Unsafe;
-import java.io.IOException;
-import java.util.*;
+import sun.security.action.GetIntegerAction;
import static sun.nio.ch.SolarisEventPort.*;
/**
@@ -49,7 +54,8 @@
private final int INITIAL_PENDING_UPDATE_SIZE = 256;
// maximum size of updateArray
- private final int MAX_UPDATE_ARRAY_SIZE = Math.min(OPEN_MAX, 64*1024);
+ private static final int MAX_UPDATE_ARRAY_SIZE = AccessController.doPrivileged(
+ new GetIntegerAction("sun.nio.ch.maxUpdateArraySize", Math.min(OPEN_MAX, 64*1024)));
// special update status to indicate that it should be ignored
private static final byte IGNORE = -1;
--- a/jdk/src/solaris/native/sun/xawt/XlibWrapper.c Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/solaris/native/sun/xawt/XlibWrapper.c Thu Oct 10 13:41:08 2013 -0700
@@ -523,8 +523,12 @@
//printf("native, output: keysym:0x%0X; mods:0x%0X\n", *(unsigned int *)jlong_to_ptr(keysym_rtrn), *(unsigned int *)jlong_to_ptr(mods_rtrn));
return b;
}
-
-
+JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XkbSetDetectableAutoRepeat
+(JNIEnv *env, jclass clazz, jlong display, jboolean detectable)
+{
+ AWT_CHECK_HAVE_LOCK();
+ XkbSetDetectableAutoRepeat((Display *) jlong_to_ptr(display), detectable, NULL);
+}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XNextEvent
--- a/jdk/src/windows/classes/sun/awt/windows/WComponentPeer.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/windows/classes/sun/awt/windows/WComponentPeer.java Thu Oct 10 13:41:08 2013 -0700
@@ -656,7 +656,7 @@
_setFont(f);
}
public synchronized native void _setFont(Font f);
- public final void updateCursorImmediately() {
+ public void updateCursorImmediately() {
WGlobalCursorManager.getCursorManager().updateCursorImmediately();
}
--- a/jdk/src/windows/classes/sun/awt/windows/WDataTransferer.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/windows/classes/sun/awt/windows/WDataTransferer.java Thu Oct 10 13:41:08 2013 -0700
@@ -211,9 +211,9 @@
DataFlavor.allHtmlFlavor,
format);
} else {
- // handel other html flavor types, including custom and
+ // handle other html flavor types, including custom and
// fragment ones
- bytes = HTMLCodec.convertToHTMLFormat(bytes);
+ bytes = HTMLCodec.convertToHTMLFormat(super.translateTransferable(contents, flavor, format));
}
} else {
// we handle non-html types basing on their
--- a/jdk/src/windows/classes/sun/awt/windows/WFileDialogPeer.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/windows/classes/sun/awt/windows/WFileDialogPeer.java Thu Oct 10 13:41:08 2013 -0700
@@ -182,6 +182,7 @@
AWTAccessor.getFileDialogAccessor().setFile(fileDialog, null);
AWTAccessor.getFileDialogAccessor().setFiles(fileDialog, null);
+ AWTAccessor.getFileDialogAccessor().setDirectory(fileDialog, null);
WToolkit.executeOnEventHandlerThread(fileDialog, new Runnable() {
public void run() {
--- a/jdk/src/windows/classes/sun/awt/windows/WGlobalCursorManager.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/windows/classes/sun/awt/windows/WGlobalCursorManager.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2000, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -48,7 +48,6 @@
protected native void setCursor(Component comp, Cursor cursor, boolean u);
protected native void getCursorPos(Point p);
- protected native Component findComponentAt(Container con, int x, int y);
/*
* two native methods to call corresponding methods in Container and
* Component
--- a/jdk/src/windows/classes/sun/awt/windows/WLightweightFramePeer.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/windows/classes/sun/awt/windows/WLightweightFramePeer.java Thu Oct 10 13:41:08 2013 -0700
@@ -31,6 +31,8 @@
import java.awt.event.MouseEvent;
import sun.awt.LightweightFrame;
+import sun.swing.JLightweightFrame;
+import sun.swing.SwingAccessor;
public class WLightweightFramePeer extends WFramePeer {
@@ -83,4 +85,9 @@
public void ungrab() {
getLwTarget().ungrabFocus();
}
+
+ @Override
+ public void updateCursorImmediately() {
+ SwingAccessor.getJLightweightFrameAccessor().updateCursor((JLightweightFrame)getLwTarget());
+ }
}
--- a/jdk/src/windows/native/java/lang/ProcessImpl_md.c Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/windows/native/java/lang/ProcessImpl_md.c Thu Oct 10 13:41:08 2013 -0700
@@ -308,7 +308,11 @@
if (success) {
PROCESS_INFORMATION pi;
- DWORD processFlag = CREATE_NO_WINDOW | CREATE_UNICODE_ENVIRONMENT;
+ DWORD processFlag = CREATE_UNICODE_ENVIRONMENT;
+
+ /* Suppress popping-up of a console window for non-console applications */
+ if (GetConsoleWindow() == NULL)
+ processFlag |= CREATE_NO_WINDOW;
si.dwFlags = STARTF_USESTDHANDLES;
if (!CreateProcessW(
--- a/jdk/src/windows/native/sun/windows/awt_Container.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/windows/native/sun/windows/awt_Container.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -31,7 +31,6 @@
*/
jfieldID AwtContainer::layoutMgrID;
-jmethodID AwtContainer::findComponentAtMID;
/************************************************************************
* AwtContainer native methods
@@ -46,11 +45,7 @@
AwtContainer::layoutMgrID =
env->GetFieldID(cls, "layoutMgr", "Ljava/awt/LayoutManager;");
- AwtContainer::findComponentAtMID =
- env->GetMethodID(cls, "findComponentAt", "(IIZ)Ljava/awt/Component;");
-
DASSERT(AwtContainer::layoutMgrID != NULL);
- DASSERT(AwtContainer::findComponentAtMID);
CATCH_BAD_ALLOC;
}
--- a/jdk/src/windows/native/sun/windows/awt_Container.h Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/windows/native/sun/windows/awt_Container.h Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -38,7 +38,6 @@
/* java.awt.Container field ids */
static jfieldID layoutMgrID;
- static jmethodID findComponentAtMID;
};
--- a/jdk/src/windows/native/sun/windows/awt_Cursor.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/windows/native/sun/windows/awt_Cursor.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -554,32 +554,6 @@
/*
* Class: sun_awt_windows_WGlobalCursorManager
- * Method: findComponentAt
- * Signature: (L/java/awt/Container;II)L/java/awt/Component
- */
-JNIEXPORT jobject JNICALL
-Java_sun_awt_windows_WGlobalCursorManager_findComponentAt(
- JNIEnv *env, jobject, jobject container, jint x, jint y)
-{
- TRY;
-
- /*
- * Call private version of Container.findComponentAt with the following
- * flag set -- ignoreEnabled = false (i.e., don't return or recur into
- * disabled Components);
- * NOTE: it may return a JRootPane's glass pane as the target Component
- */
- JNI_CHECK_NULL_RETURN_NULL(container, "null container");
- jobject comp =
- env->CallObjectMethod(container, AwtContainer::findComponentAtMID,
- x, y, JNI_FALSE);
- return comp;
-
- CATCH_BAD_ALLOC_RET(NULL);
-}
-
-/*
- * Class: sun_awt_windows_WGlobalCursorManager
* Method: getLocationOnScreen
* Signature: (L/java/awt/Component;)L/java/awt/Point
*/
--- a/jdk/src/windows/native/sun/windows/awt_FileDialog.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/windows/native/sun/windows/awt_FileDialog.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -73,7 +73,7 @@
int length = env->GetStringLength(filterDescription);
DASSERT(length + 1 < MAX_FILTER_STRING);
LPCTSTR tmp = JNU_GetStringPlatformChars(env, filterDescription, NULL);
- _tcscpy(s_fileFilterString, tmp);
+ _tcscpy_s(s_fileFilterString, MAX_FILTER_STRING, tmp);
JNU_ReleaseStringPlatformChars(env, filterDescription, tmp);
//AdditionalString should be terminated by two NULL characters (Windows
@@ -353,7 +353,7 @@
if (!result) {
dlgerr = ::CommDlgExtendedError();
if (dlgerr == FNERR_INVALIDFILENAME) {
- _tcscpy(fileBuffer, TEXT(""));
+ _tcscpy_s(fileBuffer, bufferLimit, TEXT(""));
if (mode == java_awt_FileDialog_LOAD) {
result = AwtFileDialog::GetOpenFileName(&ofn);
} else {
@@ -372,7 +372,9 @@
// Report result to peer.
if (result) {
- jint length = (jint)GetBufferLength(ofn.lpstrFile, ofn.nMaxFile);
+ jint length = multipleMode
+ ? (jint)GetBufferLength(ofn.lpstrFile, ofn.nMaxFile)
+ : (jint)_tcslen(ofn.lpstrFile);
jcharArray jnames = env->NewCharArray(length);
env->SetCharArrayRegion(jnames, 0, length, (jchar*)ofn.lpstrFile);
--- a/jdk/src/windows/native/sun/windows/awt_Font.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/windows/native/sun/windows/awt_Font.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -366,17 +366,6 @@
return awtFont;
}
-int CALLBACK FindFamilyName (ENUMLOGFONTEX *lpelfe,
- NEWTEXTMETRICEX *lpntme, int FontType, LPARAM lParam)
-{
- if(_tcsstr((LPTSTR)lParam, lpelfe->elfLogFont.lfFaceName)) {
- _tcscpy((LPTSTR)lParam, lpelfe->elfLogFont.lfFaceName);
- return 0;
- } else {
- return 1;
- }
-}
-
static void strip_tail(wchar_t* text, wchar_t* tail) { // strips tail and any possible whitespace before it from the end of text
if (wcslen(text)<=wcslen(tail)) {
return;
--- a/jdk/src/windows/native/sun/windows/awt_PrintControl.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/windows/native/sun/windows/awt_PrintControl.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -428,17 +428,17 @@
devnames->wOutputOffset =
static_cast<WORD>(sizeof(DEVNAMES)/sizeof(TCHAR) + lenDriverName + lenPrinterName);
if (info2->pDriverName != NULL) {
- _tcscpy(lpcDevnames + devnames->wDriverOffset, info2->pDriverName);
+ _tcscpy_s(lpcDevnames + devnames->wDriverOffset, devnameSize - devnames->wDriverOffset, info2->pDriverName);
} else {
*(lpcDevnames + devnames->wDriverOffset) = _T('\0');
}
if (pPrinterName != NULL) {
- _tcscpy(lpcDevnames + devnames->wDeviceOffset, pPrinterName);
+ _tcscpy_s(lpcDevnames + devnames->wDeviceOffset, devnameSize - devnames->wDeviceOffset, pPrinterName);
} else {
*(lpcDevnames + devnames->wDeviceOffset) = _T('\0');
}
if (info2->pPortName != NULL) {
- _tcscpy(lpcDevnames + devnames->wOutputOffset, info2->pPortName);
+ _tcscpy_s(lpcDevnames + devnames->wOutputOffset, devnameSize - devnames->wOutputOffset, info2->pPortName);
} else {
*(lpcDevnames + devnames->wOutputOffset) = _T('\0');
}
--- a/jdk/src/windows/native/sun/windows/awt_Toolkit.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/windows/native/sun/windows/awt_Toolkit.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -228,7 +228,7 @@
// create input locale string, e.g., "00000409", from hkl.
TCHAR inputLocale[9];
TCHAR buf[9];
- _tcscpy(inputLocale, TEXT("00000000"));
+ _tcscpy_s(inputLocale, 9, TEXT("00000000"));
// 64-bit: ::LoadKeyboardLayout() is such a weird API - a string of
// the hex value you want?! Here we're converting our HKL value to
--- a/jdk/src/windows/native/sun/windows/awt_TrayIcon.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/windows/native/sun/windows/awt_TrayIcon.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -711,7 +711,7 @@
_tcsncpy(m_nid.szTip, tooltip, TRAY_ICON_TOOLTIP_MAX_SIZE);
m_nid.szTip[TRAY_ICON_TOOLTIP_MAX_SIZE - 1] = '\0';
} else {
- _tcscpy(m_nid.szTip, tooltip);
+ _tcscpy_s(m_nid.szTip, TRAY_ICON_TOOLTIP_MAX_SIZE, tooltip);
}
SendTrayMessage(NIM_MODIFY);
@@ -817,7 +817,7 @@
m_nid.szInfoTitle[TRAY_ICON_BALLOON_TITLE_MAX_SIZE - 1] = '\0';
} else {
- _tcscpy(m_nid.szInfoTitle, caption);
+ _tcscpy_s(m_nid.szInfoTitle, TRAY_ICON_BALLOON_TITLE_MAX_SIZE, caption);
}
if (text[0] == '\0') {
@@ -830,7 +830,7 @@
m_nid.szInfo[TRAY_ICON_BALLOON_INFO_MAX_SIZE - 1] = '\0';
} else {
- _tcscpy(m_nid.szInfo, text);
+ _tcscpy_s(m_nid.szInfo, TRAY_ICON_BALLOON_INFO_MAX_SIZE, text);
}
SendTrayMessage(NIM_MODIFY);
--- a/jdk/src/windows/native/sun/windows/awt_ole.cpp Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/src/windows/native/sun/windows/awt_ole.cpp Thu Oct 10 13:41:08 2013 -0700
@@ -70,7 +70,7 @@
bErrorReport?_T("Error:"):_T(""),
szBuffer) < 0)
{
- _tcscpy(szBuffer1 + DTRACE_BUF_LEN - 5, _T("...")); //reserver for \n
+ _tcscpy_s(szBuffer1 + DTRACE_BUF_LEN - 5, 5, _T("...")); //reserver for \n
}
memcpy(szBuffer1, szTime, iTimeLen*sizeof(TCHAR));
_tcscat(szBuffer1, _T("\n"));
--- a/jdk/test/com/sun/jdi/BadHandshakeTest.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/com/sun/jdi/BadHandshakeTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -108,16 +108,7 @@
*/
private static Process launch(String address, String class_name) throws IOException {
String exe = System.getProperty("java.home")
- + File.separator + "bin" + File.separator;
- String arch = System.getProperty("os.arch");
- String osname = System.getProperty("os.name");
- if (osname.equals("SunOS") && arch.equals("sparcv9")) {
- exe += "sparcv9/java";
- } else if (osname.equals("SunOS") && arch.equals("amd64")) {
- exe += "amd64/java";
- } else {
- exe += "java";
- }
+ + File.separator + "bin" + File.separator + "java";
String cmd = exe + " " + VMConnection.getDebuggeeVMOptions() +
" -agentlib:jdwp=transport=dt_socket" +
",server=y" + ",suspend=y" + ",address=" + address +
--- a/jdk/test/com/sun/jdi/DoubleAgentTest.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/com/sun/jdi/DoubleAgentTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -90,16 +90,7 @@
*/
private static Process launch(String address, String class_name) throws IOException {
String exe = System.getProperty("java.home")
- + File.separator + "bin" + File.separator;
- String arch = System.getProperty("os.arch");
- String osname = System.getProperty("os.name");
- if (osname.equals("SunOS") && arch.equals("sparcv9")) {
- exe += "sparcv9/java";
- } else if (osname.equals("SunOS") && arch.equals("amd64")) {
- exe += "amd64/java";
- } else {
- exe += "java";
- }
+ + File.separator + "bin" + File.separator + "java";
String jdwpOption = "-agentlib:jdwp=transport=dt_socket"
+ ",server=y" + ",suspend=y" + ",address=" + address;
String cmd = exe + " " + VMConnection.getDebuggeeVMOptions()
--- a/jdk/test/com/sun/jdi/ExceptionEvents.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/com/sun/jdi/ExceptionEvents.java Thu Oct 10 13:41:08 2013 -0700
@@ -417,8 +417,12 @@
request = eventRequestManager().createExceptionRequest(exceptionClass,
caught, uncaught);
request.addClassExclusionFilter("java.*");
+ request.addClassExclusionFilter("javax.*");
request.addClassExclusionFilter("sun.*");
request.addClassExclusionFilter("com.sun.*");
+ request.addClassExclusionFilter("com.oracle.*");
+ request.addClassExclusionFilter("oracle.*");
+ request.addClassExclusionFilter("jdk.internal.*");
request.setSuspendPolicy(suspendPolicy);
request.enable();
--- a/jdk/test/com/sun/jdi/ExclusiveBind.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/com/sun/jdi/ExclusiveBind.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -97,16 +97,7 @@
*/
private static Process launch(String address, boolean suspend, String class_name) throws IOException {
String exe = System.getProperty("java.home") + File.separator + "bin" +
- File.separator;
- String arch = System.getProperty("os.arch");
- String osname = System.getProperty("os.name");
- if (osname.equals("SunOS") && arch.equals("sparcv9")) {
- exe += "sparcv9/java";
- } else if (osname.equals("SunOS") && arch.equals("amd64")) {
- exe += "amd64/java";
- } else {
- exe += "java";
- }
+ File.separator + "java";
String cmd = exe + " " + VMConnection.getDebuggeeVMOptions() +
" -agentlib:jdwp=transport=dt_socket,server=y,suspend=";
if (suspend) {
--- a/jdk/test/com/sun/jdi/FilterNoMatch.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/com/sun/jdi/FilterNoMatch.java Thu Oct 10 13:41:08 2013 -0700
@@ -121,9 +121,13 @@
// We have to filter out all these so that they don't cause the
// listener to be called.
- request1.addClassExclusionFilter( "java.*");
- request1.addClassExclusionFilter( "com.*");
- request1.addClassExclusionFilter( "sun.*");
+ request1.addClassExclusionFilter("java.*");
+ request1.addClassExclusionFilter("javax.*");
+ request1.addClassExclusionFilter("sun.*");
+ request1.addClassExclusionFilter("com.sun.*");
+ request1.addClassExclusionFilter("com.oracle.*");
+ request1.addClassExclusionFilter("oracle.*");
+ request1.addClassExclusionFilter("jdk.internal.*");
// We want our listener to be called if a pattern does not match.
// So, here we want patterns that do not match HelloWorld.
--- a/jdk/test/com/sun/jdi/JDIScaffold.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/com/sun/jdi/JDIScaffold.java Thu Oct 10 13:41:08 2013 -0700
@@ -450,8 +450,12 @@
requestManager.createStepRequest(thread, gran, depth);
sr.addClassExclusionFilter("java.*");
+ sr.addClassExclusionFilter("javax.*");
sr.addClassExclusionFilter("sun.*");
sr.addClassExclusionFilter("com.sun.*");
+ sr.addClassExclusionFilter("com.oracle.*");
+ sr.addClassExclusionFilter("oracle.*");
+ sr.addClassExclusionFilter("jdk.internal.*");
sr.addCountFilter(1);
sr.enable();
StepEvent retEvent = (StepEvent)waitForRequestedEvent(sr);
--- a/jdk/test/com/sun/jdi/MethodEntryExitEvents.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/com/sun/jdi/MethodEntryExitEvents.java Thu Oct 10 13:41:08 2013 -0700
@@ -115,7 +115,7 @@
*/
private String[] excludes = {"java.*", "javax.*", "sun.*",
"com.sun.*", "com.oracle.*",
- "oracle.*"};
+ "oracle.*", "jdk.internal.*"};
MethodEntryExitEvents (String args[]) {
super(args);
--- a/jdk/test/com/sun/jdi/PopAndStepTest.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/com/sun/jdi/PopAndStepTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -130,8 +130,12 @@
StepRequest srInto = erm.createStepRequest(mainThread, StepRequest.STEP_LINE,
StepRequest.STEP_INTO);
srInto.addClassExclusionFilter("java.*");
+ srInto.addClassExclusionFilter("javax.*");
srInto.addClassExclusionFilter("sun.*");
srInto.addClassExclusionFilter("com.sun.*");
+ srInto.addClassExclusionFilter("com.oracle.*");
+ srInto.addClassExclusionFilter("oracle.*");
+ srInto.addClassExclusionFilter("jdk.internal.*");
srInto.addCountFilter(1);
srInto.enable(); // This fails
mainThread.popFrames(frameFor("A"));
--- a/jdk/test/com/sun/jdi/PrivateTransportTest.sh Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/com/sun/jdi/PrivateTransportTest.sh Thu Oct 10 13:41:08 2013 -0700
@@ -1,7 +1,7 @@
#!/bin/ksh -p
#
-# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -102,28 +102,7 @@
is_windows=false
is_cygwin=false
case `uname -s` in
- SunOS)
- libarch=`uname -p`
- d64=`echo "${DEBUGGEEFLAGS}" | fgrep -- -d64`
- case `uname -p` in
- sparc)
- if [ "${d64}" != "" ] ; then
- libarch=sparcv9
- fi
- ;;
- i386)
- if [ "${d64}" != "" ] ; then
- libarch=amd64
- fi
- ;;
- *)
- echo "FAILURE: Unknown uname -p: " `uname -p`
- exit 1
- ;;
- esac
- libloc=${jreloc}/lib/${libarch}
- ;;
- Linux)
+ SunOS|Linux)
xx=`find ${jreloc}/lib -name libdt_socket.so`
libloc=`dirname ${xx}`
;;
--- a/jdk/test/com/sun/jdi/RepStep.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/com/sun/jdi/RepStep.java Thu Oct 10 13:41:08 2013 -0700
@@ -75,8 +75,12 @@
DEPTH);
sr.addClassExclusionFilter("java.*");
+ sr.addClassExclusionFilter("javax.*");
sr.addClassExclusionFilter("sun.*");
sr.addClassExclusionFilter("com.sun.*");
+ sr.addClassExclusionFilter("com.oracle.*");
+ sr.addClassExclusionFilter("oracle.*");
+ sr.addClassExclusionFilter("jdk.internal.*");
sr.enable();
}
--- a/jdk/test/com/sun/jdi/RunToExit.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/com/sun/jdi/RunToExit.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 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
@@ -113,16 +113,7 @@
*/
private static Process launch(String address, String class_name) throws IOException {
String exe = System.getProperty("java.home")
- + File.separator + "bin" + File.separator;
- String arch = System.getProperty("os.arch");
- String osname = System.getProperty("os.name");
- if (osname.equals("SunOS") && arch.equals("sparcv9")) {
- exe += "sparcv9/java";
- } else if (osname.equals("SunOS") && arch.equals("amd64")) {
- exe += "amd64/java";
- } else {
- exe += "java";
- }
+ + File.separator + "bin" + File.separator + "java";
String cmd = exe + " " + VMConnection.getDebuggeeVMOptions() +
" -agentlib:jdwp=transport=dt_socket" +
",server=y" + ",suspend=y" + ",address=" + address +
--- a/jdk/test/com/sun/jdi/Solaris32AndSolaris64Test.sh Thu Oct 10 08:51:55 2013 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,226 +0,0 @@
-#!/bin/ksh -p
-
-#
-# Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# 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 Solaris32AndSolaris64Test.sh
-# @bug 4478312 4780570 4913748 6730273
-# @summary Test debugging with mixed 32/64bit VMs.
-# @author Tim Bell
-# Based on test/java/awt/TEMPLATE/AutomaticShellTest.sh
-#
-# @run build TestScaffold VMConnection TargetListener TargetAdapter
-# @run compile -g FetchLocals.java
-# @run compile -g DataModelTest.java
-# @run shell/timeout=240 Solaris32AndSolaris64Test.sh DataModelTest
-# @run shell/timeout=240 Solaris32AndSolaris64Test.sh FetchLocals
-
-# Beginning of subroutines:
-status=1
-
-#Call this from anywhere to fail the test with an error message
-# usage: fail "reason why the test failed"
-fail()
- { echo "The test failed :-("
- echo "$*" 1>&2
- echo "exit status was $status"
- exit $status
- } #end of fail()
-
-#Call this from anywhere to pass the test with a message
-# usage: pass "reason why the test passed if applicable"
-pass()
- { echo "The test passed!!!"
- echo "$*" 1>&2
- exit 0
- } #end of pass()
-
-# end of subroutines
-
-if [ $# = 0 ] ; then
- echo "Error: no testname specified on cmd line"
- exit 1
-fi
-testName=$1
-shift
-
-#Set appropriate jdk
-
-if [ -z "${TESTJAVA}" ] ; then
- # TESTJAVA is not set, so the test is running stand-alone.
- # TESTJAVA holds the path to the root directory of the build of the JDK
- # to be tested. That is, any java files run explicitly in this shell
- # should use TESTJAVA in the path to the java interpreter.
- # So, we'll set this to the JDK spec'd on the command line. If none
- # is given on the command line, tell the user that and use a default.
- # THIS IS THE JDK BEING TESTED.
- if [ -n "$1" ] ; then
- TESTJAVA=$1
- else
- echo "no JDK specified on command line so using JAVA_HOME=$JAVA_HOME"
- TESTJAVA=$JAVA_HOME
- fi
- TESTSRC=.
- TESTCLASSES=.
- STANDALONE=1;
-fi
-echo "JDK under test is: $TESTJAVA"
-
-
-# The beginning of the script proper
-
-# Checking for proper OS and processor type.
-#
-# This test is only interested in SunOS SPARC sparcv9 and SunOS AMD64
-# (supporting both 32 and 64 bit Solaris binaries).
-#
-# All other platforms will instantly complete with passing
-# status.
-#
-OS=`uname -s`
-case "$OS" in
- SunOS )
- PATHSEP=":"
- PTYPE=`uname -p`
- if [ -x /usr/bin/isainfo ]; then
- # Instruction set being used by the OS
- ISET=`isainfo -k`
- else
- #SunOS 5.6 didn't have "isainfo"
- pass "This test always passes on $OS/$PTYPE (32-bit ${ISET})"
- fi
- ;;
-
- Linux | Darwin )
- pass "This test always passes on $OS"
- ;;
-
- Windows* | CYGWIN*)
- pass "This test always passes on $OS"
- ;;
-
- # catch all other OSs
- * )
- echo "Unrecognized system! $OS"
- fail "Unrecognized system! $OS"
- ;;
-esac
-
-# Is the OS running in sparcv9 or amd64 mode?
-case "${ISET}" in
- sparc )
- pass "This test always passes on $OS/$PTYPE (32-bit ${ISET})"
- ;;
- i386 )
- pass "This test always passes on $OS/$PTYPE (32-bit ${ISET})"
- ;;
- amd64 )
- echo "OS is running in ${ISET} mode"
- ;;
- sparcv9 )
- echo "OS is running in ${ISET} mode"
- ;;
- # catch all others
- * )
- echo "Unrecognized instruction set! $OS/$PTYPE/${ISET}"
- fail "Unrecognized instruction set! $OS/$PTYPE/${ISET}"
- ;;
-esac
-
-# SunOS 32 and 64 bit binaries must be available
-# to test in the remainder of the script below.
-$TESTJAVA/bin/java -d64 -version > /dev/null 2<&1
-if [ $? = 1 ]; then
- # The 64 bit version is not installed. Make the test pass.
- pass "This test always passes on $OS/$PTYPE if 64 bit jdk is not installed"
-fi
-
-# Want this test to run standalone as well as in the harness, so do the
-# following to copy the test's directory into the harness's scratch directory
-# and set all appropriate variables:
-
-#Deal with .class files:
-if [ -n "${STANDALONE}" ] ; then
- #if running standalone, compile the support files
- ${TESTJAVA}/bin/javac -d ${TESTCLASSES} \
- -classpath "$TESTJAVA/lib/tools.jar${PATHSEP}${TESTSRC}" \
- TestScaffold.java VMConnection.java TargetListener.java TargetAdapter.java
- ${TESTJAVA}/bin/javac -d ${TESTCLASSES} \
- -classpath "$TESTJAVA/lib/tools.jar${PATHSEP}${TESTSRC}" -g \
- FetchLocals.java DataModelTest.java
-fi
-
-# Get DEBUGGEE flags
-DEBUGGEEFLAGS=
-filename=$TESTCLASSES/@debuggeeVMOptions
-if [ ! -r ${filename} ] ; then
- filename=$TESTCLASSES/../@debuggeeVMOptions
-fi
-# Remove -d32, -d64 if present, and remove -XX:[+-]UseCompressedOops
-# if present since it is illegal in 32 bit mode.
-if [ -r ${filename} ] ; then
- DEBUGGEEFLAGS=`cat ${filename} | sed \
- -e 's/-d32//g' \
- -e 's/-d64//g' \
- -e 's/-XX:.UseCompressedOops//g' \
- `
-fi
-
-#
-CLASSPATH="$TESTJAVA/lib/tools.jar${PATHSEP}${TESTCLASSES}"
-export CLASSPATH
-CP="-classpath \"${CLASSPATH}\""
-
-for DEBUGGERMODEL in \
- 32 \
- 64 \
-; do
-
- for TARGETMODEL in \
- 32 \
- 64 \
- ; do
- DEBUGGERFLAGS="-d${DEBUGGERMODEL} -showversion -DEXPECTED=${TARGETMODEL}"
- CONNECTSTRING="-connect 'com.sun.jdi.CommandLineLaunch:options=-d${TARGETMODEL} $DEBUGGEEFLAGS -showversion'"
-
- for TARGETCLASS in $testName ; do
- echo "--------------------------------------------"
- echo "debugger=${DEBUGGERMODEL} debugee=${TARGETMODEL} class=${TARGETCLASS}"
- echo "--------------------------------------------"
- echo ${TESTJAVA}/bin/java -DHANGINGJAVA_DEB ${DEBUGGERFLAGS} ${CP} ${TARGETCLASS} ${CONNECTSTRING}
- eval ${TESTJAVA}/bin/java -DHANGINGJAVA_DEB ${DEBUGGERFLAGS} ${CP} ${TARGETCLASS} ${CONNECTSTRING}
- status=$?
- if [ $status -ne "0" ];
- then fail "$DEBUGGERMODEL to $TARGETMODEL test failed for class=$TARGETCLASS!"
- fi
- done
- done
-done
-#
-# pass or fail the test based on status of the command
-if [ $status -eq "0" ];
- then pass ""
-
- else fail "unspecified test failure"
-fi
--- a/jdk/test/com/sun/jdi/TestScaffold.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/com/sun/jdi/TestScaffold.java Thu Oct 10 13:41:08 2013 -0700
@@ -746,8 +746,12 @@
requestManager.createStepRequest(thread, gran, depth);
sr.addClassExclusionFilter("java.*");
+ sr.addClassExclusionFilter("javax.*");
sr.addClassExclusionFilter("sun.*");
sr.addClassExclusionFilter("com.sun.*");
+ sr.addClassExclusionFilter("com.oracle.*");
+ sr.addClassExclusionFilter("oracle.*");
+ sr.addClassExclusionFilter("jdk.internal.*");
sr.addCountFilter(1);
sr.enable();
StepEvent retEvent = (StepEvent)waitForRequestedEvent(sr);
@@ -829,7 +833,8 @@
Method method = findMethod(rt, methodName, methodSignature);
if (method == null) {
- throw new IllegalArgumentException("Bad method name/signature");
+ throw new IllegalArgumentException("Bad method name/signature: "
+ + clsName + "." + methodName + ":" + methodSignature);
}
return resumeTo(method.location());
--- a/jdk/test/com/sun/jdi/connect/spi/SimpleLaunchingConnector.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/com/sun/jdi/connect/spi/SimpleLaunchingConnector.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -143,16 +143,7 @@
TransportService.ListenKey key = ts.startListening();
String exe = System.getProperty("java.home") + File.separator + "bin" +
- File.separator;
- String arch = System.getProperty("os.arch");
- String osname = System.getProperty("os.name");
- if (osname.equals("SunOS") && arch.equals("sparcv9")) {
- exe += "sparcv9/java";
- } else if (osname.equals("SunOS") && arch.equals("amd64")) {
- exe += "amd64/java";
- } else {
- exe += "java";
- }
+ File.separator + "java";
String cmd = exe + " -Xdebug -Xrunjdwp:transport=dt_socket,timeout=15000,address=" +
key.address() +
" -classpath " + System.getProperty("test.classes") +
--- a/jdk/test/demo/jvmti/DemoRun.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/demo/jvmti/DemoRun.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 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
@@ -125,28 +125,22 @@
String libprefix = os_name.contains("Windows")?"":"lib";
String libsuffix = os_name.contains("Windows")?".dll":
os_name.contains("OS X")?".dylib":".so";
- boolean d64 = ( os_name.contains("Solaris") ||
- os_name.contains("SunOS") )
- && ( os_arch.equals("sparcv9") ||
- os_arch.equals("amd64"));
boolean hprof = demo_name.equals("hprof");
- String isa_dir = d64?(File.separator+os_arch):"";
String java = jre_home
- + File.separator + "bin" + isa_dir
+ + File.separator + "bin"
+ File.separator + "java";
/* Array of strings to be passed in for exec:
* 1. java
* 2. -Dtest.classes=.
- * 3. -d64 (optional)
- * 4. -Xcheck:jni (Just because it finds bugs)
- * 5. -Xverify:all (Make sure verification is on full blast)
- * 6. -agent
+ * 3. -Xcheck:jni (Just because it finds bugs)
+ * 4. -Xverify:all (Make sure verification is on full blast)
+ * 5. -agent
* vm_options
- * 7+i. classname
+ * 6+i. classname
*/
int nvm_options = 0;
if ( vm_options != null ) nvm_options = vm_options.length;
- String cmd[] = new String[1 + (d64?1:0) + 7 + nvm_options];
+ String cmd[] = new String[1 + 7 + nvm_options];
String cmdLine;
int exitStatus;
int i,j;
@@ -160,10 +154,6 @@
cmdLine += (cmd[i++] = cdir);
cmdLine += " ";
cmdLine += (cmd[i++] = "-Dtest.classes=" + cdir);
- if ( d64 ) {
- cmdLine += " ";
- cmdLine += (cmd[i++] = "-d64");
- }
cmdLine += " ";
cmdLine += (cmd[i++] = "-Xcheck:jni");
cmdLine += " ";
@@ -178,7 +168,7 @@
+ File.separator + "demo"
+ File.separator + "jvmti"
+ File.separator + demo_name
- + File.separator + "lib" + isa_dir
+ + File.separator + "lib"
+ File.separator + libprefix + demo_name + libsuffix;
cmdLine += " ";
cmdLine += (cmd[i++] = "-agentpath:" + libname
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Cursor/CursorOverlappedPanelsTest/CursorOverlappedPanelsTest.html Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,32 @@
+<!--
+ Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ This code is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License version 2 only, as
+ published by the Free Software Foundation.
+
+ This code is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ version 2 for more details (a copy is included in the LICENSE file that
+ accompanied this code).
+
+ You should have received a copy of the GNU General Public License version
+ 2 along with this work; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ or visit www.oracle.com if you need additional information or have any
+ questions.
+-->
+
+<html>
+ <head>
+ <title>CursorOverlappedPanelsTest, bug ID 8007155</title>
+ </head>
+ <body>
+ <applet CODE="CursorOverlappedPanelsTest.class" WIDTH=300 HEIGHT=100></applet>
+ <p> See the dialog box (usually in upper left corner) for instructions</p>
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Cursor/CursorOverlappedPanelsTest/CursorOverlappedPanelsTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,226 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.*;
+//import java.applet.Applet;
+import javax.swing.BorderFactory;
+import javax.swing.JApplet;
+import javax.swing.JFrame;
+import javax.swing.JLayeredPane;
+import javax.swing.JPanel;
+
+/**
+ * @test
+ * @bug 8007155
+ * @summary [macosx] Disabled panel takes mouse input in JLayeredPane
+ * @author Alexander Scherbatiy: area=java.awt.Cursor
+ * @run applet/manual=yesno CursorOverlappedPanelsTest.html
+ */
+public class CursorOverlappedPanelsTest extends JApplet {
+ //Declare things used in the test, like buttons and labels here
+
+ public void init() {
+ //Create instructions for the user here, as well as set up
+ // the environment -- set the layout manager, add buttons,
+ // etc.
+ this.setLayout(new BorderLayout());
+
+ String[] instructions = {
+ "Verify that the Crosshair cursor from enabled panel"
+ + " is displayed on the panels intersection",
+ "1) Move the mosue cursor on the Enabled and Disabled panels"
+ + " intersection",
+ "2) Check that the Crosshair cursor is displayed ",
+ "If so, press PASS, else press FAIL."
+ };
+ Sysout.createDialogWithInstructions(instructions);
+
+ }//End init()
+
+ public void start() {
+ //Get things going. Request focus, set size, et cetera
+ setSize(200, 200);
+ setVisible(true);
+ validate();
+ try {
+ EventQueue.invokeAndWait(new Runnable() {
+ public void run() {
+ createAndShowGUI();
+ }
+ });
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }// start()
+
+ //The rest of this class is the actions which perform the test...
+ //Use Sysout.println to communicate with the user NOT System.out!!
+ //Sysout.println ("Something Happened!");
+ private static JPanel createPanel(Point location, boolean enabled) {
+ final JPanel panel = new JPanel();
+ panel.setOpaque(false);
+ panel.setEnabled(enabled);
+ panel.setSize(new Dimension(200, 200));
+ panel.setLocation(location);
+ panel.setBorder(BorderFactory.createTitledBorder(
+ enabled ? "Enabled" : "Disabled"));
+ panel.setCursor(Cursor.getPredefinedCursor(
+ enabled ? Cursor.CROSSHAIR_CURSOR : Cursor.DEFAULT_CURSOR));
+ System.out.println("cursor: " + Cursor.getPredefinedCursor(enabled ? Cursor.CROSSHAIR_CURSOR : Cursor.DEFAULT_CURSOR));
+ return panel;
+ }
+
+ private static void createAndShowGUI() {
+ final JFrame frame = new JFrame("Test");
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+
+ JLayeredPane layeredPane = new JLayeredPane();
+ layeredPane.setPreferredSize(new Dimension(400, 400));
+ JPanel enabledPanel = createPanel(new Point(10, 10), true);
+ JPanel disabledPanel = createPanel(new Point(100, 100), false);
+ layeredPane.add(disabledPanel, JLayeredPane.PALETTE_LAYER);
+ layeredPane.add(enabledPanel, JLayeredPane.DEFAULT_LAYER);
+
+ frame.getContentPane().add(layeredPane);
+ frame.pack();
+ frame.setVisible(true);
+ }
+}// class BlockedWindowTest
+
+/* Place other classes related to the test after this line */
+/**
+ * **************************************************
+ * Standard Test Machinery DO NOT modify anything below -- it's a standard chunk
+ * of code whose purpose is to make user interaction uniform, and thereby make
+ * it simpler to read and understand someone else's test.
+ * **************************************************
+ */
+/**
+ * This is part of the standard test machinery. It creates a dialog (with the
+ * instructions), and is the interface for sending text messages to the user. To
+ * print the instructions, send an array of strings to Sysout.createDialog
+ * WithInstructions method. Put one line of instructions per array entry. To
+ * display a message for the tester to see, simply call Sysout.println with the
+ * string to be displayed. This mimics System.out.println but works within the
+ * test harness as well as standalone.
+ */
+class Sysout {
+
+ private static TestDialog dialog;
+
+ public static void createDialogWithInstructions(String[] instructions) {
+ dialog = new TestDialog(new Frame(), "Instructions");
+ dialog.printInstructions(instructions);
+ dialog.setVisible(true);
+ println("Any messages for the tester will display here.");
+ }
+
+ public static void createDialog() {
+ dialog = new TestDialog(new Frame(), "Instructions");
+ String[] defInstr = {"Instructions will appear here. ", ""};
+ dialog.printInstructions(defInstr);
+ dialog.setVisible(true);
+ println("Any messages for the tester will display here.");
+ }
+
+ public static void printInstructions(String[] instructions) {
+ dialog.printInstructions(instructions);
+ }
+
+ public static void println(String messageIn) {
+ dialog.displayMessage(messageIn);
+ }
+}// Sysout class
+
+/**
+ * This is part of the standard test machinery. It provides a place for the test
+ * instructions to be displayed, and a place for interactive messages to the
+ * user to be displayed. To have the test instructions displayed, see Sysout. To
+ * have a message to the user be displayed, see Sysout. Do not call anything in
+ * this dialog directly.
+ */
+class TestDialog extends Dialog {
+
+ TextArea instructionsText;
+ TextArea messageText;
+ int maxStringLength = 80;
+
+ //DO NOT call this directly, go through Sysout
+ public TestDialog(Frame frame, String name) {
+ super(frame, name);
+ int scrollBoth = TextArea.SCROLLBARS_BOTH;
+ instructionsText = new TextArea("", 15, maxStringLength, scrollBoth);
+ add("North", instructionsText);
+
+ messageText = new TextArea("", 5, maxStringLength, scrollBoth);
+ add("Center", messageText);
+
+ pack();
+
+ setVisible(true);
+ }// TestDialog()
+
+ //DO NOT call this directly, go through Sysout
+ public void printInstructions(String[] instructions) {
+ //Clear out any current instructions
+ instructionsText.setText("");
+
+ //Go down array of instruction strings
+
+ String printStr, remainingStr;
+ for (int i = 0; i < instructions.length; i++) {
+ //chop up each into pieces maxSringLength long
+ remainingStr = instructions[ i];
+ while (remainingStr.length() > 0) {
+ //if longer than max then chop off first max chars to print
+ if (remainingStr.length() >= maxStringLength) {
+ //Try to chop on a word boundary
+ int posOfSpace = remainingStr.
+ lastIndexOf(' ', maxStringLength - 1);
+
+ if (posOfSpace <= 0) {
+ posOfSpace = maxStringLength - 1;
+ }
+
+ printStr = remainingStr.substring(0, posOfSpace + 1);
+ remainingStr = remainingStr.substring(posOfSpace + 1);
+ } //else just print
+ else {
+ printStr = remainingStr;
+ remainingStr = "";
+ }
+
+ instructionsText.append(printStr + "\n");
+
+ }// while
+
+ }// for
+
+ }//printInstructions()
+
+ //DO NOT call this directly, go through Sysout
+ public void displayMessage(String messageIn) {
+ messageText.append(messageIn + "\n");
+ System.out.println(messageIn);
+ }
+}// TestDialog class
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Focus/KeyEventForBadFocusOwnerTest/KeyEventForBadFocusOwnerTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,144 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+/*
+ @test
+ @bug 4476629
+ @library ../../../../javax/swing/regtesthelpers
+ @build Util
+ @summary KeyEvents dispatched to old focus owner that is no longer showing
+ @author son@sparc.spb.su: area=awt.focus
+ @run main KeyEventForBadFocusOwnerTest
+*/
+
+/**
+ * KeyEventForBadFocusOwnerTest.java
+ *
+ * summary: KeyEvents dispatched to old focus owner that is no longer showing
+ */
+
+
+import java.awt.Robot;
+import java.awt.Toolkit;
+
+import java.awt.event.*;
+
+import javax.swing.*;
+import javax.swing.event.*;
+import sun.awt.SunToolkit;
+
+public class KeyEventForBadFocusOwnerTest {
+ final static String ITEM_ONE_TEXT = "one";
+ final static String ITEM_TWO_TEXT = "two";
+
+ volatile static boolean itemOneSelected = false;
+ volatile static boolean itemTwoSelected = false;
+ volatile static boolean unexpectedItemSelected = false;
+
+ static Robot robot;
+ static SunToolkit toolkit;
+
+ public static void main(String[] args) throws Exception {
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ JFrame frame = new JFrame("TEST");
+ JMenuBar mb = new JMenuBar();
+ JMenu one = new JMenu(ITEM_ONE_TEXT);
+ JMenu two = new JMenu(ITEM_TWO_TEXT);
+
+ mb.add(one);
+ mb.add(two);
+
+ ActionListener al = new ActionListener() {
+ public void actionPerformed(ActionEvent ae) {
+ String itemText = ((JMenuItem)ae.getSource()).getText();
+ System.out.println("--> " + itemText);
+ unexpectedItemSelected = true;
+ }
+ };
+ one.setMnemonic(KeyEvent.VK_O);
+ JMenuItem item = new JMenuItem("one 1");
+ item.setMnemonic(KeyEvent.VK_O);
+ item.addActionListener(al);
+ one.add(item);
+ one.add("two");
+ one.add("three");
+
+ two.setMnemonic(KeyEvent.VK_T);
+ item = new JMenuItem("two 2");
+ item.setMnemonic(KeyEvent.VK_T);
+ item.addActionListener(al);
+ two.add(item);
+ two.add("three");
+ two.add("four");
+
+ PopupMenuListener popupMenuListener = new PopupMenuListener() {
+ public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
+ System.out.print(e);
+ System.out.print(e.getSource());
+ String itemText = ((JPopupMenu)e.getSource()).getName();
+ System.out.println("Menu " + itemText + "is opened.");
+ switch(itemText) {
+ case ITEM_ONE_TEXT:
+ itemOneSelected = true;
+ break;
+ case ITEM_TWO_TEXT:
+ itemTwoSelected = true;
+ break;
+ }
+ }
+
+ public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {}
+ public void popupMenuCanceled(PopupMenuEvent e) {}
+ };
+ one.getPopupMenu().setName(ITEM_ONE_TEXT);
+ two.getPopupMenu().setName(ITEM_TWO_TEXT);
+ one.getPopupMenu().addPopupMenuListener(popupMenuListener);
+ two.getPopupMenu().addPopupMenuListener(popupMenuListener);
+ frame.setJMenuBar(mb);
+ frame.setSize(100,100);
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ frame.pack();
+ frame.setVisible(true);
+ }
+ });
+
+ toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+ toolkit.realSync();
+
+ robot = new Robot();
+ robot.setAutoDelay(100);
+
+ Util.hitMnemonics(robot, KeyEvent.VK_O);
+ Util.hitMnemonics(robot, KeyEvent.VK_T);
+
+ toolkit.realSync();
+ Thread.sleep(1000); // workaround for MacOS
+
+ if (unexpectedItemSelected) {
+ throw new Exception("Test failed. KeyEvent dispatched to old focus owner. ");
+ }
+ if (!itemOneSelected || !itemTwoSelected) {
+ throw new Exception("Not all expected events were received");
+ }
+ }
+}
--- a/jdk/test/java/awt/FullScreen/TranslucentWindow/TranslucentWindow.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/java/awt/FullScreen/TranslucentWindow/TranslucentWindow.java Thu Oct 10 13:41:08 2013 -0700
@@ -42,6 +42,7 @@
GraphicsDevice gd = ge.getDefaultScreenDevice();
Frame f = new Frame("Test frame");
+ f.setUndecorated(true);
f.setBounds(100, 100, 320, 240);
// First, check it can be made fullscreen window without any effects applied
--- a/jdk/test/java/awt/MenuBar/MenuBarSetFont/MenuBarSetFont.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/java/awt/MenuBar/MenuBarSetFont/MenuBarSetFont.java Thu Oct 10 13:41:08 2013 -0700
@@ -65,6 +65,12 @@
}
public static void main(final String[] args) throws Exception {
+
+ if (sun.awt.OSInfo.getOSType() == sun.awt.OSInfo.OSType.MACOSX) {
+ System.err.println("This test is not for OS X. Menu.setFont() is not supported on OS X.");
+ return;
+ }
+
//Components initialization.
frame.setMenuBar(mb);
mb.setFont(new Font("Helvetica", Font.ITALIC, 5));
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Modal/ModalDialogOrderingTest/ModalDialogOrderingTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,114 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.awt.Color;
+import java.awt.Dialog;
+import java.awt.Frame;
+import java.awt.Rectangle;
+import java.awt.Robot;
+import java.awt.Toolkit;
+import java.awt.event.InputEvent;
+import sun.awt.SunToolkit;
+/*
+ * @test
+ * @bug 8008728
+ * @summary [macosx] Swing. JDialog. Modal dialog goes to background
+ * @author Alexandr Scherbatiy
+ * @run main ModalDialogOrderingTest
+ */
+
+public class ModalDialogOrderingTest {
+
+ private static final Color DIALOG_COLOR = Color.GREEN;
+ private static final Color FRAME_COLOR = Color.BLUE;
+
+ public static void main(String[] args) {
+
+ final Frame frame = new Frame("Test");
+ frame.setSize(100, 100);
+ frame.setBackground(FRAME_COLOR);
+ frame.setVisible(true);
+
+ final Dialog modalDialog = new Dialog((Frame) null, true);
+ modalDialog.setTitle("Modal Dialog");
+ modalDialog.setSize(50, 50);
+ modalDialog.setBackground(DIALOG_COLOR);
+ modalDialog.setModal(true);
+
+ new Thread(new Runnable() {
+
+ @Override
+ public void run() {
+ runTest(modalDialog, frame);
+ }
+ }).start();
+
+ modalDialog.setVisible(true);
+ }
+
+ private static void runTest(Dialog dialog, Frame frame) {
+ try {
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+ Robot robot = new Robot();
+ robot.setAutoDelay(15);
+ robot.mouseMove(300, 300);
+
+ while (!dialog.isVisible()) {
+ toolkit.realSync();
+ }
+
+ Rectangle dialogBounds = dialog.getBounds();
+ Rectangle frameBounds = frame.getBounds();
+
+ double x0 = dialogBounds.getX();
+ double y0 = dialogBounds.getY();
+ double x1 = dialogBounds.getX() + dialogBounds.getWidth();
+ double y1 = dialogBounds.getY() + dialogBounds.getHeight();
+ double x2 = frameBounds.getX() + frameBounds.getWidth();
+ double y2 = frameBounds.getY() + frameBounds.getHeight();
+
+ int clickX = (int) ((x2 + x1) / 2);
+ int clickY = (int) ((y2 + y1) / 2);
+
+ robot.mouseMove(clickX, clickY);
+ robot.mousePress(InputEvent.BUTTON1_MASK);
+ robot.mouseRelease(InputEvent.BUTTON1_MASK);
+ toolkit.realSync();
+
+ int colorX = (int) ((x0 + x1) / 2);
+ int colorY = (int) ((y0 + y1) / 2);
+
+ Color color = robot.getPixelColor(colorX, colorY);
+
+ dialog.setVisible(false);
+ frame.setVisible(false);
+
+ if (!DIALOG_COLOR.equals(color)) {
+ throw new RuntimeException("The frame is on top"
+ + " of the modal dialog!");
+ }
+ } catch (Exception ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Mouse/GetMousePositionTest/GetMousePositionWithOverlay.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import test.java.awt.regtesthelpers.Util;
+
+import javax.swing.*;
+import java.awt.*;
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * @test
+ * @bug 8012026
+ * @summary Component.getMousePosition() does not work in an applet on MacOS
+ * @author Petr Pchelko
+ * @library ../../regtesthelpers
+ * @build Util
+ * @compile GetMousePositionWithOverlay.java
+ * @run main/othervm GetMousePositionWithOverlay
+ */
+
+public class GetMousePositionWithOverlay {
+
+ static Frame backFrame;
+ static Frame frontFrame;
+
+ public static void main(String[] args) throws Throwable {
+ try {
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ constructTestUI();
+ }
+ });
+ Util.waitForIdle(null);
+
+ Robot r = new Robot();
+ Util.pointOnComp(frontFrame, r);
+ Util.waitForIdle(null);
+
+ Point pos = getMousePosition(backFrame);
+ if (pos != null) {
+ throw new RuntimeException("Test failed. Mouse position should be null but was" + pos);
+ }
+
+ pos = getMousePosition(frontFrame);
+ if (pos == null) {
+ throw new RuntimeException("Test failed. Mouse position should not be null");
+ }
+
+ r.mouseMove(189, 189);
+ Util.waitForIdle(null);
+
+ pos = getMousePosition(backFrame);
+ if (pos == null) {
+ throw new RuntimeException("Test failed. Mouse position should not be null");
+ }
+ } finally {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ backFrame.dispose();
+ frontFrame.dispose();
+ }
+ });
+ }
+ }
+
+ private static Point getMousePosition(final Component component) throws Exception {
+ final AtomicReference<Point> pos = new AtomicReference<Point>();
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ pos.set(component.getMousePosition());
+ }
+ });
+ return pos.get();
+ }
+
+ private static void constructTestUI() {
+ backFrame = new Frame();
+ backFrame.setBounds(100, 100, 100, 100);
+ backFrame.setVisible(true);
+
+ frontFrame = new Frame();
+ frontFrame.setBounds(120, 120, 60, 60);
+ frontFrame.setVisible(true);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Mouse/GetMousePositionTest/GetMousePositionWithPopup.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import test.java.awt.regtesthelpers.Util;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseMotionAdapter;
+
+/**
+ * @test
+ * @bug 8012026
+ * @summary Component.getMousePosition() does not work in an applet on MacOS
+ * @author Petr Pchelko
+ * @library ../../regtesthelpers
+ * @build Util
+ * @compile GetMousePositionWithPopup.java
+ * @run main/othervm GetMousePositionWithPopup
+ */
+
+public class GetMousePositionWithPopup {
+
+ private static Frame frame1;
+ private static Frame frame2;
+
+ public static void main(String[] args) throws Exception {
+ try {
+ Robot r = Util.createRobot();
+ r.mouseMove(0, 0);
+ Util.waitForIdle(null);
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ constructTestUI();
+ }
+ });
+
+ Util.waitForIdle(null);
+ r.mouseMove(149, 149);
+ Util.waitForIdle(null);
+ r.mouseMove(150, 150);
+ Util.waitForIdle(null);
+
+ } finally {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ frame1.dispose();
+ frame2.dispose();
+ }
+ });
+ }
+ }
+
+ private static void constructTestUI() {
+ frame1 = new Frame();
+ frame1.setBounds(100, 100, 100, 100);
+ frame1.addMouseMotionListener(new MouseMotionAdapter() {
+
+ private boolean shown = false;
+
+ @Override
+ public void mouseMoved(MouseEvent e) {
+ if (shown) {
+ return;
+ }
+
+ shown = true;
+
+ frame2 = new Frame();
+ frame2.setBounds(120, 120, 120, 120);
+ frame2.setVisible(true);
+
+ Point positionInFrame2 = frame2.getMousePosition();
+ if (positionInFrame2.x != 30 || positionInFrame2.y != 30) {
+ throw new RuntimeException("Wrong position reported. Should be [30, 30] but was [" +
+ positionInFrame2.x + ", " + positionInFrame2.y + "]");
+ }
+
+ Point positionInFrame1 = frame1.getMousePosition();
+ if (positionInFrame1 != null) {
+ throw new RuntimeException("Wrong position reported. Should be null");
+ }
+
+ }
+ });
+ frame1.setVisible(true);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Toolkit/DynamicLayout/bug7172833.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,314 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+import java.awt.*;
+import java.awt.datatransfer.Clipboard;
+import java.awt.dnd.DragGestureEvent;
+import java.awt.dnd.InvalidDnDOperationException;
+import java.awt.dnd.peer.DragSourceContextPeer;
+import java.awt.font.TextAttribute;
+import java.awt.im.InputMethodHighlight;
+import java.awt.image.ColorModel;
+import java.awt.image.ImageObserver;
+import java.awt.image.ImageProducer;
+import java.awt.peer.*;
+import java.net.URL;
+import java.util.Map;
+import java.util.Properties;
+
+
+/**
+ * @test
+ * @bug 7172833
+ * @summary java.awt.Toolkit methods is/setDynamicLayout() should be consistent.
+ * @author Sergey Bylokhov
+ */
+public final class bug7172833 {
+
+ public static void main(final String[] args) throws Exception {
+ final StubbedToolkit t = new StubbedToolkit();
+
+ t.setDynamicLayout(true);
+ if(!t.isDynamicLayoutSet()){
+ throw new RuntimeException("'true' expected but 'false' returned");
+ }
+
+ t.setDynamicLayout(false);
+ if(t.isDynamicLayoutSet()){
+ throw new RuntimeException("'false' expected but 'true' returned");
+ }
+ }
+
+ static final class StubbedToolkit extends Toolkit {
+
+ @Override
+ protected boolean isDynamicLayoutSet() throws HeadlessException {
+ return super.isDynamicLayoutSet();
+ }
+
+ @Override
+ protected DesktopPeer createDesktopPeer(final Desktop target)
+ throws HeadlessException {
+ return null;
+ }
+
+ @Override
+ protected ButtonPeer createButton(final Button target)
+ throws HeadlessException {
+ return null;
+ }
+
+ @Override
+ protected TextFieldPeer createTextField(final TextField target)
+ throws HeadlessException {
+ return null;
+ }
+
+ @Override
+ protected LabelPeer createLabel(final Label target) throws HeadlessException {
+ return null;
+ }
+
+ @Override
+ protected ListPeer createList(final List target) throws HeadlessException {
+ return null;
+ }
+
+ @Override
+ protected CheckboxPeer createCheckbox(final Checkbox target)
+ throws HeadlessException {
+ return null;
+ }
+
+ @Override
+ protected ScrollbarPeer createScrollbar(final Scrollbar target)
+ throws HeadlessException {
+ return null;
+ }
+
+ @Override
+ protected ScrollPanePeer createScrollPane(final ScrollPane target)
+ throws HeadlessException {
+ return null;
+ }
+
+ @Override
+ protected TextAreaPeer createTextArea(final TextArea target)
+ throws HeadlessException {
+ return null;
+ }
+
+ @Override
+ protected ChoicePeer createChoice(final Choice target)
+ throws HeadlessException {
+ return null;
+ }
+
+ @Override
+ protected FramePeer createFrame(final Frame target) throws HeadlessException {
+ return null;
+ }
+
+ @Override
+ protected CanvasPeer createCanvas(final Canvas target) {
+ return null;
+ }
+
+ @Override
+ protected PanelPeer createPanel(final Panel target) {
+ return null;
+ }
+
+ @Override
+ protected WindowPeer createWindow(final Window target)
+ throws HeadlessException {
+ return null;
+ }
+
+ @Override
+ protected DialogPeer createDialog(final Dialog target)
+ throws HeadlessException {
+ return null;
+ }
+
+ @Override
+ protected MenuBarPeer createMenuBar(final MenuBar target)
+ throws HeadlessException {
+ return null;
+ }
+
+ @Override
+ protected MenuPeer createMenu(final Menu target) throws HeadlessException {
+ return null;
+ }
+
+ @Override
+ protected PopupMenuPeer createPopupMenu(final PopupMenu target)
+ throws HeadlessException {
+ return null;
+ }
+
+ @Override
+ protected MenuItemPeer createMenuItem(final MenuItem target)
+ throws HeadlessException {
+ return null;
+ }
+
+ @Override
+ protected FileDialogPeer createFileDialog(final FileDialog target)
+ throws HeadlessException {
+ return null;
+ }
+
+ @Override
+ protected CheckboxMenuItemPeer createCheckboxMenuItem(
+ final CheckboxMenuItem target) throws HeadlessException {
+ return null;
+ }
+
+ @Override
+ protected FontPeer getFontPeer(final String name, final int style) {
+ return null;
+ }
+
+ @Override
+ public Dimension getScreenSize() throws HeadlessException {
+ return null;
+ }
+
+ @Override
+ public int getScreenResolution() throws HeadlessException {
+ return 0;
+ }
+
+ @Override
+ public ColorModel getColorModel() throws HeadlessException {
+ return null;
+ }
+
+ @Override
+ public String[] getFontList() {
+ return new String[0];
+ }
+
+ @Override
+ public FontMetrics getFontMetrics(final Font font) {
+ return null;
+ }
+
+ @Override
+ public void sync() {
+
+ }
+
+ @Override
+ public Image getImage(final String filename) {
+ return null;
+ }
+
+ @Override
+ public Image getImage(final URL url) {
+ return null;
+ }
+
+ @Override
+ public Image createImage(final String filename) {
+ return null;
+ }
+
+ @Override
+ public Image createImage(final URL url) {
+ return null;
+ }
+
+ @Override
+ public boolean prepareImage(
+ final Image image, final int width, final int height,
+ final ImageObserver observer) {
+ return false;
+ }
+
+ @Override
+ public int checkImage(final Image image, final int width, final int height,
+ final ImageObserver observer) {
+ return 0;
+ }
+
+ @Override
+ public Image createImage(final ImageProducer producer) {
+ return null;
+ }
+
+ @Override
+ public Image createImage(final byte[] imagedata, final int imageoffset,
+ final int imagelength) {
+ return null;
+ }
+
+ @Override
+ public PrintJob getPrintJob(final Frame frame, final String jobtitle,
+ final Properties props) {
+ return null;
+ }
+
+ @Override
+ public void beep() {
+
+ }
+
+ @Override
+ public Clipboard getSystemClipboard() throws HeadlessException {
+ return null;
+ }
+
+ @Override
+ protected EventQueue getSystemEventQueueImpl() {
+ return null;
+ }
+
+ @Override
+ public DragSourceContextPeer createDragSourceContextPeer(
+ final DragGestureEvent dge) throws InvalidDnDOperationException {
+ return null;
+ }
+
+ @Override
+ public boolean isModalityTypeSupported(
+ final Dialog.ModalityType modalityType) {
+ return false;
+ }
+
+ @Override
+ public boolean isModalExclusionTypeSupported(
+ final Dialog.ModalExclusionType modalExclusionType) {
+ return false;
+ }
+
+ @Override
+ public Map<TextAttribute, ?> mapInputMethodHighlight(
+ final InputMethodHighlight highlight) throws HeadlessException {
+ return null;
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Toolkit/ToolkitPropertyTest/bug7129133.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 7129133
+ * @summary [macosx] Accelerators are displayed as Meta instead of the Command symbol
+ * @author leonid.romanov@oracle.com
+ * @run main bug7129133
+ */
+
+import java.awt.*;
+
+public class bug7129133 {
+ public static void main(String[] args) throws Exception {
+ if (sun.awt.OSInfo.getOSType() != sun.awt.OSInfo.OSType.MACOSX) {
+ System.out.println("This test is for MacOS only. Automatically passed on other platforms.");
+ return;
+ }
+
+ Toolkit.getDefaultToolkit();
+
+ String cmdSymbol = "\u2318";
+ String val = Toolkit.getProperty("AWT.meta", "Meta");
+
+ if (!val.equals(cmdSymbol)) {
+ throw new Exception("Wrong property value for AWT.meta. Expected: " + cmdSymbol + ", actual: " + val);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/TrayIcon/ShowAfterDisposeTest/ShowAfterDisposeTest.html Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,43 @@
+<html>
+<!--
+ Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ This code is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License version 2 only, as
+ published by the Free Software Foundation.
+
+ This code is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ version 2 for more details (a copy is included in the LICENSE file that
+ accompanied this code).
+
+ You should have received a copy of the GNU General Public License version
+ 2 along with this work; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ or visit www.oracle.com if you need additional information or have any
+ questions.
+-->
+
+<!--
+ @test
+ @bug 6384984 8004032
+ @summary TrayIcon try to dispay a tooltip when is not visible
+ @author Dmitry.Cherepanov@sun.com area=awt.tray
+ @run applet/manual=yesno ShowAfterDisposeTest.html
+ -->
+<head>
+<title> ShowAfterDisposeTest </title>
+</head>
+<body>
+
+<h1>ShowAfterDisposeTest<br>Bug ID: 6384984</h1>
+
+<p> See the dialog box (usually in upper left corner) for instructions</p>
+
+<APPLET CODE="ShowAfterDisposeTest.class" WIDTH=200 HEIGHT=200></APPLET>
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/TrayIcon/ShowAfterDisposeTest/ShowAfterDisposeTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,246 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ test
+ @bug 6384984 8004032
+ @summary TrayIcon try to dispay a tooltip when is not visible
+ @author Dmitry.Cherepanov@sun.com area=awt.tray
+ @run applet/manual=yesno ShowAfterDisposeTest.html
+*/
+
+import java.applet.*;
+
+import java.awt.*;
+import java.awt.event.*;
+import java.awt.image.*;
+
+public class ShowAfterDisposeTest extends Applet
+{
+ boolean traySupported;
+
+ public void init()
+ {
+ this.setLayout (new BorderLayout ());
+
+ String[] instructions;
+ traySupported = SystemTray.isSupported();
+ if (traySupported)
+ {
+ String[] s =
+ {
+ "1) When the test starts an icon is added to the SystemTray area.",
+ "2a) If you use Apple OS X,",
+ " right click on this icon (it's important to click before the tooltip is shown).",
+ " The icon should disappear.",
+ "2b) If you use other os (Windows, Linux, Solaris),",
+ " double click on this icon (it's important to click before the tooltip is shown).",
+ " The icon should disappear.",
+ "3) If the bug is reproducible then the test will fail without assistance.",
+ "4) Just press the 'pass' button."
+ };
+ instructions = s;
+ }
+ else
+ {
+ String[] s =
+ {
+ "The test cannot be run because SystemTray is not supported.",
+ "Simply press PASS button."
+ };
+ instructions = s;
+ }
+ Sysout.createDialogWithInstructions(instructions);
+ }
+
+ public void start ()
+ {
+ setSize (200,200);
+ setVisible(true);
+ validate();
+
+ if (!traySupported)
+ {
+ return;
+ }
+
+ BufferedImage img = new BufferedImage(32, 32, BufferedImage.TYPE_INT_ARGB);
+ Graphics g = img.createGraphics();
+ g.setColor(Color.WHITE);
+ g.fillRect(0, 0, 32, 32);
+ g.setColor(Color.RED);
+ g.fillRect(6, 6, 20, 20);
+ g.dispose();
+
+ final SystemTray tray = SystemTray.getSystemTray();
+ final TrayIcon icon = new TrayIcon(img);
+ icon.setImageAutoSize(true);
+ icon.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent ev)
+ {
+ tray.remove(icon);
+ }
+ }
+ );
+
+ try {
+ tray.add(icon);
+ } catch (AWTException e) {
+ Sysout.println(e.toString());
+ Sysout.println("!!! The test coudn't be performed !!!");
+ return;
+ }
+ icon.setToolTip("tooltip");
+ }
+}
+
+/****************************************************
+ Standard Test Machinery
+ DO NOT modify anything below -- it's a standard
+ chunk of code whose purpose is to make user
+ interaction uniform, and thereby make it simpler
+ to read and understand someone else's test.
+ ****************************************************/
+
+/**
+ This is part of the standard test machinery.
+ It creates a dialog (with the instructions), and is the interface
+ for sending text messages to the user.
+ To print the instructions, send an array of strings to Sysout.createDialog
+ WithInstructions method. Put one line of instructions per array entry.
+ To display a message for the tester to see, simply call Sysout.println
+ with the string to be displayed.
+ This mimics System.out.println but works within the test harness as well
+ as standalone.
+ */
+
+class Sysout
+{
+ private static TestDialog dialog;
+
+ public static void createDialogWithInstructions( String[] instructions )
+ {
+ dialog = new TestDialog( new Frame(), "Instructions" );
+ dialog.printInstructions( instructions );
+ dialog.setVisible(true);
+ println( "Any messages for the tester will display here." );
+ }
+
+ public static void createDialog( )
+ {
+ dialog = new TestDialog( new Frame(), "Instructions" );
+ String[] defInstr = { "Instructions will appear here. ", "" } ;
+ dialog.printInstructions( defInstr );
+ dialog.setVisible(true);
+ println( "Any messages for the tester will display here." );
+ }
+
+ public static void printInstructions( String[] instructions )
+ {
+ dialog.printInstructions( instructions );
+ }
+
+ public static void println( String messageIn )
+ {
+ dialog.displayMessage( messageIn );
+ }
+}
+
+/**
+ This is part of the standard test machinery. It provides a place for the
+ test instructions to be displayed, and a place for interactive messages
+ to the user to be displayed.
+ To have the test instructions displayed, see Sysout.
+ To have a message to the user be displayed, see Sysout.
+ Do not call anything in this dialog directly.
+ */
+class TestDialog extends Dialog
+{
+
+ TextArea instructionsText;
+ TextArea messageText;
+ int maxStringLength = 80;
+
+ //DO NOT call this directly, go through Sysout
+ public TestDialog( Frame frame, String name )
+ {
+ super( frame, name );
+ int scrollBoth = TextArea.SCROLLBARS_BOTH;
+ instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth );
+ add( "North", instructionsText );
+
+ messageText = new TextArea( "", 5, maxStringLength, scrollBoth );
+ add("Center", messageText);
+
+ pack();
+
+ setVisible(true);
+ }
+
+ //DO NOT call this directly, go through Sysout
+ public void printInstructions( String[] instructions )
+ {
+ //Clear out any current instructions
+ instructionsText.setText( "" );
+
+ //Go down array of instruction strings
+
+ String printStr, remainingStr;
+ for( int i=0; i < instructions.length; i++ )
+ {
+ //chop up each into pieces maxSringLength long
+ remainingStr = instructions[ i ];
+ while( remainingStr.length() > 0 )
+ {
+ //if longer than max then chop off first max chars to print
+ if( remainingStr.length() >= maxStringLength )
+ {
+ //Try to chop on a word boundary
+ int posOfSpace = remainingStr.
+ lastIndexOf( ' ', maxStringLength - 1 );
+
+ if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
+
+ printStr = remainingStr.substring( 0, posOfSpace + 1 );
+ remainingStr = remainingStr.substring( posOfSpace + 1 );
+ }
+ //else just print
+ else
+ {
+ printStr = remainingStr;
+ remainingStr = "";
+ }
+
+ instructionsText.append( printStr + "\n" );
+ }
+ }
+ }
+
+ //DO NOT call this directly, go through Sysout
+ public void displayMessage( String messageIn )
+ {
+ messageText.append( messageIn + "\n" );
+ System.out.println(messageIn);
+ }
+}
--- a/jdk/test/java/awt/Window/MaximizeOffscreen/MaximizeOffscreenTest.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/java/awt/Window/MaximizeOffscreen/MaximizeOffscreenTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -23,6 +23,7 @@
/**
* @test @summary JVM crash if the frame maximized from offscreen
+ * @bug 8020210
* @author Petr Pchelko
* @library ../../regtesthelpers
* @build Util
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/event/KeyEvent/ExtendedKeyCode/ExtendedKeyCodeTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * 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.awt.Frame;
+import java.awt.Robot;
+import java.awt.Toolkit;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyAdapter;
+import sun.awt.ExtendedKeyCodes;
+import sun.awt.SunToolkit;
+
+/*
+ * @test
+ * @bug 8007156
+ * @summary Extended key code is not set for a key event
+ * @author Alexandr Scherbatiy
+ * @run main ExtendedKeyCodeTest
+ */
+public class ExtendedKeyCodeTest {
+
+ private static volatile boolean setExtendedKeyCode = true;
+ private static volatile int eventsCount = 0;
+
+ public static void main(String[] args) throws Exception {
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+ Robot robot = new Robot();
+
+ Frame frame = new Frame();
+ frame.setSize(300, 300);
+
+ frame.addKeyListener(new KeyAdapter() {
+
+ @Override
+ public void keyPressed(KeyEvent e) {
+ eventsCount++;
+ setExtendedKeyCode = setExtendedKeyCode && (e.getExtendedKeyCode()
+ == ExtendedKeyCodes.getExtendedKeyCodeForChar(e.getKeyChar()));
+ }
+
+ @Override
+ public void keyReleased(KeyEvent e) {
+ eventsCount++;
+ setExtendedKeyCode = setExtendedKeyCode && (e.getExtendedKeyCode()
+ == ExtendedKeyCodes.getExtendedKeyCodeForChar(e.getKeyChar()));
+ }
+ });
+
+ frame.setVisible(true);
+ toolkit.realSync();
+
+ robot.keyPress(KeyEvent.VK_D);
+ robot.keyRelease(KeyEvent.VK_D);
+ toolkit.realSync();
+
+ frame.dispose();
+
+ if (eventsCount != 2 || !setExtendedKeyCode) {
+ throw new RuntimeException("Wrong extended key code");
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/event/KeyEvent/KeyChar/KeyCharTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.AWTEvent;
+import java.awt.Frame;
+import java.awt.Robot;
+import java.awt.Toolkit;
+import java.awt.event.AWTEventListener;
+import java.awt.event.KeyEvent;
+import java.util.Locale;
+import sun.awt.SunToolkit;
+
+/*
+ * @test
+ * @bug 8022401
+ * @summary Wrong key char
+ * @author Alexandr Scherbatiy
+ * @run main KeyCharTest
+ */
+public class KeyCharTest {
+
+ private static volatile int eventsCount = 0;
+
+ static {
+ Locale.setDefault(Locale.ENGLISH);
+
+ Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
+
+ @Override
+ public void eventDispatched(AWTEvent event) {
+ eventsCount++;
+ char delete = ((KeyEvent) event).getKeyChar();
+ if (delete != '\u007f') {
+ throw new RuntimeException("Key char is not delete: '" + delete + "'");
+ }
+ }
+ }, AWTEvent.KEY_EVENT_MASK);
+ }
+
+ public static void main(String[] args) throws Exception {
+
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+
+ Frame frame = new Frame();
+ frame.setSize(300, 300);
+ frame.setVisible(true);
+ toolkit.realSync();
+
+ Robot robot = new Robot();
+
+ robot.keyPress(KeyEvent.VK_DELETE);
+ robot.keyRelease(KeyEvent.VK_DELETE);
+ toolkit.realSync();
+
+ frame.dispose();
+
+ if (eventsCount != 3) {
+ throw new RuntimeException("Wrong number of key events: " + eventsCount);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/font/TransformAttribute/TransformEqualityTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @summary test equals method
+ * @bug 7092764
+ */
+
+import java.awt.font.TransformAttribute;
+import java.awt.geom.AffineTransform;
+
+public class TransformEqualityTest {
+
+ public static void main(String[] args) {
+ AffineTransform tx1 = new AffineTransform(1, 0, 1, 1, 0, 0);
+ AffineTransform tx2 = new AffineTransform(1, 0, 1, 1, 0, 0);
+ AffineTransform tx3 = new AffineTransform(2, 0, 1, 1, 0, 0);
+ TransformAttribute ta1a = new TransformAttribute(tx1);
+ TransformAttribute ta1b = new TransformAttribute(tx1);
+ TransformAttribute ta2 = new TransformAttribute(tx2);
+ TransformAttribute ta3 = new TransformAttribute(tx3);
+ if (ta1a.equals(null)) {
+ throw new RuntimeException("should not be equal to null.");
+ }
+ if (!ta1a.equals(ta1a)) {
+ throw new RuntimeException("(1) should be equal.");
+ }
+ if (!ta1a.equals(ta1b)) {
+ throw new RuntimeException("(2) should be equal.");
+ }
+ if (!ta1a.equals(ta2)) {
+ throw new RuntimeException("(3) should be equal.");
+ }
+ if (ta2.equals(ta3)) {
+ throw new RuntimeException("should be different.");
+ }
+ }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/image/DrawImage/EABlitTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. 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.
+ */
+
+import java.awt.*;
+import java.awt.image.*;
+import java.util.*;
+import javax.swing.*;
+
+/**
+ * @test
+ * @bug 8024895
+ * @summary tests if changing extra alpha values are honored for transformed blits
+ * @author ceisserer
+ */
+public class EABlitTest extends Frame {
+ protected void test() {
+ BufferedImage srcImg = createSrcImage();
+ Image dstImg = getGraphicsConfiguration().createCompatibleVolatileImage(20, 50);
+
+ //be over-cautious and render twice to avoid BI caching issues
+ renderToVI(srcImg, dstImg);
+ renderToVI(srcImg, dstImg);
+
+ BufferedImage validationImg = new BufferedImage(20, 50, BufferedImage.TYPE_INT_RGB);
+ Graphics2D valG = (Graphics2D) validationImg.getGraphics();
+ valG.drawImage(dstImg, 0, 0, null);
+
+ //Loop over all pixel, and count the different pixel values encountered.
+ TreeSet<Integer> colorCntSet = new TreeSet<>();
+ for (int x=0; x < validationImg.getWidth(); x++) {
+ for (int y=0; y < validationImg.getHeight(); y++) {
+ int rgb = validationImg.getRGB(x, y);
+ colorCntSet.add(rgb);
+ }
+ }
+
+ //Check if we encountered 3 different color values in total
+ if (colorCntSet.size() == 3) {
+ System.out.println("Passed!");
+ } else {
+ throw new RuntimeException("Test FAILED!");
+ }
+ }
+
+ protected void renderToVI(BufferedImage src, Image dst) {
+ Graphics2D g = (Graphics2D) dst.getGraphics();
+
+ g.setColor(Color.WHITE);
+ g.fillRect(0, 0, 50, 50);
+ g.rotate(0.5f);
+ g.setRenderingHint(RenderingHints.KEY_RENDERING,
+ RenderingHints.VALUE_RENDER_QUALITY);
+
+ g.setComposite(AlphaComposite.SrcOver.derive(1f));
+ g.drawImage(src, 10, 10, null);
+
+ g.setComposite(AlphaComposite.SrcOver.derive(0.5f));
+ g.drawImage(src, 20, 20, null);
+ }
+
+ protected BufferedImage createSrcImage() {
+ BufferedImage bi = new BufferedImage(10, 10, BufferedImage.TYPE_INT_RGB);
+ Graphics2D g = (Graphics2D) bi.getGraphics();
+ g.setColor(Color.YELLOW);
+ g.fillRect(0, 0, 10, 10);
+ return bi;
+ }
+
+ public static void main(String[] args) {
+ new EABlitTest().test();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/print/bug8023392/bug8023392.html Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,20 @@
+<html>
+<!--
+ @test
+ @bug 8023392
+ @summary Swing text components printed with spaces between chars
+ @author Anton Nashatyrev
+ @run applet/manual=yesno bug8023392.html
+ -->
+<head>
+ <title> Bug 8023392 </title>
+</head>
+<body>
+
+<h1>Bug ID: 8023392</h1>
+
+<p> See the dialog box (usually in upper left corner) for instructions</p>
+
+<APPLET CODE="bug8023392.class" WIDTH=400 HEIGHT=400></APPLET>
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/print/bug8023392/bug8023392.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,286 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. 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.
+ */
+
+/*
+ test
+ @bug 8023392
+ @summary Swing text components printed with spaces between chars
+ @author Anton Nashatyrev
+ @run applet/manual=yesno bug8023392.html
+*/
+
+import javax.swing.*;
+import javax.swing.border.LineBorder;
+import java.applet.Applet;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.font.TextAttribute;
+import java.awt.print.PageFormat;
+import java.awt.print.Printable;
+import java.awt.print.PrinterException;
+import java.awt.print.PrinterJob;
+import java.text.AttributedCharacterIterator;
+import java.text.AttributedString;
+
+
+public class bug8023392 extends Applet {
+ static final String[] instructions = {
+ "A Frame containing several pairs of labels ((a) and (b)) is displayed.",
+ "Labels of each pair look the same and are left-aligned (with spaces ",
+ "between chars).",
+ "1. Hit the print button.",
+ "2. Select any available printer (printing to file is also fine).",
+ "3. Look at the printing result (paper, PDF, PS, etc.):",
+ " The (a) and (b) labels should look almost the same and the (a) labels",
+ " shouldn't appear as if they are stretched along X axis."};
+
+ public void init() {
+ this.setLayout(new BorderLayout());
+ add(new SimplePrint2(), BorderLayout.CENTER);
+
+ Sysout.createDialogWithInstructions(instructions);
+
+ }
+
+ public static class SimplePrint2 extends JPanel
+ implements ActionListener, Printable {
+ JLabel label1;
+ JLabel label2;
+ JButton printButton;
+
+
+ public SimplePrint2() {
+ setLayout(new BorderLayout());
+ label1 = new JLabel("2a) a b c d e" +
+ " ");
+ label2 = new JLabel("2b) a b c d e");
+
+ Box p1 = new Box(BoxLayout.Y_AXIS);
+ p1.add(label1);
+ p1.add(label2);
+ p1.add(new JLabel("wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww") {
+ String s = "3a) a b c d e ";
+ @Override
+ protected void paintComponent(Graphics g) {
+ sun.swing.SwingUtilities2.drawChars(this, g, s.toCharArray(),
+ 0, s.length(), 0, 15);
+ }
+ });
+ p1.add(new JLabel("wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww") {
+ String s = "3b) a b c d e";
+ @Override
+ protected void paintComponent(Graphics g) {
+ sun.swing.SwingUtilities2.drawChars(this, g, s.toCharArray(),
+ 0, s.length(), 0, 15);
+ }
+ });
+ p1.add(new JLabel("wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww") {
+ String s = "4a) a b c d e ";
+ AttributedCharacterIterator it;
+ {
+ AttributedString as = new AttributedString(s);
+ as.addAttribute(TextAttribute.FONT, getFont());
+ as.addAttribute(TextAttribute.FOREGROUND, Color.RED, 3, 8);
+ it = as.getIterator();
+ }
+ @Override
+ protected void paintComponent(Graphics g) {
+ sun.swing.SwingUtilities2.drawString(this, g, it, 0, 15);
+ }
+ });
+
+ p1.add(new JLabel("wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww") {
+ String s = "4b) a b c d e";
+ AttributedCharacterIterator it;
+ {
+ AttributedString as = new AttributedString(s);
+ as.addAttribute(TextAttribute.FONT, getFont());
+ as.addAttribute(TextAttribute.FOREGROUND, Color.RED, 3, 8);
+ it = as.getIterator();
+ }
+ @Override
+ protected void paintComponent(Graphics g) {
+ sun.swing.SwingUtilities2.drawString(this, g, it, 0, 15);
+ }
+ });
+
+ JPanel p2 = new JPanel();
+ printButton = new JButton("Print");
+ printButton.addActionListener(this);
+ p2.add(printButton);
+
+ Container c = this;
+ c.add(p1, BorderLayout.CENTER);
+ c.add(p2, BorderLayout.SOUTH);
+
+ String[] data = {
+ "1a) \u30aa\u30f3\u30e9\u30a4\u30f3\u6d88\u8fbc" +
+ " ",
+ "1b) \u30aa\u30f3\u30e9\u30a4\u30f3\u6d88\u8fbc"
+ };
+ JList l0 = new JList(data);
+ l0.setVisibleRowCount(l0.getModel().getSize());
+ JScrollPane jsp = new JScrollPane(l0);
+ l0.setBorder(new LineBorder(Color.GRAY));
+ c.add(jsp, BorderLayout.NORTH);
+
+ for (Component comp : new Component[]{label1, label2, printButton}) {
+ comp.setFont(new Font("Monospaced", 0, 16));
+ }
+ }
+
+ public void actionPerformed(ActionEvent e) {
+ PrinterJob job = PrinterJob.getPrinterJob();
+ job.setPrintable(this);
+ if (job.printDialog()) {
+ try {
+ job.print();
+ } catch (PrinterException ex) {
+ ex.printStackTrace();
+ }
+ }
+ }
+
+ public int print(Graphics graphics,
+ PageFormat pageFormat,
+ int pageIndex)
+ throws PrinterException {
+ if (pageIndex >= 1) {
+ return Printable.NO_SUCH_PAGE;
+ }
+
+ this.paint(graphics);
+ return Printable.PAGE_EXISTS;
+ }
+ }
+}
+
+
+/**
+ * *************************************************
+ * Standard Test Machinery
+ * DO NOT modify anything below -- it's a standard
+ * chunk of code whose purpose is to make user
+ * interaction uniform, and thereby make it simpler
+ * to read and understand someone else's test.
+ * **************************************************
+ */
+class Sysout {
+ private static TestDialog dialog;
+
+ public static void createDialogWithInstructions(String[] instructions) {
+ dialog = new TestDialog(new Frame(), "Instructions");
+ dialog.printInstructions(instructions);
+ dialog.show();
+ println("Any messages for the tester will display here.");
+ }
+
+ public static void createDialog() {
+ dialog = new TestDialog(new Frame(), "Instructions");
+ String[] defInstr = {"Instructions will appear here. ", ""};
+ dialog.printInstructions(defInstr);
+ dialog.show();
+ println("Any messages for the tester will display here.");
+ }
+
+
+ public static void printInstructions(String[] instructions) {
+ dialog.printInstructions(instructions);
+ }
+
+
+ public static void println(String messageIn) {
+ dialog.displayMessage(messageIn);
+ }
+
+}// Sysout class
+
+
+class TestDialog extends Dialog {
+
+ TextArea instructionsText;
+ TextArea messageText;
+ int maxStringLength = 80;
+
+ //DO NOT call this directly, go through Sysout
+ public TestDialog(Frame frame, String name) {
+ super(frame, name);
+ int scrollBoth = TextArea.SCROLLBARS_BOTH;
+ instructionsText = new TextArea("", 15, maxStringLength, scrollBoth);
+ add("North", instructionsText);
+
+ messageText = new TextArea("", 5, maxStringLength, scrollBoth);
+ add("South", messageText);
+
+ pack();
+
+ show();
+ }// TestDialog()
+
+ //DO NOT call this directly, go through Sysout
+ public void printInstructions(String[] instructions) {
+ //Clear out any current instructions
+ instructionsText.setText("");
+
+ //Go down array of instruction strings
+
+ String printStr, remainingStr;
+ for (int i = 0; i < instructions.length; i++) {
+ //chop up each into pieces maxSringLength long
+ remainingStr = instructions[i];
+ while (remainingStr.length() > 0) {
+ //if longer than max then chop off first max chars to print
+ if (remainingStr.length() >= maxStringLength) {
+ //Try to chop on a word boundary
+ int posOfSpace = remainingStr.
+ lastIndexOf(' ', maxStringLength - 1);
+
+ if (posOfSpace <= 0) posOfSpace = maxStringLength - 1;
+
+ printStr = remainingStr.substring(0, posOfSpace + 1);
+ remainingStr = remainingStr.substring(posOfSpace + 1);
+ }
+ //else just print
+ else {
+ printStr = remainingStr;
+ remainingStr = "";
+ }
+
+ instructionsText.append(printStr + "\n");
+
+ }// while
+
+ }// for
+
+ }//printInstructions()
+
+ //DO NOT call this directly, go through Sysout
+ public void displayMessage(String messageIn) {
+ messageText.append(messageIn + "\n");
+ }
+
+}// TestDialog class
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/beans/Introspector/Test7172865.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,162 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.beans.IndexedPropertyDescriptor;
+import java.beans.MethodDescriptor;
+import java.beans.PropertyDescriptor;
+
+/*
+ * @test
+ * @bug 7172854 7172865
+ * @summary Tests that cached methods are not lost
+ * @author Sergey Malenkov
+ */
+
+public class Test7172865 {
+ public static void main(String[] args) throws Exception {
+ int errors = 0;
+
+ MethodDescriptor md = new MethodDescriptor(Test7172865.class.getMethod("getGood"));
+
+ errors += test(PropertyDescriptor.class, "good", true);
+ PropertyDescriptor pdGoodString = new PropertyDescriptor("good", Test7172865.class, "getGood", "setGood");
+ PropertyDescriptor pdGoodMethod = new PropertyDescriptor("good",
+ Test7172865.class.getMethod("getGood"),
+ Test7172865.class.getMethod("setGood", args.getClass()));
+
+ errors += test(PropertyDescriptor.class, "bad", false);
+ PropertyDescriptor pdBadString = new PropertyDescriptor("bad", Test7172865.class, "getBad", null);
+ PropertyDescriptor pdBadMethod = new PropertyDescriptor("bad",
+ Test7172865.class.getMethod("getBad"),
+ Test7172865.class.getMethod("setBad", args.getClass()));
+
+ errors += test(IndexedPropertyDescriptor.class, "good", true);
+ IndexedPropertyDescriptor ipdGoodString = new IndexedPropertyDescriptor("good", Test7172865.class, "getGood", "setGood", "getGood", "setGood");
+ IndexedPropertyDescriptor ipdGoodMethod = new IndexedPropertyDescriptor("good",
+ Test7172865.class.getMethod("getGood"),
+ Test7172865.class.getMethod("setGood", args.getClass()),
+ Test7172865.class.getMethod("getGood", Integer.TYPE),
+ Test7172865.class.getMethod("setGood", Integer.TYPE, String.class));
+
+ errors += test(IndexedPropertyDescriptor.class, "bad", false);
+ IndexedPropertyDescriptor ipdBadString = new IndexedPropertyDescriptor("bad", Test7172865.class, "getBad", null, "getBad", null);
+ IndexedPropertyDescriptor ipdBadMethod = new IndexedPropertyDescriptor("bad",
+ Test7172865.class.getMethod("getBad"),
+ Test7172865.class.getMethod("setBad", args.getClass()),
+ Test7172865.class.getMethod("getBad", Integer.TYPE),
+ Test7172865.class.getMethod("setBad", Integer.TYPE, String.class));
+
+ for (int i = 1; i <= 2; i++) {
+ System.out.println("STEP: " + i);
+ errors += test("md", null != md.getMethod());
+
+ errors += test("pdGoodString", pdGoodString, true, true);
+ errors += test("pdGoodMethod", pdGoodMethod, true, true);
+
+ errors += test("pdBadString", pdBadString, true, false);
+ errors += test("pdBadMethod", pdBadMethod, true, true);
+
+ errors += test("ipdGoodString", ipdGoodString, true, true, true, true);
+ errors += test("ipdGoodMethod", ipdGoodMethod, true, true, true, true);
+
+ errors += test("ipdBadString", ipdBadString, true, false, true, false);
+ errors += test("ipdBadMethod", ipdBadMethod, true, true, true, true);
+
+ try {
+ int[] array = new int[1024];
+ while (true) {
+ array = new int[array.length << 1];
+ }
+ }
+ catch (OutOfMemoryError error) {
+ System.gc();
+ }
+ }
+ if (errors > 0) {
+ throw new Error("found " + errors + " errors");
+ }
+ }
+
+ private static int test(Class<?> type, String property, boolean value) {
+ String message = type.getSimpleName() + "(" + property + ") ";
+ try {
+ type.getConstructor(String.class, Class.class).newInstance(property, Test7172865.class);
+ message += "passed";
+ }
+ catch (Exception exception) {
+ message += "failed";
+ value = !value;
+ }
+ if (value) {
+ message += " as expected";
+ }
+ System.out.println(message);
+ return value ? 0 : 1;
+ }
+
+ private static int test(String message, boolean value) {
+ System.out.println(message + ": " + (value ? "passed" : "failed"));
+ return value ? 0 : 1;
+ }
+
+ private static int test(String message, PropertyDescriptor pd, boolean rm, boolean wm) {
+ return test(message + ".Read", rm == (null != pd.getReadMethod()))
+ + test(message + ".Write", wm == (null != pd.getWriteMethod()));
+ }
+
+ private static int test(String message, IndexedPropertyDescriptor ipd, boolean rm, boolean wm, boolean irm, boolean iwm) {
+ return test(message, ipd, rm, wm)
+ + test(message + ".IndexedRead", irm == (null != ipd.getIndexedReadMethod()))
+ + test(message + ".IndexedWrite", iwm == (null != ipd.getIndexedWriteMethod()));
+ }
+
+ public String[] getGood() {
+ return null;
+ }
+
+ public String getGood(int index) {
+ return null;
+ }
+
+ public void setGood(String[] good) {
+ }
+
+ public void setGood(int index, String value) {
+ }
+
+ public String[] getBad() {
+ return null;
+ }
+
+ public String getBad(int index) {
+ return null;
+ }
+
+ public Test7172865 setBad(String[] bad) {
+ return null;
+ }
+
+ public Test7172865 setBad(int index, String value) {
+ return null;
+ }
+}
--- a/jdk/test/java/beans/Performance/Test7122740.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/java/beans/Performance/Test7122740.java Thu Oct 10 13:41:08 2013 -0700
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 7122740
+ * @bug 7187618 7122740
* @summary Tests just a benchmark of PropertyDescriptor(String, Class) performance
* @author Sergey Malenkov
* @run main/manual Test7122740
--- a/jdk/test/java/beans/Performance/Test7184799.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/java/beans/Performance/Test7184799.java Thu Oct 10 13:41:08 2013 -0700
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 7184799
+ * @bug 7187618 7184799
* @summary Tests just a benchmark of Introspector.getBeanInfo(Class) performance
* @author Sergey Malenkov
* @run main/manual Test7184799
--- a/jdk/test/java/lang/CharSequence/DefaultTest.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/java/lang/CharSequence/DefaultTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -25,6 +25,7 @@
import java.util.List;
import java.util.NoSuchElementException;
import java.util.PrimitiveIterator;
+import java.util.Spliterator;
import java.util.stream.Collectors;
import org.testng.annotations.Test;
@@ -34,7 +35,7 @@
/*
* @test
* @summary Unit test for CharSequence default methods
- * @bug 8012665
+ * @bug 8012665 8025002
* @run testng DefaultTest
*/
@@ -53,6 +54,12 @@
assertEquals(list, Arrays.asList((int) 'a', (int) 'b', (int) 'c'));
}
+ public void testCodePointsCharacteristics() {
+ Spliterator.OfInt s = "".codePoints().spliterator();
+ assertFalse(s.hasCharacteristics(Spliterator.SIZED | Spliterator.SUBSIZED));
+ assertTrue(s.hasCharacteristics(Spliterator.ORDERED));
+ }
+
@Test(expectedExceptions = NoSuchElementException.class)
public void testEmptyCodePoints() {
PrimitiveIterator.OfInt s = "".codePoints().iterator();
--- a/jdk/test/java/lang/ProcessBuilder/Basic.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/java/lang/ProcessBuilder/Basic.java Thu Oct 10 13:41:08 2013 -0700
@@ -298,11 +298,15 @@
System.exit(5);
System.err.print("standard error");
System.out.print("standard output");
- } else if (action.equals("testInheritIO")) {
+ } else if (action.equals("testInheritIO")
+ || action.equals("testRedirectInherit")) {
List<String> childArgs = new ArrayList<String>(javaChildArgs);
childArgs.add("testIO");
ProcessBuilder pb = new ProcessBuilder(childArgs);
- pb.inheritIO();
+ if (action.equals("testInheritIO"))
+ pb.inheritIO();
+ else
+ redirectIO(pb, INHERIT, INHERIT, INHERIT);
ProcessResults r = run(pb);
if (! r.out().equals(""))
System.exit(7);
@@ -1019,10 +1023,10 @@
// Note that this requires __FOUR__ nested JVMs involved in one test,
// if you count the harness JVM.
//----------------------------------------------------------------
- {
+ for (String testName : new String[] { "testInheritIO", "testRedirectInherit" } ) {
redirectIO(pb, PIPE, PIPE, PIPE);
List<String> command = pb.command();
- command.set(command.size() - 1, "testInheritIO");
+ command.set(command.size() - 1, testName);
Process p = pb.start();
new PrintStream(p.getOutputStream()).print("standard input");
p.getOutputStream().close();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/lang/ProcessBuilder/InheritIO/InheritIO.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import static java.lang.ProcessBuilder.Redirect.*;
+
+class InheritIO {
+
+ public static class TestInheritIO {
+ public static void main(String args[]) throws Throwable {
+ int err = new ProcessBuilder(args).inheritIO().start().waitFor();
+ System.err.print("exit value: " + err);
+ System.exit(err);
+ }
+ }
+
+ public static class TestRedirectInherit {
+ public static void main(String args[]) throws Throwable {
+ int err = new ProcessBuilder(args)
+ .redirectInput(INHERIT)
+ .redirectOutput(INHERIT)
+ .redirectError(INHERIT)
+ .start().waitFor();
+ System.err.print("exit value: " + err);
+ System.exit(err);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/lang/ProcessBuilder/InheritIO/InheritIO.sh Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,81 @@
+#
+# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+# @test
+# @bug 8023130
+# @summary (process) ProcessBuilder#inheritIO does not work on Windows
+# @run shell InheritIO.sh
+
+if [ "x${TESTSRC}" = "x" ]; then
+ echo "TESTSRC not set. Test cannot execute. Failed."
+ exit 1
+fi
+
+if [ "x${TESTJAVA}" = "x" ]; then
+ echo "TESTJAVA not set. Test cannot execute. Failed."
+ exit 1
+fi
+
+
+JAVA="${TESTJAVA}/bin/java"
+JAVAC="${TESTJAVA}/bin/javac"
+
+cp -f ${TESTSRC}/InheritIO.java .
+
+# compile the class ourselves, so this can run as a standalone test
+
+${JAVAC} InheritIO.java
+RES="$?"
+if [ ${RES} != 0 ]; then
+ echo 'FAIL: Cannot compile InheritIO.java'
+ exit ${RES}
+fi
+
+
+for TEST_NAME in TestInheritIO TestRedirectInherit
+do
+ ${JAVA} ${TESTVMOPTS} -classpath . \
+ 'InheritIO$'${TEST_NAME} printf message > stdout.txt 2> stderr.txt
+
+ RES="$?"
+ if [ ${RES} != 0 ]; then
+ echo 'FAIL: InheritIO$'${TEST_NAME}' failed with '${RES}
+ exit ${RES}
+ fi
+
+ OUT_EXPECTED='message'
+ OUT_RECEIVED=`cat stdout.txt`
+ if [ "x${OUT_RECEIVED}" != "x${OUT_EXPECTED}" ]; then
+ echo "FAIL: unexpected '${OUT_RECEIVED}' in stdout"
+ exit 1
+ fi
+
+ ERR_EXPECTED='exit value: 0'
+ ERR_RECEIVED=`cat stderr.txt`
+ if [ "x${ERR_RECEIVED}" != "x${ERR_EXPECTED}" ]; then
+ echo "FAIL: unexpected '${ERR_RECEIVED}' in stderr"
+ exit 1
+ fi
+done
+
+echo 'PASS: InheritIO works as expected'
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/lang/annotation/AnnotationsInheritanceOrderRedefinitionTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,210 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8011940
+ * @summary Test inheritance, order and class redefinition behaviour of RUNTIME
+ * class annotations
+ * @author plevart
+ */
+
+import sun.reflect.annotation.AnnotationParser;
+
+import java.lang.annotation.Annotation;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.StringJoiner;
+
+public class AnnotationsInheritanceOrderRedefinitionTest {
+
+ @Retention(RetentionPolicy.RUNTIME)
+ @Inherited
+ @interface Ann1 {
+ String value();
+ }
+
+ @Retention(RetentionPolicy.RUNTIME)
+ @Inherited
+ @interface Ann2 {
+ String value();
+ }
+
+ @Retention(RetentionPolicy.RUNTIME)
+ @Inherited
+ @interface Ann3 {
+ String value();
+ }
+
+ @Ann1("A")
+ @Ann2("A")
+ static class A {}
+
+ @Ann3("B")
+ static class B extends A {}
+
+ @Ann1("C")
+ @Ann3("C")
+ static class C extends B {}
+
+ public static void main(String[] args) {
+
+ StringBuilder msgs = new StringBuilder();
+ boolean ok = true;
+
+ ok &= annotationsEqual(msgs, A.class, true,
+ ann(Ann1.class, "A"), ann(Ann2.class, "A"));
+ ok &= annotationsEqual(msgs, A.class, false,
+ ann(Ann1.class, "A"), ann(Ann2.class, "A"));
+ ok &= annotationsEqual(msgs, B.class, true,
+ ann(Ann3.class, "B"));
+ ok &= annotationsEqual(msgs, B.class, false,
+ ann(Ann1.class, "A"), ann(Ann2.class, "A"), ann(Ann3.class, "B"));
+ ok &= annotationsEqual(msgs, C.class, true,
+ ann(Ann1.class, "C"), ann(Ann3.class, "C"));
+ ok &= annotationsEqual(msgs, C.class, false,
+ ann(Ann1.class, "C"), ann(Ann2.class, "A"), ann(Ann3.class, "C"));
+
+ Annotation[] declaredAnnotatiosA = A.class.getDeclaredAnnotations();
+ Annotation[] annotationsA = A.class.getAnnotations();
+ Annotation[] declaredAnnotatiosB = B.class.getDeclaredAnnotations();
+ Annotation[] annotationsB = B.class.getAnnotations();
+ Annotation[] declaredAnnotatiosC = C.class.getDeclaredAnnotations();
+ Annotation[] annotationsC = C.class.getAnnotations();
+
+ incrementClassRedefinedCount(A.class);
+ incrementClassRedefinedCount(B.class);
+ incrementClassRedefinedCount(C.class);
+
+ ok &= annotationsEqualButNotSame(msgs, A.class, true, declaredAnnotatiosA);
+ ok &= annotationsEqualButNotSame(msgs, A.class, false, annotationsA);
+ ok &= annotationsEqualButNotSame(msgs, B.class, true, declaredAnnotatiosB);
+ ok &= annotationsEqualButNotSame(msgs, B.class, false, annotationsB);
+ ok &= annotationsEqualButNotSame(msgs, C.class, true, declaredAnnotatiosC);
+ ok &= annotationsEqualButNotSame(msgs, C.class, false, annotationsC);
+
+ if (!ok) {
+ throw new RuntimeException("test failure\n" + msgs);
+ }
+ }
+
+ // utility methods
+
+ private static boolean annotationsEqualButNotSame(StringBuilder msgs,
+ Class<?> declaringClass, boolean declaredOnly, Annotation[] oldAnns) {
+ if (!annotationsEqual(msgs, declaringClass, declaredOnly, oldAnns)) {
+ return false;
+ }
+ Annotation[] anns = declaredOnly
+ ? declaringClass.getDeclaredAnnotations()
+ : declaringClass.getAnnotations();
+ List<Annotation> sameAnns = new ArrayList<>();
+ for (int i = 0; i < anns.length; i++) {
+ if (anns[i] == oldAnns[i]) {
+ sameAnns.add(anns[i]);
+ }
+ }
+ if (!sameAnns.isEmpty()) {
+ msgs.append(declaredOnly ? "declared " : "").append("annotations for ")
+ .append(declaringClass.getSimpleName())
+ .append(" not re-parsed after class redefinition: ")
+ .append(toSimpleString(sameAnns)).append("\n");
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ private static boolean annotationsEqual(StringBuilder msgs,
+ Class<?> declaringClass, boolean declaredOnly, Annotation... expectedAnns) {
+ Annotation[] anns = declaredOnly
+ ? declaringClass.getDeclaredAnnotations()
+ : declaringClass.getAnnotations();
+ if (!Arrays.equals(anns, expectedAnns)) {
+ msgs.append(declaredOnly ? "declared " : "").append("annotations for ")
+ .append(declaringClass.getSimpleName()).append(" are: ")
+ .append(toSimpleString(anns)).append(", expected: ")
+ .append(toSimpleString(expectedAnns)).append("\n");
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ private static Annotation ann(Class<? extends Annotation> annotationType,
+ Object value) {
+ return AnnotationParser.annotationForMap(annotationType,
+ Collections.singletonMap("value", value));
+ }
+
+ private static String toSimpleString(List<Annotation> anns) {
+ return toSimpleString(anns.toArray(new Annotation[anns.size()]));
+ }
+
+ private static String toSimpleString(Annotation[] anns) {
+ StringJoiner joiner = new StringJoiner(", ");
+ for (Annotation ann : anns) {
+ joiner.add(toSimpleString(ann));
+ }
+ return joiner.toString();
+ }
+
+ private static String toSimpleString(Annotation ann) {
+ Class<? extends Annotation> annotationType = ann.annotationType();
+ Object value;
+ try {
+ value = annotationType.getDeclaredMethod("value").invoke(ann);
+ } catch (IllegalAccessException | InvocationTargetException
+ | NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ return "@" + annotationType.getSimpleName() + "(" + value + ")";
+ }
+
+ private static final Field classRedefinedCountField;
+
+ static {
+ try {
+ classRedefinedCountField = Class.class.getDeclaredField("classRedefinedCount");
+ classRedefinedCountField.setAccessible(true);
+ } catch (NoSuchFieldException e) {
+ throw new Error(e);
+ }
+ }
+
+ private static void incrementClassRedefinedCount(Class<?> clazz) {
+ try {
+ classRedefinedCountField.set(clazz,
+ ((Integer) classRedefinedCountField.get(clazz)) + 1);
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
--- a/jdk/test/java/nio/channels/DatagramChannel/AdaptDatagramSocket.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/java/nio/channels/DatagramChannel/AdaptDatagramSocket.java Thu Oct 10 13:41:08 2013 -0700
@@ -136,7 +136,7 @@
echoServer.getPort());
test(address, 0, false, false);
test(address, 0, false, true);
- test(address, 5000, false, false);
+ test(address, 15000, false, false);
}
try (TestServers.UdpDiscardServer discardServer
= TestServers.UdpDiscardServer.startNewServer()) {
--- a/jdk/test/java/nio/channels/Selector/LotsOfChannels.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/java/nio/channels/Selector/LotsOfChannels.java Thu Oct 10 13:41:08 2013 -0700
@@ -22,9 +22,10 @@
*/
/* @test
- * @bug 4503092
+ * @bug 4503092 8024883
* @summary Tests that Windows Selector can use more than 63 channels
- * @run main/timeout=300 LotsOfChannels
+ * @run main LotsOfChannels
+ * @run main/othervm -Dsun.nio.ch.maxUpdateArraySize=64 LotsOfChannels
* @author kladko
*/
--- a/jdk/test/java/nio/channels/Selector/SelectorLimit.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/java/nio/channels/Selector/SelectorLimit.java Thu Oct 10 13:41:08 2013 -0700
@@ -22,12 +22,13 @@
*/
/* @test
- * @bug 4777504
+ * @bug 4777504 8024883
* @summary Ensure that a Selector can return at least 100 selected keys
* @author Mark Reinhold
* @library ..
* @build SelectorLimit
* @run main/othervm SelectorLimit
+ * @run main/othervm -Dsun.nio.ch.maxUpdateArraySize=128 SelectorLimit
*/
import java.io.*;
--- a/jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/Makefile Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/Makefile Thu Oct 10 13:41:08 2013 -0700
@@ -21,33 +21,14 @@
ifeq ($(uname), SunOS)
PLATFORM = solaris
ISAINFO = isainfo
- ifndef ARCH_DATA_MODEL
- ARCH_DATA_MODEL=32
- endif
- ifeq ($(ARCH_DATA_MODEL), 32)
- archExpr = case "`$(UNAME) -p`" in \
- i386) \
- $(ECHO) i586 \
- ;; \
- sparc*) \
- $(ECHO) sparc \
- ;; \
- *) \
- $(UNAME) -p \
- ;; \
- esac
- ARCH := $(shell $(archExpr) )
- else
- ARCH := $(shell $(ISAINFO) -n)
- endif
+ ARCH_DATA_MODEL=64
+ ARCH := $(shell $(ISAINFO) -n)
CC = cc
LD = ld
CFLAGS = -D_REENTRANT -D__solaris__
LDFLAGS_COMMON = -G
EXTRA_LIBS = -lc
- ifeq ($(ARCH_DATA_MODEL), 64)
- CC += -xarch=v9
- endif
+ CC += -m64 -Kpic
endif
ifeq ($(uname), Linux)
Binary file jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/lib/solaris-amd64/libLauncher.so has changed
Binary file jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/lib/solaris-i586/libLauncher.so has changed
Binary file jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/lib/solaris-sparc/libLauncher.so has changed
--- a/jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/run_tests.sh Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/run_tests.sh Thu Oct 10 13:41:08 2013 -0700
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,6 @@
# questions.
#
-
# @test
# @bug 4673940
# @bug 4930794
@@ -39,7 +38,6 @@
exit 0
fi
-
# if TESTJAVA isn't set then we assume an interactive run. So that it's
# clear which version of 'java' is running we do a 'which java' and
# a 'java -version'.
@@ -64,24 +62,17 @@
# Check that we have libLauncher.so for the right platform.
-# On Solaris we assume 64-bit if java -d64 works.
+# On Solaris we assume 64-bit
DFLAG=
if [ "$os" = "SunOS" ]; then
PLATFORM=solaris
case "`uname -p`" in
i[3-9]86)
- ARCH=i586
+ ARCH=amd64
;;
sparc)
- ARCH=sparc
- ${JAVA} -d64 -version > /dev/null 2<&1
- if [ $? = 1 ]; then
- ARCH=sparc
- else
- ARCH=sparcv9
- DFLAG=-d64
- fi
+ ARCH=sparcv9
;;
esac
fi
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/HashMap/ReplaceExisting.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * @test
+ * @bug 8025173
+ * @summary Verify that replacing the value for an existing key does not
+ * corrupt active iterators, in particular due to a resize() occurring and
+ * not updating modCount.
+ * @run main ReplaceExisting
+ */
+
+import java.util.ConcurrentModificationException;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+
+public class ReplaceExisting {
+ /* Number of entries required to trigger a resize for cap=16, load=0.75*/
+ private static int ENTRIES = 13;
+
+ public static void main(String[] args) {
+ for (int i = 0; i <= ENTRIES; i++) {
+ HashMap<Integer,Integer> hm = prepHashMap();
+ testItr(hm, i);
+ }
+ }
+
+ /* Prepare a HashMap that will resize on next put() */
+ private static HashMap<Integer,Integer> prepHashMap() {
+ HashMap<Integer,Integer> hm = new HashMap<>(16, 0.75f);
+ // Add items to one more than the resize threshold
+ for (int i = 0; i < ENTRIES; i++) {
+ hm.put(i*10, i*10);
+ }
+ return hm;
+ }
+
+ /* Iterate hm for elemBeforePut elements, then call put() to replace value
+ * for existing key. With bug 8025173, this will also cause a resize, but
+ * not increase the modCount.
+ * Finish the iteration to check for a corrupt iterator.
+ */
+ private static void testItr(HashMap<Integer,Integer> hm, int elemBeforePut) {
+ if (elemBeforePut > hm.size()) {
+ throw new IllegalArgumentException("Error in test: elemBeforePut must be <= HashMap size");
+ }
+ // Create a copy of the keys
+ HashSet<Integer> keys = new HashSet<>(hm.size());
+ keys.addAll(hm.keySet());
+
+ HashSet<Integer> collected = new HashSet<>(hm.size());
+
+ // Run itr for elemBeforePut items, collecting returned elems
+ Iterator<Integer> itr = hm.keySet().iterator();
+ for (int i = 0; i < elemBeforePut; i++) {
+ Integer retVal = itr.next();
+ if (!collected.add(retVal)) {
+ throw new RuntimeException("Corrupt iterator: key " + retVal + " already encountered");
+ }
+ }
+
+ // Do put() to replace entry (and resize table when bug present)
+ if (null == hm.put(0, 100)) {
+ throw new RuntimeException("Error in test: expected key 0 to be in the HashMap");
+ }
+
+ // Finish itr + collecting returned elems
+ while(itr.hasNext()) {
+ Integer retVal = itr.next();
+ if (!collected.add(retVal)) {
+ throw new RuntimeException("Corrupt iterator: key " + retVal + " already encountered");
+ }
+ }
+
+ // Compare returned elems to original copy of keys
+ if (!keys.equals(collected)) {
+ throw new RuntimeException("Collected keys do not match original set of keys");
+ }
+ }
+}
--- a/jdk/test/java/util/Map/Defaults.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/java/util/Map/Defaults.java Thu Oct 10 13:41:08 2013 -0700
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 8010122 8004518
+ * @bug 8010122 8004518 8024331
* @summary Test Map default methods
* @author Mike Duigou
* @run testng Defaults
@@ -288,6 +288,21 @@
assertSame(map.get(EXTRA_KEY), EXTRA_VALUE);
}
+ @Test(expectedExceptions = {NullPointerException.class})
+ public void testComputeIfAbsentNPEHashMap() {
+ Object value = new HashMap().computeIfAbsent(KEYS[1], null);
+ }
+
+ @Test(expectedExceptions = {NullPointerException.class})
+ public void testComputeIfAbsentNPEHashtable() {
+ Object value = new Hashtable().computeIfAbsent(KEYS[1], null);
+ }
+
+ @Test(expectedExceptions = {NullPointerException.class})
+ public void testComputeIfAbsentNPETreeMap() {
+ Object value = new TreeMap().computeIfAbsent(KEYS[1], null);
+ }
+
@Test(dataProvider = "Map<IntegerEnum,String> rw=true keys=withNull values=withNull")
public void testComputeIfPresentNulls(String description, Map<IntegerEnum, String> map) {
assertTrue(map.containsKey(null), description + ": null key absent");
@@ -328,6 +343,21 @@
assertSame(map.get(EXTRA_KEY), null);
}
+ @Test(expectedExceptions = {NullPointerException.class})
+ public void testComputeIfPresentNPEHashMap() {
+ Object value = new HashMap().computeIfPresent(KEYS[1], null);
+ }
+
+ @Test(expectedExceptions = {NullPointerException.class})
+ public void testComputeIfPresentNPEHashtable() {
+ Object value = new Hashtable().computeIfPresent(KEYS[1], null);
+ }
+
+ @Test(expectedExceptions = {NullPointerException.class})
+ public void testComputeIfPresentNPETreeMap() {
+ Object value = new TreeMap().computeIfPresent(KEYS[1], null);
+ }
+
@Test(dataProvider = "Map<IntegerEnum,String> rw=true keys=withNull values=withNull")
public void testComputeNulls(String description, Map<IntegerEnum, String> map) {
assertTrue(map.containsKey(null), "null key absent");
@@ -414,6 +444,20 @@
assertSame(map.get(EXTRA_KEY), EXTRA_VALUE);
}
+ @Test(expectedExceptions = {NullPointerException.class})
+ public void testComputeNPEHashMap() {
+ Object value = new HashMap().compute(KEYS[1], null);
+ }
+
+ @Test(expectedExceptions = {NullPointerException.class})
+ public void testComputeNPEHashtable() {
+ Object value = new Hashtable().compute(KEYS[1], null);
+ }
+
+ @Test(expectedExceptions = {NullPointerException.class})
+ public void testComputeNPETreeMap() {
+ Object value = new TreeMap().compute(KEYS[1], null);
+ }
@Test(dataProvider = "Map<IntegerEnum,String> rw=true keys=withNull values=withNull")
public void testMergeNulls(String description, Map<IntegerEnum, String> map) {
@@ -456,6 +500,21 @@
assertSame(map.get(EXTRA_KEY), EXTRA_VALUE);
}
+ @Test(expectedExceptions = {NullPointerException.class})
+ public void testMergeNPEHashMap() {
+ Object value = new HashMap().merge(KEYS[1], VALUES[1], null);
+ }
+
+ @Test(expectedExceptions = {NullPointerException.class})
+ public void testMergeNPEHashtable() {
+ Object value = new Hashtable().merge(KEYS[1], VALUES[1], null);
+ }
+
+ @Test(expectedExceptions = {NullPointerException.class})
+ public void testMergeNPETreeMap() {
+ Object value = new TreeMap().merge(KEYS[1], VALUES[1], null);
+ }
+
enum IntegerEnum {
e0, e1, e2, e3, e4, e5, e6, e7, e8, e9,
--- a/jdk/test/java/util/Spliterator/SpliteratorCharacteristics.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/java/util/Spliterator/SpliteratorCharacteristics.java Thu Oct 10 13:41:08 2013 -0700
@@ -23,7 +23,7 @@
/**
* @test
- * @bug 8020156 8020009 8022326 8012913
+ * @bug 8020156 8020009 8022326 8012913 8024405
* @run testng SpliteratorCharacteristics
*/
@@ -36,21 +36,150 @@
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
+import java.util.List;
import java.util.Map;
+import java.util.PrimitiveIterator;
import java.util.Set;
import java.util.SortedMap;
import java.util.SortedSet;
import java.util.Spliterator;
+import java.util.Spliterators;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.concurrent.ConcurrentSkipListMap;
import java.util.concurrent.ConcurrentSkipListSet;
+import java.util.function.Supplier;
+import java.util.stream.DoubleStream;
+import java.util.stream.IntStream;
+import java.util.stream.LongStream;
import static org.testng.Assert.*;
@Test
public class SpliteratorCharacteristics {
+ public void testSpliteratorFromCollection() {
+ List<Integer> l = Arrays.asList(1, 2, 3, 4);
+
+ {
+ Spliterator<?> s = Spliterators.spliterator(l, 0);
+ assertCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
+ assertHasNotCharacteristics(s, Spliterator.CONCURRENT);
+ }
+
+ {
+ Spliterator<?> s = Spliterators.spliterator(l, Spliterator.CONCURRENT);
+ assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
+ assertCharacteristics(s, Spliterator.CONCURRENT);
+ }
+
+ {
+ Spliterator<?> s = Spliterators.spliterator(l.iterator( ), 1, 0);
+ assertCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
+ assertHasNotCharacteristics(s, Spliterator.CONCURRENT);
+ }
+
+ {
+ Spliterator<?> s = Spliterators.spliterator(l.iterator( ), 1, Spliterator.CONCURRENT);
+ assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
+ assertCharacteristics(s, Spliterator.CONCURRENT);
+ }
+
+ {
+ Spliterator<?> s = Spliterators.spliteratorUnknownSize(l.iterator( ), 0);
+ assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
+ }
+
+ {
+ Spliterator<?> s = Spliterators.spliteratorUnknownSize(
+ l.iterator(), Spliterator.SIZED | Spliterator.SUBSIZED);
+ assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
+ }
+ }
+
+ public void testSpliteratorOfIntFromIterator() {
+ Supplier<PrimitiveIterator.OfInt> si = () -> IntStream.of(1, 2, 3, 4).iterator();
+
+ {
+ Spliterator<?> s = Spliterators.spliterator(si.get(), 1, 0);
+ assertCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
+ assertHasNotCharacteristics(s, Spliterator.CONCURRENT);
+ }
+
+ {
+ Spliterator<?> s = Spliterators.spliterator(si.get(), 1, Spliterator.CONCURRENT);
+ assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
+ assertCharacteristics(s, Spliterator.CONCURRENT);
+ }
+
+ {
+ Spliterator<?> s = Spliterators.spliteratorUnknownSize(si.get(), 0);
+ assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
+ }
+
+ {
+ Spliterator<?> s = Spliterators.spliteratorUnknownSize(
+ si.get(), Spliterator.SIZED | Spliterator.SUBSIZED);
+ assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
+ }
+ }
+
+ public void testSpliteratorOfLongFromIterator() {
+ Supplier<PrimitiveIterator.OfLong> si = () -> LongStream.of(1, 2, 3, 4).iterator();
+
+ {
+ Spliterator<?> s = Spliterators.spliterator(si.get(), 1, 0);
+ assertCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
+ assertHasNotCharacteristics(s, Spliterator.CONCURRENT);
+ }
+
+ {
+ Spliterator<?> s = Spliterators.spliterator(si.get(), 1, Spliterator.CONCURRENT);
+ assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
+ assertCharacteristics(s, Spliterator.CONCURRENT);
+ }
+
+ {
+ Spliterator<?> s = Spliterators.spliteratorUnknownSize(si.get(), 0);
+ assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
+ }
+
+ {
+ Spliterator<?> s = Spliterators.spliteratorUnknownSize(
+ si.get(), Spliterator.SIZED | Spliterator.SUBSIZED);
+ assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
+ }
+ }
+
+ public void testSpliteratorOfDoubleFromIterator() {
+ Supplier<PrimitiveIterator.OfDouble> si = () -> DoubleStream.of(1, 2, 3, 4).iterator();
+
+ {
+ Spliterator<?> s = Spliterators.spliterator(si.get(), 1, 0);
+ assertCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
+ assertHasNotCharacteristics(s, Spliterator.CONCURRENT);
+ }
+
+ {
+ Spliterator<?> s = Spliterators.spliterator(si.get(), 1, Spliterator.CONCURRENT);
+ assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
+ assertCharacteristics(s, Spliterator.CONCURRENT);
+ }
+
+ {
+ Spliterator<?> s = Spliterators.spliteratorUnknownSize(si.get(), 0);
+ assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
+ }
+
+ {
+ Spliterator<?> s = Spliterators.spliteratorUnknownSize(
+ si.get(), Spliterator.SIZED | Spliterator.SUBSIZED);
+ assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
+ }
+ }
+
+ //
+
public void testHashMap() {
assertMapCharacteristics(new HashMap<>(),
Spliterator.SIZED | Spliterator.DISTINCT);
@@ -199,10 +328,19 @@
}
void assertCharacteristics(Collection<?> c, int expectedCharacteristics) {
- assertTrue(c.spliterator().hasCharacteristics(expectedCharacteristics),
+ assertCharacteristics(c.spliterator(), expectedCharacteristics);
+ }
+
+ void assertCharacteristics(Spliterator<?> s, int expectedCharacteristics) {
+ assertTrue(s.hasCharacteristics(expectedCharacteristics),
"Spliterator characteristics");
}
+ void assertHasNotCharacteristics(Spliterator<?> s, int expectedCharacteristics) {
+ assertFalse(s.hasCharacteristics(expectedCharacteristics),
+ "Spliterator characteristics");
+ }
+
void assertNullComparator(Collection<?> c) {
assertNull(c.spliterator().getComparator(),
"Comparator of Spliterator of Collection");
--- a/jdk/test/java/util/Spliterator/SpliteratorTraversingAndSplittingTest.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/java/util/Spliterator/SpliteratorTraversingAndSplittingTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -1159,7 +1159,7 @@
List<T> dest = new ArrayList<>();
spliterator = supplier.get();
- assertSpliterator(spliterator);
+ assertRootSpliterator(spliterator);
// verify splitting with forEach
visit(depth, 0, dest, spliterator, boxingAdapter, spliterator.characteristics(), false);
@@ -1234,7 +1234,7 @@
UnaryOperator<Consumer<T>> boxingAdapter) {
Spliterator<T> s = supplier.get();
boolean isOrdered = s.hasCharacteristics(Spliterator.ORDERED);
- assertSpliterator(s);
+ assertRootSpliterator(s);
List<T> splits = new ArrayList<>();
Consumer<T> c = boxingAdapter.apply(splits::add);
@@ -1326,6 +1326,13 @@
}
}
+ private static void assertRootSpliterator(Spliterator<?> s) {
+ assertFalse(s.hasCharacteristics(Spliterator.SIZED | Spliterator.CONCURRENT),
+ "Root spliterator should not be SIZED and CONCURRENT");
+
+ assertSpliterator(s);
+ }
+
private static void assertSpliterator(Spliterator<?> s, int rootCharacteristics) {
if ((rootCharacteristics & Spliterator.SUBSIZED) != 0) {
assertTrue(s.hasCharacteristics(Spliterator.SUBSIZED),
--- a/jdk/test/java/util/concurrent/ThreadLocalRandom/ThreadLocalRandomTest.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/java/util/concurrent/ThreadLocalRandom/ThreadLocalRandomTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -33,7 +33,9 @@
/**
* @test
+ * @bug 8024253
* @run testng ThreadLocalRandomTest
+ * @run testng/othervm -Djava.util.secureRandomSeed=true ThreadLocalRandomTest
* @summary test methods on ThreadLocalRandom
*/
@Test
--- a/jdk/test/java/util/logging/Logger/getGlobal/TestGetGlobal.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/java/util/logging/Logger/getGlobal/TestGetGlobal.java Thu Oct 10 13:41:08 2013 -0700
@@ -29,18 +29,18 @@
* @bug 7184195
* @summary checks that java.util.logging.Logger.getGlobal().info() logs without configuration
* @build TestGetGlobal testgetglobal.HandlerImpl testgetglobal.LogManagerImpl1 testgetglobal.LogManagerImpl2 testgetglobal.LogManagerImpl3 testgetglobal.BadLogManagerImpl testgetglobal.DummyLogManagerImpl
- * @run main/othervm/timeout=10 TestGetGlobal
- * @run main/othervm/timeout=10/policy=policy -Djava.security.manager TestGetGlobal
- * @run main/othervm/timeout=10 -Djava.util.logging.manager=testgetglobal.LogManagerImpl1 TestGetGlobal
- * @run main/othervm/timeout=10/policy=policy -Djava.security.manager -Djava.util.logging.manager=testgetglobal.LogManagerImpl1 TestGetGlobal
- * @run main/othervm/timeout=10 -Djava.util.logging.manager=testgetglobal.LogManagerImpl2 TestGetGlobal
- * @run main/othervm/timeout=10/policy=policy -Djava.security.manager -Djava.util.logging.manager=testgetglobal.LogManagerImpl2 TestGetGlobal
- * @run main/othervm/timeout=10 -Djava.util.logging.manager=testgetglobal.LogManagerImpl3 TestGetGlobal
- * @run main/othervm/timeout=10/policy=policy -Djava.security.manager -Djava.util.logging.manager=testgetglobal.LogManagerImpl3 TestGetGlobal
- * @run main/othervm/timeout=10 -Djava.util.logging.manager=testgetglobal.BadLogManagerImpl TestGetGlobal
- * @run main/othervm/timeout=10/policy=policy -Djava.security.manager -Djava.util.logging.manager=testgetglobal.BadLogManagerImpl TestGetGlobal
- * @run main/othervm/timeout=10 -Djava.util.logging.manager=testgetglobal.DummyLogManagerImpl TestGetGlobal
- * @run main/othervm/timeout=10/policy=policy -Djava.security.manager -Djava.util.logging.manager=testgetglobal.DummyLogManagerImpl TestGetGlobal
+ * @run main/othervm TestGetGlobal
+ * @run main/othervm/policy=policy -Djava.security.manager TestGetGlobal
+ * @run main/othervm -Djava.util.logging.manager=testgetglobal.LogManagerImpl1 TestGetGlobal
+ * @run main/othervm/policy=policy -Djava.security.manager -Djava.util.logging.manager=testgetglobal.LogManagerImpl1 TestGetGlobal
+ * @run main/othervm -Djava.util.logging.manager=testgetglobal.LogManagerImpl2 TestGetGlobal
+ * @run main/othervm/policy=policy -Djava.security.manager -Djava.util.logging.manager=testgetglobal.LogManagerImpl2 TestGetGlobal
+ * @run main/othervm -Djava.util.logging.manager=testgetglobal.LogManagerImpl3 TestGetGlobal
+ * @run main/othervm/policy=policy -Djava.security.manager -Djava.util.logging.manager=testgetglobal.LogManagerImpl3 TestGetGlobal
+ * @run main/othervm -Djava.util.logging.manager=testgetglobal.BadLogManagerImpl TestGetGlobal
+ * @run main/othervm/policy=policy -Djava.security.manager -Djava.util.logging.manager=testgetglobal.BadLogManagerImpl TestGetGlobal
+ * @run main/othervm -Djava.util.logging.manager=testgetglobal.DummyLogManagerImpl TestGetGlobal
+ * @run main/othervm/policy=policy -Djava.security.manager -Djava.util.logging.manager=testgetglobal.DummyLogManagerImpl TestGetGlobal
* @author danielfuchs
*/
public class TestGetGlobal {
--- a/jdk/test/java/util/logging/Logger/getGlobal/TestGetGlobalByName.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/java/util/logging/Logger/getGlobal/TestGetGlobalByName.java Thu Oct 10 13:41:08 2013 -0700
@@ -29,18 +29,18 @@
* @bug 7184195
* @summary checks that java.util.logging.Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).info() logs without configuration
* @build TestGetGlobalByName testgetglobal.HandlerImpl testgetglobal.LogManagerImpl1 testgetglobal.LogManagerImpl2 testgetglobal.LogManagerImpl3 testgetglobal.BadLogManagerImpl testgetglobal.DummyLogManagerImpl
- * @run main/othervm/timeout=10 TestGetGlobalByName
- * @run main/othervm/timeout=10/policy=policy -Djava.security.manager TestGetGlobalByName
- * @run main/othervm/timeout=10 -Djava.util.logging.manager=testgetglobal.LogManagerImpl1 TestGetGlobalByName
- * @run main/othervm/timeout=10/policy=policy -Djava.security.manager -Djava.util.logging.manager=testgetglobal.LogManagerImpl TestGetGlobalByName
- * @run main/othervm/timeout=10 -Djava.util.logging.manager=testgetglobal.LogManagerImpl2 TestGetGlobalByName
- * @run main/othervm/timeout=10/policy=policy -Djava.security.manager -Djava.util.logging.manager=testgetglobal.LogManagerImpl2 TestGetGlobalByName
- * @run main/othervm/timeout=10 -Djava.util.logging.manager=testgetglobal.LogManagerImpl3 TestGetGlobalByName
- * @run main/othervm/timeout=10/policy=policy -Djava.security.manager -Djava.util.logging.manager=testgetglobal.LogManagerImpl3 TestGetGlobalByName
- * @run main/othervm/timeout=10 -Djava.util.logging.manager=testgetglobal.BadLogManagerImpl TestGetGlobalByName
- * @run main/othervm/timeout=10/policy=policy -Djava.security.manager -Djava.util.logging.manager=testgetglobal.BadLogManagerImpl TestGetGlobalByName
- * @run main/othervm/timeout=10 -Djava.util.logging.manager=testgetglobal.DummyLogManagerImpl TestGetGlobalByName
- * @run main/othervm/timeout=10/policy=policy -Djava.security.manager -Djava.util.logging.manager=testgetglobal.DummyLogManagerImpl TestGetGlobalByName
+ * @run main/othervm TestGetGlobalByName
+ * @run main/othervm/policy=policy -Djava.security.manager TestGetGlobalByName
+ * @run main/othervm -Djava.util.logging.manager=testgetglobal.LogManagerImpl1 TestGetGlobalByName
+ * @run main/othervm/policy=policy -Djava.security.manager -Djava.util.logging.manager=testgetglobal.LogManagerImpl TestGetGlobalByName
+ * @run main/othervm -Djava.util.logging.manager=testgetglobal.LogManagerImpl2 TestGetGlobalByName
+ * @run main/othervm/policy=policy -Djava.security.manager -Djava.util.logging.manager=testgetglobal.LogManagerImpl2 TestGetGlobalByName
+ * @run main/othervm -Djava.util.logging.manager=testgetglobal.LogManagerImpl3 TestGetGlobalByName
+ * @run main/othervm/policy=policy -Djava.security.manager -Djava.util.logging.manager=testgetglobal.LogManagerImpl3 TestGetGlobalByName
+ * @run main/othervm -Djava.util.logging.manager=testgetglobal.BadLogManagerImpl TestGetGlobalByName
+ * @run main/othervm/policy=policy -Djava.security.manager -Djava.util.logging.manager=testgetglobal.BadLogManagerImpl TestGetGlobalByName
+ * @run main/othervm -Djava.util.logging.manager=testgetglobal.DummyLogManagerImpl TestGetGlobalByName
+ * @run main/othervm/policy=policy -Djava.security.manager -Djava.util.logging.manager=testgetglobal.DummyLogManagerImpl TestGetGlobalByName
* @author danielfuchs
*/
public class TestGetGlobalByName {
--- a/jdk/test/java/util/logging/Logger/getGlobal/TestGetGlobalConcurrent.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/java/util/logging/Logger/getGlobal/TestGetGlobalConcurrent.java Thu Oct 10 13:41:08 2013 -0700
@@ -30,18 +30,18 @@
* @bug 7184195 8021003
* @summary Test that the global logger can log with no configuration when accessed from multiple threads.
* @build TestGetGlobalConcurrent testgetglobal.HandlerImpl testgetglobal.LogManagerImpl1 testgetglobal.LogManagerImpl2 testgetglobal.LogManagerImpl3 testgetglobal.BadLogManagerImpl testgetglobal.DummyLogManagerImpl
- * @run main/othervm/timeout=10 TestGetGlobalConcurrent
- * @run main/othervm/timeout=10/policy=policy -Djava.security.manager TestGetGlobalConcurrent
- * @run main/othervm/timeout=10 -Djava.util.logging.manager=testgetglobal.LogManagerImpl1 TestGetGlobalConcurrent
- * @run main/othervm/timeout=10/policy=policy -Djava.security.manager -Djava.util.logging.manager=testgetglobal.LogManagerImpl1 TestGetGlobalConcurrent
- * @run main/othervm/timeout=10 -Djava.util.logging.manager=testgetglobal.LogManagerImpl2 TestGetGlobalConcurrent
- * @run main/othervm/timeout=10/policy=policy -Djava.security.manager -Djava.util.logging.manager=testgetglobal.LogManagerImpl2 TestGetGlobalConcurrent
- * @run main/othervm/timeout=10 -Djava.util.logging.manager=testgetglobal.LogManagerImpl3 TestGetGlobalConcurrent
- * @run main/othervm/timeout=10/policy=policy -Djava.security.manager -Djava.util.logging.manager=testgetglobal.LogManagerImpl3 TestGetGlobalConcurrent
- * @run main/othervm/timeout=10 -Djava.util.logging.manager=testgetglobal.BadLogManagerImpl TestGetGlobalConcurrent
- * @run main/othervm/timeout=10/policy=policy -Djava.security.manager -Djava.util.logging.manager=testgetglobal.BadLogManagerImpl TestGetGlobalConcurrent
- * @run main/othervm/timeout=10 -Djava.util.logging.manager=testgetglobal.DummyLogManagerImpl TestGetGlobalConcurrent
- * @run main/othervm/timeout=10/policy=policy -Djava.security.manager -Djava.util.logging.manager=testgetglobal.DummyLogManagerImpl TestGetGlobalConcurrent
+ * @run main/othervm TestGetGlobalConcurrent
+ * @run main/othervm/policy=policy -Djava.security.manager TestGetGlobalConcurrent
+ * @run main/othervm -Djava.util.logging.manager=testgetglobal.LogManagerImpl1 TestGetGlobalConcurrent
+ * @run main/othervm/policy=policy -Djava.security.manager -Djava.util.logging.manager=testgetglobal.LogManagerImpl1 TestGetGlobalConcurrent
+ * @run main/othervm -Djava.util.logging.manager=testgetglobal.LogManagerImpl2 TestGetGlobalConcurrent
+ * @run main/othervm/policy=policy -Djava.security.manager -Djava.util.logging.manager=testgetglobal.LogManagerImpl2 TestGetGlobalConcurrent
+ * @run main/othervm -Djava.util.logging.manager=testgetglobal.LogManagerImpl3 TestGetGlobalConcurrent
+ * @run main/othervm/policy=policy -Djava.security.manager -Djava.util.logging.manager=testgetglobal.LogManagerImpl3 TestGetGlobalConcurrent
+ * @run main/othervm -Djava.util.logging.manager=testgetglobal.BadLogManagerImpl TestGetGlobalConcurrent
+ * @run main/othervm/policy=policy -Djava.security.manager -Djava.util.logging.manager=testgetglobal.BadLogManagerImpl TestGetGlobalConcurrent
+ * @run main/othervm -Djava.util.logging.manager=testgetglobal.DummyLogManagerImpl TestGetGlobalConcurrent
+ * @run main/othervm/policy=policy -Djava.security.manager -Djava.util.logging.manager=testgetglobal.DummyLogManagerImpl TestGetGlobalConcurrent
* @author danielfuchs
*/
public class TestGetGlobalConcurrent {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/regex/PatternStreamTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,180 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * @test
+ * @bug 8016846 8024341
+ * @summary Unit tests for wrapping classes should delegate to default methods
+ * @library ../stream/bootlib
+ * @build java.util.stream.OpTestCase
+ * @run testng/othervm PatternStreamTest
+ */
+
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Supplier;
+import java.util.regex.Pattern;
+import java.util.stream.LambdaTestHelpers;
+import java.util.stream.OpTestCase;
+import java.util.stream.Stream;
+import java.util.stream.TestData;
+
+@Test
+public class PatternStreamTest extends OpTestCase {
+
+ @DataProvider(name = "Stream<String>")
+ public static Object[][] makeStreamTestData() {
+ List<Object[]> data = new ArrayList<>();
+
+ String description = "";
+ String input = "awgqwefg1fefw4vssv1vvv1";
+ Pattern pattern = Pattern.compile("4");
+ List<String> expected = new ArrayList<>();
+ expected.add("awgqwefg1fefw");
+ expected.add("vssv1vvv1");
+
+ // Must match the type signature of the consumer of this data, testStrings
+ // String, String, Pattern, List<String>
+ data.add(new Object[]{description, input, pattern, expected});
+
+ input = "afbfq\u00a3abgwgb\u00a3awngnwggw\u00a3a\u00a3ahjrnhneerh";
+ pattern = Pattern.compile("\u00a3a");
+ expected = new ArrayList<>();
+ expected.add("afbfq");
+ expected.add("bgwgb");
+ expected.add("wngnwggw");
+ expected.add("");
+ expected.add("hjrnhneerh");
+
+ data.add(new Object[]{description, input, pattern, expected});
+
+
+ input = "awgqwefg1fefw4vssv1vvv1";
+ pattern = Pattern.compile("1");
+ expected = new ArrayList<>();
+ expected.add("awgqwefg");
+ expected.add("fefw4vssv");
+ expected.add("vvv");
+
+ data.add(new Object[]{description, input, pattern, expected});
+
+
+ input = "a\u4ebafg1fefw\u4eba4\u9f9cvssv\u9f9c1v\u672c\u672cvv";
+ pattern = Pattern.compile("1");
+ expected = new ArrayList<>();
+ expected.add("a\u4ebafg");
+ expected.add("fefw\u4eba4\u9f9cvssv\u9f9c");
+ expected.add("v\u672c\u672cvv");
+
+ data.add(new Object[]{description, input, pattern, expected});
+
+
+ input = "1\u56da23\u56da456\u56da7890";
+ pattern = Pattern.compile("\u56da");
+ expected = new ArrayList<>();
+ expected.add("1");
+ expected.add("23");
+ expected.add("456");
+ expected.add("7890");
+
+ data.add(new Object[]{description, input, pattern, expected});
+
+
+ input = "1\u56da23\u9f9c\u672c\u672c\u56da456\u56da\u9f9c\u672c7890";
+ pattern = Pattern.compile("\u56da");
+ expected = new ArrayList<>();
+ expected.add("1");
+ expected.add("23\u9f9c\u672c\u672c");
+ expected.add("456");
+ expected.add("\u9f9c\u672c7890");
+
+ data.add(new Object[]{description, input, pattern, expected});
+
+
+ input = "";
+ pattern = Pattern.compile("\u56da");
+ expected = new ArrayList<>();
+
+ data.add(new Object[]{description, input, pattern, expected});
+
+
+ description = "Multiple separators";
+ input = "This is,testing: with\tdifferent separators.";
+ pattern = Pattern.compile("[ \t,:.]");
+ expected = new ArrayList<>();
+ expected.add("This");
+ expected.add("is");
+ expected.add("testing");
+ expected.add("");
+ expected.add("with");
+ expected.add("different");
+ expected.add("separators");
+
+
+ description = "Repeated separators within and at end";
+ input = "boo:and:foo";
+ pattern = Pattern.compile("o");
+ expected = new ArrayList<>();
+ expected.add("b");
+ expected.add("");
+ expected.add(":and:f");
+
+
+ description = "Many repeated separators within and at end";
+ input = "booooo:and:fooooo";
+ pattern = Pattern.compile("o");
+ expected = new ArrayList<>();
+ expected.add("b");
+ expected.add("");
+ expected.add("");
+ expected.add("");
+ expected.add("");
+ expected.add(":and:f");
+
+ description = "Many repeated separators before last match";
+ input = "fooooo:";
+ pattern = Pattern.compile("o");
+ expected = new ArrayList<>();
+ expected.add("f");
+ expected.add("");
+ expected.add("");
+ expected.add("");
+ expected.add("");
+ expected.add(":");
+
+ data.add(new Object[] {description, input, pattern, expected});
+ return data.toArray(new Object[0][]);
+ }
+
+ @Test(dataProvider = "Stream<String>")
+ public void testStrings(String description, String input, Pattern pattern, List<String> expected) {
+ Supplier<Stream<String>> ss = () -> pattern.splitAsStream(input);
+ withData(TestData.Factory.ofSupplier(description, ss))
+ .stream(LambdaTestHelpers.identity())
+ .expectedResult(expected)
+ .exercise();
+ }
+}
--- a/jdk/test/java/util/regex/PatternTest.java Thu Oct 10 08:51:55 2013 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,147 +0,0 @@
-/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/**
- * @test
- * @summary Unit tests for wrapping classes should delegate to default methods
- * @library ../stream/bootlib
- * @build java.util.stream.OpTestCase
- * @run testng/othervm PatternTest
- */
-
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.function.Supplier;
-import java.util.regex.Pattern;
-import java.util.stream.LambdaTestHelpers;
-import java.util.stream.OpTestCase;
-import java.util.stream.Stream;
-import java.util.stream.TestData;
-
-@Test
-public class PatternTest extends OpTestCase {
-
- @DataProvider(name = "Stream<String>")
- public static Object[][] makeStreamTestData() {
- List<Object[]> data = new ArrayList<>();
-
- String description = "";
- String input = "awgqwefg1fefw4vssv1vvv1";
- Pattern pattern = Pattern.compile("4");
- List<String> expected = new ArrayList<>();
- expected.add("awgqwefg1fefw");
- expected.add("vssv1vvv1");
-
- // Must match the type signature of the consumer of this data, testStrings
- // String, String, Pattern, List<String>
- data.add(new Object[]{description, input, pattern, expected});
-
- input = "afbfq\u00a3abgwgb\u00a3awngnwggw\u00a3a\u00a3ahjrnhneerh";
- pattern = Pattern.compile("\u00a3a");
- expected = new ArrayList<>();
- expected.add("afbfq");
- expected.add("bgwgb");
- expected.add("wngnwggw");
- expected.add("");
- expected.add("hjrnhneerh");
-
- data.add(new Object[]{description, input, pattern, expected});
-
-
- input = "awgqwefg1fefw4vssv1vvv1";
- pattern = Pattern.compile("1");
- expected = new ArrayList<>();
- expected.add("awgqwefg");
- expected.add("fefw4vssv");
- expected.add("vvv");
-
- data.add(new Object[]{description, input, pattern, expected});
-
-
- input = "a\u4ebafg1fefw\u4eba4\u9f9cvssv\u9f9c1v\u672c\u672cvv";
- pattern = Pattern.compile("1");
- expected = new ArrayList<>();
- expected.add("a\u4ebafg");
- expected.add("fefw\u4eba4\u9f9cvssv\u9f9c");
- expected.add("v\u672c\u672cvv");
-
- data.add(new Object[]{description, input, pattern, expected});
-
-
- input = "1\u56da23\u56da456\u56da7890";
- pattern = Pattern.compile("\u56da");
- expected = new ArrayList<>();
- expected.add("1");
- expected.add("23");
- expected.add("456");
- expected.add("7890");
-
- data.add(new Object[]{description, input, pattern, expected});
-
-
- input = "1\u56da23\u9f9c\u672c\u672c\u56da456\u56da\u9f9c\u672c7890";
- pattern = Pattern.compile("\u56da");
- expected = new ArrayList<>();
- expected.add("1");
- expected.add("23\u9f9c\u672c\u672c");
- expected.add("456");
- expected.add("\u9f9c\u672c7890");
-
- data.add(new Object[]{description, input, pattern, expected});
-
-
- input = "";
- pattern = Pattern.compile("\u56da");
- expected = new ArrayList<>();
-
- data.add(new Object[]{description, input, pattern, expected});
-
-
- description = "Multiple separators";
- input = "This is,testing: with\tdifferent separators.";
- pattern = Pattern.compile("[ \t,:.]");
- expected = new ArrayList<>();
- expected.add("This");
- expected.add("is");
- expected.add("testing");
- expected.add("");
- expected.add("with");
- expected.add("different");
- expected.add("separators");
-
- data.add(new Object[] {description, input, pattern, expected});
- return data.toArray(new Object[0][]);
- }
-
- @Test(dataProvider = "Stream<String>")
- public void testStrings(String description, String input, Pattern pattern, List<String> expected) {
- Supplier<Stream<String>> ss = () -> pattern.splitAsStream(input);
- withData(TestData.Factory.ofSupplier(description, ss))
- .stream(LambdaTestHelpers.identity())
- .expectedResult(expected)
- .exercise();
- }
-}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/management/MBeanInfo/MBeanInfoEqualsNPETest.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,216 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import javax.management.MBeanAttributeInfo;
+import javax.management.MBeanConstructorInfo;
+import javax.management.MBeanFeatureInfo;
+import javax.management.MBeanInfo;
+import javax.management.MBeanNotificationInfo;
+import javax.management.MBeanOperationInfo;
+import javax.management.MBeanParameterInfo;
+import javax.management.modelmbean.DescriptorSupport;
+import javax.management.openmbean.SimpleType;
+
+/*
+ * @test
+ * @bug 8023954
+ * @summary Test that MBean*Info.equals do not throw NPE
+ * @author Shanliang JIANG
+ * @run clean MBeanInfoEqualsNPETest
+ * @run build MBeanInfoEqualsNPETest
+ * @run main MBeanInfoEqualsNPETest
+ */
+public class MBeanInfoEqualsNPETest {
+ private static int failed = 0;
+
+ public static void main(String[] args) throws Exception {
+ System.out.println("---MBeanInfoEqualsNPETest-main ...");
+
+ // ----
+ System.out.println("\n---Testing on MBeanAttributeInfo...");
+ MBeanAttributeInfo mbeanAttributeInfo0 = new MBeanAttributeInfo(
+ "name", SimpleType.INTEGER.getClassName(), "description", true, true, false);
+ MBeanAttributeInfo mbeanAttributeInfo = new MBeanAttributeInfo(
+ null, SimpleType.INTEGER.getClassName(), "description", true, true, false);
+ test(mbeanAttributeInfo0, mbeanAttributeInfo, "class name");
+
+ mbeanAttributeInfo = new MBeanAttributeInfo(
+ "name", null, "description", true, true, false);
+ test(mbeanAttributeInfo0, mbeanAttributeInfo, "type");
+
+ mbeanAttributeInfo = new MBeanAttributeInfo(
+ "name", SimpleType.INTEGER.getClassName(), null, true, true, false);
+ test(mbeanAttributeInfo0, mbeanAttributeInfo, "description");
+
+ // ----
+ System.out.println("\n---Testing on MBeanConstructorInfo...");
+ MBeanConstructorInfo mbeanConstructorInfo0 = new MBeanConstructorInfo(
+ "", "", new MBeanParameterInfo[]{}, new DescriptorSupport());
+ MBeanConstructorInfo mbeanConstructorInfo = new MBeanConstructorInfo(
+ null, "", new MBeanParameterInfo[]{}, new DescriptorSupport());
+ test(mbeanConstructorInfo0, mbeanConstructorInfo, "name");
+
+ mbeanConstructorInfo = new MBeanConstructorInfo(
+ "", null, new MBeanParameterInfo[]{}, new DescriptorSupport());
+ test(mbeanConstructorInfo0, mbeanConstructorInfo, "description");
+
+ mbeanConstructorInfo = new MBeanConstructorInfo(
+ "", "", null, new DescriptorSupport());
+ test(mbeanConstructorInfo0, mbeanConstructorInfo, "MBeanParameterInfo");
+
+ mbeanConstructorInfo = new MBeanConstructorInfo(
+ "", "", new MBeanParameterInfo[]{}, null);
+ test(mbeanConstructorInfo0, mbeanConstructorInfo, "descriptor");
+
+ // ----
+ System.out.println("\n---Testing on MBeanOperationInfo...");
+ MBeanOperationInfo mbeanOperationInfo0 = new MBeanOperationInfo(
+ "name", "description", new MBeanParameterInfo[]{}, "type",
+ MBeanOperationInfo.UNKNOWN, new DescriptorSupport());
+
+ MBeanOperationInfo mbeanOperationInfo = new MBeanOperationInfo(
+ null, "description", new MBeanParameterInfo[]{}, "type",
+ MBeanOperationInfo.UNKNOWN, new DescriptorSupport());
+ test(mbeanOperationInfo0, mbeanOperationInfo, "name");
+
+ mbeanOperationInfo = new MBeanOperationInfo(
+ "name", null, new MBeanParameterInfo[]{}, "type",
+ MBeanOperationInfo.UNKNOWN, new DescriptorSupport());
+ test(mbeanOperationInfo0, mbeanOperationInfo, "description");
+
+ mbeanOperationInfo = new MBeanOperationInfo(
+ "name", "description", null, "type", 1, new DescriptorSupport());
+ test(mbeanOperationInfo0, mbeanOperationInfo, "MBeanParameterInfo");
+
+ mbeanOperationInfo = new MBeanOperationInfo(
+ "name", "description", new MBeanParameterInfo[]{}, null,
+ MBeanOperationInfo.UNKNOWN, new DescriptorSupport());
+ test(mbeanOperationInfo0, mbeanOperationInfo, "type");
+
+ mbeanOperationInfo = new MBeanOperationInfo(
+ "name", "description", new MBeanParameterInfo[]{}, null,
+ MBeanOperationInfo.UNKNOWN, null);
+ test(mbeanOperationInfo0, mbeanOperationInfo, "Descriptor");
+
+ // ----
+ System.out.println("\n---Testing on MBeanParameterInfo...");
+ MBeanParameterInfo mbeanParameterInfo0 = new MBeanParameterInfo(
+ "name", "type", "description", new DescriptorSupport());
+ MBeanParameterInfo mbeanParameterInfo = new MBeanParameterInfo(
+ null, "type", "description", new DescriptorSupport());
+ test(mbeanParameterInfo0, mbeanParameterInfo, "name");
+
+ mbeanParameterInfo = new MBeanParameterInfo(
+ "name", null, "description", new DescriptorSupport());
+ test(mbeanParameterInfo0, mbeanParameterInfo, "type");
+
+ mbeanParameterInfo = new MBeanParameterInfo(
+ "name", "type", null, new DescriptorSupport());
+ test(mbeanParameterInfo0, mbeanParameterInfo, "description");
+
+ mbeanParameterInfo = new MBeanParameterInfo(
+ "name", "type", "description", null);
+ test(mbeanParameterInfo0, mbeanParameterInfo, "Descriptor");
+
+ // ----
+ System.out.println("\n---Testing on MBeanFeatureInfo ...");
+ MBeanFeatureInfo mbeanFeatureInfo0 = new MBeanFeatureInfo(
+ "name", "description", new DescriptorSupport());
+ MBeanFeatureInfo mbeanFeatureInfo = new MBeanFeatureInfo(
+ null, "description", new DescriptorSupport());
+ test(mbeanFeatureInfo0, mbeanFeatureInfo, "name");
+
+ mbeanFeatureInfo = new MBeanFeatureInfo(
+ "name", null, new DescriptorSupport());
+ test(mbeanParameterInfo0, mbeanParameterInfo, "description");
+
+ mbeanFeatureInfo = new MBeanFeatureInfo(
+ "name", "description", null);
+ test(mbeanParameterInfo0, mbeanParameterInfo, "Descriptor");
+
+ // ----
+ System.out.println("\n---Testing on MBeanInfo...");
+ String className = "toto";
+ String description = "titi";
+ MBeanAttributeInfo[] attrInfos = new MBeanAttributeInfo[]{};
+ MBeanConstructorInfo[] constrInfos = new MBeanConstructorInfo[]{};
+ MBeanOperationInfo[] operaInfos = new MBeanOperationInfo[]{};
+ MBeanNotificationInfo[] notifInfos = new MBeanNotificationInfo[]{};
+
+ MBeanInfo minfo0 = new MBeanInfo("toto", description, attrInfos, constrInfos, operaInfos, notifInfos);
+ MBeanInfo minfo = new MBeanInfo(null, description, attrInfos, constrInfos, operaInfos, notifInfos);
+ test(minfo0, minfo, "class name");
+
+ minfo = new MBeanInfo(className, null, attrInfos, constrInfos, operaInfos, notifInfos);
+ test(minfo0, minfo, "description");
+
+ minfo = new MBeanInfo(className, description, null, constrInfos, operaInfos, notifInfos);
+ test(minfo0, minfo, "attrInfos");
+
+ minfo = new MBeanInfo(className, description, attrInfos, null, operaInfos, notifInfos);
+ test(minfo0, minfo, "constrInfos");
+
+ minfo = new MBeanInfo(className, description, attrInfos, constrInfos, null, notifInfos);
+ test(minfo0, minfo, "operaInfos");
+
+ minfo = new MBeanInfo(className, description, attrInfos, constrInfos, operaInfos, null);
+ test(minfo0, minfo, "notifInfos");
+
+ if (failed > 0) {
+ throw new RuntimeException("Test failed: "+failed);
+ } else {
+ System.out.println("---Test: PASSED");
+ }
+ }
+
+ private static void test(Object obj1, Object obj2, String param) {
+ try {
+ obj1.equals(obj2);
+ System.out.println("OK-1: "+obj1.getClass().getSimpleName()+".equals worked with a null paramer: "+param);
+ } catch (NullPointerException npe) {
+ System.out.println("--->KO-1!!! "+obj1.getClass().getSimpleName()+".equals got NPE with a null paramer: "+param);
+ npe.printStackTrace();
+ failed++;
+ }
+
+ try {
+ obj2.equals(obj1);
+ System.out.println("OK-2: "+obj2.getClass().getSimpleName()+".equals worked with a null paramer: "+param);
+ } catch (NullPointerException npe) {
+ System.out.println("--->KO-2!!! "+obj2.getClass().getSimpleName()+".equals got NPE with a null paramer: "+param);
+ npe.printStackTrace();
+ failed++;
+ }
+
+ try {
+ obj1.equals(null);
+ obj2.equals(null);
+
+ System.out.println("OK-3: "+obj1.getClass().getSimpleName()+".equals worked with a null field.");
+ } catch (NullPointerException npe) {
+ System.out.println("--->KO-3!!! "+obj1.getClass().getSimpleName()+".equals got NPE with a null field.");
+ npe.printStackTrace();
+ failed++;
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JComboBox/6236162/bug6236162.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,119 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+/* @test
+ @bug 6236162
+ @summary Checks that there is no an inconsistence in combo box
+ behavior when user points an item in combo popup
+ by mouse and then uses UP/DOWN keys.
+ @library ../../regtesthelpers
+ @build Util
+ @author Mikhail Lapshin
+ @run main bug6236162
+*/
+
+import sun.awt.SunToolkit;
+
+import javax.swing.*;
+import javax.swing.plaf.basic.*;
+import javax.swing.plaf.metal.MetalComboBoxUI;
+import java.awt.*;
+import java.awt.event.KeyEvent;
+
+public class bug6236162 {
+ private static final SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+ private static JFrame frame;
+ private static JComboBox combo;
+ private static MyComboUI comboUI;
+
+ public static void main(String[] args) throws Exception {
+ UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ createAndShowGUI();
+ }
+ });
+ toolkit.realSync();
+ test();
+ System.out.println("Test passed");
+ }
+
+ private static void createAndShowGUI() {
+ frame = new JFrame("bug6236162");
+
+ combo = new JComboBox(new String[]{"one", "two", "three", "four", "five"});
+ combo.setEditable(true);
+ comboUI = new MyComboUI();
+ combo.setUI(comboUI);
+ combo.setSelectedIndex(3);
+ frame.getContentPane().add(combo);
+
+ frame.pack();
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ frame.setLocationRelativeTo(null);
+ frame.setVisible(true);
+ }
+
+ private static void test() throws AWTException {
+ Robot robot = new Robot();
+ robot.setAutoDelay(50);
+
+ // Open popup menu
+ realSync();
+ Util.hitKeys(robot, KeyEvent.VK_DOWN);
+
+ // Move mouse to the first popup menu item
+ realSync();
+ Point p = combo.getLocationOnScreen();
+ Dimension size = combo.getSize();
+ p.x += size.width / 2;
+ p.y += size.height;
+ float dy = 1;
+ robot.mouseMove(p.x, p.y - 5);
+ for (int i=1; i <= 10; i++) {
+ robot.mouseMove((int)(p.x), (int)(p.y - 5 + dy*i));
+ }
+
+ // Select the second popup menu item
+ realSync();
+ Util.hitKeys(robot, KeyEvent.VK_DOWN);
+
+ realSync();
+ JList list = comboUI.getComboPopup().getList();
+ if (list.getSelectedIndex() != 1) {
+ throw new RuntimeException("There is an inconsistence in combo box " +
+ "behavior when user points an item in combo popup " +
+ "by mouse and then uses UP/DOWN keys.");
+ }
+ }
+
+ private static void realSync() {
+ ((SunToolkit)Toolkit.getDefaultToolkit()).realSync();
+ }
+
+ // Gives access to BasicComboBoxUI.popup field
+ private static class MyComboUI extends MetalComboBoxUI {
+ public ComboPopup getComboPopup() {
+ return popup;
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JComboBox/7195179/Test7195179.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.Component;
+import javax.swing.GroupLayout;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.ListCellRenderer;
+import javax.swing.plaf.basic.BasicComboBoxRenderer;
+
+import static javax.swing.SwingUtilities.invokeAndWait;
+
+/*
+ * @test
+ * @bug 7195179
+ * @summary Tests that combobox works with generified renderers
+ * @author Sergey Malenkov
+ */
+
+public class Test7195179 {
+ public static void main(String[] args) throws Exception {
+ invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ Integer[] items = {null, 1, 2, 3};
+ JComboBox<Integer> combo = new JComboBox<>(items);
+ JLabel label = new JLabel("choose:");
+ JPanel panel = new JPanel();
+ GroupLayout layout = new GroupLayout(panel);
+ panel.setLayout(layout);
+ label.setLabelFor(combo);
+ combo.setSelectedIndex(0);
+ combo.setRenderer(new ListCellRenderer<Integer>() {
+ private final BasicComboBoxRenderer renderer = new BasicComboBoxRenderer();
+
+ @Override
+ public Component getListCellRendererComponent(JList<? extends Integer> list, Integer value, int index, boolean isSelected, boolean cellHasFocus) {
+ return this.renderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
+ }
+ });
+ layout.setAutoCreateContainerGaps(true);
+ layout.setAutoCreateGaps(true);
+ layout.setHorizontalGroup(layout.createSequentialGroup()
+ .addGroup(layout.createParallelGroup().addComponent(label))
+ .addGroup(layout.createParallelGroup().addComponent(combo)));
+ layout.setVerticalGroup(layout
+ .createSequentialGroup()
+ .addGroup(layout
+ .createParallelGroup(GroupLayout.Alignment.BASELINE)
+ .addComponent(label)
+ .addComponent(combo)));
+
+ JFrame frame = new JFrame(getClass().getSimpleName());
+ frame.add(panel);
+ frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
+ frame.pack();
+ frame.setVisible(true);
+ }
+ });
+ }
+}
--- a/jdk/test/javax/swing/JFileChooser/4150029/bug4150029.html Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/javax/swing/JFileChooser/4150029/bug4150029.html Thu Oct 10 13:41:08 2013 -0700
@@ -1,6 +1,38 @@
<html>
+<!--
+ Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ This code is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License version 2 only, as
+ published by the Free Software Foundation.
+
+ This code is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ version 2 for more details (a copy is included in the LICENSE file that
+ accompanied this code).
+
+ You should have received a copy of the GNU General Public License version
+ 2 along with this work; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ or visit www.oracle.com if you need additional information or have any
+ questions.
+-->
+
+<!--
+ @test
+ @bug 4150029 8006087
+ @summary BackSpace keyboard button does not lead to parent directory
+ @author Oleg Mokhovikov
+ @run applet/manual=done bug4150029.html
+-->
+
<body>
<applet code="bug4150029.class" width=200 height=200></applet>
+Follow the instructions below.
1.Go into 'subDir' folder.
2.Press BACKSPACE key.
3.Push OPEN button.
--- a/jdk/test/javax/swing/JFileChooser/4150029/bug4150029.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/javax/swing/JFileChooser/4150029/bug4150029.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -21,11 +21,10 @@
* questions.
*/
-/* @test
- @bug 4150029
- @summary BackSpace keyboard button does not lead to parent directory
- @author Oleg Mokhovikov
- @run applet/manual=done bug4150029.html
+/*
+ bug 4150029 8006087
+ summary BackSpace keyboard button does not lead to parent directory
+ author Oleg Mokhovikov
*/
import javax.swing.*;
@@ -36,6 +35,14 @@
private boolean res;
public void init() {
+ if (sun.awt.OSInfo.getOSType() == sun.awt.OSInfo.OSType.MACOSX) {
+ try {
+ UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
String tmpDir = System.getProperty("java.io.tmpdir");
if (tmpDir.length() == 0) {//'java.io.tmpdir' isn't guaranteed to be defined
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JFileChooser/7199708/bug7199708.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,158 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Point;
+import java.awt.Robot;
+import java.awt.Toolkit;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
+import java.io.File;
+import java.io.IOException;
+import javax.swing.JFileChooser;
+import javax.swing.SwingUtilities;
+
+import java.nio.file.Files;
+import javax.swing.AbstractButton;
+import javax.swing.JTable;
+import javax.swing.UIManager;
+import sun.awt.SunToolkit;
+
+/**
+ * @test
+ * @bug 7199708
+ * @author Alexander Scherbatiy
+ * @summary FileChooser crashs when opening large folder
+ * @run main bug7199708
+ */
+public class bug7199708 {
+
+ private static int FILE_NUMBER = 30000;
+ private static volatile JFileChooser fileChooser;
+ private static volatile int locationX;
+ private static volatile int locationY;
+ private static volatile int width;
+
+ public static void main(String[] args) throws Exception {
+
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+ Robot robot = new Robot();
+ robot.setAutoDelay(50);
+
+ final File folder = createLargeFolder();
+ UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
+
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ fileChooser = new JFileChooser(folder);
+ fileChooser.showSaveDialog(null);
+ }
+ });
+
+ toolkit.realSync();
+
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ final String detailsTooltip = UIManager.getString("FileChooser."
+ + "detailsViewButtonToolTipText", fileChooser.getLocale());
+
+ doAction(fileChooser, new ComponentAction() {
+ @Override
+ public boolean accept(Component component) {
+ return (component instanceof AbstractButton)
+ && detailsTooltip.equals(
+ ((AbstractButton) component).getToolTipText());
+ }
+
+ @Override
+ public void perform(Component component) {
+ ((AbstractButton) component).doClick();
+ }
+ });
+
+ doAction(fileChooser, new ComponentAction() {
+ @Override
+ public boolean accept(Component component) {
+ return (component instanceof JTable);
+ }
+
+ @Override
+ public void perform(Component component) {
+ Point tableLocation = component.getLocationOnScreen();
+ locationX = (int) tableLocation.getX();
+ locationY = (int) tableLocation.getY();
+ width = (int) fileChooser.getBounds().getWidth();
+ }
+ });
+ }
+ });
+
+ toolkit.realSync();
+
+ int d = 25;
+ for (int i = 0; i < width / d; i++) {
+ robot.mouseMove(locationX + i * d, locationY + 5);
+ robot.mousePress(InputEvent.BUTTON1_MASK);
+ robot.mouseRelease(InputEvent.BUTTON1_MASK);
+ toolkit.realSync();
+ }
+
+ robot.keyPress(KeyEvent.VK_ESCAPE);
+ robot.keyRelease(KeyEvent.VK_ESCAPE);
+ }
+
+ static void doAction(Component component, ComponentAction action) {
+ if (action.accept(component)) {
+ action.perform(component);
+ } else if (component instanceof Container) {
+ for (Component comp : ((Container) component).getComponents()) {
+ doAction(comp, action);
+ }
+ }
+ }
+
+ private static File createLargeFolder() {
+ try {
+
+ File largeFolder = Files.createTempDirectory("large_folder").toFile();
+ largeFolder.deleteOnExit();
+
+ for (int i = 0; i < FILE_NUMBER; i++) {
+ File file = new File(largeFolder, "File_" + i + ".txt");
+ file.createNewFile();
+ file.deleteOnExit();
+ }
+ return largeFolder;
+ } catch (IOException ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+
+ interface ComponentAction {
+
+ boolean accept(Component component);
+
+ void perform(Component component);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JFileChooser/8002077/bug8002077.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.Robot;
+import java.awt.Toolkit;
+import java.awt.event.KeyEvent;
+import javax.swing.JFileChooser;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+import javax.swing.UIManager.LookAndFeelInfo;
+import sun.awt.SunToolkit;
+
+/**
+ * @test
+ * @bug 8002077
+ * @author Alexander Scherbatiy
+ * @summary Possible mnemonic issue on JFileChooser Save button on nimbus L&F
+ * @library ../../regtesthelpers/
+ * @build Util
+ * @run main bug8002077
+ */
+public class bug8002077 {
+
+ private static volatile int fileChooserState = JFileChooser.ERROR_OPTION;
+
+ public static void main(String[] args) throws Exception {
+ for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
+ if ("Nimbus".equals(info.getName())) {
+ UIManager.setLookAndFeel(info.getClassName());
+ runTest();
+ break;
+ }
+ }
+ }
+
+ private static void runTest() throws Exception {
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+ Robot robot = new Robot();
+ robot.setAutoDelay(50);
+
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ fileChooserState = new JFileChooser().showSaveDialog(null);
+ }
+ });
+ toolkit.realSync();
+
+ Util.hitMnemonics(robot, KeyEvent.VK_N);
+ toolkit.realSync();
+
+ robot.keyPress(KeyEvent.VK_A);
+ robot.keyRelease(KeyEvent.VK_A);
+ toolkit.realSync();
+
+ Util.hitMnemonics(robot, KeyEvent.VK_S);
+ toolkit.realSync();
+
+ if (fileChooserState != JFileChooser.APPROVE_OPTION) {
+ throw new RuntimeException("Save button is not pressed!");
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JFileChooser/8021253/bug8021253.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.awt.BorderLayout;
+import java.awt.Robot;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import javax.swing.JFileChooser;
+import javax.swing.JFrame;
+import javax.swing.SwingUtilities;
+import sun.awt.SunToolkit;
+
+/**
+ * @test
+ * @bug 8021253
+ * @author Alexander Scherbatiy
+ * @summary JFileChooser does not react on pressing enter since java 7
+ * @run main bug8021253
+ */
+
+public class bug8021253 {
+
+ private static volatile boolean defaultKeyPressed;
+ private static JFileChooser fileChooser;
+ private static File file;
+
+ public static void main(String[] args) throws Exception {
+
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+ Robot robot = new Robot();
+ robot.setAutoDelay(50);
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ createAndShowGUI();
+ }
+ });
+
+ toolkit.realSync();
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ fileChooser.setSelectedFile(file);
+ }
+ });
+
+ toolkit.realSync();
+
+ robot.keyPress(KeyEvent.VK_ENTER);
+ robot.keyRelease(KeyEvent.VK_ENTER);
+ toolkit.realSync();
+
+ if (!defaultKeyPressed) {
+ throw new RuntimeException("Default button is not pressed");
+ }
+ }
+
+ private static void createAndShowGUI() {
+
+ file = getTempFile();
+
+ final JFrame frame = new JFrame("Test");
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ frame.setSize(200, 300);
+
+ fileChooser = new JFileChooser(file.getParentFile());
+ fileChooser.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ defaultKeyPressed = true;
+ frame.dispose();
+ }
+ });
+
+ frame.getContentPane().add(BorderLayout.CENTER, fileChooser);
+ frame.setSize(fileChooser.getPreferredSize());
+ frame.setVisible(true);
+ }
+
+ private static File getTempFile() {
+ try {
+ File temp = File.createTempFile("test", ".txt");
+ temp.deleteOnExit();
+ return temp;
+ } catch (IOException ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JInternalFrame/4193219/IconCoord.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,161 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+/*
+ @test
+ @bug 4193219
+ @summary
+ @author Your Name: Hania Gajewska area=swing
+ @run main/manual IconCoord
+*/
+
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+
+public class IconCoord {
+ static Test test = new Test();
+
+ public static void main(String[] args) throws Exception {
+ UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ new IconCoord().createAndShowGUI();
+ }
+ });
+ test.waitTestResult();
+ }
+
+ private void createAndShowGUI() {
+ StringBuilder instrText = new StringBuilder();
+ instrText.append("First, iconify internal frame \"Frame 1\" by clicking on its iconify button.\n");
+ instrText.append("Now, maximize the top-level window \"IconCoord\".\n");
+ instrText.append("The \"Frame 1\" icon should stay in the lower left corner of the desktop; ");
+ instrText.append("if it doesn't, press \"Fail\".\n");
+ instrText.append("Now move the icon to the middle of the desktop by dragging it by its ");
+ instrText.append("bumpy left side. Then iconify \"Frame 2\" by clicking on its iconify button.\n");
+ instrText.append("If the icon for frame two gets placed in the lower left corner of the ");
+ instrText.append("desktop (where the icon for \"Frame 1\" used to be before you moved it), ");
+ instrText.append("press \"Pass\". Otherwise, press \"Fail\".\n");
+
+ JDesktopPane dt = new JDesktopPane();
+
+ JButton tf;
+ JInternalFrame if1 = new JInternalFrame("Frame 1", false, false, false, true);
+ JComponent c = (JComponent) if1.getContentPane();
+ c.setLayout(new BorderLayout());
+
+ tf = new JButton ("ignore");
+ c.add (tf, BorderLayout.NORTH);
+
+ tf = new JButton ("ignore");
+ c.add (tf, BorderLayout.CENTER);
+
+ JInternalFrame if2 = new JInternalFrame("Frame 2", false, false, false, true);
+ c = (JComponent) if2.getContentPane();
+ c.setLayout(new BorderLayout());
+
+ tf = new JButton ("ignore");
+ c.add (tf, BorderLayout.NORTH);
+
+ tf = new JButton ("ignore");
+ c.add (tf, BorderLayout.CENTER);
+
+ if1.pack();
+ if1.setBounds(300, 0, 300, 80);
+ if2.pack();
+ if2.setBounds(0, 0, 300, 80);
+ dt.add(if1);
+ dt.add(if2);
+
+ if1.setVisible(true);
+ if2.setVisible(true);
+
+ int frameHeight = 500;
+
+ JScrollPane dtScrollPane = new JScrollPane(dt);
+ JFrame frame = test.createTestFrame("IconCoord", dtScrollPane, instrText.toString(), 250);
+ dt.setPreferredSize(new Dimension(650, frameHeight - 250));
+ frame.setSize (600,500);
+ frame.setVisible(true);
+ }
+
+ static class Test {
+ private boolean pass;
+ JFrame createTestFrame(String name, Component topComponent, String instructions, int instrHeight) {
+ final String PASS = "Pass";
+ final String FAIL = "Fail";
+ JFrame frame = new JFrame(name);
+ frame.setLayout(new BorderLayout());
+
+ JPanel testButtonsPanel = new JPanel();
+ testButtonsPanel.setMaximumSize(new Dimension(Integer.MAX_VALUE, 20));
+
+ ActionListener btnAL = new ActionListener() {
+ public void actionPerformed(ActionEvent event) {
+ switch (event.getActionCommand()) {
+ case PASS:
+ pass();
+ break;
+ default:
+ throw new RuntimeException("Test failed.");
+ }
+ }
+ };
+ JButton passBtn = new JButton(PASS);
+ passBtn.addActionListener(btnAL);
+ passBtn.setActionCommand(PASS);
+
+ JButton failBtn = new JButton(FAIL);
+ failBtn.addActionListener(btnAL);
+ failBtn.setActionCommand(FAIL);
+
+ testButtonsPanel.add(BorderLayout.WEST, passBtn);
+ testButtonsPanel.add(BorderLayout.EAST, failBtn);
+
+ JTextArea instrText = new JTextArea();
+ instrText.setLineWrap(true);
+ instrText.setEditable(false);
+ JScrollPane instrScrollPane = new JScrollPane(instrText);
+ instrScrollPane.setMaximumSize(new Dimension(Integer.MAX_VALUE, instrHeight));
+ instrText.append(instructions);
+
+ JPanel servicePanel = new JPanel();
+ servicePanel.setLayout(new BorderLayout());
+ servicePanel.add(BorderLayout.CENTER, instrScrollPane);
+ servicePanel.add(BorderLayout.SOUTH, testButtonsPanel);
+
+ frame.add(BorderLayout.SOUTH, servicePanel);
+ frame.add(BorderLayout.CENTER, topComponent);
+ return frame;
+ }
+ synchronized void pass() {
+ pass = true;
+ notifyAll();
+ }
+ synchronized void waitTestResult() throws InterruptedException {
+ while (!pass) {
+ wait();
+ }
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JInternalFrame/4251301/bug4251301.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,139 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+/* @test
+ @bug 4251301
+ @summary Keybinding for show/hide the system menu.
+ @author Andrey Pikalev
+ @run main/manual bug4251301
+*/
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.beans.*;
+import sun.awt.OSInfo;
+import sun.awt.SunToolkit;
+
+
+public class bug4251301 {
+ private static final SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+ static Test test = new Test();
+ public static void main(String[] args) throws Exception {
+ if (OSInfo.getOSType() == OSInfo.OSType.MACOSX) {
+ System.out.println("This test is not applicable for MacOS. Passed.");
+ return;
+ }
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ createAndShowGUI();
+ }
+ });
+ toolkit.realSync();
+ test.waitTestResult();
+ }
+
+ public static void createAndShowGUI() {
+ final StringBuilder instructions = new StringBuilder();
+ instructions.append("Click with your mouse the content area of the internal frame with the title \"IFrame\" ");
+ instructions.append("and press Ctrl+Space. \n");
+ instructions.append("If the system menu shows up, press Esc. Then system menu should hide. \n");
+ instructions.append("If you success then press \"Pass\", else press \"Fail\".\n");
+
+ JDesktopPane dp = new JDesktopPane();
+ JInternalFrame jif = new JInternalFrame("IFrame",true,true,true,true);
+ dp.add(jif);
+ jif.setBounds(20, 20, 220, 100);
+ jif.setVisible(true);
+ try {
+ jif.setSelected(true);
+ } catch(PropertyVetoException pve) {
+ pve.printStackTrace();
+ throw new Error("Occures PropertyVetoException while set selection...");
+ }
+ JScrollPane dtScrollPane = new JScrollPane(dp);
+ JFrame testFrame = test.createTestFrame("Instructions", dtScrollPane, instructions.toString(), 500);
+ testFrame.setSize(500, 400);
+ testFrame.setVisible(true);
+ }
+ static class Test {
+ private boolean pass;
+ JFrame createTestFrame(String name, Component topComponent, String instructions, int instrHeight) {
+ final String PASS = "Pass";
+ final String FAIL = "Fail";
+ JFrame frame = new JFrame(name);
+ frame.setLayout(new BorderLayout());
+
+ JPanel testButtonsPanel = new JPanel();
+ testButtonsPanel.setMaximumSize(new Dimension(Integer.MAX_VALUE, 20));
+
+ ActionListener btnAL = new ActionListener() {
+ public void actionPerformed(ActionEvent event) {
+ switch (event.getActionCommand()) {
+ case PASS:
+ pass();
+ break;
+ default:
+ throw new RuntimeException("Test failed.");
+ }
+ }
+ };
+ JButton passBtn = new JButton(PASS);
+ passBtn.addActionListener(btnAL);
+ passBtn.setActionCommand(PASS);
+
+ JButton failBtn = new JButton(FAIL);
+ failBtn.addActionListener(btnAL);
+ failBtn.setActionCommand(FAIL);
+
+ testButtonsPanel.add(BorderLayout.WEST, passBtn);
+ testButtonsPanel.add(BorderLayout.EAST, failBtn);
+
+ JTextArea instrText = new JTextArea();
+ instrText.setLineWrap(true);
+ instrText.setEditable(false);
+ JScrollPane instrScrollPane = new JScrollPane(instrText);
+ instrScrollPane.setMaximumSize(new Dimension(Integer.MAX_VALUE, instrHeight));
+ instrText.append(instructions);
+
+ JPanel servicePanel = new JPanel();
+ servicePanel.setLayout(new BorderLayout());
+ servicePanel.add(BorderLayout.CENTER, instrScrollPane);
+ servicePanel.add(BorderLayout.SOUTH, testButtonsPanel);
+
+ frame.add(BorderLayout.SOUTH, servicePanel);
+ frame.add(BorderLayout.CENTER, topComponent);
+ return frame;
+ }
+ synchronized void pass() {
+ pass = true;
+ notifyAll();
+ }
+ synchronized void waitTestResult() throws InterruptedException {
+ while (!pass) {
+ wait();
+ }
+ }
+ }
+}
--- a/jdk/test/javax/swing/JInternalFrame/InternalFrameIsNotCollectedTest.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/javax/swing/JInternalFrame/InternalFrameIsNotCollectedTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -27,19 +27,19 @@
@author mcherkas
@run main InternalFrameIsNotCollectedTest
*/
-
import sun.awt.SunToolkit;
import javax.swing.*;
import java.awt.*;
-import java.awt.event.KeyEvent;
import java.beans.PropertyVetoException;
import java.util.Date;
public class InternalFrameIsNotCollectedTest {
- public static final int waitTime = 10000;
+ public static final int maxWaitTime = 100000;
+ public static final int waitTime = 5000;
private static Robot robot;
+ private static CustomInternalFrame iFrame;
public static void sync() {
@@ -62,12 +62,13 @@
});
sync();
invokeGC();
+ System.runFinalization();
Thread.sleep(1000); // it's better to wait 1 sec now then 10 sec later
Date startWaiting = new Date();
synchronized (CustomInternalFrame.waiter) {
// Sync with finalization thread.
Date now = new Date();
- while (now.getTime() - startWaiting.getTime() < waitTime && !CustomInternalFrame.finalized) {
+ while (now.getTime() - startWaiting.getTime() < maxWaitTime && !CustomInternalFrame.finalized) {
CustomInternalFrame.waiter.wait(waitTime);
now = new Date();
}
@@ -83,10 +84,8 @@
}
private static void closeInternalFrame() throws PropertyVetoException {
- robot.keyPress(KeyEvent.VK_CONTROL);
- robot.keyPress(KeyEvent.VK_F4);
- robot.keyRelease(KeyEvent.VK_F4);
- robot.keyRelease(KeyEvent.VK_CONTROL);
+ iFrame.setClosed(true);
+ iFrame = null;
}
private static void initUI() {
@@ -96,7 +95,7 @@
desktopPane.setDesktopManager(new DefaultDesktopManager());
frame.getContentPane().add(desktopPane, BorderLayout.CENTER);
- CustomInternalFrame iFrame = new CustomInternalFrame("Dummy Frame");
+ iFrame = new CustomInternalFrame("Dummy Frame");
iFrame.setSize(200, 200);
iFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JMenuBar/4750590/bug4750590.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ @library ../../regtesthelpers
+ @build Util
+ @bug 4750590 8015597
+ @summary SwingSet: Cannot change Themes using menu accelerators
+ @author Alexander Zuev
+ @run main bug4750590
+ */
+
+import javax.swing.*;
+import java.awt.event.*;
+import java.awt.*;
+
+public class bug4750590 {
+
+ public static PassedListener pass = new PassedListener();
+ public static volatile boolean passed = false;
+
+ public static void main(String args[]) throws Throwable {
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ createAndShowGUI();
+ }
+ });
+
+ sun.awt.SunToolkit toolkit = (sun.awt.SunToolkit) Toolkit.getDefaultToolkit();
+ toolkit.realSync();
+
+ Robot robo = new Robot();
+ robo.setAutoDelay(500);
+ Util.hitMnemonics(robo, KeyEvent.VK_F);
+ robo.keyPress(KeyEvent.VK_M);
+ robo.keyRelease(KeyEvent.VK_M);
+
+ toolkit.realSync();
+
+ if (passed) {
+ System.out.println("Test passed!");
+ } else {
+ throw new RuntimeException("Test FAILED!");
+ }
+ }
+
+ private static void createAndShowGUI() {
+ JFrame mainFrame = new JFrame("Bug 4750590");
+ JMenuBar mbar = new JMenuBar();
+ JMenu menu = new JMenu("File");
+ menu.setMnemonic('F');
+ JMenu submenu = new JMenu("Submenu");
+ submenu.add(new JMenuItem("SubMenu Item 1")).setMnemonic('S');
+ submenu.add(new JMenuItem("SubMenu Item 2"));
+ menu.add(submenu);
+
+ menu.add(new JMenuItem("Menu Item 1"));
+ JMenuItem menuItem = menu.add(new JMenuItem("Menu Item 2"));
+ menuItem.setMnemonic('M');
+ menuItem.addActionListener(pass);
+ mbar.add(menu);
+ mainFrame.setJMenuBar(mbar);
+
+ mainFrame.setSize(200, 200);
+ mainFrame.setLocation(200, 200);
+ mainFrame.setVisible(true);
+ mainFrame.toFront();
+ }
+
+ public static class PassedListener implements ActionListener {
+ public void actionPerformed(ActionEvent ev) {
+ passed = true;
+ }
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JMenuItem/4171437/bug4171437.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+/* @test
+ @bug 4171437
+ @library ../../regtesthelpers
+ @build Util
+ @author Georges Saab
+ @run main bug4171437
+*/
+import java.awt.*;
+import java.awt.event.*;
+import java.util.ArrayList;
+import javax.swing.*;
+import javax.swing.event.*;
+import sun.awt.SunToolkit;
+
+public class bug4171437 {
+ static volatile boolean closeActivated = false;
+ static volatile boolean customActivated = false;
+
+ public static void main(String[] args) throws Exception {
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ createAndShowGUI();
+ }
+ });
+
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+ toolkit.realSync();
+
+ Robot robot = new Robot();
+ robot.setAutoDelay(50);
+
+ Util.hitMnemonics(robot, KeyEvent.VK_F);
+ Util.hitKeys(robot, KeyEvent.VK_C);
+
+ toolkit.realSync();
+ Thread.sleep(1000);
+
+ if (!closeActivated || customActivated) {
+ throw new RuntimeException("Didn't pass the muster");
+ }
+ }
+ public static void createAndShowGUI() {
+ JMenuBar menubar = new JMenuBar();
+
+ JMenu fileMenu = new JMenu("File");
+ fileMenu.setMnemonic('f');
+
+ JMenuItem fmi1 = new JMenuItem();
+ fmi1 = new JMenuItem("Open");
+ JMenuItem fmi2 = new JMenuItem();
+ fmi2 = new JMenuItem("Close");
+ fmi2.setMnemonic('c');
+ fmi2.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ closeActivated = true;
+ }
+ });
+
+ fileMenu.add( fmi1);
+ fileMenu.add( fmi2);
+
+ menubar.add( fileMenu);
+
+ JMenu custom = new JMenu("Custom");
+ custom.setMnemonic('c');
+ JMenuItem cmi = new JMenuItem();
+ cmi = new JMenuItem("Properties");
+ cmi.setMnemonic('p');
+ custom.add( cmi);
+ custom.addMenuListener(new MenuListener() {
+ public void menuSelected(MenuEvent e) {
+ customActivated = true;
+ }
+ public void menuDeselected(MenuEvent e) {}
+ public void menuCanceled(MenuEvent e) {}
+ });
+ menubar.add( custom);
+
+ JFrame frame = new JFrame();
+ frame.setJMenuBar( menubar);
+ frame.setSize(300, 300);
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ frame.pack();
+ frame.setVisible(true);
+ }
+}
--- a/jdk/test/javax/swing/JMenuItem/ActionListenerCalledTwice/ActionListenerCalledTwiceTest.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/javax/swing/JMenuItem/ActionListenerCalledTwice/ActionListenerCalledTwiceTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -35,12 +35,13 @@
import javax.swing.*;
public class ActionListenerCalledTwiceTest {
- static String menuItems[] = { "Item1", "Item2", "Item3", "Item4" };
+ static String menuItems[] = { "Item1", "Item2", "Item3", "Item4", "Item5" };
static KeyStroke keyStrokes[] = {
KeyStroke.getKeyStroke(KeyEvent.VK_E, InputEvent.META_MASK),
KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0),
KeyStroke.getKeyStroke(KeyEvent.VK_UP, InputEvent.SHIFT_MASK),
- KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, InputEvent.META_MASK)
+ KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, InputEvent.META_MASK),
+ KeyStroke.getKeyStroke(KeyEvent.VK_E, InputEvent.CTRL_MASK)
};
static volatile int listenerCallCounter = 0;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JPopupMenu/4458079/bug4458079.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+/* @test
+ @bug 4458079
+ @library ../../regtesthelpers
+ @build Util
+ @summary Tests calling removeAll() from PopupMenuListener
+ @author Peter Zhelezniakov
+ @run main bug4458079
+*/
+import java.awt.Robot;
+import java.awt.Toolkit;
+import java.awt.event.*;
+import javax.swing.*;
+import javax.swing.event.*;
+import java.awt.event.KeyEvent;
+import java.util.ArrayList;
+import sun.awt.SunToolkit;
+
+public class bug4458079 extends JFrame implements PopupMenuListener {
+ public JMenu menu;
+
+ static volatile boolean itemASelected = false;
+ public static void main(String[] args) throws Exception {
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ new bug4458079().createAndShowGUI();
+ }
+ });
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+ toolkit.realSync();
+
+ Robot robot = new Robot();
+ robot.setAutoDelay(50);
+
+ Util.hitMnemonics(robot, KeyEvent.VK_M);
+
+ toolkit.realSync();
+ Thread.sleep(1000);
+
+ Util.hitKeys(robot, KeyEvent.VK_DOWN);
+ Util.hitKeys(robot, KeyEvent.VK_ENTER);
+
+ toolkit.realSync();
+ Thread.sleep(1000);
+
+ if (!itemASelected) {
+ throw new RuntimeException("Test failed: arrow key traversal in JMenu broken!");
+ }
+ }
+ public void createAndShowGUI() {
+ JMenuBar bar = new JMenuBar();
+ menu = new JMenu("Menu");
+ menu.add(new JMenuItem("1"));
+ menu.add(new JMenuItem("2"));
+ menu.setMnemonic(KeyEvent.VK_M);
+ menu.getPopupMenu().addPopupMenuListener(this);
+ bar.add(menu);
+
+ setJMenuBar(bar);
+ getContentPane().add(new JButton(""));
+ setSize(300, 300);
+ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ pack();
+ setVisible(true);
+ }
+
+ public void rebuildMenu() {
+ menu.removeAll();
+ final String itemCommand = "A";
+ JMenuItem item = new JMenuItem(itemCommand);
+ item.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ JMenuItem item = ((JMenuItem)e.getSource());
+ if (e.getActionCommand() == itemCommand) {
+ itemASelected = true;
+ }
+ }
+ });
+ menu.add(item);
+ menu.add(new JMenuItem("B"));
+ }
+
+ public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
+ rebuildMenu();
+ }
+
+ public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {}
+ public void popupMenuCanceled(PopupMenuEvent e) {}
+}
--- a/jdk/test/javax/swing/JScrollBar/7163696/Test7163696.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/javax/swing/JScrollBar/7163696/Test7163696.java Thu Oct 10 13:41:08 2013 -0700
@@ -59,7 +59,8 @@
UIManager.setLookAndFeel(info.getClassName());
SwingUtilities.invokeAndWait(this);
- toolkit.realSync(500); // after creation
+ toolkit.realSync(); // after creation
+ Thread.sleep(1000);
Point point = this.bar.getLocation();
SwingUtilities.convertPointToScreen(point, this.bar);
@@ -69,7 +70,8 @@
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
- toolkit.realSync(500); // before validation
+ toolkit.realSync(); // before validation
+ Thread.sleep(1000);
SwingUtilities.invokeAndWait(this);
if (this.bar != null) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JSplitPane/4816114/bug4816114.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,152 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+/* @test
+ @bug 4816114
+ @summary REGRESSION: Regression in divider location behavior when JSplitPane is resized
+ @author Andrey Pikalev
+ @run main bug4816114
+*/
+
+import javax.swing.*;
+import java.awt.*;
+import java.lang.reflect.*;
+import sun.awt.SunToolkit;
+
+
+public class bug4816114 {
+
+ JFrame fr;
+ JSplitPane splitPane;
+
+ boolean[] resized = new boolean[] { false, false, false,
+ false, false, false };
+ static int step = 0;
+ boolean h_passed = false;
+ boolean v_passed = false;
+
+ static bug4816114 test = new bug4816114();
+
+ public static void main(String[] args) throws InterruptedException, InvocationTargetException {
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ test.createAndShowGUI();
+ }
+ });
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+ toolkit.realSync();
+ Thread.sleep(1000);
+ Thread.sleep(2000);
+
+ step++;
+ test.doTest(150, 300);
+
+ step++;
+ test.doTest(650, 300);
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ test.splitPane.setOrientation(JSplitPane.VERTICAL_SPLIT);
+ }
+ });
+
+ step++;
+ test.doTest(300, 650);
+
+ step++;
+ test.doTest(300, 150);
+
+ step++;
+ test.doTest(300, 650);
+
+ if ( !test.isPassed() ) {
+ throw new Error("The divider location is wrong.");
+ }
+ }
+ public void createAndShowGUI() {
+ fr = new JFrame("Test");
+
+ splitPane = new TestSplitPane();
+ splitPane.setOrientation(JSplitPane.HORIZONTAL_SPLIT);
+ splitPane.setResizeWeight(0);
+ splitPane.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
+
+ JButton leftButton = new JButton("LEFT");
+ leftButton.setPreferredSize(new Dimension(300, 300));
+ leftButton.setMinimumSize(new Dimension(150, 150));
+ splitPane.setLeftComponent(leftButton);
+
+ JButton rightButton = new JButton("RIGHT");
+ rightButton.setPreferredSize(new Dimension(300, 300));
+ rightButton.setMinimumSize(new Dimension(150, 150));
+ splitPane.setRightComponent(rightButton);
+
+ fr.getContentPane().add(splitPane, BorderLayout.CENTER);
+
+ fr.pack();
+ fr.setVisible(true);
+ }
+
+ void doTest(final int width, final int height) throws InterruptedException, InvocationTargetException {
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ splitPane.setPreferredSize(new Dimension(width, height));
+ fr.pack();
+ }
+ });
+
+ synchronized (bug4816114.this) {
+ while (!resized[step]) {
+ bug4816114.this.wait();
+ }
+ }
+ }
+
+ synchronized void setPassed(int orientation, boolean passed) {
+ if (orientation == JSplitPane.HORIZONTAL_SPLIT) {
+ this.h_passed = passed;
+ }
+ else {
+ this.v_passed = passed;
+ }
+ }
+
+ synchronized boolean isPassed() {
+ return h_passed && v_passed;
+ }
+
+
+ class TestSplitPane extends JSplitPane {
+ public void setDividerLocation(int location) {
+ super.setDividerLocation(location);
+
+ if ( splitPane.getDividerLocation() == 151 ) {
+ setPassed(getOrientation(), true);
+ }
+
+ synchronized (bug4816114.this) {
+ resized[step] = true;
+ bug4816114.this.notifyAll();
+ }
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JTabbedPane/7024235/Test7024235.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,114 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.BorderLayout;
+import sun.awt.SunToolkit;
+
+import java.awt.Container;
+import java.awt.Rectangle;
+import java.awt.Toolkit;
+
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JTabbedPane;
+
+import javax.swing.JFrame;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+import javax.swing.UIManager.LookAndFeelInfo;
+
+/*
+ * @test
+ * @bug 7024235
+ * @summary Tests JFrame.pack() with the JTabbedPane
+ * @author Sergey Malenkov
+ */
+
+public class Test7024235 implements Runnable {
+
+ private static final boolean AUTO = null != System.getProperty("test.src", null);
+
+ public static void main(String[] args) throws Exception {
+ Test7024235 test = new Test7024235();
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+ for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
+ UIManager.setLookAndFeel(info.getClassName());
+
+ test.test();
+ toolkit.realSync();
+ Thread.sleep(1000);
+ test.test();
+ }
+ }
+
+ private volatile JTabbedPane pane;
+ private volatile boolean passed;
+
+ public void run() {
+ if (this.pane == null) {
+ this.pane = new JTabbedPane();
+ this.pane.addTab("1", new Container());
+ this.pane.addTab("2", new JButton());
+ this.pane.addTab("3", new JCheckBox());
+
+ JFrame frame = new JFrame();
+ frame.add(BorderLayout.WEST, this.pane);
+ frame.pack();
+ frame.setVisible(true);
+
+ test("first");
+ }
+ else {
+ test("second");
+ if (this.passed || AUTO) { // do not close a frame for manual review
+ SwingUtilities.getWindowAncestor(this.pane).dispose();
+ }
+ this.pane = null;
+ }
+ }
+
+ private void test() throws Exception {
+ SwingUtilities.invokeAndWait(this);
+ if (!this.passed && AUTO) { // error reporting only for automatic testing
+ throw new Error("TEST FAILED");
+ }
+ }
+
+ private void test(String step) {
+ this.passed = true;
+ for (int index = 0; index < this.pane.getTabCount(); index++) {
+ Rectangle bounds = this.pane.getBoundsAt(index);
+ int centerX = bounds.x + bounds.width / 2;
+ int centerY = bounds.y + bounds.height / 2;
+ int actual = this.pane.indexAtLocation(centerX, centerY);
+ if (index != actual) {
+ System.out.println("name = " + UIManager.getLookAndFeel().getName());
+ System.out.println("step = " + step);
+ System.out.println("index = " + index);
+ System.out.println("bounds = " + bounds);
+ System.out.println("indexAtLocation(" + centerX + "," + centerX + ") returns " + actual);
+ this.passed = false;
+ }
+ }
+ }
+}
--- a/jdk/test/javax/swing/JTable/7068740/bug7068740.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/javax/swing/JTable/7068740/bug7068740.java Thu Oct 10 13:41:08 2013 -0700
@@ -37,6 +37,7 @@
import java.awt.*;
import java.awt.event.KeyEvent;
import java.lang.reflect.InvocationTargetException;
+import java.util.concurrent.atomic.AtomicInteger;
public class bug7068740 extends JFrame {
@@ -66,6 +67,7 @@
};
table = new JTable(model);
+ table.setRowSelectionInterval(0, 0);
LayerUI<JComponent> layerUI = new LayerUI<>();
JLayer<JComponent> layer = new JLayer<>(table, layerUI);
JScrollPane scrollPane = new JScrollPane(layer);
@@ -78,7 +80,7 @@
try {
if (robot == null) {
robot = new Robot();
- robot.setAutoDelay(20);
+ robot.setAutoDelay(50);
}
if (toolkit == null) {
@@ -104,24 +106,37 @@
}
}
- private static void doTest() {
+ private static int getSelectedRow() throws Exception {
+ final AtomicInteger row = new AtomicInteger(-1);
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ row.set(table.getSelectedRow());
+ }
+ });
+ return row.intValue();
+ }
+
+ private static void doTest() throws Exception {
toolkit.realSync();
- table.setRowSelectionInterval(0, 0);
robot.keyPress(KeyEvent.VK_PAGE_DOWN);
+ robot.keyRelease(KeyEvent.VK_PAGE_DOWN);
toolkit.realSync();
- if (table.getSelectedRow() != 19) {
+
+ if (getSelectedRow() != 19) {
throw new RuntimeException("Test failed");
}
robot.keyPress(KeyEvent.VK_PAGE_UP);
+ robot.keyRelease(KeyEvent.VK_PAGE_UP);
toolkit.realSync();
- if (table.getSelectedRow() != 0) {
+ if (getSelectedRow() != 0) {
throw new RuntimeException("Test failed");
}
}
- public static void main(String[] args) {
+ public static void main(String[] args) throws Exception {
try {
UIManager.setLookAndFeel(new MetalLookAndFeel());
setUp();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JTree/4927934/bug4927934.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,247 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+/* @test
+ @bug 4927934
+ @summary JTree traversal is unlike Native windows tree traversal
+ @author Andrey Pikalev
+ @run main bug4927934
+*/
+
+import javax.swing.*;
+import javax.swing.event.*;
+import javax.swing.tree.*;
+import java.awt.*;
+import java.awt.event.*;
+import java.lang.reflect.InvocationTargetException;
+import sun.awt.*;
+
+public class bug4927934 implements TreeSelectionListener, TreeExpansionListener, FocusListener {
+
+ final static Object listener = new bug4927934();
+
+ static boolean focusGained = false;
+ public static boolean selectionChanged = false;
+ public static boolean treeExpanded = false;
+ public static boolean treeCollapsed = false;
+
+ static JFrame frame;
+ static JTree tree;
+ static Robot robot;
+
+ public static void main(String args[]) throws Exception {
+ UIManager.setLookAndFeel(new javax.swing.plaf.metal.MetalLookAndFeel());
+
+ robot = new Robot();
+ robot.setAutoDelay(50);
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ frame = new JFrame();
+
+ DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
+ createNodes(root);
+ tree = new JTree(root);
+ JScrollPane scrollPane = new JScrollPane(tree);
+ frame.getContentPane().add(scrollPane);
+
+ tree.addFocusListener((FocusListener)listener);
+ tree.addTreeSelectionListener((TreeSelectionListener)listener);
+ tree.addTreeExpansionListener((TreeExpansionListener)listener);
+
+ frame.setSize(300, 300);
+ frame.setVisible(true);
+ }
+ });
+
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+ toolkit.realSync();
+ Thread.sleep(1000);
+
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ tree.requestFocus();
+ }
+ });
+
+ synchronized(listener) {
+ if (!focusGained) {
+ System.out.println("waiting focusGained...");
+ try {
+ listener.wait(10000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ // GO TO RIGHT
+ selectionChanged = false;
+ hitKey(KeyEvent.VK_RIGHT);
+ toolkit.realSync();
+ if (!checkSelectionChanged(tree, 0)) {
+ throw new RuntimeException("Root should be selected");
+ }
+
+ selectionChanged = false;
+ hitKey(KeyEvent.VK_RIGHT);
+ toolkit.realSync();
+ if (!checkSelectionChanged(tree, 1)) {
+ throw new RuntimeException("Node should be selected");
+ }
+
+ treeExpanded = false;
+ hitKey(KeyEvent.VK_RIGHT);
+ toolkit.realSync();
+ if (!isTreeExpanded()) {
+ throw new RuntimeException("Node should be expanded");
+ }
+
+ selectionChanged = false;
+ hitKey(KeyEvent.VK_RIGHT);
+ toolkit.realSync();
+ if (!checkSelectionChanged(tree, 2)) {
+ throw new RuntimeException("Leaf1 should be selected");
+ }
+
+ selectionChanged = false;
+ hitKey(KeyEvent.VK_RIGHT);
+ toolkit.realSync();
+ if (!checkSelectionChanged(tree, 2)) {
+ throw new RuntimeException("Leaf1 should be selected");
+ }
+
+ // GO TO LEFT
+ selectionChanged = false;
+ hitKey(KeyEvent.VK_LEFT);
+ toolkit.realSync();
+ if (!checkSelectionChanged(tree, 1)) {
+ throw new RuntimeException("Node should be selected");
+ }
+
+ treeCollapsed = false;
+ hitKey(KeyEvent.VK_LEFT);
+ if (!isTreeCollapsed()) {
+ throw new RuntimeException("Node should be collapsed");
+ }
+
+ selectionChanged = false;
+ hitKey(KeyEvent.VK_LEFT);
+ toolkit.realSync();
+ if (!checkSelectionChanged(tree, 0)) {
+ throw new RuntimeException("Root should be selected");
+ }
+
+ treeCollapsed = false;
+ hitKey(KeyEvent.VK_LEFT);
+ toolkit.realSync();
+ if (!isTreeCollapsed()) {
+ throw new RuntimeException("Root should be collapsed");
+ }
+ }
+
+
+ synchronized public void focusLost(FocusEvent e) {
+ }
+
+ synchronized public void focusGained(FocusEvent e) {
+ focusGained = true;
+ System.out.println("focusGained");
+ listener.notifyAll();
+ }
+
+ private static void createNodes(DefaultMutableTreeNode root) {
+ DefaultMutableTreeNode node = new DefaultMutableTreeNode("Node");
+ node.add(new DefaultMutableTreeNode("Leaf1"));
+ node.add(new DefaultMutableTreeNode("Leaf2"));
+ root.add(node);
+ root.add(new DefaultMutableTreeNode("Leaf3"));
+ }
+
+ synchronized public void valueChanged(TreeSelectionEvent e) {
+ selectionChanged = true;
+ System.out.println("selectionChanged");
+ notifyAll();
+ }
+
+ synchronized public void treeCollapsed(TreeExpansionEvent e) {
+ System.out.println("treeCollapsed");
+ treeCollapsed = true;
+ notifyAll();
+ }
+
+ synchronized public void treeExpanded(TreeExpansionEvent e) {
+ System.out.println("treeExpanded");
+ treeExpanded = true;
+ notifyAll();
+ }
+
+ private static void hitKey(int key) {
+ System.out.println("key " + key + " pressed");
+ robot.keyPress(key);
+ robot.keyRelease(key);
+ }
+
+ private static boolean checkSelectionChanged(JTree tree, int shouldBeSel) {
+ synchronized(listener) {
+ if (!selectionChanged) {
+ System.out.println("waiting for selectionChanged...");
+ try {
+ listener.wait(5000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ int selRow = tree.getLeadSelectionRow();
+ System.out.println("Selected row: " + selRow);
+ return selRow == shouldBeSel;
+ }
+
+ private static boolean isTreeExpanded() {
+ synchronized(listener) {
+ if (!treeExpanded) {
+ System.out.println("waiting for treeExpanded...");
+ try {
+ listener.wait(5000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ return treeExpanded;
+ }
+
+ private static boolean isTreeCollapsed() {
+ synchronized(listener) {
+ if (!treeCollapsed) {
+ System.out.println("waiting for treeCollapsed...");
+ try {
+ listener.wait(5000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ return treeCollapsed;
+ }
+}
--- a/jdk/test/javax/swing/JTree/8013571/Test8013571.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/javax/swing/JTree/8013571/Test8013571.java Thu Oct 10 13:41:08 2013 -0700
@@ -27,8 +27,8 @@
/*
* @test
- * @bug 8016545
- * @summary Tests beans with public fields
+ * @bug 8013571
+ * @summary Tests null as a root of TreeModelEvent
* @author Sergey Malenkov
*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/Popup/TaskbarPositionTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,340 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+import javax.swing.event.*;
+
+/**
+ * @test @bug 4245587 4474813 4425878 4767478 8015599
+ * @author Mark Davidson
+ * @summary Tests the location of the heavy weight popup portion of JComboBox,
+ * JMenu and JPopupMenu.
+ * @library ../regtesthelpers
+ * @build Util
+ * @run main TaskbarPositionTest
+ */
+public class TaskbarPositionTest extends JFrame implements ActionListener {
+
+ private boolean done;
+ private Throwable error;
+ private static TaskbarPositionTest test;
+ private static JPopupMenu popupMenu;
+ private static JPanel panel;
+ private static JComboBox<String> combo1;
+ private static JComboBox<String> combo2;
+ private static JMenuBar menubar;
+ private static JMenu menu1;
+ private static JMenu menu2;
+ private static Rectangle fullScreenBounds;
+ // The usable desktop space: screen size - screen insets.
+ private static Rectangle screenBounds;
+ private static String[] numData = {
+ "One", "Two", "Three", "Four", "Five", "Six", "Seven"
+ };
+ private static String[] dayData = {
+ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"
+ };
+ private static char[] mnDayData = {
+ 'M', 'T', 'W', 'R', 'F', 'S', 'U'
+ };
+
+ public TaskbarPositionTest() {
+ super("Use CTRL-down to show a JPopupMenu");
+ setContentPane(panel = createContentPane());
+ setJMenuBar(createMenuBar("1 - First Menu", true));
+ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+
+ // CTRL-down will show the popup.
+ panel.getInputMap().put(KeyStroke.getKeyStroke(
+ KeyEvent.VK_DOWN, InputEvent.CTRL_MASK), "OPEN_POPUP");
+ panel.getActionMap().put("OPEN_POPUP", new PopupHandler());
+
+ pack();
+
+ Toolkit toolkit = Toolkit.getDefaultToolkit();
+ fullScreenBounds = new Rectangle(new Point(), toolkit.getScreenSize());
+ screenBounds = new Rectangle(new Point(), toolkit.getScreenSize());
+
+ // Place the frame near the bottom. This is a pretty wild guess.
+ this.setLocation(0, (int) screenBounds.getHeight() - 2 * this.getHeight());
+
+ // Reduce the screen bounds by the insets.
+ GraphicsConfiguration gc = this.getGraphicsConfiguration();
+ if (gc != null) {
+ Insets screenInsets = toolkit.getScreenInsets(gc);
+ screenBounds = gc.getBounds();
+ screenBounds.width -= (screenInsets.left + screenInsets.right);
+ screenBounds.height -= (screenInsets.top + screenInsets.bottom);
+ screenBounds.x += screenInsets.left;
+ screenBounds.y += screenInsets.top;
+ }
+
+ setVisible(true);
+ }
+
+ public static class ComboPopupCheckListener implements PopupMenuListener {
+
+ public void popupMenuCanceled(PopupMenuEvent ev) {
+ }
+
+ public void popupMenuWillBecomeVisible(PopupMenuEvent ev) {
+ }
+
+ public void popupMenuWillBecomeInvisible(PopupMenuEvent ev) {
+ Point cpos = combo1.getLocation();
+ SwingUtilities.convertPointToScreen(cpos, panel);
+
+ JPopupMenu pm = (JPopupMenu) combo1.getUI().getAccessibleChild(combo1, 0);
+
+ if (pm != null) {
+ Point p = pm.getLocation();
+ SwingUtilities.convertPointToScreen(p, pm);
+ if (p.y < cpos.y) {
+ throw new RuntimeException("ComboBox popup is wrongly aligned");
+ } // check that popup was opened down
+ }
+ }
+ }
+
+ private class PopupHandler extends AbstractAction {
+
+ public void actionPerformed(ActionEvent e) {
+ if (!popupMenu.isVisible()) {
+ popupMenu.show((Component) e.getSource(), 40, 40);
+ }
+ isPopupOnScreen(popupMenu, fullScreenBounds);
+ }
+ }
+
+ class PopupListener extends MouseAdapter {
+
+ private JPopupMenu popup;
+
+ public PopupListener(JPopupMenu popup) {
+ this.popup = popup;
+ }
+
+ public void mousePressed(MouseEvent e) {
+ maybeShowPopup(e);
+ }
+
+ public void mouseReleased(MouseEvent e) {
+ maybeShowPopup(e);
+ }
+
+ private void maybeShowPopup(MouseEvent e) {
+ if (e.isPopupTrigger()) {
+ popup.show(e.getComponent(), e.getX(), e.getY());
+ isPopupOnScreen(popup, fullScreenBounds);
+ }
+ }
+ }
+
+ /**
+ * Tests if the popup is on the screen.
+ */
+ public static void isPopupOnScreen(JPopupMenu popup, Rectangle checkBounds) {
+ Dimension dim = popup.getSize();
+ Point pt = new Point();
+ SwingUtilities.convertPointToScreen(pt, popup);
+ Rectangle bounds = new Rectangle(pt, dim);
+
+ if (!SwingUtilities.isRectangleContainingRectangle(checkBounds, bounds)) {
+ throw new RuntimeException("We do not match! " + checkBounds + " / " + bounds);
+ }
+
+ }
+
+ private JPanel createContentPane() {
+ JPanel panel = new JPanel();
+
+ combo1 = new JComboBox<>(numData);
+ panel.add(combo1);
+ combo2 = new JComboBox<>(dayData);
+ combo2.setEditable(true);
+ panel.add(combo2);
+ panel.setSize(300, 200);
+
+ popupMenu = new JPopupMenu();
+ JMenuItem item;
+ for (int i = 0; i < dayData.length; i++) {
+ item = popupMenu.add(new JMenuItem(dayData[i], mnDayData[i]));
+ item.addActionListener(this);
+ }
+ panel.addMouseListener(new PopupListener(popupMenu));
+
+ JTextField field = new JTextField("CTRL+down for Popup");
+ // CTRL-down will show the popup.
+ field.getInputMap().put(KeyStroke.getKeyStroke(
+ KeyEvent.VK_DOWN, InputEvent.CTRL_MASK), "OPEN_POPUP");
+ field.getActionMap().put("OPEN_POPUP", new PopupHandler());
+
+ panel.add(field);
+
+ return panel;
+ }
+
+ /**
+ * @param str name of Menu
+ * @param bFlag set mnemonics on menu items
+ */
+ private JMenuBar createMenuBar(String str, boolean bFlag) {
+ menubar = new JMenuBar();
+
+ menu1 = new JMenu(str);
+ menu1.setMnemonic(str.charAt(0));
+ menu1.addActionListener(this);
+
+ menubar.add(menu1);
+ for (int i = 0; i < 8; i++) {
+ JMenuItem menuitem = new JMenuItem("1 JMenuItem" + i);
+ menuitem.addActionListener(this);
+ if (bFlag) {
+ menuitem.setMnemonic('0' + i);
+ }
+ menu1.add(menuitem);
+ }
+
+ // second menu
+ menu2 = new JMenu("2 - Second Menu");
+ menu2.addActionListener(this);
+ menu2.setMnemonic('2');
+
+ menubar.add(menu2);
+ for (int i = 0; i < 5; i++) {
+ JMenuItem menuitem = new JMenuItem("2 JMenuItem" + i);
+ menuitem.addActionListener(this);
+
+ if (bFlag) {
+ menuitem.setMnemonic('0' + i);
+ }
+ menu2.add(menuitem);
+ }
+ JMenu submenu = new JMenu("Sub Menu");
+ submenu.setMnemonic('S');
+ submenu.addActionListener(this);
+ for (int i = 0; i < 5; i++) {
+ JMenuItem menuitem = new JMenuItem("S JMenuItem" + i);
+ menuitem.addActionListener(this);
+ if (bFlag) {
+ menuitem.setMnemonic('0' + i);
+ }
+ submenu.add(menuitem);
+ }
+ menu2.add(new JSeparator());
+ menu2.add(submenu);
+
+ return menubar;
+ }
+
+ public void actionPerformed(ActionEvent evt) {
+ Object obj = evt.getSource();
+ if (obj instanceof JMenuItem) {
+ // put the focus on the noneditable combo.
+ combo1.requestFocus();
+ }
+ }
+
+ public static void main(String[] args) throws Throwable {
+
+ sun.awt.SunToolkit toolkit = (sun.awt.SunToolkit) Toolkit.getDefaultToolkit();
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ test = new TaskbarPositionTest();
+ }
+ });
+
+ // Use Robot to automate the test
+ Robot robot;
+ robot = new Robot();
+ robot.setAutoDelay(125);
+
+ // 1 - menu
+ Util.hitMnemonics(robot, KeyEvent.VK_1);
+
+ toolkit.realSync();
+ isPopupOnScreen(menu1.getPopupMenu(), screenBounds);
+
+ // 2 menu with sub menu
+ robot.keyPress(KeyEvent.VK_RIGHT);
+ robot.keyRelease(KeyEvent.VK_RIGHT);
+ Util.hitMnemonics(robot, KeyEvent.VK_S);
+
+ toolkit.realSync();
+ isPopupOnScreen(menu2.getPopupMenu(), screenBounds);
+
+ robot.keyPress(KeyEvent.VK_ENTER);
+ robot.keyRelease(KeyEvent.VK_ENTER);
+
+ // Focus should go to non editable combo box
+ toolkit.realSync();
+ Thread.sleep(500);
+
+ robot.keyPress(KeyEvent.VK_DOWN);
+
+ // How do we check combo boxes?
+
+ // Editable combo box
+ robot.keyPress(KeyEvent.VK_TAB);
+ robot.keyRelease(KeyEvent.VK_TAB);
+ robot.keyPress(KeyEvent.VK_DOWN);
+ robot.keyRelease(KeyEvent.VK_DOWN);
+
+ // combo1.getUI();
+
+ // Popup from Text field
+ robot.keyPress(KeyEvent.VK_TAB);
+ robot.keyRelease(KeyEvent.VK_TAB);
+ robot.keyPress(KeyEvent.VK_CONTROL);
+ robot.keyPress(KeyEvent.VK_DOWN);
+ robot.keyRelease(KeyEvent.VK_DOWN);
+ robot.keyRelease(KeyEvent.VK_CONTROL);
+
+ // Popup from a mouse click.
+ Point pt = new Point(2, 2);
+ SwingUtilities.convertPointToScreen(pt, panel);
+ robot.mouseMove((int) pt.getX(), (int) pt.getY());
+ robot.mousePress(InputEvent.BUTTON3_MASK);
+ robot.mouseRelease(InputEvent.BUTTON3_MASK);
+
+ toolkit.realSync();
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ test.setLocation(-30, 100);
+ combo1.addPopupMenuListener(new ComboPopupCheckListener());
+ combo1.requestFocus();
+ }
+ });
+
+ robot.keyPress(KeyEvent.VK_DOWN);
+ robot.keyRelease(KeyEvent.VK_DOWN);
+ robot.keyPress(KeyEvent.VK_ESCAPE);
+ robot.keyRelease(KeyEvent.VK_ESCAPE);
+
+ toolkit.realSync();
+ Thread.sleep(500);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/plaf/basic/BasicMenuUI/4983388/bug4983388.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ @bug 4983388 8015600
+ @summary shortcuts on menus do not work on JDS
+ @author Oleg Mokhovikov
+ @library ../../../../regtesthelpers
+ @build Util
+ @run main bug4983388
+*/
+
+import sun.awt.*;
+import java.awt.*;
+import javax.swing.*;
+import javax.swing.event.MenuListener;
+import javax.swing.event.MenuEvent;
+import java.awt.event.KeyEvent;
+
+public class bug4983388 {
+ static volatile boolean bMenuSelected = false;
+
+ private static class TestMenuListener implements MenuListener {
+ public void menuCanceled(MenuEvent e) {}
+ public void menuDeselected(MenuEvent e) {}
+ public void menuSelected(MenuEvent e) {
+ System.out.println("menuSelected");
+ bMenuSelected = true;
+ }
+ }
+
+ private static void createAndShowGUI() {
+ JMenuBar menuBar = new JMenuBar();
+ JMenu menu = new JMenu("File");
+ menu.setMnemonic('F');
+ menuBar.add(menu);
+ JFrame frame = new JFrame();
+ frame.setJMenuBar(menuBar);
+ frame.pack();
+ frame.setVisible(true);
+ MenuListener listener = new TestMenuListener();
+ menu.addMenuListener(listener);
+ }
+
+ public static void main(String[] args) throws Exception {
+
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+ try {
+ UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
+ } catch (UnsupportedLookAndFeelException | ClassNotFoundException ex) {
+ System.err.println("GTKLookAndFeel is not supported on this platform. Using defailt LaF for this platform.");
+ }
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ createAndShowGUI();
+ }
+ });
+
+ Robot robot = new Robot();
+ Util.hitMnemonics(robot, KeyEvent.VK_F);
+
+ toolkit.realSync();
+
+ if (!bMenuSelected) {
+ throw new RuntimeException("shortcuts on menus do not work");
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/plaf/basic/BasicTabbedPaneUI/Test6943780.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import javax.swing.JButton;
+import javax.swing.JTabbedPane;
+import java.awt.Component;
+
+import static javax.swing.SwingUtilities.invokeAndWait;
+
+/*
+ * @test
+ * @bug 4873983 6943780
+ * @summary Tests JTabbedPane with SCROLL_TAB_LAYOUT
+ * @author Sergey Malenkov
+ */
+public class Test6943780 implements Runnable, Thread.UncaughtExceptionHandler {
+ public static void main(String[] args) throws Exception {
+ invokeAndWait(new Test6943780());
+ }
+
+ @Override
+ public void uncaughtException(Thread thread, Throwable throwable) {
+ throwable.printStackTrace();
+ System.exit(1);
+ }
+
+ @Override
+ public void run() {
+ JTabbedPane pane = new JTabbedPane(JTabbedPane.TOP, JTabbedPane.SCROLL_TAB_LAYOUT);
+ pane.addTab("first", new JButton("first"));
+ pane.addTab("second", new JButton("second"));
+ for (Component component : pane.getComponents()) {
+ component.setSize(100, 100);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/plaf/basic/BasicTreeUI/8023474/bug8023474.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,174 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8023474
+ * @summary Tests that the first mouse press starts editing in JTree
+ * @author Dmitry Markov
+ * @run main bug8023474
+ */
+
+import sun.awt.SunToolkit;
+
+import javax.swing.*;
+import javax.swing.event.CellEditorListener;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreeCellEditor;
+import javax.swing.tree.TreeCellRenderer;
+import java.awt.*;
+import java.awt.event.InputEvent;
+import java.util.EventObject;
+
+public class bug8023474 {
+ private static JTree tree;
+
+ public static void main(String[] args) throws Exception {
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+ Robot robot = new Robot();
+ robot.setAutoDelay(50);
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ createAndShowGUI();
+ }
+ });
+
+ toolkit.realSync();
+
+ Point point = getRowPointToClick(1);
+ robot.mouseMove(point.x, point.y);
+ robot.mousePress(InputEvent.BUTTON1_MASK);
+ robot.mouseRelease(InputEvent.BUTTON1_MASK);
+
+ toolkit.realSync();
+
+ Boolean result = (Boolean)tree.getCellEditor().getCellEditorValue();
+ if (!result) {
+ throw new RuntimeException("Test Failed!");
+ }
+ }
+
+ private static void createAndShowGUI() {
+ try {
+ UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+
+ DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
+ DefaultMutableTreeNode item = new DefaultMutableTreeNode("item");
+ DefaultMutableTreeNode subItem = new DefaultMutableTreeNode("subItem");
+
+ root.add(item);
+ item.add(subItem);
+
+ DefaultTreeModel model = new DefaultTreeModel(root);
+ tree = new JTree(model);
+
+ tree.setCellEditor(new Editor());
+ tree.setEditable(true);
+ tree.setRowHeight(30);
+ tree.setCellRenderer(new CheckboxCellRenderer());
+
+ JFrame frame = new JFrame("bug8023474");
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ frame.add(new JScrollPane(tree));
+ frame.setSize(400, 300);
+ frame.setVisible(true);
+ }
+
+ private static Point getRowPointToClick(final int row) throws Exception {
+ final Point[] result = new Point[1];
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ Rectangle rect = tree.getRowBounds(row);
+ Point point = new Point(rect.x + 10, rect.y + rect.height / 2);
+ SwingUtilities.convertPointToScreen(point, tree);
+ result[0] = point;
+ }
+ });
+ return result[0];
+ }
+
+ private static class Editor extends JPanel implements TreeCellEditor {
+ private JCheckBox checkbox;
+
+ public Editor() {
+ setOpaque(false);
+ checkbox = new JCheckBox();
+ add(checkbox);
+ }
+
+ public Component getTreeCellEditorComponent(JTree tree, Object value, boolean isSelected,
+ boolean expanded, boolean leaf, int row) {
+ checkbox.setText(value.toString());
+ checkbox.setSelected(false);
+ return this;
+ }
+
+ public Object getCellEditorValue() {
+ return checkbox.isSelected();
+ }
+
+ public boolean isCellEditable(EventObject anEvent) {
+ return true;
+ }
+
+ public boolean shouldSelectCell(EventObject anEvent) {
+ return true;
+ }
+
+ public boolean stopCellEditing() {
+ return true;
+ }
+
+ public void cancelCellEditing() {
+ }
+
+ public void addCellEditorListener(CellEditorListener l) {
+ }
+
+ public void removeCellEditorListener(CellEditorListener l) {
+ }
+ }
+
+ private static class CheckboxCellRenderer extends JPanel implements TreeCellRenderer {
+ private JCheckBox checkbox;
+
+ public CheckboxCellRenderer() {
+ setOpaque(false);
+ checkbox = new JCheckBox();
+ add(checkbox);
+ }
+
+ public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded,
+ boolean leaf, int row, boolean hasFocus) {
+ checkbox.setText(value.toString());
+ checkbox.setSelected(false);
+ return this;
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/text/AbstractDocument/6968363/Test6968363.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,241 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+import sun.awt.SunToolkit;
+
+import java.awt.Robot;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JTextField;
+import javax.swing.event.DocumentListener;
+import javax.swing.event.UndoableEditListener;
+import javax.swing.text.AttributeSet;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.Document;
+import javax.swing.text.Element;
+import javax.swing.text.PlainDocument;
+import javax.swing.text.Position;
+import javax.swing.text.Segment;
+
+import static java.awt.BorderLayout.NORTH;
+import static java.awt.BorderLayout.SOUTH;
+import static java.awt.Toolkit.getDefaultToolkit;
+import static java.awt.event.KeyEvent.VK_LEFT;
+import static javax.swing.SwingUtilities.invokeAndWait;
+
+/*
+ * @test
+ * @bug 6968363
+ * @summary Ensures that a custom document may not extend AbstractDocument
+ * @author Sergey Malenkov
+ */
+public class Test6968363 implements Runnable, Thread.UncaughtExceptionHandler {
+ private JFrame frame;
+
+ public static void main(String[] args) throws Exception {
+ SunToolkit toolkit = (SunToolkit) getDefaultToolkit();
+ Runnable task = new Test6968363();
+ invokeAndWait(task);
+ toolkit.realSync(100);
+ new Robot().keyPress(VK_LEFT);
+ toolkit.realSync(100);
+ invokeAndWait(task);
+ }
+
+ @Override
+ public void uncaughtException(Thread thread, Throwable throwable) {
+ throwable.printStackTrace();
+ System.exit(1);
+ }
+
+ @Override
+ public void run() {
+ if (this.frame == null) {
+ Thread.setDefaultUncaughtExceptionHandler(this);
+ this.frame = new JFrame(getClass().getSimpleName());
+ this.frame.add(NORTH, new JLabel("Copy Paste a HINDI text into the field below"));
+ this.frame.add(SOUTH, new JTextField(new MyDocument(), "\u0938", 10));
+ this.frame.pack();
+ this.frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
+ this.frame.setLocationRelativeTo(null);
+ this.frame.setVisible(true);
+ } else {
+ this.frame.dispose();
+ this.frame = null;
+ }
+ }
+
+ private static class MyDocument implements Document {
+ private final Document document = new PlainDocument();
+
+ @Override
+ public int getLength() {
+ return this.document.getLength();
+ }
+
+ @Override
+ public void addDocumentListener(DocumentListener listener) {
+ this.document.addDocumentListener(listener);
+ }
+
+ @Override
+ public void removeDocumentListener(DocumentListener listener) {
+ this.document.removeDocumentListener(listener);
+ }
+
+ @Override
+ public void addUndoableEditListener(UndoableEditListener listener) {
+ this.document.addUndoableEditListener(listener);
+ }
+
+ @Override
+ public void removeUndoableEditListener(UndoableEditListener listener) {
+ this.document.removeUndoableEditListener(listener);
+ }
+
+ @Override
+ public Object getProperty(Object key) {
+ return this.document.getProperty(key);
+ }
+
+ @Override
+ public void putProperty(Object key, Object value) {
+ this.document.putProperty(key, value);
+ }
+
+ @Override
+ public void remove(int offset, int length) throws BadLocationException {
+ this.document.remove(offset, length);
+ }
+
+ @Override
+ public void insertString(int offset, String string, AttributeSet set) throws BadLocationException {
+ for (int i = 0; i < string.length(); i++) {
+ System.out.println("i: " + i + "; ch: " + Integer.toHexString(string.charAt(i)));
+ }
+ this.document.insertString(offset, string, set);
+ }
+
+ @Override
+ public String getText(int offset, int length) throws BadLocationException {
+ return this.document.getText(offset, length);
+ }
+
+ @Override
+ public void getText(int offset, int length, Segment segment) throws BadLocationException {
+ this.document.getText(offset, length, segment);
+ }
+
+ @Override
+ public Position getStartPosition() {
+ return this.document.getStartPosition();
+ }
+
+ @Override
+ public Position getEndPosition() {
+ return this.document.getEndPosition();
+ }
+
+ @Override
+ public Position createPosition(int offset) throws BadLocationException {
+ return this.document.createPosition(offset);
+ }
+
+ @Override
+ public Element[] getRootElements() {
+ Element[] elements = this.document.getRootElements();
+ Element[] wrappers = new Element[elements.length];
+ for (int i = 0; i < elements.length; i++) {
+ wrappers[i] = new MyElement(elements[i]);
+ }
+ return wrappers;
+ }
+
+ @Override
+ public Element getDefaultRootElement() {
+ return new MyElement(this.document.getDefaultRootElement());
+ }
+
+ @Override
+ public void render(Runnable task) {
+ this.document.render(task);
+ }
+
+ private class MyElement implements Element {
+ private final Element element;
+
+ private MyElement(Element element) {
+ this.element = element;
+ }
+
+ @Override
+ public Document getDocument() {
+ return MyDocument.this;
+ }
+
+ @Override
+ public Element getParentElement() {
+ return new MyElement(this.element.getParentElement());
+ }
+
+ @Override
+ public String getName() {
+ return this.element.getName();
+ }
+
+ @Override
+ public AttributeSet getAttributes() {
+ return this.element.getAttributes();
+ }
+
+ @Override
+ public int getStartOffset() {
+ return this.element.getStartOffset();
+ }
+
+ @Override
+ public int getEndOffset() {
+ return this.element.getEndOffset();
+ }
+
+ @Override
+ public int getElementIndex(int offset) {
+ return this.element.getElementIndex(offset);
+ }
+
+ @Override
+ public int getElementCount() {
+ return this.element.getElementCount();
+ }
+
+ @Override
+ public Element getElement(int index) {
+ return new MyElement(this.element.getElement(index));
+ }
+
+ @Override
+ public boolean isLeaf() {
+ return this.element.isLeaf();
+ }
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/text/DefaultCaret/7083457/bug7083457.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import javax.swing.text.DefaultCaret;
+
+/**
+ * @test
+ * @bug 7083457
+ * @author Alexander Scherbatiy
+ * @summary Incomplete specification for javax/swing/text/DefaultCaret.html#setVisible(boolean)
+ * @run main bug7083457
+ */
+public class bug7083457 {
+
+ public static void main(String[] args) {
+ DefaultCaret caret = new DefaultCaret();
+
+ for (int i = 0; i < 10; i++) {
+ boolean active = (i % 2 == 0);
+ caret.setVisible(active);
+ if (caret.isActive() != active) {
+ throw new RuntimeException("caret.isActive() does not equal: " + active);
+ }
+ }
+ }
+}
--- a/jdk/test/javax/swing/text/View/8014863/bug8014863.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/javax/swing/text/View/8014863/bug8014863.java Thu Oct 10 13:41:08 2013 -0700
@@ -24,6 +24,7 @@
/*
* @test
* @bug 8014863
+ * @bug 8024395
* @summary Tests the calculation of the line breaks when a text is inserted
* @author Dmitry Markov
* @library ../../../regtesthelpers
@@ -34,91 +35,107 @@
import sun.awt.SunToolkit;
import javax.swing.*;
+import javax.swing.text.GlyphView;
+import javax.swing.text.View;
import javax.swing.text.html.HTMLEditorKit;
import java.awt.*;
import java.awt.event.KeyEvent;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Arrays;
public class bug8014863 {
private static JEditorPane editorPane;
+ private static JFrame frame;
private static Robot robot;
private static SunToolkit toolkit;
+ private static String text1 = "<p>one two qqqq <em>this is a test sentence</em> qqqq <em>pp</em> qqqq <em>pp</em> " +
+ "qqqq <em>pp</em> qqqq <em>pp</em> qqqq <em>pp</em> qqqq <em>pp</em> qqqq <em>pp</em> qqqq <em>pp</em> qqqq</p>";
+ private static String text2 = "<p>qqqq <em>this is a test sentence</em> qqqq <em>pp</em> qqqq <em>pp</em> " +
+ "qqqq <em>pp</em> qqqq <em>pp</em> qqqq <em>pp</em> qqqq <em>pp</em> qqqq <em>pp</em> qqqq <em>pp</em> qqqq</p>";
+
+ private static ArrayList<GlyphView> glyphViews;
+
public static void main(String[] args) throws Exception {
toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
robot = new Robot();
+ robot.setAutoDelay(50);
+ glyphViews = new ArrayList<GlyphView>();
- createAndShowGUI();
+ createAndShowGUI(text1);
+
+ toolkit.realSync();
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ retrieveGlyphViews(editorPane.getUI().getRootView(editorPane));
+ }
+ });
+ GlyphView [] arr1 = glyphViews.toArray(new GlyphView[glyphViews.size()]);
+
+ frame.dispose();
+ glyphViews.clear();
+
+ createAndShowGUI(text2);
toolkit.realSync();
Util.hitKeys(robot, KeyEvent.VK_HOME);
- Util.hitKeys(robot, KeyEvent.VK_O);
-
toolkit.realSync();
- if (3 != getNumberOfTextLines()) {
- throw new RuntimeException("The number of texts lines does not meet the expectation");
- }
-
+ Util.hitKeys(robot, KeyEvent.VK_O);
Util.hitKeys(robot, KeyEvent.VK_N);
-
- toolkit.realSync();
-
- if (3 != getNumberOfTextLines()) {
- throw new RuntimeException("The number of texts lines does not meet the expectation");
- }
-
Util.hitKeys(robot, KeyEvent.VK_E);
Util.hitKeys(robot, KeyEvent.VK_SPACE);
Util.hitKeys(robot, KeyEvent.VK_T);
Util.hitKeys(robot, KeyEvent.VK_W);
+ Util.hitKeys(robot, KeyEvent.VK_O);
+ Util.hitKeys(robot, KeyEvent.VK_SPACE);
toolkit.realSync();
- if (3 != getNumberOfTextLines()) {
- throw new RuntimeException("The number of texts lines does not meet the expectation");
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ retrieveGlyphViews(editorPane.getUI().getRootView(editorPane));
+ }
+ });
+ GlyphView [] arr2 = glyphViews.toArray(new GlyphView[glyphViews.size()]);
+
+ if (arr1.length != arr2.length) {
+ throw new RuntimeException("Test Failed!");
+ }
+
+ for (int i=0; i<arr1.length; i++) {
+ GlyphView v1 = arr1[i];
+ GlyphView v2 = arr2[i];
+ Field field = GlyphView.class.getDeclaredField("breakSpots");
+ field.setAccessible(true);
+ int[] breakSpots1 = (int[])field.get(v1);
+ int[] breakSpots2 = (int[])field.get(v2);
+ if (!Arrays.equals(breakSpots1,breakSpots2)) {
+ throw new RuntimeException("Test Failed!");
+ }
+ }
+
+ frame.dispose();
+ }
+
+ private static void retrieveGlyphViews(View root) {
+ for (int i=0; i<= root.getViewCount()-1; i++) {
+ View view = root.getView(i);
+ if (view instanceof GlyphView && view.isVisible()) {
+ if (!glyphViews.contains(view)) {
+ glyphViews.add((GlyphView)view);
+ }
+ } else {
+ retrieveGlyphViews(view);
+ }
}
}
- private static int getNumberOfTextLines() throws Exception {
- int numberOfLines = 0;
- int caretPosition = getCaretPosition();
- int current = 1;
- int previous;
-
- setCaretPosition(current);
- do {
- previous = current;
- Util.hitKeys(robot, KeyEvent.VK_DOWN);
- toolkit.realSync();
- current = getCaretPosition();
- numberOfLines++;
- } while (current != previous);
-
- setCaretPosition(caretPosition);
- return numberOfLines;
- }
-
- private static int getCaretPosition() throws Exception {
- final int[] result = new int[1];
- SwingUtilities.invokeAndWait(new Runnable() {
- public void run() {
- result[0] = editorPane.getCaretPosition();
- }
- });
- return result[0];
- }
-
- private static void setCaretPosition(final int position) throws Exception {
- SwingUtilities.invokeAndWait(new Runnable() {
- public void run() {
- editorPane.setCaretPosition(position);
- }
- });
- }
-
- private static void createAndShowGUI() throws Exception {
+ private static void createAndShowGUI(String text) throws Exception {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
try {
@@ -126,22 +143,17 @@
} catch (Exception ex) {
throw new RuntimeException(ex);
}
- JFrame frame = new JFrame();
+ frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
editorPane = new JEditorPane();
HTMLEditorKit editorKit = new HTMLEditorKit();
editorPane.setEditorKit(editorKit);
- editorPane.setText("<p>qqqq <em>pp</em> qqqq <em>pp</em> " +
- "qqqq <em>pp</em> qqqq <em>pp</em> qqqq <em>pp</em> qqqq <em>pp" +
- "</em> qqqq <em>pp</em> qqqq <em>pp</em> qqqq <em>pp</em> qqqq</p>");
+ editorPane.setText(text);
editorPane.setCaretPosition(1);
- // An actual font size depends on OS and might be differnet on various OSs.
- // It is necessary to calculate the width to meet the expected number of lines.
- int width = SwingUtilities.computeStringWidth(editorPane.getFontMetrics(editorPane.getFont()),
- "qqqq pp qqqq pp qqqq pp qqqqqqqq");
+
frame.add(editorPane);
- frame.setSize(width, 200);
+ frame.setSize(200, 200);
frame.setVisible(true);
}
});
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/lib/security/CheckBlacklistedCerts.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8011402
+ * @summary Move blacklisting certificate logic from hard code to data
+ */
+
+import sun.security.util.UntrustedCertificates;
+
+import java.io.*;
+import java.security.KeyStore;
+import java.security.cert.*;
+import java.util.*;
+
+public class CheckBlacklistedCerts {
+ public static void main(String[] args) throws Exception {
+
+ String home = System.getProperty("java.home");
+ boolean failed = false;
+
+ // Root CAs should always be trusted
+ File file = new File(home, "lib/security/cacerts");
+ KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
+ try (FileInputStream fis = new FileInputStream(file)) {
+ ks.load(new FileInputStream(file), null);
+ }
+ System.out.println("Check for cacerts: " + ks.size());
+ for (String alias: Collections.list(ks.aliases())) {
+ X509Certificate cert = (X509Certificate)ks.getCertificate(alias);
+ if (UntrustedCertificates.isUntrusted(cert)) {
+ System.out.print(alias + " is untrusted");
+ failed = true;
+ }
+ }
+
+ // All certs in the pem files
+ Set<Certificate> blacklisted = new HashSet<>();
+
+ // Hopefully src comes with test, but it might be missing if doing
+ // a -testonly JPRT job.
+ File[] blacklists = {
+ new File(System.getProperty("test.src"),
+ "../../../src/share/lib/security/blacklisted.certs.pem"),
+ new File(System.getProperty("test.src"),
+ "../../../src/closed/share/lib/security/blacklisted.certs.pem")
+ };
+
+ // Is this an OPENJDK build?
+ if (!new File(home, "lib/security/local_policy.jar").exists()) {
+ blacklists = Arrays.copyOf(blacklists, 1);
+ }
+
+ CertificateFactory cf = CertificateFactory.getInstance("X.509");
+ for (File blacklist: blacklists) {
+ System.out.print("Check for " + blacklist + ": ");
+ if (!blacklist.exists()) {
+ System.out.println("does not exist");
+ } else {
+ try (FileInputStream fis = new FileInputStream(blacklist)) {
+ Collection<? extends Certificate> certs
+ = cf.generateCertificates(fis);
+ System.out.println(certs.size());
+ for (Certificate c: certs) {
+ blacklisted.add(c);
+ X509Certificate cert = ((X509Certificate)c);
+ if (!UntrustedCertificates.isUntrusted(cert)) {
+ System.out.println(cert.getSubjectDN() + " is trusted");
+ failed = true;
+ }
+ }
+ }
+ }
+ }
+
+ // Check the blacklisted.certs file itself
+ file = new File(home, "lib/security/blacklisted.certs");
+ System.out.print("Check for " + file + ": ");
+ try (BufferedReader reader = new BufferedReader(
+ new InputStreamReader(new FileInputStream(file)))) {
+ int acount = 0;
+ int ccount = 0;
+ while (true) {
+ String line = reader.readLine();
+ if (line == null) break;
+ if (line.startsWith("Algorithm")) {
+ acount++;
+ } else if (!line.isEmpty() && !line.startsWith("#")) {
+ ccount++;
+ }
+ }
+ System.out.println(acount + " algs, " + ccount + " certs" );
+ if (acount != 1) {
+ System.out.println("There are " + acount + " algorithms");
+ failed = true;
+ }
+ if (ccount != blacklisted.size()
+ && !blacklisted.isEmpty()) {
+ System.out.println("Wrong blacklisted.certs size: "
+ + ccount + " fingerprints, "
+ + blacklisted.size() + " certs");
+ failed = true;
+ }
+ }
+
+ if (failed) {
+ throw new Exception("Failed");
+ }
+ }
+}
--- a/jdk/test/sun/security/krb5/ParseCAPaths.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/sun/security/krb5/ParseCAPaths.java Thu Oct 10 13:41:08 2013 -0700
@@ -22,7 +22,7 @@
*/
/*
* @test
- * @bug 6789935
+ * @bug 6789935 8012615
* @run main/othervm ParseCAPaths
* @summary cross-realm capath search error
*/
@@ -35,37 +35,75 @@
public static void main(String[] args) throws Exception {
System.setProperty("java.security.krb5.conf",
System.getProperty("test.src", ".") +"/krb5-capaths.conf");
- //System.setProperty("sun.security.krb5.debug", "true");
- // Standard example
+ // MIT
check("ANL.GOV", "TEST.ANL.GOV", "ANL.GOV");
check("ANL.GOV", "ES.NET", "ANL.GOV");
check("ANL.GOV", "PNL.GOV", "ANL.GOV", "ES.NET");
check("ANL.GOV", "NERSC.GOV", "ANL.GOV", "ES.NET");
+ check("NERSC.GOV", "TEST.ANL.GOV", "NERSC.GOV", "ES.NET", "ANL.GOV");
+
+ // RedHat
+ // 3.6.2.1. Configuring a Shared Hierarchy of Names
+ check("AA.EXAMPLE.COM", "BB.EXAMPLE.COM",
+ "AA.EXAMPLE.COM", "EXAMPLE.COM");
+ check("SITE1.SALES.EXAMPLE.COM", "EVERYWHERE.EXAMPLE.COM",
+ "SITE1.SALES.EXAMPLE.COM", "SALES.EXAMPLE.COM",
+ "EXAMPLE.COM");
+ check("DEVEL.EXAMPLE.COM", "PROD.EXAMPLE.ORG",
+ "DEVEL.EXAMPLE.COM", "EXAMPLE.COM", "COM",
+ "ORG", "EXAMPLE.ORG");
+ // 3.6.2.2. Configuring Paths in krb5.conf
+ check("A.EXAMPLE.COM", "B.EXAMPLE.COM", "A.EXAMPLE.COM");
+ check("A.EXAMPLE.COM", "C.EXAMPLE.COM",
+ "A.EXAMPLE.COM", "B.EXAMPLE.COM");
+ check("A.EXAMPLE.COM", "D.EXAMPLE.COM",
+ "A.EXAMPLE.COM", "B.EXAMPLE.COM", "C.EXAMPLE.COM");
+
+ // The original JDK example
+ check("TIVOLI.COM", "IBM.COM", "TIVOLI.COM", "LDAPCENTRAL.NET",
+ "IBM_LDAPCENTRAL.COM", "MOONLITE.ORG");
+
// Hierachical
- check("N1.N.COM", "N2.N.COM", "N1.N.COM", "N.COM"); // 2 common
- check("N1.N.COM", "N2.N3.COM", "N1.N.COM", "N.COM", // 1 common
+ check("N1.N.COM", "N2.N.COM", "N1.N.COM", "N.COM");
+ check("N1.N.COM", "N2.N3.COM", "N1.N.COM", "N.COM",
"COM", "N3.COM");
- check("N1.COM", "N2.COM", "N1.COM", "COM"); // 1 common
- check("N1", "N2", "N1"); // 0 common
- // Extra garbages
- check("A1.COM", "A4.COM", "A1.COM", "A2.COM");
+ check("N1.COM", "N2.COM", "N1.COM", "COM");
+ check("N1", "N2", "N1");
+ check("N1.COM", "N2.ORG", "N1.COM", "COM", "ORG");
+ check("N1.N.COM", "N.COM", "N1.N.COM");
+ check("X.N1.N.COM", "N.COM", "X.N1.N.COM", "N1.N.COM");
+ check("N.COM", "N1.N.COM", "N.COM");
+ check("N.COM", "X.N1.N.COM", "N.COM", "N1.N.COM");
+ check("A.B.C", "D.E.F", "A.B.C", "B.C", "C", "F", "E.F");
+
+ // Full path
+ check("A1.COM", "A2.COM", "A1.COM");
+ check("A1.COM", "A3.COM", "A1.COM", "A2.COM");
+ check("A1.COM", "A4.COM", "A1.COM", "A2.COM", "A3.COM");
+
+ // Shortest path
+ check("B1.COM", "B2.COM", "B1.COM");
check("B1.COM", "B3.COM", "B1.COM", "B2.COM");
+ check("B1.COM", "B4.COM", "B1.COM", "B2.COM", "B3.COM");
+
// Missing is "."
+ check("C1.COM", "C2.COM", "C1.COM", "COM");
check("C1.COM", "C3.COM", "C1.COM", "C2.COM");
- // Multiple path
- check("D1.COM", "D4.COM", "D1.COM", "D2.COM");
- check("E1.COM", "E4.COM", "E1.COM", "E2.COM");
- check("F1.COM", "F4.COM", "F1.COM", "F9.COM");
- // Infinite loop
- check("G1.COM", "G3.COM", "G1.COM", "COM");
- check("H1.COM", "H3.COM", "H1.COM");
+
+ // cRealm = .
+ check("D1.COM", "D2.COM", "D1.COM");
+
+ // Bad cases
+ check("E1.COM", "E2.COM", "E1.COM");
+ check("E1.COM", "E3.COM", "E1.COM", "E4.COM");
+ check("G1.COM", "G3.COM", "G1.COM", "G2.COM");
check("I1.COM", "I4.COM", "I1.COM", "I5.COM");
- // J2=J1 is the same as J2=.
- check("J1.COM", "J2.COM", "J1.COM");
+
// 7019384
check("A9.PRAGUE.XXX.CZ", "SERVIS.XXX.CZ",
"A9.PRAGUE.XXX.CZ", "PRAGUE.XXX.CZ", "ROOT.XXX.CZ");
+
if (failed != null) {
throw failed;
}
@@ -75,6 +113,7 @@
try {
check2(from, to, paths);
} catch (Exception e) {
+ System.out.println(" " + e.getMessage());
failed = e;
}
}
@@ -84,18 +123,14 @@
System.out.println(from + " -> " + to);
System.out.println(" expected: " + Arrays.toString(paths));
String[] result = Realm.getRealmsList(from, to);
- System.out.println(" result: " + Arrays.toString(result));
- if (result == null) {
- if (paths.length == 0) {
- // OK
- } else {
- throw new Exception("Shouldn't have a valid path.");
- }
+ if (result == null || result.length == 0) {
+ throw new Exception("There is always a valid path.");
} else if(result.length != paths.length) {
throw new Exception("Length of path not correct");
} else {
for (int i=0; i<result.length; i++) {
if (!result[i].equals(paths[i])) {
+ System.out.println(" result: " + Arrays.toString(result));
throw new Exception("Path not same");
}
}
--- a/jdk/test/sun/security/krb5/krb5-capaths.conf Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/sun/security/krb5/krb5-capaths.conf Thu Oct 10 13:41:08 2013 -0700
@@ -1,6 +1,6 @@
[capaths]
-# Standard
+# http://web.mit.edu/kerberos/krb5-1.5/krb5-1.5.4/doc/krb5-admin/capaths.html
ANL.GOV = {
TEST.ANL.GOV = .
@@ -14,81 +14,86 @@
PNL.GOV = {
ANL.GOV = ES.NET
}
-NERSC.GOV = {
- ANL.GOV = ES.NET
-}
+#NERSC.GOV = {
+# ANL.GOV = ES.NET
+#}
ES.NET = {
ANL.GOV = .
}
+NERSC.GOV = {
+ ANL.GOV = ES.NET
+ TEST.ANL.GOV = ES.NET
+ TEST.ANL.GOV = ANL.GOV
+ PNL.GOV = ES.NET
+ ES.NET = .
+}
-# Extra garbages
+# The original JDK example
+
+TIVOLI.COM = {
+ IBM.COM = IBM_LDAPCENTRAL.COM MOONLITE.ORG
+ IBM_LDAPCENTRAL.COM = LDAPCENTRAL.NET
+ LDAPCENTRAL.NET = .
+}
+
+# https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Managing_Smart_Cards/Setting_Up_Cross_Realm_Authentication.html
+
+A.EXAMPLE.COM = {
+ B.EXAMPLE.COM = .
+ C.EXAMPLE.COM = B.EXAMPLE.COM
+ D.EXAMPLE.COM = B.EXAMPLE.COM
+ D.EXAMPLE.COM = C.EXAMPLE.COM
+}
+
+# Full path
A1.COM = {
A2.COM = .
+ A3.COM = A2.COM
A4.COM = A2.COM
- A3.COM = A4.COM
- A3.COM = A2.COM
+ A4.COM = A3.COM
}
+# Shortest path
+
B1.COM = {
B2.COM = .
B3.COM = B2.COM
- B3.COM = B4.COM
+ B4.COM = B3.COM
}
-# Missing is "."
+# If no sRealm key, fallback to hierarchy
C1.COM = {
C3.COM = C2.COM
}
-# Multiple paths
+# cRealm is "."
D1.COM = {
- D2.COM = .
- D3.COM = .
- D4.COM = D2.COM
- D4.COM = D3.COM
+ D2.COM=D1.COM
}
+# Bad cases
+
E1.COM = {
- E2.COM = .
+ E2.COM = E2.COM
+ E3.COM = E4.COM
E3.COM = .
- E4.COM = E2.COM E3.COM E2.COM
}
-# Shortest or First?
-
-F1.COM = {
- F2.COM = .
- F3.COM = F2.COM
- F4.COM = F9.COM
- F4.COM = F3.COM
- F4.COM = F2.COM
-}
-
-# Infinite loop
-
G1.COM = {
G2.COM = G3.COM
G3.COM = G2.COM
}
-H1.COM = {
- H2.COM = H3.COM
- H3.COM = H2.COM
- H3.COM = .
-}
-
I1.COM = {
I2.COM = I3.COM
I3.COM = I2.COM
- I4.COM = I2.COM I5.COM
+ I4.COM = I5.COM
}
-J1.COM = {
- J2.COM=J1.COM
-}
+# 7019384
A9.PRAGUE.XXX.CZ = {
PRAGUE.XXX.CZ = .
--- a/jdk/test/sun/security/tools/keytool/autotest.sh Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/sun/security/tools/keytool/autotest.sh Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2006, 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
@@ -58,7 +58,7 @@
case "$OS" in
SunOS )
FS="/"
- LIBNAME="/usr/lib/mps/libsoftokn3.so"
+ LIBNAME="/usr/lib/mps/`isainfo -n`/libsoftokn3.so"
;;
Linux )
FS="/"
--- a/jdk/test/sun/tools/jhat/HatRun.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/sun/tools/jhat/HatRun.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -167,28 +167,23 @@
String cdir = System.getProperty("test.classes", ".");
String os_arch = System.getProperty("os.arch");
String os_name = System.getProperty("os.name");
- boolean d64 = os_name.equals("SunOS") && (
- os_arch.equals("sparcv9") ||
- os_arch.equals("amd64"));
- String isa_dir = d64?(File.separator+os_arch):"";
String java = jre_home
- + File.separator + "bin" + isa_dir
+ + File.separator + "bin"
+ File.separator + "java";
String jhat = sdk_home + File.separator + "bin"
+ File.separator + "jhat";
/* Array of strings to be passed in for exec:
* 1. java
* 2. -Dtest.classes=.
- * 3. -d64 (optional)
- * 4. -Xcheck:jni (Just because it finds bugs)
- * 5. -Xverify:all (Make sure verification is on full blast)
- * 6. -agent
+ * 3. -Xcheck:jni (Just because it finds bugs)
+ * 4. -Xverify:all (Make sure verification is on full blast)
+ * 5. -agent
* vm_options
- * 7+i. classname
+ * 6+i. classname
*/
int nvm_options = 0;
if ( vm_options != null ) nvm_options = vm_options.length;
- String cmd[] = new String[1 + (d64?1:0) + 7 + nvm_options];
+ String cmd[] = new String[1 + 7 + nvm_options];
int i,j;
i = 0;
@@ -196,9 +191,6 @@
cmd[i++] = "-cp";
cmd[i++] = cdir;
cmd[i++] = "-Dtest.classes=" + cdir;
- if ( d64 ) {
- cmd[i++] = "-d64";
- }
cmd[i++] = "-Xcheck:jni";
cmd[i++] = "-Xverify:all";
dumpfile= cdir + File.separator + class_name + ".hdump";
--- a/jdk/test/sun/tools/jstat/gcCapacityOutput1.awk Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/sun/tools/jstat/gcCapacityOutput1.awk Thu Oct 10 13:41:08 2013 -0700
@@ -3,19 +3,19 @@
# that the numerical values conform to a specific pattern, rather than
# specific values.
#
-# NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC YGC FGC
-# 2176.0 7232.0 2176.0 64.0 64.0 2048.0 6016.0 58304.0 6016.0 6016.0 8192.0 65536.0 8192.0 8192.0 0
+# NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
+# 4096.0 657408.0 8192.0 512.0 512.0 3072.0 6144.0 1312768.0 6144.0 6144.0 512.0 132096.0 5120.0 512.0 131072.0 512.0 1 0
BEGIN {
headerlines=0; datalines=0; totallines=0
}
-/^ NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC YGC FGC $/ {
+/^ NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC $/ {
headerlines++;
}
-/^[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+$/ {
+/^[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+$/ {
datalines++;
}
--- a/jdk/test/sun/tools/jstat/gcCauseOutput1.awk Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/sun/tools/jstat/gcCauseOutput1.awk Thu Oct 10 13:41:08 2013 -0700
@@ -3,15 +3,15 @@
# that the numerical values conform to a specific pattern, rather than
# specific values.
#
-# S0 S1 E O P YGC YGCT FGC FGCT GCT LGCC GCC
-# 0.00 100.00 14.01 3.06 23.20 1 0.032 0 0.000 0.032 Allocation Failure No GC
+# S0 S1 E O M CCS YGC YGCT FGC FGCT GCT LGCC GCC
+# 0.00 0.00 0.00 9.97 90.94 87.70 2 0.013 0 0.000 0.013 Allocation Failure No GC
BEGIN {
headerlines=0; datalines=0; totallines=0
}
-/^ S0 S1 E O M YGC YGCT FGC FGCT GCT LGCC GCC $/ {
+/^ S0 S1 E O M CCS YGC YGCT FGC FGCT GCT LGCC GCC $/ {
headerlines++;
}
@@ -23,7 +23,7 @@
# or more letters and spaces. It also provides for the ".", "(", and ")"
# characters to allow for the string "System.gc()".
#
-/^[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[a-zA-Z]+[a-zA-Z \.\(\)]*[ ]*[a-zA-Z]+[a-zA-Z \.\(\)]*$/ {
+/^[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[a-zA-Z]+[a-zA-Z \.\(\)]*[ ]*[a-zA-Z]+[a-zA-Z \.\(\)]*$/ {
datalines++;
}
--- a/jdk/test/sun/tools/jstat/gcMetaCapacityOutput1.awk Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/sun/tools/jstat/gcMetaCapacityOutput1.awk Thu Oct 10 13:41:08 2013 -0700
@@ -3,18 +3,18 @@
# that the numerical values conform to a specific pattern, rather than
# specific values.
#
-# MCMN MCMX MC YGC FGC FGCT GCT
-# 8192.0 65536.0 8192.0 8192.0 1 0 0.000 0.029
+# MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC FGCT GCT
+# 512.0 132096.0 5120.0 512.0 131072.0 512.0 1 0 0.000 0.004
BEGIN {
headerlines=0; datalines=0; totallines=0
}
-/^ MCMN MCMX MC YGC FGC FGCT GCT $/ {
+/^ MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC FGCT GCT $/ {
headerlines++;
}
-/^[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+$/ {
+/^[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+$/ {
datalines++;
}
--- a/jdk/test/sun/tools/jstat/gcOldOutput1.awk Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/sun/tools/jstat/gcOldOutput1.awk Thu Oct 10 13:41:08 2013 -0700
@@ -3,19 +3,19 @@
# that the numerical values conform to a specific pattern, rather than
# specific values.
#
-# MC MU OC OU YGC FGC FGCT GCT
-# 8192.0 1877.3 6016.0 180.8 1 0 0.000 0.030
+# MC MU CCSC CCSU OC OU YGC FGC FGCT GCT
+# 5120.0 4152.0 512.0 397.9 6144.0 200.0 1 0 0.000 0.005
BEGIN {
headerlines=0; datalines=0; totallines=0
}
-/^ MC MU OC OU YGC FGC FGCT GCT $/ {
+/^ MC MU CCSC CCSU OC OU YGC FGC FGCT GCT $/ {
headerlines++;
}
-/^[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+$/ {
+/^[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+$/ {
datalines++;
}
--- a/jdk/test/sun/tools/jstat/gcOutput1.awk Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/sun/tools/jstat/gcOutput1.awk Thu Oct 10 13:41:08 2013 -0700
@@ -3,19 +3,19 @@
# that the numerical values conform to a specific pattern, rather than
# specific values.
#
-# S0C S1C S0U S1U EC EU OC OU MC MU YGC YGCT FGC FGCT GCT
-# 64.0 64.0 0.0 0.0 2048.0 1711.2 6016.0 0.0 8192.0 1948.6 0 0.000 0 0.000 0.000
+# S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
+# 512.0 512.0 0.0 496.0 3072.0 615.5 6144.0 280.0 5120.0 4176.0 512.0 401.0 1 0.005 0 0.000 0.005
BEGIN {
headerlines=0; datalines=0; totallines=0
}
-/^ S0C S1C S0U S1U EC EU OC OU MC MU YGC YGCT FGC FGCT GCT $/ {
+/^ S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT $/ {
headerlines++;
}
-/^[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+$/ {
+/^[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+$/ {
datalines++;
}
--- a/jdk/test/sun/tools/jstat/lineCounts1.awk Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/sun/tools/jstat/lineCounts1.awk Thu Oct 10 13:41:08 2013 -0700
@@ -3,22 +3,22 @@
# that the numerical values conform to a specific pattern, rather than
# specific values.
#
-# S0 S1 E O M YGC YGCT FGC FGCT GCT
-# 0.00 100.00 68.87 1.24 27.75 1 0.044 0 0.000 0.044
-# 0.00 100.00 68.87 1.24 27.84 1 0.044 0 0.000 0.044
-# 0.00 100.00 68.87 1.24 27.84 1 0.044 0 0.000 0.044
-# 0.00 100.00 70.89 1.24 27.84 1 0.044 0 0.000 0.044
-# 0.00 100.00 70.89 1.24 27.84 1 0.044 0 0.000 0.044
+# S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
+# 0.00 93.76 28.80 1.82 77.74 68.02 1 0.005 0 0.000 0.005
+# 0.00 93.76 73.04 1.82 77.74 68.02 1 0.005 0 0.000 0.005
+# 0.00 93.76 73.04 1.82 77.74 68.02 1 0.005 0 0.000 0.005
+# 0.00 93.76 73.04 1.82 77.74 68.02 1 0.005 0 0.000 0.005
+# 0.00 93.76 75.00 1.82 77.74 68.02 1 0.005 0 0.000 0.005
BEGIN {
headerlines=0; datalines=0; totallines=0
}
-/^ S0 S1 E O M YGC YGCT FGC FGCT GCT $/ {
+/^ S0 S1 E O M CCS YGC YGCT FGC FGCT GCT $/ {
headerlines++;
}
-/^[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+$/ {
+/^[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+$/ {
datalines++;
}
--- a/jdk/test/sun/tools/jstat/lineCounts2.awk Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/sun/tools/jstat/lineCounts2.awk Thu Oct 10 13:41:08 2013 -0700
@@ -3,18 +3,18 @@
# that the numerical values conform to a specific pattern, rather than
# specific values.
#
-# S0 S1 E O M YGC YGCT FGC FGCT GCT
-# 0.00 100.00 68.87 1.24 27.75 1 0.044 0 0.000 0.044
+# S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
+# 0.00 93.76 28.40 1.82 77.74 68.02 1 0.005 0 0.000 0.005
BEGIN {
headerlines=0; datalines=0; totallines=0
}
-/^ S0 S1 E O M YGC YGCT FGC FGCT GCT $/ {
+/^ S0 S1 E O M CCS YGC YGCT FGC FGCT GCT $/ {
headerlines++;
}
-/^[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+$/ {
+/^[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+$/ {
datalines++;
}
--- a/jdk/test/sun/tools/jstat/lineCounts3.awk Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/sun/tools/jstat/lineCounts3.awk Thu Oct 10 13:41:08 2013 -0700
@@ -3,27 +3,27 @@
# that the numerical values conform to a specific pattern, rather than
# specific values.
#
-# S0 S1 E O M YGC YGCT FGC FGCT GCT
-# 0.00 99.99 66.81 1.24 26.55 1 0.028 0 0.000 0.028
-# 0.00 99.99 68.81 1.24 27.84 1 0.028 0 0.000 0.028
-# 0.00 99.99 70.81 1.24 27.84 1 0.028 0 0.000 0.028
-# 0.00 99.99 70.81 1.24 27.84 1 0.028 0 0.000 0.028
-# 0.00 99.99 70.81 1.24 27.84 1 0.028 0 0.000 0.028
-# 0.00 99.99 72.81 1.24 27.84 1 0.028 0 0.000 0.028
-# 0.00 99.99 72.81 1.24 27.84 1 0.028 0 0.000 0.028
-# 0.00 99.99 74.81 1.24 27.84 1 0.028 0 0.000 0.028
-# 0.00 99.99 74.81 1.24 27.84 1 0.028 0 0.000 0.028
-# 0.00 99.99 76.81 1.24 27.85 1 0.028 0 0.000 0.028
+# S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
+# 0.00 93.76 26.48 1.95 77.78 68.02 1 0.006 0 0.000 0.006
+# 0.00 93.76 71.58 1.95 77.78 68.02 1 0.006 0 0.000 0.006
+# 0.00 93.76 73.58 1.95 77.78 68.02 1 0.006 0 0.000 0.006
+# 0.00 93.76 73.58 1.95 77.78 68.02 1 0.006 0 0.000 0.006
+# 0.00 93.76 73.58 1.95 77.78 68.02 1 0.006 0 0.000 0.006
+# 0.00 93.76 75.58 1.95 77.78 68.02 1 0.006 0 0.000 0.006
+# 0.00 93.76 75.58 1.95 77.78 68.02 1 0.006 0 0.000 0.006
+# 0.00 93.76 77.58 1.95 77.78 68.02 1 0.006 0 0.000 0.006
+# 0.00 93.76 77.58 1.95 77.78 68.02 1 0.006 0 0.000 0.006
+# 0.00 93.76 77.58 1.95 77.78 68.02 1 0.006 0 0.000 0.006
BEGIN {
headerlines=0; datalines=0; totallines=0
}
-/^ S0 S1 E O M YGC YGCT FGC FGCT GCT $/ {
+/^ S0 S1 E O M CCS YGC YGCT FGC FGCT GCT $/ {
headerlines++;
}
-/^[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+$/ {
+/^[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+$/ {
datalines++;
}
--- a/jdk/test/sun/tools/jstat/lineCounts4.awk Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/sun/tools/jstat/lineCounts4.awk Thu Oct 10 13:41:08 2013 -0700
@@ -3,30 +3,30 @@
# that the numerical values conform to a specific pattern, rather than
# specific values.
#
-# S0 S1 E O M YGC YGCT FGC FGCT GCT
-# 0.00 99.99 66.81 1.24 26.55 1 0.028 0 0.000 0.028
-# 0.00 99.99 68.81 1.24 27.84 1 0.028 0 0.000 0.028
-# 0.00 99.99 70.81 1.24 27.84 1 0.028 0 0.000 0.028
-# 0.00 99.99 70.81 1.24 27.84 1 0.028 0 0.000 0.028
-# 0.00 99.99 70.81 1.24 27.84 1 0.028 0 0.000 0.028
-# 0.00 99.99 72.81 1.24 27.84 1 0.028 0 0.000 0.028
-# 0.00 99.99 72.81 1.24 27.84 1 0.028 0 0.000 0.028
-# 0.00 99.99 74.81 1.24 27.84 1 0.028 0 0.000 0.028
-# 0.00 99.99 74.81 1.24 27.84 1 0.028 0 0.000 0.028
-# 0.00 99.99 76.81 1.24 27.85 1 0.028 0 0.000 0.028
-# S0 S1 E O P YGC YGCT FGC FGCT GCT
-# 0.00 99.99 76.81 1.24 27.85 1 0.028 0 0.000 0.028
+# S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
+# 0.00 96.88 66.55 2.34 77.78 68.02 1 0.003 0 0.000 0.003
+# 0.00 96.88 71.58 2.34 77.78 68.02 1 0.003 0 0.000 0.003
+# 0.00 96.88 73.58 2.34 77.78 68.02 1 0.003 0 0.000 0.003
+# 0.00 96.88 73.58 2.34 77.78 68.02 1 0.003 0 0.000 0.003
+# 0.00 96.88 73.58 2.34 77.78 68.02 1 0.003 0 0.000 0.003
+# 0.00 96.88 75.58 2.34 77.78 68.02 1 0.003 0 0.000 0.003
+# 0.00 96.88 75.58 2.34 77.78 68.02 1 0.003 0 0.000 0.003
+# 0.00 96.88 77.58 2.34 77.78 68.02 1 0.003 0 0.000 0.003
+# 0.00 96.88 77.58 2.34 77.78 68.02 1 0.003 0 0.000 0.003
+# 0.00 96.88 77.58 2.34 77.78 68.02 1 0.003 0 0.000 0.003
+# S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
+# 0.00 96.88 79.58 2.34 77.78 68.02 1 0.003 0 0.000 0.003
BEGIN {
headerlines=0; datalines=0; totallines=0
datalines2=0;
}
-/^ S0 S1 E O M YGC YGCT FGC FGCT GCT $/ {
+/^ S0 S1 E O M CCS YGC YGCT FGC FGCT GCT $/ {
headerlines++;
}
-/^[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+$/ {
+/^[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+$/ {
if (headerlines == 2) {
datalines2++;
}
--- a/jdk/test/sun/tools/jstat/timeStamp1.awk Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/sun/tools/jstat/timeStamp1.awk Thu Oct 10 13:41:08 2013 -0700
@@ -3,18 +3,18 @@
# that the numerical values conform to a specific pattern, rather than
# specific values.
#
-# S0 S1 E O M YGC YGCT FGC FGCT GCT
-# 0.00 100.00 68.87 1.24 27.75 1 0.044 0 0.000 0.044
+#Timestamp S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
+# 0.3 0.00 100.00 68.74 1.95 77.73 68.02 1 0.004 0 0.000 0.004
BEGIN {
headerlines=0; datalines=0; totallines=0
}
-/^Timestamp S0 S1 E O M YGC YGCT FGC FGCT GCT $/ {
+/^Timestamp S0 S1 E O M CCS YGC YGCT FGC FGCT GCT $/ {
headerlines++;
}
-/^[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+$/ {
+/^[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+$/ {
datalines++;
}
--- a/jdk/test/sun/tools/jstatd/jstatGcutilOutput1.awk Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/sun/tools/jstatd/jstatGcutilOutput1.awk Thu Oct 10 13:41:08 2013 -0700
@@ -3,22 +3,22 @@
# that the numerical values conform to a specific pattern, rather than
# specific values.
#
-# S0 S1 E O M YGC YGCT FGC FGCT GCT
-# 0.00 100.00 68.87 1.24 27.75 1 0.044 0 0.000 0.044
-# 0.00 100.00 68.87 1.24 27.84 1 0.044 0 0.000 0.044
-# 0.00 100.00 68.87 1.24 27.84 1 0.044 0 0.000 0.044
-# 0.00 100.00 70.89 1.24 27.84 1 0.044 0 0.000 0.044
-# 0.00 100.00 70.89 1.24 27.84 1 0.044 0 0.000 0.044
+# S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
+# 0.00 100.00 56.99 7.81 95.03 87.56 1 0.009 0 0.000 0.009
+# 0.00 100.00 63.64 7.81 95.03 87.56 1 0.009 0 0.000 0.009
+# 0.00 100.00 64.68 7.81 95.03 87.56 1 0.009 0 0.000 0.009
+# 0.00 100.00 65.73 7.81 95.03 87.56 1 0.009 0 0.000 0.009
+# 0.00 100.00 67.22 7.81 95.03 87.56 1 0.009 0 0.000 0.009
BEGIN {
headerlines=0; datalines=0; totallines=0
}
-/^ S0 S1 E O M YGC YGCT FGC FGCT GCT $/ {
+/^ S0 S1 E O M CCS YGC YGCT FGC FGCT GCT $/ {
headerlines++;
}
-/^[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+$/ {
+/^[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+[ ]*[0-9]+\.[0-9]+[ ]*[0-9]+\.[0-9]+$/ {
datalines++;
}
--- a/jdk/test/tools/jar/ChangeDir.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/tools/jar/ChangeDir.java Thu Oct 10 13:41:08 2013 -0700
@@ -23,13 +23,15 @@
/**
* @test
- * @bug 4806786
+ * @bug 4806786 8023113
* @summary jar -C doesn't ignore multiple // in path
*/
import java.io.*;
+import java.nio.file.*;
import java.util.*;
import java.util.jar.*;
+import java.util.stream.Stream;
import sun.tools.jar.Main;
public class ChangeDir {
@@ -37,13 +39,16 @@
private final static String fileName = "hello.txt";
/** Remove dirs & files needed for test. */
- private static void cleanup(File dir) throws Throwable {
- if (dir != null && dir.exists()) {
- for (File ff : dir.listFiles()) {
- check(ff.delete());
+ private static void cleanup(Path dir) {
+ try {
+ if (Files.isDirectory(dir)) {
+ try (Stream<Path> s = Files.list(dir)) {
+ s.forEach( p -> cleanup(p));
+ }
}
- check(dir.delete());
- check(new File(jarName).delete());
+ Files.delete(dir);
+ } catch (IOException x) {
+ fail(x.toString());
}
}
@@ -62,19 +67,16 @@
}
static void doTest(String sep) throws Throwable {
- File testDir = null;
- JarFile jf = null;
+ Path topDir = Files.createTempDirectory("delete");
try {
+ Files.deleteIfExists(Paths.get(jarName));
+
// Create a subdirectory "a/b"
- File f = File.createTempFile("delete", ".me");
- String dirName = f.getParent();
- testDir = new File(dirName + sep + "a" + sep + "b");
- cleanup(testDir);
- check(testDir.mkdirs());
+ Path testDir = Files.createDirectories(topDir.resolve("a").resolve("b"));
// Create file in that subdirectory
- File testFile = new File(testDir, fileName);
- check(testFile.createNewFile());
+ Path testFile = testDir.resolve(fileName);
+ Files.createFile(testFile);
// Create a jar file from that subdirectory, but with a // in the
// path name.
@@ -82,33 +84,32 @@
argList.add("cf");
argList.add(jarName);
argList.add("-C");
- argList.add(dirName + sep + "a" + sep + sep + "b"); // Note double 'sep' is intentional
+ argList.add(topDir.toString() + sep + "a" + sep + sep + "b"); // Note double 'sep' is intentional
argList.add(fileName);
- String jarArgs[] = new String[argList.size()];
- jarArgs = argList.toArray(jarArgs);
Main jarTool = new Main(System.out, System.err, "jar");
- if (!jarTool.run(jarArgs)) {
+ if (!jarTool.run(argList.toArray(new String[argList.size()]))) {
fail("Could not create jar file.");
}
// Check that the entry for hello.txt does *not* have a pathname.
- jf = new JarFile(jarName);
- for (Enumeration<JarEntry> i = jf.entries(); i.hasMoreElements();) {
- JarEntry je = i.nextElement();
- String name = je.getName();
- if (name.indexOf(fileName) != -1) {
- if (name.indexOf(fileName) != 0) {
- fail(String.format(
- "Expected '%s' but got '%s'%n", fileName, name));
+ try (JarFile jf = new JarFile(jarName)) {
+ for (Enumeration<JarEntry> i = jf.entries(); i.hasMoreElements();) {
+ JarEntry je = i.nextElement();
+ String name = je.getName();
+ if (name.indexOf(fileName) != -1) {
+ if (name.indexOf(fileName) != 0) {
+ fail(String.format(
+ "Expected '%s' but got '%s'%n", fileName, name));
+ } else {
+ pass();
+ }
}
}
}
} finally {
- if (jf != null) {
- jf.close();
- }
- cleanup(testDir);
+ cleanup(topDir);
+ Files.deleteIfExists(Paths.get(jarName));
}
}
--- a/jdk/test/tools/launcher/6842838/Test6842838.sh Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/tools/launcher/6842838/Test6842838.sh Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -48,16 +48,16 @@
NULL=/dev/null
PS=":"
FS="/"
- JAVA_EXE=${TESTJAVA}${FS}bin${FS}sparcv9${FS}java
+ JAVA_EXE=${TESTJAVA}${FS}bin${FS}java
;;
* )
- printf "Only testing on sparcv9 (use libumem to reliably catch buffer overrun)\n"
+ printf "Only testing on solaris 64-bit (use libumem to reliably catch buffer overrun)\n"
exit 0;
;;
esac
if [ ! -x ${JAVA_EXE} ]; then
- printf "Warning: sparcv9 components not installed - skipping test.\n"
+ printf "Warning: 64-bit components not installed - skipping test.\n"
exit 0
fi
--- a/jdk/test/tools/launcher/ChangeDataModel.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/tools/launcher/ChangeDataModel.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -30,8 +30,6 @@
* @author Joseph D. Darcy, ksrini
*/
import java.io.File;
-import java.util.HashMap;
-import java.util.Map;
public class ChangeDataModel extends TestHelper {
private static final File TestJar = new File("test" + JAR_FILE_EXT);
@@ -54,48 +52,14 @@
throw new Error("unsupported data model");
}
- // test dual mode systems
- if (isDualMode) {
- // albeit dual mode we may not have the 64 bit components present
- if (dualModePresent()) {
- // 32-bit -> 64-bit
- checkExecCount(javaCmd, "-d64");
- // 64-bit -> 32-bit
- checkExecCount(java64Cmd, "-d32");
-
- checkAcceptance(javaCmd, "-d64");
- checkAcceptance(java64Cmd, "-d32");
- } else {
- System.out.println("Warning: no 64-bit components found;" +
- " only one data model tested.");
- }
+ // Negative tests: ensure that non-dual mode systems reject the
+ // complementary (other) data model
+ if (is32Bit) {
+ checkRejection(javaCmd, "-d64");
+ } else if (is64Bit) {
+ checkRejection(javaCmd, "-d32");
} else {
- // Negative tests: ensure that non-dual mode systems reject the
- // complementary (other) data model
- if (is32Bit) {
- checkRejection(javaCmd, "-d64");
- } else if (is64Bit) {
- checkRejection(javaCmd, "-d32");
- } else {
- throw new Error("unsupported data model");
- }
- }
- }
-
- static void checkExecCount(String cmd, String dmodel) {
- Map<String, String> envMap = new HashMap<>();
- envMap.put(JLDEBUG_KEY, "true");
- TestResult tr = doExec(envMap, javaCmd, "-d64",
- "-jar", TestJar.getAbsolutePath());
- int count = 0;
- for (String x : tr.testOutput) {
- if (x.contains(EXPECTED_MARKER)) {
- count++;
- if (count > 1) {
- System.out.println(tr);
- throw new RuntimeException("Maximum exec count of 1 execeeded");
- }
- }
+ throw new Error("unsupported data model");
}
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/tools/launcher/DiacriticTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8017248
+ * @summary Compiler Diacritics Issue
+ * @run main DiacriticTest
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+
+public class DiacriticTest extends TestHelper {
+
+ // NFD-normalized form of the class name
+ static String NAME_NFD="ClassA\u0301";
+ // NFC-normalized form of the same class name
+ static String NAME_NFC="Class\u00C1";
+
+ public static void main(String[] args) throws IOException {
+ if (!isMacOSX) {
+ System.out.println("This test is for Mac OS X only. Passing.");
+ return;
+ }
+
+ File sourceFile = new File(NAME_NFC + ".java");
+ String source = "public class " + NAME_NFC + " { " +
+ " public static void main(String args[]) {\n" +
+ " System.out.println(\"Success!\");\n" +
+ " }\n" +
+ "}\n";
+ ArrayList<String> content = new ArrayList<>();
+ content.add(source);
+ createFile(sourceFile, content);
+
+ HashMap<String, String> env = new HashMap<>();
+ env.put("LC_CTYPE", "UTF-8");
+
+ TestResult tr;
+ tr = doExec(env, javacCmd, NAME_NFD + ".java");
+ System.out.println(tr.testOutput);
+ if (!tr.isOK()) {
+ System.out.println(tr);
+ throw new RuntimeException("Compilation failed");
+ }
+ tr = doExec(env, javaCmd, "-cp", ".", NAME_NFD);
+ System.out.println(tr.testOutput);
+ if (!tr.isOK()) {
+ System.out.println(tr);
+ throw new RuntimeException("Test execution failed");
+ }
+ }
+}
--- a/jdk/test/tools/launcher/ExecutionEnvironment.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/tools/launcher/ExecutionEnvironment.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 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
@@ -26,7 +26,7 @@
* @bug 4780570 4731671 6354700 6367077 6670965 4882974
* @summary Checks for LD_LIBRARY_PATH and execution on *nixes
* @compile -XDignore.symbol.file ExecutionEnvironment.java
- * @run main ExecutionEnvironment
+ * @run main/othervm ExecutionEnvironment
*/
/*
@@ -46,6 +46,9 @@
* b. LD_LIBRARY_PATH32 is ignored if set
* 5. no extra symlink exists on Solaris ie.
* jre/lib/$arch/libjvm.so -> client/libjvm.so
+ * 6. Since 32-bit Solaris is no longer supported we continue to ensure that
+ * the appropriate paths are ignored or used, additionally we also test to
+ * ensure the 64-bit isadir exists and contains appropriate links.
* TODO:
* a. perhaps we need to add a test to audit all environment variables are
* in pristine condition after the launch, there may be a few that the
@@ -54,10 +57,16 @@
*/
import java.io.File;
import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.nio.file.DirectoryStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import static java.nio.file.LinkOption.*;
+import java.util.regex.Pattern;
public class ExecutionEnvironment extends TestHelper {
@@ -80,13 +89,14 @@
static final File testJarFile = new File("EcoFriendly.jar");
- static int errors = 0;
- static int passes = 0;
-
static final String LIBJVM = TestHelper.isWindows
? "jvm.dll"
: "libjvm" + (TestHelper.isMacOSX ? ".dylib" : ".so");
+ public ExecutionEnvironment() {
+ createTestJar();
+ }
+
static void createTestJar() {
try {
List<String> codeList = new ArrayList<>();
@@ -111,13 +121,17 @@
throw new RuntimeException(fnfe);
}
}
-
+ private void flagError(TestResult tr, String message) {
+ System.err.println(tr);
+ throw new RuntimeException(message);
+ }
/*
* tests if the launcher pollutes the LD_LIBRARY_PATH variables ie. there
* should not be any new variables or pollution/mutations of any kind, the
* environment should be pristine.
*/
- private static void ensureEcoFriendly() {
+ @Test
+ void testEcoFriendly() {
TestResult tr = null;
Map<String, String> env = new HashMap<>();
@@ -129,17 +143,12 @@
tr = doExec(env, javaCmd, "-jar", testJarFile.getAbsolutePath());
if (!tr.isNotZeroOutput()) {
- System.out.println(tr);
- throw new RuntimeException("Error: No output at all. Did the test execute ?");
+ flagError(tr, "Error: No output at all. Did the test execute ?");
}
for (String x : LD_PATH_STRINGS) {
if (!tr.contains(x)) {
- System.out.println("FAIL: did not get <" + x + ">");
- System.out.println(tr);
- errors++;
- } else {
- passes++;
+ flagError(tr, "FAIL: did not get <" + x + ">");
}
}
}
@@ -148,19 +157,15 @@
* ensures that there are no execs as long as we are in the same
* data model
*/
- static void ensureNoExec() {
+ @Test
+ void testNoExec() {
Map<String, String> env = new HashMap<>();
env.put(JLDEBUG_KEY, "true");
TestResult tr = doExec(env, javaCmd, "-version");
if (tr.testOutput.contains(EXPECTED_MARKER)) {
- System.out.println("FAIL: EnsureNoExecs: found expected warning <" +
- EXPECTED_MARKER +
+ flagError(tr, "testNoExec: found warning <" + EXPECTED_MARKER +
"> the process execing ?");
- errors++;
- } else {
- passes++;
}
- return;
}
/*
@@ -173,8 +178,8 @@
* For Solaris 64-bit
* * The LD_LIBRARY_PATH_64 should override LD_LIBRARY_PATH if specified
*/
-
- static void verifyJavaLibraryPath() {
+ @Test
+ void testJavaLibraryPath() {
TestResult tr = null;
Map<String, String> env = new HashMap<>();
@@ -200,88 +205,33 @@
env.put(pairs[0], pairs[1]);
}
- // verify the override occurs, since we know the invocation always
- // uses by default is 32-bit, therefore we also set the test
- // expectation to be the same.
+ // verify the override occurs for 64-bit system
tr = doExec(env, javaCmd, "-jar", testJarFile.getAbsolutePath());
- verifyJavaLibraryPathOverride(tr, true);
-
- // try changing the model from 32 to 64 bit
- if (dualModePresent() && is32Bit) {
- // verify the override occurs
- env.clear();
- for (String x : LD_PATH_STRINGS) {
- String pairs[] = x.split("=");
- env.put(pairs[0], pairs[1]);
- }
- tr = doExec(env, javaCmd, "-d64", "-jar",
- testJarFile.getAbsolutePath());
- verifyJavaLibraryPathOverride(tr, false);
-
- // no override
- env.clear();
- env.put(LD_LIBRARY_PATH, LD_LIBRARY_PATH_VALUE);
- tr = doExec(env, javaCmd, "-jar",
- testJarFile.getAbsolutePath());
- verifyJavaLibraryPathGeneric(tr);
- }
-
- // try changing the model from 64 to 32 bit
- if (java64Cmd != null && is64Bit) {
- // verify the override occurs
- env.clear();
- for (String x : LD_PATH_STRINGS) {
- String pairs[] = x.split("=");
- env.put(pairs[0], pairs[1]);
- }
- tr = doExec(env, java64Cmd, "-d32", "-jar",
- testJarFile.getAbsolutePath());
- verifyJavaLibraryPathOverride(tr, true);
-
- // no override
- env.clear();
- env.put(LD_LIBRARY_PATH, LD_LIBRARY_PATH_VALUE);
- tr = doExec(env, java64Cmd, "-d32", "-jar",
- testJarFile.getAbsolutePath());
- verifyJavaLibraryPathGeneric(tr);
- }
+ verifyJavaLibraryPathOverride(tr, false);
}
}
- private static void verifyJavaLibraryPathGeneric(TestResult tr) {
+ private void verifyJavaLibraryPathGeneric(TestResult tr) {
if (!tr.matches("java.library.path=.*" + LD_LIBRARY_PATH_VALUE + ".*")) {
- System.out.print("FAIL: verifyJavaLibraryPath: ");
- System.out.println(" java.library.path does not contain " +
+ flagError(tr, "testJavaLibraryPath: java.library.path does not contain " +
LD_LIBRARY_PATH_VALUE);
- System.out.println(tr);
- errors++;
- } else {
- passes++;
}
}
- private static void verifyJavaLibraryPathOverride(TestResult tr,
+ private void verifyJavaLibraryPathOverride(TestResult tr,
boolean is32Bit) {
// make sure the 32/64 bit value exists
if (!tr.matches("java.library.path=.*" +
(is32Bit ? LD_LIBRARY_PATH_32_VALUE : LD_LIBRARY_PATH_64_VALUE) + ".*")) {
- System.out.print("FAIL: verifyJavaLibraryPathOverride: ");
- System.out.println(" java.library.path does not contain " +
+ flagError(tr, "verifyJavaLibraryPathOverride: " +
+ " java.library.path does not contain " +
(is32Bit ? LD_LIBRARY_PATH_32_VALUE : LD_LIBRARY_PATH_64_VALUE));
- System.out.println(tr);
- errors++;
- } else {
- passes++;
+
}
// make sure the generic value is absent
- if (tr.matches("java.library.path=.*" + LD_LIBRARY_PATH_VALUE + ".*")) {
- System.out.print("FAIL: verifyJavaLibraryPathOverride: ");
- System.out.println(" java.library.path contains " +
- LD_LIBRARY_PATH_VALUE);
- System.out.println(tr);
- errors++;
- } else {
- passes++;
+ if (!tr.notMatches("java.library.path=.*" + LD_LIBRARY_PATH_VALUE + ".*")) {
+ flagError(tr, "verifyJavaLibraryPathOverride: " +
+ " java.library.path contains " + LD_LIBRARY_PATH_VALUE);
}
}
@@ -289,34 +239,28 @@
* ensures we have indeed exec'ed the correct vm of choice, all VMs support
* -server, however 32-bit VMs support -client and -server.
*/
- static void verifyVmSelection() {
+ @Test
+ void testVmSelection() {
TestResult tr = null;
if (is32Bit) {
tr = doExec(javaCmd, "-client", "-version");
if (!tr.matches(".*Client VM.*")) {
- System.out.println("FAIL: the expected vm -client did not launch");
- System.out.println(tr);
- errors++;
- } else {
- passes++;
+ flagError(tr, "the expected vm -client did not launch");
}
}
tr = doExec(javaCmd, "-server", "-version");
if (!tr.matches(".*Server VM.*")) {
- System.out.println("FAIL: the expected vm -server did not launch");
- System.out.println(tr);
- errors++;
- } else {
- passes++;
+ flagError(tr, "the expected vm -server did not launch");
}
}
/*
* checks to see there is no extra libjvm.so than needed
*/
- static void verifyNoSymLink() {
+ @Test
+ void testNoSymLink() {
if (is64Bit) {
return;
}
@@ -326,31 +270,65 @@
symLink = new File(JAVAHOME, libPathPrefix +
getJreArch() + "/" + LIBJVM);
if (symLink.exists()) {
- System.out.println("FAIL: The symlink exists " +
- symLink.getAbsolutePath());
- errors++;
- } else {
- passes++;
+ throw new RuntimeException("symlink exists " + symLink.getAbsolutePath());
}
}
+ /*
+ * verify if all the symlinks in the images are created correctly,
+ * only on solaris, this test works only on images.
+ */
+ @Test
+ void testSymLinks() throws Exception {
+ if (!isSolaris)
+ return;
+ verifySymLinks(JAVA_BIN);
+ verifySymLinks(JAVA_JRE_BIN);
+ }
+ // exclude non-consequential binaries or scripts co-packaged in other
+ // build phases
+ private final String excludeRE =
+ ".*jvisualvm.*" +
+ "|.*javaws.*" +
+ "|.*ControlPanel.*" +
+ "|.*java-rmi.cgi" +
+ "|.*jcontrol.*";
+ private final Pattern symlinkExcludes = Pattern.compile(excludeRE);
+
+ private void verifySymLinks(String bindir) throws IOException {
+ File binDir = new File(bindir);
+ System.err.println("verifying links in: " + bindir);
+ File isaDir = new File(binDir, getArch()).getAbsoluteFile();
+ if (!isaDir.exists()) {
+ throw new RuntimeException("dir: " + isaDir + " does not exist");
+ }
+ try (DirectoryStream<Path> ds = Files.newDirectoryStream(binDir.toPath())) {
+ for (Path p : ds) {
+ if (symlinkExcludes.matcher(p.toString()).matches() ||
+ Files.isDirectory(p, NOFOLLOW_LINKS)) {
+ continue;
+ }
+ Path link = new File(isaDir, p.getFileName().toString()).toPath();
+ if (Files.isSymbolicLink(link)) {
+ Path target = Files.readSymbolicLink(link);
+ if (target.startsWith("..") && p.endsWith(target.getFileName())) {
+ // System.out.println(target + " OK");
+ continue;
+ }
+ System.err.println("target:" + target);
+ System.err.println("file:" + p);
+ }
+ throw new RuntimeException("could not find link to " + p);
+ }
+ }
+
+ }
public static void main(String... args) throws Exception {
if (isWindows) {
- System.out.println("Warning: noop on windows");
+ System.err.println("Warning: test not applicable to windows");
return;
}
- // create our test jar first
- createTestJar();
- ensureNoExec();
- verifyVmSelection();
- ensureEcoFriendly();
- verifyJavaLibraryPath();
- verifyNoSymLink();
- if (errors > 0) {
- throw new Exception("ExecutionEnvironment: FAIL: with " +
- errors + " errors and passes " + passes );
- } else {
- System.out.println("ExecutionEnvironment: PASS " + passes);
- }
+ ExecutionEnvironment ee = new ExecutionEnvironment();
+ ee.run(args);
}
}
--- a/jdk/test/tools/launcher/FXLauncherTest.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/tools/launcher/FXLauncherTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -405,7 +405,7 @@
}
} else {
System.err.println("Warning: JavaFX components missing or not supported");
- System.err.println(" test passes vacuosly.");
+ System.err.println(" test passes vacuously.");
}
}
}
--- a/jdk/test/tools/launcher/RunpathTest.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/tools/launcher/RunpathTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -64,15 +64,9 @@
}
void testRpath() {
- if (isDualMode && is64Bit) {
- String expectedRpath = ".*RPATH.*\\$ORIGIN/../../lib/" + getJreArch()
- + ":\\$ORIGIN/../../jre/lib/" + getJreArch() + ".*";
- elfCheck(java64Cmd, expectedRpath);
- } else {
- String expectedRpath = ".*RPATH.*\\$ORIGIN/../lib/" + getJreArch()
- + ":\\$ORIGIN/../jre/lib/" + getJreArch() + ".*";
- elfCheck(javaCmd, expectedRpath);
- }
+ String expectedRpath = ".*RPATH.*\\$ORIGIN/../lib/" + getJreArch()
+ + ":\\$ORIGIN/../jre/lib/" + getJreArch() + ".*";
+ elfCheck(javaCmd, expectedRpath);
}
public static void main(String... args) throws Exception {
--- a/jdk/test/tools/launcher/Test7029048.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/tools/launcher/Test7029048.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -30,8 +30,8 @@
*/
/*
- * 7029048: test for LD_LIBRARY_PATH set to different paths pointing which may
- * contain a libjvm.so and may not, but we test to ensure that the launcher
+ * 7029048: test for LD_LIBRARY_PATH set to different paths which may or
+ * may not contain a libjvm.so, but we test to ensure that the launcher
* behaves correctly in all cases.
*/
import java.io.File;
@@ -50,8 +50,6 @@
private static final String LIBJVM = ExecutionEnvironment.LIBJVM;
private static final String LD_LIBRARY_PATH =
ExecutionEnvironment.LD_LIBRARY_PATH;
- private static final String LD_LIBRARY_PATH_32 =
- ExecutionEnvironment.LD_LIBRARY_PATH_32;
private static final String LD_LIBRARY_PATH_64 =
ExecutionEnvironment.LD_LIBRARY_PATH_64;
@@ -70,24 +68,8 @@
private static final File dstClientDir = new File(dstLibArchDir, "client");
private static final File dstClientLibjvm = new File(dstClientDir, LIBJVM);
- // used primarily to test the solaris variants in dual mode
- private static final File dstOtherArchDir;
- private static final File dstOtherServerDir;
- private static final File dstOtherServerLibjvm;
-
private static final Map<String, String> env = new HashMap<>();
- static {
- if (isDualMode) {
- dstOtherArchDir = new File(dstLibDir, getComplementaryJreArch());
- dstOtherServerDir = new File(dstOtherArchDir, "server");
- dstOtherServerLibjvm = new File(dstOtherServerDir, LIBJVM);
- } else {
- dstOtherArchDir = null;
- dstOtherServerDir = null;
- dstOtherServerLibjvm = null;
- }
- }
static String getValue(String name, List<String> in) {
for (String x : in) {
@@ -99,45 +81,20 @@
return null;
}
- static void run(boolean want32, String dflag, Map<String, String> env,
+ static void run(Map<String, String> env,
int nLLPComponents, String caseID) {
- final boolean want64 = want32 == false;
env.put(ExecutionEnvironment.JLDEBUG_KEY, "true");
List<String> cmdsList = new ArrayList<>();
-
- // only for a dual-mode system
- if (want64 && isDualMode) {
- cmdsList.add(java64Cmd);
- } else {
- cmdsList.add(javaCmd); // a 32-bit java command for all
- }
-
- /*
- * empty or null strings can confuse the ProcessBuilder. A null flag
- * indicates that the appropriate data model is enforced on the chosen
- * launcher variant.
- */
-
- if (dflag != null) {
- cmdsList.add(dflag);
- } else {
- cmdsList.add(want32 ? "-d32" : "-d64");
- }
+ cmdsList.add(javaCmd);
cmdsList.add("-server");
cmdsList.add("-jar");
cmdsList.add(ExecutionEnvironment.testJarFile.getAbsolutePath());
String[] cmds = new String[cmdsList.size()];
TestResult tr = doExec(env, cmdsList.toArray(cmds));
+ System.out.println(tr);
analyze(tr, nLLPComponents, caseID);
}
- // no cross launch, ie. no change to the data model.
- static void run(Map<String, String> env, int nLLPComponents, String caseID)
- throws IOException {
- boolean want32 = is32Bit;
- run(want32, null, env, nLLPComponents, caseID);
- }
-
static void analyze(TestResult tr, int nLLPComponents, String caseID) {
String envValue = getValue(LD_LIBRARY_PATH, tr.testOutput);
/*
@@ -192,10 +149,6 @@
copyFile(srcLibjvmSo, dstServerLibjvm);
// does not matter if it is client or a server
copyFile(srcLibjvmSo, dstClientLibjvm);
- // does not matter if the arch do not match either
- if (isDualMode) {
- copyFile(srcLibjvmSo, dstOtherServerLibjvm);
- }
desc = "LD_LIBRARY_PATH should be set";
break;
case LLP_SET_EMPTY_PATH:
@@ -211,14 +164,6 @@
Files.deleteIfExists(dstServerLibjvm.toPath());
}
- if (isDualMode) {
- if (!dstOtherServerDir.exists()) {
- Files.createDirectories(dstOtherServerDir.toPath());
- } else {
- Files.deleteIfExists(dstOtherServerLibjvm.toPath());
- }
- }
-
desc = "LD_LIBRARY_PATH should not be set";
break;
case LLP_SET_NON_EXISTENT_PATH:
@@ -245,40 +190,14 @@
env.put(LD_LIBRARY_PATH, dstClientDir.getAbsolutePath());
run(env, v.value + 1, "Case 2: " + desc);
- if (!isDualMode) {
- continue; // nothing more to do for Linux
- }
-
- // Tests applicable only to solaris.
-
- // initialize test variables for dual mode operations
- final File dst32ServerDir = is32Bit
- ? dstServerDir
- : dstOtherServerDir;
-
- final File dst64ServerDir = is64Bit
- ? dstServerDir
- : dstOtherServerDir;
-
- /*
- * Case 3: set the appropriate LLP_XX flag,
- * java32 -d32, LLP_32 is relevant, LLP_64 is ignored
- * java64 -d64, LLP_64 is relevant, LLP_32 is ignored
- */
- env.clear();
- env.put(LD_LIBRARY_PATH_32, dst32ServerDir.getAbsolutePath());
- env.put(LD_LIBRARY_PATH_64, dst64ServerDir.getAbsolutePath());
- run(is32Bit, null, env, v.value + 1, "Case 3: " + desc);
-
- /*
- * Case 4: we are in dual mode environment, running 64-bit then
- * we have the following scenarios:
- * java32 -d64, LLP_64 is relevant, LLP_32 is ignored
- * java64 -d32, LLP_32 is relevant, LLP_64 is ignored
- */
- if (dualModePresent()) {
- run(true, "-d64", env, v.value + 1, "Case 4A: " + desc);
- run(false,"-d32", env, v.value + 1, "Case 4B: " + desc);
+ if (isSolaris) {
+ /*
+ * Case 3: set the appropriate LLP_XX flag,
+ * java64 -d64, LLP_64 is relevant, LLP_32 is ignored
+ */
+ env.clear();
+ env.put(LD_LIBRARY_PATH_64, dstServerDir.getAbsolutePath());
+ run(env, v.value + 1, "Case 3: " + desc);
}
}
return;
@@ -297,9 +216,6 @@
if (errors > 0) {
throw new Exception("Test7029048: FAIL: with "
+ errors + " errors and passes " + passes);
- } else if (dualModePresent() && passes < 15) {
- throw new Exception("Test7029048: FAIL: " +
- "all tests did not run, expected " + 15 + " got " + passes);
} else if (isSolaris && passes < 9) {
throw new Exception("Test7029048: FAIL: " +
"all tests did not run, expected " + 9 + " got " + passes);
--- a/jdk/test/tools/launcher/TestHelper.java Thu Oct 10 08:51:55 2013 +0200
+++ b/jdk/test/tools/launcher/TestHelper.java Thu Oct 10 13:41:08 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -66,10 +66,10 @@
static final String JAVAHOME = System.getProperty("java.home");
static final String JAVA_BIN;
+ static final String JAVA_JRE_BIN;
static final boolean isSDK = JAVAHOME.endsWith("jre");
static final String javaCmd;
static final String javawCmd;
- static final String java64Cmd;
static final String javacCmd;
static final String jarCmd;
@@ -88,7 +88,7 @@
System.getProperty("os.name", "unknown").startsWith("SunOS");
static final boolean isLinux =
System.getProperty("os.name", "unknown").startsWith("Linux");
- static final boolean isDualMode = isSolaris;
+
static final boolean isSparc = System.getProperty("os.arch").startsWith("sparc");
// make a note of the golden default locale
@@ -124,9 +124,12 @@
throw new RuntimeException("arch model is not 32 or 64 bit ?");
}
compiler = ToolProvider.getSystemJavaCompiler();
- File binDir = (isSDK) ? new File((new File(JAVAHOME)).getParentFile(), "bin")
- : new File(JAVAHOME, "bin");
+ File binDir = (isSDK)
+ ? new File((new File(JAVAHOME)).getParentFile(), "bin")
+ : new File(JAVAHOME, "bin");
JAVA_BIN = binDir.getAbsolutePath();
+ JAVA_JRE_BIN = new File((new File(JAVAHOME)).getParentFile(),
+ (isSDK) ? "jre/bin" : "bin").getAbsolutePath();
File javaCmdFile = (isWindows)
? new File(binDir, "java.exe")
: new File(binDir, "java");
@@ -165,17 +168,6 @@
throw new RuntimeException("java <" + javacCmd +
"> must exist and should be executable");
}
- if (isSolaris) {
- File sparc64BinDir = new File(binDir,isSparc ? "sparcv9" : "amd64");
- File java64CmdFile= new File(sparc64BinDir, "java");
- if (java64CmdFile.exists() && java64CmdFile.canExecute()) {
- java64Cmd = java64CmdFile.getAbsolutePath();
- } else {
- java64Cmd = null;
- }
- } else {
- java64Cmd = null;
- }
}
void run(String[] args) throws Exception {
int passed = 0, failed = 0;
@@ -194,7 +186,13 @@
System.out.printf("Passed: %d, Failed: %d, ExitValue: %d%n",
passed, failed, testExitValue);
} catch (Throwable ex) {
- System.out.printf("Test %s failed: %s %n", m, ex.getCause());
+ System.out.printf("Test %s failed: %s %n", m, ex);
+ System.out.println("----begin detailed exceptions----");
+ ex.printStackTrace(System.out);
+ for (Throwable t : ex.getSuppressed()) {
+ t.printStackTrace(System.out);
+ }
+ System.out.println("----end detailed exceptions----");
failed++;
}
}
@@ -210,41 +208,15 @@
}
/*
- * is a dual mode available in the test jdk
- */
- static boolean dualModePresent() {
- return isDualMode && java64Cmd != null;
- }
-
- /*
* usually the jre/lib/arch-name is the same as os.arch, except for x86.
*/
static String getJreArch() {
String arch = System.getProperty("os.arch");
return arch.equals("x86") ? "i386" : arch;
}
-
- /*
- * get the complementary jre arch ie. if sparc then return sparcv9 and
- * vice-versa.
- */
- static String getComplementaryJreArch() {
- String arch = System.getProperty("os.arch");
- if (arch != null) {
- switch (arch) {
- case "sparc":
- return "sparcv9";
- case "sparcv9":
- return "sparc";
- case "x86":
- return "amd64";
- case "amd64":
- return "i386";
- }
- }
- return null;
+ static String getArch() {
+ return System.getProperty("os.arch");
}
-
static File getClassFile(File javaFile) {
String s = javaFile.getAbsolutePath().replace(JAVA_FILE_EXT, CLASS_FILE_EXT);
return new File(s);
@@ -623,6 +595,16 @@
appendError("string <" + stringToMatch + "> not found");
return false;
}
+
+ boolean notMatches(String stringToMatch) {
+ for (String x : testOutput) {
+ if (!x.matches(stringToMatch)) {
+ return true;
+ }
+ }
+ appendError("string <" + stringToMatch + "> found");
+ return false;
+ }
}
/**
* Indicates that the annotated method is a test method.
--- a/langtools/.hgtags Thu Oct 10 08:51:55 2013 +0200
+++ b/langtools/.hgtags Thu Oct 10 13:41:08 2013 -0700
@@ -231,3 +231,5 @@
3f274927ec1863544b8214262ab02b7de2970da6 jdk8-b107
252f872b8a2f81a416f9127e77924ca56a4578b0 jdk8-b108
985abf1cd327169a317d4ff4f318a8162a5cd47d jdk8-b109
+41541097533aa3933a018c8c1c426c1871dfd76e jdk8-b110
+af6244ba81b6b8d1bf4ab06587a2067e021e4570 jdk8-b111
--- a/make/scripts/webrev.ksh Thu Oct 10 08:51:55 2013 +0200
+++ b/make/scripts/webrev.ksh Thu Oct 10 13:41:08 2013 -0700
@@ -2704,11 +2704,11 @@
rm -f $WDIR/$DIR/$F.html
its_a_jar=
- if expr $F : '.*\.jar' >/dev/null; then
+ if expr $F : '.*\.jar' \| $F : '.*\.zip' >/dev/null; then
its_a_jar=1
- # It's a JAR file, let's do it differntly
+ # It's a JAR or ZIP file, let's do it differently
if [[ -z $JAR ]]; then
- print "No access to jar, so can't produce diffs for jar files"
+ print "No access to jar, so can't produce diffs for jar or zip files"
else
if [ -f $ofile ]; then
$JAR -tvf $ofile >"$ofile".lst
--- a/nashorn/.hgtags Thu Oct 10 08:51:55 2013 +0200
+++ b/nashorn/.hgtags Thu Oct 10 13:41:08 2013 -0700
@@ -218,3 +218,5 @@
bf70cbd2c8369fd97ffdfcbe1a80dbc2797408ee jdk8-b106
f35e1255024b66f7cf82517798f45f6e194e5567 jdk8-b107
445ad3f6d3b4ba62ebc483323e1919110a304053 jdk8-b108
+6ec2f9e5ed5bd60c2900976e6a54fdcac2f37e9e jdk8-b109
+d49a8c2173f5f90c9a39cc4af8e03cfa8f35ee4c jdk8-b110
--- a/nashorn/make/build-benchmark.xml Thu Oct 10 08:51:55 2013 +0200
+++ b/nashorn/make/build-benchmark.xml Thu Oct 10 13:41:08 2013 -0700
@@ -329,7 +329,7 @@
fork="true"
dir=".">
<jvmarg line="${ext.class.path}"/>
- <jvmarg line="${run.test.jvmargs.octane}"/>
+ <jvmarg line="${run.test.jvmargs.octane} -Xms${run.test.xms} -Xmx${run.test.xmx}"/>
<arg value="${octane-test-sys-prop.test.js.framework}"/>
<arg value="--"/>
<arg value="${octane-tests}"/>
@@ -357,7 +357,7 @@
classpath="${run.test.classpath}"
fork="true"
dir=".">
- <jvmarg line="${run.test.jvmargs.octane}"/>
+ <jvmarg line="${run.test.jvmargs.octane} -Xms${run.test.xms} -Xmx${run.test.xmx}"/>
<arg value="${octane-test-sys-prop.test.js.framework}"/>
<arg value="${octane-tests}"/>
<arg value="--runtime"/>
@@ -391,7 +391,7 @@
fork="true"
dir=".">
<jvmarg line="${ext.class.path}"/>
- <jvmarg line="${run.test.jvmargs}"/>
+ <jvmarg line="${run.test.jvmargs} -Xmx${run.test.xmx}"/>
<arg value="-timezone=PST"/>
<arg value="--class-cache-size=50"/>
<arg value="${sunspider-test-sys-prop.test.js.framework}"/>
@@ -415,7 +415,7 @@
classpath="${run.test.classpath}"
fork="true"
dir=".">
- <jvmarg line="${run.test.jvmargs}"/>
+ <jvmarg line="${run.test.jvmargs} -Xmx${run.test.xmx}"/>
<arg value="${sunspider-test-sys-prop.test.js.framework}"/>
<arg value="${sunspider-tests}/"/>
</java>
--- a/nashorn/make/build.xml Thu Oct 10 08:51:55 2013 +0200
+++ b/nashorn/make/build.xml Thu Oct 10 13:41:08 2013 -0700
@@ -66,6 +66,8 @@
<echo message="run.test.jvmargs=${run.test.jvmargs}"/>
<echo message="run.test.jvmargs.octane=${run.test.jvmargs.octane}"/>
+ <echo message="run.test.xms=${run.test.xms}"/>
+ <echo message="run.test.xmx=${run.test.xmx}"/>
</target>
@@ -320,7 +322,7 @@
<testng outputdir="${build.test.results.dir}" classfilesetref="test.classes"
verbose="${testng.verbose}" haltonfailure="true" useDefaultListeners="false" listeners="${testng.listeners}" workingDir="${basedir}">
<jvmarg line="${ext.class.path}"/>
- <jvmarg line="${run.test.jvmargs} ${run.test.jvmsecurityargs}"/>
+ <jvmarg line="${run.test.jvmargs} -Xmx${run.test.xmx} ${run.test.jvmsecurityargs}"/>
<propertyset>
<propertyref prefix="test-sys-prop."/>
<mapper from="test-sys-prop.*" to="*" type="glob"/>
@@ -336,7 +338,7 @@
<!-- use just build.test.classes.dir to avoid referring to TestNG -->
<java classname="${parallel.test.runner}" dir="${basedir}" classpath="${build.test.classes.dir}" failonerror="true" fork="true">
<jvmarg line="${ext.class.path}"/>
- <jvmarg line="${run.test.jvmargs} ${run.test.jvmsecurityargs}"/>
+ <jvmarg line="${run.test.jvmargs} -Xmx${run.test.xmx} ${run.test.jvmsecurityargs}"/>
<syspropertyset>
<propertyref prefix="test-sys-prop."/>
<mapper type="glob" from="test-sys-prop.*" to="*"/>
@@ -352,7 +354,7 @@
<testng outputdir="${build.test.results.dir}" classfilesetref="test.classes"
verbose="${testng.verbose}" haltonfailure="true" useDefaultListeners="false" listeners="${testng.listeners}" workingDir="${basedir}">
<jvmarg line="${ext.class.path}"/>
- <jvmarg line="${run.test.jvmargs} ${run.test.jvmsecurityargs}"/>
+ <jvmarg line="${run.test.jvmargs} -Xmx${run.test.xmx} ${run.test.jvmsecurityargs}"/>
<propertyset>
<propertyref prefix="test262-test-sys-prop."/>
<mapper from="test262-test-sys-prop.*" to="*" type="glob"/>
@@ -369,7 +371,7 @@
<!-- use just build.test.classes.dir to avoid referring to TestNG -->
<java classname="${parallel.test.runner}" dir="${basedir}" fork="true">
<jvmarg line="${ext.class.path}"/>
- <jvmarg line="${run.test.jvmargs} ${run.test.jvmsecurityargs}"/>
+ <jvmarg line="${run.test.jvmargs} -Xmx${run.test.xmx} ${run.test.jvmsecurityargs}"/>
<classpath>
<pathelement path="${run.test.classpath}"/>
</classpath>
@@ -387,7 +389,7 @@
description="Run the shell with a sample script">
<java classname="${nashorn.shell.tool}" fork="true" dir="samples">
<jvmarg line="${ext.class.path}"/>
- <jvmarg line="${run.test.jvmargs}"/>
+ <jvmarg line="${run.test.jvmargs} -Xmx${run.test.xmx}"/>
<arg value="-dump-on-error"/>
<arg value="test.js"/>
</java>
@@ -397,7 +399,7 @@
description="Debug the shell with a sample script">
<java classname="${nashorn.shell.tool}" fork="true" dir="samples">
<jvmarg line="${ext.class.path}"/>
- <jvmarg line="${run.test.jvmargs}"/>
+ <jvmarg line="${run.test.jvmargs} -Xmx${run.test.xmx}"/>
<arg value="--print-code"/>
<arg value="--verify-code"/>
<arg value="--print-symbols"/>
--- a/nashorn/make/project.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/nashorn/make/project.properties Thu Oct 10 13:41:08 2013 -0700
@@ -216,13 +216,14 @@
src.dir=src
test.src.dir=test/src
+# -Xmx is used for all tests, -Xms only for octane benchmark
run.test.xmx=3G
run.test.xms=2G
run.test.user.language=tr
run.test.user.country=TR
-run.test.jvmargs.common=-server -Xmx${run.test.xmx} -XX:+TieredCompilation -Dfile.encoding=UTF-8 -Duser.language=${run.test.user.language} -Duser.country=${run.test.user.country} -XX:+HeapDumpOnOutOfMemoryError
+run.test.jvmargs.common=-server -XX:+TieredCompilation -Dfile.encoding=UTF-8 -Duser.language=${run.test.user.language} -Duser.country=${run.test.user.country} -XX:+HeapDumpOnOutOfMemoryError
#-XX:-UseCompressedKlassPointers -XX:+PrintHeapAtGC -XX:ClassMetaspaceSize=300M
# -XX:+PrintCompilation -XX:+UnlockDiagnosticVMOptions -XX:+PrintNMethods
@@ -231,12 +232,12 @@
run.test.jvmargs.main=${run.test.jvmargs.common} -ea
#-XX:-UseCompressedKlassPointers -XX:+PrintHeapAtGC -XX:ClassMetaspaceSize=300M
-run.test.jvmargs.octane.main=-Xms${run.test.xms} ${run.test.jvmargs.common}
+run.test.jvmargs.octane.main=${run.test.jvmargs.common}
run.test.jvmsecurityargs=-Xverify:all -Djava.security.properties=${basedir}/make/java.security.override -Djava.security.manager -Djava.security.policy=${basedir}/build/nashorn.policy
# VM options for script tests with @fork option
-test-sys-prop.test.fork.jvm.options=${run.test.jvmargs.main} ${run.test.jvmsecurityargs}
+test-sys-prop.test.fork.jvm.options=${run.test.jvmargs.main} -Xmx${run.test.xmx} ${run.test.jvmsecurityargs}
# path of rhino.jar for benchmarks
rhino.jar=
--- a/nashorn/src/jdk/nashorn/api/scripting/NashornScriptEngine.java Thu Oct 10 08:51:55 2013 +0200
+++ b/nashorn/src/jdk/nashorn/api/scripting/NashornScriptEngine.java Thu Oct 10 13:41:08 2013 -0700
@@ -185,21 +185,12 @@
@Override
public Object eval(final Reader reader, final ScriptContext ctxt) throws ScriptException {
- try {
- if (reader instanceof URLReader) {
- final URL url = ((URLReader)reader).getURL();
- final Charset cs = ((URLReader)reader).getCharset();
- return evalImpl(compileImpl(new Source(url.toString(), url, cs), ctxt), ctxt);
- }
- return evalImpl(Source.readFully(reader), ctxt);
- } catch (final IOException e) {
- throw new ScriptException(e);
- }
+ return evalImpl(makeSource(reader, ctxt), ctxt);
}
@Override
public Object eval(final String script, final ScriptContext ctxt) throws ScriptException {
- return evalImpl(script.toCharArray(), ctxt);
+ return evalImpl(makeSource(script, ctxt), ctxt);
}
@Override
@@ -221,16 +212,12 @@
@Override
public CompiledScript compile(final Reader reader) throws ScriptException {
- try {
- return asCompiledScript(compileImpl(Source.readFully(reader), context));
- } catch (final IOException e) {
- throw new ScriptException(e);
- }
+ return asCompiledScript(makeSource(reader, context));
}
@Override
public CompiledScript compile(final String str) throws ScriptException {
- return asCompiledScript(compileImpl(str.toCharArray(), context));
+ return asCompiledScript(makeSource(str, context));
}
// Invocable methods
@@ -292,6 +279,29 @@
// Implementation only below this point
+ private static Source makeSource(final Reader reader, final ScriptContext ctxt) throws ScriptException {
+ try {
+ if (reader instanceof URLReader) {
+ final URL url = ((URLReader)reader).getURL();
+ final Charset cs = ((URLReader)reader).getCharset();
+ return new Source(url.toString(), url, cs);
+ } else {
+ return new Source(getScriptName(ctxt), Source.readFully(reader));
+ }
+ } catch (final IOException ioExp) {
+ throw new ScriptException(ioExp);
+ }
+ }
+
+ private static Source makeSource(final String src, final ScriptContext ctxt) {
+ return new Source(getScriptName(ctxt), src);
+ }
+
+ private static String getScriptName(final ScriptContext ctxt) {
+ final Object val = ctxt.getAttribute(ScriptEngine.FILENAME);
+ return (val != null) ? val.toString() : "<eval>";
+ }
+
private <T> T getInterfaceInner(final Object thiz, final Class<T> clazz) {
if (clazz == null || !clazz.isInterface()) {
throw new IllegalArgumentException(getMessage("interface.class.expected"));
@@ -429,7 +439,7 @@
// current ScriptContext exposed as "context"
// "context" is non-writable from script - but script engine still
// needs to set it and so save the context Property object
- contextProperty = newGlobal.addOwnProperty("context", NON_ENUMERABLE_CONSTANT, null);
+ contextProperty = newGlobal.addOwnProperty("context", NON_ENUMERABLE_CONSTANT, ctxt);
// current ScriptEngine instance exposed as "engine". We added @SuppressWarnings("LeakingThisInConstructor") as
// NetBeans identifies this assignment as such a leak - this is a false positive as we're setting this property
// in the Global of a Context we just created - both the Context and the Global were just created and can not be
@@ -509,8 +519,8 @@
throw new IllegalArgumentException(getMessage("interface.on.non.script.object"));
}
- private Object evalImpl(final char[] buf, final ScriptContext ctxt) throws ScriptException {
- return evalImpl(compileImpl(buf, ctxt), ctxt);
+ private Object evalImpl(final Source src, final ScriptContext ctxt) throws ScriptException {
+ return evalImpl(compileImpl(src, ctxt), ctxt);
}
private Object evalImpl(final ScriptFunction script, final ScriptContext ctxt) throws ScriptException {
@@ -561,11 +571,20 @@
}
}
- private CompiledScript asCompiledScript(final ScriptFunction script) {
+ private CompiledScript asCompiledScript(final Source source) throws ScriptException {
+ final ScriptFunction func = compileImpl(source, context);
return new CompiledScript() {
@Override
public Object eval(final ScriptContext ctxt) throws ScriptException {
- return evalImpl(script, ctxt);
+ final ScriptObject global = getNashornGlobalFrom(ctxt);
+ // Are we running the script in the correct global?
+ if (func.getScope() == global) {
+ return evalImpl(func, ctxt, global);
+ } else {
+ // ScriptContext with a different global. Compile again!
+ // Note that we may still hit per-global compilation cache.
+ return evalImpl(compileImpl(source, ctxt), ctxt, global);
+ }
}
@Override
public ScriptEngine getEngine() {
@@ -574,12 +593,6 @@
};
}
- private ScriptFunction compileImpl(final char[] buf, final ScriptContext ctxt) throws ScriptException {
- final Object val = ctxt.getAttribute(ScriptEngine.FILENAME);
- final String fileName = (val != null) ? val.toString() : "<eval>";
- return compileImpl(new Source(fileName, buf), ctxt);
- }
-
private ScriptFunction compileImpl(final Source source, final ScriptContext ctxt) throws ScriptException {
return compileImpl(source, getNashornGlobalFrom(ctxt));
}
--- a/nashorn/src/jdk/nashorn/internal/codegen/Attr.java Thu Oct 10 08:51:55 2013 +0200
+++ b/nashorn/src/jdk/nashorn/internal/codegen/Attr.java Thu Oct 10 13:41:08 2013 -0700
@@ -807,9 +807,11 @@
type = Type.OBJECT;
}
- type = Type.widest(type, newCaseNode.getTest().getType());
- if (type.isBoolean()) {
+ final Type newCaseType = newCaseNode.getTest().getType();
+ if (newCaseType.isBoolean()) {
type = Type.OBJECT; //booleans and integers aren't assignment compatible
+ } else {
+ type = Type.widest(type, newCaseType);
}
}
--- a/nashorn/src/jdk/nashorn/internal/codegen/CodeGenerator.java Thu Oct 10 08:51:55 2013 +0200
+++ b/nashorn/src/jdk/nashorn/internal/codegen/CodeGenerator.java Thu Oct 10 13:41:08 2013 -0700
@@ -852,7 +852,6 @@
final Label loopLabel = new Label("loop");
final Expression init = forNode.getInit();
- assert init instanceof IdentNode;
load(modify);
assert modify.getType().isObject();
@@ -2175,8 +2174,9 @@
method.invoke(ScriptRuntime.OPEN_WITH);
method.storeCompilerConstant(SCOPE);
} else {
- // We just loaded the expression for its side effect; discard it
- method.pop();
+ // We just loaded the expression for its side effect and to check
+ // for null or undefined value.
+ globalCheckObjectCoercible();
}
@@ -3258,6 +3258,10 @@
return method.invokestatic(GLOBAL_OBJECT, "isEval", methodDescriptor(boolean.class, Object.class));
}
+ private MethodEmitter globalCheckObjectCoercible() {
+ return method.invokestatic(GLOBAL_OBJECT, "checkObjectCoercible", methodDescriptor(void.class, Object.class));
+ }
+
private MethodEmitter globalDirectEval() {
return method.invokestatic(GLOBAL_OBJECT, "directEval",
methodDescriptor(Object.class, Object.class, Object.class, Object.class, Object.class, Object.class));
--- a/nashorn/src/jdk/nashorn/internal/ir/WhileNode.java Thu Oct 10 08:51:55 2013 +0200
+++ b/nashorn/src/jdk/nashorn/internal/ir/WhileNode.java Thu Oct 10 13:41:08 2013 -0700
@@ -79,13 +79,12 @@
if (visitor.enterWhileNode(this)) {
if (isDoWhile()) {
return visitor.leaveWhileNode(
- setTest(lc, (Expression)test.accept(visitor)).
- setBody(lc, (Block)body.accept(visitor)));
+ setBody(lc, (Block)body.accept(visitor)).
+ setTest(lc, (Expression)test.accept(visitor)));
}
return visitor.leaveWhileNode(
- setBody(lc, (Block)body.accept(visitor)).
- setTest(lc, (Expression)test.accept(visitor)));
-
+ setTest(lc, (Expression)test.accept(visitor)).
+ setBody(lc, (Block)body.accept(visitor)));
}
return this;
}
--- a/nashorn/src/jdk/nashorn/internal/ir/debug/JSONWriter.java Thu Oct 10 08:51:55 2013 +0200
+++ b/nashorn/src/jdk/nashorn/internal/ir/debug/JSONWriter.java Thu Oct 10 13:41:08 2013 -0700
@@ -410,7 +410,8 @@
comma();
property("id");
- if (functionNode.isAnonymous()) {
+ final FunctionNode.Kind kind = functionNode.getKind();
+ if (functionNode.isAnonymous() || kind == FunctionNode.Kind.GETTER || kind == FunctionNode.Kind.SETTER) {
nullValue();
} else {
functionNode.getIdent().accept(this);
--- a/nashorn/src/jdk/nashorn/internal/objects/Global.java Thu Oct 10 08:51:55 2013 +0200
+++ b/nashorn/src/jdk/nashorn/internal/objects/Global.java Thu Oct 10 13:41:08 2013 -0700
@@ -33,6 +33,7 @@
import java.io.PrintWriter;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
+import java.lang.ref.ReferenceQueue;
import java.lang.ref.SoftReference;
import java.lang.reflect.Field;
import java.util.Arrays;
@@ -691,17 +692,41 @@
* Cache for compiled script classes.
*/
@SuppressWarnings("serial")
- private static class ClassCache extends LinkedHashMap<Source, SoftReference<Class<?>>> {
+ private static class ClassCache extends LinkedHashMap<Source, ClassReference> {
private final int size;
+ private final ReferenceQueue<Class<?>> queue;
ClassCache(int size) {
super(size, 0.75f, true);
this.size = size;
+ this.queue = new ReferenceQueue<>();
+ }
+
+ void cache(final Source source, final Class<?> clazz) {
+ put(source, new ClassReference(clazz, queue, source));
+ }
+
+ @Override
+ protected boolean removeEldestEntry(final Map.Entry<Source, ClassReference> eldest) {
+ return size() > size;
}
@Override
- protected boolean removeEldestEntry(final Map.Entry<Source, SoftReference<Class<?>>> eldest) {
- return size() >= size;
+ public ClassReference get(Object key) {
+ for (ClassReference ref; (ref = (ClassReference)queue.poll()) != null; ) {
+ remove(ref.source);
+ }
+ return super.get(key);
+ }
+
+ }
+
+ private static class ClassReference extends SoftReference<Class<?>> {
+ private final Source source;
+
+ ClassReference(final Class<?> clazz, final ReferenceQueue<Class<?>> queue, final Source source) {
+ super(clazz, queue);
+ this.source = source;
}
}
@@ -709,22 +734,14 @@
@Override
public Class<?> findCachedClass(final Source source) {
assert classCache != null : "Class cache used without being initialized";
- SoftReference<Class<?>> ref = classCache.get(source);
- if (ref != null) {
- final Class<?> clazz = ref.get();
- if (clazz == null) {
- classCache.remove(source);
- }
- return clazz;
- }
-
- return null;
+ ClassReference ref = classCache.get(source);
+ return ref != null ? ref.get() : null;
}
@Override
public void cacheClass(final Source source, final Class<?> clazz) {
assert classCache != null : "Class cache used without being initialized";
- classCache.put(source, new SoftReference<Class<?>>(clazz));
+ classCache.cache(source, clazz);
}
private static <T> T getLazilyCreatedValue(final Object key, final Callable<T> creator, final Map<Object, T> map) {
--- a/nashorn/src/jdk/nashorn/internal/objects/NativeDate.java Thu Oct 10 08:51:55 2013 +0200
+++ b/nashorn/src/jdk/nashorn/internal/objects/NativeDate.java Thu Oct 10 13:41:08 2013 -0700
@@ -75,11 +75,11 @@
private static final int FORMAT_LOCAL_TIME = 5;
// Constants defined in ECMA 15.9.1.10
- private static final double hoursPerDay = 24;
- private static final double minutesPerHour = 60;
- private static final double secondsPerMinute = 60;
- private static final double msPerSecond = 1_000;
- private static final double msPerMinute = 60_000;
+ private static final int hoursPerDay = 24;
+ private static final int minutesPerHour = 60;
+ private static final int secondsPerMinute = 60;
+ private static final int msPerSecond = 1_000;
+ private static final int msPerMinute = 60_000;
private static final double msPerHour = 3_600_000;
private static final double msPerDay = 86_400_000;
@@ -926,13 +926,13 @@
case FORMAT_DATE :
case FORMAT_LOCAL_DATE_TIME:
// EEE MMM dd yyyy
- sb.append(weekDays[(int) weekDay(t)])
+ sb.append(weekDays[weekDay(t)])
.append(' ')
- .append(months[(int) monthFromTime(t)])
+ .append(months[monthFromTime(t)])
.append(' ');
- zeroPad(sb, (int) dayFromTime(t), 2);
+ zeroPad(sb, dayFromTime(t), 2);
sb.append(' ');
- zeroPad(sb, (int) yearFromTime(t), 4);
+ zeroPad(sb, yearFromTime(t), 4);
if (format == FORMAT_DATE) {
break;
}
@@ -948,11 +948,11 @@
offset = (offset / 60) * 100 + offset % 60;
// HH:mm:ss GMT+HHmm
- zeroPad(sb, (int) hourFromTime(t), 2);
+ zeroPad(sb, hourFromTime(t), 2);
sb.append(':');
- zeroPad(sb, (int) minFromTime(t), 2);
+ zeroPad(sb, minFromTime(t), 2);
sb.append(':');
- zeroPad(sb, (int) secFromTime(t), 2);
+ zeroPad(sb, secFromTime(t), 2);
sb.append(" GMT")
.append(offset < 0 ? '-' : '+');
zeroPad(sb, Math.abs(offset), 4);
@@ -963,20 +963,20 @@
case FORMAT_LOCAL_DATE:
// yyyy-MM-dd
- zeroPad(sb, (int) yearFromTime(t), 4);
+ zeroPad(sb, yearFromTime(t), 4);
sb.append('-');
- zeroPad(sb, (int) monthFromTime(t) + 1, 2);
+ zeroPad(sb, monthFromTime(t) + 1, 2);
sb.append('-');
- zeroPad(sb, (int) dayFromTime(t), 2);
+ zeroPad(sb, dayFromTime(t), 2);
break;
case FORMAT_LOCAL_TIME:
// HH:mm:ss
- zeroPad(sb, (int) hourFromTime(t), 2);
+ zeroPad(sb, hourFromTime(t), 2);
sb.append(':');
- zeroPad(sb, (int) minFromTime(t), 2);
+ zeroPad(sb, minFromTime(t), 2);
sb.append(':');
- zeroPad(sb, (int) secFromTime(t), 2);
+ zeroPad(sb, secFromTime(t), 2);
break;
default:
@@ -996,19 +996,19 @@
final StringBuilder sb = new StringBuilder(29);
final double t = nd.getTime();
// EEE, dd MMM yyyy HH:mm:ss z
- sb.append(weekDays[(int) weekDay(t)])
+ sb.append(weekDays[weekDay(t)])
.append(", ");
- zeroPad(sb, (int) dayFromTime(t), 2);
+ zeroPad(sb, dayFromTime(t), 2);
sb.append(' ')
- .append(months[(int) monthFromTime(t)])
+ .append(months[monthFromTime(t)])
.append(' ');
- zeroPad(sb, (int) yearFromTime(t), 4);
+ zeroPad(sb, yearFromTime(t), 4);
sb.append(' ');
- zeroPad(sb, (int) hourFromTime(t), 2);
+ zeroPad(sb, hourFromTime(t), 2);
sb.append(':');
- zeroPad(sb, (int) minFromTime(t), 2);
+ zeroPad(sb, minFromTime(t), 2);
sb.append(':');
- zeroPad(sb, (int) secFromTime(t), 2);
+ zeroPad(sb, secFromTime(t), 2);
sb.append(" GMT");
return sb.toString();
}
@@ -1023,19 +1023,19 @@
final StringBuilder sb = new StringBuilder(24);
final double t = nd.getTime();
// yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
- zeroPad(sb, (int) yearFromTime(t), 4);
+ zeroPad(sb, yearFromTime(t), 4);
sb.append('-');
- zeroPad(sb, (int) monthFromTime(t) + 1, 2);
+ zeroPad(sb, monthFromTime(t) + 1, 2);
sb.append('-');
- zeroPad(sb, (int) dayFromTime(t), 2);
+ zeroPad(sb, dayFromTime(t), 2);
sb.append('T');
- zeroPad(sb, (int) hourFromTime(t), 2);
+ zeroPad(sb, hourFromTime(t), 2);
sb.append(':');
- zeroPad(sb, (int) minFromTime(t), 2);
+ zeroPad(sb, minFromTime(t), 2);
sb.append(':');
- zeroPad(sb, (int) secFromTime(t), 2);
+ zeroPad(sb, secFromTime(t), 2);
sb.append('.');
- zeroPad(sb, (int) msFromTime(t), 3);
+ zeroPad(sb, msFromTime(t), 3);
sb.append("Z");
return sb.toString();
}
@@ -1072,29 +1072,30 @@
}
// ECMA 15.9.1.3 Year Number
- private static double timeFromYear(final double y) {
+ private static double timeFromYear(final int y) {
return dayFromYear(y) * msPerDay;
}
- private static double yearFromTime(final double t) {
- double y = Math.floor(t / (msPerDay * 365.2425)) + 1970;
+ // ECMA 15.9.1.3 Year Number
+ private static int yearFromTime(final double t) {
+ int y = (int) Math.floor(t / (msPerDay * 365.2425)) + 1970;
final double t2 = timeFromYear(y);
if (t2 > t) {
y--;
- } else if (t2 + msPerDay * daysInYear((int) y) <= t) {
+ } else if (t2 + msPerDay * daysInYear(y) <= t) {
y++;
}
return y;
}
- private static double dayWithinYear(final double t, final double year) {
- return day(t) - dayFromYear(year);
+ private static int dayWithinYear(final double t, final int year) {
+ return (int) (day(t) - dayFromYear(year));
}
- private static double monthFromTime(final double t) {
- final double year = yearFromTime(t);
- final double day = dayWithinYear(t, year);
- final int[] firstDay = firstDayInMonth[isLeapYear((int) year) ? 1 : 0];
+ private static int monthFromTime(final double t) {
+ final int year = yearFromTime(t);
+ final int day = dayWithinYear(t, year);
+ final int[] firstDay = firstDayInMonth[isLeapYear(year) ? 1 : 0];
int month = 0;
while (month < 11 && firstDay[month + 1] <= day) {
@@ -1103,10 +1104,10 @@
return month;
}
- private static double dayFromTime(final double t) {
- final double year = yearFromTime(t);
- final double day = dayWithinYear(t, year);
- final int[] firstDay = firstDayInMonth[isLeapYear((int) year) ? 1 : 0];
+ private static int dayFromTime(final double t) {
+ final int year = yearFromTime(t);
+ final int day = dayWithinYear(t, year);
+ final int[] firstDay = firstDayInMonth[isLeapYear(year) ? 1 : 0];
int month = 0;
while (month < 11 && firstDay[month + 1] <= day) {
@@ -1121,11 +1122,8 @@
return firstDay[month];
}
- private static double weekDay(final double time) {
- if (isNaN(time)) {
- return NaN;
- }
- final double day = (day(time) + 4) % 7;
+ private static int weekDay(final double time) {
+ final int day = (int) (day(time) + 4) % 7;
return day < 0 ? day + 7 : day;
}
@@ -1140,26 +1138,26 @@
}
// ECMA 15.9.1.10 Hours, Minutes, Second, and Milliseconds
- private static double hourFromTime(final double t) {
- final double h = Math.floor(t / msPerHour) % hoursPerDay;
+ private static int hourFromTime(final double t) {
+ final int h = (int) (Math.floor(t / msPerHour) % hoursPerDay);
return h < 0 ? h + hoursPerDay: h;
}
- private static double minFromTime(final double t) {
- final double m = Math.floor(t / msPerMinute) % minutesPerHour;
+ private static int minFromTime(final double t) {
+ final int m = (int) (Math.floor(t / msPerMinute) % minutesPerHour);
return m < 0 ? m + minutesPerHour : m;
}
- private static double secFromTime(final double t) {
- final double s = Math.floor(t / msPerSecond) % secondsPerMinute;
+ private static int secFromTime(final double t) {
+ final int s = (int) (Math.floor(t / msPerSecond) % secondsPerMinute);
return s < 0 ? s + secondsPerMinute : s;
}
- private static double msFromTime(final double t) {
- final double m = t % msPerSecond;
+ private static int msFromTime(final double t) {
+ final int m = (int) (t % msPerSecond);
return m < 0 ? m + msPerSecond : m;
}
- private static double valueFromTime(final int unit, final double t) {
+ private static int valueFromTime(final int unit, final double t) {
switch (unit) {
case YEAR: return yearFromTime(t);
case MONTH: return monthFromTime(t);
@@ -1180,12 +1178,12 @@
// ECMA 15.9.1.12 MakeDay (year, month, date)
private static double makeDay(final double year, final double month, final double date) {
final double y = year + Math.floor(month / 12);
- double m = month % 12;
+ int m = (int) (month % 12);
if (m < 0) {
m += 12;
}
- double d = Math.floor(dayFromYear(y));
- d += dayFromMonth((int) m, (int) y);
+ double d = dayFromYear(y);
+ d += dayFromMonth(m, (int) y);
return d + date - 1;
}
@@ -1257,13 +1255,13 @@
nullReturn = true;
}
- if (! nullReturn) {
+ if (!nullReturn && !isNaN(time)) {
d[i - start] = valueFromTime(i, time);
}
}
}
- return nullReturn? null : d;
+ return nullReturn ? null : d;
}
// ECMA 15.9.1.14 TimeClip (time)
--- a/nashorn/src/jdk/nashorn/internal/objects/NativeJSON.java Thu Oct 10 08:51:55 2013 +0200
+++ b/nashorn/src/jdk/nashorn/internal/objects/NativeJSON.java Thu Oct 10 13:41:08 2013 -0700
@@ -162,22 +162,27 @@
String gap;
- if (space instanceof Number || space instanceof NativeNumber) {
- int indent;
- if (space instanceof NativeNumber) {
- indent = ((NativeNumber)space).intValue();
- } else {
- indent = ((Number)space).intValue();
- }
+ // modifiable 'space' - parameter is final
+ Object modSpace = space;
+ if (modSpace instanceof NativeNumber) {
+ modSpace = JSType.toNumber(JSType.toPrimitive(modSpace, Number.class));
+ } else if (modSpace instanceof NativeString) {
+ modSpace = JSType.toString(JSType.toPrimitive(modSpace, String.class));
+ }
- final StringBuilder sb = new StringBuilder();
- for (int i = 0; i < Math.min(10, indent); i++) {
- sb.append(' ');
+ if (modSpace instanceof Number) {
+ int indent = Math.min(10, JSType.toInteger(modSpace));
+ if (indent < 1) {
+ gap = "";
+ } else {
+ final StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < indent; i++) {
+ sb.append(' ');
+ }
+ gap = sb.toString();
}
- gap = sb.toString();
-
- } else if (space instanceof String || space instanceof ConsString || space instanceof NativeString) {
- final String str = (space instanceof String) ? (String)space : space.toString();
+ } else if (modSpace instanceof String || modSpace instanceof ConsString) {
+ final String str = modSpace.toString();
gap = str.substring(0, Math.min(10, str.length()));
} else {
gap = "";
--- a/nashorn/src/jdk/nashorn/internal/objects/NativeRegExp.java Thu Oct 10 08:51:55 2013 +0200
+++ b/nashorn/src/jdk/nashorn/internal/objects/NativeRegExp.java Thu Oct 10 13:41:08 2013 -0700
@@ -191,23 +191,21 @@
public static NativeRegExp newRegExp(final Object regexp, final Object flags) {
String patternString = "";
String flagString = "";
- boolean flagsDefined = false;
-
- if (flags != UNDEFINED) {
- flagsDefined = true;
- flagString = JSType.toString(flags);
- }
if (regexp != UNDEFINED) {
if (regexp instanceof NativeRegExp) {
- if (!flagsDefined) {
- return (NativeRegExp)regexp; // 15.10.3.1 - undefined flags and regexp as
+ if (flags != UNDEFINED) {
+ throw typeError("regex.cant.supply.flags");
}
- throw typeError("regex.cant.supply.flags");
+ return (NativeRegExp)regexp; // 15.10.3.1 - undefined flags and regexp as
}
patternString = JSType.toString(regexp);
}
+ if (flags != UNDEFINED) {
+ flagString = JSType.toString(flags);
+ }
+
return new NativeRegExp(patternString, flagString);
}
@@ -697,8 +695,13 @@
appendReplacement(matcher, string, replacement, sb);
}
+ thisIndex = matcher.end();
+ if (thisIndex == string.length() && matcher.start() == matcher.end()) {
+ // Avoid getting empty match at end of string twice
+ break;
+ }
+
// ECMA 15.5.4.10 String.prototype.match(regexp)
- thisIndex = matcher.end();
if (thisIndex == previousLastIndex) {
setLastIndex(thisIndex + 1);
previousLastIndex = thisIndex + 1;
@@ -883,7 +886,7 @@
* @return last index property as int
*/
public int getLastIndex() {
- return JSType.toInt32(lastIndex);
+ return JSType.toInteger(lastIndex);
}
/**
--- a/nashorn/src/jdk/nashorn/internal/parser/JSONParser.java Thu Oct 10 08:51:55 2013 +0200
+++ b/nashorn/src/jdk/nashorn/internal/parser/JSONParser.java Thu Oct 10 13:41:08 2013 -0700
@@ -349,6 +349,10 @@
case COMMARIGHT:
next();
+ // check for trailing comma - not allowed in JSON
+ if (type == RBRACKET) {
+ throw error(AbstractParser.message("trailing.comma.in.json", type.getNameOrType()));
+ }
break;
default:
@@ -388,6 +392,10 @@
case COMMARIGHT:
next();
+ // check for trailing comma - not allowed in JSON
+ if (type == RBRACE) {
+ throw error(AbstractParser.message("trailing.comma.in.json", type.getNameOrType()));
+ }
break;
default:
--- a/nashorn/src/jdk/nashorn/internal/parser/Parser.java Thu Oct 10 08:51:55 2013 +0200
+++ b/nashorn/src/jdk/nashorn/internal/parser/Parser.java Thu Oct 10 13:41:08 2013 -0700
@@ -59,6 +59,7 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import jdk.internal.dynalink.support.NameCodec;
import jdk.nashorn.internal.codegen.CompilerConstants;
import jdk.nashorn.internal.codegen.Namespace;
import jdk.nashorn.internal.ir.AccessNode;
@@ -2108,7 +2109,7 @@
case "get":
final PropertyKey getIdent = propertyName();
final String getterName = getIdent.getPropertyName();
- final IdentNode getNameNode = new IdentNode(((Node)getIdent).getToken(), finish, "get " + getterName);
+ final IdentNode getNameNode = new IdentNode(((Node)getIdent).getToken(), finish, "get " + NameCodec.encode(getterName));
expect(LPAREN);
expect(RPAREN);
functionNode = functionBody(getSetToken, getNameNode, new ArrayList<IdentNode>(), FunctionNode.Kind.GETTER);
@@ -2117,7 +2118,7 @@
case "set":
final PropertyKey setIdent = propertyName();
final String setterName = setIdent.getPropertyName();
- final IdentNode setNameNode = new IdentNode(((Node)setIdent).getToken(), finish, "set " + setterName);
+ final IdentNode setNameNode = new IdentNode(((Node)setIdent).getToken(), finish, "set " + NameCodec.encode(setterName));
expect(LPAREN);
final IdentNode argIdent = getIdent();
verifyStrictIdent(argIdent, "setter argument");
--- a/nashorn/src/jdk/nashorn/internal/runtime/GlobalFunctions.java Thu Oct 10 08:51:55 2013 +0200
+++ b/nashorn/src/jdk/nashorn/internal/runtime/GlobalFunctions.java Thu Oct 10 13:41:08 2013 -0700
@@ -90,6 +90,7 @@
public static double parseInt(final Object self, final Object string, final Object rad) {
final String str = JSType.trimLeft(JSType.toString(string));
final int length = str.length();
+ int radix = JSType.toInt32(rad);
// empty string is not valid
if (length == 0) {
@@ -113,7 +114,6 @@
}
boolean stripPrefix = true;
- int radix = JSType.toInt32(rad);
if (radix != 0) {
if (radix < 2 || radix > 36) {
@@ -211,7 +211,7 @@
switch (ch) {
case '.':
// dot allowed only once
- if (dotSeen) {
+ if (exponentOffset != -1 || dotSeen) {
break loop;
}
dotSeen = true;
--- a/nashorn/src/jdk/nashorn/internal/runtime/Source.java Thu Oct 10 08:51:55 2013 +0200
+++ b/nashorn/src/jdk/nashorn/internal/runtime/Source.java Thu Oct 10 13:41:08 2013 -0700
@@ -169,7 +169,7 @@
final Source src = (Source)obj;
// Only compare content as a last resort measure
- return length == src.length && Objects.equals(name, src.name) && Arrays.equals(content, src.content);
+ return length == src.length && Objects.equals(url, src.url) && Objects.equals(name, src.name) && Arrays.equals(content, src.content);
}
@Override
--- a/nashorn/src/jdk/nashorn/internal/runtime/resources/Messages.properties Thu Oct 10 08:51:55 2013 +0200
+++ b/nashorn/src/jdk/nashorn/internal/runtime/resources/Messages.properties Thu Oct 10 13:41:08 2013 -0700
@@ -57,6 +57,7 @@
parser.error.regex.unsupported.flag=Unsupported RegExp flag: {0}
parser.error.regex.repeated.flag=Repeated RegExp flag: {0}
parser.error.regex.syntax={0}
+parser.error.trailing.comma.in.json=Trailing comma is not allowed in JSON
# strict mode error messages
parser.error.strict.no.with="with" statement cannot be used in strict mode
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8024972.js Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,43 @@
+/*
+ * 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.
+ */
+
+/**
+ * JDK-8024972: for (LeftHandSideExpression in Expression) crashes the compiler
+ *
+ * @test
+ * @run
+ */
+
+var obj = {};
+
+var arr = [2, 45, -1, 445];
+for (obj.x in arr) {
+ print(obj.x + "->"+ arr[obj.x]);
+}
+
+var abc = { foo: 'bar', hello: 'world' };
+for (obj.x in abc) {
+ print(obj.x + "->" + abc[obj.x]);
+}
+
+for (obj.x in 0) {}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8024972.js.EXPECTED Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,6 @@
+0->2
+1->45
+2->-1
+3->445
+foo->bar
+hello->world
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8025048-2.js Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,36 @@
+/*
+ * 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.
+ */
+
+/**
+ * JDK-8025048: true as case label results in ClassCastException
+ *
+ * @test
+ * @run
+ */
+
+function func(x) {
+ switch(x) {
+ case 8: break; case false:
+ }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8025048.js Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,36 @@
+/*
+ * 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.
+ */
+
+/**
+ * JDK-8025048: true as case label results in ClassCastException
+ *
+ * @test
+ * @run
+ */
+
+function func(x) {
+ switch(x) {
+ case 8: break; case true:
+ }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8025080.js Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,43 @@
+/*
+ * 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.
+ */
+
+/**
+ * JDK-8025080: Object literal getter, setter function with number format property name results in ClassFormatError
+ *
+ * @test
+ * @run
+ */
+
+var obj = {
+ get 1e81() { print("1e81 getter"); },
+ set 1e81(x) { print("1e81 setter"); },
+ get 3.14e-2() { print("3.14e-2 getter");},
+ set 3.14e-2(x) { print("3.14e-2 setter"); }
+};
+
+obj[1e81];
+obj[1e81] = 23;
+
+obj[3.14e-2];
+obj[3.14e-2] = 42;
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8025080.js.EXPECTED Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,4 @@
+1e81 getter
+1e81 setter
+3.14e-2 getter
+3.14e-2 setter
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8025090.js Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,35 @@
+/*
+ * 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.
+ */
+
+/**
+ * JDK-8025090: 'while' statement with 'test' using var before being declared in body results in VerifyError
+ *
+ * @test
+ * @run
+ */
+
+// The following used to result in VerifyError
+function f() {
+ while (x += 2) { var x = 44 }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8025111.js Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,48 @@
+/*
+ * 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.
+ */
+
+/**
+ * JDK-8025111: undefined or null 'with' expression in empty with block should throw TypeError
+ *
+ * @test
+ * @run
+ */
+
+function check(callback, arg) {
+ try {
+ callback(arg);
+ fail("should have thrown TypeError: " + callback + " on " + arg);
+ } catch (e) {
+ if (! (e instanceof TypeError)) {
+ fail("Expected TypeError, got " + e);
+ }
+ }
+}
+
+function func(obj) {
+ with(obj) {}
+}
+
+check(func);
+check(func, undefined);
+check(func, null);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8025147.js Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * JDK-8025147: Trailing comma is not allowed in JSONArray and JSONObject
+ *
+ * @test
+ * @run
+ */
+
+function check(str) {
+ try {
+ JSON.parse(str);
+ fail("should have thrown SyntaxError for " + str);
+ } catch (e) {
+ print(e);
+ }
+}
+
+check("{ \"a\": 333, }");
+check("[ 4343, ]");
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8025147.js.EXPECTED Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,6 @@
+SyntaxError: Invalid JSON: <json>:1:12 Trailing comma is not allowed in JSON
+{ "a": 333, }
+ ^
+SyntaxError: Invalid JSON: <json>:1:8 Trailing comma is not allowed in JSON
+[ 4343, ]
+ ^
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8025149.js Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,47 @@
+/*
+ * 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.
+ */
+
+/**
+ * JDK-8025149: JSON.stringify does not handle 'space' argument as per the spec.
+ *
+ * @test
+ * @run
+ */
+
+print(JSON.stringify({ foo : 23, bar: { x : 22} }, undefined ,new Number(Infinity)));
+
+print(JSON.stringify({ foo : 23, bar: { x : 22} }, undefined ,new Number(-Infinity)));
+
+try {
+ JSON.stringify({},[],
+ (n = new Number(0), n.valueOf = function() { throw ("inside n.valueOf") }, n));
+} catch (e) {
+ print(e);
+}
+
+try {
+ JSON.stringify({},[],
+ (s = new String(""), s.toString = function() { throw ("inside s.toString") }, s));
+} catch (e) {
+ print(e);
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8025149.js.EXPECTED Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,9 @@
+{
+ "foo": 23,
+ "bar": {
+ "x": 22
+ }
+}
+{"foo":23,"bar":{"x":22}}
+inside n.valueOf
+inside s.toString
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8025163.js Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ */
+
+/**
+ * JDK-8025163: Date methods should not return -0
+ *
+ * @test
+ * @run
+ */
+
+print(1 / (new Date(0, 0, 1)).getYear());
+print(1 / (new Date(1969, 1, 2)).getDay());
+print(1 / (new Date(1969, 0, 1)).getHours());
+print(1 / (new Date(1969, 0, 1)).getHours());
+print(1 / (new Date(1969, 0, 1)).getMinutes());
+print(1 / (new Date(1969, 0, 1)).getSeconds());
+print(1 / (new Date(1969, 0, 1)).getMilliseconds());
+print(1 / (new Date(1969, 0, 1)).getMilliseconds());
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8025163.js.EXPECTED Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,8 @@
+Infinity
+Infinity
+Infinity
+Infinity
+Infinity
+Infinity
+Infinity
+Infinity
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8025197.js Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ */
+
+/**
+ * JDK-8025197: String replace method fails with regexp /$/gi
+ *
+ * @test
+ * @run
+ */
+
+print('dog'.replace(/$/gi, 's'));
+print('dog'.replace(/(?:g)$/gi, 's'));
+print('dog'.replace(/(?:a)$/gi, 's'));
+print('dog'.replace(/(?!g)$/gi, 's'));
+print('dog'.replace(/(?!a)$/gi, 's'));
+print('dog'.replace(/g?$/gi, 's'));
+print('dog'.replace(/.?$/gi, 's'));
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8025197.js.EXPECTED Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,7 @@
+dogs
+dos
+dog
+dogs
+dogs
+doss
+doss
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8025312.js Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,35 @@
+/*
+ * 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.
+ */
+
+/**
+ * JDK-8025312: parseInt should convert 'radix' argument to ToInt32 even if empty string is parsed
+ *
+ * @test
+ * @run
+ */
+
+parseInt("", {
+ valueOf: function() {
+ print("inside valueOf of 'radix'");
+ }
+});
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8025312.js.EXPECTED Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,1 @@
+inside valueOf of 'radix'
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8025325.js Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,35 @@
+/*
+ * 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.
+ */
+
+/**
+ * JDK-8025325: parseFloat does not handle '.' in exponent part
+ *
+ * @test
+ * @run
+ */
+
+print(parseFloat("2e2."));
+print(parseFloat("2e2.3"));
+print(parseFloat("2e2.fdgdf"));
+print(parseFloat("2e2. gdfgdf"));
+print(parseFloat("2e2. "));
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8025325.js.EXPECTED Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,5 @@
+200
+200
+200
+200
+200
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8025434.js Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,66 @@
+/*
+ * 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.
+ */
+
+/**
+ * JDK-8025434: RegExp lastIndex can exceed int range
+ *
+ * @test
+ * @run
+ */
+
+var r = /a/g;
+
+r.lastIndex = 0x100000000;
+if (r.test("a")) {
+ throw new Error("Expected no match");
+}
+
+r.lastIndex = 0x100000000000000;
+if (r.test("a")) {
+ throw new Error("Expected no match");
+}
+
+r.lastIndex = -0x100000000;
+if (r.test("a")) {
+ throw new Error("Expected match");
+}
+
+r.lastIndex = -0x100000000000000;
+if (r.test("a")) {
+ throw new Error("Expected no match");
+}
+
+r.lastIndex = 1;
+if (r.test("a")) {
+ throw new Error("Expected no match");
+}
+
+r.lastIndex = -1;
+if (r.test("a")) {
+ throw new Error("Expected no match");
+}
+
+r.lastIndex = 0;
+if (!r.test("a")) {
+ throw new Error("Expected match");
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8025486.js Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,55 @@
+/*
+ * 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.
+ */
+
+/**
+ * JDK-8025486: RegExp constructor arguments are not evaluated in right order
+ *
+ * @test
+ * @run
+ */
+
+new RegExp({
+ toString: function() {
+ print("source");
+ return "a";
+ }
+}, {
+ toString: function() {
+ print("flags");
+ return "g";
+ }
+});
+
+try {
+ new RegExp(/asdf/, {
+ toString: function() {
+ fail("toString should not be called");
+ }
+ });
+ fail("expected TypeError");
+} catch (e) {
+ if (!(e instanceof TypeError)) {
+ fail("expected TypeError");
+ }
+ print(e);
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8025486.js.EXPECTED Thu Oct 10 13:41:08 2013 -0700
@@ -0,0 +1,3 @@
+source
+flags
+TypeError: Cannot supply flags when constructing one RegExp from another
--- a/nashorn/test/script/basic/parser/objectLitExpr.js.EXPECTED Thu Oct 10 08:51:55 2013 +0200
+++ b/nashorn/test/script/basic/parser/objectLitExpr.js.EXPECTED Thu Oct 10 13:41:08 2013 -0700
@@ -126,10 +126,7 @@
},
"value": {
"type": "FunctionExpression",
- "id": {
- "type": "Identifier",
- "name": "get x"
- },
+ "id": null,
"params": [],
"defaults": [],
"rest": null,
@@ -157,10 +154,7 @@
},
"value": {
"type": "FunctionExpression",
- "id": {
- "type": "Identifier",
- "name": "get y"
- },
+ "id": null,
"params": [],
"defaults": [],
"rest": null,
--- a/nashorn/test/script/trusted/JDK-8008305.js Thu Oct 10 08:51:55 2013 +0200
+++ b/nashorn/test/script/trusted/JDK-8008305.js Thu Oct 10 13:41:08 2013 -0700
@@ -54,6 +54,6 @@
fail("Expected SecurityException from script!");
} catch (e) {
if (! (e instanceof SecurityException)) {
- faile("Expected SecurityException, but got " + e);
+ fail("Expected SecurityException, but got " + e);
}
}
--- a/nashorn/test/src/jdk/nashorn/api/scripting/ScriptEngineTest.java Thu Oct 10 08:51:55 2013 +0200
+++ b/nashorn/test/src/jdk/nashorn/api/scripting/ScriptEngineTest.java Thu Oct 10 13:41:08 2013 -0700
@@ -37,10 +37,12 @@
import java.util.concurrent.Callable;
import javax.script.Compilable;
import javax.script.CompiledScript;
+import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineFactory;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
+import javax.script.SimpleScriptContext;
import org.testng.annotations.Test;
/**
@@ -231,6 +233,17 @@
}
@Test
+ public void compileAndEvalInDiffContextTest() throws ScriptException {
+ final ScriptEngineManager m = new ScriptEngineManager();
+ final ScriptEngine engine = m.getEngineByName("js");
+ final Compilable compilable = (Compilable) engine;
+ final CompiledScript compiledScript = compilable.compile("foo");
+ final ScriptContext ctxt = new SimpleScriptContext();
+ ctxt.setAttribute("foo", "hello", ScriptContext.ENGINE_SCOPE);
+ assertEquals(compiledScript.eval(ctxt), "hello");
+ }
+
+ @Test
public void accessGlobalTest() {
final ScriptEngineManager m = new ScriptEngineManager();
final ScriptEngine e = m.getEngineByName("nashorn");