提交 a1b6aba7 编写于 作者: L lana

Merge

...@@ -86,3 +86,6 @@ b91ef6b60f4e19bf4592c6dd594c9bac62487519 jdk7-b106 ...@@ -86,3 +86,6 @@ b91ef6b60f4e19bf4592c6dd594c9bac62487519 jdk7-b106
ab0d3f54a63f2aadfcdd2e14b81f79362ce454e2 jdk7-b109 ab0d3f54a63f2aadfcdd2e14b81f79362ce454e2 jdk7-b109
176586cd040e4dd17a5ff6e91f72df10d7442453 jdk7-b110 176586cd040e4dd17a5ff6e91f72df10d7442453 jdk7-b110
fb63a2688db807a73e2a3de7d9bab298f1bff0e8 jdk7-b111 fb63a2688db807a73e2a3de7d9bab298f1bff0e8 jdk7-b111
b53f226b1d91473ac54184afa827be07b87e0319 jdk7-b112
61d3b9fbb26bdef56cfa41b9af5bc312a22cbeb8 jdk7-b113
e250cef36ea05e627e7e6f7d75e5e19f529e2ba3 jdk7-b114
...@@ -75,7 +75,6 @@ import_product -- copy in the product components \n\ ...@@ -75,7 +75,6 @@ import_product -- copy in the product components \n\
import_fastdebug -- copy in the fastdebug components \n\ import_fastdebug -- copy in the fastdebug components \n\
import_debug -- copy in the debug components \n\ import_debug -- copy in the debug components \n\
modules -- build the jdk and jre module images (experimental) \n\ modules -- build the jdk and jre module images (experimental) \n\
sccs_get -- make sure all SCCS files are up-to-date (need SCCS) \n\
create_links -- create softlinks in Solaris 32bit build to 64bit dirs \n\ create_links -- create softlinks in Solaris 32bit build to 64bit dirs \n\
" "
...@@ -278,21 +277,6 @@ include $(BUILDDIR)/common/Sanity.gmk ...@@ -278,21 +277,6 @@ include $(BUILDDIR)/common/Sanity.gmk
$(OUTPUTDIR) $(TEMPDIR): $(OUTPUTDIR) $(TEMPDIR):
$(MKDIR) -p $@ $(MKDIR) -p $@
# cleanup everything. If the workspace is not being built by the control
# workspace, and if it is a Teamware workspace, then see if there are
# any files which are not under SCCS control.
clean clobber::
ifndef EXTERNALSANITYCONTROL
@if [ -d $(TOPDIR)/Codemgr_wsdata ]; then \
$(ECHO) '\nPerforming workspace scan for remnant files.\n' \
' Any files listed below are not under SCCS control in the workspace\n' \
' and you should review them and possibly remove them manually:' ; \
$(FIND) $(TOPDIR)/make $(TOPDIR)/src -type f | \
$(SED) 's+SCCS/[ps]\.++' | $(SORT) | $(UNIQ) -c | $(NAWK) '$$1<2 {print $$2;}' ; \
$(ECHO) 'End of workspace scan.' ; \
fi
endif
# this should be the last rule in this file: # this should be the last rule in this file:
all:: all::
@if [ -r $(WARNING_FILE) ]; then \ @if [ -r $(WARNING_FILE) ]; then \
...@@ -341,16 +325,70 @@ endif ...@@ -341,16 +325,70 @@ endif
include $(BUILDDIR)/common/internal/BinaryPlugs.gmk include $(BUILDDIR)/common/internal/BinaryPlugs.gmk
# #
# Get top level sccs_get rule # Test rule
# #
include $(BUILDDIR)/common/Rules-SCCS.gmk
.NOTPARALLEL: test_run
test:
$(MAKE) test_run
test_run: test_clean test_start test_summary
test_start:
@$(ECHO) "Tests started at `$(DATE)`"
test_clean:
$(RM) $(OUTPUTDIR)/test_failures.txt $(OUTPUTDIR)/test_log.txt
test_summary: $(OUTPUTDIR)/test_failures.txt
@$(ECHO) "#################################################"
@$(ECHO) "Tests completed at `$(DATE)`"
@( $(EGREP) '^TEST STATS:' $(OUTPUTDIR)/test_log.txt \
|| $(ECHO) "No TEST STATS seen in log" )
@$(ECHO) "For complete details see: $(OUTPUTDIR)/test_log.txt"
@$(ECHO) "#################################################"
@if [ -s $< ] ; then \
$(ECHO) "ERROR: Test failure count: `$(CAT) $< | $(WC) -l`"; \
$(CAT) $<; \
exit 1; \
else \
$(ECHO) "Success! No failures detected"; \
fi
# Get failure list from log
$(OUTPUTDIR)/test_failures.txt: $(OUTPUTDIR)/test_log.txt
@$(RM) $@
@( $(EGREP) '^FAILED:' $< || $(ECHO) "" ) | $(NAWK) 'length>0' > $@
# Get log file of all tests run
JDK_TO_TEST := $(shell \
if [ -d "$(ABS_OUTPUTDIR)/j2sdk-image" ] ; then \
$(ECHO) "$(ABS_OUTPUTDIR)/j2sdk-image"; \
elif [ -d "$(ABS_OUTPUTDIR)/bin" ] ; then \
$(ECHO) "$(ABS_OUTPUTDIR)"; \
elif [ "$(PRODUCT_HOME)" != "" -a -d "$(PRODUCT_HOME)/bin" ] ; then \
$(ECHO) "$(PRODUCT_HOME)"; \
fi \
)
TEST_TARGETS=jdk_all
$(OUTPUTDIR)/test_log.txt:
$(RM) $@
( $(CD) ../test && \
$(MAKE) NO_STOPPING=- PRODUCT_HOME=$(JDK_TO_TEST) $(TEST_TARGETS) \
) | tee $@
#
# JPRT rules # JPRT rules
#
include jprt.gmk include jprt.gmk
# #
# Phonies to avoid accidents. # Phonies to avoid accidents.
# #
.PHONY: all build clean clobber optimized debug fastdebug create_links \ .PHONY: all build clean clobber optimized debug fastdebug create_links \
import import_product import_fastdebug import_debug import import_product import_fastdebug import_debug \
test test_run test_start test_clean test_summary
...@@ -76,7 +76,7 @@ cscope.out: cscope.files FRC ...@@ -76,7 +76,7 @@ cscope.out: cscope.files FRC
# What files should we include? A simple rule might be just those files under # What files should we include? A simple rule might be just those files under
# SCM control, however this would miss files we create like the opcodes and # SCM control, however this would miss files we create like the opcodes and
# CClassHeaders. The following attempts to find everything that is *useful*. # CClassHeaders. The following attempts to find everything that is *useful*.
# (.del files are created by sccsrm, demo directories contain many .java files # (demo directories contain many .java files
# that probably aren't useful for development, and the pkgarchive may contain # that probably aren't useful for development, and the pkgarchive may contain
# duplicates of files within the source hierarchy). The ordering of the .raw # duplicates of files within the source hierarchy). The ordering of the .raw
# file is an attempt to make cscope display the most relevant files first. # file is an attempt to make cscope display the most relevant files first.
......
...@@ -334,7 +334,7 @@ DOCSDIR = $(OUTPUTDIR)/docs$(DOCSDIRSUFFIX) ...@@ -334,7 +334,7 @@ DOCSDIR = $(OUTPUTDIR)/docs$(DOCSDIRSUFFIX)
DOCSDIRSUFFIX = DOCSDIRSUFFIX =
# The MESSAGE, WARNING and ERROR files are used to store sanityck and # The MESSAGE, WARNING and ERROR files are used to store sanityck and
# SCCS check messages, warnings and errors. # warnings and errors.
ifndef ERROR_FILE ifndef ERROR_FILE
ERROR_FILE = $(OUTPUTDIR)/sanityCheckErrors.txt ERROR_FILE = $(OUTPUTDIR)/sanityCheckErrors.txt
endif endif
...@@ -634,38 +634,6 @@ LINTFLAGS = $(LINTFLAGS_$(VARIANT)) $(LINTFLAGS_COMMON) \ ...@@ -634,38 +634,6 @@ LINTFLAGS = $(LINTFLAGS_$(VARIANT)) $(LINTFLAGS_COMMON) \
VERSION_DEFINES = -DRELEASE='"$(RELEASE)"' VERSION_DEFINES = -DRELEASE='"$(RELEASE)"'
# Note: As a rule, GNU Make rules should not appear in any of the
# Defs*.gmk files. These were added for Kestrel-Solaris and do address
# a TeamWare bug. They should be moved elsewhere for Merlin.
#
# Override gnumake built-in rules which do sccs get operations badly.
# (They put the checked out code in the current directory, not in the
# directory of the original file.)
# Since this is a symptom of a teamware failure, complain and die on the spot.
# This message immediately goes to stdout and the build terminates.
define SCCS-trouble
$(error \
"ERROR: File $@ referenced while building in $(CURRENT_DIRECTORY) \
is out of date with respect to its SCCS file $<. \
This can happen from an unresolved Teamware conflict, a file movement, or \
a failure in which SCCS files are updated but the 'sccs get' was not done. \
You should double check for other out of date files in your workspace. \
Or run: cd $(TOPDIR) && $(MAKE) sccs_get")
endef
%:: s.%
@$(SCCS-trouble)
%:: SCCS/s.%
@$(SCCS-trouble)
@$(ECHO) " is out of date with respect to its SCCS file." >> $(WARNING_FILE)
@$(ECHO) " This file may be from an unresolved Teamware conflict." >> $(WARNING_FILE)
@$(ECHO) " This is also a symptom of a Teamware bringover/putback failure" >> $(WARNING_FILE)
@$(ECHO) " in which SCCS files are updated but not checked out." >> $(WARNING_FILE)
@$(ECHO) " Check for other out of date files in your workspace." >> $(WARNING_FILE)
@$(ECHO) "" >> $(WARNING_FILE)
@#exit 666
ifdef INSANE ifdef INSANE
export INSANE export INSANE
endif endif
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
# UTILS_COMMAND_PATH # UTILS_COMMAND_PATH
# /usr/bin/ # /usr/bin/
# UTILS_USR_BIN_PATH # UTILS_USR_BIN_PATH
# /usr/ccs/bin/ (sccs, m4, lex, yacc, as, ar, strip, mcs) # /usr/ccs/bin/ (m4, lex, yacc, as, ar, strip, mcs)
# UTILS_CCS_BIN_PATH # UTILS_CCS_BIN_PATH
# Dev Tools: zip, unzip, etc that we may have special versions of # Dev Tools: zip, unzip, etc that we may have special versions of
# UTILS_DEVTOOL_PATH # UTILS_DEVTOOL_PATH
...@@ -117,7 +117,6 @@ RC = $(UTILS_COMMAND_PATH)rc ...@@ -117,7 +117,6 @@ RC = $(UTILS_COMMAND_PATH)rc
RMDIR = $(UTILS_COMMAND_PATH)rmdir RMDIR = $(UTILS_COMMAND_PATH)rmdir
RPM = $(UTILS_COMMAND_PATH)rpm RPM = $(UTILS_COMMAND_PATH)rpm
RPMBUILD = $(UTILS_COMMAND_PATH)rpmbuild RPMBUILD = $(UTILS_COMMAND_PATH)rpmbuild
SCCS = $(UTILS_CCS_BIN_PATH)sccs
SED = $(UTILS_COMMAND_PATH)sed SED = $(UTILS_COMMAND_PATH)sed
SH = $(UTILS_COMMAND_PATH)sh SH = $(UTILS_COMMAND_PATH)sh
SHOWREV = $(UTILS_USR_BIN_PATH)showrev SHOWREV = $(UTILS_USR_BIN_PATH)showrev
...@@ -183,7 +182,7 @@ ifeq ($(PLATFORM),linux) ...@@ -183,7 +182,7 @@ ifeq ($(PLATFORM),linux)
NAWK = $(USRBIN_PATH)gawk NAWK = $(USRBIN_PATH)gawk
# Intrinsic unix command, with backslash-escaped character interpretation # Intrinsic unix command, with backslash-escaped character interpretation
ECHO = /bin/echo -e ECHO = /bin/echo -e
# These are really in UTILS_USR_BIN_PATH on Linux (only sccs is not) # These are really in UTILS_USR_BIN_PATH on Linux
AR = $(UTILS_USR_BIN_PATH)ar AR = $(UTILS_USR_BIN_PATH)ar
AS = $(UTILS_USR_BIN_PATH)as AS = $(UTILS_USR_BIN_PATH)as
LD = $(UTILS_USR_BIN_PATH)ld LD = $(UTILS_USR_BIN_PATH)ld
......
...@@ -219,7 +219,7 @@ else ...@@ -219,7 +219,7 @@ else
PRODUCT_NAME = Java(TM) PRODUCT_NAME = Java(TM)
PRODUCT_SUFFIX = SE Runtime Environment PRODUCT_SUFFIX = SE Runtime Environment
JDK_RC_PLATFORM_NAME = Platform SE JDK_RC_PLATFORM_NAME = Platform SE
COMPANY_NAME = Oracle COMPANY_NAME = Oracle Corporation
endif endif
RUNTIME_NAME = $(PRODUCT_NAME) $(PRODUCT_SUFFIX) RUNTIME_NAME = $(PRODUCT_NAME) $(PRODUCT_SUFFIX)
......
...@@ -284,6 +284,7 @@ JAVA_JAVA_java = \ ...@@ -284,6 +284,7 @@ JAVA_JAVA_java = \
java/util/concurrent/CancellationException.java \ java/util/concurrent/CancellationException.java \
java/util/concurrent/CompletionService.java \ java/util/concurrent/CompletionService.java \
java/util/concurrent/ConcurrentHashMap.java \ java/util/concurrent/ConcurrentHashMap.java \
java/util/concurrent/ConcurrentLinkedDeque.java \
java/util/concurrent/ConcurrentLinkedQueue.java \ java/util/concurrent/ConcurrentLinkedQueue.java \
java/util/concurrent/ConcurrentMap.java \ java/util/concurrent/ConcurrentMap.java \
java/util/concurrent/ConcurrentNavigableMap.java \ java/util/concurrent/ConcurrentNavigableMap.java \
......
...@@ -25,43 +25,265 @@ ...@@ -25,43 +25,265 @@
# Properties for jprt # Properties for jprt
# Use whatever release that the submitted job requests # At submit time, the release supplied will be in jprt.submit.release
# and will be one of the official release names defined in jprt.
# jprt supports property value expansion using ${property.name} syntax.
# This tells jprt what default release we want to build
jprt.tools.default.release=${jprt.submit.release} jprt.tools.default.release=${jprt.submit.release}
# The different build flavors we want, we override here so we just get these 2 # The different build flavors we want, we override here so we just get these 2
jprt.build.flavors=product,fastdebug jprt.build.flavors=product,fastdebug
# Standard test target for everybody # Define the Windows we want (temporary)
jprt.test.targets=*-*-*-jvm98 jprt.my.windows.i586.jdk7b107=windows_i586_5.0
jprt.my.windows.i586.jdk7temp=windows_i586_5.0
jprt.my.windows.i586.jdk7=windows_i586_5.1
jprt.my.windows.i586=${jprt.my.windows.i586.${jprt.tools.default.release}}
# Standard list of jprt build targets for this source tree
jprt.build.targets= \
solaris_sparc_5.10-{product|fastdebug}, \
solaris_sparcv9_5.10-{product|fastdebug}, \
solaris_i586_5.10-{product|fastdebug}, \
solaris_x64_5.10-{product|fastdebug}, \
linux_i586_2.6-{product|fastdebug}, \
linux_x64_2.6-{product|fastdebug}, \
${jprt.my.windows.i586}-{product|fastdebug}, \
windows_x64_5.2-{product|fastdebug}
# Standard vm test target
jprt.test.targets= \
solaris_sparc_5.10-product-c1-jvm98, \
solaris_sparcv9_5.10-product-c2-jvm98, \
solaris_i586_5.10-product-c1-jvm98, \
solaris_x64_5.10-product-c2-jvm98, \
linux_i586_2.6-product-{c1|c2}-jvm98, \
linux_x64_2.6-product-c2-jvm98, \
${jprt.my.windows.i586}-product-c1-jvm98, \
windows_x64_5.2-product-c2-jvm98
# User can select the test set with jprt submit "-testset name" option
jprt.my.test.set=${jprt.test.set}
# Default jdk test targets in test/Makefile (no fastdebug & limited c2)
jprt.make.rule.default.test.targets= \
\
solaris_sparc_5.10-product-c1-jdk_beans1, \
solaris_sparcv9_5.10-product-c2-jdk_beans1, \
solaris_i586_5.10-product-c1-jdk_beans1, \
solaris_x64_5.10-product-c2-jdk_beans1, \
linux_i586_2.6-product-{c1|c2}-jdk_beans1, \
linux_x64_2.6-product-c2-jdk_beans1, \
${jprt.my.windows.i586}-product-c1-jdk_beans1, \
windows_x64_5.2-product-c2-jdk_beans1, \
\
solaris_sparc_5.10-product-c1-jdk_io, \
solaris_sparcv9_5.10-product-c2-jdk_io, \
solaris_i586_5.10-product-c1-jdk_io, \
solaris_x64_5.10-product-c2-jdk_io, \
linux_i586_2.6-product-{c1|c2}-jdk_io, \
linux_x64_2.6-product-c2-jdk_io, \
${jprt.my.windows.i586}-product-c1-jdk_io, \
windows_x64_5.2-product-c2-jdk_io, \
\
solaris_sparc_5.10-product-c1-jdk_lang, \
solaris_sparcv9_5.10-product-c2-jdk_lang, \
solaris_i586_5.10-product-c1-jdk_lang, \
solaris_x64_5.10-product-c2-jdk_lang, \
linux_i586_2.6-product-{c1|c2}-jdk_lang, \
linux_x64_2.6-product-c2-jdk_lang, \
${jprt.my.windows.i586}-product-c1-jdk_lang, \
windows_x64_5.2-product-c2-jdk_lang, \
\
solaris_sparc_5.10-product-c1-jdk_math, \
solaris_sparcv9_5.10-product-c2-jdk_math, \
solaris_i586_5.10-product-c1-jdk_math, \
solaris_x64_5.10-product-c2-jdk_math, \
linux_i586_2.6-product-{c1|c2}-jdk_math, \
linux_x64_2.6-product-c2-jdk_math, \
${jprt.my.windows.i586}-product-c1-jdk_math, \
windows_x64_5.2-product-c2-jdk_math, \
\
solaris_sparc_5.10-product-c1-jdk_misc, \
solaris_sparcv9_5.10-product-c2-jdk_misc, \
solaris_i586_5.10-product-c1-jdk_misc, \
solaris_x64_5.10-product-c2-jdk_misc, \
linux_i586_2.6-product-{c1|c2}-jdk_misc, \
linux_x64_2.6-product-c2-jdk_misc, \
${jprt.my.windows.i586}-product-c1-jdk_misc, \
windows_x64_5.2-product-c2-jdk_misc, \
\
solaris_sparc_5.10-product-c1-jdk_net, \
solaris_sparcv9_5.10-product-c2-jdk_net, \
solaris_i586_5.10-product-c1-jdk_net, \
solaris_x64_5.10-product-c2-jdk_net, \
linux_i586_2.6-product-{c1|c2}-jdk_net, \
linux_x64_2.6-product-c2-jdk_net, \
${jprt.my.windows.i586}-product-c1-jdk_net, \
windows_x64_5.2-product-c2-jdk_net, \
\
solaris_sparc_5.10-product-c1-jdk_nio1, \
solaris_sparcv9_5.10-product-c2-jdk_nio1, \
solaris_i586_5.10-product-c1-jdk_nio1, \
solaris_x64_5.10-product-c2-jdk_nio1, \
linux_i586_2.6-product-{c1|c2}-jdk_nio1, \
linux_x64_2.6-product-c2-jdk_nio1, \
${jprt.my.windows.i586}-product-c1-jdk_nio1, \
windows_x64_5.2-product-c2-jdk_nio1, \
\
solaris_sparc_5.10-product-c1-jdk_nio2, \
solaris_sparcv9_5.10-product-c2-jdk_nio2, \
solaris_i586_5.10-product-c1-jdk_nio2, \
solaris_x64_5.10-product-c2-jdk_nio2, \
linux_i586_2.6-product-{c1|c2}-jdk_nio2, \
linux_x64_2.6-product-c2-jdk_nio2, \
${jprt.my.windows.i586}-product-c1-jdk_nio2, \
windows_x64_5.2-product-c2-jdk_nio2, \
\
solaris_sparc_5.10-product-c1-jdk_nio3, \
solaris_sparcv9_5.10-product-c2-jdk_nio3, \
solaris_i586_5.10-product-c1-jdk_nio3, \
solaris_x64_5.10-product-c2-jdk_nio3, \
linux_i586_2.6-product-{c1|c2}-jdk_nio3, \
linux_x64_2.6-product-c2-jdk_nio3, \
${jprt.my.windows.i586}-product-c1-jdk_nio3, \
windows_x64_5.2-product-c2-jdk_nio3, \
\
solaris_sparc_5.10-product-c1-jdk_security1, \
solaris_sparcv9_5.10-product-c2-jdk_security1, \
solaris_i586_5.10-product-c1-jdk_security1, \
solaris_x64_5.10-product-c2-jdk_security1, \
linux_i586_2.6-product-{c1|c2}-jdk_security1, \
linux_x64_2.6-product-c2-jdk_security1, \
${jprt.my.windows.i586}-product-c1-jdk_security1, \
windows_x64_5.2-product-c2-jdk_security1, \
\
solaris_sparc_5.10-product-c1-jdk_text, \
solaris_sparcv9_5.10-product-c2-jdk_text, \
solaris_i586_5.10-product-c1-jdk_text, \
solaris_x64_5.10-product-c2-jdk_text, \
linux_i586_2.6-product-{c1|c2}-jdk_text, \
linux_x64_2.6-product-c2-jdk_text, \
${jprt.my.windows.i586}-product-c1-jdk_text, \
windows_x64_5.2-product-c2-jdk_text, \
\
solaris_sparc_5.10-product-c1-jdk_tools1, \
solaris_sparcv9_5.10-product-c2-jdk_tools1, \
solaris_i586_5.10-product-c1-jdk_tools1, \
solaris_x64_5.10-product-c2-jdk_tools1, \
linux_i586_2.6-product-{c1|c2}-jdk_tools1, \
linux_x64_2.6-product-c2-jdk_tools1, \
${jprt.my.windows.i586}-product-c1-jdk_tools1, \
windows_x64_5.2-product-c2-jdk_tools1, \
\
solaris_sparc_5.10-product-c1-jdk_util, \
solaris_sparcv9_5.10-product-c2-jdk_util, \
solaris_i586_5.10-product-c1-jdk_util, \
solaris_x64_5.10-product-c2-jdk_util, \
linux_i586_2.6-product-{c1|c2}-jdk_util, \
linux_x64_2.6-product-c2-jdk_util, \
${jprt.my.windows.i586}-product-c1-jdk_util, \
windows_x64_5.2-product-c2-jdk_util
# Test targets in test/Makefile (some longer running tests only test c2) # All jdk test targets in test/Makefile (still no fastdebug & limited c2)
jprt.make.rule.test.targets= \ jprt.make.rule.all.test.targets= \
*-product-*-jdk_beans1, \ \
*-product-*-jdk_beans2, \ ${jprt.make.rule.default.test.targets}, \
*-product-*-jdk_beans3, \ \
*-product-*-jdk_io, \ solaris_sparc_5.10-product-c1-jdk_awt, \
*-product-*-jdk_lang, \ solaris_sparcv9_5.10-product-c2-jdk_awt, \
*-product-*-jdk_management1, \ solaris_i586_5.10-product-c1-jdk_awt, \
*-product-*-jdk_management2, \ solaris_x64_5.10-product-c2-jdk_awt, \
*-product-*-jdk_math, \ linux_i586_2.6-product-{c1|c2}-jdk_awt, \
*-product-*-jdk_misc, \ linux_x64_2.6-product-c2-jdk_awt, \
*-product-*-jdk_net, \ ${jprt.my.windows.i586}-product-c1-jdk_awt, \
*-product-*-jdk_nio1, \ windows_x64_5.2-product-c2-jdk_awt, \
*-product-*-jdk_nio2, \ \
*-product-*-jdk_nio3, \ solaris_sparc_5.10-product-c1-jdk_beans2, \
*-product-*-jdk_security1, \ solaris_sparcv9_5.10-product-c2-jdk_beans2, \
*-product-*-jdk_security2, \ solaris_i586_5.10-product-c1-jdk_beans2, \
*-product-*-jdk_security3, \ solaris_x64_5.10-product-c2-jdk_beans2, \
*-product-*-jdk_text, \ linux_i586_2.6-product-{c1|c2}-jdk_beans2, \
*-product-*-jdk_tools1, \ linux_x64_2.6-product-c2-jdk_beans2, \
*-product-*-jdk_tools2, \ ${jprt.my.windows.i586}-product-c1-jdk_beans2, \
*-product-*-jdk_util windows_x64_5.2-product-c2-jdk_beans2, \
\
solaris_sparc_5.10-product-c1-jdk_beans3, \
solaris_sparcv9_5.10-product-c2-jdk_beans3, \
solaris_i586_5.10-product-c1-jdk_beans3, \
solaris_x64_5.10-product-c2-jdk_beans3, \
linux_i586_2.6-product-{c1|c2}-jdk_beans3, \
linux_x64_2.6-product-c2-jdk_beans3, \
${jprt.my.windows.i586}-product-c1-jdk_beans3, \
windows_x64_5.2-product-c2-jdk_beans3, \
\
solaris_sparc_5.10-product-c1-jdk_management1, \
solaris_sparcv9_5.10-product-c2-jdk_management1, \
solaris_i586_5.10-product-c1-jdk_management1, \
solaris_x64_5.10-product-c2-jdk_management1, \
linux_i586_2.6-product-{c1|c2}-jdk_management1, \
linux_x64_2.6-product-c2-jdk_management1, \
${jprt.my.windows.i586}-product-c1-jdk_management1, \
windows_x64_5.2-product-c2-jdk_management1, \
\
solaris_sparc_5.10-product-c1-jdk_management2, \
solaris_sparcv9_5.10-product-c2-jdk_management2, \
solaris_i586_5.10-product-c1-jdk_management2, \
solaris_x64_5.10-product-c2-jdk_management2, \
linux_i586_2.6-product-{c1|c2}-jdk_management2, \
linux_x64_2.6-product-c2-jdk_management2, \
${jprt.my.windows.i586}-product-c1-jdk_management2, \
windows_x64_5.2-product-c2-jdk_management2, \
\
solaris_sparc_5.10-product-c1-jdk_rmi, \
solaris_sparcv9_5.10-product-c2-jdk_rmi, \
solaris_i586_5.10-product-c1-jdk_rmi, \
solaris_x64_5.10-product-c2-jdk_rmi, \
linux_i586_2.6-product-{c1|c2}-jdk_rmi, \
linux_x64_2.6-product-c2-jdk_rmi, \
${jprt.my.windows.i586}-product-c1-jdk_rmi, \
windows_x64_5.2-product-c2-jdk_rmi, \
\
solaris_sparc_5.10-product-c1-jdk_security2, \
solaris_sparcv9_5.10-product-c2-jdk_security2, \
solaris_i586_5.10-product-c1-jdk_security2, \
solaris_x64_5.10-product-c2-jdk_security2, \
linux_i586_2.6-product-{c1|c2}-jdk_security2, \
linux_x64_2.6-product-c2-jdk_security2, \
${jprt.my.windows.i586}-product-c1-jdk_security2, \
windows_x64_5.2-product-c2-jdk_security2, \
\
solaris_sparc_5.10-product-c1-jdk_security3, \
solaris_sparcv9_5.10-product-c2-jdk_security3, \
solaris_i586_5.10-product-c1-jdk_security3, \
solaris_x64_5.10-product-c2-jdk_security3, \
linux_i586_2.6-product-{c1|c2}-jdk_security3, \
linux_x64_2.6-product-c2-jdk_security3, \
${jprt.my.windows.i586}-product-c1-jdk_security3, \
windows_x64_5.2-product-c2-jdk_security3, \
\
solaris_sparc_5.10-product-c1-jdk_swing, \
solaris_sparcv9_5.10-product-c2-jdk_swing, \
solaris_i586_5.10-product-c1-jdk_swing, \
solaris_x64_5.10-product-c2-jdk_swing, \
linux_i586_2.6-product-{c1|c2}-jdk_swing, \
linux_x64_2.6-product-c2-jdk_swing, \
${jprt.my.windows.i586}-product-c1-jdk_swing, \
windows_x64_5.2-product-c2-jdk_swing, \
\
solaris_sparc_5.10-product-c1-jdk_tools2, \
solaris_sparcv9_5.10-product-c2-jdk_tools2, \
solaris_i586_5.10-product-c1-jdk_tools2, \
solaris_x64_5.10-product-c2-jdk_tools2, \
linux_i586_2.6-product-{c1|c2}-jdk_tools2, \
linux_x64_2.6-product-c2-jdk_tools2, \
${jprt.my.windows.i586}-product-c1-jdk_tools2, \
windows_x64_5.2-product-c2-jdk_tools2
# Some of these are crashing Xvfb or windows manager, need dedicated DISPLAY per test batch # Select list to use (allow for testset to be empty too)
jprt2.make.rule.test.targets= \ jprt.make.rule..test.targets=${jprt.make.rule.default.test.targets}
*-product-*-jdk_awt, \ jprt.make.rule.test.targets=${jprt.make.rule.${jprt.my.test.set}.test.targets}
*-product-*-jdk_rmi, \
*-product-*-jdk_swing, \
# Directories to be excluded from the source bundles # Directories to be excluded from the source bundles
jprt.bundle.exclude.src.dirs=build dist webrev jprt.bundle.exclude.src.dirs=build dist webrev
......
...@@ -31,7 +31,7 @@ BUILDDIR = .. ...@@ -31,7 +31,7 @@ BUILDDIR = ..
PRODUCT = demos PRODUCT = demos
include $(BUILDDIR)/common/Defs.gmk include $(BUILDDIR)/common/Defs.gmk
SUBDIRS = jni SUBDIRS = jni nio
SUBDIRS_desktop = applets jfc SUBDIRS_desktop = applets jfc
SUBDIRS_management = management SUBDIRS_management = management
SUBDIRS_misc = scripting SUBDIRS_misc = scripting
......
# #
# Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as # under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation. # 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 # This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
...@@ -21,42 +23,17 @@ ...@@ -21,42 +23,17 @@
# questions. # questions.
# #
# @test #
# @bug 6502503 # Makefile for building the jfc demos
# @run shell/timeout=140 ChunkedCharEncoding.sh #
# @summary Http URL connection don't work when default encoding is Cp037: HTTP Transfer-Encoding:chunked
OS=`uname -s`
case "$OS" in
SunOS | Linux )
PS=":"
FS="/"
;;
CYGWIN* )
PS=";"
FS="/"
;;
Windows* )
PS=";"
FS="\\"
;;
* )
echo "Unrecognized system!"
exit 1;
;;
esac
# compile
${TESTJAVA}${FS}bin${FS}javac -d . ${TESTSRC}${FS}TestAvailable.java
# run with CP037 encoding specified. BUILDDIR = ../..
${TESTJAVA}${FS}bin${FS}java -Dfile.encoding=Cp037 TestAvailable 2>&1 PRODUCT = demos
include $(BUILDDIR)/common/Defs.gmk
result=$? SUBDIRS = zipfs
if [ "$result" -ne "0" ]; then include $(BUILDDIR)/common/Subdirs.gmk
exit 1
fi
# no failures, exit. all build clean clobber::
exit 0 $(SUBDIRS-loop)
# #
# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 1997, 2002, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
...@@ -24,47 +24,21 @@ ...@@ -24,47 +24,21 @@
# #
# #
# Only get these rules if SCCS is available # Makefile to build the ZipFileSystem demo.
# #
ifdef SCCS BUILDDIR = ../../..
PRODUCT = demo/zipfs
DEMONAME = zipfs
include $(BUILDDIR)/common/Defs.gmk
# SCCS command to extract out latest source DEMO_ROOT = $(SHARE_SRC)/demo/nio/$(DEMONAME)
SCCS_GET=$(SCCS) get -s DEMO_TOPFILES = ./README.txt
DEMO_SRCDIR = $(DEMO_ROOT)
DEMO_DESTDIR = $(DEMODIR)/nio/$(DEMONAME)
# #
# Make sure all files in workspace are fresh # Demo jar building rules.
# #
TEMP_ALL_FILES=$(JDK_TOPDIR)/temp_filelist include $(BUILDDIR)/common/Demo.gmk
$(TEMP_ALL_FILES): $(JDK_TOPDIR)/Codemgr_wsdata/nametable
$(prep-target)
@$(CUT) -d' ' -f1 $< \
| $(GREP) -v '^VERSION' \
| $(GREP) -v '^deleted_files' \
| $(GREP) -v '^Codemgr_wsdata' > $@
sccs_get: $(TEMP_ALL_FILES)
@$(PRINTF) "Workspace has %d files\n" `$(CAT) $< | $(WC) -l`
@count=0; \
for i in `$(CAT) $<` ; do \
f=$(JDK_TOPDIR)/$$i; \
count=`$(EXPR) $$count '+' 1`; \
if [ `$(EXPR) $$count '%' 100` = 0 ] ; then \
$(PRINTF) "\rChecked $$count files"; \
fi; \
if [ ! -f $$f ] ; then \
$(PRINTF) "\r$(SCCS_GET) $$f\n"; \
(cd `$(DIRNAME) $$f` && $(SCCS_GET) `$(BASENAME) $$f`); \
elif /usr/bin/test $$f -ot `$(DIRNAME) $$f`/SCCS/s.`$(BASENAME) $$f` ; then \
$(PRINTF) "\r$(SCCS_GET) $$f\n"; \
(cd `$(DIRNAME) $$f` && $(SCCS_GET) `$(BASENAME) $$f`); \
fi; \
done; \
$(PRINTF) "\rChecked $$count files\n"
#
# Phonies to avoid accidents.
#
.PHONY: sccs_get
endif
...@@ -80,7 +80,12 @@ vpath %.c $(SHARE_SRC)/native/$(PKGDIR) ...@@ -80,7 +80,12 @@ vpath %.c $(SHARE_SRC)/native/$(PKGDIR)
vpath %.c $(SHARE_SRC)/native/sun/java2d vpath %.c $(SHARE_SRC)/native/sun/java2d
ifeq ($(PLATFORM), windows) ifeq ($(PLATFORM), windows)
OTHER_CFLAGS += -DCMS_IS_WINDOWS_ -Dsqrtf=sqrt OTHER_CFLAGS += -DCMS_IS_WINDOWS_
ifeq ($(COMPILER_VERSION), VS2003)
OTHER_CFLAGS += -Dsqrtf=sqrt
endif
OTHER_LDLIBS = $(OBJDIR)/../../../sun.awt/awt/$(OBJDIRNAME)/awt.lib OTHER_LDLIBS = $(OBJDIR)/../../../sun.awt/awt/$(OBJDIRNAME)/awt.lib
OTHER_INCLUDES += -I$(SHARE_SRC)/native/sun/java2d \ OTHER_INCLUDES += -I$(SHARE_SRC)/native/sun/java2d \
-I$(SHARE_SRC)/native/sun/awt/debug -I$(SHARE_SRC)/native/sun/awt/debug
......
...@@ -525,7 +525,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern ...@@ -525,7 +525,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern
iMatchColumns = new Vector(10); iMatchColumns = new Vector(10);
for(int i = 0; i < 10 ; i++) { for(int i = 0; i < 10 ; i++) {
iMatchColumns.add(i,new Integer(-1)); iMatchColumns.add(i,Integer.valueOf(-1));
} }
strMatchColumns = new Vector(10); strMatchColumns = new Vector(10);
...@@ -889,7 +889,12 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern ...@@ -889,7 +889,12 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern
success = false; success = false;
} else { } else {
tWriter = (TransactionalWriter)rowSetWriter; tWriter = (TransactionalWriter)rowSetWriter;
((CachedRowSetWriter)tWriter).commit(this, updateOnInsert); if (tWriter instanceof CachedRowSetWriter) {
((CachedRowSetWriter)tWriter).commit(this, updateOnInsert);
} else {
tWriter.commit();
}
success = true; success = true;
} }
} }
...@@ -1294,7 +1299,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern ...@@ -1294,7 +1299,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern
tMap = new TreeMap(); tMap = new TreeMap();
for (int i = 0; i<numRows; i++) { for (int i = 0; i<numRows; i++) {
tMap.put(new Integer(i), rvh.get(i)); tMap.put(Integer.valueOf(i), rvh.get(i));
} }
return (tMap.values()); return (tMap.values());
...@@ -1806,7 +1811,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern ...@@ -1806,7 +1811,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern
return (byte)0; return (byte)0;
} }
try { try {
return ((new Byte(value.toString())).byteValue()); return ((Byte.valueOf(value.toString())).byteValue());
} catch (NumberFormatException ex) { } catch (NumberFormatException ex) {
throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.bytefail").toString(), throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.bytefail").toString(),
new Object[] {value.toString().trim(), columnIndex})); new Object[] {value.toString().trim(), columnIndex}));
...@@ -1850,7 +1855,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern ...@@ -1850,7 +1855,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern
} }
try { try {
return ((new Short(value.toString().trim())).shortValue()); return ((Short.valueOf(value.toString().trim())).shortValue());
} catch (NumberFormatException ex) { } catch (NumberFormatException ex) {
throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.shortfail").toString(), throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.shortfail").toString(),
new Object[] {value.toString().trim(), columnIndex})); new Object[] {value.toString().trim(), columnIndex}));
...@@ -1893,7 +1898,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern ...@@ -1893,7 +1898,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern
} }
try { try {
return ((new Integer(value.toString().trim())).intValue()); return ((Integer.valueOf(value.toString().trim())).intValue());
} catch (NumberFormatException ex) { } catch (NumberFormatException ex) {
throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.intfail").toString(), throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.intfail").toString(),
new Object[] {value.toString().trim(), columnIndex})); new Object[] {value.toString().trim(), columnIndex}));
...@@ -1936,7 +1941,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern ...@@ -1936,7 +1941,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern
return (long)0; return (long)0;
} }
try { try {
return ((new Long(value.toString().trim())).longValue()); return ((Long.valueOf(value.toString().trim())).longValue());
} catch (NumberFormatException ex) { } catch (NumberFormatException ex) {
throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.longfail").toString(), throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.longfail").toString(),
new Object[] {value.toString().trim(), columnIndex})); new Object[] {value.toString().trim(), columnIndex}));
...@@ -4014,18 +4019,18 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern ...@@ -4014,18 +4019,18 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern
try { try {
switch (trgType) { switch (trgType) {
case java.sql.Types.BIT: case java.sql.Types.BIT:
Integer i = new Integer(srcObj.toString().trim()); Integer i = Integer.valueOf(srcObj.toString().trim());
return i.equals(new Integer((int)0)) ? return i.equals(Integer.valueOf((int)0)) ?
new Boolean(false) : Boolean.valueOf(false) :
new Boolean(true); Boolean.valueOf(true);
case java.sql.Types.TINYINT: case java.sql.Types.TINYINT:
return new Byte(srcObj.toString().trim()); return Byte.valueOf(srcObj.toString().trim());
case java.sql.Types.SMALLINT: case java.sql.Types.SMALLINT:
return new Short(srcObj.toString().trim()); return Short.valueOf(srcObj.toString().trim());
case java.sql.Types.INTEGER: case java.sql.Types.INTEGER:
return new Integer(srcObj.toString().trim()); return Integer.valueOf(srcObj.toString().trim());
case java.sql.Types.BIGINT: case java.sql.Types.BIGINT:
return new Long(srcObj.toString().trim()); return Long.valueOf(srcObj.toString().trim());
case java.sql.Types.NUMERIC: case java.sql.Types.NUMERIC:
case java.sql.Types.DECIMAL: case java.sql.Types.DECIMAL:
return new BigDecimal(srcObj.toString().trim()); return new BigDecimal(srcObj.toString().trim());
...@@ -4037,7 +4042,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern ...@@ -4037,7 +4042,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern
case java.sql.Types.CHAR: case java.sql.Types.CHAR:
case java.sql.Types.VARCHAR: case java.sql.Types.VARCHAR:
case java.sql.Types.LONGVARCHAR: case java.sql.Types.LONGVARCHAR:
return new String(srcObj.toString()); return srcObj.toString();
default: default:
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString()+ trgType); throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString()+ trgType);
} }
...@@ -4134,7 +4139,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern ...@@ -4134,7 +4139,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern
case java.sql.Types.CHAR: case java.sql.Types.CHAR:
case java.sql.Types.VARCHAR: case java.sql.Types.VARCHAR:
case java.sql.Types.LONGVARCHAR: case java.sql.Types.LONGVARCHAR:
return new String(srcObj.toString()); return srcObj.toString();
default: default:
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString()); throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
} }
...@@ -4181,12 +4186,12 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern ...@@ -4181,12 +4186,12 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern
try { try {
switch (trgType) { switch (trgType) {
case java.sql.Types.BIT: case java.sql.Types.BIT:
Integer i = new Integer(srcObj.toString().trim()); Integer i = Integer.valueOf(srcObj.toString().trim());
return i.equals(new Integer((int)0)) ? return i.equals(Integer.valueOf((int)0)) ?
new Boolean(false) : Boolean.valueOf(false) :
new Boolean(true); Boolean.valueOf(true);
case java.sql.Types.BOOLEAN: case java.sql.Types.BOOLEAN:
return new Boolean(srcObj.toString().trim()); return Boolean.valueOf(srcObj.toString().trim());
default: default:
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString()+ trgType); throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString()+ trgType);
} }
...@@ -4260,7 +4265,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern ...@@ -4260,7 +4265,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern
checkIndex(columnIndex); checkIndex(columnIndex);
// make sure the cursor is on a valid row // make sure the cursor is on a valid row
checkCursor(); checkCursor();
Object obj = convertBoolean(new Boolean(x), Object obj = convertBoolean(Boolean.valueOf(x),
java.sql.Types.BIT, java.sql.Types.BIT,
RowSetMD.getColumnType(columnIndex)); RowSetMD.getColumnType(columnIndex));
...@@ -4296,7 +4301,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern ...@@ -4296,7 +4301,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern
// make sure the cursor is on a valid row // make sure the cursor is on a valid row
checkCursor(); checkCursor();
Object obj = convertNumeric(new Byte(x), Object obj = convertNumeric(Byte.valueOf(x),
java.sql.Types.TINYINT, java.sql.Types.TINYINT,
RowSetMD.getColumnType(columnIndex)); RowSetMD.getColumnType(columnIndex));
...@@ -4332,7 +4337,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern ...@@ -4332,7 +4337,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern
// make sure the cursor is on a valid row // make sure the cursor is on a valid row
checkCursor(); checkCursor();
Object obj = convertNumeric(new Short(x), Object obj = convertNumeric(Short.valueOf(x),
java.sql.Types.SMALLINT, java.sql.Types.SMALLINT,
RowSetMD.getColumnType(columnIndex)); RowSetMD.getColumnType(columnIndex));
...@@ -4367,7 +4372,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern ...@@ -4367,7 +4372,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern
checkIndex(columnIndex); checkIndex(columnIndex);
// make sure the cursor is on a valid row // make sure the cursor is on a valid row
checkCursor(); checkCursor();
Object obj = convertNumeric(new Integer(x), Object obj = convertNumeric(Integer.valueOf(x),
java.sql.Types.INTEGER, java.sql.Types.INTEGER,
RowSetMD.getColumnType(columnIndex)); RowSetMD.getColumnType(columnIndex));
...@@ -4403,7 +4408,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern ...@@ -4403,7 +4408,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern
// make sure the cursor is on a valid row // make sure the cursor is on a valid row
checkCursor(); checkCursor();
Object obj = convertNumeric(new Long(x), Object obj = convertNumeric(Long.valueOf(x),
java.sql.Types.BIGINT, java.sql.Types.BIGINT,
RowSetMD.getColumnType(columnIndex)); RowSetMD.getColumnType(columnIndex));
...@@ -6429,7 +6434,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern ...@@ -6429,7 +6434,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern
if (tabName == null) if (tabName == null)
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.tablename").toString()); throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.tablename").toString());
else else
tableName = new String(tabName); tableName = tabName;
} }
/** /**
...@@ -6940,7 +6945,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern ...@@ -6940,7 +6945,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern
} }
for( int i = 0;i < columnIdxes.length ;i++) { for( int i = 0;i < columnIdxes.length ;i++) {
iMatchColumns.set(i,new Integer(-1)); iMatchColumns.set(i,Integer.valueOf(-1));
} }
} }
...@@ -7049,7 +7054,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern ...@@ -7049,7 +7054,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern
} }
} }
for(int i = 0 ;i < columnIdxes.length; i++) { for(int i = 0 ;i < columnIdxes.length; i++) {
iMatchColumns.add(i,new Integer(columnIdxes[i])); iMatchColumns.add(i,Integer.valueOf(columnIdxes[i]));
} }
} }
...@@ -7104,7 +7109,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern ...@@ -7104,7 +7109,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.matchcols1").toString()); throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.matchcols1").toString());
} else { } else {
// set iMatchColumn // set iMatchColumn
iMatchColumns.set(0, new Integer(columnIdx)); iMatchColumns.set(0, Integer.valueOf(columnIdx));
//strMatchColumn = null; //strMatchColumn = null;
} }
} }
...@@ -7126,7 +7131,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern ...@@ -7126,7 +7131,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern
*/ */
public void setMatchColumn(String columnName) throws SQLException { public void setMatchColumn(String columnName) throws SQLException {
// validate, if col is ok to be set // validate, if col is ok to be set
if(columnName.equals(null) || ((columnName = columnName.trim()) == "" )) { if(columnName == null || (columnName= columnName.trim()).equals("") ) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.matchcols2").toString()); throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.matchcols2").toString());
} else { } else {
// set strMatchColumn // set strMatchColumn
...@@ -7151,13 +7156,13 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern ...@@ -7151,13 +7156,13 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern
*/ */
public void unsetMatchColumn(int columnIdx) throws SQLException { public void unsetMatchColumn(int columnIdx) throws SQLException {
// check if we are unsetting the SAME column // check if we are unsetting the SAME column
if(! iMatchColumns.get(0).equals(new Integer(columnIdx) ) ) { if(! iMatchColumns.get(0).equals(Integer.valueOf(columnIdx) ) ) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.unsetmatch").toString()); throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.unsetmatch").toString());
} else if(strMatchColumns.get(0) != null) { } else if(strMatchColumns.get(0) != null) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.unsetmatch1").toString()); throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.unsetmatch1").toString());
} else { } else {
// that is, we are unsetting it. // that is, we are unsetting it.
iMatchColumns.set(0, new Integer(-1)); iMatchColumns.set(0, Integer.valueOf(-1));
} }
} }
......
...@@ -499,7 +499,7 @@ public class FilteredRowSetImpl extends WebRowSetImpl implements Serializable, C ...@@ -499,7 +499,7 @@ public class FilteredRowSetImpl extends WebRowSetImpl implements Serializable, C
if(onInsertRow) { if(onInsertRow) {
if(p != null) { if(p != null) {
bool = p.evaluate(new Integer(x),columnIndex); bool = p.evaluate(Integer.valueOf(x),columnIndex);
if(!bool) { if(!bool) {
throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString()); throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
...@@ -566,7 +566,7 @@ public class FilteredRowSetImpl extends WebRowSetImpl implements Serializable, C ...@@ -566,7 +566,7 @@ public class FilteredRowSetImpl extends WebRowSetImpl implements Serializable, C
if(onInsertRow) { if(onInsertRow) {
if(p != null) { if(p != null) {
bool = p.evaluate(new Boolean(x) , columnIndex); bool = p.evaluate(Boolean.valueOf(x) , columnIndex);
if(!bool) { if(!bool) {
throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString()); throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
...@@ -634,7 +634,7 @@ public class FilteredRowSetImpl extends WebRowSetImpl implements Serializable, C ...@@ -634,7 +634,7 @@ public class FilteredRowSetImpl extends WebRowSetImpl implements Serializable, C
if(onInsertRow) { if(onInsertRow) {
if(p != null) { if(p != null) {
bool = p.evaluate(new Byte(x),columnIndex); bool = p.evaluate(Byte.valueOf(x),columnIndex);
if(!bool) { if(!bool) {
throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString()); throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
...@@ -703,7 +703,7 @@ public class FilteredRowSetImpl extends WebRowSetImpl implements Serializable, C ...@@ -703,7 +703,7 @@ public class FilteredRowSetImpl extends WebRowSetImpl implements Serializable, C
if(onInsertRow) { if(onInsertRow) {
if(p != null) { if(p != null) {
bool = p.evaluate(new Short(x), columnIndex); bool = p.evaluate(Short.valueOf(x), columnIndex);
if(!bool) { if(!bool) {
throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString()); throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
...@@ -771,7 +771,7 @@ public class FilteredRowSetImpl extends WebRowSetImpl implements Serializable, C ...@@ -771,7 +771,7 @@ public class FilteredRowSetImpl extends WebRowSetImpl implements Serializable, C
if(onInsertRow) { if(onInsertRow) {
if(p != null) { if(p != null) {
bool = p.evaluate(new Long(x), columnIndex); bool = p.evaluate(Long.valueOf(x), columnIndex);
if(!bool) { if(!bool) {
throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString()); throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
...@@ -1106,12 +1106,12 @@ public class FilteredRowSetImpl extends WebRowSetImpl implements Serializable, C ...@@ -1106,12 +1106,12 @@ public class FilteredRowSetImpl extends WebRowSetImpl implements Serializable, C
public void updateBytes(int columnIndex , byte []x) throws SQLException { public void updateBytes(int columnIndex , byte []x) throws SQLException {
boolean bool; boolean bool;
String val = new String(); String val = "";
Byte [] obj_arr = new Byte[x.length]; Byte [] obj_arr = new Byte[x.length];
for(int i = 0; i < x.length; i++) { for(int i = 0; i < x.length; i++) {
obj_arr[i] = new Byte(x[i]); obj_arr[i] = Byte.valueOf(x[i]);
val = val.concat(obj_arr[i].toString()); val = val.concat(obj_arr[i].toString());
} }
......
...@@ -215,7 +215,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { ...@@ -215,7 +215,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable {
iMatchColumns = new Vector(10); iMatchColumns = new Vector(10);
for(int i = 0; i < 10 ; i++) { for(int i = 0; i < 10 ; i++) {
iMatchColumns.add(i,new Integer(-1)); iMatchColumns.add(i,Integer.valueOf(-1));
} }
strMatchColumns = new Vector(10); strMatchColumns = new Vector(10);
...@@ -288,7 +288,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { ...@@ -288,7 +288,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable {
iMatchColumns = new Vector(10); iMatchColumns = new Vector(10);
for(int i = 0; i < 10 ; i++) { for(int i = 0; i < 10 ; i++) {
iMatchColumns.add(i,new Integer(-1)); iMatchColumns.add(i,Integer.valueOf(-1));
} }
strMatchColumns = new Vector(10); strMatchColumns = new Vector(10);
...@@ -375,7 +375,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { ...@@ -375,7 +375,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable {
iMatchColumns = new Vector(10); iMatchColumns = new Vector(10);
for(int i = 0; i < 10 ; i++) { for(int i = 0; i < 10 ; i++) {
iMatchColumns.add(i,new Integer(-1)); iMatchColumns.add(i,Integer.valueOf(-1));
} }
strMatchColumns = new Vector(10); strMatchColumns = new Vector(10);
...@@ -465,7 +465,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { ...@@ -465,7 +465,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable {
iMatchColumns = new Vector(10); iMatchColumns = new Vector(10);
for(int i = 0; i < 10 ; i++) { for(int i = 0; i < 10 ; i++) {
iMatchColumns.add(i,new Integer(-1)); iMatchColumns.add(i,Integer.valueOf(-1));
} }
strMatchColumns = new Vector(10); strMatchColumns = new Vector(10);
...@@ -3754,7 +3754,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { ...@@ -3754,7 +3754,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable {
} }
for( int i = 0;i < columnIdxes.length ;i++) { for( int i = 0;i < columnIdxes.length ;i++) {
iMatchColumns.set(i,new Integer(-1)); iMatchColumns.set(i,Integer.valueOf(-1));
} }
} }
...@@ -3863,7 +3863,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { ...@@ -3863,7 +3863,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable {
} }
} }
for(int i = 0 ;i < columnIdxes.length; i++) { for(int i = 0 ;i < columnIdxes.length; i++) {
iMatchColumns.add(i,new Integer(columnIdxes[i])); iMatchColumns.add(i,Integer.valueOf(columnIdxes[i]));
} }
} }
...@@ -3918,7 +3918,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { ...@@ -3918,7 +3918,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable {
throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.matchcols1").toString()); throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.matchcols1").toString());
} else { } else {
// set iMatchColumn // set iMatchColumn
iMatchColumns.set(0, new Integer(columnIdx)); iMatchColumns.set(0, Integer.valueOf(columnIdx));
//strMatchColumn = null; //strMatchColumn = null;
} }
} }
...@@ -3940,7 +3940,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { ...@@ -3940,7 +3940,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable {
*/ */
public void setMatchColumn(String columnName) throws SQLException { public void setMatchColumn(String columnName) throws SQLException {
// validate, if col is ok to be set // validate, if col is ok to be set
if(columnName.equals(null) || ((columnName = columnName.trim()) == "" )) { if(columnName == null || (columnName= columnName.trim()).equals("")) {
throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.matchcols2").toString()); throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.matchcols2").toString());
} else { } else {
// set strMatchColumn // set strMatchColumn
...@@ -3965,13 +3965,13 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { ...@@ -3965,13 +3965,13 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable {
*/ */
public void unsetMatchColumn(int columnIdx) throws SQLException { public void unsetMatchColumn(int columnIdx) throws SQLException {
// check if we are unsetting the SAME column // check if we are unsetting the SAME column
if(! iMatchColumns.get(0).equals(new Integer(columnIdx) ) ) { if(! iMatchColumns.get(0).equals(Integer.valueOf(columnIdx) ) ) {
throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.unsetmatch").toString()); throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.unsetmatch").toString());
} else if(strMatchColumns.get(0) != null) { } else if(strMatchColumns.get(0) != null) {
throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.usecolname").toString()); throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.usecolname").toString());
} else { } else {
// that is, we are unsetting it. // that is, we are unsetting it.
iMatchColumns.set(0, new Integer(-1)); iMatchColumns.set(0, Integer.valueOf(-1));
} }
} }
......
...@@ -33,6 +33,8 @@ import java.math.*; ...@@ -33,6 +33,8 @@ import java.math.*;
import java.util.*; import java.util.*;
import javax.sql.rowset.*; import javax.sql.rowset.*;
import javax.sql.rowset.spi.SyncProvider;
import javax.sql.rowset.spi.SyncProviderException;
/** /**
* The standard implementation of the <code>JoinRowSet</code> * The standard implementation of the <code>JoinRowSet</code>
...@@ -550,7 +552,7 @@ public class JoinRowSetImpl extends WebRowSetImpl implements JoinRowSet { ...@@ -550,7 +552,7 @@ public class JoinRowSetImpl extends WebRowSetImpl implements JoinRowSet {
// This 'if' will be removed after all joins are implemented. // This 'if' will be removed after all joins are implemented.
throw new SQLException(resBundle.handleGetObject("joinrowsetimpl.notsupported").toString()); throw new SQLException(resBundle.handleGetObject("joinrowsetimpl.notsupported").toString());
} else { } else {
Integer Intgr = new Integer(JoinRowSet.INNER_JOIN); Integer Intgr = Integer.valueOf(JoinRowSet.INNER_JOIN);
vecJoinType.add(Intgr); vecJoinType.add(Intgr);
} }
} else { } else {
...@@ -874,8 +876,8 @@ public class JoinRowSetImpl extends WebRowSetImpl implements JoinRowSet { ...@@ -874,8 +876,8 @@ public class JoinRowSetImpl extends WebRowSetImpl implements JoinRowSet {
String strWhereClause = "Select "; String strWhereClause = "Select ";
String whereClause; String whereClause;
String tabName= null; String tabName= "";
String strTabName = null; String strTabName = "";
int sz,cols; int sz,cols;
int j; int j;
CachedRowSetImpl crs; CachedRowSetImpl crs;
...@@ -889,8 +891,6 @@ public class JoinRowSetImpl extends WebRowSetImpl implements JoinRowSet { ...@@ -889,8 +891,6 @@ public class JoinRowSetImpl extends WebRowSetImpl implements JoinRowSet {
// tableNameX.(rowsetX.getMatchColumnName()) == // tableNameX.(rowsetX.getMatchColumnName()) ==
// tableNameZ.(rowsetZ.getMatchColumnName())); // tableNameZ.(rowsetZ.getMatchColumnName()));
tabName = new String();
strTabName = new String();
sz = vecRowSetsInJOIN.size(); sz = vecRowSetsInJOIN.size();
for(int i=0;i<sz; i++) { for(int i=0;i<sz; i++) {
crs = (CachedRowSetImpl)vecRowSetsInJOIN.get(i); crs = (CachedRowSetImpl)vecRowSetsInJOIN.get(i);
...@@ -4311,6 +4311,27 @@ public class JoinRowSetImpl extends WebRowSetImpl implements JoinRowSet { ...@@ -4311,6 +4311,27 @@ public class JoinRowSetImpl extends WebRowSetImpl implements JoinRowSet {
return crsInternal.createCopySchema(); return crsInternal.createCopySchema();
} }
/**
* {@inheritDoc}
*/
public void setSyncProvider(String providerStr) throws SQLException {
crsInternal.setSyncProvider(providerStr);
}
/**
* {@inheritDoc}
*/
public void acceptChanges() throws SyncProviderException {
crsInternal.acceptChanges();
}
/**
* {@inheritDoc}
*/
public SyncProvider getSyncProvider() throws SQLException {
return crsInternal.getSyncProvider();
}
/** /**
* This method re populates the resBundle * This method re populates the resBundle
* during the deserialization process * during the deserialization process
......
...@@ -338,11 +338,11 @@ public class CachedRowSetWriter implements TransactionalWriter, Serializable { ...@@ -338,11 +338,11 @@ public class CachedRowSetWriter implements TransactionalWriter, Serializable {
if (crs.rowDeleted()) { if (crs.rowDeleted()) {
// The row has been deleted. // The row has been deleted.
if (conflict = (deleteOriginalRow(crs, this.crsResolve)) == true) { if (conflict = (deleteOriginalRow(crs, this.crsResolve)) == true) {
status.add(rows, new Integer(SyncResolver.DELETE_ROW_CONFLICT)); status.add(rows, Integer.valueOf(SyncResolver.DELETE_ROW_CONFLICT));
} else { } else {
// delete happened without any occurrence of conflicts // delete happened without any occurrence of conflicts
// so update status accordingly // so update status accordingly
status.add(rows, new Integer(SyncResolver.NO_ROW_CONFLICT)); status.add(rows, Integer.valueOf(SyncResolver.NO_ROW_CONFLICT));
} }
} else if (crs.rowInserted()) { } else if (crs.rowInserted()) {
...@@ -350,20 +350,20 @@ public class CachedRowSetWriter implements TransactionalWriter, Serializable { ...@@ -350,20 +350,20 @@ public class CachedRowSetWriter implements TransactionalWriter, Serializable {
pstmtIns = con.prepareStatement(insertCmd); pstmtIns = con.prepareStatement(insertCmd);
if ( (conflict = insertNewRow(crs, pstmtIns, this.crsResolve)) == true) { if ( (conflict = insertNewRow(crs, pstmtIns, this.crsResolve)) == true) {
status.add(rows, new Integer(SyncResolver.INSERT_ROW_CONFLICT)); status.add(rows, Integer.valueOf(SyncResolver.INSERT_ROW_CONFLICT));
} else { } else {
// insert happened without any occurrence of conflicts // insert happened without any occurrence of conflicts
// so update status accordingly // so update status accordingly
status.add(rows, new Integer(SyncResolver.NO_ROW_CONFLICT)); status.add(rows, Integer.valueOf(SyncResolver.NO_ROW_CONFLICT));
} }
} else if (crs.rowUpdated()) { } else if (crs.rowUpdated()) {
// The row has been updated. // The row has been updated.
if ( conflict = (updateOriginalRow(crs)) == true) { if ( conflict = (updateOriginalRow(crs)) == true) {
status.add(rows, new Integer(SyncResolver.UPDATE_ROW_CONFLICT)); status.add(rows, Integer.valueOf(SyncResolver.UPDATE_ROW_CONFLICT));
} else { } else {
// update happened without any occurrence of conflicts // update happened without any occurrence of conflicts
// so update status accordingly // so update status accordingly
status.add(rows, new Integer(SyncResolver.NO_ROW_CONFLICT)); status.add(rows, Integer.valueOf(SyncResolver.NO_ROW_CONFLICT));
} }
} else { } else {
...@@ -375,7 +375,7 @@ public class CachedRowSetWriter implements TransactionalWriter, Serializable { ...@@ -375,7 +375,7 @@ public class CachedRowSetWriter implements TransactionalWriter, Serializable {
* that is fine. * that is fine.
**/ **/
int icolCount = crs.getMetaData().getColumnCount(); int icolCount = crs.getMetaData().getColumnCount();
status.add(rows, new Integer(SyncResolver.NO_ROW_CONFLICT)); status.add(rows, Integer.valueOf(SyncResolver.NO_ROW_CONFLICT));
this.crsResolve.moveToInsertRow(); this.crsResolve.moveToInsertRow();
for(int cols=0;cols<iColCount;cols++) { for(int cols=0;cols<iColCount;cols++) {
...@@ -398,7 +398,7 @@ public class CachedRowSetWriter implements TransactionalWriter, Serializable { ...@@ -398,7 +398,7 @@ public class CachedRowSetWriter implements TransactionalWriter, Serializable {
boolean boolConf = false; boolean boolConf = false;
for (int j=1;j<status.size();j++){ for (int j=1;j<status.size();j++){
// ignore status for index = 0 which is set to null // ignore status for index = 0 which is set to null
if(! ((status.get(j)).equals(new Integer(SyncResolver.NO_ROW_CONFLICT)))) { if(! ((status.get(j)).equals(Integer.valueOf(SyncResolver.NO_ROW_CONFLICT)))) {
// there is at least one conflict which needs to be resolved // there is at least one conflict which needs to be resolved
boolConf = true; boolConf = true;
break; break;
...@@ -541,7 +541,7 @@ public class CachedRowSetWriter implements TransactionalWriter, Serializable { ...@@ -541,7 +541,7 @@ public class CachedRowSetWriter implements TransactionalWriter, Serializable {
// how many fields need to be updated // how many fields need to be updated
int colsNotChanged = 0; int colsNotChanged = 0;
Vector cols = new Vector(); Vector cols = new Vector();
String updateExec = new String(updateCmd); String updateExec = updateCmd;
Object orig; Object orig;
Object curr; Object curr;
Object rsval; Object rsval;
...@@ -652,7 +652,7 @@ public class CachedRowSetWriter implements TransactionalWriter, Serializable { ...@@ -652,7 +652,7 @@ public class CachedRowSetWriter implements TransactionalWriter, Serializable {
updateExec += ", "; updateExec += ", ";
} }
updateExec += crs.getMetaData().getColumnName(i); updateExec += crs.getMetaData().getColumnName(i);
cols.add(new Integer(i)); cols.add(Integer.valueOf(i));
updateExec += " = ? "; updateExec += " = ? ";
first = false; first = false;
...@@ -698,7 +698,7 @@ public class CachedRowSetWriter implements TransactionalWriter, Serializable { ...@@ -698,7 +698,7 @@ public class CachedRowSetWriter implements TransactionalWriter, Serializable {
updateExec += ", "; updateExec += ", ";
} }
updateExec += crs.getMetaData().getColumnName(i); updateExec += crs.getMetaData().getColumnName(i);
cols.add(new Integer(i)); cols.add(Integer.valueOf(i));
updateExec += " = ? "; updateExec += " = ? ";
flag = false; flag = false;
} else { } else {
...@@ -1184,7 +1184,7 @@ public class CachedRowSetWriter implements TransactionalWriter, Serializable { ...@@ -1184,7 +1184,7 @@ public class CachedRowSetWriter implements TransactionalWriter, Serializable {
// trim all the leading and trailing whitespaces, // trim all the leading and trailing whitespaces,
// white spaces can never be catalog, schema or a table name. // white spaces can never be catalog, schema or a table name.
String cmd = new String(); String cmd = "";
catalog = catalog.trim(); catalog = catalog.trim();
schema = schema.trim(); schema = schema.trim();
......
...@@ -248,7 +248,7 @@ public class WebRowSetXmlWriter implements XmlWriter, Serializable { ...@@ -248,7 +248,7 @@ public class WebRowSetXmlWriter implements XmlWriter, Serializable {
String strProvider = strProviderInstance.substring(0, (caller.getSyncProvider()).toString().indexOf("@")); String strProvider = strProviderInstance.substring(0, (caller.getSyncProvider()).toString().indexOf("@"));
propString("sync-provider-name", strProvider); propString("sync-provider-name", strProvider);
propString("sync-provider-vendor", "Sun Microsystems Inc."); propString("sync-provider-vendor", "Oracle Corporation");
propString("sync-provider-version", "1.0"); propString("sync-provider-version", "1.0");
propInteger("sync-provider-grade", caller.getSyncProvider().getProviderGrade()); propInteger("sync-provider-grade", caller.getSyncProvider().getProviderGrade());
propInteger("data-source-lock", caller.getSyncProvider().getDataSourceLock()); propInteger("data-source-lock", caller.getSyncProvider().getDataSourceLock());
...@@ -387,7 +387,7 @@ public class WebRowSetXmlWriter implements XmlWriter, Serializable { ...@@ -387,7 +387,7 @@ public class WebRowSetXmlWriter implements XmlWriter, Serializable {
if (caller.wasNull()) if (caller.wasNull())
writeNull(); writeNull();
else else
writeInteger(caller.getInt(idx)); writeInteger(i);
break; break;
case java.sql.Types.BIGINT: case java.sql.Types.BIGINT:
long l = caller.getLong(idx); long l = caller.getLong(idx);
...@@ -574,7 +574,7 @@ public class WebRowSetXmlWriter implements XmlWriter, Serializable { ...@@ -574,7 +574,7 @@ public class WebRowSetXmlWriter implements XmlWriter, Serializable {
} }
private void writeBoolean(boolean b) throws java.io.IOException { private void writeBoolean(boolean b) throws java.io.IOException {
writer.write(new Boolean(b).toString()); writer.write(Boolean.valueOf(b).toString());
} }
private void writeFloat(float f) throws java.io.IOException { private void writeFloat(float f) throws java.io.IOException {
...@@ -641,7 +641,7 @@ public class WebRowSetXmlWriter implements XmlWriter, Serializable { ...@@ -641,7 +641,7 @@ public class WebRowSetXmlWriter implements XmlWriter, Serializable {
return null; return null;
} }
char []charStr = s.toCharArray(); char []charStr = s.toCharArray();
String specialStr = new String(); String specialStr = "";
for(int i = 0; i < charStr.length; i++) { for(int i = 0; i < charStr.length; i++) {
if(charStr[i] == '&') { if(charStr[i] == '&') {
......
...@@ -441,9 +441,9 @@ public class XmlReaderContentHandler extends DefaultHandler { ...@@ -441,9 +441,9 @@ public class XmlReaderContentHandler extends DefaultHandler {
updates = new Vector(); updates = new Vector();
// start out with the empty string // start out with the empty string
columnValue = new String(""); columnValue = "";
propertyValue = new String(""); propertyValue = "";
metaDataValue = new String(""); metaDataValue = "";
nullVal = false; nullVal = false;
idx = 0; idx = 0;
...@@ -481,21 +481,21 @@ public class XmlReaderContentHandler extends DefaultHandler { ...@@ -481,21 +481,21 @@ public class XmlReaderContentHandler extends DefaultHandler {
items = properties.length; items = properties.length;
for (i=0;i<items;i++) { for (i=0;i<items;i++) {
propMap.put(properties[i], new Integer(i)); propMap.put(properties[i], Integer.valueOf(i));
} }
colDefMap = new HashMap(); colDefMap = new HashMap();
items = colDef.length; items = colDef.length;
for (i=0;i<items;i++) { for (i=0;i<items;i++) {
colDefMap.put(colDef[i], new Integer(i)); colDefMap.put(colDef[i], Integer.valueOf(i));
} }
dataMap = new HashMap(); dataMap = new HashMap();
items = data.length; items = data.length;
for (i=0;i<items;i++) { for (i=0;i<items;i++) {
dataMap.put(data[i], new Integer(i)); dataMap.put(data[i], Integer.valueOf(i));
} }
//Initialize connection map here //Initialize connection map here
...@@ -686,7 +686,7 @@ public class XmlReaderContentHandler extends DefaultHandler { ...@@ -686,7 +686,7 @@ public class XmlReaderContentHandler extends DefaultHandler {
} }
// propertyValue need to be reset to an empty string // propertyValue need to be reset to an empty string
propertyValue = new String(""); propertyValue = "";
setTag(-1); setTag(-1);
break; break;
case METADATA: case METADATA:
...@@ -710,7 +710,7 @@ public class XmlReaderContentHandler extends DefaultHandler { ...@@ -710,7 +710,7 @@ public class XmlReaderContentHandler extends DefaultHandler {
} }
// metaDataValue needs to be reset to an empty string // metaDataValue needs to be reset to an empty string
metaDataValue = new String(""); metaDataValue = "";
} }
setTag(-1); setTag(-1);
break; break;
...@@ -736,7 +736,7 @@ public class XmlReaderContentHandler extends DefaultHandler { ...@@ -736,7 +736,7 @@ public class XmlReaderContentHandler extends DefaultHandler {
insertValue(tempStr); insertValue(tempStr);
} }
// columnValue now need to be reset to the empty string // columnValue now need to be reset to the empty string
columnValue = new String(""); columnValue = "";
} catch (SQLException ex) { } catch (SQLException ex) {
throw new SAXException(MessageFormat.format(resBundle.handleGetObject("xmlrch.errinsert").toString(), ex.getMessage())); throw new SAXException(MessageFormat.format(resBundle.handleGetObject("xmlrch.errinsert").toString(), ex.getMessage()));
} }
...@@ -981,7 +981,7 @@ public class XmlReaderContentHandler extends DefaultHandler { ...@@ -981,7 +981,7 @@ public class XmlReaderContentHandler extends DefaultHandler {
private boolean getBooleanValue(String s) { private boolean getBooleanValue(String s) {
return new Boolean(s).booleanValue(); return Boolean.valueOf(s).booleanValue();
} }
private java.math.BigDecimal getBigDecimalValue(String s) { private java.math.BigDecimal getBigDecimalValue(String s) {
...@@ -1316,7 +1316,7 @@ public class XmlReaderContentHandler extends DefaultHandler { ...@@ -1316,7 +1316,7 @@ public class XmlReaderContentHandler extends DefaultHandler {
**/ **/
tempUpdate = tempUpdate.concat(new String(ch,start,len)); tempUpdate = tempUpdate.concat(new String(ch,start,len));
upd[0] = new Integer(idx); upd[0] = Integer.valueOf(idx);
upd[1] = tempUpdate; upd[1] = tempUpdate;
//updates.add(upd); //updates.add(upd);
......
...@@ -93,14 +93,14 @@ public final class RIOptimisticProvider extends SyncProvider implements Serializ ...@@ -93,14 +93,14 @@ public final class RIOptimisticProvider extends SyncProvider implements Serializ
private CachedRowSetWriter writer; private CachedRowSetWriter writer;
/** /**
* The unique provider indentifier. * The unique provider identifier.
*/ */
private String providerID = "com.sun.rowset.providers.RIOptimisticProvider"; private String providerID = "com.sun.rowset.providers.RIOptimisticProvider";
/** /**
* The vendor name of this SyncProvider implementation * The vendor name of this SyncProvider implementation
*/ */
private String vendorName = "Sun Microsystems Inc."; private String vendorName = "Oracle Corporation";
/** /**
* The version number of this SyncProvider implementation * The version number of this SyncProvider implementation
...@@ -236,8 +236,8 @@ public final class RIOptimisticProvider extends SyncProvider implements Serializ ...@@ -236,8 +236,8 @@ public final class RIOptimisticProvider extends SyncProvider implements Serializ
} }
/** /**
* Returns the vendor name of the Reference Implemntation Optimistic * Returns the vendor name of the Reference Implementation Optimistic
* Syncchronication Provider * Synchronization Provider
* *
* @return the <code>String</code> detailing the vendor name of this * @return the <code>String</code> detailing the vendor name of this
* SyncProvider * SyncProvider
......
/* /*
* Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -85,7 +85,7 @@ public final class RIXMLProvider extends SyncProvider { ...@@ -85,7 +85,7 @@ public final class RIXMLProvider extends SyncProvider {
/** /**
* The vendor name of this SyncProvider implementation. * The vendor name of this SyncProvider implementation.
*/ */
private String vendorName = "Sun Microsystems Inc."; private String vendorName = "Oracle Corporation";
/** /**
* The version number of this SyncProvider implementation. * The version number of this SyncProvider implementation.
......
...@@ -43,7 +43,8 @@ public class Installer { ...@@ -43,7 +43,8 @@ public class Installer {
"servicetag.dir.path"; "servicetag.dir.path";
private static String SVCTAG_ENABLE_REGISTRATION = private static String SVCTAG_ENABLE_REGISTRATION =
"servicetag.registration.enabled"; "servicetag.registration.enabled";
private final static String SUN_VENDOR = "Sun Microsystems"; private final static String ORACLE = "Oracle";
private final static String SUN = "Sun Microsystems";
private final static String REGISTRATION_XML = "registration.xml"; private final static String REGISTRATION_XML = "registration.xml";
private final static String SERVICE_TAG_FILE = "servicetag"; private final static String SERVICE_TAG_FILE = "servicetag";
private final static String REGISTRATION_HTML_NAME = "register"; private final static String REGISTRATION_HTML_NAME = "register";
...@@ -84,9 +85,10 @@ public class Installer { ...@@ -84,9 +85,10 @@ public class Installer {
// Implementation of ServiceTag.getJavaServiceTag(String) method // Implementation of ServiceTag.getJavaServiceTag(String) method
static ServiceTag getJavaServiceTag(String source) throws IOException { static ServiceTag getJavaServiceTag(String source) throws IOException {
if (!System.getProperty("java.vendor").startsWith(SUN_VENDOR)) { String vendor = System.getProperty("java.vendor", "");
if (!vendor.startsWith(SUN) && !vendor.startsWith(ORACLE)) {
// Products bundling this implementation may run on // Products bundling this implementation may run on
// Mac OS which is not a Sun JDK // Mac OS which is not a Sun/Oracle JDK
return null; return null;
} }
boolean cleanup = false; boolean cleanup = false;
...@@ -365,7 +367,7 @@ public class Installer { ...@@ -365,7 +367,7 @@ public class Installer {
props.getProperty("servicetag.parent.name"), props.getProperty("servicetag.parent.name"),
props.getProperty("servicetag.parent.urn"), props.getProperty("servicetag.parent.urn"),
getProductDefinedId(), getProductDefinedId(),
SUN_VENDOR, System.getProperty("java.vendor"),
System.getProperty("os.arch"), System.getProperty("os.arch"),
getZoneName(), getZoneName(),
svcTagSource); svcTagSource);
......
...@@ -80,12 +80,12 @@ import static com.sun.servicetag.RegistrationDocument.*; ...@@ -80,12 +80,12 @@ import static com.sun.servicetag.RegistrationDocument.*;
* <tr> * <tr>
* <td><tt>systemManufacturer</tt></td> * <td><tt>systemManufacturer</tt></td>
* <td>System manufacturer</td> * <td>System manufacturer</td>
* <td> e.g. Sun Microsystems</td> * <td> e.g. Oracle Corporation</td>
* </tr> * </tr>
* <tr> * <tr>
* <td><tt>cpuManufacturer</tt></td> * <td><tt>cpuManufacturer</tt></td>
* <td>CPU manufacturer</td> * <td>CPU manufacturer</td>
* <td> e.g. Sun Microsystems</td> * <td> e.g. Oracle Corporation</td>
* </tr> * </tr>
* <tr> * <tr>
* <td><tt>serialNumber</tt></td> * <td><tt>serialNumber</tt></td>
......
...@@ -90,7 +90,7 @@ public class Registry { ...@@ -90,7 +90,7 @@ public class Registry {
stclient = getWindowsStClientFile(); stclient = getWindowsStClientFile();
} else { } else {
if (isVerbose()) { if (isVerbose()) {
System.out.println("Running on non-Sun JDK"); System.out.println("Running on unsupported platform");
} }
} }
initialized = true; initialized = true;
......
...@@ -44,6 +44,7 @@ import java.io.*; ...@@ -44,6 +44,7 @@ import java.io.*;
* Solaris implementation of the SystemEnvironment class. * Solaris implementation of the SystemEnvironment class.
*/ */
class SolarisSystemEnvironment extends SystemEnvironment { class SolarisSystemEnvironment extends SystemEnvironment {
private static final String ORACLE = "Oracle Corporation";
SolarisSystemEnvironment() { SolarisSystemEnvironment() {
setHostId(getCommandOutput("/usr/bin/hostid")); setHostId(getCommandOutput("/usr/bin/hostid"));
setSystemModel(getCommandOutput("/usr/bin/uname", "-i")); setSystemModel(getCommandOutput("/usr/bin/uname", "-i"));
...@@ -59,7 +60,7 @@ class SolarisSystemEnvironment extends SystemEnvironment { ...@@ -59,7 +60,7 @@ class SolarisSystemEnvironment extends SystemEnvironment {
private String getSolarisCpuManufacturer() { private String getSolarisCpuManufacturer() {
// not fully accurate, this could be another manufacturer (fujitsu for example) // not fully accurate, this could be another manufacturer (fujitsu for example)
if ("sparc".equalsIgnoreCase(System.getProperty("os.arch"))) { if ("sparc".equalsIgnoreCase(System.getProperty("os.arch"))) {
return "Sun Microsystems, Inc"; return ORACLE;
} }
// if we're here, then we'll try smbios (type 4) // if we're here, then we'll try smbios (type 4)
...@@ -73,7 +74,7 @@ class SolarisSystemEnvironment extends SystemEnvironment { ...@@ -73,7 +74,7 @@ class SolarisSystemEnvironment extends SystemEnvironment {
private String getSolarisSystemManufacturer() { private String getSolarisSystemManufacturer() {
// not fully accurate, this could be another manufacturer (fujitsu for example) // not fully accurate, this could be another manufacturer (fujitsu for example)
if ("sparc".equalsIgnoreCase(System.getProperty("os.arch"))) { if ("sparc".equalsIgnoreCase(System.getProperty("os.arch"))) {
return "Sun Microsystems, Inc"; return ORACLE;
} }
// if we're here, then we'll try smbios (type 1) // if we're here, then we'll try smbios (type 1)
...@@ -117,7 +118,7 @@ class SolarisSystemEnvironment extends SystemEnvironment { ...@@ -117,7 +118,7 @@ class SolarisSystemEnvironment extends SystemEnvironment {
// ID SIZE TYPE // ID SIZE TYPE
// 1 150 SMB_TYPE_SYSTEM (system information) // 1 150 SMB_TYPE_SYSTEM (system information)
// //
// Manufacturer: Sun Microsystems // Manufacturer: Oracle Corporation
// Product: Sun Fire X4600 // Product: Sun Fire X4600
// Version: To Be Filled By O.E.M. // Version: To Be Filled By O.E.M.
// Serial Number: 00:14:4F:45:0C:2A // Serial Number: 00:14:4F:45:0C:2A
......
...@@ -937,14 +937,22 @@ public abstract class SampleModel ...@@ -937,14 +937,22 @@ public abstract class SampleModel
int iArray[], DataBuffer data) { int iArray[], DataBuffer data) {
int pixels[]; int pixels[];
int Offset=0; int Offset=0;
int x1 = x + w;
int y1 = y + h;
if (x < 0 || x1 < x || x1 > width ||
y < 0 || y1 < y || y1 > height)
{
throw new ArrayIndexOutOfBoundsException("Invalid coordinates.");
}
if (iArray != null) if (iArray != null)
pixels = iArray; pixels = iArray;
else else
pixels = new int[w * h]; pixels = new int[w * h];
for(int i=y; i<(h+y); i++) { for(int i=y; i<y1; i++) {
for (int j=x; j<(w+x); j++) { for (int j=x; j<x1; j++) {
pixels[Offset++] = getSample(j, i, b, data); pixels[Offset++] = getSample(j, i, b, data);
} }
} }
...@@ -978,14 +986,22 @@ public abstract class SampleModel ...@@ -978,14 +986,22 @@ public abstract class SampleModel
DataBuffer data) { DataBuffer data) {
float pixels[]; float pixels[];
int Offset=0; int Offset=0;
int x1 = x + w;
int y1 = y + h;
if (x < 0 || x1 < x || x1 > width ||
y < 0 || y1 < y || y1 > height)
{
throw new ArrayIndexOutOfBoundsException("Invalid coordinates");
}
if (fArray != null) if (fArray != null)
pixels = fArray; pixels = fArray;
else else
pixels = new float[w * h]; pixels = new float[w * h];
for (int i=y; i<(h+y); i++) { for (int i=y; i<y1; i++) {
for (int j=x; j<(w+x); j++) { for (int j=x; j<x1; j++) {
pixels[Offset++] = getSampleFloat(j, i, b, data); pixels[Offset++] = getSampleFloat(j, i, b, data);
} }
} }
...@@ -1019,14 +1035,22 @@ public abstract class SampleModel ...@@ -1019,14 +1035,22 @@ public abstract class SampleModel
DataBuffer data) { DataBuffer data) {
double pixels[]; double pixels[];
int Offset=0; int Offset=0;
int x1 = x + w;
int y1 = y + h;
if (x < 0 || x1 < x || x1 > width ||
y < 0 || y1 < y || y1 > height)
{
throw new ArrayIndexOutOfBoundsException("Invalid coordinates");
}
if (dArray != null) if (dArray != null)
pixels = dArray; pixels = dArray;
else else
pixels = new double[w * h]; pixels = new double[w * h];
for (int i=y; i<(y+h); i++) { for (int i=y; i<y1; i++) {
for (int j=x; j<(x+w); j++) { for (int j=x; j<x1; j++) {
pixels[Offset++] = getSampleDouble(j, i, b, data); pixels[Offset++] = getSampleDouble(j, i, b, data);
} }
} }
......
...@@ -176,8 +176,9 @@ public class EventSetDescriptor extends FeatureDescriptor { ...@@ -176,8 +176,9 @@ public class EventSetDescriptor extends FeatureDescriptor {
setRemoveListenerMethod(getMethod(sourceClass, removeListenerMethodName, 1)); setRemoveListenerMethod(getMethod(sourceClass, removeListenerMethodName, 1));
// Be more forgiving of not finding the getListener method. // Be more forgiving of not finding the getListener method.
if (getListenerMethodName != null) { Method method = Introspector.findMethod(sourceClass, getListenerMethodName, 0);
setGetListenerMethod(Introspector.findInstanceMethod(sourceClass, getListenerMethodName)); if (method != null) {
setGetListenerMethod(method);
} }
} }
......
...@@ -189,11 +189,13 @@ public class IndexedPropertyDescriptor extends PropertyDescriptor { ...@@ -189,11 +189,13 @@ public class IndexedPropertyDescriptor extends PropertyDescriptor {
indexedReadMethodName = Introspector.GET_PREFIX + getBaseName(); indexedReadMethodName = Introspector.GET_PREFIX + getBaseName();
} }
} }
indexedReadMethod = Introspector.findInstanceMethod(cls, indexedReadMethodName, int.class);
Class[] args = { int.class };
indexedReadMethod = Introspector.findMethod(cls, indexedReadMethodName, 1, args);
if (indexedReadMethod == null) { if (indexedReadMethod == null) {
// no "is" method, so look for a "get" method. // no "is" method, so look for a "get" method.
indexedReadMethodName = Introspector.GET_PREFIX + getBaseName(); indexedReadMethodName = Introspector.GET_PREFIX + getBaseName();
indexedReadMethod = Introspector.findInstanceMethod(cls, indexedReadMethodName, int.class); indexedReadMethod = Introspector.findMethod(cls, indexedReadMethodName, 1, args);
} }
setIndexedReadMethod0(indexedReadMethod); setIndexedReadMethod0(indexedReadMethod);
} }
...@@ -265,7 +267,9 @@ public class IndexedPropertyDescriptor extends PropertyDescriptor { ...@@ -265,7 +267,9 @@ public class IndexedPropertyDescriptor extends PropertyDescriptor {
if (indexedWriteMethodName == null) { if (indexedWriteMethodName == null) {
indexedWriteMethodName = Introspector.SET_PREFIX + getBaseName(); indexedWriteMethodName = Introspector.SET_PREFIX + getBaseName();
} }
indexedWriteMethod = Introspector.findInstanceMethod(cls, indexedWriteMethodName, int.class, type);
Class[] args = (type == null) ? null : new Class[] { int.class, type };
indexedWriteMethod = Introspector.findMethod(cls, indexedWriteMethodName, 2, args);
if (indexedWriteMethod != null) { if (indexedWriteMethod != null) {
if (!indexedWriteMethod.getReturnType().equals(void.class)) { if (!indexedWriteMethod.getReturnType().equals(void.class)) {
indexedWriteMethod = null; indexedWriteMethod = null;
......
...@@ -28,7 +28,6 @@ package java.beans; ...@@ -28,7 +28,6 @@ package java.beans;
import com.sun.beans.WeakCache; import com.sun.beans.WeakCache;
import com.sun.beans.finder.BeanInfoFinder; import com.sun.beans.finder.BeanInfoFinder;
import com.sun.beans.finder.ClassFinder; import com.sun.beans.finder.ClassFinder;
import com.sun.beans.finder.MethodFinder;
import java.lang.ref.Reference; import java.lang.ref.Reference;
import java.lang.ref.SoftReference; import java.lang.ref.SoftReference;
...@@ -843,8 +842,8 @@ public class Introspector { ...@@ -843,8 +842,8 @@ public class Introspector {
Method read = result.getReadMethod(); Method read = result.getReadMethod();
if (read == null && write != null) { if (read == null && write != null) {
read = findInstanceMethod(result.getClass0(), read = findMethod(result.getClass0(),
GET_PREFIX + NameGenerator.capitalize(result.getName())); GET_PREFIX + NameGenerator.capitalize(result.getName()), 0);
if (read != null) { if (read != null) {
try { try {
result.setReadMethod(read); result.setReadMethod(read);
...@@ -854,9 +853,9 @@ public class Introspector { ...@@ -854,9 +853,9 @@ public class Introspector {
} }
} }
if (write == null && read != null) { if (write == null && read != null) {
write = findInstanceMethod(result.getClass0(), write = findMethod(result.getClass0(),
SET_PREFIX + NameGenerator.capitalize(result.getName()), SET_PREFIX + NameGenerator.capitalize(result.getName()), 1,
FeatureDescriptor.getReturnType(result.getClass0(), read)); new Class[] { FeatureDescriptor.getReturnType(result.getClass0(), read) });
if (write != null) { if (write != null) {
try { try {
result.setWriteMethod(write); result.setWriteMethod(write);
...@@ -1280,27 +1279,90 @@ public class Introspector { ...@@ -1280,27 +1279,90 @@ public class Introspector {
// Package private support methods. // Package private support methods.
//====================================================================== //======================================================================
static Method findMethod(Class<?> type, String name, int args) { /**
for (Method method : type.getMethods()) { * Internal support for finding a target methodName with a given
if (method.getName().equals(name) && (args == method.getParameterTypes().length)) { * parameter list on a given class.
try { */
return MethodFinder.findAccessibleMethod(method); private static Method internalFindMethod(Class start, String methodName,
int argCount, Class args[]) {
// For overriden methods we need to find the most derived version.
// So we start with the given class and walk up the superclass chain.
Method method = null;
for (Class cl = start; cl != null; cl = cl.getSuperclass()) {
Method methods[] = getPublicDeclaredMethods(cl);
for (int i = 0; i < methods.length; i++) {
method = methods[i];
if (method == null) {
continue;
} }
catch (NoSuchMethodException exception) {
// continue search for a method with the specified count of parameters // make sure method signature matches.
Class params[] = FeatureDescriptor.getParameterTypes(start, method);
if (method.getName().equals(methodName) &&
params.length == argCount) {
if (args != null) {
boolean different = false;
if (argCount > 0) {
for (int j = 0; j < argCount; j++) {
if (params[j] != args[j]) {
different = true;
continue;
}
}
if (different) {
continue;
}
}
}
return method;
} }
} }
} }
return null; method = null;
// Now check any inherited interfaces. This is necessary both when
// the argument class is itself an interface, and when the argument
// class is an abstract class.
Class ifcs[] = start.getInterfaces();
for (int i = 0 ; i < ifcs.length; i++) {
// Note: The original implementation had both methods calling
// the 3 arg method. This is preserved but perhaps it should
// pass the args array instead of null.
method = internalFindMethod(ifcs[i], methodName, argCount, null);
if (method != null) {
break;
}
}
return method;
} }
static Method findInstanceMethod(Class<?> type, String name, Class<?>... args) { /**
try { * Find a target methodName on a given class.
return MethodFinder.findInstanceMethod(type, name, args); */
} static Method findMethod(Class cls, String methodName, int argCount) {
catch (NoSuchMethodException exception) { return findMethod(cls, methodName, argCount, null);
}
/**
* Find a target methodName with specific parameter list on a given class.
* <p>
* Used in the contructors of the EventSetDescriptor,
* PropertyDescriptor and the IndexedPropertyDescriptor.
* <p>
* @param cls The Class object on which to retrieve the method.
* @param methodName Name of the method.
* @param argCount Number of arguments for the desired method.
* @param args Array of argument types for the method.
* @return the method or null if not found
*/
static Method findMethod(Class cls, String methodName, int argCount,
Class args[]) {
if (methodName == null) {
return null; return null;
} }
return internalFindMethod(cls, methodName, argCount, args);
} }
/** /**
......
...@@ -90,13 +90,13 @@ public class MethodDescriptor extends FeatureDescriptor { ...@@ -90,13 +90,13 @@ public class MethodDescriptor extends FeatureDescriptor {
// Find methods for up to 2 params. We are guessing here. // Find methods for up to 2 params. We are guessing here.
// This block should never execute unless the classloader // This block should never execute unless the classloader
// that loaded the argument classes disappears. // that loaded the argument classes disappears.
method = Introspector.findMethod(cls, name, i); method = Introspector.findMethod(cls, name, i, null);
if (method != null) { if (method != null) {
break; break;
} }
} }
} else { } else {
method = Statement.getMethod(cls, name, params); method = Introspector.findMethod(cls, name, params.length, params);
} }
setMethod(method); setMethod(method);
} }
......
...@@ -112,7 +112,8 @@ public class PropertyDescriptor extends FeatureDescriptor { ...@@ -112,7 +112,8 @@ public class PropertyDescriptor extends FeatureDescriptor {
// If this class or one of its base classes allow PropertyChangeListener, // If this class or one of its base classes allow PropertyChangeListener,
// then we assume that any properties we discover are "bound". // then we assume that any properties we discover are "bound".
// See Introspector.getTargetPropertyInfo() method. // See Introspector.getTargetPropertyInfo() method.
this.bound = null != Introspector.findInstanceMethod(beanClass, "addPropertyChangeListener", PropertyChangeListener.class); Class[] args = { PropertyChangeListener.class };
this.bound = null != Introspector.findMethod(beanClass, "addPropertyChangeListener", args.length, args);
} }
/** /**
...@@ -223,10 +224,10 @@ public class PropertyDescriptor extends FeatureDescriptor { ...@@ -223,10 +224,10 @@ public class PropertyDescriptor extends FeatureDescriptor {
// property type is. For booleans, there can be "is" and "get" // property type is. For booleans, there can be "is" and "get"
// methods. If an "is" method exists, this is the official // methods. If an "is" method exists, this is the official
// reader method so look for this one first. // reader method so look for this one first.
readMethod = Introspector.findInstanceMethod(cls, readMethodName); readMethod = Introspector.findMethod(cls, readMethodName, 0);
if (readMethod == null) { if (readMethod == null) {
readMethodName = Introspector.GET_PREFIX + getBaseName(); readMethodName = Introspector.GET_PREFIX + getBaseName();
readMethod = Introspector.findInstanceMethod(cls, readMethodName); readMethod = Introspector.findMethod(cls, readMethodName, 0);
} }
try { try {
setReadMethod(readMethod); setReadMethod(readMethod);
...@@ -291,7 +292,8 @@ public class PropertyDescriptor extends FeatureDescriptor { ...@@ -291,7 +292,8 @@ public class PropertyDescriptor extends FeatureDescriptor {
writeMethodName = Introspector.SET_PREFIX + getBaseName(); writeMethodName = Introspector.SET_PREFIX + getBaseName();
} }
writeMethod = Introspector.findInstanceMethod(cls, writeMethodName, type); Class[] args = (type == null) ? null : new Class[] { type };
writeMethod = Introspector.findMethod(cls, writeMethodName, 1, args);
if (writeMethod != null) { if (writeMethod != null) {
if (!writeMethod.getReturnType().equals(void.class)) { if (!writeMethod.getReturnType().equals(void.class)) {
writeMethod = null; writeMethod = null;
......
...@@ -1101,22 +1101,12 @@ public final class System { ...@@ -1101,22 +1101,12 @@ public final class System {
lineSeparator = props.getProperty("line.separator"); lineSeparator = props.getProperty("line.separator");
sun.misc.Version.init(); sun.misc.Version.init();
// Workaround until DownloadManager initialization is revisited.
// Make JavaLangAccess available early enough for internal
// Shutdown hooks to be registered
setJavaLangAccess();
// Gets and removes system properties that configure the Integer // Gets and removes system properties that configure the Integer
// cache used to support the object identity semantics of autoboxing. // cache used to support the object identity semantics of autoboxing.
// At this time, the size of the cache may be controlled by the // At this time, the size of the cache may be controlled by the
// vm option -XX:AutoBoxCacheMax=<size>. // vm option -XX:AutoBoxCacheMax=<size>.
Integer.getAndRemoveCacheProperties(); Integer.getAndRemoveCacheProperties();
// Load the zip library now in order to keep java.util.zip.ZipFile
// from trying to use itself to load this library later.
loadLibrary("zip");
FileInputStream fdIn = new FileInputStream(FileDescriptor.in); FileInputStream fdIn = new FileInputStream(FileDescriptor.in);
FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out); FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);
FileOutputStream fdErr = new FileOutputStream(FileDescriptor.err); FileOutputStream fdErr = new FileOutputStream(FileDescriptor.err);
...@@ -1124,6 +1114,10 @@ public final class System { ...@@ -1124,6 +1114,10 @@ public final class System {
setOut0(new PrintStream(new BufferedOutputStream(fdOut, 128), true)); setOut0(new PrintStream(new BufferedOutputStream(fdOut, 128), true));
setErr0(new PrintStream(new BufferedOutputStream(fdErr, 128), true)); setErr0(new PrintStream(new BufferedOutputStream(fdErr, 128), true));
// Load the zip library now in order to keep java.util.zip.ZipFile
// from trying to use itself to load this library later.
loadLibrary("zip");
// Setup Java signal handlers for HUP, TERM, and INT (where available). // Setup Java signal handlers for HUP, TERM, and INT (where available).
Terminator.setup(); Terminator.setup();
...@@ -1153,6 +1147,9 @@ public final class System { ...@@ -1153,6 +1147,9 @@ public final class System {
// way as other threads; we must do it ourselves here. // way as other threads; we must do it ourselves here.
Thread current = Thread.currentThread(); Thread current = Thread.currentThread();
current.getThreadGroup().add(current); current.getThreadGroup().add(current);
// register shared secrets
setJavaLangAccess();
} }
private static void setJavaLangAccess() { private static void setJavaLangAccess() {
......
...@@ -677,19 +677,20 @@ class InetAddress implements java.io.Serializable { ...@@ -677,19 +677,20 @@ class InetAddress implements java.io.Serializable {
static InetAddressImpl impl; static InetAddressImpl impl;
private static HashMap lookupTable = new HashMap(); private static HashMap<String, InetAddress[]> lookupTable
= new HashMap<String, InetAddress[]>();
/** /**
* Represents a cache entry * Represents a cache entry
*/ */
static final class CacheEntry { static final class CacheEntry {
CacheEntry(Object address, long expiration) { CacheEntry(InetAddress[] addresses, long expiration) {
this.address = address; this.addresses = addresses;
this.expiration = expiration; this.expiration = expiration;
} }
Object address; InetAddress[] addresses;
long expiration; long expiration;
} }
...@@ -698,7 +699,7 @@ class InetAddress implements java.io.Serializable { ...@@ -698,7 +699,7 @@ class InetAddress implements java.io.Serializable {
* at creation time. * at creation time.
*/ */
static final class Cache { static final class Cache {
private LinkedHashMap cache; private LinkedHashMap<String, CacheEntry> cache;
private Type type; private Type type;
enum Type {Positive, Negative}; enum Type {Positive, Negative};
...@@ -708,7 +709,7 @@ class InetAddress implements java.io.Serializable { ...@@ -708,7 +709,7 @@ class InetAddress implements java.io.Serializable {
*/ */
public Cache(Type type) { public Cache(Type type) {
this.type = type; this.type = type;
cache = new LinkedHashMap(); cache = new LinkedHashMap<String, CacheEntry>();
} }
private int getPolicy() { private int getPolicy() {
...@@ -724,7 +725,7 @@ class InetAddress implements java.io.Serializable { ...@@ -724,7 +725,7 @@ class InetAddress implements java.io.Serializable {
* entry then for this host then the entry will be * entry then for this host then the entry will be
* replaced. * replaced.
*/ */
public Cache put(String host, Object address) { public Cache put(String host, InetAddress[] addresses) {
int policy = getPolicy(); int policy = getPolicy();
if (policy == InetAddressCachePolicy.NEVER) { if (policy == InetAddressCachePolicy.NEVER) {
return this; return this;
...@@ -736,12 +737,10 @@ class InetAddress implements java.io.Serializable { ...@@ -736,12 +737,10 @@ class InetAddress implements java.io.Serializable {
// As we iterate in insertion order we can // As we iterate in insertion order we can
// terminate when a non-expired entry is found. // terminate when a non-expired entry is found.
LinkedList expired = new LinkedList(); LinkedList<String> expired = new LinkedList<String>();
Iterator i = cache.keySet().iterator();
long now = System.currentTimeMillis(); long now = System.currentTimeMillis();
while (i.hasNext()) { for (String key : cache.keySet()) {
String key = (String)i.next(); CacheEntry entry = cache.get(key);
CacheEntry entry = (CacheEntry)cache.get(key);
if (entry.expiration >= 0 && entry.expiration < now) { if (entry.expiration >= 0 && entry.expiration < now) {
expired.add(key); expired.add(key);
...@@ -750,9 +749,8 @@ class InetAddress implements java.io.Serializable { ...@@ -750,9 +749,8 @@ class InetAddress implements java.io.Serializable {
} }
} }
i = expired.iterator(); for (String key : expired) {
while (i.hasNext()) { cache.remove(key);
cache.remove(i.next());
} }
} }
...@@ -766,7 +764,7 @@ class InetAddress implements java.io.Serializable { ...@@ -766,7 +764,7 @@ class InetAddress implements java.io.Serializable {
} else { } else {
expiration = System.currentTimeMillis() + (policy * 1000); expiration = System.currentTimeMillis() + (policy * 1000);
} }
CacheEntry entry = new CacheEntry(address, expiration); CacheEntry entry = new CacheEntry(addresses, expiration);
cache.put(host, entry); cache.put(host, entry);
return this; return this;
} }
...@@ -780,7 +778,7 @@ class InetAddress implements java.io.Serializable { ...@@ -780,7 +778,7 @@ class InetAddress implements java.io.Serializable {
if (policy == InetAddressCachePolicy.NEVER) { if (policy == InetAddressCachePolicy.NEVER) {
return null; return null;
} }
CacheEntry entry = (CacheEntry)cache.get(host); CacheEntry entry = cache.get(host);
// check if entry has expired // check if entry has expired
if (entry != null && policy != InetAddressCachePolicy.FOREVER) { if (entry != null && policy != InetAddressCachePolicy.FOREVER) {
...@@ -814,42 +812,41 @@ class InetAddress implements java.io.Serializable { ...@@ -814,42 +812,41 @@ class InetAddress implements java.io.Serializable {
} }
/* /*
* Cache the given hostname and address. * Cache the given hostname and addresses.
*/ */
private static void cacheAddress(String hostname, Object address, private static void cacheAddresses(String hostname,
boolean success) { InetAddress[] addresses,
boolean success) {
hostname = hostname.toLowerCase(); hostname = hostname.toLowerCase();
synchronized (addressCache) { synchronized (addressCache) {
cacheInitIfNeeded(); cacheInitIfNeeded();
if (success) { if (success) {
addressCache.put(hostname, address); addressCache.put(hostname, addresses);
} else { } else {
negativeCache.put(hostname, address); negativeCache.put(hostname, addresses);
} }
} }
} }
/* /*
* Lookup hostname in cache (positive & negative cache). If * Lookup hostname in cache (positive & negative cache). If
* found return address, null if not found. * found return addresses, null if not found.
*/ */
private static Object getCachedAddress(String hostname) { private static InetAddress[] getCachedAddresses(String hostname) {
hostname = hostname.toLowerCase(); hostname = hostname.toLowerCase();
// search both positive & negative caches // search both positive & negative caches
synchronized (addressCache) { synchronized (addressCache) {
CacheEntry entry;
cacheInitIfNeeded(); cacheInitIfNeeded();
entry = addressCache.get(hostname); CacheEntry entry = addressCache.get(hostname);
if (entry == null) { if (entry == null) {
entry = negativeCache.get(hostname); entry = negativeCache.get(hostname);
} }
if (entry != null) { if (entry != null) {
return entry.address; return entry.addresses;
} }
} }
...@@ -911,7 +908,7 @@ class InetAddress implements java.io.Serializable { ...@@ -911,7 +908,7 @@ class InetAddress implements java.io.Serializable {
static { static {
// create the impl // create the impl
impl = (new InetAddressImplFactory()).create(); impl = InetAddressImplFactory.create();
// get name service if provided and requested // get name service if provided and requested
String provider = null;; String provider = null;;
...@@ -931,7 +928,7 @@ class InetAddress implements java.io.Serializable { ...@@ -931,7 +928,7 @@ class InetAddress implements java.io.Serializable {
} }
// if not designate any name services provider, // if not designate any name services provider,
// creat a default one // create a default one
if (nameServices.size() == 0) { if (nameServices.size() == 0) {
NameService ns = createNSProvider("default"); NameService ns = createNSProvider("default");
nameServices.add(ns); nameServices.add(ns);
...@@ -939,7 +936,7 @@ class InetAddress implements java.io.Serializable { ...@@ -939,7 +936,7 @@ class InetAddress implements java.io.Serializable {
} }
/** /**
* Create an InetAddress based on the provided host name and IP address * Creates an InetAddress based on the provided host name and IP address.
* No name service is checked for the validity of the address. * No name service is checked for the validity of the address.
* *
* <p> The host name can either be a machine name, such as * <p> The host name can either be a machine name, such as
...@@ -1067,13 +1064,13 @@ class InetAddress implements java.io.Serializable { ...@@ -1067,13 +1064,13 @@ class InetAddress implements java.io.Serializable {
boolean ipv6Expected = false; boolean ipv6Expected = false;
if (host.charAt(0) == '[') { if (host.charAt(0) == '[') {
// This is supposed to be an IPv6 litteral // This is supposed to be an IPv6 literal
if (host.length() > 2 && host.charAt(host.length()-1) == ']') { if (host.length() > 2 && host.charAt(host.length()-1) == ']') {
host = host.substring(1, host.length() -1); host = host.substring(1, host.length() -1);
ipv6Expected = true; ipv6Expected = true;
} else { } else {
// This was supposed to be a IPv6 address, but it's not! // This was supposed to be a IPv6 address, but it's not!
throw new UnknownHostException(host); throw new UnknownHostException(host + ": invalid IPv6 address");
} }
} }
...@@ -1180,8 +1177,6 @@ class InetAddress implements java.io.Serializable { ...@@ -1180,8 +1177,6 @@ class InetAddress implements java.io.Serializable {
throws UnknownHostException { throws UnknownHostException {
/* If it gets here it is presumed to be a hostname */ /* If it gets here it is presumed to be a hostname */
/* Cache.get can return: null, unknownAddress, or InetAddress[] */ /* Cache.get can return: null, unknownAddress, or InetAddress[] */
Object obj = null;
Object objcopy = null;
/* make sure the connection to the host is allowed, before we /* make sure the connection to the host is allowed, before we
* give out a hostname * give out a hostname
...@@ -1193,26 +1188,23 @@ class InetAddress implements java.io.Serializable { ...@@ -1193,26 +1188,23 @@ class InetAddress implements java.io.Serializable {
} }
} }
obj = getCachedAddress(host); InetAddress[] addresses = getCachedAddresses(host);
/* If no entry in cache, then do the host lookup */ /* If no entry in cache, then do the host lookup */
if (obj == null) { if (addresses == null) {
obj = getAddressFromNameService(host); addresses = getAddressesFromNameService(host);
} }
if (obj == unknown_array) if (addresses == unknown_array)
throw new UnknownHostException(host); throw new UnknownHostException(host);
/* Make a copy of the InetAddress array */ return addresses.clone();
objcopy = ((InetAddress [])obj).clone();
return (InetAddress [])objcopy;
} }
private static Object getAddressFromNameService(String host) private static InetAddress[] getAddressesFromNameService(String host)
throws UnknownHostException throws UnknownHostException
{ {
Object obj = null; InetAddress[] addresses = null;
boolean success = false; boolean success = false;
UnknownHostException ex = null; UnknownHostException ex = null;
...@@ -1226,16 +1218,16 @@ class InetAddress implements java.io.Serializable { ...@@ -1226,16 +1218,16 @@ class InetAddress implements java.io.Serializable {
// would be blocked until the host is removed // would be blocked until the host is removed
// from the lookupTable. Then this thread // from the lookupTable. Then this thread
// should try to look up the addressCache. // should try to look up the addressCache.
// i) if it found the address in the // i) if it found the addresses in the
// addressCache, checkLookupTable() would // addressCache, checkLookupTable() would
// return the address. // return the addresses.
// ii) if it didn't find the address in the // ii) if it didn't find the addresses in the
// addressCache for any reason, // addressCache for any reason,
// it should add the host in the // it should add the host in the
// lookupTable and return null so the // lookupTable and return null so the
// following code would do a lookup itself. // following code would do a lookup itself.
if ((obj = checkLookupTable(host)) == null) { if ((addresses = checkLookupTable(host)) == null) {
// This is the first thread which looks up the address // This is the first thread which looks up the addresses
// this host or the cache entry for this host has been // this host or the cache entry for this host has been
// expired so this thread should do the lookup. // expired so this thread should do the lookup.
for (NameService nameService : nameServices) { for (NameService nameService : nameServices) {
...@@ -1246,26 +1238,26 @@ class InetAddress implements java.io.Serializable { ...@@ -1246,26 +1238,26 @@ class InetAddress implements java.io.Serializable {
* allocating space when the lookup fails. * allocating space when the lookup fails.
*/ */
obj = nameService.lookupAllHostAddr(host); addresses = nameService.lookupAllHostAddr(host);
success = true; success = true;
break; break;
} catch (UnknownHostException uhe) { } catch (UnknownHostException uhe) {
if (host.equalsIgnoreCase("localhost")) { if (host.equalsIgnoreCase("localhost")) {
InetAddress[] local = new InetAddress[] { impl.loopbackAddress() }; InetAddress[] local = new InetAddress[] { impl.loopbackAddress() };
obj = local; addresses = local;
success = true; success = true;
break; break;
} }
else { else {
obj = unknown_array; addresses = unknown_array;
success = false; success = false;
ex = uhe; ex = uhe;
} }
} }
} }
// Cache the address. // Cache the addresses.
cacheAddress(host, obj, success); cacheAddresses(host, addresses, success);
// Delete the host from the lookupTable, and // Delete the host from the lookupTable, and
// notify all threads waiting for the monitor // notify all threads waiting for the monitor
// for lookupTable. // for lookupTable.
...@@ -1274,13 +1266,13 @@ class InetAddress implements java.io.Serializable { ...@@ -1274,13 +1266,13 @@ class InetAddress implements java.io.Serializable {
throw ex; throw ex;
} }
return obj; return addresses;
} }
private static Object checkLookupTable(String host) { private static InetAddress[] checkLookupTable(String host) {
// make sure obj is null. // make sure addresses is null.
Object obj = null; InetAddress[] addresses = null;
synchronized (lookupTable) { synchronized (lookupTable) {
// If the host isn't in the lookupTable, add it in the // If the host isn't in the lookupTable, add it in the
...@@ -1288,11 +1280,11 @@ class InetAddress implements java.io.Serializable { ...@@ -1288,11 +1280,11 @@ class InetAddress implements java.io.Serializable {
// the lookup. // the lookup.
if (lookupTable.containsKey(host) == false) { if (lookupTable.containsKey(host) == false) {
lookupTable.put(host, null); lookupTable.put(host, null);
return obj; return addresses;
} }
// If the host is in the lookupTable, it means that another // If the host is in the lookupTable, it means that another
// thread is trying to look up the address of this host. // thread is trying to look up the addresses of this host.
// This thread should wait. // This thread should wait.
while (lookupTable.containsKey(host)) { while (lookupTable.containsKey(host)) {
try { try {
...@@ -1302,18 +1294,18 @@ class InetAddress implements java.io.Serializable { ...@@ -1302,18 +1294,18 @@ class InetAddress implements java.io.Serializable {
} }
} }
// The other thread has finished looking up the address of // The other thread has finished looking up the addresses of
// the host. This thread should retry to get the address // the host. This thread should retry to get the addresses
// from the addressCache. If it doesn't get the address from // from the addressCache. If it doesn't get the addresses from
// the cache, it will try to look up the address itself. // the cache, it will try to look up the addresses itself.
obj = getCachedAddress(host); addresses = getCachedAddresses(host);
if (obj == null) { if (addresses == null) {
synchronized (lookupTable) { synchronized (lookupTable) {
lookupTable.put(host, null); lookupTable.put(host, null);
} }
} }
return obj; return addresses;
} }
private static void updateLookupTable(String host) { private static void updateLookupTable(String host) {
...@@ -1396,15 +1388,20 @@ class InetAddress implements java.io.Serializable { ...@@ -1396,15 +1388,20 @@ class InetAddress implements java.io.Serializable {
cachedLocalHost = null; cachedLocalHost = null;
} }
// we are calling getAddressFromNameService directly // we are calling getAddressesFromNameService directly
// to avoid getting localHost from cache // to avoid getting localHost from cache
if (ret == null) { if (ret == null) {
InetAddress[] localAddrs; InetAddress[] localAddrs;
try { try {
localAddrs = localAddrs =
(InetAddress[]) InetAddress.getAddressFromNameService(local); InetAddress.getAddressesFromNameService(local);
} catch (UnknownHostException uhe) { } catch (UnknownHostException uhe) {
throw new UnknownHostException(local + ": " + uhe.getMessage()); // Rethrow with a more informative error message.
UnknownHostException uhe2 =
new UnknownHostException(local + ": " +
uhe.getMessage());
uhe2.initCause(uhe);
throw uhe2;
} }
cachedLocalHost = localAddrs[0]; cachedLocalHost = localAddrs[0];
cacheTime = now; cacheTime = now;
...@@ -1434,8 +1431,8 @@ class InetAddress implements java.io.Serializable { ...@@ -1434,8 +1431,8 @@ class InetAddress implements java.io.Serializable {
/* /*
* Load and instantiate an underlying impl class * Load and instantiate an underlying impl class
*/ */
static Object loadImpl(String implName) { static InetAddressImpl loadImpl(String implName) {
Object impl; Object impl = null;
/* /*
* Property "impl.prefix" will be prepended to the classname * Property "impl.prefix" will be prepended to the classname
...@@ -1446,7 +1443,6 @@ class InetAddress implements java.io.Serializable { ...@@ -1446,7 +1443,6 @@ class InetAddress implements java.io.Serializable {
*/ */
String prefix = AccessController.doPrivileged( String prefix = AccessController.doPrivileged(
new GetPropertyAction("impl.prefix", "")); new GetPropertyAction("impl.prefix", ""));
impl = null;
try { try {
impl = Class.forName("java.net." + prefix + implName).newInstance(); impl = Class.forName("java.net." + prefix + implName).newInstance();
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
...@@ -1471,7 +1467,7 @@ class InetAddress implements java.io.Serializable { ...@@ -1471,7 +1467,7 @@ class InetAddress implements java.io.Serializable {
} }
} }
return impl; return (InetAddressImpl) impl;
} }
private void readObjectNoData (ObjectInputStream s) throws private void readObjectNoData (ObjectInputStream s) throws
...@@ -1498,13 +1494,8 @@ class InetAddress implements java.io.Serializable { ...@@ -1498,13 +1494,8 @@ class InetAddress implements java.io.Serializable {
class InetAddressImplFactory { class InetAddressImplFactory {
static InetAddressImpl create() { static InetAddressImpl create() {
Object o; return InetAddress.loadImpl(isIPv6Supported() ?
if (isIPv6Supported()) { "Inet6AddressImpl" : "Inet4AddressImpl");
o = InetAddress.loadImpl("Inet6AddressImpl");
} else {
o = InetAddress.loadImpl("Inet4AddressImpl");
}
return (InetAddressImpl)o;
} }
static native boolean isIPv6Supported(); static native boolean isIPv6Supported();
......
/*
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute 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.nio.file;
/**
* Checked exception thrown when a file system loop, or cycle, is encountered.
*
* @since 1.7
* @see Files#walkFileTree
*/
public class FileSystemLoopException
extends FileSystemException
{
private static final long serialVersionUID = 4843039591949217617L;
/**
* Constructs an instance of this class.
*
* @param file
* a string identifying the file causing the cycle or {@code null} if
* not known
*/
public FileSystemLoopException(String file) {
super(file);
}
}
...@@ -38,7 +38,6 @@ import sun.nio.fs.BasicFileAttributesHolder; ...@@ -38,7 +38,6 @@ import sun.nio.fs.BasicFileAttributesHolder;
class FileTreeWalker { class FileTreeWalker {
private final boolean followLinks; private final boolean followLinks;
private final boolean detectCycles;
private final LinkOption[] linkOptions; private final LinkOption[] linkOptions;
private final FileVisitor<? super Path> visitor; private final FileVisitor<? super Path> visitor;
private final int maxDepth; private final int maxDepth;
...@@ -48,17 +47,15 @@ class FileTreeWalker { ...@@ -48,17 +47,15 @@ class FileTreeWalker {
int maxDepth) int maxDepth)
{ {
boolean fl = false; boolean fl = false;
boolean dc = false;
for (FileVisitOption option: options) { for (FileVisitOption option: options) {
// will throw NPE if options contains null
switch (option) { switch (option) {
case FOLLOW_LINKS : fl = true; break; case FOLLOW_LINKS : fl = true; break;
case DETECT_CYCLES : dc = true; break;
default: default:
throw new AssertionError("Should not get here"); throw new AssertionError("Should not get here");
} }
} }
this.followLinks = fl; this.followLinks = fl;
this.detectCycles = fl | dc;
this.linkOptions = (fl) ? new LinkOption[0] : this.linkOptions = (fl) ? new LinkOption[0] :
new LinkOption[] { LinkOption.NOFOLLOW_LINKS }; new LinkOption[] { LinkOption.NOFOLLOW_LINKS };
this.visitor = visitor; this.visitor = visitor;
...@@ -68,13 +65,11 @@ class FileTreeWalker { ...@@ -68,13 +65,11 @@ class FileTreeWalker {
/** /**
* Walk file tree starting at the given file * Walk file tree starting at the given file
*/ */
void walk(Path start) { void walk(Path start) throws IOException {
FileVisitResult result = walk(start, FileVisitResult result = walk(start,
0, 0,
new ArrayList<AncestorDirectory>()); new ArrayList<AncestorDirectory>());
if (result == null) { Objects.nonNull(result, "FileVisitor returned null");
throw new NullPointerException("Visitor returned 'null'");
}
} }
/** /**
...@@ -88,11 +83,8 @@ class FileTreeWalker { ...@@ -88,11 +83,8 @@ class FileTreeWalker {
private FileVisitResult walk(Path file, private FileVisitResult walk(Path file,
int depth, int depth,
List<AncestorDirectory> ancestors) List<AncestorDirectory> ancestors)
throws IOException
{ {
// depth check
if (depth > maxDepth)
return FileVisitResult.CONTINUE;
// if attributes are cached then use them if possible // if attributes are cached then use them if possible
BasicFileAttributes attrs = null; BasicFileAttributes attrs = null;
if ((depth > 0) && if ((depth > 0) &&
...@@ -137,13 +129,13 @@ class FileTreeWalker { ...@@ -137,13 +129,13 @@ class FileTreeWalker {
return visitor.visitFileFailed(file, exc); return visitor.visitFileFailed(file, exc);
} }
// file is not a directory so invoke visitFile method // at maximum depth or file is not a directory
if (!attrs.isDirectory()) { if (depth >= maxDepth || !attrs.isDirectory()) {
return visitor.visitFile(file, attrs); return visitor.visitFile(file, attrs);
} }
// check for cycles // check for cycles when following links
if (detectCycles) { if (followLinks) {
Object key = attrs.fileKey(); Object key = attrs.fileKey();
// if this directory and ancestor has a file key then we compare // if this directory and ancestor has a file key then we compare
...@@ -153,19 +145,23 @@ class FileTreeWalker { ...@@ -153,19 +145,23 @@ class FileTreeWalker {
if (key != null && ancestorKey != null) { if (key != null && ancestorKey != null) {
if (key.equals(ancestorKey)) { if (key.equals(ancestorKey)) {
// cycle detected // cycle detected
return visitor.visitFile(file, attrs); return visitor.visitFileFailed(file,
new FileSystemLoopException(file.toString()));
} }
} else { } else {
boolean isSameFile = false;
try { try {
if (file.isSameFile(ancestor.file())) { isSameFile = file.isSameFile(ancestor.file());
// cycle detected
return visitor.visitFile(file, attrs);
}
} catch (IOException x) { } catch (IOException x) {
// ignore // ignore
} catch (SecurityException x) { } catch (SecurityException x) {
// ignore // ignore
} }
if (isSameFile) {
// cycle detected
return visitor.visitFileFailed(file,
new FileSystemLoopException(file.toString()));
}
} }
} }
...@@ -181,7 +177,7 @@ class FileTreeWalker { ...@@ -181,7 +177,7 @@ class FileTreeWalker {
try { try {
stream = file.newDirectoryStream(); stream = file.newDirectoryStream();
} catch (IOException x) { } catch (IOException x) {
return visitor.preVisitDirectoryFailed(file, x); return visitor.visitFileFailed(file, x);
} catch (SecurityException x) { } catch (SecurityException x) {
// ignore, as per spec // ignore, as per spec
return FileVisitResult.CONTINUE; return FileVisitResult.CONTINUE;
...@@ -192,20 +188,14 @@ class FileTreeWalker { ...@@ -192,20 +188,14 @@ class FileTreeWalker {
// invoke preVisitDirectory and then visit each entry // invoke preVisitDirectory and then visit each entry
try { try {
result = visitor.preVisitDirectory(file); result = visitor.preVisitDirectory(file, attrs);
if (result != FileVisitResult.CONTINUE) { if (result != FileVisitResult.CONTINUE) {
return result; return result;
} }
// if an I/O occurs during iteration then a CME is thrown. We
// need to distinguish this from a CME thrown by the visitor.
boolean inAction = false;
try { try {
for (Path entry: stream) { for (Path entry: stream) {
inAction = true;
result = walk(entry, depth+1, ancestors); result = walk(entry, depth+1, ancestors);
inAction = false;
// returning null will cause NPE to be thrown // returning null will cause NPE to be thrown
if (result == null || result == FileVisitResult.TERMINATE) if (result == null || result == FileVisitResult.TERMINATE)
...@@ -215,17 +205,9 @@ class FileTreeWalker { ...@@ -215,17 +205,9 @@ class FileTreeWalker {
if (result == FileVisitResult.SKIP_SIBLINGS) if (result == FileVisitResult.SKIP_SIBLINGS)
break; break;
} }
} catch (ConcurrentModificationException x) { } catch (DirectoryIteratorException e) {
// if CME thrown because the iteration failed then remember // IOException will be notified to postVisitDirectory
// the IOException so that it is notified to postVisitDirectory ioe = e.getCause();
if (!inAction) {
// iteration failed
Throwable t = x.getCause();
if (t instanceof IOException)
ioe = (IOException)t;
}
if (ioe == null)
throw x;
} }
} finally { } finally {
try { try {
...@@ -238,7 +220,7 @@ class FileTreeWalker { ...@@ -238,7 +220,7 @@ class FileTreeWalker {
} finally { } finally {
// remove key from trail if doing cycle detection // remove key from trail if doing cycle detection
if (detectCycles) { if (followLinks) {
ancestors.remove(ancestors.size()-1); ancestors.remove(ancestors.size()-1);
} }
} }
......
...@@ -37,9 +37,5 @@ public enum FileVisitOption { ...@@ -37,9 +37,5 @@ public enum FileVisitOption {
/** /**
* Follow symbolic links. * Follow symbolic links.
*/ */
FOLLOW_LINKS, FOLLOW_LINKS;
/**
* Detect cycles in the file tree.
*/
DETECT_CYCLES;
} }
...@@ -40,33 +40,28 @@ import java.io.IOException; ...@@ -40,33 +40,28 @@ import java.io.IOException;
* Path start = ... * Path start = ...
* Files.walkFileTree(start, new SimpleFileVisitor&lt;Path&gt;() { * Files.walkFileTree(start, new SimpleFileVisitor&lt;Path&gt;() {
* &#64;Override * &#64;Override
* public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { * public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
* try { * throws IOException
* file.delete(); * {
* } catch (IOException exc) { * file.delete();
* // failed to delete, do error handling here
* }
* return FileVisitResult.CONTINUE; * return FileVisitResult.CONTINUE;
* } * }
* &#64;Override * &#64;Override
* public FileVisitResult postVisitDirectory(Path dir, IOException e) { * public FileVisitResult postVisitDirectory(Path dir, IOException e)
* if (e == null) { * throws IOException
* try { * {
* dir.delete(); * if (e != null) {
* } catch (IOException exc) {
* // failed to delete, do error handling here
* }
* } else {
* // directory iteration failed * // directory iteration failed
* throw e;
* } * }
* dir.delete();
* return FileVisitResult.CONTINUE; * return FileVisitResult.CONTINUE;
* } * }
* }); * });
* </pre> * </pre>
* <p> Furthermore, suppose we want to copy a file tree rooted at a source * <p> Furthermore, suppose we want to copy a file tree to a target location.
* directory to a target location. In that case, symbolic links should be * In that case, symbolic links should be followed and the target directory
* followed and the target directory should be created before the entries in * should be created before the entries in the directory are copied.
* the directory are copied.
* <pre> * <pre>
* final Path source = ... * final Path source = ...
* final Path target = ... * final Path target = ...
...@@ -74,25 +69,21 @@ import java.io.IOException; ...@@ -74,25 +69,21 @@ import java.io.IOException;
* Files.walkFileTree(source, EnumSet.of(FileVisitOption.FOLLOW_LINKS), Integer.MAX_VALUE, * Files.walkFileTree(source, EnumSet.of(FileVisitOption.FOLLOW_LINKS), Integer.MAX_VALUE,
* new SimpleFileVisitor&lt;Path&gt;() { * new SimpleFileVisitor&lt;Path&gt;() {
* &#64;Override * &#64;Override
* public FileVisitResult preVisitDirectory(Path dir) { * public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs)
* throws IOException
* {
* try { * try {
* dir.copyTo(target.resolve(source.relativize(dir))); * dir.copyTo(target.resolve(source.relativize(dir)));
* } catch (FileAlreadyExistsException e) { * } catch (FileAlreadyExistsException e) {
* // ignore * // ignore
* } catch (IOException e) {
* // copy failed, do error handling here
* // skip rest of directory and descendants
* return SKIP_SUBTREE;
* } * }
* return CONTINUE; * return CONTINUE;
* } * }
* &#64;Override * &#64;Override
* public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { * public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
* try { * throws IOException
* file.copyTo(target.resolve(source.relativize(file))); * {
* } catch (IOException e) { * file.copyTo(target.resolve(source.relativize(file)));
* // copy failed, do error handling here
* }
* return CONTINUE; * return CONTINUE;
* } * }
* }); * });
...@@ -114,22 +105,16 @@ public interface FileVisitor<T> { ...@@ -114,22 +105,16 @@ public interface FileVisitor<T> {
* *
* @param dir * @param dir
* a reference to the directory * a reference to the directory
* @param attrs
* the directory's basic attributes
* *
* @return the visit result * @return the visit result
*/
FileVisitResult preVisitDirectory(T dir);
/**
* Invoked for a directory that could not be opened.
* *
* @param dir * @throws IOException
* a reference to the directory * if an I/O error occurs
* @param exc
* the I/O exception thrown from the attempt to open the directory
*
* @return the visit result
*/ */
FileVisitResult preVisitDirectoryFailed(T dir, IOException exc); FileVisitResult preVisitDirectory(T dir, BasicFileAttributes attrs)
throws IOException;
/** /**
* Invoked for a file in a directory. * Invoked for a file in a directory.
...@@ -140,21 +125,30 @@ public interface FileVisitor<T> { ...@@ -140,21 +125,30 @@ public interface FileVisitor<T> {
* the file's basic attributes * the file's basic attributes
* *
* @return the visit result * @return the visit result
*
* @throws IOException
* if an I/O error occurs
*/ */
FileVisitResult visitFile(T file, BasicFileAttributes attrs); FileVisitResult visitFile(T file, BasicFileAttributes attrs)
throws IOException;
/** /**
* Invoked for a file when its basic file attributes could not be read. * Invoked for a file that could not be visited. This method is invoked
* if the file's attributes could not be read, the file is a directory
* that could not be opened, and other reasons.
* *
* @param file * @param file
* a reference to the file * a reference to the file
* @param exc * @param exc
* the I/O exception thrown from the attempt to read the file * the I/O exception that prevented the file from being visited
* attributes
* *
* @return the visit result * @return the visit result
*
* @throws IOException
* if an I/O error occurs
*/ */
FileVisitResult visitFileFailed(T file, IOException exc); FileVisitResult visitFileFailed(T file, IOException exc)
throws IOException;
/** /**
* Invoked for a directory after entries in the directory, and all of their * Invoked for a directory after entries in the directory, and all of their
...@@ -171,6 +165,10 @@ public interface FileVisitor<T> { ...@@ -171,6 +165,10 @@ public interface FileVisitor<T> {
* of the directory to complete prematurely * of the directory to complete prematurely
* *
* @return the visit result * @return the visit result
*
* @throws IOException
* if an I/O error occurs
*/ */
FileVisitResult postVisitDirectory(T dir, IOException exc); FileVisitResult postVisitDirectory(T dir, IOException exc)
throws IOException;
} }
...@@ -135,9 +135,9 @@ public final class Files { ...@@ -135,9 +135,9 @@ public final class Files {
* FileVisitor} invoked for each file encountered. File tree traversal * FileVisitor} invoked for each file encountered. File tree traversal
* completes when all accessible files in the tree have been visited, or a * completes when all accessible files in the tree have been visited, or a
* visit method returns a result of {@link FileVisitResult#TERMINATE * visit method returns a result of {@link FileVisitResult#TERMINATE
* TERMINATE}. Where a visit method terminates due an uncaught error or * TERMINATE}. Where a visit method terminates due an {@code IOException},
* runtime exception then the traversal is terminated and the error or * an uncaught error, or runtime exception, then the traversal is terminated
* exception is propagated to the caller of this method. * and the error or exception is propagated to the caller of this method.
* *
* <p> For each file encountered this method attempts to gets its {@link * <p> For each file encountered this method attempts to gets its {@link
* java.nio.file.attribute.BasicFileAttributes}. If the file is not a * java.nio.file.attribute.BasicFileAttributes}. If the file is not a
...@@ -146,12 +146,10 @@ public final class Files { ...@@ -146,12 +146,10 @@ public final class Files {
* due to an I/O exception, then the {@link FileVisitor#visitFileFailed * due to an I/O exception, then the {@link FileVisitor#visitFileFailed
* visitFileFailed} method is invoked with the I/O exception. * visitFileFailed} method is invoked with the I/O exception.
* *
* <p> Where the file is a directory, this method attempts to open it by * <p> Where the file is a directory, and the directory could not be opened,
* invoking its {@link Path#newDirectoryStream newDirectoryStream} method. * then the {@code visitFileFailed} method is invoked with the I/O exception,
* Where the directory could not be opened, due to an {@code IOException}, * after which, the file tree walk continues, by default, at the next
* then the {@link FileVisitor#preVisitDirectoryFailed preVisitDirectoryFailed} * <em>sibling</em> of the directory.
* method is invoked with the I/O exception, after which, the file tree walk
* continues, by default, at the next <em>sibling</em> of the directory.
* *
* <p> Where the directory is opened successfully, then the entries in the * <p> Where the directory is opened successfully, then the entries in the
* directory, and their <em>descendants</em> are visited. When all entries * directory, and their <em>descendants</em> are visited. When all entries
...@@ -171,26 +169,25 @@ public final class Files { ...@@ -171,26 +169,25 @@ public final class Files {
* method is invoked as specified above). * method is invoked as specified above).
* *
* <p> If the {@code options} parameter contains the {@link * <p> If the {@code options} parameter contains the {@link
* FileVisitOption#DETECT_CYCLES DETECT_CYCLES} or {@link * FileVisitOption#FOLLOW_LINKS FOLLOW_LINKS} option then this method keeps
* FileVisitOption#FOLLOW_LINKS FOLLOW_LINKS} options then this method keeps
* track of directories visited so that cycles can be detected. A cycle * track of directories visited so that cycles can be detected. A cycle
* arises when there is an entry in a directory that is an ancestor of the * arises when there is an entry in a directory that is an ancestor of the
* directory. Cycle detection is done by recording the {@link * directory. Cycle detection is done by recording the {@link
* java.nio.file.attribute.BasicFileAttributes#fileKey file-key} of directories, * java.nio.file.attribute.BasicFileAttributes#fileKey file-key} of directories,
* or if file keys are not available, by invoking the {@link Path#isSameFile * or if file keys are not available, by invoking the {@link Path#isSameFile
* isSameFile} method to test if a directory is the same file as an * isSameFile} method to test if a directory is the same file as an
* ancestor. When a cycle is detected the {@link FileVisitor#visitFile * ancestor. When a cycle is detected it is treated as an I/O error, and the
* visitFile} is invoked with the attributes of the directory. The {@link * {@link FileVisitor#visitFileFailed visitFileFailed} method is invoked with
* java.nio.file.attribute.BasicFileAttributes#isDirectory isDirectory} * an instance of {@link FileSystemLoopException}.
* method may be used to test if the file is a directory and that a cycle is
* detected. The {@code preVisitDirectory} and {@code postVisitDirectory}
* methods are not invoked.
* *
* <p> The {@code maxDepth} parameter is the maximum number of levels of * <p> The {@code maxDepth} parameter is the maximum number of levels of
* directories to visit. A value of {@code 0} means that only the starting * directories to visit. A value of {@code 0} means that only the starting
* file is visited, unless denied by the security manager. A value of * file is visited, unless denied by the security manager. A value of
* {@link Integer#MAX_VALUE MAX_VALUE} may be used to indicate that all * {@link Integer#MAX_VALUE MAX_VALUE} may be used to indicate that all
* levels should be visited. * levels should be visited. The {@code visitFile} method is invoked for all
* files, including directories, encountered at {@code maxDepth}, unless the
* basic file attributes cannot be read, in which case the {@code
* visitFileFailed} method is invoked.
* *
* <p> If a visitor returns a result of {@code null} then {@code * <p> If a visitor returns a result of {@code null} then {@code
* NullPointerException} is thrown. * NullPointerException} is thrown.
...@@ -215,11 +212,14 @@ public final class Files { ...@@ -215,11 +212,14 @@ public final class Files {
* In the case of the default provider, the {@link * In the case of the default provider, the {@link
* SecurityManager#checkRead(String) checkRead} method is invoked * SecurityManager#checkRead(String) checkRead} method is invoked
* to check read access to the directory. * to check read access to the directory.
* @throws IOException
* If an I/O error is thrown by a visitor method
*/ */
public static void walkFileTree(Path start, public static void walkFileTree(Path start,
Set<FileVisitOption> options, Set<FileVisitOption> options,
int maxDepth, int maxDepth,
FileVisitor<? super Path> visitor) FileVisitor<? super Path> visitor)
throws IOException
{ {
if (maxDepth < 0) if (maxDepth < 0)
throw new IllegalArgumentException("'maxDepth' is negative"); throw new IllegalArgumentException("'maxDepth' is negative");
...@@ -245,8 +245,12 @@ public final class Files { ...@@ -245,8 +245,12 @@ public final class Files {
* In the case of the default provider, the {@link * In the case of the default provider, the {@link
* SecurityManager#checkRead(String) checkRead} method is invoked * SecurityManager#checkRead(String) checkRead} method is invoked
* to check read access to the directory. * to check read access to the directory.
* @throws IOException
* If an I/O error is thrown by a visitor method
*/ */
public static void walkFileTree(Path start, FileVisitor<? super Path> visitor) { public static void walkFileTree(Path start, FileVisitor<? super Path> visitor)
throws IOException
{
walkFileTree(start, walkFileTree(start,
EnumSet.noneOf(FileVisitOption.class), EnumSet.noneOf(FileVisitOption.class),
Integer.MAX_VALUE, Integer.MAX_VALUE,
......
...@@ -27,7 +27,7 @@ package java.nio.file; ...@@ -27,7 +27,7 @@ package java.nio.file;
import java.nio.file.attribute.BasicFileAttributes; import java.nio.file.attribute.BasicFileAttributes;
import java.io.IOException; import java.io.IOException;
import java.io.IOError; import java.util.Objects;
/** /**
* A simple visitor of files with default behavior to visit all files and to * A simple visitor of files with default behavior to visit all files and to
...@@ -47,14 +47,6 @@ public class SimpleFileVisitor<T> implements FileVisitor<T> { ...@@ -47,14 +47,6 @@ public class SimpleFileVisitor<T> implements FileVisitor<T> {
protected SimpleFileVisitor() { protected SimpleFileVisitor() {
} }
/**
* Throws NullPointerException if obj is null.
*/
private static void checkNotNull(Object obj) {
if (obj == null)
throw new NullPointerException();
}
/** /**
* Invoked for a directory before entries in the directory are visited. * Invoked for a directory before entries in the directory are visited.
* *
...@@ -62,28 +54,14 @@ public class SimpleFileVisitor<T> implements FileVisitor<T> { ...@@ -62,28 +54,14 @@ public class SimpleFileVisitor<T> implements FileVisitor<T> {
* CONTINUE}. * CONTINUE}.
*/ */
@Override @Override
public FileVisitResult preVisitDirectory(T dir) { public FileVisitResult preVisitDirectory(T dir, BasicFileAttributes attrs)
checkNotNull(dir); throws IOException
{
Objects.nonNull(dir);
Objects.nonNull(attrs);
return FileVisitResult.CONTINUE; return FileVisitResult.CONTINUE;
} }
/**
* Invoked for a directory that could not be opened.
*
* <p> Unless overridden, this method throws {@link IOError} with the I/O
* exception as cause.
*
* @throws IOError
* with the I/O exception thrown when the attempt to open the
* directory failed
*/
@Override
public FileVisitResult preVisitDirectoryFailed(T dir, IOException exc) {
checkNotNull(dir);
checkNotNull(exc);
throw new IOError(exc);
}
/** /**
* Invoked for a file in a directory. * Invoked for a file in a directory.
* *
...@@ -91,27 +69,26 @@ public class SimpleFileVisitor<T> implements FileVisitor<T> { ...@@ -91,27 +69,26 @@ public class SimpleFileVisitor<T> implements FileVisitor<T> {
* CONTINUE}. * CONTINUE}.
*/ */
@Override @Override
public FileVisitResult visitFile(T file, BasicFileAttributes attrs) { public FileVisitResult visitFile(T file, BasicFileAttributes attrs)
checkNotNull(file); throws IOException
checkNotNull(attrs); {
Objects.nonNull(file);
Objects.nonNull(attrs);
return FileVisitResult.CONTINUE; return FileVisitResult.CONTINUE;
} }
/** /**
* Invoked for a file when its basic file attributes could not be read. * Invoked for a file that could not be visited.
*
* <p> Unless overridden, this method throws {@link IOError} with the I/O
* exception as cause.
* *
* @throws IOError * <p> Unless overridden, this method re-throws the I/O exception that prevented
* with the I/O exception thrown when the attempt to read the file * the file from being visited.
* attributes failed
*/ */
@Override @Override
public FileVisitResult visitFileFailed(T file, IOException exc) { public FileVisitResult visitFileFailed(T file, IOException exc)
checkNotNull(file); throws IOException
checkNotNull(exc); {
throw new IOError(exc); Objects.nonNull(file);
throw exc;
} }
/** /**
...@@ -120,18 +97,16 @@ public class SimpleFileVisitor<T> implements FileVisitor<T> { ...@@ -120,18 +97,16 @@ public class SimpleFileVisitor<T> implements FileVisitor<T> {
* *
* <p> Unless overridden, this method returns {@link FileVisitResult#CONTINUE * <p> Unless overridden, this method returns {@link FileVisitResult#CONTINUE
* CONTINUE} if the directory iteration completes without an I/O exception; * CONTINUE} if the directory iteration completes without an I/O exception;
* otherwise this method throws {@link IOError} with the I/O exception as * otherwise this method re-throws the I/O exception that caused the iteration
* cause. * of the directory to terminate prematurely.
*
* @throws IOError
* with the I/O exception thrown when iteration of the directory
* completed prematurely due to an I/O error
*/ */
@Override @Override
public FileVisitResult postVisitDirectory(T dir, IOException exc) { public FileVisitResult postVisitDirectory(T dir, IOException exc)
checkNotNull(dir); throws IOException
{
Objects.nonNull(dir);
if (exc != null) if (exc != null)
throw new IOError(exc); throw exc;
return FileVisitResult.CONTINUE; return FileVisitResult.CONTINUE;
} }
} }
...@@ -3643,7 +3643,7 @@ public interface DatabaseMetaData extends Wrapper { ...@@ -3643,7 +3643,7 @@ public interface DatabaseMetaData extends Wrapper {
/** /**
* Retrieves whether a generated key will always be returned if the column * Retrieves whether a generated key will always be returned if the column
* name(s) or indexe(s) specified for the auto generated key column(s) * name(s) or index(es) specified for the auto generated key column(s)
* are valid and the statement succeeds. The key that is returned may or * are valid and the statement succeeds. The key that is returned may or
* may not be based on the column(s) for the auto generated key. * may not be based on the column(s) for the auto generated key.
* Consult your JDBC driver documentation for additional details. * Consult your JDBC driver documentation for additional details.
......
...@@ -1051,9 +1051,9 @@ public interface Statement extends Wrapper, AutoCloseable { ...@@ -1051,9 +1051,9 @@ public interface Statement extends Wrapper, AutoCloseable {
/** /**
* Returns a value indicating whether this {@code Statement} will be * Returns a value indicating whether this {@code Statement} will be
* closed when all dependent objects such as resultsets are closed. * closed when all its dependent result sets are closed.
* @return {@code true} if the {@code Statement} will be closed when all * @return {@code true} if the {@code Statement} will be closed when all
* of its dependent objects are closed; {@code false} otherwise * of its dependent result sets are closed; {@code false} otherwise
* @throws SQLException if this method is called on a closed * @throws SQLException if this method is called on a closed
* {@code Statement} * {@code Statement}
* @since 1.7 * @since 1.7
......
...@@ -569,6 +569,9 @@ public final class Locale implements Cloneable, Serializable { ...@@ -569,6 +569,9 @@ public final class Locale implements Cloneable, Serializable {
* @exception NullPointerException thrown if any argument is null. * @exception NullPointerException thrown if any argument is null.
*/ */
public Locale(String language, String country, String variant) { public Locale(String language, String country, String variant) {
if (language== null || country == null || variant == null) {
throw new NullPointerException();
}
_baseLocale = BaseLocale.getInstance(convertOldISOCodes(language), "", country, variant); _baseLocale = BaseLocale.getInstance(convertOldISOCodes(language), "", country, variant);
_extensions = getCompatibilityExtensions(language, "", country, variant); _extensions = getCompatibilityExtensions(language, "", country, variant);
} }
......
...@@ -292,16 +292,6 @@ public abstract class ResourceBundle { ...@@ -292,16 +292,6 @@ public abstract class ResourceBundle {
private static final ConcurrentMap<CacheKey, BundleReference> cacheList private static final ConcurrentMap<CacheKey, BundleReference> cacheList
= new ConcurrentHashMap<CacheKey, BundleReference>(INITIAL_CACHE_SIZE); = new ConcurrentHashMap<CacheKey, BundleReference>(INITIAL_CACHE_SIZE);
/**
* This ConcurrentMap is used to keep multiple threads from loading the
* same bundle concurrently. The table entries are <CacheKey, Thread>
* where CacheKey is the key for the bundle that is under construction
* and Thread is the thread that is constructing the bundle.
* This list is manipulated in findBundleInCache and putBundleInCache.
*/
private static final ConcurrentMap<CacheKey, Thread> underConstruction
= new ConcurrentHashMap<CacheKey, Thread>();
/** /**
* Queue for reference objects referring to class loaders or bundles. * Queue for reference objects referring to class loaders or bundles.
*/ */
...@@ -1381,7 +1371,7 @@ public abstract class ResourceBundle { ...@@ -1381,7 +1371,7 @@ public abstract class ResourceBundle {
boolean expiredBundle = false; boolean expiredBundle = false;
// First, look up the cache to see if it's in the cache, without // First, look up the cache to see if it's in the cache, without
// declaring beginLoading. // attempting to load bundle.
cacheKey.setLocale(targetLocale); cacheKey.setLocale(targetLocale);
ResourceBundle bundle = findBundleInCache(cacheKey, control); ResourceBundle bundle = findBundleInCache(cacheKey, control);
if (isValidBundle(bundle)) { if (isValidBundle(bundle)) {
...@@ -1408,56 +1398,25 @@ public abstract class ResourceBundle { ...@@ -1408,56 +1398,25 @@ public abstract class ResourceBundle {
CacheKey constKey = (CacheKey) cacheKey.clone(); CacheKey constKey = (CacheKey) cacheKey.clone();
try { try {
// Try declaring loading. If beginLoading() returns true, bundle = loadBundle(cacheKey, formats, control, expiredBundle);
// then we can proceed. Otherwise, we need to take a look if (bundle != null) {
// at the cache again to see if someone else has loaded if (bundle.parent == null) {
// the bundle and put it in the cache while we've been bundle.setParent(parent);
// waiting for other loading work to complete.
while (!beginLoading(constKey)) {
bundle = findBundleInCache(cacheKey, control);
if (bundle == null) {
continue;
}
if (bundle == NONEXISTENT_BUNDLE) {
// If the bundle is NONEXISTENT_BUNDLE, the bundle doesn't exist.
return parent;
}
expiredBundle = bundle.expired;
if (!expiredBundle) {
if (bundle.parent == parent) {
return bundle;
}
BundleReference bundleRef = cacheList.get(cacheKey);
if (bundleRef != null && bundleRef.get() == bundle) {
cacheList.remove(cacheKey, bundleRef);
}
} }
bundle.locale = targetLocale;
bundle = putBundleInCache(cacheKey, bundle, control);
return bundle;
} }
try { // Put NONEXISTENT_BUNDLE in the cache as a mark that there's no bundle
bundle = loadBundle(cacheKey, formats, control, expiredBundle); // instance for the locale.
if (bundle != null) { putBundleInCache(cacheKey, NONEXISTENT_BUNDLE, control);
if (bundle.parent == null) {
bundle.setParent(parent);
}
bundle.locale = targetLocale;
bundle = putBundleInCache(cacheKey, bundle, control);
return bundle;
}
// Put NONEXISTENT_BUNDLE in the cache as a mark that there's no bundle
// instance for the locale.
putBundleInCache(cacheKey, NONEXISTENT_BUNDLE, control);
} finally {
endLoading(constKey);
}
} finally { } finally {
if (constKey.getCause() instanceof InterruptedException) { if (constKey.getCause() instanceof InterruptedException) {
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
} }
} }
} }
assert underConstruction.get(cacheKey) != Thread.currentThread();
return parent; return parent;
} }
...@@ -1465,7 +1424,6 @@ public abstract class ResourceBundle { ...@@ -1465,7 +1424,6 @@ public abstract class ResourceBundle {
List<String> formats, List<String> formats,
Control control, Control control,
boolean reload) { boolean reload) {
assert underConstruction.get(cacheKey) == Thread.currentThread();
// Here we actually load the bundle in the order of formats // Here we actually load the bundle in the order of formats
// specified by the getFormats() value. // specified by the getFormats() value.
...@@ -1498,7 +1456,6 @@ public abstract class ResourceBundle { ...@@ -1498,7 +1456,6 @@ public abstract class ResourceBundle {
break; break;
} }
} }
assert underConstruction.get(cacheKey) == Thread.currentThread();
return bundle; return bundle;
} }
...@@ -1529,57 +1486,6 @@ public abstract class ResourceBundle { ...@@ -1529,57 +1486,6 @@ public abstract class ResourceBundle {
return true; return true;
} }
/**
* Declares the beginning of actual resource bundle loading. This method
* returns true if the declaration is successful and the current thread has
* been put in underConstruction. If someone else has already begun
* loading, this method waits until that loading work is complete and
* returns false.
*/
private static final boolean beginLoading(CacheKey constKey) {
Thread me = Thread.currentThread();
Thread worker;
// We need to declare by putting the current Thread (me) to
// underConstruction that we are working on loading the specified
// resource bundle. If we are already working the loading, it means
// that the resource loading requires a recursive call. In that case,
// we have to proceed. (4300693)
if (((worker = underConstruction.putIfAbsent(constKey, me)) == null)
|| worker == me) {
return true;
}
// If someone else is working on the loading, wait until
// the Thread finishes the bundle loading.
synchronized (worker) {
while (underConstruction.get(constKey) == worker) {
try {
worker.wait();
} catch (InterruptedException e) {
// record the interruption
constKey.setCause(e);
}
}
}
return false;
}
/**
* Declares the end of the bundle loading. This method calls notifyAll
* for those who are waiting for this completion.
*/
private static final void endLoading(CacheKey constKey) {
// Remove this Thread from the underConstruction map and wake up
// those who have been waiting for me to complete this bundle
// loading.
Thread me = Thread.currentThread();
assert (underConstruction.get(constKey) == me);
underConstruction.remove(constKey);
synchronized (me) {
me.notifyAll();
}
}
/** /**
* Throw a MissingResourceException with proper message * Throw a MissingResourceException with proper message
*/ */
......
...@@ -42,7 +42,6 @@ import java.util.Collections; ...@@ -42,7 +42,6 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.concurrent.AbstractExecutorService; import java.util.concurrent.AbstractExecutorService;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future; import java.util.concurrent.Future;
import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.RejectedExecutionException;
...@@ -823,15 +822,13 @@ public class ForkJoinPool extends AbstractExecutorService { ...@@ -823,15 +822,13 @@ public class ForkJoinPool extends AbstractExecutorService {
(workerCounts & RUNNING_COUNT_MASK) <= 1); (workerCounts & RUNNING_COUNT_MASK) <= 1);
long startTime = untimed? 0 : System.nanoTime(); long startTime = untimed? 0 : System.nanoTime();
Thread.interrupted(); // clear/ignore interrupt Thread.interrupted(); // clear/ignore interrupt
if (eventCount != ec || w.runState != 0 || if (eventCount != ec || w.isTerminating())
runState >= TERMINATING) // recheck after clear break; // recheck after clear
break;
if (untimed) if (untimed)
LockSupport.park(w); LockSupport.park(w);
else { else {
LockSupport.parkNanos(w, SHRINK_RATE_NANOS); LockSupport.parkNanos(w, SHRINK_RATE_NANOS);
if (eventCount != ec || w.runState != 0 || if (eventCount != ec || w.isTerminating())
runState >= TERMINATING)
break; break;
if (System.nanoTime() - startTime >= SHRINK_RATE_NANOS) if (System.nanoTime() - startTime >= SHRINK_RATE_NANOS)
tryShutdownUnusedWorker(ec); tryShutdownUnusedWorker(ec);
...@@ -899,16 +896,23 @@ public class ForkJoinPool extends AbstractExecutorService { ...@@ -899,16 +896,23 @@ public class ForkJoinPool extends AbstractExecutorService {
UNSAFE.compareAndSwapInt(this, workerCountsOffset, wc, UNSAFE.compareAndSwapInt(this, workerCountsOffset, wc,
wc + (ONE_RUNNING|ONE_TOTAL))) { wc + (ONE_RUNNING|ONE_TOTAL))) {
ForkJoinWorkerThread w = null; ForkJoinWorkerThread w = null;
Throwable fail = null;
try { try {
w = factory.newThread(this); w = factory.newThread(this);
} finally { // adjust on null or exceptional factory return } catch (Throwable ex) {
if (w == null) { fail = ex;
decrementWorkerCounts(ONE_RUNNING, ONE_TOTAL);
tryTerminate(false); // handle failure during shutdown
}
} }
if (w == null) if (w == null) { // null or exceptional factory return
decrementWorkerCounts(ONE_RUNNING, ONE_TOTAL);
tryTerminate(false); // handle failure during shutdown
// If originating from an external caller,
// propagate exception, else ignore
if (fail != null && runState < TERMINATING &&
!(Thread.currentThread() instanceof
ForkJoinWorkerThread))
UNSAFE.throwException(fail);
break; break;
}
w.start(recordWorker(w), ueh); w.start(recordWorker(w), ueh);
if ((workerCounts >>> TOTAL_COUNT_SHIFT) >= pc) { if ((workerCounts >>> TOTAL_COUNT_SHIFT) >= pc) {
int c; // advance event count int c; // advance event count
...@@ -997,8 +1001,12 @@ public class ForkJoinPool extends AbstractExecutorService { ...@@ -997,8 +1001,12 @@ public class ForkJoinPool extends AbstractExecutorService {
boolean active = w.active; boolean active = w.active;
boolean inactivate = false; boolean inactivate = false;
int pc = parallelism; int pc = parallelism;
int rs; while (w.runState == 0) {
while (w.runState == 0 && (rs = runState) < TERMINATING) { int rs = runState;
if (rs >= TERMINATING) { // propagate shutdown
w.shutdown();
break;
}
if ((inactivate || (active && (rs & ACTIVE_COUNT_MASK) >= pc)) && if ((inactivate || (active && (rs & ACTIVE_COUNT_MASK) >= pc)) &&
UNSAFE.compareAndSwapInt(this, runStateOffset, rs, rs - 1)) UNSAFE.compareAndSwapInt(this, runStateOffset, rs, rs - 1))
inactivate = active = w.active = false; inactivate = active = w.active = false;
...@@ -1126,6 +1134,7 @@ public class ForkJoinPool extends AbstractExecutorService { ...@@ -1126,6 +1134,7 @@ public class ForkJoinPool extends AbstractExecutorService {
return true; return true;
} }
/** /**
* Actions on transition to TERMINATING * Actions on transition to TERMINATING
* *
...@@ -1149,7 +1158,7 @@ public class ForkJoinPool extends AbstractExecutorService { ...@@ -1149,7 +1158,7 @@ public class ForkJoinPool extends AbstractExecutorService {
if (passes > 0 && !w.isTerminated()) { if (passes > 0 && !w.isTerminated()) {
w.cancelTasks(); w.cancelTasks();
LockSupport.unpark(w); LockSupport.unpark(w);
if (passes > 1) { if (passes > 1 && !w.isInterrupted()) {
try { try {
w.interrupt(); w.interrupt();
} catch (SecurityException ignore) { } catch (SecurityException ignore) {
...@@ -1725,6 +1734,13 @@ public class ForkJoinPool extends AbstractExecutorService { ...@@ -1725,6 +1734,13 @@ public class ForkJoinPool extends AbstractExecutorService {
return (runState & (TERMINATING|TERMINATED)) == TERMINATING; return (runState & (TERMINATING|TERMINATED)) == TERMINATING;
} }
/**
* Returns true if terminating or terminated. Used by ForkJoinWorkerThread.
*/
final boolean isAtLeastTerminating() {
return runState >= TERMINATING;
}
/** /**
* Returns {@code true} if this pool has been shut down. * Returns {@code true} if this pool has been shut down.
* *
......
...@@ -778,11 +778,20 @@ public class ForkJoinWorkerThread extends Thread { ...@@ -778,11 +778,20 @@ public class ForkJoinWorkerThread extends Thread {
// status check methods used mainly by ForkJoinPool // status check methods used mainly by ForkJoinPool
final boolean isRunning() { return runState == 0; } final boolean isRunning() { return runState == 0; }
final boolean isTerminating() { return (runState & TERMINATING) != 0; }
final boolean isTerminated() { return (runState & TERMINATED) != 0; } final boolean isTerminated() { return (runState & TERMINATED) != 0; }
final boolean isSuspended() { return (runState & SUSPENDED) != 0; } final boolean isSuspended() { return (runState & SUSPENDED) != 0; }
final boolean isTrimmed() { return (runState & TRIMMED) != 0; } final boolean isTrimmed() { return (runState & TRIMMED) != 0; }
final boolean isTerminating() {
if ((runState & TERMINATING) != 0)
return true;
if (pool.isAtLeastTerminating()) { // propagate pool state
shutdown();
return true;
}
return false;
}
/** /**
* Sets state to TERMINATING. Does NOT unpark or interrupt * Sets state to TERMINATING. Does NOT unpark or interrupt
* to wake up if currently blocked. Callers must do so if desired. * to wake up if currently blocked. Callers must do so if desired.
......
此差异已折叠。
com.sun.nio.zipfs.ZipFileSystemProvider
com.sun.nio.zipfs.JarFileSystemProvider
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册